[length_notifier] Port to Gtk4
This commit is contained in:
@@ -87,15 +87,16 @@ class LengthNotifierPlugin(GajimPlugin):
|
|||||||
|
|
||||||
def deactivate(self) -> None:
|
def deactivate(self) -> None:
|
||||||
assert self._counter is not None
|
assert self._counter is not None
|
||||||
|
assert self._actions_box_widget is not None
|
||||||
self._counter.reset()
|
self._counter.reset()
|
||||||
self._counter.destroy()
|
self._actions_box_widget.remove(self._counter)
|
||||||
del self._counter
|
del self._counter
|
||||||
|
|
||||||
def _create_counter(self) -> None:
|
def _create_counter(self) -> None:
|
||||||
assert self._message_action_box is not None
|
assert self._message_action_box is not None
|
||||||
assert self._actions_box_widget is not None
|
assert self._actions_box_widget is not None
|
||||||
self._counter = Counter(self._message_action_box.msg_textview, self.config)
|
self._counter = Counter(self._message_action_box.msg_textview, self.config)
|
||||||
self._actions_box_widget.pack_end(self._counter, False, False, 0)
|
self._actions_box_widget.append(self._counter)
|
||||||
|
|
||||||
def _message_actions_box_created(
|
def _message_actions_box_created(
|
||||||
self, message_actions_box: MessageActionsBox, gtk_box: Gtk.Box
|
self, message_actions_box: MessageActionsBox, gtk_box: Gtk.Box
|
||||||
@@ -123,7 +124,7 @@ class Counter(Gtk.Label):
|
|||||||
|
|
||||||
Gtk.Label.__init__(self)
|
Gtk.Label.__init__(self)
|
||||||
self.set_tooltip_text(_("Number of typed characters"))
|
self.set_tooltip_text(_("Number of typed characters"))
|
||||||
self.get_style_context().add_class("dim-label")
|
self.add_css_class("dim-label")
|
||||||
|
|
||||||
self._config = config
|
self._config = config
|
||||||
|
|
||||||
@@ -133,20 +134,26 @@ class Counter(Gtk.Label):
|
|||||||
self._color = None
|
self._color = None
|
||||||
self._inverted_color = None
|
self._inverted_color = None
|
||||||
|
|
||||||
|
self._provider = Gtk.CssProvider()
|
||||||
self._textview = message_input
|
self._textview = message_input
|
||||||
|
|
||||||
|
context = self._textview.get_style_context()
|
||||||
|
context.add_provider(self._provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
|
||||||
|
|
||||||
self._signal_id = self._textview.connect("buffer-changed", self._update)
|
self._signal_id = self._textview.connect("buffer-changed", self._update)
|
||||||
self._provider = None
|
|
||||||
|
|
||||||
self._parse_config()
|
self._parse_config()
|
||||||
self._set_css()
|
self._set_css()
|
||||||
|
|
||||||
self.connect("destroy", self._on_destroy)
|
def do_unroot(self) -> None:
|
||||||
|
|
||||||
def _on_destroy(self, _widget: Counter) -> None:
|
|
||||||
self._context.remove_class("length-warning")
|
|
||||||
assert self._signal_id is not None
|
|
||||||
if GObject.signal_handler_is_connected(self._textview, self._signal_id):
|
if GObject.signal_handler_is_connected(self._textview, self._signal_id):
|
||||||
self._textview.disconnect(self._signal_id)
|
self._textview.disconnect(self._signal_id)
|
||||||
|
|
||||||
|
self._textview.get_style_context().remove_provider(self._provider)
|
||||||
|
|
||||||
|
del self._config
|
||||||
|
del self._provider
|
||||||
|
del self._textview
|
||||||
app.check_finalize(self)
|
app.check_finalize(self)
|
||||||
|
|
||||||
def _parse_config(self) -> None:
|
def _parse_config(self) -> None:
|
||||||
@@ -161,11 +168,9 @@ class Counter(Gtk.Label):
|
|||||||
self._inverted_color = f"rgb({red}, {green}, {blue})"
|
self._inverted_color = f"rgb({red}, {green}, {blue})"
|
||||||
|
|
||||||
def _set_css(self) -> None:
|
def _set_css(self) -> None:
|
||||||
self._context = self._textview.get_style_context()
|
|
||||||
if self._provider is not None:
|
|
||||||
self._context.remove_provider(self._provider)
|
|
||||||
css = """
|
css = """
|
||||||
.length-warning > * {
|
.length-warning {
|
||||||
color: %s;
|
color: %s;
|
||||||
background-color: %s;
|
background-color: %s;
|
||||||
}
|
}
|
||||||
@@ -173,9 +178,8 @@ class Counter(Gtk.Label):
|
|||||||
self._inverted_color,
|
self._inverted_color,
|
||||||
self._color,
|
self._color,
|
||||||
)
|
)
|
||||||
self._provider = Gtk.CssProvider()
|
|
||||||
self._provider.load_from_data(bytes(css.encode()))
|
self._provider.load_from_string(css)
|
||||||
self._context.add_provider(self._provider, Gtk.STYLE_PROVIDER_PRIORITY_USER)
|
|
||||||
|
|
||||||
def _set_count(self, count: int) -> None:
|
def _set_count(self, count: int) -> None:
|
||||||
self.set_label(str(count))
|
self.set_label(str(count))
|
||||||
@@ -196,22 +200,20 @@ class Counter(Gtk.Label):
|
|||||||
len_text = len(text)
|
len_text = len(text)
|
||||||
self._set_count(len_text)
|
self._set_count(len_text)
|
||||||
if len_text > self._max_length:
|
if len_text > self._max_length:
|
||||||
self._context.add_class("length-warning")
|
self._textview.add_css_class("length-warning")
|
||||||
else:
|
else:
|
||||||
self._context.remove_class("length-warning")
|
self._textview.remove_css_class("length-warning")
|
||||||
else:
|
else:
|
||||||
self._set_count(0)
|
self._set_count(0)
|
||||||
self._context.remove_class("length-warning")
|
self._textview.remove_css_class("length-warning")
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _jid_allowed(self, current_jid: JID) -> bool:
|
def _jid_allowed(self, current_jid: JID) -> bool:
|
||||||
jids = self._config["JIDS"]
|
jids = cast(str, self._config["JIDS"])
|
||||||
if isinstance(jids, list):
|
|
||||||
# Gajim 1.0 stored this as list[str]
|
|
||||||
jids = ",".join(jids)
|
|
||||||
|
|
||||||
assert isinstance(jids, str)
|
assert isinstance(jids, str)
|
||||||
if not len(jids):
|
|
||||||
|
if not jids:
|
||||||
# Not restricted to any JIDs
|
# Not restricted to any JIDs
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@@ -241,6 +243,6 @@ class Counter(Gtk.Label):
|
|||||||
self._update()
|
self._update()
|
||||||
|
|
||||||
def reset(self) -> None:
|
def reset(self) -> None:
|
||||||
self._context.remove_class("length-warning")
|
self._textview.remove_css_class("length-warning")
|
||||||
self._parse_config()
|
self._parse_config()
|
||||||
self._set_css()
|
self._set_css()
|
||||||
|
|||||||
Reference in New Issue
Block a user