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:
Luboš Luňák 2007-04-29 21:04:13 +00:00
parent 3dbb6fba21
commit 17182b9ccb

View file

@ -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;
}