73 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from cairocffi.test_xcb import xcffib
 | 
						|
from libqtile import hook, qtile
 | 
						|
 | 
						|
if qtile.core.name == "x11":
 | 
						|
    from libqtile.backend.x11.window import Window, Static
 | 
						|
else:
 | 
						|
    from libqtile.backend.wayland.window import Window, Static
 | 
						|
 | 
						|
 | 
						|
class KuroStatic(Static):
 | 
						|
 | 
						|
    @staticmethod
 | 
						|
    def create(window: Window, screen, x=None, y=None, width=None, height=None):
 | 
						|
        """Makes this window a static window, attached to a Screen
 | 
						|
 | 
						|
        If any of the arguments are left unspecified, the values given by the
 | 
						|
        window itself are used instead. So, for a window that's aware of its
 | 
						|
        appropriate size and location (like dzen), you don't have to specify
 | 
						|
        anything.
 | 
						|
        """
 | 
						|
        window.defunct = True
 | 
						|
        if isinstance(screen, int):
 | 
						|
            screen = window.qtile.screens[screen]
 | 
						|
        if window.group:
 | 
						|
            window.group.remove(window)
 | 
						|
        s = KuroStatic(window.window, window.qtile, screen, x, y, width, height)
 | 
						|
        window.qtile.windows_map[window.window.wid] = s
 | 
						|
        hook.fire("client_managed", s)
 | 
						|
        return s
 | 
						|
 | 
						|
    def __init__(self, win, qtile, screen, x=None, y=None, width=None, height=None):
 | 
						|
        Static.__init__(self, win, qtile, screen, x=x, y=y, width=width, height=height)
 | 
						|
        self.above = True
 | 
						|
        self.placed_x = x
 | 
						|
        self.placed_y = y
 | 
						|
        if None not in (x, y, width, height):
 | 
						|
            self.place(x, y, width, height, 0, 0, above=self.above)
 | 
						|
 | 
						|
    def set_above(self, above: bool):
 | 
						|
        self.above = above
 | 
						|
        self.reposition(self.placed_x, self.placed_y)
 | 
						|
 | 
						|
    def reposition(self, x, y, above=None):
 | 
						|
        self.placed_x = x
 | 
						|
        self.placed_y = y
 | 
						|
        if above is not None:
 | 
						|
            self.above = above
 | 
						|
        self.place(x, y, self.width, self.height, 0, 0, above=self.above)
 | 
						|
 | 
						|
    def handle_ConfigureRequest(self, e):
 | 
						|
        cw = xcffib.xproto.ConfigWindow
 | 
						|
        if self.conf_x is None and e.value_mask & cw.X:
 | 
						|
            self.x = e.x
 | 
						|
        if self.conf_y is None and e.value_mask & cw.Y:
 | 
						|
            self.y = e.y
 | 
						|
        if self.conf_width is None and e.value_mask & cw.Width:
 | 
						|
            self.width = e.width
 | 
						|
        if self.conf_height is None and e.value_mask & cw.Height:
 | 
						|
            self.height = e.height
 | 
						|
 | 
						|
        self.place(
 | 
						|
            self.screen.x + self.x,
 | 
						|
            self.screen.y + self.y,
 | 
						|
            self.width,
 | 
						|
            self.height,
 | 
						|
            self.borderwidth,
 | 
						|
            self.bordercolor,
 | 
						|
            above=self.above
 | 
						|
        )
 | 
						|
        return False
 | 
						|
 | 
						|
    def __repr__(self):
 | 
						|
        return "KuroStatic(%r)" % self.name
 |