Compare commits

..

No commits in common. "743b476d38f1bfbce0a512b705a1ab78fbd714f4" and "dc6477019d5e6c47eb040781e8c088ec82761d5a" have entirely different histories.

5 changed files with 6 additions and 58 deletions

View file

@ -1,5 +1,3 @@
⚠️ This repository has moved to https://git.jeena.net/jeena/recoder
<p align="center">
<img src="src/resources/net.jeena.Recoder.svg" width="120" height="120" alt="Recoder logo">
</p>

View file

@ -1,6 +1,6 @@
[project]
name = "recoder"
version = "1.1.0"
version = "1.0.1"
description = "A GTK4 video transcoding GUI application"
readme = "README.md"
authors = [{name = "Jeena", email = "hello@jeena.net"}]

View file

@ -10,22 +10,12 @@ 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("<Ctrl>V"),
Gtk.CallbackAction.new(self.on_paste_clipboard)
)
)
self.w.add_controller(self.shortcut_ctrl_v)
self.w.overlay.add_controller(self.drop_target)
def _compute_accept(self):
return self.app_state_manager.state not in {
@ -43,7 +33,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
@ -57,45 +47,10 @@ 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

View file

@ -58,10 +58,5 @@
<p>Fix bad video quality.</p>
</description>
</release>
<release version="1.1.0" date="2025-08-24">
<description>
<p>Add possibility to Ctrl-v a path instead only drag and drop.</p>
</description>
</release>
</releases>
</component>

View file

@ -144,7 +144,7 @@
<child>
<object class="GtkLabel">
<property name="label">Drop video file or folder here, or press Ctrl+V to paste a path</property>
<property name="label">Drop video files or folders here to get started</property>
<style>
<class name="dim-label"/>
</style>