Update of /project/cells/cvsroot/cells-gtk
In directory clnet:/tmp/cvs-serv5749
Modified Files:
dialogs.lisp gtk-app.lisp menus.lisp tree-view.lisp
widgets.lisp
Log Message:
fixed submenus
--- /project/cells/cvsroot/cells-gtk/dialogs.lisp 2008/01/30 14:21:01 1.2
+++ /project/cells/cvsroot/cells-gtk/dialogs.lisp 2008/01/30 21:13:44 1.3
@@ -23,27 +23,27 @@
((message :accessor message :initarg :message :initform nil)
(message-type :accessor message-type :initarg :message-type :initform :info)
(buttons-type :accessor buttons-type :initarg :buttons-type :initform (c? (if (eql (message-type self) :question)
- :yes-no
- :close)))
+ :yes-no
+ :close)))
(content-area :owning t :accessor content-area :initarg :content-area :initform nil))
(markup)
()
:position :mouse
:new-args (c_1 (list +c-null+
- 2
- (ecase (message-type self)
- (:info 0)
- (:warning 1)
- (:question 2)
- (:error 3))
- (ecase (buttons-type self)
- (:none 0)
- (:ok 1)
- (:close 2)
- (:cancel 3)
- (:yes-no 4)
- (:ok-cancel 5))
- (message self))))
+ 2
+ (ecase (message-type self)
+ (:info 0)
+ (:warning 1)
+ (:question 2)
+ (:error 3))
+ (ecase (buttons-type self)
+ (:none 0)
+ (:ok 1)
+ (:close 2)
+ (:cancel 3)
+ (:yes-no 4)
+ (:ok-cancel 5))
+ (message self))))
(defmethod md-awaken :after ((self message-dialog))
(print 'md-awaken-after)
@@ -55,6 +55,7 @@
(-7 :close)
(-8 :yes)
(-9 :no))))
+
(with-slots (content-area) self
(when content-area
(setf (value self) (value content-area))
@@ -146,6 +147,8 @@
(if (select-multiple self)
(setf (value self) (gtk-file-chooser-get-filenames-strs (id self)))
(setf (value self) (gtk-file-chooser-get-filename (id self)))))
+ (trc "destroying file-chooser-dialog" (id self) self)
+ (break "ok?")
(gtk-widget-destroy (id self))
(gtk-object-forget (id self) self)))
--- /project/cells/cvsroot/cells-gtk/gtk-app.lisp 2008/01/28 23:59:22 1.1
+++ /project/cells/cvsroot/cells-gtk/gtk-app.lisp 2008/01/30 21:13:44 1.2
@@ -83,39 +83,47 @@
(to-be splash)
(setf (visible splash) t)
(loop while (gtk-events-pending) do
- (gtk-main-iteration)))
-
+ (gtk-main-iteration)))
+
(to-be app)
-
+
(when splash
(not-to-be splash)
(gtk-window-set-auto-startup-notification t))
(setf (visible app) t)
(when *gtk-debug* (trc nil "STARTING GTK-MAIN") (force-output))
- (unwind-protect
- (loop
- (restart-case
- (handler-bind
- ((gtk-user-signals-quit #'give-up-cleanly)
- (gtk-continuable-error #'continue-from-error)
- (error #'report-error-and-give-up))
- #-lispworks
- (gtk-main)
- #+lispworks ; give slime a chance.
- (loop ; just running your app in a process is not enough.
- (loop while (gtk-events-pending) do
- (gtk-main-iteration-do nil))
- (process-wait-with-timeout .01 "GTK event loop waiting")))
- ;; Restart cases
- (continue-from-error (c)
- (show-message (format nil "Cells-GTK Error: ~a" (text c))
- :message-type :error :title "Cells-GTK Error"))
- (give-up-cleanly () (return-from start-app))
- (report-error-and-give-up (c) (error c))))
- ;; clean-up forms (takes down application).
- (not-to-be app) ; while (> (gtk-main-level) 0) do (gtk-main-quit) NG. Why?
- (loop for i from 0 to 30 do (gtk-main-quit))
- (loop while (gtk-events-pending) do (gtk-main-iteration-do nil)))))))
+ (unwind-protect
+ (gtk-main)
+ #+chill
+ (loop
+ (restart-case
+ (handler-bind
+ ((gtk-user-signals-quit #'give-up-cleanly)
+ (gtk-continuable-error #'continue-from-error)
+ (error #'report-error-and-give-up))
+ #-lispworks
+ (gtk-main)
+ #+lispworks ; give slime a chance.
+ (loop ; just running your app in a process is not enough.
+ (loop while (gtk-events-pending) do
+ (gtk-main-iteration-do nil))
+ (process-wait-with-timeout .01 "GTK event loop waiting")))
+ ;; Restart cases
+ (continue-from-error (c)
+ (format t "~&Cells-GTK Error: ~a" (text c))
+ (show-message (format nil "Cells-GTK Error: ~a" (text c))
+ :message-type :error :title "Cells-GTK Error"))
+ (give-up-cleanly () (return-from start-app))
+ (report-error-and-give-up (c) (error c))))
+ ;; clean-up forms (takes down application).
+ (trcx not-to-be-app 42)
+ (not-to-be app) ; while (> (gtk-main-level) 0) do (gtk-main-quit) NG. Why?
+ (trcx gtk-main-quits 42)
+ (loop for i from 0 to 30 do (gtk-main-quit))
+ (trcx mopping-events 42)
+ (loop while (gtk-events-pending) do
+ (trcx gtk-main-iter-do 42)
+ (gtk-main-iteration-do nil)))))))
;;; Restarts
(defun continue-from-error (c)
--- /project/cells/cvsroot/cells-gtk/menus.lisp 2008/01/28 23:59:22 1.1
+++ /project/cells/cvsroot/cells-gtk/menus.lisp 2008/01/30 21:13:44 1.2
@@ -184,11 +184,7 @@
() () ()
:padding 0)
-(defobserver .kids ((self menu-shell))
- (when new-value
- (dolist (kid new-value)
- (gtk-menu-shell-append (id self) (id kid))))
- #+clisp (call-next-method))
+
(def-widget menu-bar (menu-shell)
() () ())
@@ -207,10 +203,35 @@
(mk-accel-label :text (label self))))))
(accel :accessor accel :initarg :accel :initform (c-in nil))
(owner :initarg :owner :accessor owner :initform (c-in nil))
- (submenu :cell nil :accessor submenu :initform nil)) ; gtk-menu-item-get-submenu not doing it. POD
+ (submenu :initarg :submenu :cell nil :accessor submenu :initform nil) ; gtk-menu-item-get-submenu not doing it. POD
+ (appended? :initarg :appended? :cell nil :accessor appended? :initform nil))
(right-justified)
(activate))
+(defobserver .kids ((self menu-shell))
+ (when new-value
+ (dolist (kid new-value)
+
+ (if (appended? kid)
+ (break "ducking duplicate append of kid ~a to (~a ~a) already in ~a" kid (id self) self (appended? kid))
+ (progn
+ (trc nil "mshell" (id self) self :kid kid :kidid (id kid) :kidpar (fm-parent kid))
+ (gtk-menu-shell-append (id self) (id kid))
+ (setf (appended? kid) (cons (id self) self))))))
+ #+clisp (call-next-method))
+
+(defobserver .kids ((self menu-item))
+ (when old-value ; pod never occurs ?
+ (gtk-menu-item-remove-submenu (id self)))
+ (when new-value
+ (with-integrity (:change 'set-sub-menu-actually)
+ (unless (submenu self)
+ (let ((subid (id (setf (submenu self)
+ (make-instance 'menu
+ :md-name (gensym "SUBMENU-MENU")
+ :kids new-value))))) ;; <=== was mak
+ (gtk-menu-item-set-submenu (id self) subid))))))
+
(defun accel-key-mods (accel)
(destructuring-bind (key &rest mods-lst) accel
(let ((mods 0))
@@ -237,13 +258,10 @@
(gtk-accel-label-set-accel-widget (id new-value) (id self))
(gtk-container-add (id self) (id new-value))))
-(defobserver .kids ((self menu-item))
- (when old-value ; pod never occurs ?
- (gtk-menu-item-remove-submenu (id self)))
- (when new-value
- (with-integrity (:change 'set-sub-menu-actually)
- (gtk-menu-item-set-submenu (id self)
- (id (setf (submenu self) (make-be 'menu :kids new-value)))))))
+
+
+;;;if the make-be is a make-instance we do not crash, but we get an empty submenu (or
+;;;is it just disabled?).
(def-widget check-menu-item (menu-item)
((init :accessor init :initarg :init :initform nil))
--- /project/cells/cvsroot/cells-gtk/tree-view.lisp 2008/01/28 23:59:24 1.1
+++ /project/cells/cvsroot/cells-gtk/tree-view.lisp 2008/01/30 21:13:44 1.2
@@ -35,7 +35,7 @@
()
:new-args (c_1 (list (item-types self))))
-(defun fail (&rest args) (declare (ignore args)))
+(defun tv-fail (&rest args) (declare (ignore args)))
(def-widget tree-view ()
((columns-def :accessor columns-def :initarg :columns :initform nil)
@@ -52,7 +52,7 @@
:container self
col-init))
(column-inits self))))
- (select-if :unchanged-if #'fail
+ (select-if :unchanged-if #'tv-fail
:accessor select-if :initarg :select-if :initform (c-in nil))
(roots :accessor roots :initarg :roots :initform nil)
(print-fn :accessor print-fn :initarg :print-fn :initform #'identity)
--- /project/cells/cvsroot/cells-gtk/widgets.lisp 2008/01/30 14:21:01 1.2
+++ /project/cells/cvsroot/cells-gtk/widgets.lisp 2008/01/30 21:13:44 1.3
@@ -310,7 +310,8 @@
(defmethod not-to-be :after ((self widget))
(when t ; *gtk-debug*
- (trc "WIDGET DESTROY" (md-name self) self) (force-output))
+ (trc nil "WIDGET DESTROY" (md-name self) (type-of self) self)
+ (force-output))
(gtk-object-forget (slot-value self 'id) self)
(gtk-widget-destroy (slot-value self 'id)))