实现Gedit风格的全屏HeaderBar

时间:2017-10-08 22:22:18

标签: python gtk3 gedit gobject

我正在使用 Gtk + 3 应用程序,该应用程序大部分时间都可能全屏使用,但需要在全屏和非全屏之间切换,同时保持对位于标题栏。问题是,由于标题栏是窗口装饰的一部分,当窗口全屏时它会被隐藏。

我当前的kludge所以确保控件始终可用如下:

设置

  • 创建一个Gtk.Window,其中Gtk.Box为第一个孩子
  • 创建自定义Gtk.HeaderBar(附加全屏幕togglebutton)
  • 将窗口的标题栏设置为我的自定义Gtk.HeaderBar
  • 将所有窗口内容添加到Gtk.Box

当窗口全屏显示时

  • Gtk.HeaderBar标题栏
  • 中删除Gtk.Window
  • Gtk.HeaderBar打包到Gtk.Box(窗口的第一个孩子)中。 这导致Gtk.HeaderBar位于窗口的底部,所以
  • Gtk.HeaderBar重新定位到Gtk.Box
  • 的顶部

当窗口取消全屏时

  • Gtk.HeaderBar
  • 中删除gtk.Box
  • 将其设为Gtk.Window的标题栏
    这导致以下 Gtk-warning gtk_window_set_titlebar() called on a realized window(谁在意,只是警告)

这很有效,但它看起来非常像一个黑客,而且比它本来应该更复杂。我错过了什么,有一种更简单的方法吗?

我知道有几个基于Gtk + 3的应用程序具有我追求的标题栏行为(例如gedit),但我无法确定如何实现它。任何见解将不胜感激。

此外,这里有一个GitHub要点,其中包含我当前hacky解决方案的完整工作示例:https://gist.github.com/KurtJacobson/6b045b6fc38907a2f18c38f6de2929e3

我会接受任何(编程)语言的答案。

0 个答案:

没有答案