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

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