From: William Hua Date: Fri, 3 Jul 2015 16:11:19 +0000 (-0400) Subject: mir: fix mir pointer event to gdk translation X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~24^2~9207 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=1e6c7e3af09c5ec0aed5297fc285d13cff76e720;p=gtk4.git mir: fix mir pointer event to gdk translation --- diff --git a/gdk/mir/gdkmireventsource.c b/gdk/mir/gdkmireventsource.c index c088ca4338..5732f2bc06 100644 --- a/gdk/mir/gdkmireventsource.c +++ b/gdk/mir/gdkmireventsource.c @@ -236,9 +236,9 @@ generate_focus_event (GdkWindow *window, gboolean focused) } static guint -get_modifier_state (unsigned int modifiers, unsigned int button_state) +get_modifier_state (unsigned int modifiers, guint button_state) { - guint modifier_state = 0; + guint modifier_state = button_state; if ((modifiers & (mir_input_event_modifier_alt | mir_input_event_modifier_alt_left | @@ -258,16 +258,6 @@ get_modifier_state (unsigned int modifiers, unsigned int button_state) modifier_state |= GDK_META_MASK; if ((modifiers & mir_input_event_modifier_caps_lock) != 0) modifier_state |= GDK_LOCK_MASK; - if ((button_state & mir_pointer_button_primary) != 0) - modifier_state |= GDK_BUTTON1_MASK; - if ((button_state & mir_pointer_button_secondary) != 0) - modifier_state |= GDK_BUTTON2_MASK; - if ((button_state & mir_pointer_button_tertiary) != 0) - modifier_state |= GDK_BUTTON3_MASK; - if ((button_state & mir_pointer_button_back) != 0) - modifier_state |= GDK_BUTTON4_MASK; - if ((button_state & mir_pointer_button_forward) != 0) - modifier_state |= GDK_BUTTON5_MASK; return modifier_state; } @@ -309,22 +299,18 @@ handle_key_event (GdkWindow *window, const MirInputEvent *event) } static guint -mir_pointer_event_get_button_state (const MirPointerEvent *event) +get_button_state (const MirPointerEvent *event) { - guint button_state = 0; - - if (mir_pointer_event_button_state (event, mir_pointer_button_primary)) - button_state |= mir_pointer_button_primary; - if (mir_pointer_event_button_state (event, mir_pointer_button_secondary)) - button_state |= mir_pointer_button_secondary; - if (mir_pointer_event_button_state (event, mir_pointer_button_tertiary)) - button_state |= mir_pointer_button_tertiary; - if (mir_pointer_event_button_state (event, mir_pointer_button_back)) - button_state |= mir_pointer_button_back; - if (mir_pointer_event_button_state (event, mir_pointer_button_forward)) - button_state |= mir_pointer_button_forward; - - return button_state; + guint state = 0; + + if (mir_pointer_event_button_state (event, mir_pointer_button_primary)) /* left */ + state |= GDK_BUTTON1_MASK; + if (mir_pointer_event_button_state (event, mir_pointer_button_secondary)) /* right */ + state |= GDK_BUTTON3_MASK; + if (mir_pointer_event_button_state (event, mir_pointer_button_tertiary)) /* middle */ + state |= GDK_BUTTON2_MASK; + + return state; } static void @@ -335,6 +321,7 @@ handle_motion_event (GdkWindow *window, const MirInputEvent *event) gdouble x, y; gboolean cursor_inside; guint button_state; + guint new_button_state; guint modifier_state; guint32 event_time; GdkEventType event_type; @@ -344,7 +331,8 @@ handle_motion_event (GdkWindow *window, const MirInputEvent *event) return; _gdk_mir_window_impl_get_cursor_state (impl, &x, &y, &cursor_inside, &button_state); - modifier_state = get_modifier_state (mir_pointer_event_modifiers (pointer_event), mir_pointer_event_get_button_state (pointer_event)); + new_button_state = get_button_state (pointer_event); + modifier_state = get_modifier_state (mir_pointer_event_modifiers (pointer_event), new_button_state); event_time = NANO_TO_MILLI (mir_input_event_get_event_time (event)); if (window) @@ -361,14 +349,14 @@ handle_motion_event (GdkWindow *window, const MirInputEvent *event) case mir_pointer_action_button_up: case mir_pointer_action_button_down: event_type = mir_pointer_event_action (pointer_event) == mir_pointer_action_button_down ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE; - changed_button_state = button_state ^ mir_pointer_event_get_button_state (pointer_event); - if (changed_button_state == 0 || (changed_button_state & mir_pointer_button_primary) != 0) + changed_button_state = button_state ^ new_button_state; + if (changed_button_state == 0 || (changed_button_state & GDK_BUTTON1_MASK) != 0) generate_button_event (window, event_type, x, y, GDK_BUTTON_PRIMARY, modifier_state, event_time); - if ((changed_button_state & mir_pointer_button_secondary) != 0) - generate_button_event (window, event_type, x, y, GDK_BUTTON_SECONDARY, modifier_state, event_time); - if ((changed_button_state & mir_pointer_button_tertiary) != 0) + if ((changed_button_state & GDK_BUTTON2_MASK) != 0) generate_button_event (window, event_type, x, y, GDK_BUTTON_MIDDLE, modifier_state, event_time); - button_state = mir_pointer_event_get_button_state (pointer_event); + if ((changed_button_state & GDK_BUTTON3_MASK) != 0) + generate_button_event (window, event_type, x, y, GDK_BUTTON_SECONDARY, modifier_state, event_time); + button_state = new_button_state; break; case mir_pointer_action_motion: new_x = mir_pointer_event_axis_value (pointer_event, mir_pointer_axis_x);