Bug 199910

Summary: [PATCH] Background dolphin windows goes up of one level when opening properties dialog
Product: [Plasma] kwin Reporter: FiNeX <finex>
Component: generalAssignee: KWin default assignee <kwin-bugs-null>
Status: RESOLVED FIXED    
Severity: normal    
Priority: NOR    
Version: git master   
Target Milestone: ---   
Platform: Compiled Sources   
OS: Linux   
Latest Commit: Version Fixed In:
Attachments: functional patch (original code is only commented, not deleted)
Handle recursive transients

Description FiNeX 2009-07-12 19:33:46 UTC
Steps to reproduce:
1) open a dolphin window, call this window "A".
2) open another window (another application, konqueror for example), call this window "B".
3) open a new dolphin window, call this window "C".
-> now we have "A" below "B" which is below "C".
4) select a file on "C" and press ALT+Enter: this will open a properties dialog window
-> now the window order (from bottom to top) is: B, A and C.

I hope to have correclty explained the problem. I'm not sure this is a dolphin problem, maybe it could be a kwin one.
Comment 1 Thomas Lübking 2009-07-12 21:35:46 UTC
confirmed, does not happen with compiz

actually the other window is raised as soon as the dialog takes the focus (try increasing the focus stealing prevention to extreme)

the dialog is /not/ modal and transient to the window it's opened from /only/

i nevertheless suspect it's related to the two dolphin windows being children of the same process...
Comment 2 Thomas Lübking 2009-07-12 21:58:10 UTC
i assume layers.cpp:393ff is the "trouble" causer
if a transient window is raised all group members are raised instead just 
"c->transientFor()"
unfortunately i cannot test atm (need to rebuild kdelibs before...)
Comment 3 Thomas Lübking 2009-07-15 23:15:40 UTC
ok, this "fixes" it - i.e. the result is as expected (only the dialog parenting dolphin window is raised in case - lilke in compiz)

question:
is the current behaviour intended (like helping out theGimp or so?)
Comment 4 Thomas Lübking 2009-08-21 01:54:29 UTC
Created attachment 36317 [details]
functional patch (original code is only commented, not deleted)
Comment 5 lucas 2009-08-21 04:28:35 UTC
Patch does not take into account recursive transients.
Comment 6 Thomas Lübking 2009-08-21 04:55:47 UTC
Created attachment 36318 [details]
Handle recursive transients

Would it be necessary to also catch cyclic transients, i.e. e.g. A -> B -> C -> D -> B

while ((transient_parent = transient_parent->transientFor()) &&
           !transient_parent.contains(transient_parent))
Comment 7 lucas 2009-10-03 16:16:07 UTC
Patch is fine to commit.
Comment 8 Thomas Lübking 2009-10-03 17:41:01 UTC
SVN commit 1030954 by luebking:

don't raise the whole group with a transient, but only its ancestors
BUG: 199910


 M  +6 -4      layers.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1030954