Skip to content

Commit 1fdd537

Browse files
committed
meldwindow: Add simple HeaderBar for the ex-application menu to live in
Ideally we'd move a bunch of our UI there, but at this point we just want to meet the GNOME goal of removing application menu usage, and this seems like the easiest and most future-proof option.
1 parent 06ffb75 commit 1fdd537

4 files changed

Lines changed: 37 additions & 6 deletions

File tree

data/ui/application.ui

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ Josef Vybíral</property>
4444
</object>
4545
</child>
4646
</object>
47-
<menu id="app-menu">
47+
<menu id="gear-menu">
4848
<section>
4949
<item>
5050
<attribute name="label" translatable="yes">_Preferences</attribute>

data/ui/meldapp.ui

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,29 @@
77
<property name="title" translatable="yes">Meld</property>
88
<property name="icon_name">org.gnome.meld</property>
99
<signal name="delete-event" handler="on_delete_event" swapped="no"/>
10+
11+
<child type="titlebar">
12+
<object class="GtkHeaderBar" id="header_bar">
13+
<property name="show-close-button">true</property>
14+
<property name="visible">true</property>
15+
<child>
16+
<object class="GtkMenuButton" id="gear_menu_button">
17+
<property name="visible">true</property>
18+
<property name="can_focus">False</property>
19+
<child>
20+
<object class="GtkImage">
21+
<property name="icon-name">open-menu-symbolic</property>
22+
<property name="visible">true</property>
23+
</object>
24+
</child>
25+
</object>
26+
<packing>
27+
<property name="pack-type">end</property>
28+
</packing>
29+
</child>
30+
</object>
31+
</child>
32+
1033
<child>
1134
<object class="GtkVBox" id="appvbox">
1235
<property name="visible">True</property>

meld/meldapp.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,6 @@ def do_startup(self):
6565
action.connect('activate', callback)
6666
self.add_action(action)
6767

68-
# TODO: Should not be necessary but Builder doesn't understand Menus
69-
builder = meld.ui.util.get_builder("application.ui")
70-
menu = builder.get_object("app-menu")
71-
self.set_app_menu(menu)
72-
# self.set_menubar()
7368
self.new_window()
7469

7570
def do_activate(self):

meld/meldwindow.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,7 @@ def app_action(*args):
251251
self.ui.ensure_update()
252252
self.diff_handler = None
253253
self.undo_handlers = tuple()
254+
self.widget.connect('realize', self.on_realize)
254255
self.widget.connect('focus_in_event', self.on_focus_change)
255256
self.widget.connect('focus_out_event', self.on_focus_change)
256257

@@ -262,6 +263,18 @@ def app_action(*args):
262263
shortcut_window = builder.get_object("shortcuts-meld")
263264
self.widget.set_help_overlay(shortcut_window)
264265

266+
def on_realize(self, user_data):
267+
# FIXME: Ideally this would be in do_realize, and we'd get the menu
268+
# from resources, but MeldWindow would need to be a real GtkWindow
269+
# subclass, and we'd need to... have resources.
270+
builder = meld.ui.util.get_builder("application.ui")
271+
menu = builder.get_object("gear-menu")
272+
self.gear_menu_button.set_popover(
273+
Gtk.Popover.new_from_model(self.gear_menu_button, menu))
274+
275+
app = self.widget.get_application()
276+
meld.ui.util.extract_accels_from_menu(menu, app)
277+
265278
def _on_recentmenu_map(self, recentmenu):
266279
for imagemenuitem in recentmenu.get_children():
267280
imagemenuitem.set_tooltip_text(imagemenuitem.get_label())

0 commit comments

Comments
 (0)