From 71f01edde0246e0761cf6dadedc1999397ee4a25 Mon Sep 17 00:00:00 2001 From: Pavel Baksy Date: Tue, 2 Jun 2026 17:11:47 +0200 Subject: [PATCH] Keep project expanded after request reorder; hide request menu button until hover --- src/widgets/request-item.ui | 1 + src/window.py | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/widgets/request-item.ui b/src/widgets/request-item.ui index af30a71..9435c30 100644 --- a/src/widgets/request-item.ui +++ b/src/widgets/request-item.ui @@ -32,6 +32,7 @@ Options diff --git a/src/window.py b/src/window.py index 16337ff..3baeaa1 100644 --- a/src/window.py +++ b/src/window.py @@ -224,6 +224,16 @@ class RosterWindow(Adw.ApplicationWindow): min-width: 0; } + /* Request menu button: hidden by default, visible on row hover or when open */ + .request-menu-button { + opacity: 0; + transition: opacity 150ms ease; + } + row:hover .request-menu-button, + .request-menu-button:checked { + opacity: 1; + } + /* Method chips in sidebar request list */ .method-chip { border-radius: 4px; @@ -961,6 +971,14 @@ class RosterWindow(Adw.ApplicationWindow): def _load_projects(self) -> None: """Load and display projects.""" + # Remember which projects are currently expanded + expanded_ids = set() + child = self.projects_listbox.get_first_child() + while child: + if isinstance(child, ProjectItem) and child.expanded: + expanded_ids.add(child.project.id) + child = child.get_next_sibling() + # Clear existing while child := self.projects_listbox.get_first_child(): self.projects_listbox.remove(child) @@ -984,6 +1002,11 @@ class RosterWindow(Adw.ApplicationWindow): item.connect('request-move-up-requested', self._on_request_move_up, project) item.connect('request-move-down-requested', self._on_request_move_down, project) item.connect('request-move-to-project-requested', self._on_request_move_to_project, project) + if project.id in expanded_ids: + item.expanded = True + item.requests_revealer.set_transition_duration(0) + item.requests_revealer.set_reveal_child(True) + GLib.idle_add(lambda r=item.requests_revealer: (r.set_transition_duration(250), False)[1]) self.projects_listbox.append(item) def on_add_project_clicked(self, button):