[gnome-tweak-tool] xkb: Switch to expanders and radio buttons instead of combo boxes
- From: Rui Matos <rtcm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-tweak-tool] xkb: Switch to expanders and radio buttons instead of combo boxes
- Date: Wed, 15 Apr 2015 17:17:37 +0000 (UTC)
commit 0fa44ef129f5e8a64c674bd626dbabc899b4793b
Author: Rui Matos <tiagomatos gmail com>
Date: Fri Apr 3 17:10:52 2015 +0200
xkb: Switch to expanders and radio buttons instead of combo boxes
Since some of the xkb options have unfortunately long description
strings, combo boxes don't really work to present them so instead
let's go with radio buttons under an expander which allows us to
easily present long strings by wrapping them.
https://bugzilla.gnome.org/show_bug.cgi?id=711137
gtweak/tweaks/tweak_group_xkb.py | 65 ++++++++++++++++++++------------------
1 files changed, 34 insertions(+), 31 deletions(-)
---
diff --git a/gtweak/tweaks/tweak_group_xkb.py b/gtweak/tweaks/tweak_group_xkb.py
index 0e1c902..7b16829 100644
--- a/gtweak/tweaks/tweak_group_xkb.py
+++ b/gtweak/tweaks/tweak_group_xkb.py
@@ -28,15 +28,20 @@ from gtweak.gsettings import GSettingsSetting, GSettingsMissingError, GSettingsF
_shell = GnomeShellFactory().get_shell()
_shell_loaded = _shell is not None
-class _XkbOption(Gtk.Box, Tweak):
+class _XkbOption(Gtk.Expander, Tweak):
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)
+ Gtk.Expander.__init__(self)
Tweak.__init__(self, desc, desc, **options)
+ self.set_label(self.name)
+ vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=3)
+ vbox.set_margin_start(15)
+ self.add(vbox)
+
self._group_id = group_id
self._parent_settings = parent_settings
self._xkb_info = xkb_info
@@ -49,53 +54,53 @@ class _XkbOption(Gtk.Box, Tweak):
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)
+ self._radios = dict()
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)
+ self._radios[val] = r = Gtk.RadioButton.new_from_widget(self._radios.get(None))
+ vbox.add(r)
+ l = Gtk.Label(name)
+ l.set_line_wrap(True)
+ r.add(l)
+ r._changed_id = r.connect('toggled', self._on_radio_changed)
+ r._val = val
- build_label_beside_widget(self.name, self._combo, hbox=self)
self.widget_for_size_group = None
-
self.reload()
def reload(self):
for v in self._parent_settings.get_strv(TypingTweakGroup.XKB_GSETTINGS_NAME):
if (v in self._possible_values):
self._value = v
- self._update_combo()
+ self._update_radios()
return
self._value = None
- self._update_combo()
+ self._update_radios()
+
+ def _update_radios(self):
+ if self._value:
+ self.set_label('<b>'+self.name+'</b>')
+ self.set_use_markup(True)
+ else:
+ self.set_label(self.name)
- def _update_combo(self):
- model = self._combo.get_model()
- for row in model:
- if self._value == row[0]:
- self._combo.disconnect(self._combo_changed_handler_id)
- self._combo.set_active_iter(row.iter)
- self._combo_changed_handler_id = self._combo.connect("changed", self._on_combo_changed)
- break
+ r = self._radios.get(self._value)
+ if r:
+ r.disconnect(r._changed_id)
+ r.set_active(True)
+ r._changed_id = r.connect('toggled', self._on_radio_changed)
- def _on_combo_changed(self, combo):
- new_value = combo.get_model().get_value(combo.get_active_iter(), 0)
+ def _on_radio_changed(self, r):
+ if not r.get_active():
+ return
- if not new_value:
+ if not r._val:
if self._value:
self._parent_settings.setting_remove_from_list(TypingTweakGroup.XKB_GSETTINGS_NAME,
self._value)
else:
if self._value:
self._parent_settings.setting_remove_from_list(TypingTweakGroup.XKB_GSETTINGS_NAME,
self._value)
- self._parent_settings.setting_add_to_list(TypingTweakGroup.XKB_GSETTINGS_NAME, new_value)
+ self._parent_settings.setting_add_to_list(TypingTweakGroup.XKB_GSETTINGS_NAME, r._val)
class TypingTweakGroup(Gtk.Box, TweakGroup):
@@ -107,7 +112,6 @@ class TypingTweakGroup(Gtk.Box, TweakGroup):
def __init__(self):
Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL, spacing=3)
self._option_objects = []
- self._sg = Gtk.SizeGroup(mode=Gtk.SizeGroupMode.HORIZONTAL)
ok = False
try:
self._kbdsettings = GSettingsSetting(self.XKB_GSETTINGS_SCHEMA)
@@ -125,7 +129,6 @@ class TypingTweakGroup(Gtk.Box, TweakGroup):
if ok:
for opt in set(self._xkb_info.get_all_option_groups()) - self.XKB_OPTIONS_BLACKLIST:
obj = _XkbOption(opt, self._kbdsettings, self._xkb_info)
- self._sg.add_widget(obj._combo)
self._option_objects.append(obj)
self.pack_start(obj, False, False, 0)
TweakGroup.__init__(self, _("Typing"), *self._option_objects)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]