<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>
<pre><font class="Apple-style-span" size="2" face="Tahoma">On Sunday, December 5, 2010, Steven Sroka wrote:<br>&gt; I'm assuming the settingsChanged() signal is emitted twice, once by 'Apply'<br>&gt; and once by 'OK'. Is there anyway to stop the signal from emitting from<br>&gt; the 'OK' button if the settings aren't changed (because the 'Apply' button<br>&gt; has already emitted the signal and done all the necessary work)?<br> <br>yes. and now that i understand what you are trying to accomplish ... :)<br> <br>the problem is in BackgroundDialog::saveConfig in <br>kdebase/workspace/libs/plasmagenericshell/backgrounddialog.cpp<br> <br>it is called when apply or ok is clicked and it unconditionally resets the <br>wallpaper. it probably needs to track when the wallpaper settings actually <br>change. right now it does this:<br> <br>connect(wallpaperWidget, SIGNAL(modified(bool)), this, <br>SLOT(settingsModified(bool)));<br> <br>settingsModified is a generic "something's changed" handler; a new slot could <br>be added that calls settingsModified, but which also tracks that value for the <br>wallpaper itself and if no changes have been made to the wallpaper config, <br>just not reset it.<br></font></pre><pre><font class="Apple-style-span" size="2" face="Tahoma">-------------------------------------------------------------------------------------------------------------------------------</font></pre><pre><font class="Apple-style-span" size="2" face="Tahoma">I see, now I know what to look for.</font></pre><pre><font class="Apple-style-span" size="2" face="Tahoma">I noticed that BackgroundDialog keeps track if there are changes made through BackgroundDialog::hasChanged()</font></pre><pre><font class="Apple-style-span" size="2" face="Tahoma">Would it be possible to add at the very beginning of BackgroundDialog::saveConfig(),</font></pre><pre><font class="Apple-style-span" size="2" face="Tahoma"></font><span class="Apple-style-span" style="font-family: Tahoma; font-size: 10pt; ">if( !hasChanged() ) {</span></pre><pre><span class="Apple-style-span" style="font-family: Tahoma; font-size: 10pt; "> return;</span></pre><pre><span class="Apple-style-span" style="font-family: Tahoma; font-size: 10pt; ">}</span></pre><pre><span class="Apple-style-span" style="font-family: Tahoma; font-size: 10pt; ">or</span></pre><pre><font class="Apple-style-span" size="2" face="Tahoma"><meta http-equiv="content-type" content="text/html; charset=utf-8"><span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal; font-size: 12pt; "><pre style="text-indent: 0px !important; "><span class="Apple-style-span" style="text-indent: 0px !important; font-family: Tahoma; font-size: 10pt; ">if( hasChanged() ) {</span></pre></span><span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal; font-size: 12pt; "><pre style="text-indent: 0px !important; "><span class="Apple-style-span" style="text-indent: 0px !important; font-family: Tahoma; font-size: 10pt; "> //the existing code that is run when a setting is changed.</span></pre></span><span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal; font-size: 12pt; "><pre style="text-indent: 0px !important; "><span class="Apple-style-span" style="text-indent: 0px !important; font-family: Tahoma; font-size: 10pt; ">}</span></pre></span></font></pre>                                               </body>
</html>