--===============0991492335274351897== MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit > On Okt. 17, 2014, 10:12 nachm., Kevin Kofler wrote: > > main.cpp, line 132 > > > > > > I think this now needs something like: > > QDir::isAbsolutePath(args.at(0)) ? QUrl::fromLocalFile(args.at(0)) : QUrl(args.at(0)) > > > > 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. > > > > This shows up so often in this function that it might be worth putting it into a helper function. > > Kevin Kofler wrote: > 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.) > > 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: > ```c++ > QUrl urlFromArg(const QString& arg) > { > #if QT_VERSION >= 0x050400 > return QUrl::fromUserInput(arg, QDir::currentPath(), QUrl::AssumeLocalFile); > #else > // Logic from QUrl::fromUserInput(QString, QString, UserInputResolutionOptions) > QUrl testUrl = QUrl(arg, QUrl::TolerantMode); > if (testUrl.isRelative() && !QDir::isAbsolutePath(arg)) { > QFileInfo fileInfo(QDir::current(), arg); > return QUrl::fromLocalFile(fileInfo.absoluteFilePath()); > } > return QUrl::fromUserInput(arg); > #endif > } > ``` > (Okular is doing something similar, as pointed out by Lukáš.) > > 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. Actually, we don't need the QFileInfo in this case. (Qt 5.4's QUrl uses it because it also checks existence.) So the function simplifies to: ```c++ QUrl urlFromArg(const QString& arg) { #if QT_VERSION >= 0x050400 return QUrl::fromUserInput(arg, QDir::currentPath(), QUrl::AssumeLocalFile); #else // Logic from QUrl::fromUserInput(QString, QString, UserInputResolutionOptions) return (QUrl(arg, QUrl::TolerantMode).isRelative() && !QDir::isAbsolutePath(arg)) ? QUrl::fromLocalFile(QDir::current().absoluteFilePath(arg)) : QUrl::fromUserInput(arg); #endif } ``` - Kevin ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://git.reviewboard.kde.org/r/120627/#review68628 ----------------------------------------------------------- On Okt. 17, 2014, 9:38 nachm., Jeremy Whiting wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://git.reviewboard.kde.org/r/120627/ > ----------------------------------------------------------- > > (Updated Okt. 17, 2014, 9:38 nachm.) > > > Review request for kdelibs and Kevin Kofler. > > > Repository: kompare > > > Description > ------- > > Change KUrl to QUrl. > Use QLayout/QFrame instead of KVBox (seems broken though somehow) > Use QFileDialog instead of KFileDialog. > > > Diffs > ----- > > libdialogpages/viewpage.cpp 07bdba5e1edf55a6dcd02e5deef58d30c07660c2 > libdialogpages/viewsettings.h dbf6afe0d0c70e548e32dfc09391d67ef595cdba > libdialogpages/viewsettings.cpp 5a69d0bd9a49f7a3881940c4ea8ad407be56adc1 > main.cpp 4132c8442f8546ee7d365051dda0e32196249217 > libdialogpages/diffpage.h 37490b1ebb245e9648530429da63a9240010dddd > libdialogpages/diffpage.cpp 7800b486e023cffe41e1fa3e9e60781250ea4199 > libdialogpages/filespage.h 42afafcd0fc8bc0a01e32b79d414742937d791fb > libdialogpages/filespage.cpp 6a87fe36abd57bdaa09b516de38969db6c6f2298 > libdialogpages/filessettings.h dc3306e34fe1b4eb7cb6a9d2b598f91932bedda0 > libdialogpages/filessettings.cpp 0e19dc00f22a2f6e9588bf2d110dbde682888472 > libdialogpages/pagebase.h 0cef46feaa2cc81deff12c2c5f739e6be6df1b49 > libdialogpages/pagebase.cpp ba1574aed7124ede49e1c5908a8fe693cf7bc5d3 > libdialogpages/viewpage.h b5b770d1441650564106e1cc7ef7e587f6ee142d > komparepart/komparesplitter.cpp 8d496bf279caa7cb9a305c2d15131f591c48818d > kompareurldialog.h dc50c588e70835ad9292da1baf5222f58f512f67 > kompareurldialog.cpp 7de050bc44770a79f8f7d789cabd95d6707a40f1 > libdialogpages/CMakeLists.txt 769a1154c56e8eb8aa42f1bc6d84e0f9a4154fd0 > libdialogpages/dialogpagesexport.h b2de57f6616739d353d4889ef4965ab07f1191aa > komparenavtreepart/komparenavtreepart.cpp 3faceff78fbbd2f083cd0a7837c74f50fe543474 > komparepart/CMakeLists.txt 09b61e6ca0cdce391fc759be49a672a050cc16cd > komparepart/kompare_part.h 24475f1b0ccf7fbeda56860a9a69955cd0b82808 > komparepart/kompare_part.cpp 4d40be0dedcfb91b77ee239de11188b328f8bc13 > komparepart/komparelistview.cpp 35bbab849d8b7938cba518e97a00ed50cae35612 > komparepart/kompareprefdlg.cpp 118485663390e9563a77741b490a9cdf8bf6d464 > komparepart/komparesaveoptionswidget.cpp 4c9acba6a7f9c6dda04130946faac37138422875 > CMakeLists.txt 38167c2099d0ea1600bd5a6893982e809902fa3a > doc/index.docbook 578d12a41d9a6afed441ffd38c39bff16c096ab2 > interfaces/kompareinterface.h 53b19d944b2a4a65c14ea41b8f1c0997581933db > kompare_shell.h 8549fcdc4d1536c58734f2bc3a78b9ebc42c6c5f > kompare_shell.cpp dcc45513f3f9f5f94869046989b6b4f5b1c0995e > komparenavtreepart/CMakeLists.txt 53e8e670e70629afac9197fc108d844733ec5c07 > > Diff: https://git.reviewboard.kde.org/r/120627/diff/ > > > Testing > ------- > > 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 > > > Thanks, > > Jeremy Whiting > > --===============0991492335274351897== MIME-Version: 1.0 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: 8bit
This is an automatically generated e-mail. To reply, visit: https://git.reviewboard.kde.org/r/120627/

On Oktober 17th, 2014, 10:12 nachm. UTC, Kevin Kofler wrote:

main.cpp (Diff revision 1)
static const char version[] = "4.1.3";
126
					ks->openDiff( args->url( 0 ) );
130
					ks->openDiff( args.at( 0 ) );

I think this now needs something like: QDir::isAbsolutePath(args.at(0)) ? QUrl::fromLocalFile(args.at(0)) : QUrl(args.at(0))

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.

This shows up so often in this function that it might be worth putting it into a helper function.

On Oktober 18th, 2014, 12:24 vorm. UTC, Kevin Kofler wrote:

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.)

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:

QUrl urlFromArg(const QString& arg)
{
#if QT_VERSION >= 0x050400
    return QUrl::fromUserInput(arg, QDir::currentPath(), QUrl::AssumeLocalFile);
#else
    // Logic from QUrl::fromUserInput(QString, QString, UserInputResolutionOptions)
    QUrl testUrl = QUrl(arg, QUrl::TolerantMode);
    if (testUrl.isRelative() && !QDir::isAbsolutePath(arg)) {
        QFileInfo fileInfo(QDir::current(), arg);
        return QUrl::fromLocalFile(fileInfo.absoluteFilePath());
    }
    return QUrl::fromUserInput(arg);
#endif
}

(Okular is doing something similar, as pointed out by Lukáš.)

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.

Actually, we don't need the QFileInfo in this case. (Qt 5.4's QUrl uses it because it also checks existence.) So the function simplifies to:

QUrl urlFromArg(const QString& arg)
{
#if QT_VERSION >= 0x050400
    return QUrl::fromUserInput(arg, QDir::currentPath(), QUrl::AssumeLocalFile);
#else
    // Logic from QUrl::fromUserInput(QString, QString, UserInputResolutionOptions)
    return (QUrl(arg, QUrl::TolerantMode).isRelative() && !QDir::isAbsolutePath(arg))
           ? QUrl::fromLocalFile(QDir::current().absoluteFilePath(arg))
           : QUrl::fromUserInput(arg);
#endif
}


- Kevin


On Oktober 17th, 2014, 9:38 nachm. UTC, Jeremy Whiting wrote:

Review request for kdelibs and Kevin Kofler.
By Jeremy Whiting.

Updated Okt. 17, 2014, 9:38 nachm.

Repository: kompare

Description

Change KUrl to QUrl. Use QLayout/QFrame instead of KVBox (seems broken though somehow) Use QFileDialog instead of KFileDialog.

Testing

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

Diffs

  • libdialogpages/viewpage.cpp (07bdba5e1edf55a6dcd02e5deef58d30c07660c2)
  • libdialogpages/viewsettings.h (dbf6afe0d0c70e548e32dfc09391d67ef595cdba)
  • libdialogpages/viewsettings.cpp (5a69d0bd9a49f7a3881940c4ea8ad407be56adc1)
  • main.cpp (4132c8442f8546ee7d365051dda0e32196249217)
  • libdialogpages/diffpage.h (37490b1ebb245e9648530429da63a9240010dddd)
  • libdialogpages/diffpage.cpp (7800b486e023cffe41e1fa3e9e60781250ea4199)
  • libdialogpages/filespage.h (42afafcd0fc8bc0a01e32b79d414742937d791fb)
  • libdialogpages/filespage.cpp (6a87fe36abd57bdaa09b516de38969db6c6f2298)
  • libdialogpages/filessettings.h (dc3306e34fe1b4eb7cb6a9d2b598f91932bedda0)
  • libdialogpages/filessettings.cpp (0e19dc00f22a2f6e9588bf2d110dbde682888472)
  • libdialogpages/pagebase.h (0cef46feaa2cc81deff12c2c5f739e6be6df1b49)
  • libdialogpages/pagebase.cpp (ba1574aed7124ede49e1c5908a8fe693cf7bc5d3)
  • libdialogpages/viewpage.h (b5b770d1441650564106e1cc7ef7e587f6ee142d)
  • komparepart/komparesplitter.cpp (8d496bf279caa7cb9a305c2d15131f591c48818d)
  • kompareurldialog.h (dc50c588e70835ad9292da1baf5222f58f512f67)
  • kompareurldialog.cpp (7de050bc44770a79f8f7d789cabd95d6707a40f1)
  • libdialogpages/CMakeLists.txt (769a1154c56e8eb8aa42f1bc6d84e0f9a4154fd0)
  • libdialogpages/dialogpagesexport.h (b2de57f6616739d353d4889ef4965ab07f1191aa)
  • komparenavtreepart/komparenavtreepart.cpp (3faceff78fbbd2f083cd0a7837c74f50fe543474)
  • komparepart/CMakeLists.txt (09b61e6ca0cdce391fc759be49a672a050cc16cd)
  • komparepart/kompare_part.h (24475f1b0ccf7fbeda56860a9a69955cd0b82808)
  • komparepart/kompare_part.cpp (4d40be0dedcfb91b77ee239de11188b328f8bc13)
  • komparepart/komparelistview.cpp (35bbab849d8b7938cba518e97a00ed50cae35612)
  • komparepart/kompareprefdlg.cpp (118485663390e9563a77741b490a9cdf8bf6d464)
  • komparepart/komparesaveoptionswidget.cpp (4c9acba6a7f9c6dda04130946faac37138422875)
  • CMakeLists.txt (38167c2099d0ea1600bd5a6893982e809902fa3a)
  • doc/index.docbook (578d12a41d9a6afed441ffd38c39bff16c096ab2)
  • interfaces/kompareinterface.h (53b19d944b2a4a65c14ea41b8f1c0997581933db)
  • kompare_shell.h (8549fcdc4d1536c58734f2bc3a78b9ebc42c6c5f)
  • kompare_shell.cpp (dcc45513f3f9f5f94869046989b6b4f5b1c0995e)
  • komparenavtreepart/CMakeLists.txt (53e8e670e70629afac9197fc108d844733ec5c07)

View Diff

--===============0991492335274351897==--