From e34886ae47c5224e8f0b33773d766e4e4d69d3cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20H=C3=B6rist?= Date: Sat, 20 Apr 2019 14:43:07 +0200 Subject: [PATCH] Add custom MaxWidthComboBoxText --- gajim/gtk/settings.py | 13 ++++++++++--- gajim/gtk/util.py | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/gajim/gtk/settings.py b/gajim/gtk/settings.py index ac568aa98..1db207483 100644 --- a/gajim/gtk/settings.py +++ b/gajim/gtk/settings.py @@ -30,6 +30,7 @@ from gajim import gtkgui_helpers from gajim.gtk.dialogs import ChangePasswordDialog from gajim.gtk.util import get_image_button +from gajim.gtk.util import MaxWidthComboBoxText from gajim.gtk.const import SettingKind from gajim.gtk.const import SettingType @@ -512,12 +513,16 @@ class ComboSetting(GenericSetting): def __init__(self, *args, combo_items): GenericSetting.__init__(self, *args) - self.combo = Gtk.ComboBoxText() + self.combo = MaxWidthComboBoxText() self.combo.set_valign(Gtk.Align.CENTER) text_renderer = self.combo.get_cells()[0] text_renderer.set_property('ellipsize', Pango.EllipsizeMode.END) for index, value in enumerate(combo_items): - self.combo.append(value, _(value)) + if isinstance(value, tuple): + value, label = value + self.combo.append(value, _(label)) + else: + self.combo.append(value, value) if value == self.setting_value or index == 0: self.combo.set_active(index) @@ -539,8 +544,10 @@ class ProxyComboSetting(GenericSetting): def __init__(self, *args): GenericSetting.__init__(self, *args) - self.combo = Gtk.ComboBoxText() + self.combo = MaxWidthComboBoxText() self.combo.set_valign(Gtk.Align.CENTER) + text_renderer = self.combo.get_cells()[0] + text_renderer.set_property('ellipsize', Pango.EllipsizeMode.END) self._signal_id = None self.update_values() diff --git a/gajim/gtk/util.py b/gajim/gtk/util.py index e9abaf267..028129603 100644 --- a/gajim/gtk/util.py +++ b/gajim/gtk/util.py @@ -623,3 +623,21 @@ class MultiLineLabel(Gtk.Label): self.set_line_wrap(True) self.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR) self.set_single_line_mode(False) + + +class MaxWidthComboBoxText(Gtk.ComboBoxText): + def __init__(self, *args, **kwargs): + Gtk.ComboBoxText.__init__(self, *args, **kwargs) + self._max_width = 100 + + def set_max_size(self, size): + self._max_width = size + + def do_get_preferred_width(self): + minimum_width, natural_width = Gtk.ComboBoxText.do_get_preferred_width(self) + + if natural_width > self._max_width: + natural_width = self._max_width + if minimum_width > self._max_width: + minimum_width = self._max_width + return minimum_width, natural_width