[mutter/bilelmoussaoui/settings-daemon: 1/2] backend: Check if the gsettings scheme exists




commit dc479b79ed936ad5ff83330c38cafbd0dbb1dc4a
Author: Bilal Elmoussaoui <belmouss redhat com>
Date:   Tue May 3 12:40:13 2022 +0200

    backend: Check if the gsettings scheme exists
    
    Mutter makes use of a gsettings scheme that comes from
    gnome-settings-daemon to check for the screen orientation.
    In use cases where gnome-settings-daemon is not available,
    this would lead to a crash as the key doesn't exists

 src/backends/meta-orientation-manager.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)
---
diff --git a/src/backends/meta-orientation-manager.c b/src/backends/meta-orientation-manager.c
index 7989aa84fc..6399f08cb3 100644
--- a/src/backends/meta-orientation-manager.c
+++ b/src/backends/meta-orientation-manager.c
@@ -122,7 +122,8 @@ sync_state (MetaOrientationManager *self)
   if (had_accel != self->has_accel)
     g_object_notify_by_pspec (G_OBJECT (self), props[PROP_HAS_ACCELEROMETER]);
 
-  if (g_settings_get_boolean (self->settings, ORIENTATION_LOCK_KEY))
+  if (self->settings != NULL &&
+      g_settings_get_boolean (self->settings, ORIENTATION_LOCK_KEY))
     return;
 
   if (self->prev_orientation == self->curr_orientation)
@@ -273,6 +274,8 @@ iio_sensor_vanished_cb (GDBusConnection *connection,
 static void
 meta_orientation_manager_init (MetaOrientationManager *self)
 {
+
+  GSettingsSchemaSource *schema_source = g_settings_schema_source_get_default ();
   self->iio_watch_id = g_bus_watch_name (G_BUS_TYPE_SYSTEM,
                                          "net.hadess.SensorProxy",
                                          G_BUS_NAME_WATCHER_FLAGS_NONE,
@@ -281,10 +284,13 @@ meta_orientation_manager_init (MetaOrientationManager *self)
                                          self,
                                          NULL);
 
-  self->settings = g_settings_new (CONF_SCHEMA);
-  g_signal_connect_object (self->settings, "changed::"ORIENTATION_LOCK_KEY,
-                           G_CALLBACK (orientation_lock_changed), self, 0);
-  sync_state (self);
+  if (g_settings_schema_source_lookup (schema_source, CONF_SCHEMA, TRUE))
+    {
+      self->settings = g_settings_new (CONF_SCHEMA);
+      g_signal_connect_object (self->settings, "changed::"ORIENTATION_LOCK_KEY,
+                               G_CALLBACK (orientation_lock_changed), self, 0);
+      sync_state (self);
+    }
 }
 
 static void


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