Avoid infinite loop if somebody decides to use window-specific settings

to force being kept both above and below.

svn path=/trunk/kdebase/kwin/; revision=377750
This commit is contained in:
Luboš Luňák 2005-01-12 12:30:34 +00:00
parent 98609efbab
commit 693069f7bb

View file

@ -650,10 +650,9 @@ void Client::restackWindow( Window /*above TODO */, int detail, NET::RequestSour
void Client::setKeepAbove( bool b ) void Client::setKeepAbove( bool b )
{ {
b = rules()->checkKeepAbove( b ); b = rules()->checkKeepAbove( b );
if( b ) if( b && !rules()->checkKeepBelow( false ))
setKeepBelow( false ); setKeepBelow( false );
if ( b == keepAbove() if ( b == keepAbove())
|| ( b && keepBelow())) // forced below
{ // force hint change if different { // force hint change if different
if( bool( info->state() & NET::KeepAbove ) != keepAbove()) if( bool( info->state() & NET::KeepAbove ) != keepAbove())
info->setState( keepAbove() ? NET::KeepAbove : 0, NET::KeepAbove ); info->setState( keepAbove() ? NET::KeepAbove : 0, NET::KeepAbove );
@ -670,10 +669,9 @@ void Client::setKeepAbove( bool b )
void Client::setKeepBelow( bool b ) void Client::setKeepBelow( bool b )
{ {
b = rules()->checkKeepBelow( b ); b = rules()->checkKeepBelow( b );
if( b ) if( b && !rules()->checkKeepAbove( false ))
setKeepAbove( false ); setKeepAbove( false );
if ( b == keepBelow() if ( b == keepBelow())
|| ( b && keepAbove())) // forced above
{ // force hint change if different { // force hint change if different
if( bool( info->state() & NET::KeepBelow ) != keepBelow()) if( bool( info->state() & NET::KeepBelow ) != keepBelow())
info->setState( keepBelow() ? NET::KeepBelow : 0, NET::KeepBelow ); info->setState( keepBelow() ? NET::KeepBelow : 0, NET::KeepBelow );