Blame SOURCES/0001-xsettings-don-t-complain-at-start-up-when-fetching-w.patch

c0c25f
From 2e03d94682524ccc0e511e14b97364c68cd7f105 Mon Sep 17 00:00:00 2001
c0c25f
From: Ray Strode <rstrode@redhat.com>
c0c25f
Date: Thu, 6 Sep 2018 10:58:11 -0400
c0c25f
Subject: [PATCH] xsettings: don't complain at start up when fetching window
c0c25f
 scale
c0c25f
c0c25f
g-s-d tries to get the window scale from mutter at startup before
c0c25f
mutter is running.
c0c25f
c0c25f
It then posts a warning to the log when it fails to talk to mutter.
c0c25f
c0c25f
This commit circumvents the warning by tracking mutter's lifetime,
c0c25f
and avoiding calls into it before its running.
c0c25f
---
c0c25f
 plugins/xsettings/gsd-xsettings-manager.c | 21 ++++++++++++++++++++-
c0c25f
 1 file changed, 20 insertions(+), 1 deletion(-)
c0c25f
c0c25f
diff --git a/plugins/xsettings/gsd-xsettings-manager.c b/plugins/xsettings/gsd-xsettings-manager.c
c0c25f
index eb55b8b7..f6406a95 100644
c0c25f
--- a/plugins/xsettings/gsd-xsettings-manager.c
c0c25f
+++ b/plugins/xsettings/gsd-xsettings-manager.c
c0c25f
@@ -259,60 +259,61 @@ typedef struct _FixedEntry FixedEntry;
c0c25f
 typedef void (* FixedFunc) (GnomeXSettingsManager *manager,
c0c25f
                             FixedEntry            *fixed);
c0c25f
 typedef union {
c0c25f
         const char *str;
c0c25f
         int num;
c0c25f
 } FixedEntryValue;
c0c25f
 
c0c25f
 struct _FixedEntry {
c0c25f
         const char     *xsetting_name;
c0c25f
         FixedFunc       func;
c0c25f
         FixedEntryValue val;
c0c25f
 };
c0c25f
 
c0c25f
 struct GnomeXSettingsManagerPrivate
c0c25f
 {
c0c25f
         guint              start_idle_id;
c0c25f
         XSettingsManager  *manager;
c0c25f
         GHashTable        *settings;
c0c25f
 
c0c25f
         GSettings         *plugin_settings;
c0c25f
         FcMonitor         *fontconfig_monitor;
c0c25f
         gint64             fontconfig_timestamp;
c0c25f
 
c0c25f
         GsdXSettingsGtk   *gtk;
c0c25f
 
c0c25f
         GsdRemoteDisplayManager *remote_display;
c0c25f
         gboolean           enable_animations;
c0c25f
 
c0c25f
         guint              display_config_watch_id;
c0c25f
         guint              monitors_changed_id;
c0c25f
+        gboolean           have_display_config;
c0c25f
 
c0c25f
         guint              shell_name_watch_id;
c0c25f
         gboolean           have_shell;
c0c25f
 
c0c25f
         guint              notify_idle_id;
c0c25f
 
c0c25f
         GDBusNodeInfo     *introspection_data;
c0c25f
         GDBusConnection   *dbus_connection;
c0c25f
         guint              gtk_settings_name_id;
c0c25f
 };
c0c25f
 
c0c25f
 #define GSD_XSETTINGS_ERROR gsd_xsettings_error_quark ()
c0c25f
 
c0c25f
 enum {
c0c25f
         GSD_XSETTINGS_ERROR_INIT
c0c25f
 };
c0c25f
 
c0c25f
 static void     gnome_xsettings_manager_class_init  (GnomeXSettingsManagerClass *klass);
c0c25f
 static void     gnome_xsettings_manager_init        (GnomeXSettingsManager      *xsettings_manager);
c0c25f
 static void     gnome_xsettings_manager_finalize    (GObject                  *object);
c0c25f
 
c0c25f
 static void     register_manager_dbus               (GnomeXSettingsManager *manager);
c0c25f
 
c0c25f
 G_DEFINE_TYPE (GnomeXSettingsManager, gnome_xsettings_manager, G_TYPE_OBJECT)
c0c25f
 
c0c25f
 static gpointer manager_object = NULL;
c0c25f
 
c0c25f
 static GQuark
c0c25f
 gsd_xsettings_error_quark (void)
c0c25f
 {
c0c25f
@@ -601,60 +602,65 @@ is_layout_mode_logical (GVariantIter *properties)
c0c25f
                         layout_mode = layout_mode_value;
c0c25f
 
c0c25f
                 break;
c0c25f
         }
c0c25f
 
c0c25f
         return layout_mode == DISPLAY_LAYOUT_MODE_LOGICAL;
c0c25f
 }
c0c25f
 
c0c25f
 #define MODE_FORMAT "(siiddada{sv})"
c0c25f
 #define MODES_FORMAT "a" MODE_FORMAT
c0c25f
 
c0c25f
 #define MONITOR_SPEC_FORMAT "(ssss)"
c0c25f
 #define MONITOR_FORMAT "(" MONITOR_SPEC_FORMAT MODES_FORMAT "a{sv})"
c0c25f
 #define MONITORS_FORMAT "a" MONITOR_FORMAT
c0c25f
 
c0c25f
 #define LOGICAL_MONITOR_FORMAT "(iiduba" MONITOR_SPEC_FORMAT "a{sv})"
c0c25f
 #define LOGICAL_MONITORS_FORMAT "a" LOGICAL_MONITOR_FORMAT
c0c25f
 
c0c25f
 #define CURRENT_STATE_FORMAT "(u" MONITORS_FORMAT LOGICAL_MONITORS_FORMAT "a{sv})"
c0c25f
 
c0c25f
 static int
c0c25f
 get_window_scale (GnomeXSettingsManager *manager)
c0c25f
 {
c0c25f
         GError *error = NULL;
c0c25f
         GVariant *current_state;
c0c25f
         GVariantIter *logical_monitors;
c0c25f
         GVariant *logical_monitor_variant;
c0c25f
         GVariantIter *properties;
c0c25f
         int scale = 1;
c0c25f
 
c0c25f
+        if (!manager->priv->have_display_config) {
c0c25f
+                g_debug("Window scale requested when mutter isn't running, falling back to scale 1");
c0c25f
+                return 1;
c0c25f
+        }
c0c25f
+
c0c25f
         current_state =
c0c25f
                 g_dbus_connection_call_sync (manager->priv->dbus_connection,
c0c25f
                                              "org.gnome.Mutter.DisplayConfig",
c0c25f
                                              "/org/gnome/Mutter/DisplayConfig",
c0c25f
                                              "org.gnome.Mutter.DisplayConfig",
c0c25f
                                              "GetCurrentState",
c0c25f
                                              NULL,
c0c25f
                                              NULL,
c0c25f
                                              G_DBUS_CALL_FLAGS_NO_AUTO_START,
c0c25f
                                              -1,
c0c25f
                                              NULL,
c0c25f
                                              &error);
c0c25f
         if (!current_state) {
c0c25f
                 g_warning ("Failed to get current display configuration state: %s",
c0c25f
                            error->message);
c0c25f
                 g_error_free (error);
c0c25f
                 return 1;
c0c25f
         }
c0c25f
 
c0c25f
         g_variant_get (current_state,
c0c25f
                        CURRENT_STATE_FORMAT,
c0c25f
                        NULL,
c0c25f
                        NULL,
c0c25f
                        &logical_monitors,
c0c25f
                        &properties);
c0c25f
 
c0c25f
         if (is_layout_mode_logical (properties))
c0c25f
                 goto out;
c0c25f
 
c0c25f
         while (g_variant_iter_next (logical_monitors, "@"LOGICAL_MONITOR_FORMAT,
c0c25f
@@ -1184,103 +1190,116 @@ enable_animations_changed_cb (GSettings             *settings,
c0c25f
         force_disable_animation_changed (G_OBJECT (manager->priv->remote_display), NULL, manager);
c0c25f
 }
c0c25f
 
c0c25f
 static void
c0c25f
 monitors_changed (GnomeXSettingsManager *manager)
c0c25f
 {
c0c25f
         update_xft_settings (manager);
c0c25f
         queue_notify (manager);
c0c25f
 }
c0c25f
 
c0c25f
 static void
c0c25f
 on_monitors_changed (GDBusConnection *connection,
c0c25f
                      const gchar     *sender_name,
c0c25f
                      const gchar     *object_path,
c0c25f
                      const gchar     *interface_name,
c0c25f
                      const gchar     *signal_name,
c0c25f
                      GVariant        *parameters,
c0c25f
                      gpointer         data)
c0c25f
 {
c0c25f
         GnomeXSettingsManager *manager = data;
c0c25f
         monitors_changed (manager);
c0c25f
 }
c0c25f
 
c0c25f
 static void
c0c25f
 on_display_config_name_appeared_handler (GDBusConnection *connection,
c0c25f
                                          const gchar     *name,
c0c25f
                                          const gchar     *name_owner,
c0c25f
                                          gpointer         data)
c0c25f
 {
c0c25f
         GnomeXSettingsManager *manager = data;
c0c25f
+
c0c25f
+        manager->priv->have_display_config = TRUE;
c0c25f
+        monitors_changed (manager);
c0c25f
+}
c0c25f
+
c0c25f
+static void
c0c25f
+on_display_config_name_disappeared_handler (GDBusConnection *connection,
c0c25f
+                                            const gchar     *name,
c0c25f
+                                            gpointer         data)
c0c25f
+{
c0c25f
+        GnomeXSettingsManager *manager = data;
c0c25f
+
c0c25f
+        manager->priv->have_display_config = FALSE;
c0c25f
         monitors_changed (manager);
c0c25f
 }
c0c25f
 
c0c25f
 gboolean
c0c25f
 gnome_xsettings_manager_start (GnomeXSettingsManager *manager,
c0c25f
                                GError               **error)
c0c25f
 {
c0c25f
         GVariant    *overrides;
c0c25f
         guint        i;
c0c25f
         GList       *list, *l;
c0c25f
         const char  *session;
c0c25f
 
c0c25f
         g_debug ("Starting xsettings manager");
c0c25f
         gnome_settings_profile_start (NULL);
c0c25f
 
c0c25f
         if (!setup_xsettings_managers (manager)) {
c0c25f
                 g_set_error (error, GSD_XSETTINGS_ERROR,
c0c25f
                              GSD_XSETTINGS_ERROR_INIT,
c0c25f
                              "Could not initialize xsettings manager.");
c0c25f
                 return FALSE;
c0c25f
         }
c0c25f
 
c0c25f
         manager->priv->remote_display = gsd_remote_display_manager_new ();
c0c25f
         g_signal_connect (G_OBJECT (manager->priv->remote_display), "notify::force-disable-animations",
c0c25f
                           G_CALLBACK (force_disable_animation_changed), manager);
c0c25f
 
c0c25f
         manager->priv->monitors_changed_id =
c0c25f
                 g_dbus_connection_signal_subscribe (manager->priv->dbus_connection,
c0c25f
                                                     "org.gnome.Mutter.DisplayConfig",
c0c25f
                                                     "org.gnome.Mutter.DisplayConfig",
c0c25f
                                                     "MonitorsChanged",
c0c25f
                                                     "/org/gnome/Mutter/DisplayConfig",
c0c25f
                                                     NULL,
c0c25f
                                                     G_DBUS_SIGNAL_FLAGS_NONE,
c0c25f
                                                     on_monitors_changed,
c0c25f
                                                     manager,
c0c25f
                                                     NULL);
c0c25f
         manager->priv->display_config_watch_id =
c0c25f
                 g_bus_watch_name_on_connection (manager->priv->dbus_connection,
c0c25f
                                                 "org.gnome.Mutter.DisplayConfig",
c0c25f
                                                 G_BUS_NAME_WATCHER_FLAGS_NONE,
c0c25f
                                                 on_display_config_name_appeared_handler,
c0c25f
-                                                NULL,
c0c25f
+                                                on_display_config_name_disappeared_handler,
c0c25f
                                                 manager,
c0c25f
                                                 NULL);
c0c25f
 
c0c25f
         manager->priv->settings = g_hash_table_new_full (g_str_hash, g_str_equal,
c0c25f
                                                          NULL, (GDestroyNotify) g_object_unref);
c0c25f
 
c0c25f
         g_hash_table_insert (manager->priv->settings,
c0c25f
                              MOUSE_SETTINGS_SCHEMA, g_settings_new (MOUSE_SETTINGS_SCHEMA));
c0c25f
         g_hash_table_insert (manager->priv->settings,
c0c25f
                              BACKGROUND_SETTINGS_SCHEMA, g_settings_new (BACKGROUND_SETTINGS_SCHEMA));
c0c25f
         g_hash_table_insert (manager->priv->settings,
c0c25f
                              INTERFACE_SETTINGS_SCHEMA, g_settings_new (INTERFACE_SETTINGS_SCHEMA));
c0c25f
         g_hash_table_insert (manager->priv->settings,
c0c25f
                              SOUND_SETTINGS_SCHEMA, g_settings_new (SOUND_SETTINGS_SCHEMA));
c0c25f
         g_hash_table_insert (manager->priv->settings,
c0c25f
                              PRIVACY_SETTINGS_SCHEMA, g_settings_new (PRIVACY_SETTINGS_SCHEMA));
c0c25f
         g_hash_table_insert (manager->priv->settings,
c0c25f
                              WM_SETTINGS_SCHEMA, g_settings_new (WM_SETTINGS_SCHEMA));
c0c25f
         g_hash_table_insert (manager->priv->settings,
c0c25f
                              A11Y_SCHEMA, g_settings_new (A11Y_SCHEMA));
c0c25f
 
c0c25f
         session = g_getenv ("XDG_CURRENT_DESKTOP");
c0c25f
         if (session && strstr (session, "GNOME-Classic")) {
c0c25f
                 GSettingsSchema *schema;
c0c25f
 
c0c25f
                 schema = g_settings_schema_source_lookup (g_settings_schema_source_get_default (),
c0c25f
                                                   CLASSIC_WM_SETTINGS_SCHEMA, FALSE);
c0c25f
                 if (schema) {
c0c25f
                         g_hash_table_insert (manager->priv->settings,
c0c25f
                                              CLASSIC_WM_SETTINGS_SCHEMA,
c0c25f
-- 
c0c25f
2.19.0.rc1
c0c25f