Skip to content

Commit 3eec133

Browse files
window: translate_selection: Only get clipboard when window is active
Fixes #407
1 parent 015b91f commit 3eec133

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

dialect/window.blp

+2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ template $DialectWindow : Adw.ApplicationWindow {
4444
height-request: 320;
4545
focus-widget: src_text;
4646

47+
notify::is-active => $_on_is_active_changed();
48+
4749
Adw.Breakpoint {
4850
condition ("max-width: 680px")
4951
setters {

dialect/window.py

+18-4
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ class DialectWindow(Adw.ApplicationWindow):
105105
current_history = 0 # for history management
106106

107107
# Translation-related variables
108+
pending_trans_selection = False
109+
trans_selection_langs: tuple[str | None, str | None] = (None, None)
108110
next_translation: TranslationRequest | None = None # for ongoing translation
109111
translation_loading = False # for ongoing translation
110112

@@ -509,10 +511,16 @@ def translate(self, text: str, src_lang: str | None, dest_lang: str | None):
509511
@background_task
510512
async def translate_selection(self, src_lang: str | None, dest_lang: str | None):
511513
"""Runs `translate` with the selection clipboard text"""
512-
if display := Gdk.Display.get_default():
513-
clipboard = display.get_primary_clipboard()
514-
if text := await clipboard.read_text_async(): # type: ignore
515-
self.translate(text, src_lang, dest_lang)
514+
if self.props.is_active:
515+
if display := Gdk.Display.get_default():
516+
clipboard = display.get_primary_clipboard()
517+
if text := await clipboard.read_text_async(): # type: ignore
518+
self.translate(text, src_lang, dest_lang)
519+
self.pending_trans_selection = False
520+
self.trans_selection_langs = (None, None)
521+
else:
522+
self.pending_trans_selection = True
523+
self.trans_selection_langs = (src_lang, dest_lang)
516524

517525
def save_settings(self, *args, **kwargs):
518526
if not self.is_maximized():
@@ -932,6 +940,12 @@ def _on_user_action_ended(self, _buffer):
932940
if Settings.get().live_translation:
933941
self._on_translation()
934942

943+
@Gtk.Template.Callback()
944+
def _on_is_active_changed(self, *_args):
945+
if self.pending_trans_selection and self.props.is_active:
946+
src, dest = self.trans_selection_langs
947+
self.translate_selection(src, dest)
948+
935949
@Gtk.Template.Callback()
936950
def _on_retry_load_translator_clicked(self, *_args):
937951
self.reload_provider("translator")

0 commit comments

Comments
 (0)