Skip to content

Commit

Permalink
lang_selector: Fix double translation issues
Browse files Browse the repository at this point in the history
- Separate user selection and programmatic selection.
- Give a function for programmatic selection and give option to not
  cause retranslation. i.e. to not emit user-selection-changed
- Throw away no_retranslate.
  • Loading branch information
mufeedali committed Feb 19, 2022
1 parent b7c1075 commit 8dfb7e3
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 39 deletions.
13 changes: 12 additions & 1 deletion dialect/lang_selector.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
@Gtk.Template(resource_path=f'{RES_PATH}/lang-selector.ui')
class DialectLangSelector(Gtk.Popover):
__gtype_name__ = 'DialectLangSelector'
__gsignals__ = {
'user-selection-changed': (GObject.SIGNAL_RUN_LAST, GObject.TYPE_NONE, ())
}

# Get widgets
search = Gtk.Template.Child()
Expand Down Expand Up @@ -55,6 +58,14 @@ def __init__(self, **kwargs):
self.lang_list.set_model(selection_model)
self.lang_list.set_factory(self.factory)

def get_selected(self):
return self.get_property('selected')

def set_selected(self, lang_code, notify=True):
self.set_property('selected', lang_code)
if notify:
self.emit('user-selection-changed')

def set_languages(self, languages):
# Clear list
self.lang_model.remove_all()
Expand All @@ -80,7 +91,7 @@ def _activated(self, list_view, index):
model = list_view.get_model()
lang = model.get_selected_item()
# Set selected property
self.set_property('selected', lang.code)
self.set_selected(lang.code)

def _closed(self, _popover):
# Reset scroll
Expand Down
58 changes: 20 additions & 38 deletions dialect/window.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,21 +229,15 @@ def on_loaded(success, error=''):
else:
self.app.lookup_action('pronunciation').set_enabled(True)

self.no_retranslate = True
# Update langs list
self.src_lang_selector.set_languages(self.translator.languages)
self.dest_lang_selector.set_languages(self.translator.languages)
# Update selected langs
self.src_lang_selector.set_property(
'selected',
'auto' if Settings.get().src_auto else self.src_langs[0]
self.src_lang_selector.set_selected(
'auto' if Settings.get().src_auto else self.src_langs[0],
notify=False
)
self.dest_lang_selector.set_property(
'selected',
self.dest_langs[0]
)

self.no_retranslate = False
self.dest_lang_selector.set_selected(self.dest_langs[0], notify=False)

self.set_property('backend-loading', False)

Expand Down Expand Up @@ -274,12 +268,10 @@ def on_loaded(success, error=''):
self.dest_langs = Settings.get().dest_langs

if launch:
self.no_retranslate = True
if self.launch_langs['src'] is not None:
self.src_lang_selector.set_property('selected', self.launch_langs['src'])
self.src_lang_selector.set_selected(self.launch_langs['src'], notify=False)
if self.launch_langs['dest'] is not None and self.launch_langs['dest'] in self.translator.languages:
self.dest_lang_selector.set_property('selected', self.launch_langs['dest'])
self.no_retranslate = False
self.dest_lang_selector.set_selected(self.launch_langs['dest'], notify=False)

if self.launch_text != '':
self.translate(self.launch_text, self.launch_langs['src'], self.launch_langs['dest'])
Expand Down Expand Up @@ -402,13 +394,17 @@ def setup_headerbar(self):
self.src_lang_selector = DialectLangSelector()
self.src_lang_selector.connect('notify::selected',
self.on_src_lang_changed)
self.src_lang_selector.connect('user-selection-changed',
self.translation)
# Set popover selector to button
self.src_lang_btn.set_popover(self.src_lang_selector)

# Right lang selector
self.dest_lang_selector = DialectLangSelector()
self.dest_lang_selector.connect('notify::selected',
self.on_dest_lang_changed)
self.dest_lang_selector.connect('user-selection-changed',
self.translation)
# Set popover selector to button
self.dest_lang_btn.set_popover(self.dest_lang_selector)

Expand Down Expand Up @@ -505,11 +501,11 @@ def translate(self, text, src_lang, dest_lang):
"""
# Set src lang to Auto
if src_lang is None:
self.src_lang_selector.set_property('selected', 'auto')
self.src_lang_selector.set_selected('auto', notify=False)
else:
self.src_lang_selector.set_property('selected', src_lang)
self.src_lang_selector.set_selected(src_lang, notify=False)
if dest_lang is not None and dest_lang in self.translator.languages:
self.dest_lang_selector.set_property('selected', dest_lang)
self.dest_lang_selector.set_selected(dest_lang)
# Set text to src buffer
self.src_buffer.set_text(text)
# Run translation
Expand Down Expand Up @@ -602,7 +598,7 @@ def on_src_lang_changed(self, _obj, _param):

if code == dest_code:
code = self.dest_langs[1] if code == self.src_langs[0] else dest_code
self.dest_lang_selector.set_property('selected', self.src_langs[0])
self.dest_lang_selector.set_selected(self.src_langs[0], notify=False)

# Disable or enable listen function.
if self.tts_langs and Settings.get().tts != '':
Expand Down Expand Up @@ -634,10 +630,6 @@ def on_src_lang_changed(self, _obj, _param):
# Refresh list
self.src_lang_selector.refresh_selected()

# Translate again
if not self.no_retranslate:
self.translation()

def on_dest_lang_changed(self, _obj, _param):
code = self.dest_lang_selector.get_property('selected')
src_code = self.src_lang_selector.get_property('selected')
Expand All @@ -648,7 +640,7 @@ def on_dest_lang_changed(self, _obj, _param):
)

if code == src_code:
self.src_lang_selector.set_property('selected', self.dest_langs[0])
self.src_lang_selector.set_selected(self.dest_langs[0], notify=False)

# Disable or enable listen function.
if self.tts_langs and Settings.get().tts != '':
Expand Down Expand Up @@ -676,10 +668,6 @@ def on_dest_lang_changed(self, _obj, _param):
# Refresh list
self.dest_lang_selector.refresh_selected()

# Translate again
if not self.no_retranslate:
self.translation()

"""
User interface functions
"""
Expand Down Expand Up @@ -711,8 +699,8 @@ def add_history_entry(self, src_text, src_language, dest_language, dest_text):
GLib.idle_add(self.reset_return_forward_btns)

def switch_all(self, src_language, dest_language, src_text, dest_text):
self.src_lang_selector.set_property('selected', dest_language)
self.dest_lang_selector.set_property('selected', src_language)
self.src_lang_selector.set_selected(dest_language, notify=False)
self.dest_lang_selector.set_selected(src_language, notify=False)
self.src_buffer.set_text(dest_text)
self.dest_buffer.set_text(src_text)
self.add_history_entry(src_language, dest_language, src_text, dest_text)
Expand Down Expand Up @@ -988,12 +976,8 @@ def reset_return_forward_btns(self):
def history_update(self):
self.reset_return_forward_btns()
lang_hist = self.translator.history[self.current_history]
self.no_retranslate = True
self.src_lang_selector.set_property('selected',
lang_hist['Languages'][0])
self.dest_lang_selector.set_property('selected',
lang_hist['Languages'][1])
self.no_retranslate = False
self.src_lang_selector.set_selected(lang_hist['Languages'][0], notify=False)
self.dest_lang_selector.set_selected(lang_hist['Languages'][1], notify=False)
self.src_buffer.set_text(lang_hist['Text'][0])
self.dest_buffer.set_text(lang_hist['Text'][1])

Expand Down Expand Up @@ -1088,9 +1072,7 @@ def on_language_detect(self, session, result):
data = Session.get_response(session, result)
lang = self.translator.get_detect(data).lang
if lang in self.translator.languages:
self.no_retranslate = True
self.src_lang_selector.set_property('selected', lang)
self.no_retranslate = False
self.src_lang_selector.set_selected(lang, notify=False)
if lang not in self.src_langs:
self.src_langs[0] = lang
if self.next_trans:
Expand Down

0 comments on commit 8dfb7e3

Please sign in to comment.