forked from Mirrors/apostrophe
Merge pull request #178 from UberWriter/ft.autohiding_headerbar
Use a .ui file to define the headerbarft.librem5
commit
1fc36c6fdc
|
@ -1,26 +1,8 @@
|
|||
build/lib.linux-x86_64-2.7
|
||||
*.pyc
|
||||
__pycache__/
|
||||
build/
|
||||
_build/
|
||||
debian/uberwriter/DEBIAN
|
||||
debian/uberwriter/opt
|
||||
debian/uberwriter/usr
|
||||
flatpak/*
|
||||
!flatpak/uberwriter.json
|
||||
!flatpak/de.wolfvollprecht.UberWriter.*
|
||||
!flatpak/flatpak_texlive.json
|
||||
!flatpak/texlive_install.sh
|
||||
!flatpak/python3-enchant.json
|
||||
!flatpak/python3-packages.json
|
||||
*.py~
|
||||
data/ui/shortcut_handlers
|
||||
*.ui~
|
||||
*.*~
|
||||
.vscode/
|
||||
.idea/
|
||||
*.glade~
|
||||
dist/uberwriter-2.0b0-py3.7.egg
|
||||
builddir/*
|
||||
dist/
|
||||
uberwriter.egg-info
|
||||
build-aux/flatpak/.flatpak-builder/*
|
||||
build-aux/*
|
|
@ -9,6 +9,7 @@
|
|||
<file compressed="true" preprocess="xml-stripblanks">ui/Recents.ui</file>
|
||||
<file compressed="true" preprocess="xml-stripblanks">ui/Shortcuts.ui</file>
|
||||
<file compressed="true" preprocess="xml-stripblanks">ui/Window.ui</file>
|
||||
<file compressed="true" preprocess="xml-stripblanks">ui/Headerbar.ui</file>
|
||||
<file compressed="true" preprocess="xml-stripblanks">About.ui</file>
|
||||
</gresource>
|
||||
</gresources>
|
||||
|
|
|
@ -0,0 +1,132 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.22.1 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.20"/>
|
||||
<object class="GtkImage" id="exit_fs_icon">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">view-restore-symbolic</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="search_icon">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">system-search-symbolic</property>
|
||||
</object>
|
||||
<object class="GtkHeaderBar" id="Headerbar">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="show_close_button">True</property>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="label" translatable="yes">New</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="action_name">app.new</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="label" translatable="yes">Open</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="action_name">app.open</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuButton" id="recents_button">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Open Recent</property>
|
||||
<property name="action_name">app.on_open_recent</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<style>
|
||||
<class name="linked"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="exit_fs_button">
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="no_show_all">True</property>
|
||||
<property name="action_name">app.fullscreen</property>
|
||||
<property name="image">exit_fs_icon</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuButton" id="menu_button">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<child>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Menu</property>
|
||||
<property name="icon_name">open-menu-symbolic</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Find</property>
|
||||
<property name="action_name">app.search</property>
|
||||
<property name="image">search_icon</property>
|
||||
<property name="always_show_image">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton">
|
||||
<property name="label" translatable="yes">Save</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="action_name">app.save</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack_type">end</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
|
@ -17,7 +17,10 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="valign">start</property>
|
||||
<property name="margin">6</property>
|
||||
<property name="margin_left">6</property>
|
||||
<property name="margin_right">6</property>
|
||||
<property name="margin_top">6</property>
|
||||
<property name="margin_bottom">6</property>
|
||||
<property name="filter">recent_md_filter</property>
|
||||
<property name="limit">20</property>
|
||||
<property name="show_icons">False</property>
|
||||
|
|
|
@ -414,7 +414,6 @@
|
|||
<child type="overlay">
|
||||
<object class="GtkEventBox" id="FullscreenEventbox">
|
||||
<property name="height_request">1</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="valign">start</property>
|
||||
<child>
|
||||
|
@ -423,14 +422,7 @@
|
|||
<property name="can_focus">False</property>
|
||||
<property name="valign">start</property>
|
||||
<child>
|
||||
<object class="GtkHeaderBar" id="FullscreenHeaderbar">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="valign">start</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
|
|
@ -31,9 +31,17 @@ class MainHeaderbar: #pylint: disable=too-few-public-methods
|
|||
"""
|
||||
|
||||
def __init__(self, app):
|
||||
self.hb = Gtk.HeaderBar().new() #pylint: disable=C0103
|
||||
self.hb.props.show_close_button = True
|
||||
self.hb.get_style_context().add_class("titlebar")
|
||||
|
||||
builder = Gtk.Builder()
|
||||
builder.add_from_resource(
|
||||
"/de/wolfvollprecht/UberWriter/ui/Headerbar.ui")
|
||||
|
||||
self.hb = builder.get_object("Headerbar")
|
||||
|
||||
self.menu_button = builder.get_object("menu_button")
|
||||
self.recents_button = builder.get_object("recents_button")
|
||||
|
||||
add_menus(self, app)
|
||||
|
||||
self.hb_revealer = Gtk.Revealer(name='titlebar-revealer')
|
||||
self.hb_revealer.add(self.hb)
|
||||
|
@ -47,9 +55,6 @@ class MainHeaderbar: #pylint: disable=too-few-public-methods
|
|||
self.hb_container.add(self.hb_revealer)
|
||||
self.hb_container.show()
|
||||
|
||||
self.btns = main_buttons(app)
|
||||
pack_main_buttons(self.hb, self.btns)
|
||||
|
||||
self.hb.show_all()
|
||||
|
||||
|
||||
|
@ -81,35 +86,35 @@ class FullscreenHeaderbar:
|
|||
"""Sets up and manages the fullscreen headerbar and his events
|
||||
"""
|
||||
|
||||
def __init__(self, builder, app):
|
||||
self.events = builder.get_object("FullscreenEventbox")
|
||||
self.revealer = builder.get_object(
|
||||
"FullscreenHbPlaceholder")
|
||||
self.revealer.show()
|
||||
self.revealer.set_reveal_child(False)
|
||||
def __init__(self, fs_builder, app):
|
||||
|
||||
self.hb = builder.get_object("FullscreenHeaderbar") #pylint: disable=C0103
|
||||
self.hb.get_style_context().add_class("titlebar")
|
||||
self.hb.show()
|
||||
self.events.hide()
|
||||
|
||||
self.btns = main_buttons(app)
|
||||
|
||||
fs_btn_exit = Gtk.Button().new_from_icon_name("view-restore-symbolic",
|
||||
Gtk.IconSize.BUTTON)
|
||||
fs_btn_exit.set_tooltip_text(_("Exit Fullscreen"))
|
||||
fs_btn_exit.set_action_name("app.fullscreen")
|
||||
|
||||
pack_main_buttons(self.hb, self.btns, fs_btn_exit)
|
||||
builder = Gtk.Builder()
|
||||
builder.add_from_resource(
|
||||
"/de/wolfvollprecht/UberWriter/ui/Headerbar.ui")
|
||||
|
||||
self.hb = builder.get_object("Headerbar")
|
||||
self.hb.set_show_close_button(False)
|
||||
self.hb.show_all()
|
||||
|
||||
self.menu_button = builder.get_object("menu_button")
|
||||
self.recents_button = builder.get_object("recents_button")
|
||||
|
||||
self.exit_fs_button = builder.get_object("exit_fs_button")
|
||||
self.exit_fs_button.set_visible(True)
|
||||
|
||||
add_menus(self, app)
|
||||
|
||||
self.events = fs_builder.get_object("FullscreenEventbox")
|
||||
self.revealer = fs_builder.get_object(
|
||||
"FullscreenHbPlaceholder")
|
||||
self.revealer.add(self.hb)
|
||||
|
||||
# this is a little tricky
|
||||
# we show hb when the cursor enters an area of 1 px at the top of the window
|
||||
# as the hb is shown the height of the eventbox grows to accomodate it
|
||||
self.events.connect('enter_notify_event', self.show_fs_hb)
|
||||
self.events.connect('leave_notify_event', self.hide_fs_hb)
|
||||
self.btns.menu.get_popover().connect('closed', self.hide_fs_hb)
|
||||
self.menu_button.get_popover().connect('closed', self.hide_fs_hb)
|
||||
|
||||
def show_fs_hb(self, _widget, _data=None):
|
||||
"""show headerbar of the fullscreen mode
|
||||
|
@ -119,34 +124,24 @@ class FullscreenHeaderbar:
|
|||
def hide_fs_hb(self, _widget, _data=None):
|
||||
"""hide headerbar of the fullscreen mode
|
||||
"""
|
||||
if self.btns.menu.get_active():
|
||||
if self.menu_button.get_active():
|
||||
pass
|
||||
else:
|
||||
self.revealer.set_reveal_child(False)
|
||||
|
||||
|
||||
def main_buttons(app):
|
||||
"""constructor for the headerbar buttons
|
||||
def add_menus(headerbar, app):
|
||||
|
||||
Returns:
|
||||
[NamedTupple] -- tupple of Gtk.Buttons
|
||||
"""
|
||||
|
||||
Button = namedtuple("Button", "new open_recent save search menu")
|
||||
btn = Button(Gtk.Button().new_with_label(_("New")),
|
||||
Gtk.Box().new(0, 0),
|
||||
Gtk.Button().new_with_label(_("Save")),
|
||||
Gtk.Button().new_from_icon_name("system-search-symbolic",
|
||||
Gtk.IconSize.BUTTON),
|
||||
Gtk.MenuButton().new())
|
||||
# Add menu model to the menu button
|
||||
|
||||
builder_window_menu = Gtk.Builder()
|
||||
builder_window_menu.add_from_resource(
|
||||
"/de/wolfvollprecht/UberWriter/ui/Menu.ui")
|
||||
model = builder_window_menu.get_object("Menu")
|
||||
|
||||
open_button = Gtk.Button().new_with_label(_("Open"))
|
||||
open_button.set_action_name("app.open")
|
||||
headerbar.menu_button.set_menu_model(model)
|
||||
|
||||
# Add recents menu to the open recents button
|
||||
|
||||
recents_builder = Gtk.Builder()
|
||||
recents_builder.add_from_resource(
|
||||
|
@ -159,44 +154,5 @@ def main_buttons(app):
|
|||
recents_wd = recents_builder.get_object("recent_md_widget")
|
||||
recents_wd.connect('item-activated', app.on_open_recent)
|
||||
|
||||
recents_button = Gtk.MenuButton().new()
|
||||
recents_button.set_image(Gtk.Image.new_from_icon_name("pan-down-symbolic",
|
||||
Gtk.IconSize.BUTTON))
|
||||
recents_button.set_tooltip_text(_("Open Recent"))
|
||||
recents_button.set_popover(recents)
|
||||
|
||||
btn.open_recent.get_style_context().add_class("linked")
|
||||
btn.open_recent.pack_start(open_button, False, False, 0)
|
||||
btn.open_recent.pack_end(recents_button, False, False, 0)
|
||||
|
||||
btn.search.set_tooltip_text(_("Find"))
|
||||
btn.menu.set_tooltip_text(_("Menu"))
|
||||
btn.menu.set_image(Gtk.Image.new_from_icon_name("open-menu-symbolic",
|
||||
Gtk.IconSize.BUTTON))
|
||||
btn.menu.set_use_popover(True)
|
||||
btn.menu.set_menu_model(model)
|
||||
btn.new.set_action_name("app.new")
|
||||
btn.save.set_action_name("app.save")
|
||||
btn.search.set_action_name("app.search")
|
||||
|
||||
return btn
|
||||
|
||||
|
||||
def pack_main_buttons(headerbar, btn, btn_exit=None):
|
||||
"""Pack the given buttons in the given headerbar
|
||||
|
||||
Arguments:
|
||||
headerbar {Gtk.HeaderBar} -- The headerbar where to put the buttons
|
||||
btn {Tupple of Gtk.Buttons} -- The buttons to pack
|
||||
|
||||
Keyword Arguments:
|
||||
btn_exit {Gtk.Button} -- Optional exit fullscreen button (default: {None})
|
||||
"""
|
||||
|
||||
headerbar.pack_start(btn.new)
|
||||
headerbar.pack_start(btn.open_recent)
|
||||
if btn_exit:
|
||||
headerbar.pack_end(btn_exit)
|
||||
headerbar.pack_end(btn.menu)
|
||||
headerbar.pack_end(btn.search)
|
||||
headerbar.pack_end(btn.save)
|
||||
headerbar.recents_button.set_popover(recents)
|
||||
headerbar.recents_button.set_sensitive(True)
|
||||
|
|
Loading…
Reference in New Issue