Skip to content

Commit b948c4f

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

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-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

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

107107
# Translation-related variables
108+
pending_trans_selection = False
108109
next_translation: TranslationRequest | None = None # for ongoing translation
109110
translation_loading = False # for ongoing translation
110111

@@ -509,10 +510,15 @@ def translate(self, text: str, src_lang: str | None, dest_lang: str | None):
509510
@background_task
510511
async def translate_selection(self, src_lang: str | None, dest_lang: str | None):
511512
"""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)
513+
if self.props.is_active:
514+
if display := Gdk.Display.get_default():
515+
clipboard = display.get_primary_clipboard()
516+
if text := await clipboard.read_text_async(): # type: ignore
517+
self.translate(text, src_lang, dest_lang)
518+
self.pending_trans_selection = False
519+
else:
520+
self.translate(self.src_buffer.props.text, src_lang, dest_lang) # Just set the langs
521+
self.pending_trans_selection = True
516522

517523
def save_settings(self, *args, **kwargs):
518524
if not self.is_maximized():
@@ -932,6 +938,11 @@ def _on_user_action_ended(self, _buffer):
932938
if Settings.get().live_translation:
933939
self._on_translation()
934940

941+
@Gtk.Template.Callback()
942+
def _on_is_active_changed(self, *_args):
943+
if self.pending_trans_selection and self.props.is_active:
944+
self.translate_selection(self.src_lang_selector.selected, self.dest_lang_selector.selected)
945+
935946
@Gtk.Template.Callback()
936947
def _on_retry_load_translator_clicked(self, *_args):
937948
self.reload_provider("translator")

0 commit comments

Comments
 (0)