From 4c7fcb58a72daa26995de25a2b21cda965429080 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubo=C5=A1=20Lu=C5=88=C3=A1k?= Date: Wed, 4 Aug 2004 14:26:34 +0000 Subject: [PATCH] Correctly replace edited entries and remove empty ones. svn path=/trunk/kdebase/kwin/; revision=336015 --- kcmkwin/kwinrules/main.cpp | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/kcmkwin/kwinrules/main.cpp b/kcmkwin/kwinrules/main.cpp index 8be47a3258..bd59d05918 100644 --- a/kcmkwin/kwinrules/main.cpp +++ b/kcmkwin/kwinrules/main.cpp @@ -140,18 +140,35 @@ static int edit( Window wid ) { QValueList< Rules* > rules; loadRules( rules ); - Rules* rule = findRule( rules, wid ); + Rules* orig_rule = findRule( rules, wid ); RulesDialog dlg; - rule = dlg.edit( rule, wid ); - if( rule == NULL ) // cancelled + // dlg.edit() creates new Rules instance + Rules* edited_rule = dlg.edit( orig_rule, wid ); + if( edited_rule == NULL ) // cancelled return 0; - if( rule->isEmpty()) + if( edited_rule->isEmpty()) { - delete rule; - return 0; + if( orig_rule == NULL ) + { // new, without any settings + delete edited_rule; + return 0; + } + else + { // removed all settings from already existing + rules.remove( orig_rule ); + delete orig_rule; + delete edited_rule; + } + } + else // not empty + { + QValueList< Rules* >::Iterator pos = rules.find( orig_rule ); + if( pos != rules.end()) + *pos = edited_rule; + else + rules.prepend( edited_rule ); + delete orig_rule; } - if( !rules.contains( rule )) - rules.prepend( rule ); saveRules( rules ); if( !kapp->dcopClient()->isAttached()) kapp->dcopClient()->attach();