This is the implemention of the mockups that mizmo posted to anaconda-devel-list, plus a bonus patch because I found setting multiple properties with cell_data_func to be a huge pain.
Patches are against rhel7-branch. If you want to try it against rawhide, I created an updates.img at https://dshea.fedorapeople.org/1072355.img
David Shea (2): Add a wrapper function for GtkTreeViewColumn.set_cell_data_func Highlight languages in langsupport that contain selected locales (#1072355)
pyanaconda/ui/gui/spokes/datetime_spoke.py | 12 +++-- pyanaconda/ui/gui/spokes/keyboard.py | 15 +++--- pyanaconda/ui/gui/spokes/langsupport.glade | 8 ++++ pyanaconda/ui/gui/spokes/langsupport.py | 55 +++++++++++++++++----- .../ui/gui/spokes/lib/lang_locale_handler.py | 10 ++-- pyanaconda/ui/gui/utils.py | 34 +++++++++++++ 6 files changed, 105 insertions(+), 29 deletions(-)
This method makes it easier to override more than one property on a particular column, or to add properties to a column that has already been modified by a different method.
Related: rhbz#1072355 --- pyanaconda/ui/gui/spokes/datetime_spoke.py | 12 ++++---- pyanaconda/ui/gui/spokes/keyboard.py | 15 +++++----- pyanaconda/ui/gui/spokes/langsupport.py | 16 +++++----- .../ui/gui/spokes/lib/lang_locale_handler.py | 10 +++---- pyanaconda/ui/gui/utils.py | 34 ++++++++++++++++++++++ 5 files changed, 61 insertions(+), 26 deletions(-)
diff --git a/pyanaconda/ui/gui/spokes/datetime_spoke.py b/pyanaconda/ui/gui/spokes/datetime_spoke.py index 103338c..a74175f 100644 --- a/pyanaconda/ui/gui/spokes/datetime_spoke.py +++ b/pyanaconda/ui/gui/spokes/datetime_spoke.py @@ -30,7 +30,8 @@ from pyanaconda.ui.common import FirstbootSpokeMixIn from pyanaconda.ui.gui import GUIObject from pyanaconda.ui.gui.spokes import NormalSpoke from pyanaconda.ui.gui.categories.localization import LocalizationCategory -from pyanaconda.ui.gui.utils import enlightbox, gtk_action_nowait, gtk_action_wait, gtk_call_once +from pyanaconda.ui.gui.utils import enlightbox, gtk_action_nowait, gtk_action_wait, gtk_call_once,\ + override_cell_property
from pyanaconda.i18n import _, N_ from pyanaconda import timezone @@ -153,18 +154,19 @@ class NTPconfigDialog(GUIObject): value = model[itr][1]
if value == SERVER_QUERY: - renderer.set_property("stock-id", "gtk-dialog-question") + return "gtk-dialog-question" elif value == SERVER_OK: - renderer.set_property("stock-id", "gtk-yes") + return "gtk-yes" else: - renderer.set_property("stock-id", "gtk-no") + return "gtk-no"
def initialize(self): self.window.set_size_request(500, 400)
workingColumn = self.builder.get_object("workingColumn") workingRenderer = self.builder.get_object("workingRenderer") - workingColumn.set_cell_data_func(workingRenderer, self._render_working) + override_cell_property(workingColumn, workingRenderer, "icon-name", + self._render_working)
self._serverEntry = self.builder.get_object("serverEntry") self._serversStore = self.builder.get_object("serversStore") diff --git a/pyanaconda/ui/gui/spokes/keyboard.py b/pyanaconda/ui/gui/spokes/keyboard.py index 690a7b0..2c81f01 100644 --- a/pyanaconda/ui/gui/spokes/keyboard.py +++ b/pyanaconda/ui/gui/spokes/keyboard.py @@ -26,7 +26,7 @@ from gi.repository import GLib, Gkbd, Gtk, Gdk from pyanaconda.ui.gui import GUIObject from pyanaconda.ui.gui.spokes import NormalSpoke from pyanaconda.ui.gui.categories.localization import LocalizationCategory -from pyanaconda.ui.gui.utils import enlightbox, gtk_call_once +from pyanaconda.ui.gui.utils import enlightbox, gtk_call_once, override_cell_property from pyanaconda import keyboard from pyanaconda import flags from pyanaconda.i18n import _, N_ @@ -40,14 +40,13 @@ __all__ = ["KeyboardSpoke"] LAYOUT_SWITCHING_INFO = N_("%s to switch layouts.")
def _show_layout(column, renderer, model, itr, wrapper): - value = wrapper.get_layout_variant_description(model[itr][0]) - renderer.set_property("text", value) + return wrapper.get_layout_variant_description(model[itr][0])
def _show_description(column, renderer, model, itr, wrapper): value = wrapper.get_switch_opt_description(model[itr][0]) if model[itr][1]: value = "<b>%s</b>" % value - renderer.set_property("markup", value) + return value
class AddLayoutDialog(GUIObject): builderObjects = ["addLayoutDialog", "newLayoutStore", @@ -106,8 +105,8 @@ class AddLayoutDialog(GUIObject): self._entry = self.builder.get_object("addLayoutEntry") layoutColumn = self.builder.get_object("newLayoutColumn") layoutRenderer = self.builder.get_object("newLayoutRenderer") - layoutColumn.set_cell_data_func(layoutRenderer, _show_layout, - self._xkl_wrapper) + override_cell_property(layoutColumn, layoutRenderer, "text", _show_layout, + self._xkl_wrapper) self._treeModelFilter = self.builder.get_object("newLayoutStoreFilter") self._treeModelFilter.set_visible_func(self.matches_entry, None) self._treeModelSort = self.builder.get_object("newLayoutStoreSort") @@ -184,7 +183,7 @@ class ConfigureSwitchingDialog(GUIObject): # we want to display "Alt + Shift" rather than "grp:alt_shift_toggle" descColumn = self.builder.get_object("descColumn") descRenderer = self.builder.get_object("descRenderer") - descColumn.set_cell_data_func(descRenderer, _show_description, + override_cell_property(descColumn, descRenderer, "markup", _show_description, self._xkl_wrapper)
self._switchingOptsSort = self.builder.get_object("switchingOptsSort") @@ -300,7 +299,7 @@ class KeyboardSpoke(NormalSpoke): # 'language (description)'. layoutColumn = self.builder.get_object("layoutColumn") layoutRenderer = self.builder.get_object("layoutRenderer") - layoutColumn.set_cell_data_func(layoutRenderer, _show_layout, + override_cell_property(layoutColumn, layoutRenderer, "text", _show_layout, self._xkl_wrapper)
self._store = self.builder.get_object("addedLayoutStore") diff --git a/pyanaconda/ui/gui/spokes/langsupport.py b/pyanaconda/ui/gui/spokes/langsupport.py index 85b84f7..4625168 100644 --- a/pyanaconda/ui/gui/spokes/langsupport.py +++ b/pyanaconda/ui/gui/spokes/langsupport.py @@ -28,7 +28,7 @@ from pyanaconda.iutil import strip_accents from pyanaconda.ui.gui.spokes import NormalSpoke from pyanaconda.ui.gui.spokes.lib.lang_locale_handler import LangLocaleHandler from pyanaconda.ui.gui.categories.localization import LocalizationCategory -from pyanaconda.ui.gui.utils import set_treeview_selection +from pyanaconda.ui.gui.utils import set_treeview_selection, override_cell_property from pyanaconda import localization
import re @@ -69,14 +69,14 @@ class LangsupportSpoke(LangLocaleHandler, NormalSpoke): # mark selected locales and languages with selected locales bold localeNativeColumn = self.builder.get_object("localeNativeName") localeNativeNameRenderer = self.builder.get_object("localeNativeNameRenderer") - localeNativeColumn.set_cell_data_func(localeNativeNameRenderer, - self._mark_selected_locale_bold) + override_cell_property(localeNativeColumn, localeNativeNameRenderer, + "weight", self._mark_selected_locale_bold)
for col, rend in [("nativeName", "nativeNameRenderer"), ("englishName", "englishNameRenderer")]: column = self.builder.get_object(col) renderer = self.builder.get_object(rend) - column.set_cell_data_func(renderer, self._mark_selected_language_bold) + override_cell_property(column, renderer, "weight", self._mark_selected_language_bold)
def apply(self): # store only additional langsupport locales @@ -123,16 +123,16 @@ class LangsupportSpoke(LangLocaleHandler, NormalSpoke):
def _mark_selected_locale_bold(self, column, renderer, model, itr, user_data=None): if model[itr][2]: - renderer.set_property("weight", Pango.Weight.BOLD.real) + return Pango.Weight.BOLD.real else: - renderer.set_property("weight", Pango.Weight.NORMAL.real) + return Pango.Weight.NORMAL.real
def _mark_selected_language_bold(self, column, renderer, model, itr, user_data=None): lang_locales = set(localization.get_language_locales(model[itr][2])) if not lang_locales.isdisjoint(self._selected_locales): - renderer.set_property("weight", Pango.Weight.BOLD.real) + return Pango.Weight.BOLD.real else: - renderer.set_property("weight", Pango.Weight.NORMAL.real) + return Pango.Weight.NORMAL.real
# Signal handlers. def on_locale_toggled(self, renderer, path): diff --git a/pyanaconda/ui/gui/spokes/lib/lang_locale_handler.py b/pyanaconda/ui/gui/spokes/lib/lang_locale_handler.py index dea6bef..36b5828 100644 --- a/pyanaconda/ui/gui/spokes/lib/lang_locale_handler.py +++ b/pyanaconda/ui/gui/spokes/lib/lang_locale_handler.py @@ -27,7 +27,7 @@ screens handling languages or locales configuration. from gi.repository import Gtk, Pango from pyanaconda import localization from pyanaconda.iutil import strip_accents -from pyanaconda.ui.gui.utils import set_treeview_selection +from pyanaconda.ui.gui.utils import set_treeview_selection, override_cell_property
class LangLocaleHandler(object): """ @@ -53,8 +53,8 @@ class LangLocaleHandler(object): def initialize(self): # Render a right arrow for the chosen language self._right_arrow = Gtk.Image.new_from_file("/usr/share/anaconda/pixmaps/right-arrow-icon.png") - self._langSelectedColumn.set_cell_data_func(self._langSelectedRenderer, - self._render_lang_selected) + override_cell_property(self._langSelectedColumn, self._langSelectedRenderer, + "pixbuf", self._render_lang_selected)
# fill the list with available translations for lang in localization.get_available_translations(): @@ -91,9 +91,9 @@ class LangLocaleHandler(object): (lang_store, sel_itr) = self._langSelection.get_selected()
if sel_itr and lang_store[sel_itr][2] == model[itr][2]: - renderer.set_property("pixbuf", self._right_arrow.get_pixbuf()) + return self._right_arrow.get_pixbuf() else: - renderer.set_property("pixbuf", None) + return None
def _add_language(self, store, native, english, lang): """Override this method with a valid implementation""" diff --git a/pyanaconda/ui/gui/utils.py b/pyanaconda/ui/gui/utils.py index 4456ab1..d62f0ec 100644 --- a/pyanaconda/ui/gui/utils.py +++ b/pyanaconda/ui/gui/utils.py @@ -193,3 +193,37 @@ def set_treeview_selection(treeview, item, col=0): treeview.scroll_to_cell(path, use_align=True, row_align=0.5)
return itr + +# This will be populated by override_cell_property. Keys are tuples of (column, renderer). +# Values are a dict of the form {property-name: (property-func, property-data)}. +_override_cell_property_map = {} +def override_cell_property(tree_column, cell_renderer, propname, property_func, data=None): + """ + Override a single property of a cell renderer. + + property_func takes the same arguments as GtkTreeCellDataFunc: + (TreeViewColumn, CellRenderer, TreeModel, TreeIter, data). Instead of being + expected to manipulate the CellRenderer itself, this method should instead + return the value to which the property should be set. + + This method calls set_cell_data_func on the column and renderer. + + :param GtkTreeViewColumn column: the column to override + :param GtkCellRenderer cell_renderer: the cell renderer to override + :param str propname: the property to set on the renderer + :param function property_func: a function that returns the value of the property to set + :param data: Optional data to pass to property_func + """ + + def _cell_data_func(tree_column, cell_renderer, tree_model, tree_iter, _data=None): + overrides = _override_cell_property_map[(tree_column, cell_renderer)] + for property_name in overrides: + property_func, property_func_data = overrides[property_name] + cell_renderer.set_property(property_name, + property_func(tree_column, cell_renderer, tree_model, tree_iter, property_func_data)) + + if (tree_column, cell_renderer) not in _override_cell_property_map: + _override_cell_property_map[(tree_column, cell_renderer)] = {} + tree_column.set_cell_data_func(cell_renderer, _cell_data_func) + + _override_cell_property_map[(tree_column, cell_renderer)][propname] = (property_func, data)
On Wed, 2014-07-30 at 13:46 -0400, David Shea wrote:
This method makes it easier to override more than one property on a particular column, or to add properties to a column that has already been modified by a different method.
Related: rhbz#1072355
pyanaconda/ui/gui/spokes/datetime_spoke.py | 12 ++++---- pyanaconda/ui/gui/spokes/keyboard.py | 15 +++++----- pyanaconda/ui/gui/spokes/langsupport.py | 16 +++++----- .../ui/gui/spokes/lib/lang_locale_handler.py | 10 +++---- pyanaconda/ui/gui/utils.py | 34 ++++++++++++++++++++++ 5 files changed, 61 insertions(+), 26 deletions(-)
diff --git a/pyanaconda/ui/gui/spokes/datetime_spoke.py b/pyanaconda/ui/gui/spokes/datetime_spoke.py index 103338c..a74175f 100644 --- a/pyanaconda/ui/gui/spokes/datetime_spoke.py +++ b/pyanaconda/ui/gui/spokes/datetime_spoke.py @@ -30,7 +30,8 @@ from pyanaconda.ui.common import FirstbootSpokeMixIn from pyanaconda.ui.gui import GUIObject from pyanaconda.ui.gui.spokes import NormalSpoke from pyanaconda.ui.gui.categories.localization import LocalizationCategory -from pyanaconda.ui.gui.utils import enlightbox, gtk_action_nowait, gtk_action_wait, gtk_call_once +from pyanaconda.ui.gui.utils import enlightbox, gtk_action_nowait, gtk_action_wait, gtk_call_once,\
override_cell_property
You might have different preferences, but I like two 'from something import ...' lines more than a single line ending with a backslash.
+# This will be populated by override_cell_property. Keys are tuples of (column, renderer). +# Values are a dict of the form {property-name: (property-func, property-data)}. +_override_cell_property_map = {}
Add a blank line here, please. Otherwise the variable gets lost in between the comment and the function.
+def override_cell_property(tree_column, cell_renderer, propname, property_func, data=None):
- """
- Override a single property of a cell renderer.
- property_func takes the same arguments as GtkTreeCellDataFunc:
- (TreeViewColumn, CellRenderer, TreeModel, TreeIter, data). Instead of being
- expected to manipulate the CellRenderer itself, this method should instead
- return the value to which the property should be set.
- This method calls set_cell_data_func on the column and renderer.
- :param GtkTreeViewColumn column: the column to override
- :param GtkCellRenderer cell_renderer: the cell renderer to override
- :param str propname: the property to set on the renderer
- :param function property_func: a function that returns the value of the property to set
- :param data: Optional data to pass to property_func
- """
- def _cell_data_func(tree_column, cell_renderer, tree_model, tree_iter, _data=None):
overrides = _override_cell_property_map[(tree_column, cell_renderer)]for property_name in overrides:property_func, property_func_data = overrides[property_name]cell_renderer.set_property(property_name,property_func(tree_column, cell_renderer, tree_model, tree_iter, property_func_data))
I'd really like to see the return value of property_func assigned to a variable and then used in the set_property() call. It would be better readable, better "stepable" in pdb and clearer in case an exception is raised from it.
- if (tree_column, cell_renderer) not in _override_cell_property_map:
_override_cell_property_map[(tree_column, cell_renderer)] = {}tree_column.set_cell_data_func(cell_renderer, _cell_data_func)- _override_cell_property_map[(tree_column, cell_renderer)][propname] = (property_func, data)
Other than that I like this change. I must say the mechanism is quite complicated, but I doubt there could be anything easier due to the way how the Gtk side works here.
Resolves: rhbz#1072355 --- pyanaconda/ui/gui/spokes/langsupport.glade | 8 ++++++ pyanaconda/ui/gui/spokes/langsupport.py | 39 +++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 3 deletions(-)
diff --git a/pyanaconda/ui/gui/spokes/langsupport.glade b/pyanaconda/ui/gui/spokes/langsupport.glade index 7c994e6..389f514 100644 --- a/pyanaconda/ui/gui/spokes/langsupport.glade +++ b/pyanaconda/ui/gui/spokes/langsupport.glade @@ -110,6 +110,14 @@ </object> </child> <child> + <object class="GtkTreeViewColumn" id="highlighted"> + <property name="title">highlighted</property> + <child> + <object class="GtkCellRendererPixbuf" id="highlightedRenderer"/> + </child> + </object> + </child> + <child> <object class="GtkTreeViewColumn" id="nativeName"> <property name="title" translatable="yes">nativeName</property> <property name="expand">True</property> diff --git a/pyanaconda/ui/gui/spokes/langsupport.py b/pyanaconda/ui/gui/spokes/langsupport.py index 4625168..4c6b766 100644 --- a/pyanaconda/ui/gui/spokes/langsupport.py +++ b/pyanaconda/ui/gui/spokes/langsupport.py @@ -21,7 +21,7 @@ #
# pylint: disable-msg=E0611 -from gi.repository import Gtk, Pango +from gi.repository import Gtk, Pango, Gdk from pyanaconda.flags import flags from pyanaconda.i18n import _, N_ from pyanaconda.iutil import strip_accents @@ -38,6 +38,11 @@ log = logging.getLogger("anaconda")
__all__ = ["LangsupportSpoke"]
+# #fdfbc0 +# Sure would be nice if gdk_rgba_parse returned a new object instead of +# modifying an existing one. +_HIGHLIGHT_COLOR = Gdk.RGBA(red=0.992157, green=0.984314, blue=0.752941, alpha=1.0) + class LangsupportSpoke(LangLocaleHandler, NormalSpoke): builderObjects = ["languageStore", "languageStoreFilter", "localeStore", "langsupportWindow"] mainWidgetName = "langsupportWindow" @@ -78,6 +83,19 @@ class LangsupportSpoke(LangLocaleHandler, NormalSpoke): renderer = self.builder.get_object(rend) override_cell_property(column, renderer, "weight", self._mark_selected_language_bold)
+ # If a language has selected locales, highlight every column so that + # the row appears highlighted + for col in self._langView.get_columns(): + for rend in col.get_cells(): + override_cell_property(col, rend, "cell-background-rgba", + self._highlight_selected_language) + + # and also set an icon so that we don't depend on a color to convey information + highlightedColumn = self.builder.get_object("highlighted") + highlightedRenderer = self.builder.get_object("highlightedRenderer") + override_cell_property(highlightedColumn, highlightedRenderer, + "icon-name", self._render_lang_highlighted) + def apply(self): # store only additional langsupport locales self.data.lang.addsupport = sorted(self._selected_locales - set([self.data.lang.lang])) @@ -127,13 +145,28 @@ class LangsupportSpoke(LangLocaleHandler, NormalSpoke): else: return Pango.Weight.NORMAL.real
+ def _is_lang_selected(self, lang): + lang_locales = set(localization.get_language_locales(lang)) + return not lang_locales.isdisjoint(self._selected_locales) + def _mark_selected_language_bold(self, column, renderer, model, itr, user_data=None): - lang_locales = set(localization.get_language_locales(model[itr][2])) - if not lang_locales.isdisjoint(self._selected_locales): + if self._is_lang_selected(model[itr][2]): return Pango.Weight.BOLD.real else: return Pango.Weight.NORMAL.real
+ def _highlight_selected_language(self, column, renderer, model, itr, user_data=None): + if self._is_lang_selected(model[itr][2]): + return _HIGHLIGHT_COLOR + else: + return None + + def _render_lang_highlighted(self, column, renderer, model, itr, user_data=None): + if self._is_lang_selected(model[itr][2]): + return "emblem-ok-symbolic" + else: + return None + # Signal handlers. def on_locale_toggled(self, renderer, path): itr = self._localeStore.get_iter(path)
On Wed, 2014-07-30 at 13:46 -0400, David Shea wrote:
Resolves: rhbz#1072355
pyanaconda/ui/gui/spokes/langsupport.glade | 8 ++++++ pyanaconda/ui/gui/spokes/langsupport.py | 39 +++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 3 deletions(-)
diff --git a/pyanaconda/ui/gui/spokes/langsupport.glade b/pyanaconda/ui/gui/spokes/langsupport.glade index 7c994e6..389f514 100644 --- a/pyanaconda/ui/gui/spokes/langsupport.glade +++ b/pyanaconda/ui/gui/spokes/langsupport.glade @@ -110,6 +110,14 @@ </object> </child> <child>
<object class="GtkTreeViewColumn" id="highlighted"><property name="title">highlighted</property><child><object class="GtkCellRendererPixbuf" id="highlightedRenderer"/></child></object></child><child> <object class="GtkTreeViewColumn" id="nativeName"> <property name="title" translatable="yes">nativeName</property> <property name="expand">True</property>diff --git a/pyanaconda/ui/gui/spokes/langsupport.py b/pyanaconda/ui/gui/spokes/langsupport.py index 4625168..4c6b766 100644 --- a/pyanaconda/ui/gui/spokes/langsupport.py +++ b/pyanaconda/ui/gui/spokes/langsupport.py @@ -21,7 +21,7 @@ #
# pylint: disable-msg=E0611 -from gi.repository import Gtk, Pango +from gi.repository import Gtk, Pango, Gdk from pyanaconda.flags import flags from pyanaconda.i18n import _, N_ from pyanaconda.iutil import strip_accents @@ -38,6 +38,11 @@ log = logging.getLogger("anaconda")
__all__ = ["LangsupportSpoke"]
+# #fdfbc0 +# Sure would be nice if gdk_rgba_parse returned a new object instead of +# modifying an existing one. +_HIGHLIGHT_COLOR = Gdk.RGBA(red=0.992157, green=0.984314, blue=0.752941, alpha=1.0)
class LangsupportSpoke(LangLocaleHandler, NormalSpoke): builderObjects = ["languageStore", "languageStoreFilter", "localeStore", "langsupportWindow"] mainWidgetName = "langsupportWindow" @@ -78,6 +83,19 @@ class LangsupportSpoke(LangLocaleHandler, NormalSpoke): renderer = self.builder.get_object(rend) override_cell_property(column, renderer, "weight", self._mark_selected_language_bold)
# If a language has selected locales, highlight every column so that# the row appears highlightedfor col in self._langView.get_columns():for rend in col.get_cells():override_cell_property(col, rend, "cell-background-rgba",self._highlight_selected_language)# and also set an icon so that we don't depend on a color to convey informationhighlightedColumn = self.builder.get_object("highlighted")highlightedRenderer = self.builder.get_object("highlightedRenderer")override_cell_property(highlightedColumn, highlightedRenderer,"icon-name", self._render_lang_highlighted)- def apply(self): # store only additional langsupport locales self.data.lang.addsupport = sorted(self._selected_locales - set([self.data.lang.lang]))
@@ -127,13 +145,28 @@ class LangsupportSpoke(LangLocaleHandler, NormalSpoke): else: return Pango.Weight.NORMAL.real
- def _is_lang_selected(self, lang):
lang_locales = set(localization.get_language_locales(lang))return not lang_locales.isdisjoint(self._selected_locales)
Very nice/neat/clever two lines of code!
On 07/31/2014 05:02 AM, Vratislav Podzimek wrote:
- def _is_lang_selected(self, lang):
lang_locales = set(localization.get_language_locales(lang))return not lang_locales.isdisjoint(self._selected_locales)Very nice/neat/clever two lines of code!
It's your code. I just moved it to a separate function ;-)
On Thu, 2014-07-31 at 08:23 -0400, David Shea wrote:
On 07/31/2014 05:02 AM, Vratislav Podzimek wrote:
- def _is_lang_selected(self, lang):
lang_locales = set(localization.get_language_locales(lang))return not lang_locales.isdisjoint(self._selected_locales)Very nice/neat/clever two lines of code!
It's your code. I just moved it to a separate function ;-)
Ahhh, that explains a lot :D
On Wed, 2014-07-30 at 13:46 -0400, David Shea wrote:
This is the implemention of the mockups that mizmo posted to anaconda-devel-list, plus a bonus patch because I found setting multiple properties with cell_data_func to be a huge pain.
Patches are against rhel7-branch. If you want to try it against rawhide, I created an updates.img at https://dshea.fedorapeople.org/1072355.img
David Shea (2): Add a wrapper function for GtkTreeViewColumn.set_cell_data_func Highlight languages in langsupport that contain selected locales (#1072355)
pyanaconda/ui/gui/spokes/datetime_spoke.py | 12 +++-- pyanaconda/ui/gui/spokes/keyboard.py | 15 +++--- pyanaconda/ui/gui/spokes/langsupport.glade | 8 ++++ pyanaconda/ui/gui/spokes/langsupport.py | 55 +++++++++++++++++----- .../ui/gui/spokes/lib/lang_locale_handler.py | 10 ++-- pyanaconda/ui/gui/utils.py | 34 +++++++++++++ 6 files changed, 105 insertions(+), 29 deletions(-)
Clever ideas, nice code. I must say I like these two patches. Just please have a look at those two neatpicks on PATCH 1/2.
anaconda-patches@lists.fedorahosted.org