[mutter/wip/xinput2: 8/49] display: get button number from helper input event function
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/xinput2: 8/49] display: get button number from helper input event function
- Date: Fri, 15 Jul 2011 16:29:46 +0000 (UTC)
commit 166559059a6fd76c78d526150a2af190a51ebc6c
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 | 22 ++++++++++++----------
src/core/input-events.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
src/core/input-events.h | 3 +++
3 files changed, 60 insertions(+), 10 deletions(-)
---
diff --git a/src/core/display.c b/src/core/display.c
index 5da8c01..18621f9 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -1721,6 +1721,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)))
@@ -1759,16 +1760,18 @@ 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;
- 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))
{
@@ -1809,8 +1812,7 @@ event_callback (XEvent *event,
*/
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
@@ -1831,7 +1833,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
@@ -1847,7 +1849,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)
{
@@ -1889,21 +1891,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);
}
@@ -1946,7 +1948,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]