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










<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
 <p style="margin-top: 0;">On Oktober 17th, 2014, 10:12 nachm. UTC, <b>Kevin Kofler</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="https://git.reviewboard.kde.org/r/120627/diff/1/?file=320275#file320275line132" style="color: black; font-weight: bold; text-decoration: underline;">main.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; ">static const char version[] = "4.1.3";</pre></td>

  </tr>
 </tbody>



 
 

 <tbody>

  <tr>
    <th bgcolor="#e9eaa8" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">126</font></th>
    <td bgcolor="#fdfebc" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="tb">   </span><span class="tb">  </span><span class="tb">  </span><span class="tb">  </span><span class="tb">  </span><span class="n">ks</span><span class="o">-></span><span class="n">openDiff</span><span class="p">(</span> <span class="n">args</span><span class="o"><span class="hl">-></span></span><span class="n"><span class="hl">url</span></span><span class="p">(</span> <span class="mi">0</span> <span class="p">)</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">130</font></th>
    <td bgcolor="#fdfebc" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="tb">   </span><span class="tb">  </span><span class="tb">  </span><span class="tb">  </span><span class="tb">  </span><span class="n">ks</span><span class="o">-></span><span class="n">openDiff</span><span class="p">(</span> <span class="n">args</span><span class="p"><span class="hl">.</span></span><span class="n"><span class="hl">at</span></span><span class="p">(</span> <span class="mi">0</span> <span class="p">)</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;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">I think this now needs something like:
QDir::isAbsolutePath(args.at(0)) ? QUrl::fromLocalFile(args.at(0)) : QUrl(args.at(0))</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">QUrl really needs a static method for that, neither the constructor, nor fromLocalFile, nor fromUserInput do the right thing in this context. I'm going to ask on kde-core-devel if I'm missing something.</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">This shows up so often in this function that it might be worth putting it into a helper function.</p></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;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">So, we should definitely put whatever we use in a wrapper function, because:
1. That way, it's easy to fix whatever we wrote if we run into some corner case where it doesn't work.
2. From Qt 5.4 onwards, one can write:
   QUrl::fromUserInput(arg, QDir::currentPath(), QUrl::AssumeLocalFile)
   (see http://doc-snapshot.qt-project.org/qt5-5.4/qurl.html#fromUserInput-2)
   which should do exactly what we want. (Unfortunately, that overload is new in 5.4. Thanks to Lukáš Tinkl for pointing me to it.)</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">The exact code Qt 5.4 uses is:
https://qt.gitorious.org/qt/qtbase/commit/31ce6f50c679e61dc53f09ee1b1637918da38a82
If we're writing a function anyway, we may as well use that logic, as in:</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;"><div class="codehilite" style="background: #f8f8f8"><pre style="line-height: 125%">QUrl <span style="color: #0000FF">urlFromArg</span>(<span style="color: #008000; font-weight: bold">const</span> QString<span style="color: #666666">&</span> arg)
{
<span style="color: #BC7A00">#if QT_VERSION >= 0x050400</span>
    <span style="color: #008000; font-weight: bold">return</span> QUrl<span style="color: #666666">::</span>fromUserInput(arg, QDir<span style="color: #666666">::</span>currentPath(), QUrl<span style="color: #666666">::</span>AssumeLocalFile);
<span style="color: #BC7A00">#else</span>
    <span style="color: #408080; font-style: italic">// Logic from QUrl::fromUserInput(QString, QString, UserInputResolutionOptions)</span>
    QUrl testUrl <span style="color: #666666">=</span> QUrl(arg, QUrl<span style="color: #666666">::</span>TolerantMode);
    <span style="color: #008000; font-weight: bold">if</span> (testUrl.isRelative() <span style="color: #666666">&&</span> <span style="color: #666666">!</span>QDir<span style="color: #666666">::</span>isAbsolutePath(arg)) {
        QFileInfo fileInfo(QDir<span style="color: #666666">::</span>current(), arg);
        <span style="color: #008000; font-weight: bold">return</span> QUrl<span style="color: #666666">::</span>fromLocalFile(fileInfo.absoluteFilePath());
    }
    <span style="color: #008000; font-weight: bold">return</span> QUrl<span style="color: #666666">::</span>fromUserInput(arg);
<span style="color: #BC7A00">#endif</span>
}
</pre></div>
</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">(Okular is doing something similar, as pointed out by Lukáš.)</p>
<p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Please note that I definitely want AssumeLocalFile, even where we don't need to accept files that don't exist, because I don't want Kompare to do a hostname lookup if it's passed a nonexisting file, I think it doesn't make any sense to assume a URL if no http:// is given.</p></pre>
<br />




<p>- Kevin</p>


<br />
<p>On Oktober 17th, 2014, 9:38 nachm. UTC, Jeremy Whiting wrote:</p>









<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="12" style="border: 1px #888a85 solid; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
 <tr>
  <td>

<div>Review request for kdelibs and Kevin Kofler.</div>
<div>By Jeremy Whiting.</div>


<p style="color: grey;"><i>Updated Okt. 17, 2014, 9:38 nachm.</i></p>









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


<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;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">Change KUrl to QUrl.
Use QLayout/QFrame instead of KVBox (seems broken though somehow)
Use QFileDialog instead of KFileDialog.</p></pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </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;"><p style="padding: 0;text-rendering: inherit;margin: 0;line-height: inherit;white-space: inherit;">It builds and runs. The compare dialog ui looks squished though and doesn't resize like it used to, must be something I did wrong when porting away from KVBox</p></pre>
  </td>
 </tr>
</table>


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

 <li>libdialogpages/viewpage.cpp <span style="color: grey">(07bdba5e1edf55a6dcd02e5deef58d30c07660c2)</span></li>

 <li>libdialogpages/viewsettings.h <span style="color: grey">(dbf6afe0d0c70e548e32dfc09391d67ef595cdba)</span></li>

 <li>libdialogpages/viewsettings.cpp <span style="color: grey">(5a69d0bd9a49f7a3881940c4ea8ad407be56adc1)</span></li>

 <li>main.cpp <span style="color: grey">(4132c8442f8546ee7d365051dda0e32196249217)</span></li>

 <li>libdialogpages/diffpage.h <span style="color: grey">(37490b1ebb245e9648530429da63a9240010dddd)</span></li>

 <li>libdialogpages/diffpage.cpp <span style="color: grey">(7800b486e023cffe41e1fa3e9e60781250ea4199)</span></li>

 <li>libdialogpages/filespage.h <span style="color: grey">(42afafcd0fc8bc0a01e32b79d414742937d791fb)</span></li>

 <li>libdialogpages/filespage.cpp <span style="color: grey">(6a87fe36abd57bdaa09b516de38969db6c6f2298)</span></li>

 <li>libdialogpages/filessettings.h <span style="color: grey">(dc3306e34fe1b4eb7cb6a9d2b598f91932bedda0)</span></li>

 <li>libdialogpages/filessettings.cpp <span style="color: grey">(0e19dc00f22a2f6e9588bf2d110dbde682888472)</span></li>

 <li>libdialogpages/pagebase.h <span style="color: grey">(0cef46feaa2cc81deff12c2c5f739e6be6df1b49)</span></li>

 <li>libdialogpages/pagebase.cpp <span style="color: grey">(ba1574aed7124ede49e1c5908a8fe693cf7bc5d3)</span></li>

 <li>libdialogpages/viewpage.h <span style="color: grey">(b5b770d1441650564106e1cc7ef7e587f6ee142d)</span></li>

 <li>komparepart/komparesplitter.cpp <span style="color: grey">(8d496bf279caa7cb9a305c2d15131f591c48818d)</span></li>

 <li>kompareurldialog.h <span style="color: grey">(dc50c588e70835ad9292da1baf5222f58f512f67)</span></li>

 <li>kompareurldialog.cpp <span style="color: grey">(7de050bc44770a79f8f7d789cabd95d6707a40f1)</span></li>

 <li>libdialogpages/CMakeLists.txt <span style="color: grey">(769a1154c56e8eb8aa42f1bc6d84e0f9a4154fd0)</span></li>

 <li>libdialogpages/dialogpagesexport.h <span style="color: grey">(b2de57f6616739d353d4889ef4965ab07f1191aa)</span></li>

 <li>komparenavtreepart/komparenavtreepart.cpp <span style="color: grey">(3faceff78fbbd2f083cd0a7837c74f50fe543474)</span></li>

 <li>komparepart/CMakeLists.txt <span style="color: grey">(09b61e6ca0cdce391fc759be49a672a050cc16cd)</span></li>

 <li>komparepart/kompare_part.h <span style="color: grey">(24475f1b0ccf7fbeda56860a9a69955cd0b82808)</span></li>

 <li>komparepart/kompare_part.cpp <span style="color: grey">(4d40be0dedcfb91b77ee239de11188b328f8bc13)</span></li>

 <li>komparepart/komparelistview.cpp <span style="color: grey">(35bbab849d8b7938cba518e97a00ed50cae35612)</span></li>

 <li>komparepart/kompareprefdlg.cpp <span style="color: grey">(118485663390e9563a77741b490a9cdf8bf6d464)</span></li>

 <li>komparepart/komparesaveoptionswidget.cpp <span style="color: grey">(4c9acba6a7f9c6dda04130946faac37138422875)</span></li>

 <li>CMakeLists.txt <span style="color: grey">(38167c2099d0ea1600bd5a6893982e809902fa3a)</span></li>

 <li>doc/index.docbook <span style="color: grey">(578d12a41d9a6afed441ffd38c39bff16c096ab2)</span></li>

 <li>interfaces/kompareinterface.h <span style="color: grey">(53b19d944b2a4a65c14ea41b8f1c0997581933db)</span></li>

 <li>kompare_shell.h <span style="color: grey">(8549fcdc4d1536c58734f2bc3a78b9ebc42c6c5f)</span></li>

 <li>kompare_shell.cpp <span style="color: grey">(dcc45513f3f9f5f94869046989b6b4f5b1c0995e)</span></li>

 <li>komparenavtreepart/CMakeLists.txt <span style="color: grey">(53e8e670e70629afac9197fc108d844733ec5c07)</span></li>

</ul>

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






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








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