Daniel Brötzmann pushed to branch master at gajim / gajim
Commits: 609a03e9 by wurstsalat at 2021-12-22T23:24:48+01:00 BaseControl: Prevent file transfers from being corrected
Fixes #10281
- - - - - 2518ead6 by wurstsalat at 2021-12-22T23:24:48+01:00 RemoveAccount: Typing
- - - - - 7bcb6e22 by wurstsalat at 2021-12-22T23:24:48+01:00 ManageProxies: Typing
- - - - - 318d70c0 by wurstsalat at 2021-12-22T23:24:48+01:00 VideoPreview: Typing
- - - - -
6 changed files:
- gajim/gtk/controls/base.py - gajim/gtk/controls/chat.py - gajim/gtk/controls/groupchat.py - gajim/gtk/proxies.py - gajim/gtk/remove_account.py - gajim/gtk/video_preview.py
Changes:
===================================== gajim/gtk/controls/base.py ===================================== @@ -1507,12 +1507,13 @@ def scroll_messages(self, msg_type == 'sent' and not self.correcting and ( not history[pos - 1].startswith('/') or history[pos - 1].startswith('/me'))): - self.correcting = True - self.msg_textview.get_style_context().add_class( - 'gajim-msg-correcting') - message = history[pos - 1] - msg_buf.set_text(message) - return + if self.last_sent_msg is not None: + self.correcting = True + self.msg_textview.get_style_context().add_class( + 'gajim-msg-correcting') + message = history[pos - 1] + msg_buf.set_text(message) + return if self.correcting: # We were previously correcting self.msg_textview.get_style_context().remove_class(
===================================== gajim/gtk/controls/chat.py ===================================== @@ -414,7 +414,11 @@ def _on_message_sent(self, event): return
if event.correct_id is None: - self.last_sent_msg = event.message_id + oob_url = event.additional_data.get_value('gajim', 'oob_url') + if oob_url == event.message: + self.last_sent_msg = None + else: + self.last_sent_msg = event.message_id
message_id = event.message_id
===================================== gajim/gtk/controls/groupchat.py ===================================== @@ -1175,7 +1175,11 @@ def _on_message_sent(self, event): # we'll save sent message text when we'll receive it in # _nec_gc_message_received if event.correct_id is None: - self.last_sent_msg = event.message_id + oob_url = event.additional_data.get_value('gajim', 'oob_url') + if oob_url == event.message: + self.last_sent_msg = None + else: + self.last_sent_msg = event.message_id if self.correcting: self.correcting = False self.msg_textview.get_style_context().remove_class(
===================================== gajim/gtk/proxies.py ===================================== @@ -12,6 +12,8 @@ # You should have received a copy of the GNU General Public License # along with Gajim. If not, see http://www.gnu.org/licenses/.
+from typing import Any + from gi.repository import Gdk from gi.repository import Gtk
@@ -23,7 +25,7 @@
class ManageProxies(Gtk.ApplicationWindow): - def __init__(self): + def __init__(self) -> None: Gtk.ApplicationWindow.__init__(self) self.set_name('ManageProxies') self.set_application(app.app) @@ -45,12 +47,12 @@ def __init__(self): self._ui.connect_signals(self) self.show_all()
- def _on_key_press(self, _widget, event): + def _on_key_press(self, _widget: Gtk.Widget, event: Gdk.EventKey) -> None: if event.keyval == Gdk.KEY_Escape: self.destroy()
@staticmethod - def _on_destroy(*args): + def _on_destroy(*args: Any) -> None: # Window callbacks for updating proxy comboboxes window_pref = get_app_window('Preferences') window_accounts = get_app_window('AccountsWindow') @@ -62,14 +64,14 @@ def _on_destroy(*args): if window_account_wizard is not None: window_account_wizard.update_proxy_list()
- def _fill_proxies_treeview(self): + def _fill_proxies_treeview(self) -> None: model = self._ui.proxies_treeview.get_model() model.clear() for proxy in app.settings.get_proxies(): iter_ = model.append() model.set(iter_, 0, proxy)
- def _init_list(self): + def _init_list(self) -> None: self._ui.remove_proxy_button.set_sensitive(False) self._ui.settings_grid.set_sensitive(False) model = Gtk.ListStore(str) @@ -82,7 +84,7 @@ def _init_list(self): self._fill_proxies_treeview() self._ui.proxytype_combobox.set_active(0)
- def _on_add_proxy_button_clicked(self, _widget): + def _on_add_proxy_button_clicked(self, _button: Gtk.Button) -> None: model = self._ui.proxies_treeview.get_model() proxies = app.settings.get_proxies() i = 1 @@ -95,7 +97,7 @@ def _on_add_proxy_button_clicked(self, _widget): model.set(iter_, 0, proxy_name) self._ui.proxies_treeview.set_cursor(model.get_path(iter_))
- def _on_remove_proxy_button_clicked(self, _widget): + def _on_remove_proxy_button_clicked(self, _button: Gtk.Button) -> None: sel = self._ui.proxies_treeview.get_selection() if not sel: return @@ -110,23 +112,25 @@ def _on_remove_proxy_button_clicked(self, _widget): self._on_proxies_treeview_cursor_changed(self._ui.proxies_treeview) self._block_signal = False
- def _on_useauth_toggled(self, widget): + def _on_useauth_toggled(self, checkbutton: Gtk.CheckButton) -> None: if self._block_signal: return - act = widget.get_active() + act = checkbutton.get_active() proxy = self._ui.proxyname_entry.get_text() app.settings.set_proxy_setting(proxy, 'useauth', act) self._ui.proxyuser_entry.set_sensitive(act) self._ui.proxypass_entry.set_sensitive(act)
- def _on_proxies_treeview_cursor_changed(self, widget): + def _on_proxies_treeview_cursor_changed(self, + treeview: Gtk.TreeView + ) -> None: self._block_signal = True self._ui.proxyhost_entry.set_text('') self._ui.proxyport_entry.set_text('') self._ui.proxyuser_entry.set_text('') self._ui.proxypass_entry.set_text('')
- sel = widget.get_selection() + sel = treeview.get_selection() if sel: (model, iter_) = sel.get_selected() else: @@ -162,11 +166,14 @@ def _on_proxies_treeview_cursor_changed(self, widget):
self._block_signal = False
- def _on_proxies_treeview_key_press_event(self, widget, event): + def _on_proxies_treeview_key_press_event(self, + widget: Gtk.Widget, + event: Gdk.EventKey + ) -> None: if event.keyval == Gdk.KEY_Delete: self._on_remove_proxy_button_clicked(widget)
- def _on_proxyname_entry_changed(self, widget): + def _on_proxyname_entry_changed(self, entry: Gtk.Entry) -> None: if self._block_signal: return sel = self._ui.proxies_treeview.get_selection() @@ -176,7 +183,7 @@ def _on_proxyname_entry_changed(self, widget): if not iter_: return old_name = model.get_value(iter_, 0) - new_name = widget.get_text() + new_name = entry.get_text() if new_name == '': return if new_name == old_name: @@ -185,7 +192,7 @@ def _on_proxyname_entry_changed(self, widget): app.settings.rename_proxy(old_name, new_name) model.set_value(iter_, 0, new_name)
- def _on_proxytype_combobox_changed(self, _widget): + def _on_proxytype_combobox_changed(self, _combobox: Gtk.ComboBox) -> None: if self._block_signal: return types = ['http', 'socks5'] @@ -195,14 +202,14 @@ def _on_proxytype_combobox_changed(self, _widget): proxy = self._ui.proxyname_entry.get_text() app.settings.set_proxy_setting(proxy, 'type', types[type_])
- def _on_proxyhost_entry_changed(self, entry): + def _on_proxyhost_entry_changed(self, entry: Gtk.Entry) -> None: if self._block_signal: return value = entry.get_text() proxy = self._ui.proxyname_entry.get_text() app.settings.set_proxy_setting(proxy, 'host', value)
- def _on_proxyport_entry_changed(self, entry): + def _on_proxyport_entry_changed(self, entry: Gtk.Entry) -> None: if self._block_signal: return value = entry.get_text() @@ -213,14 +220,14 @@ def _on_proxyport_entry_changed(self, entry): proxy = self._ui.proxyname_entry.get_text() app.settings.set_proxy_setting(proxy, 'port', value)
- def _on_proxyuser_entry_changed(self, entry): + def _on_proxyuser_entry_changed(self, entry: Gtk.Entry) -> None: if self._block_signal: return value = entry.get_text() proxy = self._ui.proxyname_entry.get_text() app.settings.set_proxy_setting(proxy, 'user', value)
- def _on_proxypass_entry_changed(self, entry): + def _on_proxypass_entry_changed(self, entry: Gtk.Entry) -> None: if self._block_signal: return value = entry.get_text()
===================================== gajim/gtk/remove_account.py ===================================== @@ -12,11 +12,15 @@ # You should have received a copy of the GNU General Public License # along with Gajim. If not, see http://www.gnu.org/licenses/.
+from typing import Any +from typing import List + import logging
from gi.repository import Gtk
from nbxmpp.errors import StanzaError +from nbxmpp.task import Task
from gajim.common import app from gajim.common import ged @@ -33,7 +37,7 @@
class RemoveAccount(Assistant): - def __init__(self, account): + def __init__(self, account: str) -> None: Assistant.__init__(self)
self.account = account @@ -83,11 +87,14 @@ def _on_account_disconnected(self, _event): self.show_page('success') app.interface.remove_account(self.account)
- def _set_remove_from_server_checkbox(self): + def _set_remove_from_server_checkbox(self) -> None: enabled = self._client is not None and self._client.state.is_available self.get_page('remove_choice').set_remove_from_server(enabled)
- def _on_button_clicked(self, _assistant, button_name): + def _on_button_clicked(self, + _assistant: Assistant, + button_name: str + ) -> None: page = self.get_current_page() if button_name == 'remove': if page == 'remove_choice': @@ -104,7 +111,7 @@ def _on_button_clicked(self, _assistant, button_name): if button_name == 'close': self.destroy()
- def _on_remove(self, *args): + def _on_remove(self, *args: Any) -> None: if self.get_page('remove_choice').remove_from_server: self._client.set_remove_account(True) self._client.get_module('Register').unregister( @@ -119,7 +126,7 @@ def _on_remove(self, *args): self._client.disconnect(gracefully=True, reconnect=False) self._account_removed = True
- def _on_remove_response(self, task): + def _on_remove_response(self, task: Task) -> None: try: task.finish() except StanzaError as error: @@ -132,12 +139,12 @@ def _on_remove_response(self, task):
self._account_removed = True
- def _on_destroy(self, *args): + def _on_destroy(self, *args: Any) -> None: self._destroyed = True
class RemoveChoice(Page): - def __init__(self, account): + def __init__(self, account: str) -> None: Page.__init__(self) self.title = _('Remove Account')
@@ -176,10 +183,10 @@ def __init__(self, account): self.show_all()
@property - def remove_from_server(self): + def remove_from_server(self) -> bool: return self._server.get_active()
- def set_remove_from_server(self, enabled): + def set_remove_from_server(self, enabled: bool) -> None: self._server.set_sensitive(enabled) if enabled: self._server.set_tooltip_text('') @@ -187,27 +194,27 @@ def set_remove_from_server(self, enabled): self._server.set_active(False) self._server.set_tooltip_text(_('Account has to be connected'))
- def get_visible_buttons(self): + def get_visible_buttons(self) -> List[str]: return ['remove']
class Error(ErrorPage): - def __init__(self): + def __init__(self) -> None: ErrorPage.__init__(self) self.set_title(_('Account Removal Failed')) self.set_heading(_('Account Removal Failed'))
- def get_visible_buttons(self): + def get_visible_buttons(self) -> List[str]: return ['back']
class Success(SuccessPage): - def __init__(self): + def __init__(self) -> None: SuccessPage.__init__(self) self.set_title(_('Account Removed')) self.set_heading(_('Account Removed')) self.set_text( _('Your account has has been removed successfully.'))
- def get_visible_buttons(self): + def get_visible_buttons(self) -> List[str]: return ['close']
===================================== gajim/gtk/video_preview.py ===================================== @@ -12,15 +12,18 @@ # You should have received a copy of the GNU General Public License # along with Gajim. If not, see http://www.gnu.org/licenses/.
+from typing import Optional + import logging
from gi.repository import GLib +from gi.repository import Gtk
from gajim.common import app from gajim.common.i18n import _
-from . import gstreamer from .builder import get_builder +from .gstreamer import create_gtk_widget
try: from gi.repository import Gst # pylint: disable=ungrouped-imports @@ -32,32 +35,32 @@
class VideoPreview: - def __init__(self): + def __init__(self) -> None:
self._ui = get_builder('video_preview.ui')
self._active = False
- self._av_pipeline = None - self._av_src = None - self._av_sink = None - self._av_widget = None + self._av_pipeline: Optional[Gst.Pipeline] = None + self._av_src: Optional[Gst.Bin] = None + self._av_sink: Optional[Gst.Element] = None + self._av_widget: Optional[Gtk.Widget] = None
@property - def widget(self): + def widget(self) -> Gtk.Box: return self._ui.video_preview_box
@property - def is_active(self): + def is_active(self) -> bool: return self._active
- def toggle_preview(self, value): + def toggle_preview(self, value: bool) -> None: self._active = value if value: return self._enable_preview() return self._disable_preview()
- def _enable_preview(self): + def _enable_preview(self) -> None: src_name = app.settings.get('video_input_device') try: self._av_src = Gst.parse_bin_from_description(src_name, True) @@ -67,7 +70,7 @@ def _enable_preview(self): self._set_error_text() return
- sink, widget, name = gstreamer.create_gtk_widget() + sink, widget, name = create_gtk_widget() if sink is None: log.error('Failed to obtain a working Gstreamer GTK+ sink, ' 'video support will be disabled') @@ -95,7 +98,7 @@ def _enable_preview(self): self._av_src.link(self._av_sink) self._av_pipeline.set_state(Gst.State.PLAYING)
- def _disable_preview(self): + def _disable_preview(self) -> None: if self._av_pipeline is not None: self._av_pipeline.set_state(Gst.State.NULL) if self._av_src is not None: @@ -112,7 +115,7 @@ def _disable_preview(self): self._av_widget = None self._av_pipeline = None
- def _set_sink_text(self, sink_name): + def _set_sink_text(self, sink_name: str) -> None: text = '' if sink_name == 'gtkglsink': text = _('<span color="green" font-weight="bold">' @@ -124,10 +127,10 @@ def _set_sink_text(self, sink_name):
self._ui.video_source_label.set_markup(text)
- def _set_error_text(self): + def _set_error_text(self) -> None: self._ui.video_source_label.set_text( _('Something went wrong. Video feature disabled.'))
- def refresh(self): + def refresh(self) -> None: self.toggle_preview(False) self.toggle_preview(True)
View it on GitLab: https://dev.gajim.org/gajim/gajim/-/compare/2bc5f87ea5945e056da9802d00259917...