[broadway] Track and report last and future state
This fixes the drawing area demo in gtk-demo
This commit is contained in:
parent
1a7b76d49d
commit
8c20b476df
@ -175,9 +175,6 @@ gdk_broadway_device_query_state (GdkDevice *device,
|
||||
*root_window = gdk_screen_get_root_window (screen);
|
||||
}
|
||||
|
||||
if (mask)
|
||||
*mask = 0; /* TODO */
|
||||
|
||||
if (broadway_display->output)
|
||||
{
|
||||
_gdk_broadway_display_consume_all_input (display);
|
||||
@ -190,6 +187,8 @@ gdk_broadway_device_query_state (GdkDevice *device,
|
||||
*win_x = broadway_display->future_root_x - toplevel->x;
|
||||
if (win_y)
|
||||
*win_y = broadway_display->future_root_y - toplevel->y;
|
||||
if (mask)
|
||||
*mask = broadway_display->future_state;
|
||||
if (child_window)
|
||||
{
|
||||
if (gdk_window_get_window_type (toplevel) == GDK_WINDOW_ROOT)
|
||||
@ -215,6 +214,8 @@ gdk_broadway_device_query_state (GdkDevice *device,
|
||||
*win_x = device_root_y - toplevel->x;
|
||||
if (win_y)
|
||||
*win_y = device_root_y - toplevel->y;
|
||||
if (mask)
|
||||
*mask = broadway_display->last_state;
|
||||
if (child_window)
|
||||
{
|
||||
if (gdk_window_get_window_type (toplevel) == GDK_WINDOW_ROOT)
|
||||
|
@ -190,6 +190,7 @@ update_future_pointer_info (GdkBroadwayDisplay *broadway_display, BroadwayInputP
|
||||
{
|
||||
broadway_display->future_root_x = data->root_x;
|
||||
broadway_display->future_root_y = data->root_y;
|
||||
broadway_display->future_state = data->state;
|
||||
broadway_display->future_mouse_in_toplevel = data->mouse_window_id;
|
||||
}
|
||||
|
||||
|
@ -125,6 +125,7 @@ struct _GdkBroadwayDisplay
|
||||
GSource *event_source;
|
||||
GdkWindow *mouse_in_toplevel;
|
||||
int last_x, last_y; /* in root coords */
|
||||
guint32 last_state;
|
||||
GdkWindow *real_mouse_in_toplevel; /* Not affected by grabs */
|
||||
|
||||
/* Keyboard related information */
|
||||
@ -165,6 +166,7 @@ struct _GdkBroadwayDisplay
|
||||
/* Future data, from the currently queued events */
|
||||
int future_root_x;
|
||||
int future_root_y;
|
||||
GdkModifierType future_state;
|
||||
int future_mouse_in_toplevel;
|
||||
};
|
||||
|
||||
|
@ -103,6 +103,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
|
||||
case 'e': /* Enter */
|
||||
display_broadway->last_x = message->pointer.root_x;
|
||||
display_broadway->last_y = message->pointer.root_y;
|
||||
display_broadway->last_state = message->pointer.state;
|
||||
display_broadway->real_mouse_in_toplevel =
|
||||
g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));
|
||||
|
||||
@ -139,6 +140,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
|
||||
case 'l': /* Leave */
|
||||
display_broadway->last_x = message->pointer.root_x;
|
||||
display_broadway->last_y = message->pointer.root_y;
|
||||
display_broadway->last_state = message->pointer.state;
|
||||
display_broadway->real_mouse_in_toplevel =
|
||||
g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));
|
||||
|
||||
@ -174,6 +176,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
|
||||
case 'm': /* Mouse move */
|
||||
display_broadway->last_x = message->pointer.root_x;
|
||||
display_broadway->last_y = message->pointer.root_y;
|
||||
display_broadway->last_state = message->pointer.state;
|
||||
display_broadway->real_mouse_in_toplevel =
|
||||
g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));
|
||||
|
||||
@ -199,6 +202,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
|
||||
case 'B':
|
||||
display_broadway->last_x = message->pointer.root_x;
|
||||
display_broadway->last_y = message->pointer.root_y;
|
||||
display_broadway->last_state = message->pointer.state;
|
||||
display_broadway->real_mouse_in_toplevel =
|
||||
g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));
|
||||
|
||||
@ -224,6 +228,7 @@ _gdk_broadway_events_got_input (GdkDisplay *display,
|
||||
case 's':
|
||||
display_broadway->last_x = message->pointer.root_x;
|
||||
display_broadway->last_y = message->pointer.root_y;
|
||||
display_broadway->last_state = message->pointer.state;
|
||||
display_broadway->real_mouse_in_toplevel =
|
||||
g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (message->pointer.mouse_window_id));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user