gtk/gtktree.lisp: Fixing string representations of tree paths.
[clg] / gtk / gtktree.lisp
index bf47a0f..d884dd0 100644 (file)
@@ -20,7 +20,7 @@
 ;; TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 ;; SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
-;; $Id: gtktree.lisp,v 1.30 2007-09-06 14:32:03 espen Exp $
+;; $Id: gtktree.lisp,v 1.34 2008-04-11 20:53:32 espen Exp $
 
 
 (in-package "GTK")
 
 (defun ensure-tree-path (path)
   (etypecase path
-    (string (coerce (clg-utils:split-string path :delimiter #\:) 'vector))
+    (string (map 'vector #'parse-integer
+                (clg-utils:split-string path :delimiter #\:)))
     (vector path)))
 
 
 (defmethod allocate-foreign ((reference tree-row-reference) &key model path)
   (%tree-row-reference-new model path))
 
-(defbinding tree-row-reference-get-path () tree-path
+(defbinding tree-row-reference-get-path () (or null tree-path)
   (reference tree-row-reference))
 
 (defbinding (tree-row-reference-valid-p "gtk_tree_row_reference_valid") () boolean
 (defbinding tree-model-get-iter (model path &optional (iter (make-instance 'tree-iter))) boolean
   (model tree-model)
   (iter tree-iter :in/return)
-  (path tree-path))
+  ((ensure-tree-path path) tree-path))
+
+#?(pkg-exists-p "gtk+-2.0" :atleast-version "2.12.0")
+(defmethod allocate-foreign ((tree-iter tree-iter) &rest initargs)
+  (declare (ignore initargs))
+  (let ((size (foreign-size (class-of tree-iter))))
+    (slice-alloc size)))
  
 (defun ensure-tree-iter (model row)
   (etypecase row
     (tree-iter row)
-    (tree-path 
+    ((or tree-path string)
      (multiple-value-bind (valid-p iter) (tree-model-get-iter model row)
        (if valid-p
           iter
 
 (defbinding %tree-selection-select-iter () nil
   (tree-selection tree-selection)
-  (tree-path tree-path))
+  (tree-iter tree-iter))
 
 (defbinding %tree-selection-unselect-iter () nil
   (tree-selection tree-selection)
-  (tree-path tree-path))
+  (tree-iter tree-iter))
 
 (defbinding %tree-selection-iter-is-selected () boolean
   (tree-selection tree-selection)
-  (tree-path tree-path))
+  (tree-iter tree-iter))
 
 (defun tree-selection-select (selection row)
   (etypecase row
@@ -841,6 +848,7 @@ then the model will sort using this function."
   (column tree-view-column)
   (base-column (or null tree-view-column)))
 
+#+(or)
 (define-callback-setter tree-view-set-column-drag-function tree-view boolean
   (column tree-view-column) 
   (prev tree-view-column)