From dc220076a62929dc07b968b5a177f494e404e76e Mon Sep 17 00:00:00 2001 From: espen Date: Fri, 6 Apr 2007 14:19:08 +0000 Subject: [PATCH] Improved handling of multiple displays --- gdk/gdk.lisp | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/gdk/gdk.lisp b/gdk/gdk.lisp index 7bea418..f802e65 100644 --- a/gdk/gdk.lisp +++ b/gdk/gdk.lisp @@ -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: gdk.lisp,v 1.33 2007-01-14 23:24:11 espen Exp $ +;; $Id: gdk.lisp,v 1.34 2007-04-06 14:19:08 espen Exp $ (in-package "GDK") @@ -36,11 +36,21 @@ ;;; Display +#-debug-ref-counting +(defmethod print-object ((display display) stream) + (if (and (proxy-valid-p display) (slot-boundp display 'name)) + (print-unreadable-object (display stream :type t :identity nil) + (format stream "~S at 0x~X" + (display-name display) (pointer-address (foreign-location display)))) + (call-next-method))) + (defbinding %display-open () display (display-name (or null string))) (defun display-open (&optional display-name) - (let ((display (%display-open display-name))) + (let ((display (or + (%display-open display-name) + (error "Opening display failed: ~A" display-name)))) (unless (display-get-default) (display-set-default display)) display)) @@ -90,19 +100,40 @@ (&optional (display (display-get-default))) int (display display)) +(defun find-display (name) + (find name (list-displays) :key #'display-name :test #'string=)) + +(defun ensure-display (display) + (etypecase display + (null (display-get-default)) + (display display) + (string + (or + (find display (list-displays) :key #'display-name :test #'string=) + (display-open display))))) ;;; Display manager (defbinding display-get-default () display) -(defbinding (display-manager "gdk_display_manager_get") () display-manager) - (defbinding (display-set-default "gdk_display_manager_set_default_display") (display) nil ((display-manager) display-manager) (display display)) +(defbinding (list-displays "gdk_display_manager_list_displays") () + (gslist (static display)) + ((display-manager) display-manager)) + +;; The only purpose of exporting this is to make it possible for +;; applications to connect to the display-opened signal +(defbinding (display-manager "gdk_display_manager_get") () display-manager) + +(defbinding display-get-core-pointer + (&optional (display (display-get-default))) device + (display display)) + ;;; Primitive graphics structures (points, rectangles and regions) -- 2.11.0