diff --git a/rules.h b/rules.h --- a/rules.h +++ b/rules.h @@ -115,7 +115,7 @@ void write(KConfigGroup&) const; bool isEmpty() const; #ifndef KCMRULES - void discardUsed(bool withdrawn); + bool discardUsed(bool withdrawn); bool match(const AbstractClient* c) const; bool update(AbstractClient*, int selection); bool isTemporary() const; diff --git a/rules.cpp b/rules.cpp --- a/rules.cpp +++ b/rules.cpp @@ -686,17 +686,22 @@ #define DISCARD_USED_SET_RULE( var ) \ do { \ - if ( var##rule == ( SetRule ) ApplyNow || ( withdrawn && var##rule == ( SetRule ) ForceTemporarily )) \ + if ( var##rule == ( SetRule ) ApplyNow || ( withdrawn && var##rule == ( SetRule ) ForceTemporarily )) { \ var##rule = UnusedSetRule; \ + changed = true; \ + } \ } while ( false ) #define DISCARD_USED_FORCE_RULE( var ) \ do { \ - if ( withdrawn && var##rule == ( ForceRule ) ForceTemporarily ) \ + if ( withdrawn && var##rule == ( ForceRule ) ForceTemporarily ) { \ var##rule = UnusedForceRule; \ + changed = true; \ + } \ } while ( false ) -void Rules::discardUsed(bool withdrawn) +bool Rules::discardUsed(bool withdrawn) { + bool changed = false; DISCARD_USED_FORCE_RULE(placement); DISCARD_USED_SET_RULE(position); DISCARD_USED_SET_RULE(size); @@ -732,6 +737,8 @@ DISCARD_USED_FORCE_RULE(strictgeometry); DISCARD_USED_SET_RULE(shortcut); DISCARD_USED_FORCE_RULE(disableglobalshortcuts); + + return changed; } #undef DISCARD_USED_SET_RULE #undef DISCARD_USED_FORCE_RULE @@ -1115,8 +1122,9 @@ it != m_rules.end(); ) { if (c->rules()->contains(*it)) { - updated = true; - (*it)->discardUsed(withdrawn); + if ((*it)->discardUsed(withdrawn)) { + updated = true; + } if ((*it)->isEmpty()) { c->removeRule(*it); Rules* r = *it;