feat(desktop): now move widget with drag to any place of window #42

Merged
S4NKALP merged 11 commits from feat/desktop into macos 2026-07-27 12:38:39 +00:00
Showing only changes of commit fc7f2851c9 - Show all commits
+10 -12
View File
@@ -160,7 +160,7 @@ class DesktopWidgetWindow(WaylandWindow):
GLib.timeout_add(50, self._initial_build)
# ── lifecycle ─────────────────────────────────────────────────────────────
# lifecycle
def _initial_build(self) -> bool:
self._ready = True
@@ -172,7 +172,7 @@ class DesktopWidgetWindow(WaylandWindow):
self._fade_in()
return False
# ── fade ──────────────────────────────────────────────────────────────────
# fade
def _on_fade_value(self, animator, _) -> None:
self._fixed.set_opacity(animator.value)
@@ -202,7 +202,7 @@ class DesktopWidgetWindow(WaylandWindow):
def _on_fade_out_finished(self, animator) -> None:
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:
if event.button == 3:
@@ -220,7 +220,7 @@ class DesktopWidgetWindow(WaylandWindow):
menu.show_all()
menu.popup_at_pointer(event)
# ── edit mode ─────────────────────────────────────────────────────────────
# edit mode
def _on_edit_toggled(self, item) -> None:
self._edit_mode = item.get_active()
@@ -233,7 +233,7 @@ class DesktopWidgetWindow(WaylandWindow):
sc.remove_class("edit-mode")
eb.drag_source_unset()
# ── GTK DnD — like caffyne-shell ─────────────────────────────────────────
# GTK DnD
def _setup_drag_dest(self) -> None:
self.drag_dest_set(
@@ -277,7 +277,6 @@ class DesktopWidgetWindow(WaylandWindow):
getattr(eb, "_target_x", 0),
getattr(eb, "_target_y", 0),
)
GLib.idle_add(self._force_refresh)
self._dragging_key = None
self._dragging_eb = None
@@ -333,9 +332,8 @@ class DesktopWidgetWindow(WaylandWindow):
self._drag_drop_success = True
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:
if not self._ready or self._in_size_allocate:
@@ -351,14 +349,14 @@ class DesktopWidgetWindow(WaylandWindow):
self._win_w = w
self._win_h = h
self._reposition_all()
GLib.idle_add(self._force_refresh)
self._force_refresh()
if is_first_real_size:
self._fixed.set_opacity(0.0)
self._fixed.show()
self._fade_in()
# ── positioning ───────────────────────────────────────────────────────────
# positioning
def _reposition_all(self) -> None:
entries = position_manager.get_widgets(self._monitor_id)
@@ -379,7 +377,7 @@ class DesktopWidgetWindow(WaylandWindow):
self._fixed.remove(eb)
self._fixed.put(eb, px, py)
# ── widget management ─────────────────────────────────────────────────────
# widget management
def rebuild(self) -> None:
self._dragging_eb = None
@@ -413,7 +411,7 @@ class DesktopWidgetWindow(WaylandWindow):
logger.error(f"[DesktopWidgetService] failed to build {key!r}: {e}")
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:
if key in self._children: