kms/result-listener: Allow setting a custom main context
While the default when passing NULL will be the main context of the main thread, make it possible to specify another main context, so that result handlers can be invoked on the right thread. Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2777>
This commit is contained in:
@ -361,6 +361,7 @@ assign_cursor_plane (MetaCursorRendererNative *native,
|
||||
cursor_hotspot_y);
|
||||
|
||||
meta_kms_update_add_result_listener (kms_update,
|
||||
NULL,
|
||||
on_kms_update_result,
|
||||
native);
|
||||
|
||||
|
@ -128,6 +128,7 @@ typedef struct _MetaKmsPageFlipListener
|
||||
|
||||
struct _MetaKmsResultListener
|
||||
{
|
||||
GMainContext *main_context;
|
||||
MetaKmsResultListenerFunc func;
|
||||
gpointer user_data;
|
||||
|
||||
@ -191,8 +192,11 @@ MetaKmsCustomPageFlip * meta_kms_update_take_custom_page_flip_func (MetaKmsUpdat
|
||||
void meta_kms_update_drop_plane_assignment (MetaKmsUpdate *update,
|
||||
MetaKmsPlane *plane);
|
||||
|
||||
META_EXPORT_TEST
|
||||
GList * meta_kms_update_take_result_listeners (MetaKmsUpdate *update);
|
||||
|
||||
GMainContext * meta_kms_result_listener_get_main_context (MetaKmsResultListener *listener);
|
||||
|
||||
void meta_kms_result_listener_set_feedback (MetaKmsResultListener *listener,
|
||||
MetaKmsFeedback *feedback);
|
||||
|
||||
|
@ -607,6 +607,7 @@ meta_kms_plane_assignment_set_cursor_hotspot (MetaKmsPlaneAssignment *plane_assi
|
||||
|
||||
void
|
||||
meta_kms_update_add_result_listener (MetaKmsUpdate *update,
|
||||
GMainContext *main_context,
|
||||
MetaKmsResultListenerFunc func,
|
||||
gpointer user_data)
|
||||
{
|
||||
@ -614,6 +615,7 @@ meta_kms_update_add_result_listener (MetaKmsUpdate *update,
|
||||
|
||||
listener = g_new0 (MetaKmsResultListener, 1);
|
||||
*listener = (MetaKmsResultListener) {
|
||||
.main_context = main_context,
|
||||
.func = func,
|
||||
.user_data = user_data,
|
||||
};
|
||||
@ -628,6 +630,12 @@ meta_kms_update_take_result_listeners (MetaKmsUpdate *update)
|
||||
return g_steal_pointer (&update->result_listeners);
|
||||
}
|
||||
|
||||
GMainContext *
|
||||
meta_kms_result_listener_get_main_context (MetaKmsResultListener *listener)
|
||||
{
|
||||
return listener->main_context;
|
||||
}
|
||||
|
||||
void
|
||||
meta_kms_result_listener_set_feedback (MetaKmsResultListener *listener,
|
||||
MetaKmsFeedback *feedback)
|
||||
|
@ -92,6 +92,7 @@ GList * meta_kms_feedback_get_failed_planes (const MetaKmsFeedback *feedback);
|
||||
|
||||
const GError * meta_kms_feedback_get_error (const MetaKmsFeedback *feedback);
|
||||
|
||||
META_EXPORT_TEST
|
||||
void meta_kms_feedback_dispatch_result (MetaKmsFeedback *feedback,
|
||||
MetaKms *kms,
|
||||
GList *result_listeners);
|
||||
@ -183,6 +184,7 @@ void meta_kms_plane_assignment_set_cursor_hotspot (MetaKmsPlaneAssignment *plane
|
||||
|
||||
META_EXPORT_TEST
|
||||
void meta_kms_update_add_result_listener (MetaKmsUpdate *update,
|
||||
GMainContext *main_context,
|
||||
MetaKmsResultListenerFunc func,
|
||||
gpointer user_data);
|
||||
|
||||
|
@ -169,8 +169,11 @@ void
|
||||
meta_kms_queue_result_callback (MetaKms *kms,
|
||||
MetaKmsResultListener *listener)
|
||||
{
|
||||
GMainContext *main_context =
|
||||
meta_kms_result_listener_get_main_context (listener);
|
||||
|
||||
meta_kms_queue_callback (kms,
|
||||
NULL,
|
||||
main_context,
|
||||
invoke_result_listener,
|
||||
listener,
|
||||
(GDestroyNotify) meta_kms_result_listener_free);
|
||||
|
@ -1171,6 +1171,7 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen,
|
||||
kms_update = meta_frame_native_ensure_kms_update (frame_native,
|
||||
kms_device);
|
||||
meta_kms_update_add_result_listener (kms_update,
|
||||
NULL,
|
||||
on_swap_buffer_update_result,
|
||||
onscreen_native);
|
||||
|
||||
@ -1389,6 +1390,7 @@ meta_onscreen_native_direct_scanout (CoglOnscreen *onscreen,
|
||||
kms_update = meta_frame_native_ensure_kms_update (frame_native, kms_device);
|
||||
|
||||
meta_kms_update_add_result_listener (kms_update,
|
||||
NULL,
|
||||
on_scanout_update_result,
|
||||
onscreen_native);
|
||||
|
||||
@ -1542,6 +1544,7 @@ meta_onscreen_native_finish_frame (CoglOnscreen *onscreen,
|
||||
}
|
||||
|
||||
meta_kms_update_add_result_listener (kms_update,
|
||||
NULL,
|
||||
on_finish_frame_update_result,
|
||||
onscreen_native);
|
||||
|
||||
|
@ -865,6 +865,7 @@ post_mode_set_updates (MetaRendererNative *renderer_native)
|
||||
g_hash_table_iter_steal (&iter);
|
||||
|
||||
meta_kms_update_add_result_listener (kms_update,
|
||||
NULL,
|
||||
on_mode_sets_update_result,
|
||||
NULL);
|
||||
|
||||
|
Reference in New Issue
Block a user