diff --git a/README.md b/README.md
index 41cb863..18bb292 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
+⚠️ This repository has moved to https://git.jeena.net/jeena/recoder
+
diff --git a/pyproject.toml b/pyproject.toml
index 527d605..cb94e65 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "recoder"
-version = "1.0.1"
+version = "1.1.0"
description = "A GTK4 video transcoding GUI application"
readme = "README.md"
authors = [{name = "Jeena", email = "hello@jeena.net"}]
@@ -24,4 +24,4 @@ include-package-data = true
where = ["src"]
[tool.setuptools.package-data]
-recoder = ["resources.gresource"]
\ No newline at end of file
+recoder = ["resources.gresource"]
diff --git a/src/recoder/drop_handler.py b/src/recoder/drop_handler.py
index 107647a..7fe42e0 100644
--- a/src/recoder/drop_handler.py
+++ b/src/recoder/drop_handler.py
@@ -10,13 +10,23 @@ class DropHandler:
self._accepting = self._compute_accept()
self.app_state_manager.connect("notify::state", self.on_state_changed)
+ # --- Drag & Drop ---
self.drop_target = Gtk.DropTarget.new(Gio.File, Gdk.DragAction.COPY)
self.drop_target.connect("enter", self.on_drop_enter)
self.drop_target.connect("leave", self.on_drop_leave)
self.drop_target.connect("drop", self.on_drop)
-
self.w.overlay.add_controller(self.drop_target)
+ # --- Clipboard Paste (Ctrl+V) ---
+ self.shortcut_ctrl_v = Gtk.ShortcutController()
+ self.shortcut_ctrl_v.add_shortcut(
+ Gtk.Shortcut.new(
+ Gtk.ShortcutTrigger.parse_string("V"),
+ Gtk.CallbackAction.new(self.on_paste_clipboard)
+ )
+ )
+ self.w.add_controller(self.shortcut_ctrl_v)
+
def _compute_accept(self):
return self.app_state_manager.state not in {
AppState.TRANSCODING,
@@ -33,7 +43,7 @@ class DropHandler:
else:
self.w.overlay.remove_controller(self.drop_target)
-
+ # ---------------- Drag & Drop ----------------
def on_drop_enter(self, *_):
if not self._accepting:
return False
@@ -47,10 +57,45 @@ class DropHandler:
def on_drop(self, _, value, __, ___):
if not self._accepting:
return False
+ self._start_processing(value)
+ return True
+
+ # ---------------- Clipboard Paste ----------------
+ def on_paste_clipboard(self, *_):
+ if not self._accepting:
+ return True
+
+ clipboard = self.w.get_clipboard()
+ clipboard.read_text_async(None, self._on_clipboard_text_ready)
+ return True
+
+ def _on_clipboard_text_ready(self, clipboard, res):
+ try:
+ text = clipboard.read_text_finish(res)
+ except GLib.Error:
+ return
+
+ if not text:
+ return
+
+ # take the first non-empty line only
+ uri = next((u.strip() for u in text.splitlines() if u.strip()), None)
+ if not uri:
+ return
+
+ if uri.startswith("file://"):
+ gfile = Gio.File.new_for_uri(uri)
+ else:
+ gfile = Gio.File.new_for_path(uri)
+
+ self._start_processing(gfile)
+
+ # ---------------- Shared ----------------
+ def _start_processing(self, value):
if self.w.drop_hint.get_parent():
self.w.overlay.remove_overlay(self.w.drop_hint)
self.w.drop_hint.set_visible(False)
self.w.progress_bar.set_visible(True)
self.w.progress_bar.set_fraction(0.0)
GLib.idle_add(partial(self.w.process_drop_value, value))
- return True
+
diff --git a/src/resources/net.jeena.Recoder.metainfo.xml b/src/resources/net.jeena.Recoder.metainfo.xml
index 29d8c08..8d00b96 100644
--- a/src/resources/net.jeena.Recoder.metainfo.xml
+++ b/src/resources/net.jeena.Recoder.metainfo.xml
@@ -58,5 +58,10 @@
Fix bad video quality.
+
+
+
Add possibility to Ctrl-v a path instead only drag and drop.