Jos*_*osh 5 python x11 gtk dock ewmh
我有一个Python/Linux应用程序,它在GTK窗口中显示我需要的一些信息.出于本讨论的目的,它应该像Dock一样 - 存在于所有虚拟桌面上,并且最大化的窗口不会与它重叠.
第一点非常简单,但是我花了几天的时间猛烈地对着我的显示器试图获得第二点 - 防止重叠.如果另一个窗口最大化,我的应用程序不应该被覆盖.设置"永远在顶部"是不够的,因为其他窗口只是坐在我的信息栏后面而不是停在它的边缘.
简而言之:使用停靠/面板样式窗口,如何防止其他窗口在其上/下方最大化?
更新:由于vsemenov问题解决了
vls*_*vls 12
使用_NET_WM_STRUT和_NET_WM_STRUT_PARTIAL(对于向后兼容性)属性可在X Window System桌面边缘保留空间.
使用PyGtk,您可以像这样设置这些属性,假设self.window是gtk.Window的一个实例:
self.window.get_toplevel().show() # must call show() before property_change()
self.window.get_toplevel().window.property_change("_NET_WM_STRUT",
"CARDINAL", 32, gtk.gdk.PROP_MODE_REPLACE, [0, 0, 0, bottom_width])
Run Code Online (Sandbox Code Playgroud)
澄清上面的数据参数[0, 0, 0, bottom_width]:
此参数按顺序指定桌面屏幕每个边框的保留空间宽度:[left, right, top, bottom].因此[0, 0, 0, 50],在桌面屏幕的底部为您的小部件保留50个像素.
这是一个简单的工作示例:
import gtk
class PyGtkWidgetDockExample:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_default_size(100, gtk.gdk.screen_height())
self.window.move(gtk.gdk.screen_width()-100, 0)
self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DOCK)
self.window.show()
self.window.window.property_change("_NET_WM_STRUT", "CARDINAL", 32,
gtk.gdk.PROP_MODE_REPLACE, [0, 100, 0, 0])
app = PyGtkWidgetDockExample()
gtk.main()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2539 次 |
| 最近记录: |