From 68cbedb7d66128a4430b7c88d98f1b2a820c5499 Mon Sep 17 00:00:00 2001 From: espen Date: Fri, 1 Jun 2007 09:17:17 +0000 Subject: [PATCH] Fixed some portability issues --- gdk/alien/glue.c | 42 +++++++++++++++++++++++++++++++----------- gdk/gdk.lisp | 7 +++---- gtk/gtk.lisp | 19 ++++++++++--------- 3 files changed, 44 insertions(+), 24 deletions(-) diff --git a/gdk/alien/glue.c b/gdk/alien/glue.c index c165b52..8fdaa20 100644 --- a/gdk/alien/glue.c +++ b/gdk/alien/glue.c @@ -1,5 +1,5 @@ /* Common Lisp bindings for GTK+ v2.x - * Copyright 1999-2005 Espen S. Johnsen + * Copyright 1999-2007 Espen S. Johnsen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the @@ -21,25 +21,45 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/* $Id: glue.c,v 1.4 2007-04-06 14:25:20 espen Exp $ */ +/* $Id: glue.c,v 1.5 2007-06-01 09:17:17 espen Exp $ */ #include -#include -struct _GdkDisplayX11 -{ - GdkDisplay parent_instance; - Display *xdisplay; -}; +#ifdef GDK_WINDOWING_X11 +#include gint clg_gdk_connection_number (GdkDisplay *display) { - return ConnectionNumber (((struct _GdkDisplayX11 *)display)->xdisplay); + return ConnectionNumber (GDK_DISPLAY_XDISPLAY (display)); +} +#else +gint clg_gdk_connection_number (void *display) +{ + return -1; } +#endif -GdkWindow *clg_gdk_cairo_xlib_surface_get_window (cairo_surface_t *surface) +GdkWindow *clg_gdk_cairo_surface_get_window (cairo_surface_t *surface) { - return gdk_window_lookup (cairo_xlib_surface_get_drawable (surface)); + /* If 'surface_info_key' had been public we would have had a + portable way to find the GdkWindow of a Cairo surface. */ + +#ifdef GDK_WINDOWING_X11 + Display* display = cairo_xlib_surface_get_display (surface); + Drawable window = cairo_xlib_surface_get_drawable (surface); + if (display && window) + return gdk_window_lookup_for_display (window, display); + else + return NULL; +#elif defined (G_OS_WIN32) + HDC hdc = cairo_win32_surface_get_dc (surface); + if (hdc) + return gdk_window_lookup (hdc); + else + return NULL; +#else + return NULL; +#endif } diff --git a/gdk/gdk.lisp b/gdk/gdk.lisp index 7a5f641..48b2237 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.37 2007-05-10 16:58:45 espen Exp $ +;; $Id: gdk.lisp,v 1.38 2007-06-01 09:17:17 espen Exp $ (in-package "GDK") @@ -1057,9 +1057,8 @@ ;; (cr cairo:context) ;; (region region)) - (defbinding (cairo-xlib-surface-get-window - "clg_gdk_cairo_xlib_surface_get_window") () window - (surface cairo:xlib-surface)) + (defbinding (cairo-surface-get-window "clg_gdk_cairo_surface_get_window") () window + (surface cairo:surface)) ) diff --git a/gtk/gtk.lisp b/gtk/gtk.lisp index c4423e3..2ee7511 100644 --- a/gtk/gtk.lisp +++ b/gtk/gtk.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: gtk.lisp,v 1.70 2007-05-10 20:17:17 espen Exp $ +;; $Id: gtk.lisp,v 1.71 2007-06-01 09:17:17 espen Exp $ (in-package "GTK") @@ -77,13 +77,15 @@ (progn (signal-connect (gdk:display-manager) 'display-opened #'(lambda (display) - (let ((handler (add-fd-handler - (gdk:display-connection-number display) - :input #'main-iterate-all))) - (signal-connect display 'closed - #'(lambda (is-error-p) - (declare (ignore is-error-p)) - (remove-fd-handler handler)))))) + (let ((fd (gdk:display-connection-number display))) + (unless (< fd 0) + (let ((handler (add-fd-handler + (gdk:display-connection-number display) + :input #'main-iterate-all))) + (signal-connect display 'closed + #'(lambda (is-error-p) + (declare (ignore is-error-p)) + (remove-fd-handler handler)))))))) (setq *periodic-polling-function* #'main-iterate-all) (setq *max-event-to-sec* 0) (setq *max-event-to-usec* *event-poll-interval*)) @@ -108,7 +110,6 @@ (gdk:display-open display))) - #+sbcl (defun clg-init-with-threading (&optional display) "Initializes the system and starts event handling" -- 2.11.0