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 - dimstar@opensuse.org
+
+- 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 .
#
@@ -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='john.stowers@gmail.com'
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], [john.stowers@gmail.com])
+AC_INIT([gnome-tweak-tool], [3.0.4], [john.stowers@gmail.com])
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 "" % 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 = "user-theme@gnome-shell-extensions.gnome.org"
@@ -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 , 2011.
+# Mel Argyropoulou , 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 \n"
+"Language-Team: Greek \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 , 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 \n"
+"Language-Team: Ukrainian \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: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org