Date: Wednesday, March 14, 2012 @ 10:09:19 Author: heftig Revision: 153447
add patch against crash when user-themes extension is installed Added: gnome-tweak-tool/trunk/schema-crash.patch Modified: gnome-tweak-tool/trunk/PKGBUILD --------------------+ PKGBUILD | 10 +- schema-crash.patch | 225 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 232 insertions(+), 3 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2012-03-14 12:10:51 UTC (rev 153446) +++ PKGBUILD 2012-03-14 14:09:19 UTC (rev 153447) @@ -3,19 +3,23 @@ pkgname=gnome-tweak-tool pkgver=3.3.4 -pkgrel=1 +pkgrel=2 pkgdesc="A tool to customize advanced GNOME 3 options." arch=(any) url="https://live.gnome.org/GnomeTweakTool" license=('GPL') depends=('gnome-settings-daemon' 'python2-gobject') makedepends=('intltool') -source=(http://download.gnome.org/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz) -sha256sums=('de18bf67e44af1b6757cf8e3a78c480b84286658be3d5d9ba7c13f5c49763dc6') +source=(http://download.gnome.org/sources/$pkgname/${pkgver%.*}/$pkgname-$pkgver.tar.xz + schema-crash.patch) +sha256sums=('de18bf67e44af1b6757cf8e3a78c480b84286658be3d5d9ba7c13f5c49763dc6' + '32add78601b30a93a4bd753f6a3bb99927f5ae8a68c94c0f75a0f3497e7032df') build() { cd "$pkgname-$pkgver" + patch -p1 -i ../schema-crash.patch + ./configure --prefix=/usr make } Added: schema-crash.patch =================================================================== --- schema-crash.patch (rev 0) +++ schema-crash.patch 2012-03-14 14:09:19 UTC (rev 153447) @@ -0,0 +1,225 @@ +From 89c320bbb9ec6cf1542c75e5c35c79e6604301b6 Mon Sep 17 00:00:00 2001 +From: Robin Stocker <ro...@nibor.org> +Date: Tue, 17 Jan 2012 12:24:04 +0000 +Subject: Change widget for text-scaling-factor to SpinButton + +https://bugzilla.gnome.org/show_bug.cgi?id=650660 + +Conflicts: + + gtweak/tweaks/tweak_font.py +--- +diff --git a/gtweak/tweaks/tweak_font.py b/gtweak/tweaks/tweak_font.py +index 7f4b92a..1ace035 100644 +--- a/gtweak/tweaks/tweak_font.py ++++ b/gtweak/tweaks/tweak_font.py +@@ -18,10 +18,10 @@ + from gi.repository import Gtk + + from gtweak.tweakmodel import Tweak, TWEAK_GROUP_FONTS +-from gtweak.widgets import GSettingsRangeTweak, GSettingsFontButtonTweak, GSettingsComboTweak ++from gtweak.widgets import GSettingsSpinButtonTweak, GSettingsFontButtonTweak, GSettingsComboTweak + + TWEAKS = ( +- GSettingsRangeTweak("org.gnome.desktop.interface", "text-scaling-factor", adjustment_step=0.1, 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("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), +diff --git a/gtweak/widgets.py b/gtweak/widgets.py +index 9aa0cd2..4a7646f 100644 +--- a/gtweak/widgets.py ++++ b/gtweak/widgets.py +@@ -134,6 +134,21 @@ class GSettingsRangeTweak(_GSettingsTweak): + self.widget = build_label_beside_widget(self.settings.schema_get_summary(key_name), w) + self.widget_for_size_group = w + ++class GSettingsSpinButtonTweak(_GSettingsTweak): ++ def __init__(self, schema_name, key_name, **options): ++ _GSettingsTweak.__init__(self, schema_name, key_name, **options) ++ ++ #returned variant is range:(min, max) ++ _min, _max = self.settings.get_range(key_name)[1] ++ ++ adjustment = Gtk.Adjustment(0, _min, _max, options.get('adjustment_step', 1)) ++ w = Gtk.SpinButton() ++ w.set_adjustment(adjustment) ++ w.set_digits(options.get('digits', 0)) ++ self.settings.bind(key_name, adjustment, "value", Gio.SettingsBindFlags.DEFAULT) ++ self.widget = build_label_beside_widget(self.settings.schema_get_summary(key_name), w) ++ self.widget_for_size_group = w ++ + class GSettingsComboEnumTweak(_GSettingsTweak): + def __init__(self, schema_name, key_name, **options): + _GSettingsTweak.__init__(self, schema_name, key_name, **options) +-- +cgit v0.9.0.2 +---- +From 81ee17f1b0352347b1bf5f2bdad25e0fc2c7c3eb Mon Sep 17 00:00:00 2001 +From: John Stowers <john.stow...@gmail.com> +Date: Wed, 18 Jan 2012 08:10:45 +0000 +Subject: Dont crash on missing schemas + +--- +diff --git a/gtweak/gsettings.py b/gtweak/gsettings.py +index 9ab8749..e334637 100644 +--- a/gtweak/gsettings.py ++++ b/gtweak/gsettings.py +@@ -23,6 +23,12 @@ import gtweak + + from gi.repository import Gio, GLib + ++_SCHEMA_CACHE = {} ++_GSETTINGS_SCHEMAS = set(Gio.Settings.list_schemas()) ++ ++class GSettingsMissingError(Exception): ++ pass ++ + class _GSettingsSchema: + def __init__(self, schema_name, schema_dir=None, schema_filename=None, **options): + if not schema_dir: +@@ -64,10 +70,25 @@ class _GSettingsSchema: + def __repr__(self): + return "<gtweak.gsettings._GSettingsSchema: %s>" % self._schema_name + +-_SCHEMA_CACHE = {} ++class GSettingsFakeSetting: ++ def __init__(self): ++ pass ++ ++ def get_range(self, *args, **kwargs): ++ return False, [] ++ ++ def get_string(self, *args, **kwargs): ++ return "" ++ ++ def __getattr__(self, name): ++ def noop(*args, **kwargs): ++ pass ++ return noop + + class GSettingsSetting(Gio.Settings): + def __init__(self, schema_name, **options): ++ if schema_name not in _GSETTINGS_SCHEMAS: ++ raise GSettingsMissingError(schema_name) + Gio.Settings.__init__(self, schema_name) + if schema_name not in _SCHEMA_CACHE: + _SCHEMA_CACHE[schema_name] = _GSettingsSchema(schema_name, **options) +diff --git a/gtweak/tweakmodel.py b/gtweak/tweakmodel.py +index d67ce5a..558a329 100644 +--- a/gtweak/tweakmodel.py ++++ b/gtweak/tweakmodel.py +@@ -35,6 +35,7 @@ class Tweak: + self.name = name + self.description = description + self.group_name = options.get("group_name",_("Miscellaneous")) ++ self.loaded = True + + self._search_cache = None + +@@ -148,6 +149,8 @@ class TweakModel(Gtk.ListStore): + self._tweak_group_names[tweakgroup.name] = tweakgroup + + def add_tweak_auto_to_group(self, tweak): ++ if not tweak.loaded: ++ return + name = tweak.group_name + try: + group = self._tweak_group_names[name] +diff --git a/gtweak/widgets.py b/gtweak/widgets.py +index 4a7646f..c915a17 100644 +--- a/gtweak/widgets.py ++++ b/gtweak/widgets.py +@@ -15,10 +15,12 @@ + # You should have received a copy of the GNU General Public License + # along with gnome-tweak-tool. If not, see <http://www.gnu.org/licenses/>. + ++import logging ++ + from gi.repository import Gtk, Gdk, Gio, Pango + + from gtweak.tweakmodel import Tweak +-from gtweak.gsettings import GSettingsSetting ++from gtweak.gsettings import GSettingsSetting, GSettingsFakeSetting, GSettingsMissingError + from gtweak.gconf import GConfSetting + + def build_label_beside_widget(txt, *widget, **kwargs): +@@ -97,11 +99,17 @@ class _GSettingsTweak(Tweak): + def __init__(self, schema_name, key_name, **options): + self.schema_name = schema_name + self.key_name = key_name +- self.settings = GSettingsSetting(schema_name, **options) +- Tweak.__init__(self, +- options.get("summary",self.settings.schema_get_summary(key_name)), +- options.get("description",self.settings.schema_get_description(key_name)), +- **options) ++ try: ++ self.settings = GSettingsSetting(schema_name, **options) ++ Tweak.__init__(self, ++ options.get("summary",self.settings.schema_get_summary(key_name)), ++ options.get("description",self.settings.schema_get_description(key_name)), ++ **options) ++ except GSettingsMissingError, e: ++ self.settings = GSettingsFakeSetting() ++ Tweak.__init__(self,"","") ++ self.loaded = False ++ logging.info("Missing gsettings %s (key %s)" % (e.message, key_name)) + + class GSettingsSwitchTweak(_GSettingsTweak): + def __init__(self, schema_name, key_name, **options): +@@ -109,7 +117,7 @@ class GSettingsSwitchTweak(_GSettingsTweak): + + w = Gtk.Switch() + self.settings.bind(key_name, w, "active", Gio.SettingsBindFlags.DEFAULT) +- self.widget = build_label_beside_widget(self.settings.schema_get_summary(key_name), w) ++ self.widget = build_label_beside_widget(self.name, w) + # never change the size of a switch + self.widget_for_size_group = None + +@@ -119,7 +127,7 @@ class GSettingsFontButtonTweak(_GSettingsTweak): + + w = Gtk.FontButton() + self.settings.bind(key_name, w, "font-name", Gio.SettingsBindFlags.DEFAULT) +- self.widget = build_label_beside_widget(self.settings.schema_get_summary(key_name), w) ++ self.widget = build_label_beside_widget(self.name, w) + self.widget_for_size_group = w + + class GSettingsRangeTweak(_GSettingsTweak): +@@ -131,7 +139,7 @@ class GSettingsRangeTweak(_GSettingsTweak): + + w = Gtk.HScale.new_with_range(_min, _max, options.get('adjustment_step', 1)) + self.settings.bind(key_name, w.get_adjustment(), "value", Gio.SettingsBindFlags.DEFAULT) +- self.widget = build_label_beside_widget(self.settings.schema_get_summary(key_name), w) ++ self.widget = build_label_beside_widget(self.name, w) + self.widget_for_size_group = w + + class GSettingsSpinButtonTweak(_GSettingsTweak): +@@ -146,7 +154,7 @@ class GSettingsSpinButtonTweak(_GSettingsTweak): + w.set_adjustment(adjustment) + w.set_digits(options.get('digits', 0)) + self.settings.bind(key_name, adjustment, "value", Gio.SettingsBindFlags.DEFAULT) +- self.widget = build_label_beside_widget(self.settings.schema_get_summary(key_name), w) ++ self.widget = build_label_beside_widget(self.name, w) + self.widget_for_size_group = w + + class GSettingsComboEnumTweak(_GSettingsTweak): +@@ -161,7 +169,7 @@ class GSettingsComboEnumTweak(_GSettingsTweak): + w.connect('changed', self._on_combo_changed) + self.combo = w + +- self.widget = build_label_beside_widget(self.settings.schema_get_summary(key_name), w) ++ self.widget = build_label_beside_widget(self.name, w) + self.widget_for_size_group = w + + +@@ -246,7 +254,7 @@ class GConfFontButtonTweak(_GConfTweak): + w = Gtk.FontButton() + w.props.font_name = self.gconf.get_value() + w.connect("notify::font-name", self._on_fontbutton_changed) +- self.widget = build_label_beside_widget(self.gconf.schema_get_summary(), w) ++ self.widget = build_label_beside_widget(self.name, w) + self.widget_for_size_group = w + + def _on_fontbutton_changed(self, btn, param): +-- +cgit v0.9.0.2