[mutter/wip/xinput2r: 11/68] display: get button number from helper input event function
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/xinput2r: 11/68] display: get button number from helper input event function
- Date: Wed, 24 Oct 2012 16:10:15 +0000 (UTC)
commit 59a931b17c366e74c822a2a163f7f6b6aad7be28
Author: Carlos Garnacho <carlosg gnome org>
Date: Wed Jun 8 18:52:27 2011 +0200
display: get button number from helper input event function
src/core/display.c | 23 ++++++++++++-----------
src/core/input-events.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
src/core/input-events.h | 3 +++
3 files changed, 60 insertions(+), 11 deletions(-)
---
diff --git a/src/core/display.c b/src/core/display.c
index 28bab9e..2f95b28 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -1940,6 +1940,7 @@ event_callback (XEvent *event,
{
Window xwindow = meta_input_event_get_window (display, event);
Time evtime = meta_input_event_get_time (display, event);
+ guint n_button;
if (window && !window->override_redirect &&
((evtype == KeyPress) || (evtype == ButtonPress)))
@@ -1978,18 +1979,20 @@ event_callback (XEvent *event,
filter_out_event = bypass_compositor = TRUE;
break;
case ButtonPress:
+ meta_input_event_get_button (display, event, &n_button);
+
if (display->grab_op == META_GRAB_OP_COMPOSITOR)
break;
display->overlay_key_only_pressed = FALSE;
- if (event->xbutton.button == 4 || event->xbutton.button == 5)
+ if (n_button == 4 || n_button == 5)
/* Scrollwheel event, do nothing and deliver event to compositor below */
break;
if ((window &&
grab_op_is_mouse (display->grab_op) &&
- display->grab_button != (int) event->xbutton.button &&
+ display->grab_button != (int) n_button &&
display->grab_window == window) ||
grab_op_is_keyboard (display->grab_op))
{
@@ -2029,9 +2032,7 @@ event_callback (XEvent *event,
* button 1. So for all such events we focus the window.
*/
unmodified = (event->xbutton.state & grab_mask) == 0;
-
- if (unmodified ||
- event->xbutton.button == 1)
+ if (unmodified || n_button == 1)
{
/* don't focus if frame received, will be lowered in
* frames.c or special-cased if the click was on a
@@ -2052,7 +2053,7 @@ event_callback (XEvent *event,
{
meta_topic (META_DEBUG_FOCUS,
"Focusing %s due to unmodified button %u press (display.c)\n",
- window->desc, event->xbutton.button);
+ window->desc, n_button);
meta_window_focus (window, evtime);
}
else
@@ -2068,7 +2069,7 @@ event_callback (XEvent *event,
if (!unmodified)
begin_move = TRUE;
}
- else if (!unmodified && event->xbutton.button == meta_prefs_get_mouse_button_resize())
+ else if (!unmodified && n_button == meta_prefs_get_mouse_button_resize())
{
if (window->has_resize_func)
{
@@ -2110,21 +2111,21 @@ event_callback (XEvent *event,
op,
TRUE,
FALSE,
- event->xbutton.button,
+ n_button,
0,
evtime,
event->xbutton.x_root,
event->xbutton.y_root);
}
}
- else if (event->xbutton.button == meta_prefs_get_mouse_button_menu())
+ else if (n_button == meta_prefs_get_mouse_button_menu())
{
if (meta_prefs_get_raise_on_click ())
meta_window_raise (window);
meta_window_show_menu (window,
event->xbutton.x_root,
event->xbutton.y_root,
- event->xbutton.button,
+ n_button,
evtime);
}
@@ -2167,7 +2168,7 @@ event_callback (XEvent *event,
META_GRAB_OP_MOVING,
TRUE,
FALSE,
- event->xbutton.button,
+ n_button,
0,
evtime,
event->xbutton.x_root,
diff --git a/src/core/input-events.c b/src/core/input-events.c
index fbd9d2a..e179871 100644
--- a/src/core/input-events.c
+++ b/src/core/input-events.c
@@ -495,3 +495,48 @@ meta_input_event_get_keycode (MetaDisplay *display,
return FALSE;
}
+
+gboolean
+meta_input_event_get_button (MetaDisplay *display,
+ XEvent *ev,
+ guint *button)
+{
+#ifdef HAVE_XINPUT2
+ if (ev->type == GenericEvent &&
+ ev->xcookie.extension == display->xinput2_opcode)
+ {
+ XIEvent *xev;
+
+ g_assert (display->have_xinput2 == TRUE);
+
+ xev = (XIEvent *) ev->xcookie.data;
+
+ if (xev->evtype == XI_ButtonPress ||
+ xev->evtype == XI_ButtonRelease)
+ {
+ if (button)
+ {
+ /* The detail field contains
+ * button number for button events
+ */
+ *button = ((XIDeviceEvent *) xev)->detail;
+ }
+
+ return TRUE;
+ }
+ }
+ else
+#endif /* HAVE_XINPUT2 */
+ {
+ if (ev->type == ButtonPress ||
+ ev->type == ButtonRelease)
+ {
+ if (button)
+ *button = ev->xbutton.button;
+
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
diff --git a/src/core/input-events.h b/src/core/input-events.h
index ea2c12e..9cc39ea 100644
--- a/src/core/input-events.h
+++ b/src/core/input-events.h
@@ -60,5 +60,8 @@ gboolean meta_input_event_get_state (MetaDisplay *display,
gboolean meta_input_event_get_keycode (MetaDisplay *display,
XEvent *ev,
guint *keycode);
+gboolean meta_input_event_get_button (MetaDisplay *display,
+ XEvent *event,
+ guint *button);
#endif /* META_EVENT_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]