[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1026884: Re : Bug#1026884: xfwm4: Reserved space through _NET_WM_STRUT property ignored



On 25/12/2022 20:23:59, Yves-Alexis Perez wrote:
control: tag -1 unreproducible moreinfo

On Fri, 2022-12-23 at 13:38 +0100, Sébastien Dufromentel wrote:
> Since the 4.18, it looks like Xfwm ignore such property: when I maximize some > windows, they take the whole screen size and thus cover those reserved spaces, > which is a bit problematic. The other WM I have on this computer, Compiz and > Sawfish, still reserve space perfectly. I rollbacked to 4.16 using the bullseye > package, and it works again too, so it looks like something very specific to
> this version of this particular WM.

Hi Sébastien, could you add more details on your configuration and especially which applications use those reserved spaces? I didn't experience this issue
here at least with a standard Xfce desktop (so with xfce4-panel).

Regards,
--
Yves-Alexis


Hi there, sorry for the response delay.

I indeed use a custom environment with Xfwm and not the classical Xfce. I just launch xfwm4 and some hand-made applications at startup through a ~/.xsession script.

Here's attached a minimal script (using Python3/Xlib) to create a panel window reserving space at the top of the screen. When Xfwm 4.16 (or any other classical WM) is running in a standalone way, space is indeed avoided by the maximized window, so we have the panel and the maximized window's titlebar next to each other; but when Xfwm 4.18 is running, strut is ignored and the panel and the maximized window's titlebar end at the exact same location.

Hope it'll help.

Regards,
#! /bin/python3
# coding: Utf-8

import time, array
import Xlib.display

disp = Xlib.display.Display()
screen = disp.screen()
geom = screen.root.get_geometry()

panel = screen.root.create_window(0, 0, geom.width, 24, 0,
    screen.root_depth, background_pixel=0xFF00FF00)
panel.change_property(disp.intern_atom("_NET_WM_WINDOW_TYPE"),
    disp.intern_atom("ATOM"), 32, array.array("I",
        (disp.intern_atom("_NET_WM_WINDOW_TYPE_DOCK"),)))
panel.change_property(disp.intern_atom("_NET_WM_STRUT"),
    disp.intern_atom("CARDINAL"), 32, array.array("I", (0, 0, 24, 0)))
panel.map()

while True:
    while disp.pending_events() > 0:
        ev = disp.next_event()
    time.sleep(0.01)

Reply to: