native/seat-impl: Add helper for queuing main thread idle callbacks

Make the emit main thread signal use it. Will be used for calling code
on the main thread from the input thread.

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1739>
This commit is contained in:
Jonas Ådahl 2021-02-23 09:01:24 +01:00 committed by Marge Bot
parent adc6537917
commit 26912523fa
2 changed files with 25 additions and 10 deletions

View File

@ -306,6 +306,22 @@ update_button_count (MetaSeatImpl *seat_impl,
} }
} }
void
meta_seat_impl_queue_main_thread_idle (MetaSeatImpl *seat_impl,
GSourceFunc func,
gpointer user_data,
GDestroyNotify destroy_notify)
{
GSource *source;
source = g_idle_source_new ();
g_source_set_priority (source, G_PRIORITY_HIGH);
g_source_set_callback (source, func, user_data, destroy_notify);
g_source_attach (source, seat_impl->main_context);
g_source_unref (source);
}
typedef struct typedef struct
{ {
MetaSeatImpl *seat_impl; MetaSeatImpl *seat_impl;
@ -337,7 +353,6 @@ emit_signal (MetaSeatImpl *seat_impl,
int n_args) int n_args)
{ {
MetaSeatSignalData *emit_signal_data; MetaSeatSignalData *emit_signal_data;
GSource *source;
GArray *array; GArray *array;
GValue self = G_VALUE_INIT; GValue self = G_VALUE_INIT;
@ -354,15 +369,10 @@ emit_signal (MetaSeatImpl *seat_impl,
emit_signal_data->signal_id = signal_id; emit_signal_data->signal_id = signal_id;
emit_signal_data->args = array; emit_signal_data->args = array;
source = g_idle_source_new (); meta_seat_impl_queue_main_thread_idle (seat_impl,
g_source_set_priority (source, G_PRIORITY_HIGH);
g_source_set_callback (source,
(GSourceFunc) emit_signal_in_main, (GSourceFunc) emit_signal_in_main,
emit_signal_data, emit_signal_data,
(GDestroyNotify) signal_data_free); (GDestroyNotify) signal_data_free);
g_source_attach (source, seat_impl->main_context);
g_source_unref (source);
} }
void void

View File

@ -264,4 +264,9 @@ void meta_seat_impl_notify_bell_in_impl (MetaSeatImpl *seat_impl);
MetaInputSettings * meta_seat_impl_get_input_settings (MetaSeatImpl *seat_impl); MetaInputSettings * meta_seat_impl_get_input_settings (MetaSeatImpl *seat_impl);
void meta_seat_impl_queue_main_thread_idle (MetaSeatImpl *seat_impl,
GSourceFunc func,
gpointer user_data,
GDestroyNotify destroy_notify);
#endif /* META_SEAT_IMPL_H */ #endif /* META_SEAT_IMPL_H */