Adding text and UI manager types
[clg] / gtk / gtk.lisp
index 24d9ff2..e62f111 100644 (file)
 ;; License along with this library; if not, write to the Free Software
 ;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
-;; $Id: gtk.lisp,v 1.17 2004/11/07 17:55:29 espen Exp $
+;; $Id: gtk.lisp,v 1.20 2004/12/04 00:34:49 espen Exp $
 
 
 (in-package "GTK")
 
 ;;; Gtk version
 
-(defbinding check-version () string
+(defbinding check-version () (copy-of string)
   (required-major unsigned-int)
   (required-minor unsigned-int)
   (required-micro unsigned-int))
@@ -39,7 +39,7 @@
        (format nil "Gtk+ v~A.~A" major minor) 
       (format nil "Gtk+ v~A.~A.~A" major minor micro))))
 
-(defbinding get-default-language () string)
+(defbinding get-default-language () (copy-of pango:language))
 
 
 ;;;; Initalization
   (unless model
     (setf 
      (combo-box-model combo-box) 
-     (make-instance 'list-store :columns '(string)))
+     (make-instance 'list-store :column-types '(string)))
     (unless (typep combo-box 'combo-box-entry)
       (let ((cell (make-instance 'cell-renderer-text)))
        (cell-layout-pack combo-box cell :expand t)
 
 ;;; Window
 
+(defmethod initialize-instance ((window window) &rest initargs &key accel-group)
+  (declare (ignore accel-group))
+  (call-next-method)
+  (mapc #'(lambda (accel-group)
+           (window-add-accel-group window accel-group))
+        (get-all initargs :accel-group)))
+
+
 (defbinding window-set-wmclass () nil
   (window window)
   (wmclass-name string)
 
 ;(defbinding window-set-geometry-hints)
 
-(defbinding window-list-toplevels () (glist window))
+(defbinding window-list-toplevels () (glist (copy-of window))
+  "Returns a list of all existing toplevel windows.")
 
 (defbinding window-add-mnemonic (window key target) nil
   (window window)
   ((%notebook-child notebook page) widget))
 
 (defbinding (notebook-tab-label-text "gtk_notebook_get_tab_label_text")
-    (notebook page) string
+    (notebook page) (copy-of string)
   (notebook notebook)
   ((%notebook-child notebook page) widget))
 
   ((%notebook-child notebook page) widget))
 
 (defbinding (notebook-menu-label-text "gtk_notebook_get_menu_label_text")
-    (notebook page) string
+    (notebook page) (copy-of string)
   (notebook notebook)
   ((%notebook-child notebook page) widget))
 
 
 ;;; Stock items
 
-(defbinding stock-lookup () boolean
-  (stock-id string)
-  (stock-item stock-item :out))
-  
+(defbinding %stock-item-copy () pointer
+  (location pointer))
+
+(defbinding %stock-item-free () nil
+  (location pointer))
 
+(defmethod reference-foreign ((class (eql (find-class 'stock-item))) location)
+  (%stock-item-copy location))
+
+(defmethod unreference-foreign ((class (eql (find-class 'stock-item))) location)
+  (%stock-item-free location))
+
+(defbinding stock-add (stock-item) nil
+  (stock-item stock-item)
+  (1 unsigned-int))
+
+(defbinding stock-list-ids () (gslist string))
+
+(defbinding %stock-lookup () boolean
+  (stock-id string)
+  (location pointer))
+
+(defun stock-lookup (stock-id)
+  (let ((location 
+        (allocate-memory (proxy-instance-size (find-class 'stock-item)))))
+    (unwind-protect
+       (when (%stock-lookup stock-id location)
+         (ensure-proxy-instance 'stock-item (%stock-item-copy location)))
+       (deallocate-memory location))))
 
 
 ;;; Tooltips