def __init__(self, **options): name = _("Overview Shortcut") Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL, spacing=0) _GSettingsTweak.__init__(self, name, "org.gnome.mutter", "overlay-key", loaded=_shell_loaded, **options) box_btn = Gtk.ButtonBox() box_btn.set_layout(Gtk.ButtonBoxStyle.EXPAND) btn1 = Gtk.RadioButton.new_with_label_from_widget( None, _("Left Super")) btn1.set_property("draw-indicator", False) btn2 = Gtk.RadioButton.new_from_widget(btn1) btn2.set_label(_("Right Super")) btn2.set_property("draw-indicator", False) if (self.settings.get_string(self.key_name) == "Super_R"): btn2.set_active(True) btn1.connect("toggled", self.on_button_toggled, "Super_L") btn2.connect("toggled", self.on_button_toggled, "Super_R") box_btn.pack_start(btn1, True, True, 0) box_btn.pack_start(btn2, True, True, 0) build_label_beside_widget(name, box_btn, hbox=self)
def __init__(self, **options): name = _("Placement") Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL, spacing=0) _GSettingsTweak.__init__(self, name, "org.gnome.desktop.wm.preferences", "button-layout", **options) box_btn = Gtk.ButtonBox() box_btn.set_layout(Gtk.ButtonBoxStyle.EXPAND) # Translators: For RTL languages, this is the "Right" direction since the # interface is flipped btn1 = Gtk.RadioButton.new_with_label_from_widget(None, _("Left")) btn1.set_property("draw-indicator", False) btn2 = Gtk.RadioButton.new_from_widget(btn1) # Translators: For RTL languages, this is the "Left" direction since the # interface is flipped btn2.set_label(_("Right")) btn2.set_property("draw-indicator", False) val = self.settings.get_string(self.key_name) (left, colon, right) = val.partition(":") if "close" in right: btn2.set_active(True) btn2.connect("toggled", self.on_button_toggled) box_btn.pack_start(btn1, True, True, 0) box_btn.pack_start(btn2, True, True, 0) build_label_beside_widget(name, box_btn, hbox=self)
def __init__(self, name, description, **options): Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL) Tweak.__init__(self, name, description, **options) build_label_beside_widget( name, Gtk.Button(options.get("_test_button_name",name)), info=options.get("_tweak_info"), warning=options.get("_tweak_warning"), hbox=self)
def __init__(self, **options): name = _("Workspace Creation") Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL) _GSettingsTweak.__init__(self, name, "org.gnome.mutter", "dynamic-workspaces", **options) default = self.STATUS.keys()[self.STATUS.values().index(self.settings[self.key_name])] key_options = [("dynamic", _("Dynamic")), ("static", _("Static"))] self.combo = build_combo_box_text(default, *key_options) self.combo.connect('changed', self._on_combo_changed) build_label_beside_widget(name, self.combo, hbox=self) self.widget_for_size_group = self.combo
def __init__(self, **options): Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL) Tweak.__init__(self, _("Window scaling"), _("Adjust GDK window scaling factor for HiDPI"), **options) self._xsettings = XSettingsOverrides() adjustment = Gtk.Adjustment(lower=1, upper=2, step_increment=1, page_increment=1) w = Gtk.SpinButton() w.set_adjustment(adjustment) w.set_digits(0) adjustment.set_value(self._xsettings.get_window_scaling_factor()) w.connect("value-changed", self._on_value_changed) build_label_beside_widget(self.name, w, hbox=self) self.widget_for_size_group = w
def __init__(self, **options): Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL) Tweak.__init__(self, _("Window scaling"), _("Adjust GDK window scaling factor for HiDPI"), **options) self._xsettings = XSettingsOverrides() self._original_factor = self._xsettings.get_window_scaling_factor() adjustment = Gtk.Adjustment(lower=1, upper=2, step_increment=1, page_increment=1) w = Gtk.SpinButton() w.set_adjustment(adjustment) w.set_digits(0) adjustment.set_value(self._xsettings.get_window_scaling_factor()) w.connect("value-changed", self._on_value_changed) build_label_beside_widget(self.name, w, hbox=self) self.widget_for_size_group = w
def __init__(self, shell, ext, **options): Tweak.__init__(self, ext["name"], ext.get("description",""), **options) self._shell = shell state = ext.get("state") sw = Gtk.Switch() sw.set_active(self._shell.extension_is_active(state, ext["uuid"])) sw.connect('notify::active', self._on_extension_toggled, ext["uuid"]) info = None warning = None sensitive = False if state == GnomeShell.EXTENSION_STATE["ENABLED"] or \ state == GnomeShell.EXTENSION_STATE["DISABLED"] or \ state == GnomeShell.EXTENSION_STATE["INITIALIZED"]: sensitive = True elif state == GnomeShell.EXTENSION_STATE["DOWNLOADING"]: info = _("Extension downloading") elif state == GnomeShell.EXTENSION_STATE["ERROR"]: warning = _("Error loading extension") elif state == GnomeShell.EXTENSION_STATE["OUT_OF_DATE"]: warning = _("Extension does not support shell version") else: warning = _("Unknown extension error") logging.critical(warning) sw.set_sensitive(sensitive) self.widget = build_label_beside_widget( _("%s Extension") % ext["name"], sw, warning=warning) self.widget_for_size_group = sw
def __init__(self, name, description, **options): Tweak.__init__(self, name, description, **options) self.widget = build_label_beside_widget( name, Gtk.Button(options.get("test_button_name",name)), info=options.get("tweak_info"), warning=options.get("tweak_warning"))
def __init__(self, **options): Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL) Tweak.__init__(self, _("Window scaling"), _("Adjust GDK window scaling factor for HiDPI"), **options) self._xsettings = XSettingsOverrides() self._original_factor = self._xsettings.get_window_scaling_factor() w = Gtk.SpinButton.new_with_range(1, 2, 1) w.set_numeric(True) w.set_digits(0) w.set_update_policy(Gtk.SpinButtonUpdatePolicy.IF_VALID) w.set_value(self._xsettings.get_window_scaling_factor()) w.connect("value-changed", self._on_value_changed) build_label_beside_widget(self.name, w, hbox=self) self.widget_for_size_group = w
def __init__(self, shell, **options): Tweak.__init__(self, _("Install Shell Extension"), "", **options) self._shell = shell chooser = ZipFileChooserButton(_("Select an extension")) chooser.connect("file-set", self._on_file_set) self.widget = build_label_beside_widget(self.name, chooser) self.widget_for_size_group = chooser
def __init__(self, shell, **options): Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL) Tweak.__init__(self, _("Install Shell Extension"), "", **options) self._shell = shell chooser = FileChooserButton(_("Select an extension"), True, ["application/zip"]) chooser.connect("file-set", self._on_file_set) hb = Gtk.HBox(spacing=UI_BOX_SPACING) hb.pack_start( Gtk.LinkButton.new_with_label("https://extensions.gnome.org", _("Get more extensions")), False, False, 0) hb.pack_start(chooser, False, False, 0) build_label_beside_widget(self.name, hb, hbox=self) self.widget_for_size_group = hb self.loaded = self._shell is not None
def __init__(self, shell, **options): Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL) Tweak.__init__(self, _("Install Shell Extension"), "", **options) self._shell = shell chooser = FileChooserButton( _("Select an extension"), True, ["application/zip"]) chooser.connect("file-set", self._on_file_set) hb = Gtk.HBox(spacing=UI_BOX_SPACING) hb.pack_start( Gtk.LinkButton.new_with_label("https://extensions.gnome.org",_("Get more extensions")), False, False, 0) hb.pack_start(chooser, False, False, 0) build_label_beside_widget(self.name, hb, hbox=self) self.widget_for_size_group = hb self.loaded = self._shell is not None
def __init__(self, group_id, parent_settings, xkb_info, **options): try: desc = xkb_info.description_for_group(group_id) except AttributeError: desc = group_id Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL) Tweak.__init__(self, desc, desc, **options) self._group_id = group_id self._parent_settings = parent_settings self._xkb_info = xkb_info self._value = None self._possible_values = [] model_values = [(None, _("Disabled"))] for option_id in self._xkb_info.get_options_for_group(group_id): desc = self._xkb_info.description_for_option(group_id, option_id) model_values.append((option_id, desc)) self._possible_values.append(option_id) store = Gtk.ListStore(str, str) store.set_sort_column_id(0, Gtk.SortType.ASCENDING) for (val, name) in model_values: store.append((val, name)) self._combo = Gtk.ComboBox(model=store) renderer = Gtk.CellRendererText() renderer.props.ellipsize = Pango.EllipsizeMode.END renderer.props.max_width_chars = 30 self._combo.pack_start(renderer, True) self._combo.add_attribute(renderer, "text", 1) self._combo_changed_handler_id = self._combo.connect( "changed", self._on_combo_changed) build_label_beside_widget(self.name, self._combo, hbox=self) self.widget_for_size_group = None self.reload()
def __init__(self, group_id, parent_settings, xkb_info, **options): try: desc = xkb_info.description_for_group(group_id) except AttributeError: desc = group_id Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL) Tweak.__init__(self, desc, desc, **options) self._group_id = group_id self._parent_settings = parent_settings self._xkb_info = xkb_info self._value = None self._possible_values = [] model_values = [(None, _("Disabled"))] for option_id in self._xkb_info.get_options_for_group(group_id): desc = self._xkb_info.description_for_option(group_id, option_id) model_values.append((option_id, desc)) self._possible_values.append(option_id) store = Gtk.ListStore(str, str) store.set_sort_column_id(0, Gtk.SortType.ASCENDING) for (val, name) in model_values: store.append((val, name)) self._combo = Gtk.ComboBox(model = store) renderer = Gtk.CellRendererText() renderer.props.ellipsize = Pango.EllipsizeMode.END renderer.props.max_width_chars = 30 self._combo.pack_start(renderer, True) self._combo.add_attribute(renderer, "text", 1) self._combo_changed_handler_id = self._combo.connect("changed", self._on_combo_changed) build_label_beside_widget(self.name, self._combo, hbox=self) self.widget_for_size_group = None self.reload()
def __init__(self, **options): Tweak.__init__(self, "Dynamic workspaces", "Disable gnome-shell dynamic workspace management, use static workspaces", **options) settings = GSettingsSetting(self.NUM_WORKSPACES_SCHEMA, **options) adj = Gtk.Adjustment(1, 1, 99, 1) sb = Gtk.SpinButton(adjustment=adj, digits=0) settings.bind(self.NUM_WORKSPACES_KEY, adj, "value", Gio.SettingsBindFlags.DEFAULT) settings = GSettingsSetting(self.DYNAMIC_SCHEMA, **options) sw = Gtk.Switch() settings.bind(self.DYNAMIC_KEY, sw, "active", Gio.SettingsBindFlags.DEFAULT) #sw.bind_property ("active", sb, "sensitive", GObject.BindingFlags.SYNC_CREATE) sb.set_sensitive(not settings[self.DYNAMIC_KEY]) sw.connect('notify::active', lambda _sw,_param,_sb: _sb.set_sensitive(not _sw.get_active()), sb) hb = Gtk.HBox(spacing = 4) hb.pack_start(sw, False, False, 0) hb.pack_start(sb, True, True, 0) self.widget = build_label_beside_widget(self.name, hb) self.widget_for_size_group = hb
class ShellThemeTweak(Gtk.Box, Tweak): THEME_EXT_NAME = "*****@*****.**" THEME_GSETTINGS_SCHEMA = "org.gnome.shell.extensions.user-theme" THEME_GSETTINGS_NAME = "name" THEME_GSETTINGS_DIR = os.path.join(GLib.get_user_data_dir(), "gnome-shell", "extensions", THEME_EXT_NAME, "schemas") LEGACY_THEME_DIR = os.path.join(GLib.get_home_dir(), ".themes") THEME_DIR = os.path.join(GLib.get_user_data_dir(), "themes") def __init__(self, **options): Gtk.Box.__init__(self, orientation=Gtk.Orientation.HORIZONTAL) Tweak.__init__(self, _("Shell theme"), _("Install custom or user themes for gnome-shell"), **options) #check the shell is running and the usertheme extension is present error = _("Unknown error") self._shell = _shell if self._shell is None: logging.warning("Shell not running", exc_info=True) error = _("Shell not running") else: try: extensions = self._shell.list_extensions() if ShellThemeTweak.THEME_EXT_NAME in extensions and extensions[ ShellThemeTweak.THEME_EXT_NAME]["state"] == 1: #check the correct gsettings key is present try: if os.path.exists(ShellThemeTweak.THEME_GSETTINGS_DIR): self._settings = GSettingsSetting( ShellThemeTweak.THEME_GSETTINGS_SCHEMA, schema_dir=ShellThemeTweak.THEME_GSETTINGS_DIR) else: self._settings = GSettingsSetting( ShellThemeTweak.THEME_GSETTINGS_SCHEMA) name = self._settings.get_string( ShellThemeTweak.THEME_GSETTINGS_NAME) ext = extensions[ShellThemeTweak.THEME_EXT_NAME] logging.debug("Shell user-theme extension\n%s" % pprint.pformat(ext)) error = None except: logging.warning( "Could not find user-theme extension in %s" % ','.join(extensions.keys()), exc_info=True) error = _( "Shell user-theme extension incorrectly installed") else: error = _("Shell user-theme extension not enabled") except Exception, e: logging.warning("Could not list shell extensions", exc_info=True) error = _("Could not list shell extensions") if error: cb = build_combo_box_text(None) build_label_beside_widget(self.name, cb, warning=error, hbox=self) self.widget_for_size_group = cb else: #include both system, and user themes #note: the default theme lives in /system/data/dir/gnome-shell/theme # and not themes/, so add it manually later dirs = [ os.path.join(d, "themes") for d in GLib.get_system_data_dirs() ] dirs += [ShellThemeTweak.THEME_DIR] dirs += [ShellThemeTweak.LEGACY_THEME_DIR] valid = walk_directories(dirs, lambda d: os.path.exists(os.path.join(d, "gnome-shell")) and \ os.path.exists(os.path.join(d, "gnome-shell", "gnome-shell.css"))) #the default value to reset the shell is an empty string valid.extend(("", )) #build a combo box with all the valid theme options #manually add Adwaita to represent the default cb = build_combo_box_text( self._settings.get_string( ShellThemeTweak.THEME_GSETTINGS_NAME), *make_combo_list_with_default( valid, "", default_text=_("<i>Default</i>"))) cb.connect('changed', self._on_combo_changed) self._combo = cb #a filechooser to install new themes chooser = FileChooserButton(_("Select a theme"), True, ["application/zip"]) chooser.connect("file-set", self._on_file_set) build_label_beside_widget(self.name, chooser, cb, hbox=self) self.widget_for_size_group = cb