chiark / gitweb /
Bug fix in TREE-MODEL-ROW-DATA
[clg] / gtk / gtk.lisp
index 16b65303eee0f17e77874a964c75d8797f3a27fc..209fdb2e6401363dda0be4ab553d2b8419230e3d 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: gtk.lisp,v 1.77 2007-07-05 11:34:27 espen Exp $
+;; $Id: gtk.lisp,v 1.82 2007-08-20 10:54:38 espen Exp $
 
 
 (in-package "GTK")
@@ -329,7 +329,7 @@ (defun accel-groups-activate (object accelerator)
   (multiple-value-bind (key modifiers) (parse-accelerator accelerator)
     (%accel-groups-activate object key modifiers)))
 
-(defbinding accel-groups-from-object () (gslist accel-groups)
+(defbinding accel-groups-from-object () (gslist accel-group)
   (object gobject))
 
 (defbinding accelerator-valid-p (key &optional modifiers) boolean
@@ -552,7 +552,7 @@   (defun assistant-prepend-page (assistant page &rest child-args)
   (define-callback-marshal %assistant-page-func-callback int
     ((current-page int)))
 
-  (defbinding assistant-set-forward-func (assistant function) nil
+  (defbinding assistant-set-forward-page-func (assistant function) nil
     (assistant assistant)
     (%assistant-page-func-callback callback)
     ((register-callback-function function) pointer-data)
@@ -806,9 +806,10 @@ (defun dialog-response-id (dialog response &optional create-p error-p)
 
 (defun dialog-find-response (dialog id)
   "Finds a symbolic response given a numeric id"
-  (if (< id 0)
-      (int-to-response-type id)
-    (aref (user-data dialog 'responses) id)))
+  (cond 
+   ((not (numberp id)) id)
+   ((< id 0) (int-to-response-type id))
+   ((aref (user-data dialog 'responses) id))))
 
 
 (defmethod compute-signal-id ((dialog dialog) signal)
@@ -820,11 +821,15 @@ (defmethod compute-signal-function ((dialog dialog) signal function object args)
   (declare (ignore function object args))
   (let ((callback (call-next-method))
        (id (dialog-response-id dialog signal)))
-    (if id
-       #'(lambda (dialog response)
-           (when (= response id)
-             (funcall callback dialog)))
-      callback)))
+    (cond
+     (id
+      #'(lambda (dialog response)
+         (when (= response id)
+           (funcall callback dialog))))
+     ((string-equal signal "response")
+      #'(lambda (dialog response)        
+         (funcall callback dialog (dialog-find-response dialog response))))
+     (callback))))
 
 (defbinding dialog-run () nil
   (dialog dialog))
@@ -1304,11 +1309,20 @@ (defbinding menu-tool-button-set-arrow-tooltip () nil
 ;;; Message dialog
 
 (defmethod allocate-foreign ((dialog message-dialog) &key (message-type :info)
-                            (buttons :close) flags transient-parent)
-  (%message-dialog-new transient-parent flags message-type buttons))
-
-
-(defmethod shared-initialize ((dialog message-dialog) names &key text 
+                            button buttons flags transient-parent)
+  (let ((stock-buttons 
+        (cond
+         ((and (not buttons) (not button))
+          (case message-type
+            (:question :yes-no)
+            (t :ok)))
+         ((listp buttons) :none)
+         (t buttons))))
+    (%message-dialog-new transient-parent flags message-type stock-buttons)))
+
+
+(defmethod shared-initialize ((dialog message-dialog) names &rest initargs
+                             &key message-type buttons button text 
                              #?(pkg-exists-p "gtk+-2.0" :atleast-version "2.6.0")
                              secondary-text)
   (declare (ignore names))
@@ -1317,7 +1331,16 @@ (defmethod shared-initialize ((dialog message-dialog) names &key text
   #?(pkg-exists-p "gtk+-2.0" :atleast-version "2.6.0")
   (when secondary-text
     (message-dialog-format-secondary-markup dialog secondary-text))
-  (call-next-method))
+  (when (and (not buttons) (not button))
+    (loop
+     for (key value) on initargs by #'cddr
+     when (and (eq key :signal) (eq (first value) :close))
+     do (warn "Default button configuration changed from ~A to ~A" :close
+        (if (eq message-type :question) :yes-no :ok))
+        (loop-finish)))
+  (if (typep buttons 'buttons-type)
+      (apply #'call-next-method dialog names (plist-remove :buttons initargs))
+    (call-next-method)))
 
 
 (defbinding %message-dialog-new () pointer