Hello community, here is the log from the commit of package gnome-tweak-tool for openSUSE:Factory checked in at Tue May 31 17:28:30 CEST 2011.
-------- --- GNOME/gnome-tweak-tool/gnome-tweak-tool.changes 2011-04-28 13:16:46.000000000 +0200 +++ /mounts/work_src_done/STABLE/gnome-tweak-tool/gnome-tweak-tool.changes 2011-05-26 22:42:11.000000000 +0200 @@ -1,0 +2,11 @@ +Sun May 22 13:36:07 CEST 2011 - [email protected] + +- Update to version 3.0.4: + + bgo#648751: Support system wide themes + + bgo#649687: Fix duplicate themes + + A theming specification for shell themes has been developed and + agreed upon by a number of theme authors. If installing a theme + matching this specification, show the appropriate name. + + Support management of Shell extensions (in home directory) + +------------------------------------------------------------------- calling whatdependson for head-i586 Old: ---- gnome-tweak-tool-3.0.3.tar.bz2 New: ---- gnome-tweak-tool-3.0.4.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gnome-tweak-tool.spec ++++++ --- /var/tmp/diff_new_pack.CCFM5T/_old 2011-05-31 17:27:51.000000000 +0200 +++ /var/tmp/diff_new_pack.CCFM5T/_new 2011-05-31 17:27:51.000000000 +0200 @@ -19,7 +19,7 @@ Name: gnome-tweak-tool -Version: 3.0.3 +Version: 3.0.4 Release: 1 License: GPLv3+ Summary: A tool to customize advanced GNOME 3 options ++++++ gnome-tweak-tool-3.0.3.tar.bz2 -> gnome-tweak-tool-3.0.4.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/NEWS new/gnome-tweak-tool-3.0.4/NEWS --- old/gnome-tweak-tool-3.0.3/NEWS 2011-04-27 14:03:55.000000000 +0200 +++ new/gnome-tweak-tool-3.0.4/NEWS 2011-05-22 11:27:40.000000000 +0200 @@ -1,3 +1,12 @@ +3.0.4 + * Support system wide themes (bug 648751) + * Fix duplicate themes (bug 649687) + * A theming specification for shell themes has been developed and agreed upon + by a number of theme authors. If installing a theme matching this specification + show the appropriate name + http://www.fpmurphy.com/public/gnome_theme_packaging_spec_d2.txt + * Support management of Shell extensions (in home directory) + 3.0.3 * Autostart nautilus at login if it is configured to show desktop icons (bug 648087) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/configure new/gnome-tweak-tool-3.0.4/configure --- old/gnome-tweak-tool-3.0.3/configure 2011-04-27 21:52:38.000000000 +0200 +++ new/gnome-tweak-tool-3.0.4/configure 2011-05-22 11:24:04.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.67 for gnome-tweak-tool 3.0.3. +# Generated by GNU Autoconf 2.67 for gnome-tweak-tool 3.0.4. # # Report bugs to <[email protected]>. # @@ -552,8 +552,8 @@ # Identity of this package. PACKAGE_NAME='gnome-tweak-tool' PACKAGE_TARNAME='gnome-tweak-tool' -PACKAGE_VERSION='3.0.3' -PACKAGE_STRING='gnome-tweak-tool 3.0.3' +PACKAGE_VERSION='3.0.4' +PACKAGE_STRING='gnome-tweak-tool 3.0.4' PACKAGE_BUGREPORT='[email protected]' PACKAGE_URL='' @@ -1287,7 +1287,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures gnome-tweak-tool 3.0.3 to adapt to many kinds of systems. +\`configure' configures gnome-tweak-tool 3.0.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1358,7 +1358,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of gnome-tweak-tool 3.0.3:";; + short | recursive ) echo "Configuration of gnome-tweak-tool 3.0.4:";; esac cat <<\_ACEOF @@ -1473,7 +1473,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -gnome-tweak-tool configure 3.0.3 +gnome-tweak-tool configure 3.0.4 generated by GNU Autoconf 2.67 Copyright (C) 2010 Free Software Foundation, Inc. @@ -1720,7 +1720,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by gnome-tweak-tool $as_me 3.0.3, which was +It was created by gnome-tweak-tool $as_me 3.0.4, which was generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ @@ -2537,7 +2537,7 @@ # Define the identity of the package. PACKAGE='gnome-tweak-tool' - VERSION='3.0.3' + VERSION='3.0.4' cat >>confdefs.h <<_ACEOF @@ -7828,7 +7828,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by gnome-tweak-tool $as_me 3.0.3, which was +This file was extended by gnome-tweak-tool $as_me 3.0.4, which was generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -7885,7 +7885,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -gnome-tweak-tool config.status 3.0.3 +gnome-tweak-tool config.status 3.0.4 configured by $0, generated by GNU Autoconf 2.67, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/configure.ac new/gnome-tweak-tool-3.0.4/configure.ac --- old/gnome-tweak-tool-3.0.3/configure.ac 2011-04-26 23:57:24.000000000 +0200 +++ new/gnome-tweak-tool-3.0.4/configure.ac 2011-04-27 21:59:58.000000000 +0200 @@ -1,4 +1,4 @@ -AC_INIT([gnome-tweak-tool], [3.0.3], [[email protected]]) +AC_INIT([gnome-tweak-tool], [3.0.4], [[email protected]]) AM_INIT_AUTOMAKE([foreign]) Files old/gnome-tweak-tool-3.0.3/data/welcome.png and new/gnome-tweak-tool-3.0.4/data/welcome.png differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/gtweak/defs.py new/gnome-tweak-tool-3.0.4/gtweak/defs.py --- old/gnome-tweak-tool-3.0.3/gtweak/defs.py 2011-04-27 21:52:53.000000000 +0200 +++ new/gnome-tweak-tool-3.0.4/gtweak/defs.py 2011-05-22 11:29:56.000000000 +0200 @@ -2,4 +2,4 @@ PKG_DATA_DIR = "/usr/local/share/gnome-tweak-tool" GSETTINGS_SCHEMA_DIR = "/usr/local/share/glib-2.0/schemas" TWEAK_DIR = "/usr/local/lib/python2.7/dist-packages/gtweak/tweaks" -VERSION = "3.0.3" +VERSION = "3.0.4" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/gtweak/gsettings.py new/gnome-tweak-tool-3.0.4/gtweak/gsettings.py --- old/gnome-tweak-tool-3.0.3/gtweak/gsettings.py 2011-04-27 10:34:07.000000000 +0200 +++ new/gnome-tweak-tool-3.0.4/gtweak/gsettings.py 2011-05-10 22:32:14.000000000 +0200 @@ -41,11 +41,18 @@ for schema in dom.getElementsByTagName("schema"): if schema_name == schema.getAttribute("id"): for key in schema.getElementsByTagName("key"): + #summary is compulsory, description is optional + summary = key.getElementsByTagName("summary")[0].childNodes[0].data + try: + description = key.getElementsByTagName("description")[0].childNodes[0].data + except: + description = "" self._schema[key.getAttribute("name")] = { - "summary" : key.getElementsByTagName("summary")[0].childNodes[0].data, - "description" : key.getElementsByTagName("description")[0].childNodes[0].data} + "summary" : summary, + "description" : description + } except: - logging.critical("Error parsing schema", exc_info=True) + logging.critical("Error parsing schema %s (%s)" % (schema_name, schema_path), exc_info=True) def __repr__(self): return "<gtweak.gsettings._GSettingsSchema: %s>" % self._schema_name @@ -61,6 +68,10 @@ self._schema = _SCHEMA_CACHE[schema_name] + def _setting_check_is_list(self, key): + variant = Gio.Settings.get_value(self, key) + return variant.get_type_string() == "as" + def schema_get_summary(self, key): return self._schema._schema[key]["summary"] @@ -70,13 +81,42 @@ def schema_get_all(self, key): return self._schema._schema[key] - def get_value(self, key): - return Gio.Settings.get_value(self,key).unpack() - - def set_value(self, key, value): - Gio.Settings.set_value(self, key, GLib.Variant('s', value)) + def setting_add_to_list(self, key, value): + """ helper function, ensures value is present in the GSettingsList at key """ + assert self._setting_check_is_list(key) + + vals = self[key] + if value not in vals: + vals.append(value) + self[key] = vals + return True + + def setting_remove_from_list(self, key, value): + """ helper function, removes value in the GSettingsList at key (if present)""" + assert self._setting_check_is_list(key) + + vals = self[key] + try: + vals.remove(value) + self[key] = vals + return True + except ValueError: + #not present + pass + + def setting_is_in_list(self, key, value): + assert self._setting_check_is_list(key) + return value in self[key] if __name__ == "__main__": + gtweak.GSETTINGS_SCHEMA_DIR = "/usr/share/glib-2.0/schemas/" + key = "draw-background" s = GSettingsSetting("org.gnome.desktop.background") print s.schema_get_summary(key), s.schema_get_description(key) + + key = "disabled-extensions" + s = GSettingsSetting("org.gnome.shell") + assert s.setting_add_to_list(key, "foo") + assert s.setting_remove_from_list(key, "foo") + assert not s.setting_remove_from_list(key, "foo") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/gtweak/tweakmodel.py new/gnome-tweak-tool-3.0.4/gtweak/tweakmodel.py --- old/gnome-tweak-tool-3.0.3/gtweak/tweakmodel.py 2011-04-15 15:45:50.000000000 +0200 +++ new/gnome-tweak-tool-3.0.4/gtweak/tweakmodel.py 2011-05-10 22:13:28.000000000 +0200 @@ -46,13 +46,17 @@ def set_notify_cb(self, func): self._notify_cb = func - def notify_action_required(self, desc, btn, func): + def notify_action_required(self, desc, btn, func, error=False): if self._notify_cb: - self._notify_cb(self, desc, btn, func) + self._notify_cb(self, desc, error, btn, func) def notify_error(self, desc): if self._notify_cb: - self._notify_cb(self, desc, None, None) + self._notify_cb(self, desc, True, None, None) + + def notify_info(self, desc): + if self._notify_cb: + self._notify_cb(self, desc, False, None, None) class TweakGroup: def __init__(self, name, *tweaks): @@ -72,6 +76,12 @@ self._tweak_dir = gtweak.TWEAK_DIR assert(os.path.exists(self._tweak_dir)) + self.set_sort_func(self.COLUMN_NAME, self._sort_tweak_groups) + self.set_sort_column_id(self.COLUMN_NAME, Gtk.SortType.ASCENDING) + + def _sort_tweak_groups(self, model, iter1, iter2, user_data): + return cmp(model.get_value(iter1, self.COLUMN_NAME), model.get_value(iter2, self.COLUMN_NAME)) + @property def tweaks(self): return [t for row in self for t in row[TweakModel.COLUMN_TWEAK].tweaks] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/gtweak/tweaks/tweak_shell.py new/gnome-tweak-tool-3.0.4/gtweak/tweaks/tweak_shell.py --- old/gnome-tweak-tool-3.0.3/gtweak/tweaks/tweak_shell.py 2011-04-27 14:03:20.000000000 +0200 +++ new/gnome-tweak-tool-3.0.4/gtweak/tweaks/tweak_shell.py 2011-05-22 11:19:00.000000000 +0200 @@ -16,19 +16,19 @@ # along with gnome-tweak-tool. If not, see <http://www.gnu.org/licenses/>. import os.path -import shutil import zipfile import tempfile import logging +import json from gi.repository import Gtk from gi.repository import GLib -from gtweak.utils import walk_directories +from gtweak.utils import walk_directories, extract_zip_file from gtweak.gsettings import GSettingsSetting from gtweak.gshellwrapper import GnomeShell from gtweak.tweakmodel import Tweak, TweakGroup -from gtweak.widgets import GConfComboTweak, GSettingsComboEnumTweak, GSettingsSwitchTweak, build_label_beside_widget, build_horizontal_sizegroup, build_combo_box_text +from gtweak.widgets import ZipFileChooserButton, GConfComboTweak, GSettingsComboEnumTweak, GSettingsSwitchTweak, build_label_beside_widget, build_horizontal_sizegroup, build_combo_box_text class ShowWindowButtons(GConfComboTweak): def __init__(self, **options): @@ -41,17 +41,6 @@ (':minimize,maximize,close', 'All')), **options) -class _ThemeZipChooser(Gtk.FileChooserButton): - def __init__(self): - Gtk.FileChooserButton.__init__(self, title="Select theme file") - - f = Gtk.FileFilter() - f.add_mime_type("application/zip") - self.set_filter(f) - - #self.set_width_chars(15) - self.set_local_only(True) - class ShellThemeTweak(Tweak): THEME_EXT_NAME = "[email protected]" @@ -60,7 +49,7 @@ THEME_DIR = os.path.join(GLib.get_home_dir(), ".themes") def __init__(self, **options): - Tweak.__init__(self, "Shell theme", "Install custom or user themes for gnome-shell", **options) + 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" @@ -74,7 +63,7 @@ #check the correct gsettings key is present try: self._settings = GSettingsSetting(ShellThemeTweak.THEME_GSETTINGS_SCHEMA) - name = self._settings.get_value(ShellThemeTweak.THEME_GSETTINGS_NAME) + name = self._settings.get_string(ShellThemeTweak.THEME_GSETTINGS_NAME) #assume the usertheme version is that version of the shell which #it most supports (this is a poor assumption) @@ -98,81 +87,98 @@ else: hb = Gtk.HBox() - #build a combo box with all the valid theme options - valid = walk_directories( (ShellThemeTweak.THEME_DIR,), lambda d: + #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] + + 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"))) - #manually add Adwiata to represent the default - #valid.append( ("Adwiata", "") ) + #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), - ("", "Adwiata"), + ("", "Adwaita"), *[(v,v) for v in valid]) cb.connect('changed', self._on_combo_changed) hb.pack_start(cb, False, False, 5) self.combo = cb - chooser = _ThemeZipChooser() + chooser = ZipFileChooserButton("Select a theme file") chooser.connect("file-set", self._on_file_set) hb.pack_start(chooser, False, False, 0) self.widget = build_label_beside_widget(self.name, hb) self.widget_for_size_group = chooser - def _extract_theme_zip(self, z, theme_name, theme_members_path): - tmp = tempfile.mkdtemp() - dest = os.path.join(ShellThemeTweak.THEME_DIR, theme_name, "gnome-shell") - - logging.info("Extracting theme %s to %s" % (theme_name, tmp)) - - try: - if os.path.exists(dest): - shutil.rmtree(dest) - z.extractall(tmp) - shutil.copytree(os.path.join(tmp, theme_members_path), dest) - return theme_name - except OSError: - self.notify_error("Error installing theme") - return None - def _on_file_set(self, chooser): f = chooser.get_filename() with zipfile.ZipFile(f, 'r') as z: try: fragment = () + theme_name = None for n in z.namelist(): if n.endswith("gnome-shell.css"): fragment = n.split("/")[0:-1] - break + if n.endswith("gnome-shell/theme.json"): + logging.info("New style theme detected (theme.json)") + #new style theme - extract the name from the json file + tmp = tempfile.mkdtemp() + z.extract(n, tmp) + with open(os.path.join(tmp,n)) as f: + try: + theme_name = json.load(f)["shell-theme"]["name"] + except: + logging.warning("Invalid theme format", exc_info=True) if not fragment: raise Exception("Could not find gnome-shell.css") - #old style themes name was taken from the zip name - if fragment[0] == "theme" and len(fragment) == 1: - theme_name = os.path.basename(f) - else: - theme_name = fragment[0] + if not theme_name: + logging.info("Old style theme detected (theme.json)") + #old style themes name was taken from the zip name + if fragment[0] == "theme" and len(fragment) == 1: + theme_name = os.path.basename(f) + else: + theme_name = fragment[0] + theme_members_path = "/".join(fragment) - installed_name = self._extract_theme_zip( - z, - theme_name, - theme_members_path) - if installed_name: - print self.combo.get_model().append( (installed_name, installed_name) ) + ok, updated = extract_zip_file( + z, + theme_members_path, + os.path.join(ShellThemeTweak.THEME_DIR, theme_name, "gnome-shell")) + + if ok: + if updated: + self.notify_info("%s theme updated successfully" % theme_name) + else: + self.notify_info("%s theme installed successfully" % theme_name) + + #I suppose I could rely on updated as indicating whether to add the theme + #name to the combo, but just check to see if it is already there + model = self.combo.get_model() + if theme_name not in [r[0] for r in model]: + model.append( (theme_name, theme_name) ) + else: + self.notify_error("Error installing theme") + except: #does not look like a valid theme self.notify_error("Invalid theme file") + logging.warning("Error parsing theme zip", exc_info=True) + #set button back to default state chooser.unselect_all() def _on_combo_changed(self, combo): val = combo.get_model().get_value(combo.get_active_iter(), 0) - self._settings.set_value(ShellThemeTweak.THEME_GSETTINGS_NAME, val) + self._settings.set_string(ShellThemeTweak.THEME_GSETTINGS_NAME, val) #reloading the theme is not really necessary, the user-theme should pick #pick up the change. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/gtweak/tweaks/tweak_shell_extensions.py new/gnome-tweak-tool-3.0.4/gtweak/tweaks/tweak_shell_extensions.py --- old/gnome-tweak-tool-3.0.3/gtweak/tweaks/tweak_shell_extensions.py 1970-01-01 01:00:00.000000000 +0100 +++ new/gnome-tweak-tool-3.0.4/gtweak/tweaks/tweak_shell_extensions.py 2011-05-22 11:28:18.000000000 +0200 @@ -0,0 +1,161 @@ +import os.path +import shutil +import zipfile +import tempfile +import logging +import json + +from gi.repository import Gtk +from gi.repository import GLib + +from gtweak.utils import extract_zip_file +from gtweak.gsettings import GSettingsSetting +from gtweak.gshellwrapper import GnomeShell +from gtweak.tweakmodel import Tweak, TweakGroup +from gtweak.widgets import ZipFileChooserButton, build_label_beside_widget, build_horizontal_sizegroup + +class _ShellExtensionTweak(Tweak): + + EXTENSION_DISABLED_KEY = "disabled-extensions" + + def __init__(self, shell, ext, settings, **options): + Tweak.__init__(self, ext["name"], ext.get("description",""), **options) + + self._shell = shell + self._settings = settings + + sw = Gtk.Switch() + state = ext.get("state") + sw.set_active( + state == 1 and \ + not self._settings.setting_is_in_list(self.EXTENSION_DISABLED_KEY, ext["uuid"]) + ) + sw.set_sensitive(state in (1,2)) + sw.connect('notify::active', self._on_extension_toggled, ext["uuid"]) + + self.widget = build_label_beside_widget( + "%s Extension" % ext["name"], + sw) + self.widget_for_size_group = sw + + def _on_extension_toggled(self, sw, active, uuid): + if not sw.get_active(): + self._settings.setting_add_to_list(self.EXTENSION_DISABLED_KEY, uuid) + else: + self._settings.setting_remove_from_list(self.EXTENSION_DISABLED_KEY, uuid) + + self.notify_action_required( + "The shell must be restarted for changes to take effect", + "Restart", + lambda: self._shell.restart()) + +class _ShellExtensionInstallerTweak(Tweak): + + EXTENSION_DIR = os.path.join(GLib.get_user_data_dir(), "gnome-shell", "extensions") + + def __init__(self, shell, **options): + Tweak.__init__(self, "Install Shell Extension", "", **options) + + self._shell = shell + + chooser = ZipFileChooserButton("Select a theme file") + chooser.connect("file-set", self._on_file_set) + + self.widget = build_label_beside_widget(self.name, chooser) + self.widget_for_size_group = chooser + + def _on_file_set(self, chooser): + f = chooser.get_filename() + + with zipfile.ZipFile(f, 'r') as z: + try: + fragment = () + file_extension = None + file_metadata = None + for n in z.namelist(): + if n.endswith("metadata.json"): + fragment = n.split("/")[0:-1] + file_metadata = n + if n.endswith("extension.js"): + extension = True + if file_extension: + raise Exception("Only one extension per zip file") + file_extension = n + + if not file_metadata: + raise Exception("Could not find metadata.json") + if not file_extension: + raise Exception("Could not find extension.js") + + #extract the extension uuid + extension_uuid = None + tmp = tempfile.mkdtemp() + z.extract(file_metadata, tmp) + with open(os.path.join(tmp,file_metadata)) as f: + try: + extension_uuid = json.load(f)["uuid"] + except: + logging.warning("Invalid extension format", exc_info=True) + + ok = False + if extension_uuid: + ok, updated = extract_zip_file( + z, + "/".join(fragment), + os.path.join(self.EXTENSION_DIR, extension_uuid)) + + if ok: + if updated: + verb = "%s extension updated successfully" % extension_uuid + else: + verb = "%s extension installed successfully" % extension_uuid + + self.notify_action_required( + verb, + "Restart", + lambda: self._shell.restart()) + + else: + self.notify_error("Error installing extension") + + + except: + #does not look like a valid theme + self.notify_error("Invalid extension file") + logging.warning("Error parsing theme zip", exc_info=True) + + #set button back to default state + chooser.unselect_all() + +class ShellExtensionTweakGroup(TweakGroup): + def __init__(self): + extension_tweaks = [] + sg = build_horizontal_sizegroup() + + #check the shell is running + try: + shell = GnomeShell() + + #add the extension installer + #extension_tweaks.append( + # _ShellExtensionInstallerTweak(shell, size_group=sg)) + + try: + settings = GSettingsSetting("org.gnome.shell") + #add a tweak for each installed extension + for extension in shell.list_extensions().values(): + try: + extension_tweaks.append( + _ShellExtensionTweak(shell, extension, settings, size_group=sg)) + except: + logging.warning("Invalid extension", exc_info=True) + except: + logging.warning("Error listing extensions", exc_info=True) + except: + logging.warning("Error detecting shell") + + TweakGroup.__init__(self, "Shell Extensions", *extension_tweaks) + +TWEAK_GROUPS = ( + ShellExtensionTweakGroup(), +) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/gtweak/tweaks/tweak_test.py new/gnome-tweak-tool-3.0.4/gtweak/tweaks/tweak_test.py --- old/gnome-tweak-tool-3.0.3/gtweak/tweaks/tweak_test.py 2011-04-15 15:45:50.000000000 +0200 +++ new/gnome-tweak-tool-3.0.4/gtweak/tweaks/tweak_test.py 2011-05-04 23:58:26.000000000 +0200 @@ -32,6 +32,7 @@ self.widget = Gtk.Button(name) self.widget.connect("clicked", self._on_click) self._need_action = options.get("need_action") + self._action_error = options.get("action_error") def _on_click(self, sender): if self._need_action: @@ -40,7 +41,10 @@ Gtk.STOCK_OK, lambda : print("GOT CALLBACK")) else: - self.notify_error(self.name) + if self._action_error: + self.notify_error(self.name) + else: + self.notify_info(self.name) TWEAK_GROUPS = ( TweakGroup( @@ -48,7 +52,8 @@ _TestTweak("foo bar", "does foo bar"), _TestTweak("foo baz", "does foo baz"), _TestButtonTweak("Need Action", "foo bar", need_action=True), - _TestButtonTweak("Report Error", "foo baz", need_action=False)), + _TestButtonTweak("Report Error", "foo baz", action_error=True), + _TestButtonTweak("Report Info", "foo bob", action_error=False)), TweakGroup( "Test Many Settings", *[_TestTweak("name: " + str(d), "desc: " + str(d)) for d in range(50)]), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/gtweak/tweakview.py new/gnome-tweak-tool-3.0.4/gtweak/tweakview.py --- old/gnome-tweak-tool-3.0.3/gtweak/tweakview.py 2011-04-01 12:10:44.000000000 +0200 +++ new/gnome-tweak-tool-3.0.4/gtweak/tweakview.py 2011-05-04 23:54:00.000000000 +0200 @@ -88,17 +88,20 @@ self._detail_vbox.remove(info) func() - def _on_tweak_notify(self, tweak, desc, btn, func): + def _on_tweak_notify(self, tweak, desc, error, btn, func): info = Gtk.InfoBar() info.get_content_area().add(Gtk.Label(desc)) self._detail_vbox.pack_end(info, False, False, 0) - if btn and func: + if error: + info.props.message_type = Gtk.MessageType.ERROR + else: info.props.message_type = Gtk.MessageType.INFO + + if btn and func: info.add_button(btn, Gtk.ResponseType.OK) info.connect("response", self._on_tweak_notify_response, func) else: - info.props.message_type = Gtk.MessageType.ERROR GObject.timeout_add_seconds(2, lambda box, widget: box.remove(widget), self._detail_vbox, info) info.show_all() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/gtweak/utils.py new/gnome-tweak-tool-3.0.4/gtweak/utils.py --- old/gnome-tweak-tool-3.0.3/gtweak/utils.py 2011-04-27 10:24:25.000000000 +0200 +++ new/gnome-tweak-tool-3.0.4/gtweak/utils.py 2011-05-10 23:02:15.000000000 +0200 @@ -17,6 +17,8 @@ import os.path import logging +import tempfile +import shutil from gi.repository import GLib @@ -32,14 +34,42 @@ logging.critical("Error parsing directories", exc_info=True) return valid +def extract_zip_file(z, members_path, dest): + """ returns (true_if_extracted_ok, true_if_updated) """ + tmp = tempfile.mkdtemp() + tmpdest = os.path.join(tmp, members_path) + + ok = True + updated = False + try: + if os.path.exists(dest): + shutil.rmtree(dest) + updated = True + z.extractall(tmp) + shutil.copytree(tmpdest, dest) + except OSError: + ok = False + logging.warning("Error extracting zip", exc_info=True) + + if ok: + logging.info("Extracted zip to %s, copied to %s" % (tmpdest, dest)) + + return ok, updated + class AutostartManager: def __init__(self, DATA_DIR, desktop_filename, exec_cmd="", extra_exec_args=""): self._desktop_filename = desktop_filename self._desktop_file = os.path.join(DATA_DIR, "applications", desktop_filename) - self._autostart_file = os.path.join( - GLib.get_user_config_dir(), "autostart", desktop_filename) self._exec_cmd = exec_cmd self._extra_exec_args = " %s\n" % extra_exec_args + + user_autostart_dir = os.path.join(GLib.get_user_config_dir(), "autostart") + if not os.path.isdir(user_autostart_dir): + try: + os.makedirs(user_autostart_dir) + except: + logging.critical("Could not create autostart dir: %s" % user_autostart_dir) + self._autostart_file = os.path.join(user_autostart_dir, desktop_filename) def is_start_at_login_enabled(self): if os.path.exists(self._autostart_file): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/gtweak/widgets.py new/gnome-tweak-tool-3.0.4/gtweak/widgets.py --- old/gnome-tweak-tool-3.0.3/gtweak/widgets.py 2011-04-27 13:19:08.000000000 +0200 +++ new/gnome-tweak-tool-3.0.4/gtweak/widgets.py 2011-05-10 22:47:29.000000000 +0200 @@ -131,17 +131,20 @@ def _on_combo_changed(self, combo): val = self.combo.get_model().get_value(self.combo.get_active_iter(), 0) if self._values_are_different(): - self.settings.set_value(self.key_name, val) + self.settings.set_string(self.key_name, val) class GSettingsComboTweak(_GSettingsTweak): def __init__(self, schema_name, key_name, key_options, **options): _GSettingsTweak.__init__(self, schema_name, key_name, **options) - assert len(key_options) > 0 - assert len(key_options[0]) == 2 + #check key_options is iterable + #and if supplied, check it is a list of 2-tuples + assert len(key_options) >= 0 + if len(key_options): + assert len(key_options[0]) == 2 combo = build_combo_box_text( - self.settings.get_value(self.key_name), + self.settings.get_string(self.key_name), *key_options) combo.connect('changed', self._on_combo_changed) self.widget = build_label_beside_widget(self.name, combo) @@ -151,7 +154,7 @@ _iter = combo.get_active_iter() if _iter: value = combo.get_model().get_value(_iter, 0) - self.settings.set_value(self.key_name, value) + self.settings.set_string(self.key_name, value) class _GConfTweak(Tweak): def __init__(self, key_name, key_type, **options): @@ -165,8 +168,11 @@ def __init__(self, key_name, key_type, key_options, **options): _GConfTweak.__init__(self, key_name, key_type, **options) - assert len(key_options) > 0 - assert len(key_options[0]) == 2 + #check key_options is iterable + #and if supplied, check it is a list of 2-tuples + assert len(key_options) >= 0 + if len(key_options): + assert len(key_options[0]) == 2 combo = build_combo_box_text( self.gconf.get_value(), @@ -194,3 +200,14 @@ def _on_fontbutton_changed(self, btn, param): self.gconf.set_value(btn.props.font_name) +class ZipFileChooserButton(Gtk.FileChooserButton): + def __init__(self, title): + Gtk.FileChooserButton.__init__(self, title=title) + + f = Gtk.FileFilter() + f.add_mime_type("application/zip") + self.set_filter(f) + + #self.set_width_chars(15) + self.set_local_only(True) + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/po/LINGUAS new/gnome-tweak-tool-3.0.4/po/LINGUAS --- old/gnome-tweak-tool-3.0.3/po/LINGUAS 2011-04-27 10:10:41.000000000 +0200 +++ new/gnome-tweak-tool-3.0.4/po/LINGUAS 2011-05-22 11:19:00.000000000 +0200 @@ -1,6 +1,7 @@ cs da de +el es ja lv @@ -11,4 +12,5 @@ sl sv vi +uk zh_CN diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/po/el.po new/gnome-tweak-tool-3.0.4/po/el.po --- old/gnome-tweak-tool-3.0.3/po/el.po 1970-01-01 01:00:00.000000000 +0100 +++ new/gnome-tweak-tool-3.0.4/po/el.po 2011-05-22 11:19:00.000000000 +0200 @@ -0,0 +1,34 @@ +# Greek translation for gnome-tweak-tool. +# Copyright (C) 2011 gnome-tweak-tool's COPYRIGHT HOLDER +# This file is distributed under the same license as the gnome-tweak-tool package. +# BunnyDee <[email protected]>, 2011. +# Mel Argyropoulou <[email protected]>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: gnome-tweak-tool master\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-05-21 23:50+0300\n" +"PO-Revision-Date: 2011-05-18 23:38+0300\n" +"Last-Translator: Mel Argyropoulou <[email protected]>\n" +"Language-Team: Greek <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" + +#: ../data/shell.ui.h:1 +msgid "Tweak Tool" +msgstr "Εργαλείο μικρορυθμίσεων" + +#: ../data/shell.ui.h:2 +msgid "tweaks" +msgstr "μικρορυθμίσεις" + +#: ../data/shell.ui.h:3 +msgid "welcome" +msgstr "καλωσήλθατε" + +#: ../data/gnome-tweak-tool.desktop.in.h:1 +msgid "Tweak Advanced Settings" +msgstr "Προχωρημένες μικρορυθμίσεις" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-tweak-tool-3.0.3/po/uk.po new/gnome-tweak-tool-3.0.4/po/uk.po --- old/gnome-tweak-tool-3.0.3/po/uk.po 1970-01-01 01:00:00.000000000 +0100 +++ new/gnome-tweak-tool-3.0.4/po/uk.po 2011-05-02 23:37:40.000000000 +0200 @@ -0,0 +1,35 @@ +# Ukrainian translation for gnome-tweak-tool. +# Copyright (C) 2011 gnome-tweak-tool's COPYRIGHT HOLDER +# This file is distributed under the same license as the gnome-tweak-tool package. +# Sergiy Gavrylov <[email protected]>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: gnome-tweak-tool master\n" +"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=gnome-" +"tweak-tool&keywords=I18N+L10N&component=general\n" +"POT-Creation-Date: 2011-04-20 12:20+0000\n" +"PO-Revision-Date: 2011-04-21 18:33+0300\n" +"Last-Translator: Sergiy Gavrylov <[email protected]>\n" +"Language-Team: Ukrainian <[email protected]>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%" +"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: ../data/shell.ui.h:1 +msgid "Tweak Tool" +msgstr "Інструмент оптимізації" + +#: ../data/shell.ui.h:2 +msgid "tweaks" +msgstr "оптимізації" + +#: ../data/shell.ui.h:3 +msgid "welcome" +msgstr "ласкаво просимо!" + +#: ../data/gnome-tweak-tool.desktop.in.h:1 +msgid "Tweak Advanced Settings" +msgstr "Оптимізація додаткових налаштувань" ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
