[mutter] core: Make meta_window_handle_ungrabbed_event() touch-aware
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] core: Make meta_window_handle_ungrabbed_event() touch-aware
- Date: Wed, 25 Nov 2015 17:03:30 +0000 (UTC)
commit c625d2ee9d8db4017f0a4add8fd0ca34165e473e
Author: Carlos Garnacho <carlosg gnome org>
Date: Tue Nov 24 15:43:42 2015 +0100
core: Make meta_window_handle_ungrabbed_event() touch-aware
This fixes the effects of this function on touchscreens in wayland
(most notably, window raising & focusing).
src/core/window.c | 58 +++++++++++++++++++++++++++++++++-------------------
1 files changed, 37 insertions(+), 21 deletions(-)
---
diff --git a/src/core/window.c b/src/core/window.c
index 9604a7d..7ae0467 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -7669,13 +7669,29 @@ meta_window_handle_ungrabbed_event (MetaWindow *window,
MetaDisplay *display = window->display;
gboolean unmodified;
gboolean is_window_grab;
+ ClutterModifierType grab_mods, event_mods;
+ gfloat x, y;
+ guint button;
if (window->frame && meta_ui_frame_handle_event (window->frame->ui_frame, event))
return;
- if (event->type != CLUTTER_BUTTON_PRESS)
+ if (event->type != CLUTTER_BUTTON_PRESS &&
+ event->type != CLUTTER_TOUCH_BEGIN)
return;
+ if (event->type == CLUTTER_TOUCH_BEGIN)
+ {
+ ClutterEventSequence *sequence;
+
+ button = 1;
+ sequence = clutter_event_get_event_sequence (event);
+ if (!meta_display_is_pointer_emulating_sequence (window->display, sequence))
+ return;
+ }
+ else
+ button = clutter_event_get_button (event);
+
if (display->grab_op != META_GRAB_OP_NONE)
return;
@@ -7706,9 +7722,12 @@ meta_window_handle_ungrabbed_event (MetaWindow *window,
* care about. Just let the event through.
*/
- ClutterModifierType grab_mods = meta_display_get_window_grab_modifiers (display);
- unmodified = (event->button.modifier_state & grab_mods) == 0;
- is_window_grab = (event->button.modifier_state & grab_mods) == grab_mods;
+ grab_mods = meta_display_get_window_grab_modifiers (display);
+ event_mods = clutter_event_get_state (event);
+ unmodified = (event_mods & grab_mods) == 0;
+ is_window_grab = (event_mods & grab_mods) == grab_mods;
+
+ clutter_event_get_coords (event, &x, &y);
if (unmodified)
{
@@ -7725,7 +7744,7 @@ meta_window_handle_ungrabbed_event (MetaWindow *window,
{
meta_topic (META_DEBUG_FOCUS,
"Focusing %s due to unmodified button %u press (display.c)\n",
- window->desc, event->button.button);
+ window->desc, button);
meta_window_focus (window, event->any.time);
}
else
@@ -7735,9 +7754,9 @@ meta_window_handle_ungrabbed_event (MetaWindow *window,
display->allow_terminal_deactivation = TRUE;
meta_verbose ("Allowing events time %u\n",
- (unsigned int)event->button.time);
+ (unsigned int)event->any.time);
}
- else if (is_window_grab && (int) event->button.button == meta_prefs_get_mouse_button_resize ())
+ else if (is_window_grab && (int) button == meta_prefs_get_mouse_button_resize ())
{
if (window->has_resize_func)
{
@@ -7748,10 +7767,10 @@ meta_window_handle_ungrabbed_event (MetaWindow *window,
meta_window_get_frame_rect (window, &frame_rect);
- west = event->button.x < (frame_rect.x + 1 * frame_rect.width / 3);
- east = event->button.x > (frame_rect.x + 2 * frame_rect.width / 3);
- north = event->button.y < (frame_rect.y + 1 * frame_rect.height / 3);
- south = event->button.y > (frame_rect.y + 2 * frame_rect.height / 3);
+ west = x < (frame_rect.x + 1 * frame_rect.width / 3);
+ east = x > (frame_rect.x + 2 * frame_rect.width / 3);
+ north = y < (frame_rect.y + 1 * frame_rect.height / 3);
+ south = y > (frame_rect.y + 2 * frame_rect.height / 3);
if (west)
op |= META_GRAB_OP_WINDOW_DIR_WEST;
@@ -7769,23 +7788,21 @@ meta_window_handle_ungrabbed_event (MetaWindow *window,
op,
TRUE,
FALSE,
- event->button.button,
+ button,
0,
event->any.time,
- event->button.x,
- event->button.y);
+ x, y);
}
}
- else if (is_window_grab && (int) event->button.button == meta_prefs_get_mouse_button_menu ())
+ else if (is_window_grab && (int) button == meta_prefs_get_mouse_button_menu ())
{
if (meta_prefs_get_raise_on_click ())
meta_window_raise (window);
meta_window_show_menu (window,
META_WINDOW_MENU_WM,
- event->button.x,
- event->button.y);
+ x, y);
}
- else if (is_window_grab && (int) event->button.button == 1)
+ else if (is_window_grab && (int) button == 1)
{
if (window->has_move_func)
{
@@ -7795,11 +7812,10 @@ meta_window_handle_ungrabbed_event (MetaWindow *window,
META_GRAB_OP_MOVING,
TRUE,
FALSE,
- event->button.button,
+ button,
0,
event->any.time,
- event->button.x,
- event->button.y);
+ x, y);
}
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]