awesomeWM / awesome

awesome window manager
https://awesomewm.org/
GNU General Public License v2.0
6.36k stars 597 forks source link

New maximized window size is calculated incorrectly #3003

Open Perlovka opened 4 years ago

Perlovka commented 4 years ago

awesome v4.3-735-g002ecfd4-dirty (Too long) • Compiled against Lua 5.1.5 (running with LuaJIT 2.1.0-beta3) • API level: 4 • D-Bus support: yes • xcb-errors support: no • execinfo support: yes • xcb-randr version: 1.6 • LGI version: 0.9.2 • Transparency enabled: yes • Custom search paths: no

Hi, with current master I have an issue with maximized windows, New maximized client (like firefox or chrome) size is calculated wrong, so window overlaps my bottom panel. This also happens with all maximized clients upon awesome restart.

Unmaximize and maximize does fix window size.

This behavior was introduced with https://github.com/awesomeWM/awesome/commit/04c757322c079a8b9f13a51d0dc4c37e5a5b7965

Here is my config: rc.lua.txt rc_rules.lua.txt

Perlovka commented 4 years ago

awesome-bug

Elv13 commented 4 years ago

Do you know if it worked in v4.3? There is 3 changes that come to my mind that touched this code.

Another way it can happen is if you have code that messed with the border_width in client "manage" callbacks.

Perlovka commented 4 years ago

Yes, from 4.3 and till c10bdc3cfec1c86b11eb929f5e2564babade8206 it works as expected. This was introduced with 04c757322c079a8b9f13a51d0dc4c37e5a5b7965, as I said. The only code I have with border_width - some definitions in rules, nothing in callbacks:

~/.config/awesome $ grep -r border_width | grep -v '\--'
themes/default/theme.lua:theme.border_width  = dpi(1)
widgets/volume.lua:            border_width = 1,
widgets/volume.lua:                handle_border_width = 1,
rc_rules.lua:            border_width = beautiful.border_width,
rc_rules.lua:    { rule_any = { class = { "exefile.exe" }}, properties = { titlebars_enabled = false, screen = 1, border_width = 0 }},
rc_rules.lua:    { rule = { instance = "explorer.exe" }, properties = { titlebars_enabled = false, border_width = 0, floating = true }},
kdrobnyh commented 3 years ago

Oh, I have the same issue. Is anyone working on it?

Perlovka commented 3 years ago

It is possible to fix this by adding

    awful.titlebar(c, {size = 22})
    if c.maximized then
        c.height = c.height - 22
    end

At the end of this function https://awesomewm.org/apidoc/documentation/05-awesomerc.md.html#Titlebars I.e. set titlebar height and recalculate client height

Perlovka commented 2 years ago

So the problem is that client placement is done before request::titlebars is emitted. Creating titlebar should emit some signal to repair geometry, like

awful/permissions/init.lua:client.connect_signal("property::border_width" , repair_geometry)

or placement should be done after creating titlebar.

This is a trace of maximized client upon restart:

client.connect_signal("property::geometry", function(c)
    if c.window == 29360878 then
    require("gears.debug").dump{
        window_id = c.window,
        client = c,
        geometry = c:geometry(),
        traceback = debug.traceback()
    }
    end
end)
table: 0x7f28e0264a30
  traceback : stack traceback:
    /home/perlovka/.config/awesome/rc.lua:288: in function </home/perlovka/.config/awesome/rc.lua:282> (string)
  window_id : 29360878 (number)
  geometry : table: 0x7f28e02650d0
    y : 0 (number)
    height : 1029 (number)
    width : 1920 (number)
    x : 1920 (number)
  client : window/client(): 0x7f28d3eafe78 (client)

table: 0x7f28e0043590
  traceback : stack traceback:
    /home/perlovka/.config/awesome/rc.lua:288: in function </home/perlovka/.config/awesome/rc.lua:282>
    [C]: in function 'geometry'
    /usr/share/awesome/lib/awful/placement.lua:406: in function 'area_common'
    /usr/share/awesome/lib/awful/placement.lua:446: in function 'geometry_common'
    /usr/share/awesome/lib/awful/placement.lua:1603: in function </usr/share/awesome/lib/awful/placement.lua:1583>
    /usr/share/awesome/lib/awful/permissions/init.lua:421: in function </usr/share/awesome/lib/awful/permissions/init.lua:365> (string)
  window_id : 29360878 (number)
  geometry : table: 0x7f28e0054f88
    y : 0 (number)
    height : 1050 (number)
    width : 1920 (number)
    x : 1920 (number)
  client : window/client((333) Как отлÐ...): 0x7f28d3eafe78 (client)

table: 0x7f28e0035670
  traceback : stack traceback:
    /home/perlovka/.config/awesome/rc.lua:288: in function </home/perlovka/.config/awesome/rc.lua:282>
    [C]: at 0x556df1c700c0
    /usr/share/awesome/lib/awful/titlebar.lua:820: in function 'titlebar'
    /home/perlovka/.config/awesome/rc.lua:249: in function </home/perlovka/.config/awesome/rc.lua:236>
    [C]: in function 'emit_signal'
    /usr/share/awesome/lib/ruled/client.lua:671: in function '_execute'
    /usr/share/awesome/lib/gears/matcher.lua:649: in function 'apply'
    /usr/share/awesome/lib/ruled/client.lua:303: in function </usr/share/awesome/lib/ruled/client.lua:302> (string)
  window_id : 29360878 (number)
  geometry : table: 0x7f28e23fdbe0
    y : 0 (number)
    height : 1071 (number)
    width : 1920 (number)
    x : 1920 (number)
  client : window/client((333) Как отлÐ...): 0x7f28d3eafe78 (client)
Perlovka commented 2 years ago

But not maximized window does not call placement.lua at all and the size is ok.... Strange.

table: 0x7f7508dc6228
  window_id : 29360878 (number)
  traceback : stack traceback:
    /home/perlovka/.config/awesome/rc.lua:291: in function </home/perlovka/.config/awesome/rc.lua:285> (string)
  client : window/client(): 0x7f7508dc59a8 (client)
  geometry : table: 0x7f7508dc62d8
    width : 1900 (number)
    height : 1009 (number)
    x : 1926 (number)
    y : 6 (number)

table: 0x7f7508dcb5a0
  window_id : 29360878 (number)
  traceback : stack traceback:
    /home/perlovka/.config/awesome/rc.lua:291: in function </home/perlovka/.config/awesome/rc.lua:285>
    [C]: at 0x564af16990c0
    /usr/share/awesome/lib/awful/titlebar.lua:820: in function 'titlebar'
    /home/perlovka/.config/awesome/rc.lua:249: in function </home/perlovka/.config/awesome/rc.lua:236>
    [C]: in function 'emit_signal'
    /usr/share/awesome/lib/ruled/client.lua:671: in function '_execute'
    /usr/share/awesome/lib/gears/matcher.lua:649: in function 'apply'
    /usr/share/awesome/lib/ruled/client.lua:303: in function </usr/share/awesome/lib/ruled/client.lua:302> (string)
  client : window/client((337) Как отлÐ...): 0x7f7508dc59a8 (client)
  geometry : table: 0x7f7508dcb650
    width : 1900 (number)
    height : 1030 (number)
    x : 1926 (number)
    y : 6 (number)
Perlovka commented 2 years ago

Also, when toggling titlebar with hotkeys, non-maximized window gets resized, so client size remains the same. Maximized window is not being resized, so client becomes bigger or smaller. I mean outer dimensions of visible window.

Non-maximized:

table: 0x7fbe80a2d7a8
  window_id : 29360878 (number)
  traceback : stack traceback:
    /home/perlovka/.config/awesome/rc.lua:291: in function </home/perlovka/.config/awesome/rc.lua:285>
    [C]: at 0x56044fb5b0c0
    /usr/share/awesome/lib/awful/titlebar.lua:820: in function 'new'
    /usr/share/awesome/lib/awful/titlebar.lua:891: in function 'show'
    /usr/share/awesome/lib/awful/titlebar.lua:918: in function 'toggle'
    /home/perlovka/.config/awesome/rc_bindings.lua:228: in function 'on_press'
    /usr/share/awesome/lib/awful/key.lua:338: in function </usr/share/awesome/lib/awful/key.lua:333> (string)
  client : window/client((338) Как отлÐ...): 0x7fbe8c8db068 (client)
  geometry : table: 0x7fbe80a2d858
    width : 1900 (number)
    x : 1926 (number)
    y : 6 (number)
    height : 529 (number)
table: 0x7fbe809f0b08
  window_id : 29360878 (number)
  traceback : stack traceback:
    /home/perlovka/.config/awesome/rc.lua:291: in function </home/perlovka/.config/awesome/rc.lua:285>
    [C]: in function 'geometry'
    /usr/share/awesome/lib/awful/layout/init.lua:267: in function </usr/share/awesome/lib/awful/layout/init.lua:255>
    [C]: in function 'xpcall'
    /usr/share/awesome/lib/gears/protected_call.lua:41: in function 'protected_call'
    /usr/share/awesome/lib/awful/layout/init.lua:255: in function </usr/share/awesome/lib/awful/layout/init.lua:245>
    [C]: in function 'xpcall'
    /usr/share/awesome/lib/gears/protected_call.lua:41: in function 'protected_call'
    /usr/share/awesome/lib/gears/timer.lua:280: in function </usr/share/awesome/lib/gears/timer.lua:278> (string)
  client : window/client((338) Как отлÐ...): 0x7fbe8c8db068 (client)
  geometry : table: 0x7fbe809f0bb8
    width : 1900 (number)
    x : 1926 (number)
    y : 6 (number)
    height : 508 (number)
table: 0x7fbe80a00f90
  window_id : 29360878 (number)
  traceback : stack traceback:
    /home/perlovka/.config/awesome/rc.lua:291: in function </home/perlovka/.config/awesome/rc.lua:285>
    [C]: at 0x56044fb5b0c0
    /usr/share/awesome/lib/awful/titlebar.lua:902: in function 'hide'
    /usr/share/awesome/lib/awful/titlebar.lua:920: in function 'toggle'
    /home/perlovka/.config/awesome/rc_bindings.lua:228: in function 'on_press'
    /usr/share/awesome/lib/awful/key.lua:338: in function </usr/share/awesome/lib/awful/key.lua:333> (string)
  client : window/client((338) Как отлÐ...): 0x7fbe8c8db068 (client)
  geometry : table: 0x7fbe80a01040
    width : 1900 (number)
    x : 1926 (number)
    y : 6 (number)
    height : 487 (number)
table: 0x7fbe80a03da0
  window_id : 29360878 (number)
  traceback : stack traceback:
    /home/perlovka/.config/awesome/rc.lua:291: in function </home/perlovka/.config/awesome/rc.lua:285>
    [C]: in function 'geometry'
    /usr/share/awesome/lib/awful/layout/init.lua:267: in function </usr/share/awesome/lib/awful/layout/init.lua:255>
    [C]: in function 'xpcall'
    /usr/share/awesome/lib/gears/protected_call.lua:41: in function 'protected_call'
    /usr/share/awesome/lib/awful/layout/init.lua:255: in function </usr/share/awesome/lib/awful/layout/init.lua:245>
    [C]: in function 'xpcall'
    /usr/share/awesome/lib/gears/protected_call.lua:41: in function 'protected_call'
    /usr/share/awesome/lib/gears/timer.lua:280: in function </usr/share/awesome/lib/gears/timer.lua:278> (string)
  client : window/client((338) Как отлÐ...): 0x7fbe8c8db068 (client)
  geometry : table: 0x7fbe80a03e50
    width : 1900 (number)
    x : 1926 (number)
    y : 6 (number)
    height : 508 (number)

Maximized:

table: 0x7fbe807f8890
  window_id : 29360878 (number)
  traceback : stack traceback:
    /home/perlovka/.config/awesome/rc.lua:291: in function </home/perlovka/.config/awesome/rc.lua:285>
    [C]: at 0x56044fb5b0c0
    /usr/share/awesome/lib/awful/titlebar.lua:820: in function 'new'
    /usr/share/awesome/lib/awful/titlebar.lua:891: in function 'show'
    /usr/share/awesome/lib/awful/titlebar.lua:918: in function 'toggle'
    /home/perlovka/.config/awesome/rc_bindings.lua:228: in function 'on_press'
    /usr/share/awesome/lib/awful/key.lua:338: in function </usr/share/awesome/lib/awful/key.lua:333> (string)
  client : window/client((338) Как отлÐ...): 0x7fbe8c8db068 (client)
  geometry : table: 0x7fbe807f8940
    width : 1920 (number)
    x : 1920 (number)
    y : 0 (number)
    height : 1071 (number)
table: 0x7fbe8080d6b8
  window_id : 29360878 (number)
  traceback : stack traceback:
    /home/perlovka/.config/awesome/rc.lua:291: in function </home/perlovka/.config/awesome/rc.lua:285>
    [C]: at 0x56044fb5b0c0
    /usr/share/awesome/lib/awful/titlebar.lua:902: in function 'hide'
    /usr/share/awesome/lib/awful/titlebar.lua:920: in function 'toggle'
    /home/perlovka/.config/awesome/rc_bindings.lua:228: in function 'on_press'
    /usr/share/awesome/lib/awful/key.lua:338: in function </usr/share/awesome/lib/awful/key.lua:333> (string)
  client : window/client((338) Как отлÐ...): 0x7fbe8c8db068 (client)
  geometry : table: 0x7fbe8080d768
    width : 1920 (number)
    x : 1920 (number)
    y : 0 (number)
    height : 1050 (number)