diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2011-01-23 23:19:30 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2011-01-23 23:19:30 +0100 |
commit | 0cc2f93d5c6fc2da1eea91c7ad2996e451226716 (patch) | |
tree | 4256d48bb14bcd30e0447e9f627e867defd5b52a /gdk/x11/gdkdevice-xi2.c | |
parent | b2b73a349eb8a99d533080344f835830b788e7cf (diff) | |
download | gtk+-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.c | 14 |
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; } |