Pav*_*hov 9 python gdk screen-size
我试图让Guake终端在Unity中正常工作.它的窗口宽度等于屏幕宽度.但由于Unity左侧酒吧窗口的右边界变得无形.所以,我想为窗口设置合适的宽度.它必须小于实际窗口大小.并且代码必须在有或没有Unity的情况下正常工作.
这就是Guake如何确定其窗口的位置和大小:
def get_final_window_rect(self):
"""Gets the final size of the main window of guake. The height
is the window_height property, width is window_width and the
horizontal alignment is given by window_alignment.
"""
screen = self.window.get_screen()
height = self.client.get_int(KEY('/general/window_height'))
width = 100
halignment = self.client.get_int(KEY('/general/window_halignment'))
# get the rectangle just from the first/default monitor in the
# future we might create a field to select which monitor you
# wanna use
window_rect = screen.get_monitor_geometry(0)
total_width = window_rect.width
window_rect.height = window_rect.height * height / 100
window_rect.width = window_rect.width * width / 100
if width < total_width:
if halignment == ALIGN_CENTER:
window_rect.x = (total_width - window_rect.width) / 2
elif halignment == ALIGN_LEFT:
window_rect.x = 0
elif halignment == ALIGN_RIGHT:
window_rect.x = total_width - window_rect.width
window_rect.y = 0
window_rect.width = 250
return window_rect
Run Code Online (Sandbox Code Playgroud)
所以你想从你的total_width中减去unity启动器的宽度。可以使用 gconf 获取启动器图标的值来确定此大小:
self.client.get_int('/apps/compiz-1/plugins/unityshell/screen0/options/icon_size')
Run Code Online (Sandbox Code Playgroud)
当然你也想知道当前运行的会话是否确实是unity:
os.environ.get('DESKTOP_SESSION') == 'ubuntu'
Run Code Online (Sandbox Code Playgroud)
似乎是一个很好的解决方案。(http://stackoverflow.com/questions/2035657/what-is-my-current-desktop-environment)