Show a header (pulley) menu on channel list 'edge-overshot'

This commit is contained in:
Teemu Ikonen 2022-08-16 22:50:58 +03:00
parent b6ac9776d8
commit 3d678927f2
2 changed files with 75 additions and 1 deletions

View File

@ -73,10 +73,11 @@
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<object class="GtkScrolledWindow" id="channels_scrolled_window">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="vexpand">True</property>
<property name="vscrollbar-policy">always</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTreeView" id="treeChannels">
@ -514,6 +515,65 @@
<headerbar name="details_header_bar"/>
</headerbars>
</object>
<object class="GtkPopover" id="header_popover">
<property name="width-request">300</property>
<property name="can-focus">False</property>
<property name="border-width">10</property>
<property name="relative-to">header_bar</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">8</property>
<child>
<object class="GtkButton" id="hbutton1">
<property name="label" translatable="yes">Preferences</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="action-name">app.preferences</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="hbutton2">
<property name="label" translatable="yes">Download new episodes</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="action-name">win.downloadAllNew</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="hbutton3">
<property name="label" translatable="yes">Update channels</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="action-name">win.update</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
<style>
<class name="menu"/>
</style>
</object>
<object class="GtkWindow" id="progress_window">
<property name="can-focus">False</property>
<child>

View File

@ -303,6 +303,16 @@ class gPodder(BuilderWidget, dbus.service.Object):
if is_on_mobile_screen(self.main_window):
self.episodes_scrolled_window.connect(
'edge-overshot', self.on_episodes_scrolled_window_edge_overshot)
self.channels_scrolled_window.connect(
'edge-overshot', self.on_channels_scrolled_window_edge_overshot)
# FIXME:
def _hmenu_popdown(button):
self.header_popover.popdown()
self.hbutton1.connect('clicked', _hmenu_popdown)
self.hbutton2.connect('clicked', _hmenu_popdown)
self.hbutton3.connect('clicked', _hmenu_popdown)
# First-time users should be asked if they want to see the OPML
if self.options.subscribe:
@ -811,6 +821,10 @@ class gPodder(BuilderWidget, dbus.service.Object):
ev = Dummy(x=x, y=y, button=3)
return self.treeview_channels_show_context_menu(ev)
def on_channels_scrolled_window_edge_overshot(self, scrolled_window, pos, *args):
if pos == Gtk.PositionType.TOP:
self.header_popover.popup()
def on_treeview_episodes_button_released(self, treeview, event):
if event.window != treeview.get_bin_window():
return False