From 881d256ce0007bddd0a5f806e63f0ab7f86b492a Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Thu, 15 Nov 2012 17:18:06 -0500 Subject: [PATCH] window: Move grab op sync handling code out This removes some duplicate event type checks, and will make the code cleaner in the future when we want to make the grab_op_event handler take an XIDeviceEvent directly. Based on a patch by Owen Taylor https://bugzilla.gnome.org/show_bug.cgi?id=688779 --- src/core/display-private.h | 1 + src/core/display.c | 19 +++++++++---------- src/core/window-private.h | 5 +++++ src/core/window.c | 18 +++++++++++++----- 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/core/display-private.h b/src/core/display-private.h index 3996bd66d..e0747b20f 100644 --- a/src/core/display-private.h +++ b/src/core/display-private.h @@ -432,6 +432,7 @@ int meta_resize_gravity_from_grab_op (MetaGrabOp op); gboolean meta_grab_op_is_moving (MetaGrabOp op); gboolean meta_grab_op_is_resizing (MetaGrabOp op); +gboolean meta_grab_op_is_mouse (MetaGrabOp op); void meta_display_devirtualize_modifiers (MetaDisplay *display, MetaVirtualModifier modifiers, diff --git a/src/core/display.c b/src/core/display.c index 3aac556a7..890204340 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -1295,8 +1295,8 @@ grab_op_is_mouse_only (MetaGrabOp op) } } -static gboolean -grab_op_is_mouse (MetaGrabOp op) +gboolean +meta_grab_op_is_mouse (MetaGrabOp op) { switch (op) { @@ -1922,12 +1922,11 @@ event_callback (XEvent *event, event->type == (display->xsync_event_base + XSyncAlarmNotify) && ((XSyncAlarmNotifyEvent*)event)->alarm == display->grab_sync_request_alarm) { + XSyncValue value = ((XSyncAlarmNotifyEvent*)event)->counter_value; + guint64 new_counter_value; + new_counter_value = XSyncValueLow32 (value) + ((gint64)XSyncValueHigh32 (value) << 32); + meta_window_update_sync_request_counter (display->grab_window, new_counter_value); filter_out_event = TRUE; /* GTK doesn't want to see this really */ - - if (display->grab_op != META_GRAB_OP_NONE && - display->grab_window != NULL && - grab_op_is_mouse (display->grab_op)) - meta_window_handle_mouse_grab_op_event (display->grab_window, event); } #endif /* HAVE_XSYNC */ @@ -2026,7 +2025,7 @@ event_callback (XEvent *event, break; if ((window && - grab_op_is_mouse (display->grab_op) && + meta_grab_op_is_mouse (display->grab_op) && display->grab_button != (int) event->xbutton.button && display->grab_window == window) || grab_op_is_keyboard (display->grab_op)) @@ -2221,7 +2220,7 @@ event_callback (XEvent *event, display->overlay_key_only_pressed = FALSE; if (display->grab_window == window && - grab_op_is_mouse (display->grab_op)) + meta_grab_op_is_mouse (display->grab_op)) meta_window_handle_mouse_grab_op_event (window, event); break; case MotionNotify: @@ -2229,7 +2228,7 @@ event_callback (XEvent *event, break; if (display->grab_window == window && - grab_op_is_mouse (display->grab_op)) + meta_grab_op_is_mouse (display->grab_op)) meta_window_handle_mouse_grab_op_event (window, event); break; case EnterNotify: diff --git a/src/core/window-private.h b/src/core/window-private.h index 1db735e42..1c81b99d7 100644 --- a/src/core/window-private.h +++ b/src/core/window-private.h @@ -580,6 +580,11 @@ void meta_window_shove_titlebar_onscreen (MetaWindow *window); void meta_window_set_gravity (MetaWindow *window, int gravity); +#ifdef HAVE_XSYNC +void meta_window_update_sync_request_counter (MetaWindow *window, + guint64 new_counter_value); +#endif /* HAVE_XSYNC */ + void meta_window_handle_mouse_grab_op_event (MetaWindow *window, XEvent *event); diff --git a/src/core/window.c b/src/core/window.c index 7a9afdcf5..13c6262ee 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -9225,13 +9225,16 @@ update_tile_mode (MetaWindow *window) } } -void -meta_window_handle_mouse_grab_op_event (MetaWindow *window, - XEvent *event) -{ #ifdef HAVE_XSYNC - if (event->type == (window->display->xsync_event_base + XSyncAlarmNotify)) +void +meta_window_update_sync_request_counter (MetaWindow *window, + guint64 new_counter_value) +{ + if (window->display->grab_op != META_GRAB_OP_NONE && + window == window->display->grab_window && + meta_grab_op_is_mouse (window->display->grab_op)) { + meta_topic (META_DEBUG_RESIZING, "Alarm event received last motion x = %d y = %d\n", window->display->grab_latest_motion_x, @@ -9276,8 +9279,13 @@ meta_window_handle_mouse_grab_op_event (MetaWindow *window, break; } } +} #endif /* HAVE_XSYNC */ +void +meta_window_handle_mouse_grab_op_event (MetaWindow *window, + XEvent *event) +{ switch (event->type) { case ButtonRelease: