<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
    <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="http://git.reviewboard.kde.org/r/105112/">http://git.reviewboard.kde.org/r/105112/</a>
     </td>
    </tr>
   </table>
   <br />








<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
 <p style="margin-top: 0;">On May 31st, 2012, 10:09 a.m., <b>Aaron J. Seigo</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  



<table width="100%" border="0" bgcolor="white" style="border: 1px solid #C0C0C0; border-collapse: collapse; margin: 2px padding: 2px;">
 <thead>
  <tr>
   <th colspan="4" bgcolor="#F0F0F0" style="border-bottom: 1px solid #C0C0C0; font-size: 9pt; padding: 4px 8px; text-align: left;">
    <a href="http://git.reviewboard.kde.org/r/105112/diff/1/?file=65943#file65943line42" style="color: black; font-weight: bold; text-decoration: underline;">plasma/desktop/applets/kickoff/core/recentapplications.cpp</a>
    <span style="font-weight: normal;">

     (Diff revision 1)

    </span>
   </th>
  </tr>
 </thead>

 <tbody style="background-color: #e4d9cb; padding: 4px 8px; text-align: center;">
  <tr>

   <td colspan="4"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">using namespace Kickoff;</pre></td>

  </tr>
 </tbody>



 
 




 <tbody>

  <tr>
    <th bgcolor="#e9eaa8" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">42</font></th>
    <td bgcolor="#fdfebc" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">       <span class="hl"> </span><span class="n"><span class="hl">KConfigGroup</span></span> <span class="n">recentGroup</span> <span class="o">=</span> <span class="n">componentData</span><span class="p">().</span><span class="n">config</span><span class="p">()</span><span class="o">-></span><span class="n">group</span><span class="p">(</span><span class="s">"RecentlyUsed"</span><span class="p">);</span></pre></td>
    <th bgcolor="#e9eaa8" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">42</font></th>
    <td bgcolor="#fdfebc" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">        <span class="n">recentGroup</span> <span class="o">=</span> <span class="n">componentData</span><span class="p">().</span><span class="n">config</span><span class="p">()</span><span class="o">-></span><span class="n">group</span><span class="p">(</span><span class="s">"RecentlyUsed"</span><span class="p">);</span></pre></td>
  </tr>

 </tbody>

</table>

  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">holding on to groups like this is a bit dangerous; you need to be able to know that the kconfig object behind it is always valid at all times. better to just create the group when needed.

a method that returns such a group on demand lets the code be shared, avoiding duplication of magic strings. e.g.:

KConfigGroup config()
{
    return componentData().config()->group("RecentlyUsed");
}</pre>
 </blockquote>





</blockquote>
<pre style="margin-left: 1em; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">I've been using the original version of the patch for several weeks and haven't run into any problems.  In theory, either holding a group should be safe or not, there can't be any middle ground. If it is unsafe, then a group may become invalid even between group("xxx") is called and its return result is "immediately" used. The _probability_ of the problem could be reduced, but correctness won't be increased nevertheless.
In any case, it was trivial to comply with this request, so I just did that.  I didn't create a separate config() method as was suggested, because the group is obtained in only a single place, save() method.</pre>
<br />

<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
 <p style="margin-top: 0;">On May 31st, 2012, 10:09 a.m., <b>Aaron J. Seigo</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  



<table width="100%" border="0" bgcolor="white" style="border: 1px solid #C0C0C0; border-collapse: collapse; margin: 2px padding: 2px;">
 <thead>
  <tr>
   <th colspan="4" bgcolor="#F0F0F0" style="border-bottom: 1px solid #C0C0C0; font-size: 9pt; padding: 4px 8px; text-align: left;">
    <a href="http://git.reviewboard.kde.org/r/105112/diff/1/?file=65943#file65943line77" style="color: black; font-weight: bold; text-decoration: underline;">plasma/desktop/applets/kickoff/core/recentapplications.cpp</a>
    <span style="font-weight: normal;">

     (Diff revision 1)

    </span>
   </th>
  </tr>
 </thead>

 <tbody style="background-color: #e4d9cb; padding: 4px 8px; text-align: center;">
  <tr>

   <td colspan="4"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">public:</pre></td>

  </tr>
 </tbody>






 
 

 <tbody>

  <tr>
    <th bgcolor="#f0f0f0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">76</font></th>
    <td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">        <span class="n">recentGroup</span><span class="p">.</span><span class="n">config</span><span class="p">()</span><span class="o">-></span><span class="n">sync</span><span class="p">();</span></pre></td>
    <th bgcolor="#f0f0f0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">77</font></th>
    <td bgcolor="#ffffff" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">        <span class="n">recentGroup</span><span class="p">.</span><span class="n">config</span><span class="p">()</span><span class="o">-></span><span class="n">sync</span><span class="p">();</span></pre></td>
  </tr>

 </tbody>

</table>

  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">it pains me to see such calls in paths which could be called quite often. yes, in theory should only happen when apps launch, but there is no guarantee that this will remain that way or that such events will not happen in rapid bursts.</pre>
 </blockquote>





</blockquote>
<pre style="margin-left: 1em; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">If you have better suggestions I am all ears :-)
Again, I haven't run into any issues with this patch myself...
Theoretically speaking, the bursts, if any, would be limited by human being capabilities anyway. And if the kickoff menu to be interacting with more than just the kickoff menu, then, I hope, this logic would get the major overhaul being discussed.  So this code (and the patch) would become irrelevant and the stuff would be done via zeitgeist (plus nepomuk, etc).
</pre>
<br />




<p>- Andriy</p>


<br />
<p>On July 4th, 2012, 7:57 a.m., Andriy Gapon wrote:</p>






<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('http://git.reviewboard.kde.org/media/rb/images/review_request_box_top_bg.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
 <tr>
  <td>

<div>Review request for Plasma and Trever Fischer.</div>
<div>By Andriy Gapon.</div>


<p style="color: grey;"><i>Updated July 4, 2012, 7:57 a.m.</i></p>






<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
 <table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Currently recent applications list in kickoff is saved only when kickoff gracefully exits.  This could be a minor annoyance when X/KDE/plasma crashes.  I think that saving the list on every update to it should be a good idea.  It should be a low overhead too, because the list changes only when a user launches an application via KDE.</pre>
  </td>
 </tr>
</table>




<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Bugs: </b>


 <a href="http://bugs.kde.org/show_bug.cgi?id=206511">206511</a>


</div>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>plasma/desktop/applets/kickoff/core/recentapplications.cpp <span style="color: grey">(3e05389)</span></li>

</ul>

<p><a href="http://git.reviewboard.kde.org/r/105112/diff/" style="margin-left: 3em;">View Diff</a></p>




  </td>
 </tr>
</table>








  </div>
 </body>
</html>