Merging from old trunk:
r568991 | lunakl | 2006-08-02 18:27:34 +0200 (Wed, 02 Aug 2006) | 4 lines Argh, order the checks properly, it wasn't detecting correctly some cases when windows should belong together. svn path=/trunk/KDE/kdebase/workspace/; revision=659268
This commit is contained in:
parent
3dbb6fba21
commit
17182b9ccb
1 changed files with 11 additions and 6 deletions
17
group.cpp
17
group.cpp
|
@ -267,12 +267,22 @@ bool Toplevel::resourceMatch( const Toplevel* c1, const Toplevel* c2 )
|
|||
bool Client::belongToSameApplication( const Client* c1, const Client* c2, bool active_hack )
|
||||
{
|
||||
bool same_app = false;
|
||||
|
||||
// tests that definitely mean they belong together
|
||||
if( c1 == c2 )
|
||||
same_app = true;
|
||||
else if( c1->isTransient() && c2->hasTransient( c1, true ))
|
||||
same_app = true; // c1 has c2 as mainwindow
|
||||
else if( c2->isTransient() && c1->hasTransient( c2, true ))
|
||||
same_app = true; // c2 has c1 as mainwindow
|
||||
else if( c1->group() == c2->group())
|
||||
same_app = true; // same group
|
||||
else if( c1->wmClientLeader() == c2->wmClientLeader()
|
||||
&& c1->wmClientLeader() != c1->window() // if WM_CLIENT_LEADER is not set, it returns window(),
|
||||
&& c2->wmClientLeader() != c2->window()) // don't use in this test then
|
||||
same_app = true; // same client leader
|
||||
|
||||
// tests that mean they most probably don't belong together
|
||||
else if( c1->pid() != c2->pid()
|
||||
|| c1->wmClientMachine( false ) != c2->wmClientMachine( false ))
|
||||
; // different processes
|
||||
|
@ -284,17 +294,12 @@ bool Client::belongToSameApplication( const Client* c1, const Client* c2, bool a
|
|||
; // different apps
|
||||
else if( !sameAppWindowRoleMatch( c1, c2, active_hack ))
|
||||
; // "different" apps
|
||||
else if( c1->wmClientLeader() == c2->wmClientLeader()
|
||||
&& c1->wmClientLeader() != c1->window() // if WM_CLIENT_LEADER is not set, it returns window(),
|
||||
&& c2->wmClientLeader() != c2->window()) // don't use in this test then
|
||||
same_app = true; // same client leader
|
||||
else if( c1->group() == c2->group())
|
||||
same_app = true; // same group
|
||||
else if( c1->pid() == 0 || c2->pid() == 0 )
|
||||
; // old apps that don't have _NET_WM_PID, consider them different
|
||||
// if they weren't found to match above
|
||||
else
|
||||
same_app = true; // looks like it's the same app
|
||||
|
||||
return same_app;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue