-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/114484/#review61957
-----------------------------------------------------------


I cringe at the negative-values hack, please make it an extra key.

- David Faure


On Dec. 16, 2013, 1:57 p.m., Thomas Lübking wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/114484/
> -----------------------------------------------------------
> 
> (Updated Dec. 16, 2013, 1:57 p.m.)
> 
> 
> Review request for kdelibs, Àlex Fiestas, Christoph Feck, and Martin Gräßlin.
> 
> 
> Bugs: 286146, 317760 and 324957
>     http://bugs.kde.org/show_bug.cgi?id=286146
>     http://bugs.kde.org/show_bug.cgi?id=317760
>     http://bugs.kde.org/show_bug.cgi?id=324957
> 
> 
> Repository: kdelibs
> 
> 
> Description
> -------
> 
> Due to the many patches arriving to kdelibs, i just thought to give it a try 
> ;-)
> 
> Notice that i did not align the non unix/x11 preproc branches, but will in 
> case it's accepted.
> 
> 
> tl; dr
> ======
> 
> situation now:
> --------------
> - on multiscreen setups with different sizes
>   * KMainWindow may open with the "wrong" size (286146)
>   * KMainWindow may open on the "wrong" (not active) screen
> - maximized KMainWindow re-opens maximized, but lost its unmaximized state
> - windows that randomly cover the maximum width of height will falsely open 
> maximized in that direction (317760)
> 
> situation after:
> ----------------
> - on multiscreen setups with different sizes
>   * KMainWindow will open with the last size
>   * KMainWindow will (usually, see details) open on the active screen
> - maximized KMainWindow re-opens maximized, unmaximizing will restore the 
> previous maximized size
> - we should be able to remove the kludge that causes bug #317760 from KWin 
> (KMainWindow is explicitly referenced there and the behavior is unspecified 
> and undocumented)
> 
> 
> --------------------------------------
> 
> En Detail
> =========
> 
> I started out by seeking a fix for bug #286146
> The issue here is that KMainWindow handles the size in relation to the 
> current screen resolution.
> The "current screen resolution" is the one of the screen where the window is.
> This happens *before* the WM places the window (eventually selecting another 
> screen)
> If the screen changes or if you just closed it on the other screen before, 
> you'll not get the size you'd expect (because it had a different size when 
> you closed it and/or even does not match the size stored for the screen it 
> opened on)
> 
> In addition to that, the size may be "too big" for the active screen (in 
> which case kwin will place it on the fitting screen rather than dropping 
> borders)
> 
> There're 5 possible solutions to this:
> 1. KWin does not alter the screen (ie. move the window to the "active" 
> screen) for the window
> 2. KMainWindow knows the target screen
> 3. KMainWindow anticipates the target screen
> 4. KMainWindow restores its size *after* being mapped and placed by the WM
> 5. KMainWindow treats the combined screens of the multiscreen as one for the 
> size management
> 
> ad 1)
> No. :) Plus, there'd be no guarantee for the behavior on other WMs
> 
> ad 2)
> Unfortunately NETWM is completely multiscreen unaware, so there's no protocol 
> in place, so it could be a KMainWindow & KWin related "solution" only
> 
> ad 3)
> KMainWindow would have to read kwinrc settings, plus same issue again: 
> KMainWindow & KWin related "solution" only
> 
> ad 4)
> Possible, but will cause visible flicker (user sees the window mapped with 
> original size and then resized) - we might hide that in the compositor, but 
> that would delay all window showing and be a KWin only solution again.
> 
> ad 5)
> proposed solution =)
> This is acceptable if users rather care about the size in relation to the 
> window than to the screen ("window shall open at size that I left behind, no 
> matter on which screen") and we can assume WMs to keep windows in workarea 
> bounds (like KWin does and a diminished issue to to the changed handling of 
> maximized windows, see next)
> 
> 
> "Unfortunately" that fix trapped me into bug #317760 on steroids.
> So far the maximization state was stored by storing "screenSize + 1", what, 
> for the change and a multiscreen setup like [1024x768+0+0; 1920x1200+1024+0] 
> means that the (formerly maximized on the XGA screen) window was restored to 
> 2944+1200, what KWin would thankfully punch into 1920x1200 and place it on 
> the WUXGA screen, so this approach had to go.
> 
> Using "screenSize(n) + 1" was equally not an option since that size could no 
> longer be reliably matched against anything (the size was read from the 
> combined screen size and chacking the available screens could fail because a 
> window could legally be closed at 1025x769 on the WUXGA screen)
> 
> The cleanest option would have been to store the state in an additional key 
> (see bug #51571, laptop + Tv became more popular since than, I guess) but due 
> to the kdelibs semi(?)-frozen state i simply used the sign for this purpose.
> -> One word and there'll be an extra key (wile unless anything else reads 
> this, the negative values are pretty "safe")
> 
> Since the size is no longer used to store the state, it was possible to just 
> preserve the unmaximized size and restore it alongside the maximization state.
> 
> And since the "maximized is screenSize + 1" kludge is gone in KMainWindow, we 
> could remove it from KWin in addition.
> 
> Thank you for reading until this point ;-)
> 
> 
> Diffs
> -----
> 
>   kdeui/widgets/kmainwindow.cpp 85beacc 
> 
> Diff: https://git.reviewboard.kde.org/r/114484/diff/
> 
> 
> Testing
> -------
> 
> KWin + Metacity; glib + unix event dispatcher.
> 
> 
> Thanks,
> 
> Thomas Lübking
> 
>

Reply via email to