Use _NET_WM_STRUT
and _NET_WM_STRUT_PARTIAL
(for backwards compatibility) properties to reserve space at the edge of X Window System desktop.
With PyGtk you can set these properties like so, assuming self.window is an instance of 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])
Clarification on the data parameter [0, 0, 0, bottom_width]
in above:
This parameter specifies the width of reserved space at each border of the desktop screen in order: [left, right, top, bottom]
. So [0, 0, 0, 50]
would reserve 50 pixels at the bottom of the desktop screen for your widget.
Here is a simple working example:
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()
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…