[mutter] window: Move grab op sync handling code out
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] window: Move grab op sync handling code out
- Date: Thu, 13 Dec 2012 21:39:05 +0000 (UTC)
commit 881d256ce0007bddd0a5f806e63f0ab7f86b492a
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Thu Nov 15 17:18:06 2012 -0500
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 <otaylor fishsoup net>
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 | 16 ++++++++++++----
4 files changed, 27 insertions(+), 14 deletions(-)
---
diff --git a/src/core/display-private.h b/src/core/display-private.h
index 3996bd6..e0747b2 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 3aac556..8902043 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 1db735e..1c81b99 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 7a9afdc..13c6262 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -9225,13 +9225,16 @@ update_tile_mode (MetaWindow *window)
}
}
+#ifdef HAVE_XSYNC
void
-meta_window_handle_mouse_grab_op_event (MetaWindow *window,
- XEvent *event)
+meta_window_update_sync_request_counter (MetaWindow *window,
+ guint64 new_counter_value)
{
-#ifdef HAVE_XSYNC
- if (event->type == (window->display->xsync_event_base + XSyncAlarmNotify))
+ 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:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]