;; 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.73 2007-06-19 11:32:25 espen Exp $
+;; $Id: gtk.lisp,v 1.78 2007-07-10 08:45:06 espen Exp $
(in-package "GTK")
(%init-async-event-handling display)
#+sb-thread(%init-multi-threaded-event-handling display)
#-sb-thread(error "Multi threading not supported on this platform")))
- (gdk:find-display display))
+ (gdk:ensure-display display t))
(defun clg-init-with-threading (&optional display)
(clg-init display t))
(sb-unix:fd-zero read-fds)
(sb-unix:fd-set fd read-fds)
- (unless (zerop (sb-unix:unix-fast-select
- (1+ fd) (sb-alien:addr read-fds) nil nil
- seconds microseconds))
- (if (peek-char nil (car socket) nil)
- :input
- :eof)))))
+ (let ((num-fds-changed
+ (sb-unix:unix-fast-select
+ (1+ fd) (sb-alien:addr read-fds) nil nil
+ seconds microseconds)))
+ (unless (or (not num-fds-changed) (zerop num-fds-changed))
+ (if (peek-char nil (car socket) nil)
+ :input
+ :eof))))))
(defun %init-async-event-handling (display)
(let ((style #?(or (featurep :cmu) (sbcl< 1 0 6)) :fd-handler
(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
(right unsigned-int))
+;;; Assistant
+
+#?(pkg-exists-p "gtk+-2.0" :atleast-version "2.10.0")
+(progn
+ (defbinding assistant-get-nth-page () widget
+ (assistant assistant)
+ (page-num int))
+
+ (defbinding %assistant-insert-page () int
+ (assistant assistant)
+ (page widget)
+ (pos int))
+
+ (defun assistant-insert-page (assistant page position &rest child-args)
+ (let ((pos (case position
+ (:first 0)
+ (:last -1)
+ (t position))))
+ (prog1
+ (%assistant-insert-page assistant page pos)
+ (init-child-slots assistant page child-args))))
+
+ (defun assistant-append-page (assistant page &rest child-args)
+ (apply #'assistant-insert-page assistant page :last child-args))
+
+ (defun assistant-prepend-page (assistant page &rest child-args)
+ (apply #'assistant-insert-page assistant page :first child-args))
+
+ (define-callback-marshal %assistant-page-func-callback int
+ ((current-page int)))
+
+ (defbinding assistant-set-forward-func (assistant function) nil
+ (assistant assistant)
+ (%assistant-page-func-callback callback)
+ ((register-callback-function function) pointer-data)
+ (user-data-destroy-callback callback))
+
+ (defbinding assistant-add-action-widget () nil
+ (assistant assistant)
+ (child widget))
+
+ (defbinding assistant-remove-action-widget () nil
+ (assistant assistant)
+ (child widget))
+
+ (defbinding assistant-update-buttons-state () nil
+ (assistant assistant)))
+
+
+
;;; Aspect frame
(prog1
(if display
(apply #'call-next-method
- window :screen (gdk:display-get-default-screen display) initargs)
+ window :screen (gdk:display-get-default-screen (gdk:ensure-display display)) initargs)
(call-next-method))
(initial-add window #'window-add-accel-group
initargs :accel-group :accel-groups)))
(defbinding %window-set-geometry-hints () nil
(window window)
+ (widget (or widget null))
(geometry gdk:geometry)
(geometry-mask gdk:window-hints))
-(defun window-set-geometry-hints (window &key min-width min-height
+(defun window-set-geometry-hints (window &key widget min-width min-height
max-width max-height base-width base-height
- width-inc height-inc min-aspect max-aspect
- (gravity nil gravity-p) min-size max-size)
+ width-inc height-inc gravity
+ aspect (min-aspect aspect) (max-aspect aspect))
(let ((geometry (make-instance 'gdk:geometry
:min-width (or min-width -1)
:min-height (or min-height -1)
:width-inc (or width-inc 0)
:height-inc (or height-inc 0)
:min-aspect (or min-aspect 0)
- :max-aspect (or max-aspect 0)
- :gravity gravity))
+ :max-aspect (or max-aspect 0)))
(mask ()))
- (when (or min-size min-width min-height)
+ (when (or min-width min-height)
(push :min-size mask))
- (when (or max-size max-width max-height)
+ (when (or max-width max-height)
(push :max-size mask))
(when (or base-width base-height)
(push :base-size mask))
(push :resize-inc mask))
(when (or min-aspect max-aspect)
(push :aspect mask))
- (when gravity-p
- (push :win-gravity mask))
- (%window-set-geometry-hints window geometry mask)))
+ (when gravity
+ (push :win-gravity mask)
+ (setf (gdk:geometry-gravity geometry) gravity))
+ (%window-set-geometry-hints window widget geometry mask)))
(defbinding window-list-toplevels () (glist (copy-of window))
"Returns a list of all existing toplevel windows.")