[gtk+] Free button_state.mask after XIQueryPointer()



commit 0cc2f93d5c6fc2da1eea91c7ad2996e451226716
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sun Jan 23 23:19:30 2011 +0100

    Free button_state.mask after XIQueryPointer()
    
    This function allocates the button mask, so free it after
    use, or right before the next XIQueryPointer() call, as done
    in gdk_x11_device_xi2_window_at_position().

 gdk/x11/gdkdevice-xi2.c |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)
---
diff --git a/gdk/x11/gdkdevice-xi2.c b/gdk/x11/gdkdevice-xi2.c
index 24699bf..e1dc2a3 100644
--- a/gdk/x11/gdkdevice-xi2.c
+++ b/gdk/x11/gdkdevice-xi2.c
@@ -362,6 +362,8 @@ gdk_x11_device_xi2_query_state (GdkDevice        *device,
   if (mask)
     *mask = _gdk_x11_device_xi2_translate_state (&mod_state, &button_state);
 
+  g_free (button_state.mask);
+
   return TRUE;
 }
 
@@ -449,7 +451,7 @@ gdk_x11_device_xi2_window_at_position (GdkDevice       *device,
   GdkWindow *window;
   Window xwindow, root, child, last = None;
   gdouble xroot_x, xroot_y, xwin_x, xwin_y;
-  XIButtonState button_state;
+  XIButtonState button_state = { 0 };
   XIModifierState mod_state;
   XIGroupState group_state;
 
@@ -501,6 +503,10 @@ gdk_x11_device_xi2_window_at_position (GdkDevice       *device,
             {
               window = GDK_WINDOW (list->data);
               xwindow = GDK_WINDOW_XID (window);
+
+              /* Free previous button mask, if any */
+              g_free (button_state.mask);
+
               gdk_x11_display_error_trap_push (display);
               XIQueryPointer (xdisplay,
                               device_xi2->device_id,
@@ -525,6 +531,8 @@ gdk_x11_device_xi2_window_at_position (GdkDevice       *device,
                   XSetWindowAttributes attributes;
                   Window w;
 
+                  g_free (button_state.mask);
+
                   w = XCreateWindow (xdisplay, xwindow, (int)xwin_x, (int)xwin_y, 1, 1, 0,
                                      CopyFromParent, InputOnly, CopyFromParent,
                                      0, &attributes);
@@ -558,6 +566,8 @@ gdk_x11_device_xi2_window_at_position (GdkDevice       *device,
   while (xwindow)
     {
       last = xwindow;
+      g_free (button_state.mask);
+
       gdk_x11_display_error_trap_push (display);
       XIQueryPointer (xdisplay,
                       device_xi2->device_id,
@@ -593,6 +603,8 @@ gdk_x11_device_xi2_window_at_position (GdkDevice       *device,
   if (mask)
     *mask = _gdk_x11_device_xi2_translate_state (&mod_state, &button_state);
 
+  g_free (button_state.mask);
+
   return window;
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]