[mutter/wip/carlosg/xwayland-startup-side-channel: 7/7] xwayland: Allow setting up maintenance processes
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/wip/carlosg/xwayland-startup-side-channel: 7/7] xwayland: Allow setting up maintenance processes
- Date: Tue, 19 Nov 2019 19:07:49 +0000 (UTC)
commit 2eb6f7fae089f2f61cc84cfe023216bae70529fe
Author: Carlos Garnacho <carlosg gnome org>
Date: Sat Jul 20 00:22:13 2019 +0200
xwayland: Allow setting up maintenance processes
This is made a signal, so the upper layers (read: gnome-shell) may
decide what services to spawn. The signal argument contains a task
that will resume MetaX11Display startup after it is returned upon.
src/core/display.c | 31 ++++++++++++++++++++++++++-----
1 file changed, 26 insertions(+), 5 deletions(-)
---
diff --git a/src/core/display.c b/src/core/display.c
index add1cf3a6..74542ee3e 100644
--- a/src/core/display.c
+++ b/src/core/display.c
@@ -157,6 +157,7 @@ enum
RESTACKED,
WORKAREAS_CHANGED,
CLOSING,
+ INIT_XSERVER,
LAST_SIGNAL
};
@@ -501,6 +502,14 @@ meta_display_class_init (MetaDisplayClass *klass)
0, NULL, NULL, NULL,
G_TYPE_NONE, 0);
+ display_signals[INIT_XSERVER] =
+ g_signal_new ("init-xserver",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0, g_signal_accumulator_first_wins,
+ NULL, NULL,
+ G_TYPE_BOOLEAN, 1, G_TYPE_TASK);
+
g_object_class_install_property (object_class,
PROP_FOCUS_WINDOW,
g_param_spec_object ("focus-window",
@@ -722,15 +731,27 @@ on_xserver_started (MetaXWaylandManager *manager,
gpointer user_data)
{
GTask *task = user_data;
+ MetaDisplay *display = g_task_get_source_object (task);
GError *error = NULL;
gboolean retval;
- retval = meta_xwayland_start_xserver_finish (manager, result, &error);
+ if (!meta_xwayland_start_xserver_finish (manager, result, &error))
+ {
+ if (error)
+ g_task_return_error (task, error);
+ else
+ g_task_return_boolean (task, FALSE);
- if (error)
- g_task_return_error (task, error);
- else
- g_task_return_boolean (task, retval);
+ return;
+ }
+
+ g_signal_emit (display, display_signals[INIT_XSERVER], 0, task, &retval);
+
+ if (!retval)
+ {
+ /* No handlers for this signal, proceed right away */
+ g_task_return_boolean (task, TRUE);
+ }
}
#endif
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]