feat(desktop): improve widget edit mode UX and allow free dragging

This commit is contained in:
sankalp committed 2026-07-27 13:25:36 +05:45
1 parent c2a443430a
commit fc7f2851c9
1 file changed
+10 -12
+10 -12
View File
@@ -160,7 +160,7 @@ class DesktopWidgetWindow(WaylandWindow):
GLib.timeout_add(50, self._initial_build) GLib.timeout_add(50, self._initial_build)
# ── lifecycle ───────────────────────────────────────────────────────────── # lifecycle
def _initial_build(self) -> bool: def _initial_build(self) -> bool:
self._ready = True self._ready = True
@@ -172,7 +172,7 @@ class DesktopWidgetWindow(WaylandWindow):
self._fade_in() self._fade_in()
return False return False
# ── fade ────────────────────────────────────────────────────────────────── # fade
def _on_fade_value(self, animator, _) -> None: def _on_fade_value(self, animator, _) -> None:
self._fixed.set_opacity(animator.value) self._fixed.set_opacity(animator.value)
@@ -202,7 +202,7 @@ class DesktopWidgetWindow(WaylandWindow):
def _on_fade_out_finished(self, animator) -> None: def _on_fade_out_finished(self, animator) -> None:
self._fixed.set_opacity(0.0) self._fixed.set_opacity(0.0)
# ── right-click context menu ────────────────────────────────────────────── # right-click context menu
def _on_window_button_press(self, widget, event: Gdk.EventButton) -> bool: def _on_window_button_press(self, widget, event: Gdk.EventButton) -> bool:
if event.button == 3: if event.button == 3:
@@ -220,7 +220,7 @@ class DesktopWidgetWindow(WaylandWindow):
menu.show_all() menu.show_all()
menu.popup_at_pointer(event) menu.popup_at_pointer(event)
# ── edit mode ───────────────────────────────────────────────────────────── # edit mode
def _on_edit_toggled(self, item) -> None: def _on_edit_toggled(self, item) -> None:
self._edit_mode = item.get_active() self._edit_mode = item.get_active()
@@ -233,7 +233,7 @@ class DesktopWidgetWindow(WaylandWindow):
sc.remove_class("edit-mode") sc.remove_class("edit-mode")
eb.drag_source_unset() eb.drag_source_unset()
# ── GTK DnD — like caffyne-shell ───────────────────────────────────────── # GTK DnD
def _setup_drag_dest(self) -> None: def _setup_drag_dest(self) -> None:
self.drag_dest_set( self.drag_dest_set(
@@ -277,7 +277,6 @@ class DesktopWidgetWindow(WaylandWindow):
getattr(eb, "_target_x", 0), getattr(eb, "_target_x", 0),
getattr(eb, "_target_y", 0), getattr(eb, "_target_y", 0),
) )
GLib.idle_add(self._force_refresh)
self._dragging_key = None self._dragging_key = None
self._dragging_eb = None self._dragging_eb = None
@@ -333,9 +332,8 @@ class DesktopWidgetWindow(WaylandWindow):
self._drag_drop_success = True self._drag_drop_success = True
Gtk.drag_finish(ctx, True, False, time) Gtk.drag_finish(ctx, True, False, time)
GLib.idle_add(self._force_refresh)
# ── size allocate ───────────────────────────────────────────────────────── # size allocate
def _on_size_allocate(self, widget, alloc: Gdk.Rectangle) -> None: def _on_size_allocate(self, widget, alloc: Gdk.Rectangle) -> None:
if not self._ready or self._in_size_allocate: if not self._ready or self._in_size_allocate:
@@ -351,14 +349,14 @@ class DesktopWidgetWindow(WaylandWindow):
self._win_w = w self._win_w = w
self._win_h = h self._win_h = h
self._reposition_all() self._reposition_all()
GLib.idle_add(self._force_refresh) self._force_refresh()
if is_first_real_size: if is_first_real_size:
self._fixed.set_opacity(0.0) self._fixed.set_opacity(0.0)
self._fixed.show() self._fixed.show()
self._fade_in() self._fade_in()
# ── positioning ─────────────────────────────────────────────────────────── # positioning
def _reposition_all(self) -> None: def _reposition_all(self) -> None:
entries = position_manager.get_widgets(self._monitor_id) entries = position_manager.get_widgets(self._monitor_id)
@@ -379,7 +377,7 @@ class DesktopWidgetWindow(WaylandWindow):
self._fixed.remove(eb) self._fixed.remove(eb)
self._fixed.put(eb, px, py) self._fixed.put(eb, px, py)
# ── widget management ───────────────────────────────────────────────────── # widget management
def rebuild(self) -> None: def rebuild(self) -> None:
self._dragging_eb = None self._dragging_eb = None
@@ -413,7 +411,7 @@ class DesktopWidgetWindow(WaylandWindow):
logger.error(f"[DesktopWidgetService] failed to build {key!r}: {e}") logger.error(f"[DesktopWidgetService] failed to build {key!r}: {e}")
self._reposition_all() self._reposition_all()
GLib.idle_add(self._force_refresh) self._force_refresh()
def add_widget(self, key: str, px: float = 0.02, py: float = 0.04) -> None: def add_widget(self, key: str, px: float = 0.02, py: float = 0.04) -> None:
if key in self._children: if key in self._children: