Skip to content

Commit 06d75d6

Browse files
committed
Improve hover, add menu settings
1 parent 7e955fa commit 06d75d6

2 files changed

Lines changed: 101 additions & 14 deletions

File tree

qubes_menu/qubes-menu.glade

Lines changed: 78 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,47 @@
123123
<property name="hexpand">True</property>
124124
<property name="orientation">vertical</property>
125125
<child>
126-
<object class="GtkLabel" id="search_recent_apps_title">
126+
<object class="GtkBox">
127127
<property name="visible">True</property>
128128
<property name="can-focus">False</property>
129-
<property name="halign">start</property>
130-
<property name="label" translatable="yes">Recent applications</property>
131-
<style>
132-
<class name="search_title"/>
133-
</style>
129+
<child>
130+
<object class="GtkLabel" id="search_recent_apps_title">
131+
<property name="visible">True</property>
132+
<property name="can-focus">False</property>
133+
<property name="halign">start</property>
134+
<property name="label" translatable="yes">Recent applications</property>
135+
<style>
136+
<class name="search_title"/>
137+
</style>
138+
</object>
139+
<packing>
140+
<property name="expand">False</property>
141+
<property name="fill">True</property>
142+
<property name="position">0</property>
143+
</packing>
144+
</child>
145+
<child>
146+
<object class="GtkButton" id="search_settings_button_1">
147+
<property name="visible">True</property>
148+
<property name="can-focus">True</property>
149+
<property name="receives-default">True</property>
150+
<child>
151+
<object class="GtkImage">
152+
<property name="visible">True</property>
153+
<property name="can-focus">False</property>
154+
<property name="icon-name">settings-black</property>
155+
</object>
156+
</child>
157+
<style>
158+
<class name="power"/>
159+
</style>
160+
</object>
161+
<packing>
162+
<property name="expand">False</property>
163+
<property name="fill">True</property>
164+
<property name="position">1</property>
165+
</packing>
166+
</child>
134167
</object>
135168
<packing>
136169
<property name="expand">False</property>
@@ -188,14 +221,47 @@
188221
</packing>
189222
</child>
190223
<child>
191-
<object class="GtkLabel" id="search_recent_title">
224+
<object class="GtkBox">
192225
<property name="visible">True</property>
193226
<property name="can-focus">False</property>
194-
<property name="halign">start</property>
195-
<property name="label" translatable="yes">Recently searched</property>
196-
<style>
197-
<class name="search_title"/>
198-
</style>
227+
<child>
228+
<object class="GtkLabel" id="search_recent_title">
229+
<property name="visible">True</property>
230+
<property name="can-focus">False</property>
231+
<property name="halign">start</property>
232+
<property name="label" translatable="yes">Recently searched</property>
233+
<style>
234+
<class name="search_title"/>
235+
</style>
236+
</object>
237+
<packing>
238+
<property name="expand">False</property>
239+
<property name="fill">True</property>
240+
<property name="position">0</property>
241+
</packing>
242+
</child>
243+
<child>
244+
<object class="GtkButton" id="search_settings_button_2">
245+
<property name="visible">True</property>
246+
<property name="can-focus">True</property>
247+
<property name="receives-default">True</property>
248+
<child>
249+
<object class="GtkImage">
250+
<property name="visible">True</property>
251+
<property name="can-focus">False</property>
252+
<property name="icon-name">settings-black</property>
253+
</object>
254+
</child>
255+
<style>
256+
<class name="power"/>
257+
</style>
258+
</object>
259+
<packing>
260+
<property name="expand">False</property>
261+
<property name="fill">True</property>
262+
<property name="position">1</property>
263+
</packing>
264+
</child>
199265
</object>
200266
<packing>
201267
<property name="expand">False</property>

qubes_menu/search_page.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@
1818
# You should have received a copy of the GNU Lesser General Public License along
1919
# with this program; if not, see <http://www.gnu.org/licenses/>.
2020
"""Search page for App Menu"""
21+
import subprocess
2122
from typing import Dict, Optional, Set, Union
2223

2324
from .desktop_file_manager import DesktopFileManager
24-
from .custom_widgets import SearchVMRow, AnyVMRow, ControlList, KeynavController
25+
from .custom_widgets import SearchVMRow, AnyVMRow, ControlList, KeynavController, \
26+
HoverListBox, HoverEventBox
2527
from .app_widgets import SearchAppEntry
2628
from .vm_manager import VMEntry, VMManager
2729
from .page_handler import MenuPage
@@ -41,14 +43,18 @@ class RecentSearchRow(Gtk.ListBoxRow):
4143
def __init__(self, search_text: str):
4244
super().__init__()
4345
self.search_text = search_text
46+
47+
self.event_box = HoverEventBox(focus_widget=self)
48+
self.add(self.event_box)
49+
4450
self.hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
4551

4652
self.recent_icon = Gtk.Image.new_from_pixbuf(load_icon("qappmenu-search"))
4753
self.hbox.pack_start(self.recent_icon, False, False, 5)
4854
self.search_label = Gtk.Label(label=search_text, xalign=0)
4955
self.hbox.pack_start(self.search_label, False, False, 5)
5056
self.get_style_context().add_class("app_entry")
51-
self.add(self.hbox)
57+
self.event_box.add(self.hbox)
5258
self.show_all()
5359

5460

@@ -123,6 +129,7 @@ def add_new_recent_search(self, text: str):
123129

124130
def _row_clicked(self, _widget, row: RecentSearchRow):
125131
self._deselect_others()
132+
self.recent_list_box.select_row(None)
126133
self.search_box.set_text(row.search_text)
127134

128135

@@ -205,6 +212,7 @@ def add_new_recent_app(self, _widget, app_path: str):
205212

206213
def _row_clicked(self, _widget, row: SearchAppEntry):
207214
self._deselect_others()
215+
self.recent_list_box.select_row(None)
208216
if hasattr(row, "app_info"):
209217
row.run_app(row.app_info.vm)
210218

@@ -295,13 +303,26 @@ def __init__(
295303
widgets_in_order=[self.app_list, self.control_list]
296304
)
297305

306+
self.settings_buttons = [
307+
builder.get_object("search_settings_button_1"),
308+
builder.get_object("search_settings_button_2")
309+
]
310+
311+
for button in self.settings_buttons:
312+
button.connect('clicked', self._run_settings)
313+
298314
def _app_clicked(self, _widget, row):
299315
self.recent_search_manager.add_new_recent_search(self.search_entry.get_text())
300316
if self.selected_vm_row:
301317
row.run_app(self.selected_vm_row.vm_entry.vm)
302318
elif hasattr(row, "app_info"):
303319
row.run_app(row.app_info.vm)
304320

321+
def _run_settings(self, widget, *_args):
322+
subprocess.Popen(["qubes-appmenu-settings"], stdin=subprocess.DEVNULL)
323+
widget.get_toplevel().get_application().hide_menu()
324+
325+
305326
def _app_info_callback(self, app_info):
306327
"""
307328
Callback to be performed on all newly loaded ApplicationInfo instances.

0 commit comments

Comments
 (0)