|
|
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 |
|