[gnome-session] Add a new autostart phase, DisplayServer, that runs before Initialization



commit 672cb149b846597e7d3cb66692d31a7df5450ee2
Author: Giovanni Campagna <gcampagn redhat com>
Date:   Tue Aug 20 15:11:08 2013 +0200

    Add a new autostart phase, DisplayServer, that runs before Initialization
    
    This way, the wayland compositor can initialize (and spawn XWayland)
    before gnome-settings-daemon starts.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=706420

 gnome-session/gsm-autostart-app.c |    2 ++
 gnome-session/gsm-manager.c       |   10 ++++++++--
 gnome-session/gsm-manager.h       |    2 ++
 3 files changed, 12 insertions(+), 2 deletions(-)
---
diff --git a/gnome-session/gsm-autostart-app.c b/gnome-session/gsm-autostart-app.c
index c6c2c31..a1109f7 100644
--- a/gnome-session/gsm-autostart-app.c
+++ b/gnome-session/gsm-autostart-app.c
@@ -610,6 +610,8 @@ load_desktop_file (GsmAutostartApp  *app)
         if (phase_str != NULL) {
                 if (strcmp (phase_str, "EarlyInitialization") == 0) {
                         phase = GSM_MANAGER_PHASE_EARLY_INITIALIZATION;
+                } else if (strcmp (phase_str, "DisplayServer") == 0) {
+                        phase = GSM_MANAGER_PHASE_DISPLAY_SERVER;
                 } else if (strcmp (phase_str, "Initialization") == 0) {
                         phase = GSM_MANAGER_PHASE_INITIALIZATION;
                 } else if (strcmp (phase_str, "WindowManager") == 0) {
diff --git a/gnome-session/gsm-manager.c b/gnome-session/gsm-manager.c
index 8f9f729..5d36e1f 100644
--- a/gnome-session/gsm-manager.c
+++ b/gnome-session/gsm-manager.c
@@ -448,6 +448,9 @@ phase_num_to_name (guint phase)
         case GSM_MANAGER_PHASE_EARLY_INITIALIZATION:
                 name = "EARLY_INITIALIZATION";
                 break;
+        case GSM_MANAGER_PHASE_DISPLAY_SERVER:
+                name = "DISPLAY_SERVER";
+                break;
         case GSM_MANAGER_PHASE_INITIALIZATION:
                 name = "INITIALIZATION";
                 break;
@@ -540,6 +543,7 @@ end_phase (GsmManager *manager)
         switch (manager->priv->phase) {
         case GSM_MANAGER_PHASE_STARTUP:
         case GSM_MANAGER_PHASE_EARLY_INITIALIZATION:
+        case GSM_MANAGER_PHASE_DISPLAY_SERVER:
         case GSM_MANAGER_PHASE_INITIALIZATION:
         case GSM_MANAGER_PHASE_WINDOW_MANAGER:
         case GSM_MANAGER_PHASE_PANEL:
@@ -688,6 +692,7 @@ on_phase_timeout (GsmManager *manager)
         switch (manager->priv->phase) {
         case GSM_MANAGER_PHASE_STARTUP:
         case GSM_MANAGER_PHASE_EARLY_INITIALIZATION:
+        case GSM_MANAGER_PHASE_DISPLAY_SERVER:
         case GSM_MANAGER_PHASE_INITIALIZATION:
         case GSM_MANAGER_PHASE_WINDOW_MANAGER:
         case GSM_MANAGER_PHASE_PANEL:
@@ -1525,6 +1530,7 @@ start_phase (GsmManager *manager)
         switch (manager->priv->phase) {
         case GSM_MANAGER_PHASE_STARTUP:
         case GSM_MANAGER_PHASE_EARLY_INITIALIZATION:
+        case GSM_MANAGER_PHASE_DISPLAY_SERVER:
         case GSM_MANAGER_PHASE_INITIALIZATION:
         case GSM_MANAGER_PHASE_WINDOW_MANAGER:
         case GSM_MANAGER_PHASE_PANEL:
@@ -2937,7 +2943,7 @@ gsm_manager_setenv (GsmManager  *manager,
                 g_set_error (error,
                              GSM_MANAGER_ERROR,
                              GSM_MANAGER_ERROR_NOT_IN_INITIALIZATION,
-                             "Setenv interface is only available during the Initialization phase");
+                             "Setenv interface is only available during the DisplayServer and Initialization 
phase");
                 return FALSE;
         }
 
@@ -3016,7 +3022,7 @@ gsm_manager_initialization_error (GsmManager  *manager,
 {
         g_return_val_if_fail (GSM_IS_MANAGER (manager), FALSE);
 
-        if (manager->priv->phase > GSM_MANAGER_PHASE_INITIALIZATION) {
+        if (manager->priv->phase != GSM_MANAGER_PHASE_INITIALIZATION) {
                 g_set_error (error,
                              GSM_MANAGER_ERROR,
                              GSM_MANAGER_ERROR_NOT_IN_INITIALIZATION,
diff --git a/gnome-session/gsm-manager.h b/gnome-session/gsm-manager.h
index e60a3a2..71bc142 100644
--- a/gnome-session/gsm-manager.h
+++ b/gnome-session/gsm-manager.h
@@ -71,6 +71,8 @@ typedef enum {
         GSM_MANAGER_PHASE_STARTUP = 0,
         /* gnome-initial-setup */
         GSM_MANAGER_PHASE_EARLY_INITIALIZATION,
+        /* wayland compositor and XWayland */
+        GSM_MANAGER_PHASE_DISPLAY_SERVER,
         /* xrandr setup, gnome-settings-daemon, etc */
         GSM_MANAGER_PHASE_INITIALIZATION,
         /* window/compositing managers */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]