summaryrefslogtreecommitdiff
path: root/gdk/x11/gdkdevice-xi2.c
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2011-01-23 23:19:30 +0100
committerCarlos Garnacho <carlosg@gnome.org>2011-01-23 23:19:30 +0100
commit0cc2f93d5c6fc2da1eea91c7ad2996e451226716 (patch)
tree4256d48bb14bcd30e0447e9f627e867defd5b52a /gdk/x11/gdkdevice-xi2.c
parentb2b73a349eb8a99d533080344f835830b788e7cf (diff)
downloadgtk+-0cc2f93d5c6fc2da1eea91c7ad2996e451226716.tar.gz
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().
Diffstat (limited to 'gdk/x11/gdkdevice-xi2.c')
-rw-r--r--gdk/x11/gdkdevice-xi2.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/gdk/x11/gdkdevice-xi2.c b/gdk/x11/gdkdevice-xi2.c
index 24699bfa39..e1dc2a3f46 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;
}