Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get size of the screen excluding Unity side panel in GDK

I'm trying to make Guake terminal work correctly in Unity. Its window have width that is equal to screen width. But because of Unity left bar window's right border becomes invisible. So, I want to set proper width for window. It must be smaller than actual window size. And the code must work correctly with or without Unity.

This is how Guake determines position and size of its window:

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
like image 391
Pavel Strakhov Avatar asked May 06 '12 16:05

Pavel Strakhov


1 Answers

So you want to substract unity launcher width from your total_width. This size can be determined using gconf to get the value of launcher icons :

self.client.get_int('/apps/compiz-1/plugins/unityshell/screen0/options/icon_size')

of course you also want to know if the current running session is indeed unity :

os.environ.get('DESKTOP_SESSION')  == 'ubuntu'

seems to be a good solution. (http://stackoverflow.com/questions/2035657/what-is-my-current-desktop-environment)

like image 84
Tshirtman Avatar answered Sep 17 '22 20:09

Tshirtman