[gnome-tweak-tool] Generalize support for shell's schema overrides



commit 559b222e1748da11eb8a9bc0760ff239bb3ed460
Author: Florian Müllner <fmuellner gnome org>
Date:   Thu Jun 6 19:07:07 2013 +0200

    Generalize support for shell's schema overrides
    
    GNOME Shell overrides some settings to use different default values
    than standalone mutter. With the introduction of classic mode, things
    got a little more complicated, as some of the overrides were reverted
    again by extensions - to support either mode, we needed to pick the
    right schema for all affected settings.
    The shell has now introduced mode-specific overrides, and classic mode
    started to use that instead of extensions; this means we will now need
    to adapt all settings that *both* normal and classic mode override.
    However rather than adjusting the affected settings, the new approach
    allows us to generalize the support for schema overrides depending on
    the current mode - this should allow us to handle future changes to
    overrides in either normal or classic mode automatically.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=701760

 gtweak/tweaks/tweak_shell.py   |   25 ++++++-------------------
 gtweak/tweaks/tweak_windows.py |    2 +-
 gtweak/widgets.py              |   20 ++++++++++++++++++++
 3 files changed, 27 insertions(+), 20 deletions(-)
---
diff --git a/gtweak/tweaks/tweak_shell.py b/gtweak/tweaks/tweak_shell.py
index 3f4bb33..d6ffd35 100644
--- a/gtweak/tweaks/tweak_shell.py
+++ b/gtweak/tweaks/tweak_shell.py
@@ -28,28 +28,20 @@ from gtweak.utils import walk_directories, extract_zip_file, make_combo_list_wit
 from gtweak.gsettings import GSettingsSetting, GSettingsMissingError, GSettingsFakeSetting
 from gtweak.gshellwrapper import GnomeShellFactory
 from gtweak.tweakmodel import Tweak, TweakGroup, TWEAK_GROUP_THEME, TWEAK_GROUP_SHELL, TWEAK_SORT_LAST
-from gtweak.widgets import FileChooserButton, GSettingsComboTweak, GSettingsComboEnumTweak, 
GSettingsSwitchTweak, build_label_beside_widget, build_horizontal_sizegroup, build_combo_box_text, 
UI_BOX_SPACING
+from gtweak.widgets import FileChooserButton, GSettingsComboTweak, GSettingsComboEnumTweak, 
GSettingsSwitchTweak, adjust_schema_for_overrides, build_label_beside_widget, build_horizontal_sizegroup, 
build_combo_box_text, UI_BOX_SPACING
 
 _shell = GnomeShellFactory().get_shell()
 _shell_loaded = _shell is not None
 
 class ShowWindowButtons(GSettingsComboTweak):
     def __init__(self, **options):
-        if (_shell is not None) and (_shell.mode in ['gdm', 'initial-setup', 'user']):
-            schema = "org.gnome.shell.overrides"
-            filename = "org.gnome.shell.gschema.xml"
-        else:
-            schema = "org.gnome.desktop.wm.preferences"
-            filename = None
-
         GSettingsComboTweak.__init__(self,
-            schema,
+            "org.gnome.desktop.wm.preferences",
             "button-layout",
             ((':close', _("Close Only")),
             (':minimize,close', _("Minimize and Close")),
             (':maximize,close', _("Maximize and Close")),
             (':minimize,maximize,close', _("All"))),
-            schema_filename=filename,
             loaded=_shell_loaded,
             **options)
 
@@ -214,16 +206,11 @@ class StaticWorkspaceTweak(Tweak):
     NUM_WORKSPACES_SCHEMA = "org.gnome.desktop.wm.preferences"
     NUM_WORKSPACES_KEY = "num-workspaces"
 
-    if (_shell is not None) and (_shell.mode in ['gdm', 'initial-setup', 'user']):
-        DYNAMIC_SCHEMA = "org.gnome.shell.overrides"
-        DYNAMIC_SCHEMA_FILENAME = "org.gnome.shell.gschema.xml"
-    else:
-        DYNAMIC_SCHEMA = "org.gnome.mutter"
-        DYNAMIC_SCHEMA_FILENAME = None
-
     DYNAMIC_KEY = "dynamic-workspaces"
+    DYNAMIC_SCHEMA = "org.gnome.mutter"
 
     def __init__(self, **options):
+        schema = adjust_schema_for_overrides(self.DYNAMIC_SCHEMA, self.DYNAMIC_KEY, options)
         Tweak.__init__(self, _("Dynamic workspaces"), _("Disable gnome-shell dynamic workspace management, 
use static workspaces"), **options)
 
         try:
@@ -233,7 +220,7 @@ class StaticWorkspaceTweak(Tweak):
             nwsettings = GSettingsFakeSetting()
 
         try:
-            dsettings = GSettingsSetting(self.DYNAMIC_SCHEMA, schema_filename=self.DYNAMIC_SCHEMA_FILENAME, 
**options)
+            dsettings = GSettingsSetting(schema, **options)
         except GSettingsMissingError:
             self.loaded = False
             dsettings = GSettingsFakeSetting()
@@ -273,6 +260,6 @@ TWEAK_GROUPS = (
             GSettingsComboEnumTweak("org.gnome.settings-daemon.plugins.power", "lid-close-ac-action", 
size_group=sg),
             GSettingsComboEnumTweak("org.gnome.settings-daemon.plugins.power", "button-power", 
size_group=sg),
             GSettingsComboEnumTweak("org.gnome.settings-daemon.plugins.xrandr", "default-monitors-setup", 
size_group=sg),
-            GSettingsSwitchTweak("org.gnome.shell.overrides", "workspaces-only-on-primary", 
schema_filename="org.gnome.shell.gschema.xml", loaded=_shell_loaded),
+            GSettingsSwitchTweak("org.gnome.mutter", "workspaces-only-on-primary", 
schema_filename="org.gnome.shell.gschema.xml", loaded=_shell_loaded),
             StaticWorkspaceTweak(size_group=sg, loaded=_shell_loaded)),
 )
diff --git a/gtweak/tweaks/tweak_windows.py b/gtweak/tweaks/tweak_windows.py
index 4838ec5..8ea41b5 100644
--- a/gtweak/tweaks/tweak_windows.py
+++ b/gtweak/tweaks/tweak_windows.py
@@ -51,5 +51,5 @@ TWEAKS = (
                         group_name=TWEAK_GROUP_WINDOWS),
     GSettingsSwitchTweak("org.gnome.desktop.wm.preferences", "resize-with-right-button", 
group_name=TWEAK_GROUP_WINDOWS),
     GSettingsSwitchTweak("org.gnome.desktop.wm.preferences", "raise-on-click", 
group_name=TWEAK_GROUP_WINDOWS),
-    GSettingsSwitchTweak("org.gnome.shell.overrides", "attach-modal-dialogs", 
schema_filename="org.gnome.shell.gschema.xml", group_name=TWEAK_GROUP_WINDOWS),
+    GSettingsSwitchTweak("org.gnome.mutter", "attach-modal-dialogs", group_name=TWEAK_GROUP_WINDOWS),
 )
diff --git a/gtweak/widgets.py b/gtweak/widgets.py
index 8bf4855..072081e 100644
--- a/gtweak/widgets.py
+++ b/gtweak/widgets.py
@@ -24,8 +24,10 @@ from gtweak.tweakmodel import Tweak
 from gtweak.gsettings import GSettingsSetting, GSettingsFakeSetting, GSettingsMissingError
 from gtweak.gtksettings import GtkSettingsManager
 from gtweak.gconf import GConfSetting
+from gtweak.gshellwrapper import GnomeShellFactory
 
 UI_BOX_SPACING = 4
+_shell = GnomeShellFactory().get_shell()
 
 def build_label_beside_widget(txt, *widget, **kwargs):
     """
@@ -118,8 +120,26 @@ def build_tight_button(stock_id):
     button.get_style_context().add_provider(provider, 600) 
     return button
 
+def adjust_schema_for_overrides(originalSchema, key, options):
+    if (_shell is None):
+        return originalSchema
+
+    if (_shell.mode == 'classic'):
+        overridesSchema = "org.gnome.shell.extensions.classic-overrides"
+        overridesFile = None
+    else:
+        overridesSchema = "org.gnome.shell.overrides"
+        overridesFile = "org.gnome.shell.gschema.xml"
+
+    if (key in Gio.Settings(overridesSchema).list_keys()):
+        options['schema_filename'] = overridesFile
+        return overridesSchema
+    return originalSchema
+
+
 class _GSettingsTweak(Tweak):
     def __init__(self, schema_name, key_name, **options):
+        schema_name = adjust_schema_for_overrides(schema_name, key_name, options)
         self.schema_name = schema_name
         self.key_name = key_name
         try:


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