]> Pileus Git - ~andy/gtk/blobdiff - gdk/x11/gdkmain-x11.c
Patch from George Liebl to add a GdkGrabStatus enumeration to use as a
[~andy/gtk] / gdk / x11 / gdkmain-x11.c
index 332ad771835b8a509d5f7e679df301fa3b084cf6..e40866751eba1171ea9fb95eec4b0abb89a204a9 100644 (file)
 
 #include "gdk.h"
 
-#include "gdkx.h"
-#include "gdkprivate.h"
+#include "gdkprivate-x11.h"
+#include "gdkinternals.h"
 #include "gdkinputprivate.h"
+#include <pango/pangox.h>
 
 typedef struct _GdkPredicate  GdkPredicate;
 typedef struct _GdkErrorTrap  GdkErrorTrap;
@@ -201,6 +202,26 @@ gdk_get_use_xshm (void)
   return gdk_use_xshm;
 }
 
+static GdkGrabStatus
+gdk_x11_convert_grab_status (gint status)
+{
+  switch (status)
+    {
+    case GrabSuccess:
+      return GDK_GRAB_SUCCESS;
+    case AlreadyGrabbed:
+      return GDK_GRAB_ALREADY_GRABBED;
+    case GrabInvalidTime:
+      return GDK_GRAB_INVALID_TIME;
+    case GrabNotViewable:
+      return GDK_GRAB_NOT_VIEWABLE;
+    case GrabFrozen:
+      return GDK_GRAB_FROZEN;
+    }
+
+  g_assert_not_reached();
+}
+
 /*
  *--------------------------------------------------------------
  * gdk_pointer_grab
@@ -224,7 +245,7 @@ gdk_get_use_xshm (void)
  *--------------------------------------------------------------
  */
 
-gint
+GdkGrabStatus
 gdk_pointer_grab (GdkWindow *    window,
                  gboolean        owner_events,
                  GdkEventMask    event_mask,
@@ -246,12 +267,12 @@ gdk_pointer_grab (GdkWindow *       window,
   
   cursor_private = (GdkCursorPrivate*) cursor;
   
-  xwindow = GDK_DRAWABLE_XID (window);
+  xwindow = GDK_WINDOW_XID (window);
   
-  if (!confine_to || GDK_DRAWABLE_DESTROYED (confine_to))
+  if (!confine_to || GDK_WINDOW_DESTROYED (confine_to))
     xconfine_to = None;
   else
-    xconfine_to = GDK_DRAWABLE_XID (confine_to);
+    xconfine_to = GDK_WINDOW_XID (confine_to);
   
   if (!cursor)
     xcursor = None;
@@ -266,19 +287,16 @@ gdk_pointer_grab (GdkWindow *       window,
        xevent_mask |= gdk_event_mask_table[i];
     }
   
-  if (gdk_input_vtable.grab_pointer)
-    return_val = gdk_input_vtable.grab_pointer (window,
-                                               owner_events,
-                                               event_mask,
-                                               confine_to,
-                                               time);
-  else
-    return_val = Success;
-  
-  if (return_val == Success)
+  return_val = _gdk_input_grab_pointer (window,
+                                       owner_events,
+                                       event_mask,
+                                       confine_to,
+                                       time);
+
+  if (return_val == GrabSuccess)
     {
-      if (!GDK_DRAWABLE_DESTROYED (window))
-       return_val = XGrabPointer (GDK_DRAWABLE_XDISPLAY (window),
+      if (!GDK_WINDOW_DESTROYED (window))
+       return_val = XGrabPointer (GDK_WINDOW_XDISPLAY (window),
                                   xwindow,
                                   owner_events,
                                   xevent_mask,
@@ -291,9 +309,9 @@ gdk_pointer_grab (GdkWindow *         window,
     }
   
   if (return_val == GrabSuccess)
-    gdk_xgrab_window = (GdkWindowPrivate *)window;
-  
-  return return_val;
+    gdk_xgrab_window = (GdkWindowObject *)window;
+
+  return gdk_x11_convert_grab_status (return_val);
 }
 
 /*
@@ -314,8 +332,7 @@ gdk_pointer_grab (GdkWindow *         window,
 void
 gdk_pointer_ungrab (guint32 time)
 {
-  if (gdk_input_vtable.ungrab_pointer)
-    gdk_input_vtable.ungrab_pointer (time);
+  _gdk_input_ungrab_pointer (time);
   
   XUngrabPointer (gdk_display, time);
   gdk_xgrab_window = NULL;
@@ -362,22 +379,26 @@ gdk_pointer_is_grabbed (void)
  *--------------------------------------------------------------
  */
 
-gint
+GdkGrabStatus
 gdk_keyboard_grab (GdkWindow *    window,
                   gboolean        owner_events,
                   guint32         time)
 {
+  gint return_val;
+  
   g_return_val_if_fail (window != NULL, 0);
   g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
   
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    return XGrabKeyboard (GDK_DRAWABLE_XDISPLAY (window),
-                         GDK_DRAWABLE_XID (window),
-                         owner_events,
-                         GrabModeAsync, GrabModeAsync,
-                         time);
+  if (!GDK_WINDOW_DESTROYED (window))
+    return_val = XGrabKeyboard (GDK_WINDOW_XDISPLAY (window),
+                               GDK_WINDOW_XID (window),
+                               owner_events,
+                               GrabModeAsync, GrabModeAsync,
+                               time);
   else
-    return AlreadyGrabbed;
+    return_val = AlreadyGrabbed;
+
+  return gdk_x11_convert_grab_status (return_val);
 }
 
 /*
@@ -563,6 +584,8 @@ gdk_beep (void)
 void
 gdk_windowing_exit (void)
 {
+  pango_x_shutdown_display (gdk_display);
+  
   XCloseDisplay (gdk_display);
 }