[gnome-tweak-tool] UI changes, new categorization of the tweaks



commit e0987c71a210feb6316f736380861aba1a23f74b
Author: Alex Muñoz <AlexMuDoz gmail com>
Date:   Fri Jun 7 23:30:18 2013 -0400

    UI changes, new categorization of the tweaks

 data/shell.ui                           |  105 +++++++++++++------------------
 gtweak/app.py                           |   18 ++++--
 gtweak/tweakmodel.py                    |   19 ++++--
 gtweak/tweaks/tweak_font.py             |   20 +++---
 gtweak/tweaks/tweak_interface.py        |   25 +++++---
 gtweak/tweaks/tweak_mouse.py            |    3 +-
 gtweak/tweaks/tweak_nautilus.py         |   18 +++---
 gtweak/tweaks/tweak_shell.py            |   34 ++++++-----
 gtweak/tweaks/tweak_shell_extensions.py |    9 +++-
 gtweak/tweaks/tweak_typing.py           |    3 +-
 gtweak/tweaks/tweak_windows.py          |   30 +++++----
 gtweak/tweakview.py                     |   80 +++++++++++++++++-------
 gtweak/utils.py                         |   13 ++++
 gtweak/widgets.py                       |   44 ++++++++++---
 14 files changed, 253 insertions(+), 168 deletions(-)
---
diff --git a/data/shell.ui b/data/shell.ui
index d627b37..86bf69c 100644
--- a/data/shell.ui
+++ b/data/shell.ui
@@ -6,6 +6,10 @@
       <item>
        <attribute name="label" translatable="yes">_Reset to Defaults</attribute>
        <attribute name="action">app.reset</attribute>
+      </item>
+      <item>
+       <attribute name="label" translatable="yes">Disable All Shell Extensions</attribute>
+       <attribute name="action">app.disable_extension</attribute>
       </item>        
    </section>
    <section>
@@ -30,87 +34,53 @@
     <property name="resizable">True</property>
     <property name="icon_name">preferences-desktop</property>
     <child>
-      <object class="GtkVBox" id="vbox1">
+      <object class="GtkBox" id="vbox1">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
         <child>
-          <object class="GtkToolbar" id="toolbar">
+          <object class="GtkBox" id="topbox">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <child>
-              <object class="GtkToolItem" id="toolbutton1">
-                <property name="use_action_appearance">False</property>
-                <property name="visible">True</property>
-                <property name="can_focus">False</property>
-                <property name="use_action_appearance">False</property>
-                <child>
-                  <object class="GtkAlignment" id="alignment1">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="top_padding">5</property>
-                    <property name="bottom_padding">5</property>
-                    <property name="left_padding">10</property>
-                    <property name="right_padding">5</property>
-                    <child>
-                      <object class="GtkHBox" id="hbox1">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <child>
-                          <object class="GtkAlignment" id="entry-alignment">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="xalign">1</property>
-                            <property name="xscale">0</property>
-                            <child>
-                              <object class="GtkEntry" id="search_entry">
-                                <property name="width_request">210</property>
-                                <property name="visible">True</property>
-                                <property name="can_focus">True</property>
-                                <property name="invisible_char">●</property>
-                                <property name="secondary_icon_name">edit-find-symbolic</property>
-                              </object>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="expand">True</property>
-                            <property name="fill">True</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">True</property>
-                <property name="homogeneous">True</property>
-              </packing>
+              <placeholder/>
             </child>
           </object>
           <packing>
             <property name="expand">False</property>
-            <property name="fill">True</property>
+            <property name="fill">False</property>
             <property name="position">0</property>
           </packing>
         </child>
         <child>
-          <object class="GtkVBox" id="info_vbox">
+          <object class="GtkSeparator" id="separator2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="info_vbox">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="border_width">10</property>
             <child>
-              <object class="GtkHBox" id="hbox2">
+              <object class="GtkBox" id="hbox2">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="spacing">10</property>
                 <child>
-                  <object class="GtkScrolledWindow" id="overview_sw">
-                    <property name="width_request">150</property>
+                  <object class="GtkBox" id="leftbox">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="hscrollbar_policy">never</property>
-                    <property name="shadow_type">in</property>
+                    <property name="can_focus">False</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <placeholder/>
+                    </child>
                     <child>
                       <placeholder/>
                     </child>
@@ -122,9 +92,22 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkVBox" id="detail_vbox">
+                  <object class="GtkSeparator" id="separator1">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
+                    <property name="orientation">vertical</property>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="detail_vbox">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="orientation">vertical</property>
                     <property name="spacing">20</property>
                     <child>
                       <object class="GtkNotebook" id="notebook">
@@ -205,7 +188,7 @@
                   <packing>
                     <property name="expand">True</property>
                     <property name="fill">True</property>
-                    <property name="position">1</property>
+                    <property name="position">2</property>
                   </packing>
                 </child>
               </object>
@@ -219,7 +202,7 @@
           <packing>
             <property name="expand">True</property>
             <property name="fill">True</property>
-            <property name="position">1</property>
+            <property name="position">2</property>
           </packing>
         </child>
       </object>
diff --git a/gtweak/app.py b/gtweak/app.py
index 00b258a..b33e190 100644
--- a/gtweak/app.py
+++ b/gtweak/app.py
@@ -25,8 +25,10 @@ from gtweak.tweakmodel import TweakModel
 from gtweak.tweakview import TweakView
 from gtweak.utils import SchemaList
 from gtweak.gshellwrapper import GnomeShellFactory
+from gtweak.utils import DisableExtension
         
 class GnomeTweakTool(Gtk.Application):
+
     def __init__(self):
         Gtk.Application.__init__(self,application_id="org.gnome.TweakTool")
     
@@ -35,12 +37,9 @@ class GnomeTweakTool(Gtk.Application):
         self.win.set_position(Gtk.WindowPosition.CENTER)
         self.win.set_application(self)
         self.win.set_size_request(720, 580)
-        toolbar = self.builder.get_object('toolbar')
-        toolbar.get_style_context().add_class(Gtk.STYLE_CLASS_PRIMARY_TOOLBAR)
         
         model = TweakModel()
         view = TweakView(self.builder, model)
-        self.builder.get_object('overview_sw').add(view.treeview)
         
         self.win.show_all()
         view.run()
@@ -58,7 +57,11 @@ class GnomeTweakTool(Gtk.Application):
 
         reset_action = Gio.SimpleAction.new("reset", None)
         reset_action.connect("activate", self.reset_cb)
-        self.add_action(reset_action)        
+        self.add_action(reset_action)      
+
+        disable_extension_action = Gio.SimpleAction.new("disable_extension", None)
+        disable_extension_action.connect("activate", self.disable_cb)
+        self.add_action(disable_extension_action)  
 
         help_action = Gio.SimpleAction.new("help", None)
         help_action.connect("activate", self.help_cb)
@@ -72,7 +75,6 @@ class GnomeTweakTool(Gtk.Application):
         quit_action.connect("activate", self.quit_cb)
         self.add_action(quit_action)
 
-
     def reset_cb(self, action, parameter):
         dialog = Gtk.MessageDialog(self.win,0, Gtk.MessageType.QUESTION,
                     Gtk.ButtonsType.OK_CANCEL, "Reset to Defaults")
@@ -86,6 +88,10 @@ class GnomeTweakTool(Gtk.Application):
     def help_cb(self, action, parameter):
         print "This does nothing. It is only a demonstration."
 
+    def disable_cb(self, action, parameter):
+        ds = DisableExtension()
+        ds.disable()
+
     def about_cb(self, action, parameter):
         aboutdialog = Gtk.AboutDialog()
         aboutdialog.set_title("About GNOME Tweak Tool")
@@ -113,4 +119,4 @@ class GnomeTweakTool(Gtk.Application):
 
     def quit_cb(self, action, parameter):
         self.quit()
-    
+
diff --git a/gtweak/tweakmodel.py b/gtweak/tweakmodel.py
index d2b472f..c611a30 100644
--- a/gtweak/tweakmodel.py
+++ b/gtweak/tweakmodel.py
@@ -25,15 +25,19 @@ from gi.repository import Gtk
 
 def N_(x): return x
 
-TWEAK_GROUP_FONTS = N_("Fonts")
-TWEAK_GROUP_THEME = N_("Theme")
+TWEAK_GROUP_APPEARANCE = N_("Appearance")
 TWEAK_GROUP_DESKTOP = N_("Desktop")
+TWEAK_GROUP_EXTENSION = N_("Extensions")
+TWEAK_GROUP_FONTS = N_("Fonts")
+TWEAK_GROUP_KEYBOARD = N_("Keyboard Layout")
+TWEAK_GROUP_POWER = N_("Power")
+TWEAK_GROUP_APPLICATION = N_("Startup Applications")
+TWEAK_GROUP_TOPBAR = N_("Top Bar")
 TWEAK_GROUP_WINDOWS = N_("Windows")
-TWEAK_GROUP_SHELL = N_("Shell")
-TWEAK_GROUP_TYPING = N_("Typing")
-TWEAK_GROUP_MOUSE = N_("Mouse")
+TWEAK_GROUP_WORKSPACES = N_("Workspaces")
 
-#translate this the same as the name of the file manager (nautilus)
+TWEAK_GROUP_MOUSE = N_("Mouse")
+TWEAK_GROUP_TYPING = N_("Typing")
 TWEAK_GROUP_FILES = N_("Files")
 
 TWEAK_SORT_FIRST = -1e3
@@ -51,7 +55,8 @@ class Tweak:
         self.widget_sort_hint = None
 
         self._search_cache = None
-
+        if options.get("sort"):
+            self.widget_sort_hint = options.get("sort")
         #FIXME: I would have rather done these as a GObject signal, but it
         #would prohibit other tweaks from inheriting from GtkWidgets
         self._notify_cb = None
diff --git a/gtweak/tweaks/tweak_font.py b/gtweak/tweaks/tweak_font.py
index 1ace035..deedb9f 100644
--- a/gtweak/tweaks/tweak_font.py
+++ b/gtweak/tweaks/tweak_font.py
@@ -17,17 +17,17 @@
 
 from gi.repository import Gtk
 
-from gtweak.tweakmodel import Tweak, TWEAK_GROUP_FONTS
+from gtweak.tweakmodel import Tweak, TWEAK_GROUP_FONTS, TWEAK_SORT_FIRST, TWEAK_SORT_LAST
 from gtweak.widgets import GSettingsSpinButtonTweak, GSettingsFontButtonTweak, GSettingsComboTweak
 
 TWEAKS = (
-    GSettingsSpinButtonTweak("org.gnome.desktop.interface", "text-scaling-factor", adjustment_step=0.1, 
digits=1, group_name=TWEAK_GROUP_FONTS),
-    GSettingsFontButtonTweak("org.gnome.desktop.interface", "font-name", group_name=TWEAK_GROUP_FONTS),
-    GSettingsFontButtonTweak("org.gnome.desktop.interface", "document-font-name", 
group_name=TWEAK_GROUP_FONTS),
-    GSettingsFontButtonTweak("org.gnome.desktop.interface", "monospace-font-name", 
group_name=TWEAK_GROUP_FONTS),
-    GSettingsFontButtonTweak("org.gnome.desktop.wm.preferences", "titlebar-font", 
group_name=TWEAK_GROUP_FONTS),
-    GSettingsComboTweak("org.gnome.settings-daemon.plugins.xsettings", "hinting",
-        [(i, i.title()) for i in ("none", "slight", "medium", "full")], group_name=TWEAK_GROUP_FONTS),
-    GSettingsComboTweak("org.gnome.settings-daemon.plugins.xsettings", "antialiasing",
-        [(i, i.title()) for i in ("none", "grayscale", "rgba")], group_name=TWEAK_GROUP_FONTS),
+    #GSettingsSpinButtonTweak("org.gnome.desktop.interface", "text-scaling-factor", adjustment_step=0.1, 
digits=1, group_name=TWEAK_GROUP_FONTS),
+    GSettingsFontButtonTweak("Interface","org.gnome.desktop.interface", "font-name", 
group_name=TWEAK_GROUP_FONTS),
+    GSettingsFontButtonTweak("Documents", "org.gnome.desktop.interface", "document-font-name", 
group_name=TWEAK_GROUP_FONTS),
+    GSettingsFontButtonTweak("Monospace", "org.gnome.desktop.interface", "monospace-font-name", 
group_name=TWEAK_GROUP_FONTS),
+    GSettingsFontButtonTweak("Window Titles","org.gnome.desktop.wm.preferences", "titlebar-font", 
group_name=TWEAK_GROUP_FONTS, sort=TWEAK_SORT_FIRST),
+    GSettingsComboTweak("Hinting","org.gnome.settings-daemon.plugins.xsettings", "hinting",
+        [(i, i.title()) for i in ("none", "slight", "medium", "full")], group_name=TWEAK_GROUP_FONTS, 
sort=TWEAK_SORT_LAST),
+    GSettingsComboTweak("Antialiasing","org.gnome.settings-daemon.plugins.xsettings", "antialiasing",
+        [(i, i.title()) for i in ("none", "grayscale", "rgba")], 
group_name=TWEAK_GROUP_FONTS,sort=TWEAK_SORT_LAST),
 )
diff --git a/gtweak/tweaks/tweak_interface.py b/gtweak/tweaks/tweak_interface.py
index b20a41c..ee55647 100644
--- a/gtweak/tweaks/tweak_interface.py
+++ b/gtweak/tweaks/tweak_interface.py
@@ -22,12 +22,13 @@ from gi.repository import GLib
 
 import gtweak
 from gtweak.utils import walk_directories, make_combo_list_with_default
-from gtweak.tweakmodel import TWEAK_GROUP_THEME
-from gtweak.widgets import GSettingsSwitchTweak, GSettingsComboTweak, DarkThemeSwitcher
+from gtweak.tweakmodel import TWEAK_GROUP_APPEARANCE, TWEAK_GROUP_KEYBOARD, TWEAK_SORT_FIRST
+from gtweak.widgets import GSettingsSwitchTweak, GSettingsComboTweak, DarkThemeSwitcher, Title
 
 class GtkThemeSwitcher(GSettingsComboTweak):
     def __init__(self, **options):
         GSettingsComboTweak.__init__(self,
+                       "GTK+",
             "org.gnome.desktop.interface",
             "gtk-theme",
             make_combo_list_with_default(self._get_valid_themes(), "Adwaita"),
@@ -46,7 +47,8 @@ class GtkThemeSwitcher(GSettingsComboTweak):
 class IconThemeSwitcher(GSettingsComboTweak):
     def __init__(self, **options):
         GSettingsComboTweak.__init__(self,
-            "org.gnome.desktop.interface",
+                       "Icons",            
+                       "org.gnome.desktop.interface",
             "icon-theme",
             make_combo_list_with_default(self._get_valid_icon_themes(), "gnome"),
             **options)
@@ -63,6 +65,7 @@ class IconThemeSwitcher(GSettingsComboTweak):
 class CursorThemeSwitcher(GSettingsComboTweak):
     def __init__(self, **options):
         GSettingsComboTweak.__init__(self,
+                       "Cursor",
             "org.gnome.desktop.interface",
             "cursor-theme",
             make_combo_list_with_default(self._get_valid_cursor_themes(), "Adwaita"),
@@ -80,6 +83,7 @@ class CursorThemeSwitcher(GSettingsComboTweak):
 class KeyThemeSwitcher(GSettingsComboTweak):
     def __init__(self, **options):
         GSettingsComboTweak.__init__(self,
+                       "Key",
             "org.gnome.desktop.interface",
             "gtk-key-theme",
             make_combo_list_with_default(
@@ -98,11 +102,12 @@ class KeyThemeSwitcher(GSettingsComboTweak):
         return valid
 
 TWEAKS = (
-    GSettingsSwitchTweak("org.gnome.desktop.interface", "menus-have-icons", group_name=TWEAK_GROUP_THEME),
-    GSettingsSwitchTweak("org.gnome.desktop.interface", "buttons-have-icons", group_name=TWEAK_GROUP_THEME),
-    DarkThemeSwitcher(group_name=TWEAK_GROUP_THEME),
-    CursorThemeSwitcher(group_name=TWEAK_GROUP_THEME),
-    KeyThemeSwitcher(group_name=TWEAK_GROUP_THEME),
-    IconThemeSwitcher(group_name=TWEAK_GROUP_THEME),
-    GtkThemeSwitcher(group_name=TWEAK_GROUP_THEME),
+    #GSettingsSwitchTweak("Buttons Icons","org.gnome.desktop.interface", "buttons-have-icons", 
group_name=TWEAK_GROUP_APPEARANCE),
+       #GSettingsSwitchTweak("Menu Icons","org.gnome.desktop.interface", "menus-have-icons", 
group_name=TWEAK_GROUP_APPEARANCE),
+    DarkThemeSwitcher(group_name=TWEAK_GROUP_APPEARANCE),
+       Title("Theme", "", group_name=TWEAK_GROUP_APPEARANCE),     
+    KeyThemeSwitcher(group_name=TWEAK_GROUP_KEYBOARD),
+    GtkThemeSwitcher(group_name=TWEAK_GROUP_APPEARANCE),
+       IconThemeSwitcher(group_name=TWEAK_GROUP_APPEARANCE),
+    CursorThemeSwitcher(group_name=TWEAK_GROUP_APPEARANCE),
 )
diff --git a/gtweak/tweaks/tweak_mouse.py b/gtweak/tweaks/tweak_mouse.py
index fc712c5..6147929 100644
--- a/gtweak/tweaks/tweak_mouse.py
+++ b/gtweak/tweaks/tweak_mouse.py
@@ -2,7 +2,8 @@ from gtweak.tweakmodel import TWEAK_GROUP_MOUSE
 from gtweak.widgets import GSettingsSwitchTweak
 
 TWEAKS = (
-    GSettingsSwitchTweak("org.gnome.settings-daemon.peripherals.mouse",
+    GSettingsSwitchTweak("Show location of pointer",
+                         "org.gnome.settings-daemon.peripherals.mouse",
                          "locate-pointer",
                          schema_filename="org.gnome.settings-daemon.peripherals.gschema.xml",
                          group_name=TWEAK_GROUP_MOUSE),
diff --git a/gtweak/tweaks/tweak_nautilus.py b/gtweak/tweaks/tweak_nautilus.py
index 4b1a87b..a7e8a4e 100644
--- a/gtweak/tweaks/tweak_nautilus.py
+++ b/gtweak/tweaks/tweak_nautilus.py
@@ -25,6 +25,7 @@ from gtweak.widgets import GSettingsSwitchTweak, GSettingsComboEnumTweak, GSetti
 class DesktopIconTweak(GSettingsSwitchTweak):
     def __init__(self, **options):
         GSettingsSwitchTweak.__init__(self,
+                       "Icons on Desktop",
             "org.gnome.desktop.background",
             "show-desktop-icons",
             **options)
@@ -47,13 +48,12 @@ dicons = DesktopIconTweak(group_name=TWEAK_GROUP_DESKTOP)
 
 TWEAKS = (
     dicons,
-    GSettingsSwitchTweak("org.gnome.nautilus.desktop", "computer-icon-visible", depends_on=dicons, 
schema_filename="org.gnome.nautilus.gschema.xml",group_name=TWEAK_GROUP_DESKTOP),
-    GSettingsSwitchTweak("org.gnome.nautilus.desktop", "home-icon-visible", depends_on=dicons, 
schema_filename="org.gnome.nautilus.gschema.xml",group_name=TWEAK_GROUP_DESKTOP),
-    GSettingsSwitchTweak("org.gnome.nautilus.desktop", "network-icon-visible", depends_on=dicons, 
schema_filename="org.gnome.nautilus.gschema.xml",group_name=TWEAK_GROUP_DESKTOP),
-    GSettingsSwitchTweak("org.gnome.nautilus.desktop", "trash-icon-visible", depends_on=dicons, 
schema_filename="org.gnome.nautilus.gschema.xml",group_name=TWEAK_GROUP_DESKTOP),
-    GSettingsSwitchTweak("org.gnome.nautilus.desktop", "volumes-visible", depends_on=dicons, 
schema_filename="org.gnome.nautilus.gschema.xml",group_name=TWEAK_GROUP_DESKTOP),
-    GSettingsSwitchTweak("org.gnome.nautilus.preferences", "always-use-location-entry",
-schema_filename="org.gnome.nautilus.gschema.xml",group_name=TWEAK_GROUP_FILES),
-    GSettingsComboEnumTweak("org.gnome.desktop.background", "picture-options", 
group_name=TWEAK_GROUP_DESKTOP),
-    GSettingsFileChooserButtonTweak("org.gnome.desktop.background", "picture-uri", local_only=True, 
mimetypes=["application/xml","image/png","image/jpeg"], group_name=TWEAK_GROUP_DESKTOP),
+    GSettingsSwitchTweak("Computer","org.gnome.nautilus.desktop", "computer-icon-visible", 
depends_on=dicons, schema_filename="org.gnome.nautilus.gschema.xml",group_name=TWEAK_GROUP_DESKTOP),
+    GSettingsSwitchTweak("Home","org.gnome.nautilus.desktop", "home-icon-visible", depends_on=dicons, 
schema_filename="org.gnome.nautilus.gschema.xml",group_name=TWEAK_GROUP_DESKTOP),
+    GSettingsSwitchTweak("Network Servers","org.gnome.nautilus.desktop", "network-icon-visible", 
depends_on=dicons, schema_filename="org.gnome.nautilus.gschema.xml",group_name=TWEAK_GROUP_DESKTOP),
+    GSettingsSwitchTweak("Trash","org.gnome.nautilus.desktop", "trash-icon-visible", depends_on=dicons, 
schema_filename="org.gnome.nautilus.gschema.xml",group_name=TWEAK_GROUP_DESKTOP),
+    GSettingsSwitchTweak("Mounted Volumes","org.gnome.nautilus.desktop", "volumes-visible", 
depends_on=dicons, schema_filename="org.gnome.nautilus.gschema.xml",group_name=TWEAK_GROUP_DESKTOP),
+    #GSettingsSwitchTweak("org.gnome.nautilus.preferences", 
"always-use-location-entry",schema_filename="org.gnome.nautilus.gschema.xml",group_name=TWEAK_GROUP_FILES),
+    #GSettingsComboEnumTweak("org.gnome.desktop.background", "picture-options", 
group_name=TWEAK_GROUP_DESKTOP),
+    #GSettingsFileChooserButtonTweak("org.gnome.desktop.background", "picture-uri", local_only=True, 
mimetypes=["application/xml","image/png","image/jpeg"], group_name=TWEAK_GROUP_DESKTOP),
 )
diff --git a/gtweak/tweaks/tweak_shell.py b/gtweak/tweaks/tweak_shell.py
index d6ffd35..44bf6e5 100644
--- a/gtweak/tweaks/tweak_shell.py
+++ b/gtweak/tweaks/tweak_shell.py
@@ -27,8 +27,8 @@ from gi.repository import Gtk, GLib, GObject, Gio
 from gtweak.utils import walk_directories, extract_zip_file, make_combo_list_with_default
 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, adjust_schema_for_overrides, build_label_beside_widget, build_horizontal_sizegroup, 
build_combo_box_text, UI_BOX_SPACING
+from gtweak.tweakmodel import Tweak, TweakGroup, TWEAK_GROUP_APPEARANCE, TWEAK_GROUP_TOPBAR, 
TWEAK_GROUP_WINDOWS, TWEAK_GROUP_WORKSPACES, TWEAK_GROUP_POWER, TWEAK_SORT_FIRST, TWEAK_SORT_LAST
+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, Title
 
 _shell = GnomeShellFactory().get_shell()
 _shell_loaded = _shell is not None
@@ -36,6 +36,7 @@ _shell_loaded = _shell is not None
 class ShowWindowButtons(GSettingsComboTweak):
     def __init__(self, **options):
         GSettingsComboTweak.__init__(self,
+                       "Title Bar Buttons",
             "org.gnome.desktop.wm.preferences",
             "button-layout",
             ((':close', _("Close Only")),
@@ -245,21 +246,24 @@ class StaticWorkspaceTweak(Tweak):
 sg = build_horizontal_sizegroup()
 
 TWEAKS = (
-    ShellThemeTweak(group_name=TWEAK_GROUP_THEME, loaded=_shell_loaded),
+    ShellThemeTweak(group_name=TWEAK_GROUP_APPEARANCE, loaded=_shell_loaded),
+       ShowWindowButtons(group_name=TWEAK_GROUP_WINDOWS, size_group=sg),
+       StaticWorkspaceTweak(size_group=sg, loaded=_shell_loaded, group_name=TWEAK_GROUP_WORKSPACES),
+    GSettingsComboEnumTweak("Power Button Action", "org.gnome.settings-daemon.plugins.power", 
"button-power", size_group=sg, group_name=TWEAK_GROUP_POWER, sort=TWEAK_SORT_FIRST),
+       Title("When Laptop Lid is Closed", "", group_name=TWEAK_GROUP_POWER),
+       #GSettingsSwitchTweak("org.gnome.settings-daemon.plugins.power", 
"lid-close-suspend-with-external-monitor"),
+    GSettingsComboEnumTweak("On Battery Power","org.gnome.settings-daemon.plugins.power", 
"lid-close-battery-action", size_group=sg, group_name=TWEAK_GROUP_POWER),
+       GSettingsComboEnumTweak("When plugged in","org.gnome.settings-daemon.plugins.power", 
"lid-close-ac-action", size_group=sg, group_name=TWEAK_GROUP_POWER),
+    
 )
 
 TWEAK_GROUPS = (
         TweakGroup(
-            TWEAK_GROUP_SHELL,
-            GSettingsSwitchTweak("org.gnome.desktop.interface", "clock-show-date", 
schema_filename="org.gnome.desktop.interface.gschema.xml"),
-            GSettingsSwitchTweak("org.gnome.desktop.interface", "clock-show-seconds", 
schema_filename="org.gnome.desktop.interface.gschema.xml"),
-            GSettingsSwitchTweak("org.gnome.shell.calendar", "show-weekdate", 
schema_filename="org.gnome.shell.gschema.xml", loaded=_shell_loaded),
-            ShowWindowButtons(size_group=sg),
-            GSettingsSwitchTweak("org.gnome.settings-daemon.plugins.power", 
"lid-close-suspend-with-external-monitor"),
-            GSettingsComboEnumTweak("org.gnome.settings-daemon.plugins.power", "lid-close-battery-action", 
size_group=sg),
-            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.mutter", "workspaces-only-on-primary", 
schema_filename="org.gnome.shell.gschema.xml", loaded=_shell_loaded),
-            StaticWorkspaceTweak(size_group=sg, loaded=_shell_loaded)),
+            TWEAK_GROUP_TOPBAR,
+            GSettingsSwitchTweak("Show date","org.gnome.desktop.interface", "clock-show-date", 
schema_filename="org.gnome.desktop.interface.gschema.xml"),
+            GSettingsSwitchTweak("Show seconds", "org.gnome.desktop.interface", "clock-show-seconds", 
schema_filename="org.gnome.desktop.interface.gschema.xml"),
+            GSettingsSwitchTweak("Show week numbers","org.gnome.shell.calendar", "show-weekdate", 
schema_filename="org.gnome.shell.gschema.xml", loaded=_shell_loaded),
+            #GSettingsComboEnumTweak("org.gnome.settings-daemon.plugins.xrandr", "default-monitors-setup", 
size_group=sg),
+            #GSettingsSwitchTweak("org.gnome.mutter", "workspaces-only-on-primary", 
schema_filename="org.gnome.shell.gschema.xml", loaded=_shell_loaded),      
+               ),
 )
diff --git a/gtweak/tweaks/tweak_shell_extensions.py b/gtweak/tweaks/tweak_shell_extensions.py
index 3a257bb..10c59e9 100644
--- a/gtweak/tweaks/tweak_shell_extensions.py
+++ b/gtweak/tweaks/tweak_shell_extensions.py
@@ -15,6 +15,7 @@ from gtweak.gshellwrapper import GnomeShell, GnomeShellFactory
 from gtweak.tweakmodel import Tweak, TweakGroup
 from gtweak.widgets import FileChooserButton, build_label_beside_widget, build_horizontal_sizegroup, 
build_tight_button, UI_BOX_SPACING
 from gtweak.egowrapper import ExtensionsDotGnomeDotOrg
+from gtweak.utils import DisableExtension
 
 def N_(x): return x
 
@@ -62,6 +63,9 @@ class _ShellExtensionTweak(Tweak):
             deleteButton.connect("clicked", self._on_extension_delete, uuid, ext["name"])
             widgets.append(deleteButton)
 
+        de = DisableExtension()
+        de.connect('disable-extension', self._on_disable_extension, sw)
+         
         widgets.append(sw)
 
         self.widget = build_label_beside_widget(
@@ -70,6 +74,9 @@ class _ShellExtensionTweak(Tweak):
                         warning=warning)
         self.widget_for_size_group = None
 
+    def _on_disable_extension(self, de, sw):
+        sw.set_active(False)
+
     def _on_configure_clicked(self, btn, uuid):
         execute_subprocess(['gnome-shell-extension-prefs', uuid], block=False)
 
@@ -211,7 +218,7 @@ class _ShellExtensionInstallerTweak(Tweak):
 
 class ShellExtensionTweakGroup(TweakGroup):
     def __init__(self):
-        TweakGroup.__init__(self, N_("Shell Extensions"))
+        TweakGroup.__init__(self, N_("Extensions"))
 
         extension_tweaks = []
         sg = build_horizontal_sizegroup()
diff --git a/gtweak/tweaks/tweak_typing.py b/gtweak/tweaks/tweak_typing.py
index 60c5853..3ffd53d 100644
--- a/gtweak/tweaks/tweak_typing.py
+++ b/gtweak/tweaks/tweak_typing.py
@@ -132,7 +132,8 @@ TWEAK_GROUPS = (
 )
 
 TWEAKS = (
-    GSettingsSwitchTweak("org.gnome.desktop.input-sources",
+    GSettingsSwitchTweak("Show All Sources",
+                         "org.gnome.desktop.input-sources",
                          "show-all-sources",
                          logout_required=True,
                          group_name=TWEAK_GROUP_TYPING),
diff --git a/gtweak/tweaks/tweak_windows.py b/gtweak/tweaks/tweak_windows.py
index 8ea41b5..8ac753c 100644
--- a/gtweak/tweaks/tweak_windows.py
+++ b/gtweak/tweaks/tweak_windows.py
@@ -21,12 +21,13 @@ from gi.repository import GLib
 
 import gtweak
 from gtweak.utils import walk_directories, make_combo_list_with_default
-from gtweak.tweakmodel import TWEAK_GROUP_WINDOWS, TWEAK_GROUP_THEME
-from gtweak.widgets import GSettingsComboTweak, GSettingsComboEnumTweak, GSettingsSwitchTweak
+from gtweak.tweakmodel import TWEAK_GROUP_WINDOWS, TWEAK_GROUP_APPEARANCE, TWEAK_SORT_FIRST, TWEAK_SORT_LAST
+from gtweak.widgets import GSettingsComboTweak, GSettingsComboEnumTweak, GSettingsSwitchTweak, Title
 
 class WindowThemeSwitcher(GSettingsComboTweak):
     def __init__(self, **options):
         GSettingsComboTweak.__init__(self,
+                       "Window",
             "org.gnome.desktop.wm.preferences",
             "theme",
             make_combo_list_with_default(self._get_valid_themes(), "Adwaita"),
@@ -40,16 +41,17 @@ class WindowThemeSwitcher(GSettingsComboTweak):
         return valid
 
 TWEAKS = (
-    WindowThemeSwitcher(group_name=TWEAK_GROUP_THEME),
-    GSettingsComboEnumTweak("org.gnome.desktop.wm.preferences", "action-double-click-titlebar", 
group_name=TWEAK_GROUP_WINDOWS),
-    GSettingsComboEnumTweak("org.gnome.desktop.wm.preferences", "action-middle-click-titlebar", 
group_name=TWEAK_GROUP_WINDOWS),
-    GSettingsComboEnumTweak("org.gnome.desktop.wm.preferences", "action-right-click-titlebar", 
group_name=TWEAK_GROUP_WINDOWS),
-    GSettingsComboEnumTweak("org.gnome.desktop.wm.preferences", "focus-mode", 
group_name=TWEAK_GROUP_WINDOWS),
-    GSettingsComboTweak("org.gnome.desktop.wm.preferences",
-                        "mouse-button-modifier",
-                        [("disabled", _("Disabled")), ("<Alt>", "Alt"), ("<Super>", "Super")],
-                        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.mutter", "attach-modal-dialogs", group_name=TWEAK_GROUP_WINDOWS),
+       GSettingsComboEnumTweak("Focus Mode", "org.gnome.desktop.wm.preferences", "focus-mode", 
group_name=TWEAK_GROUP_WINDOWS),    
+       WindowThemeSwitcher(group_name=TWEAK_GROUP_APPEARANCE),
+       Title("Titlebar Actions", "", group_name=TWEAK_GROUP_WINDOWS),
+    GSettingsComboEnumTweak("Double-click","org.gnome.desktop.wm.preferences", 
"action-double-click-titlebar", group_name=TWEAK_GROUP_WINDOWS),
+    GSettingsComboEnumTweak("Middle-click","org.gnome.desktop.wm.preferences", 
"action-middle-click-titlebar", group_name=TWEAK_GROUP_WINDOWS),
+    GSettingsComboEnumTweak("Secondary-click","org.gnome.desktop.wm.preferences", 
"action-right-click-titlebar", group_name=TWEAK_GROUP_WINDOWS),
+    #GSettingsComboTweak("org.gnome.desktop.wm.preferences",
+    #                    "mouse-button-modifier",
+    #                    [("disabled", _("Disabled")), ("<Alt>", "Alt"), ("<Super>", "Super")],
+    #                    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.mutter", "attach-modal-dialogs", group_name=TWEAK_GROUP_WINDOWS),
 )
diff --git a/gtweak/tweakview.py b/gtweak/tweakview.py
index 1f78ab1..6b3633b 100644
--- a/gtweak/tweakview.py
+++ b/gtweak/tweakview.py
@@ -23,7 +23,7 @@ from gi.repository import Gtk, Gdk, GObject
 import gtweak.tweakmodel
 from gtweak.tweakmodel import TweakModel
 
-DEFAULT_TWEAKGROUP = gtweak.tweakmodel.TWEAK_GROUP_SHELL
+DEFAULT_TWEAKGROUP = gtweak.tweakmodel.TWEAK_GROUP_APPEARANCE
 WIDGET_SORT_ORDER = (Gtk.Switch, Gtk.SpinButton, Gtk.ComboBox, Gtk.Box, Gtk.VBox, Gtk.HBox)
 
 def _sort_tweak_widgets_by_widget_type(tweak):
@@ -43,21 +43,32 @@ class TweakView:
         self._notebook = builder.get_object('notebook')
         self._detail_vbox = builder.get_object('detail_vbox')
 
+        self.headerbar = Gtk.HeaderBar()
+        searchToggle = Gtk.ToggleButton()
+        searchToggle.add(Gtk.Image.new_from_stock(Gtk.STOCK_FIND, Gtk.IconSize.MENU))
+
+        top = builder.get_object('topbox')
+        top.pack_start(self.headerbar, True, True, 0)
+        
+        self.headerbar.pack_start(searchToggle)
+        leftbox = builder.get_object('leftbox')
+        revealer = Gtk.Revealer();
+
+        entry = Gtk.SearchEntry()
         self._entry_manager = EntryManager(
-            builder.get_object('search_entry'),
+            entry,
             self._on_search,
             self._on_search_cancel)
 
+        revealer.add(entry)
+        leftbox.pack_start(revealer, False, True, 0)
+        searchToggle.connect("toggled", self.transition, entry, revealer)
         self._model = model
         self._model.load_tweaks()
-
-        self.treeview = Gtk.TreeView(model=model)        
-        self.treeview.props.headers_visible = False
-        self.treeview.append_column(
-                Gtk.TreeViewColumn(
-                        "Tweak", Gtk.CellRendererText(), text=TweakModel.COLUMN_NAME))
-        self.treeview.get_selection().connect("changed", self._on_selection_changed)
-        self.treeview.show_all()
+        groups = self._model._tweak_group_names.keys()
+       groups = sorted(groups)
+        listbox = self.init_listbox(groups)
+        leftbox.pack_start(listbox, True, True, 0)
 
         #make sure the tweak background is the correct color
         ctx = builder.get_object('tweak_viewport').get_style_context ()
@@ -77,9 +88,13 @@ class TweakView:
         self._notification_functions = {}
 
     def run(self):
-        self.treeview.get_selection().select_iter(
-                self._model.get_tweakgroup_iter(DEFAULT_TWEAKGROUP))
-
+        itere = self._model.get_tweakgroup_iter(DEFAULT_TWEAKGROUP)  
+        self._on_pre_selection_change()
+        tweakgroup = self._model.get_value(itere, self._model.COLUMN_TWEAK)
+        self.show_only_tweaks(tweakgroup.tweaks)
+        self._on_post_selection_change()
+        self.headerbar.set_title(tweakgroup.name)
+       
     def show_only_tweaks(self, tweaks):
         for t in self._model.tweaks:
             if t in tweaks:
@@ -88,7 +103,7 @@ class TweakView:
                 t.widget.hide()
 
     def select_none(self):
-        self.treeview.get_selection().unselect_all()
+        print "filter"
 
     def _on_tweak_notify_response(self, info, response, func):
         self._detail_vbox.remove(info)
@@ -138,17 +153,38 @@ class TweakView:
     def _on_post_selection_change(self):
         self._notebook.set_current_page(1)
 
-    def _on_selection_changed(self, selection):
-        t1 = datetime.datetime.now()
-        model, selected = selection.get_selected()
-        if selected:
+    def _on_selection_changed(self, lista, row):
+        if row is not None:
+            text = row.get_child().get_text()
+            itere = self._model._tweak_group_iters[text]
             self._on_pre_selection_change()
-            tweakgroup = model.get_value(selected, model.COLUMN_TWEAK)
+            tweakgroup = self._model.get_value(itere, self._model.COLUMN_TWEAK)
             self.show_only_tweaks(tweakgroup.tweaks)
             self._on_post_selection_change()
-        t2 = datetime.datetime.now()
-        #print "TTTTTT=",t2-t1
-            
+            self.headerbar.set_title(tweakgroup.name)  
+    
+    def init_listbox(self, values):
+        listbox = Gtk.ListBox()
+        for i in values:
+            lbl = Gtk.Label(i)
+            lbl.props.xalign = 0.0
+            row = Gtk.ListBoxRow()
+            listbox.add(lbl)
+        widget = listbox.get_row_at_index(0)
+        listbox.select_row (widget)        
+        listbox.connect("row-selected", self._on_selection_changed)
+        return listbox          
+    
+    def transition(self, btn, entry, revealer):
+        if revealer.get_reveal_child():
+            revealer.set_reveal_child(False) 
+            entry.set_text("") 
+            btn.grab_focus()      
+        else:
+            revealer.set_reveal_child(True)
+            entry.grab_focus()
+
+
 class EntryManager:
 
     SYMBOLIC = "-symbolic"
diff --git a/gtweak/utils.py b/gtweak/utils.py
index 0d9128b..2a29ffe 100644
--- a/gtweak/utils.py
+++ b/gtweak/utils.py
@@ -24,6 +24,7 @@ import subprocess
 import gtweak
 from gtweak.gsettings import GSettingsSetting
 
+from gi.repository import GObject
 from gi.repository import GLib
 from gi.repository import Gio
 def singleton(cls):
@@ -245,6 +246,18 @@ class SchemaList:
         for i in SchemaList.__list:
             s = Gio.Settings(i[1])
             s.reset(i[0])
+ singleton
+class DisableExtension(GObject.GObject):
+    
+    __gsignals__ = {
+        "disable-extension": (GObject.SIGNAL_RUN_FIRST, GObject.TYPE_NONE,()),
+    }    
+    
+    def __init__(self):
+        GObject.GObject.__init__(self)
+    
+    def disable(self):
+        self.emit("disable-extension")
 
 @singleton
 class XSettingsOverrides:
diff --git a/gtweak/widgets.py b/gtweak/widgets.py
index 33ae1f1..1660275 100644
--- a/gtweak/widgets.py
+++ b/gtweak/widgets.py
@@ -61,7 +61,19 @@ def build_label_beside_widget(txt, *widget, **kwargs):
     lbl.props.xalign = 0.0
     lbl.set_has_tooltip(True)
     lbl.connect("query-tooltip", show_tooltip_when_ellipsized)
-    hbox.pack_start(lbl, True, True, 0)
+       
+    if kwargs.get("desc"):
+        box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
+        box.pack_start(lbl, True, True, 0)
+        desc = kwargs.get("desc")
+        lbl_des = Gtk.Label()
+        lbl_des.props.xalign = 0.0
+        lbl_des.set_markup("<span size='x-small'>"+desc+"</span>")
+        box.pack_start(lbl_des, True, True,0)
+        hbox.pack_start(box, True, True,0)
+        
+    else:    
+        hbox.pack_start(lbl, True, True, 0)
 
     if kwargs.get("info"):
         hbox.pack_start(
@@ -201,12 +213,12 @@ class _DependableMixin:
         self.widget.set_sensitive(sensitive)
 
 class GSettingsSwitchTweak(_GSettingsTweak, _DependableMixin):
-    def __init__(self, schema_name, key_name, **options):
+    def __init__(self, name, schema_name, key_name, **options):
         _GSettingsTweak.__init__(self, schema_name, key_name, **options)
 
         w = Gtk.Switch()
         self.settings.bind(key_name, w, "active", Gio.SettingsBindFlags.DEFAULT)
-        self.widget = build_label_beside_widget(self.name, w)
+        self.widget = build_label_beside_widget(name, w)
         # never change the size of a switch
         self.widget_for_size_group = None
 
@@ -216,12 +228,12 @@ class GSettingsSwitchTweak(_GSettingsTweak, _DependableMixin):
         )
 
 class GSettingsFontButtonTweak(_GSettingsTweak, _DependableMixin):
-    def __init__(self, schema_name, key_name, **options):
+    def __init__(self, name, schema_name, key_name, **options):
         _GSettingsTweak.__init__(self, schema_name, key_name, **options)
 
         w = Gtk.FontButton()
         self.settings.bind(key_name, w, "font-name", Gio.SettingsBindFlags.DEFAULT)
-        self.widget = build_label_beside_widget(self.name, w)
+        self.widget = build_label_beside_widget(name, w)
         self.widget_for_size_group = w
 
 class GSettingsRangeTweak(_GSettingsTweak, _DependableMixin):
@@ -252,7 +264,7 @@ class GSettingsSpinButtonTweak(_GSettingsTweak, _DependableMixin):
         self.widget_for_size_group = w
 
 class GSettingsComboEnumTweak(_GSettingsTweak, _DependableMixin):
-    def __init__(self, schema_name, key_name, **options):
+    def __init__(self, name, schema_name, key_name, **options):
         _GSettingsTweak.__init__(self, schema_name, key_name, **options)
 
         _type, values = self.settings.get_range(key_name)
@@ -263,7 +275,7 @@ class GSettingsComboEnumTweak(_GSettingsTweak, _DependableMixin):
         w.connect('changed', self._on_combo_changed)
         self.combo = w
 
-        self.widget = build_label_beside_widget(self.name, w)
+        self.widget = build_label_beside_widget(name, w)
         self.widget_for_size_group = w
 
 
@@ -288,7 +300,7 @@ class GSettingsComboEnumTweak(_GSettingsTweak, _DependableMixin):
             self.settings.set_string(self.key_name, val)
 
 class GSettingsComboTweak(_GSettingsTweak, _DependableMixin):
-    def __init__(self, schema_name, key_name, key_options, **options):
+    def __init__(self, name, schema_name, key_name, key_options, **options):
         _GSettingsTweak.__init__(self, schema_name, key_name, **options)
 
         #check key_options is iterable
@@ -301,7 +313,7 @@ class GSettingsComboTweak(_GSettingsTweak, _DependableMixin):
                     self.settings.get_string(self.key_name),
                     *key_options)
         self.combo.connect('changed', self._on_combo_changed)
-        self.widget = build_label_beside_widget(self.name, self.combo)
+        self.widget = build_label_beside_widget(name, self.combo)
         self.widget_for_size_group = self.combo
 
         self.settings.connect('changed::'+self.key_name, self._on_setting_changed)
@@ -371,9 +383,11 @@ class DarkThemeSwitcher(Tweak):
 
         w = Gtk.Switch()
         w.set_active(self._gtksettings.get_integer("gtk-application-prefer-dark-theme"))
-
+               
+        title = _("Global Dark Theme")
+        description = _("Applications need to be restarted for change to take effect")
         w.connect("notify::active", self._on_switch_changed)
-        self.widget = build_label_beside_widget(self.name, w)
+        self.widget = build_label_beside_widget(title, w, desc=description)
 
     def _on_switch_changed(self, switch, param):
         active = switch.get_active()
@@ -383,3 +397,11 @@ class DarkThemeSwitcher(Tweak):
                                           active)
         except:
             self.notify_error(_("Error writing setting"))
+
+class Title(Tweak):
+    def __init__(self, name, desc, **options):
+        Tweak.__init__(self, name, desc, **options)
+        self.widget = Gtk.Label()
+        self.widget.set_markup("<b>"+name+"</b>")
+        self.widget.props.xalign = 0.0
+



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