Add meta_display_set_alarm_filter()
Add a private hook for the test framework to get XSyncAlarmEvent events - this will be used to implement XSyncCounter based synchronization so that the test framework can deterministically wait until Mutter has seen actions performed by an X11 client. https://bugzilla.gnome.org/show_bug.cgi?id=736505
This commit is contained in:
parent
0706de5378
commit
44ecb1c050
3 changed files with 30 additions and 0 deletions
|
@ -97,6 +97,10 @@ typedef enum {
|
||||||
META_EVENT_ROUTE_WINDOW_OP,
|
META_EVENT_ROUTE_WINDOW_OP,
|
||||||
} MetaEventRoute;
|
} MetaEventRoute;
|
||||||
|
|
||||||
|
typedef gboolean (*MetaAlarmFilter) (MetaDisplay *display,
|
||||||
|
XSyncAlarmNotifyEvent *event,
|
||||||
|
gpointer data);
|
||||||
|
|
||||||
struct _MetaDisplay
|
struct _MetaDisplay
|
||||||
{
|
{
|
||||||
GObject parent_instance;
|
GObject parent_instance;
|
||||||
|
@ -256,6 +260,9 @@ struct _MetaDisplay
|
||||||
MetaGestureTracker *gesture_tracker;
|
MetaGestureTracker *gesture_tracker;
|
||||||
ClutterEventSequence *pointer_emulating_sequence;
|
ClutterEventSequence *pointer_emulating_sequence;
|
||||||
|
|
||||||
|
MetaAlarmFilter alarm_filter;
|
||||||
|
gpointer alarm_filter_data;
|
||||||
|
|
||||||
int composite_event_base;
|
int composite_event_base;
|
||||||
int composite_error_base;
|
int composite_error_base;
|
||||||
int composite_major_version;
|
int composite_major_version;
|
||||||
|
@ -453,4 +460,8 @@ void meta_display_cancel_touch (MetaDisplay *display);
|
||||||
|
|
||||||
gboolean meta_display_windows_are_interactable (MetaDisplay *display);
|
gboolean meta_display_windows_are_interactable (MetaDisplay *display);
|
||||||
|
|
||||||
|
gboolean meta_display_set_alarm_filter (MetaDisplay *display,
|
||||||
|
MetaAlarmFilter filter,
|
||||||
|
gpointer data);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -2954,3 +2954,14 @@ meta_display_is_pointer_emulating_sequence (MetaDisplay *display,
|
||||||
|
|
||||||
return display->pointer_emulating_sequence == sequence;
|
return display->pointer_emulating_sequence == sequence;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
meta_display_set_alarm_filter (MetaDisplay *display,
|
||||||
|
MetaAlarmFilter filter,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
g_return_if_fail (filter == NULL || display->alarm_filter == NULL);
|
||||||
|
|
||||||
|
display->alarm_filter = filter;
|
||||||
|
display->alarm_filter_data = data;
|
||||||
|
}
|
||||||
|
|
|
@ -1188,6 +1188,14 @@ handle_other_xevent (MetaDisplay *display,
|
||||||
meta_window_x11_update_sync_request_counter (alarm_window, new_counter_value);
|
meta_window_x11_update_sync_request_counter (alarm_window, new_counter_value);
|
||||||
bypass_gtk = TRUE; /* GTK doesn't want to see this really */
|
bypass_gtk = TRUE; /* GTK doesn't want to see this really */
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (display->alarm_filter &&
|
||||||
|
display->alarm_filter (display,
|
||||||
|
(XSyncAlarmNotifyEvent*)event,
|
||||||
|
display->alarm_filter_data))
|
||||||
|
bypass_gtk = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue