diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2014-05-28 09:31:43 +0200 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2014-06-17 13:45:50 +1200 |
commit | e40795cbffee4d153ca7a6096c11eedb9a7073d1 (patch) | |
tree | 10b6a4c31d6975185207933dd60546262f2b1126 | |
parent | 2c6694dbd7a3a8eec228ea34044ab1c674490aee (diff) | |
download | gtk+-e40795cbffee4d153ca7a6096c11eedb9a7073d1.tar.gz |
Generate crossing events
-rw-r--r-- | gdk/mir/gdkmirwindowimpl.c | 43 |
1 files changed, 34 insertions, 9 deletions
diff --git a/gdk/mir/gdkmirwindowimpl.c b/gdk/mir/gdkmirwindowimpl.c index e1c5974880..08fe2f534f 100644 --- a/gdk/mir/gdkmirwindowimpl.c +++ b/gdk/mir/gdkmirwindowimpl.c @@ -463,6 +463,21 @@ generate_motion_event (GdkWindow *window, gdouble x, gdouble y, guint state) send_event (window, get_pointer (window), event); } +static void +generate_crossing_event (GdkWindow *window, GdkEventType type, gdouble x, gdouble y) +{ + GdkEvent *event; + + event = gdk_event_new (type); + event->crossing.x = x; + event->crossing.y = y; + event->crossing.mode = GDK_CROSSING_NORMAL; + event->crossing.detail = GDK_NOTIFY_ANCESTOR; + event->crossing.focus = TRUE; + + send_event (window, get_pointer (window), event); +} + static guint get_modifier_state (unsigned int modifiers, unsigned int button_state) { @@ -548,20 +563,24 @@ handle_motion_event (GdkWindow *window, MirMotionEvent *event) case mir_motion_action_up: event_type = event->action == mir_motion_action_down ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE; changed_button_state = impl->button_state ^ event->button_state; - if ((changed_button_state & mir_motion_button_primary) != 0) - generate_button_event (window, event_type, impl->x, impl->y, GDK_BUTTON_PRIMARY, modifier_state); - if ((changed_button_state & mir_motion_button_secondary) != 0) - generate_button_event (window, event_type, impl->x, impl->y, GDK_BUTTON_SECONDARY, modifier_state); - if ((changed_button_state & mir_motion_button_tertiary) != 0) - generate_button_event (window, event_type, impl->x, impl->y, GDK_BUTTON_MIDDLE, modifier_state); - impl->button_state = event->button_state; + if ((changed_button_state & mir_motion_button_primary) != 0) + generate_button_event (window, event_type, impl->x, impl->y, GDK_BUTTON_PRIMARY, modifier_state); + if ((changed_button_state & mir_motion_button_secondary) != 0) + generate_button_event (window, event_type, impl->x, impl->y, GDK_BUTTON_SECONDARY, modifier_state); + if ((changed_button_state & mir_motion_button_tertiary) != 0) + generate_button_event (window, event_type, impl->x, impl->y, GDK_BUTTON_MIDDLE, modifier_state); + impl->button_state = event->button_state; break; case mir_motion_action_scroll: generate_scroll_event (window, impl->x, impl->y, event->pointer_coordinates[0].hscroll, event->pointer_coordinates[0].vscroll, modifier_state); break; case mir_motion_action_move: // move with button case mir_motion_action_hover_move: // move without button - generate_motion_event (window, impl->x, impl->y, modifier_state); + generate_motion_event (window, impl->x, impl->y, modifier_state); + break; + case mir_motion_action_hover_enter: + case mir_motion_action_hover_exit: + generate_crossing_event (window, event->action == mir_motion_action_hover_enter ? GDK_ENTER_NOTIFY : GDK_LEAVE_NOTIFY, impl->x, impl->y); break; } } @@ -869,6 +888,12 @@ gdk_mir_window_impl_move_resize (GdkWindow *window, { g_printerr ("gdk_mir_window_impl_move_resize (%d, %d, %d, %d)\n", x, y, width, height); + if (with_move) + { + window->x = x; + window->y = y; + } + /* If resize requested then destroy surface */ if (width >= 0) ensure_no_surface (window); @@ -898,7 +923,7 @@ gdk_mir_window_impl_set_events (GdkWindow *window, GdkEventMask event_mask) { //g_printerr ("gdk_mir_window_impl_set_events\n"); - /* We send all events and let GTK+ decide */ + /* We send all events and let GDK decide */ } static gboolean |