From cf273cd8a90178460c29b97b115a876fbef10295 Mon Sep 17 00:00:00 2001 From: David Faure Date: Tue, 25 Jul 2017 11:39:57 +0200 Subject: [PATCH 1/2] Bundle the XMLGUI files into qrc resources. This is a step towards being able to run applications uninstalled, and it simplifies deployment on non-linux. --- src/CMakeLists.txt | 6 ++++-- src/dolphin.qrc | 5 +++++ src/dolphinpart.qrc | 5 +++++ 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 src/dolphin.qrc create mode 100644 src/dolphinpart.qrc diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bc6f75d628..13b94f73b4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -180,6 +180,8 @@ set(dolphinpart_SRCS dolphindebug.cpp ) +qt5_add_resources(dolphinpart_SRCS dolphinpart.qrc) + add_library(dolphinpart MODULE ${dolphinpart_SRCS}) target_link_libraries(dolphinpart @@ -188,7 +190,6 @@ target_link_libraries(dolphinpart install(TARGETS dolphinpart DESTINATION ${KDE_INSTALL_PLUGINDIR}) -install(FILES dolphinpart.rc DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/dolphinpart) install(FILES dolphinpart.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}) ########################################## @@ -267,6 +268,8 @@ if(NOT WIN32) set(dolphinstatic_SRCS ${dolphinstatic_SRCS} panels/terminal/terminalpanel.cpp) endif() +qt5_add_resources(dolphinstatic_SRCS dolphin.qrc) + add_library(dolphinstatic STATIC ${dolphinstatic_SRCS}) target_include_directories(dolphinstatic PRIVATE ${PHONON_INCLUDES}) @@ -389,7 +392,6 @@ install( FILES settings/dolphin_directoryviewpropertysettings.kcfg settings/dolphin_detailsmodesettings.kcfg settings/dolphin_versioncontrolsettings.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR} ) -install( FILES dolphinui.rc DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/dolphin ) install( FILES org.kde.dolphin.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR} ) install( FILES settings/kcm/kcmdolphinviewmodes.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR} ) diff --git a/src/dolphin.qrc b/src/dolphin.qrc new file mode 100644 index 0000000000..55cae54b95 --- /dev/null +++ b/src/dolphin.qrc @@ -0,0 +1,5 @@ + + +dolphinui.rc + + diff --git a/src/dolphinpart.qrc b/src/dolphinpart.qrc new file mode 100644 index 0000000000..b525da13ab --- /dev/null +++ b/src/dolphinpart.qrc @@ -0,0 +1,5 @@ + + +dolphinpart.rc + + From c3de867622afc7e0eaf787bf371873387a6b4451 Mon Sep 17 00:00:00 2001 From: Elvis Angelaccio Date: Wed, 12 Jul 2017 10:40:15 +0200 Subject: [PATCH 2/2] Fix drop menu position with urlnavigator drops Commit 1e251d2f6a in kio broke drop menus when dropping on the URL navigator (menus show up in the DolphinView rather than the URL bar). This happens because in DolphinView::dropUrls() we set `this` as the widget passed to KJobWidgets::setWindow() (in DragAndDropHelper::dropUrls()). We need to replace `this` with the actual widget that received the QDropEvent and that can mapToGlobal() the relative pos of the drop event. Unfortunately this widget is not KUrlNavigator itself, but one of its KUrlNavigatorButton children (private class, not exported). So unfortunately we need a new API in KIO that exposes this child widget. Differential Revision: https://phabricator.kde.org/D6684 --- src/dolphintabwidget.cpp | 2 +- src/dolphinviewcontainer.cpp | 11 +++++++++-- src/views/dolphinview.cpp | 6 +++--- src/views/dolphinview.h | 4 ++-- src/views/draganddrophelper.h | 2 +- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/dolphintabwidget.cpp b/src/dolphintabwidget.cpp index 94b7a0144c..d9b7d7e13e 100644 --- a/src/dolphintabwidget.cpp +++ b/src/dolphintabwidget.cpp @@ -284,7 +284,7 @@ void DolphinTabWidget::tabDropEvent(int index, QDropEvent* event) { if (index >= 0) { DolphinView* view = tabPageAt(index)->activeViewContainer()->view(); - view->dropUrls(view->url(), event); + view->dropUrls(view->url(), event, view); } } diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 72ced931b7..198879f377 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -135,8 +136,14 @@ DolphinViewContainer::DolphinViewContainer(const QUrl& url, QWidget* parent) : this, &DolphinViewContainer::slotUrlNavigatorLocationChanged); connect(m_urlNavigator, &KUrlNavigator::returnPressed, this, &DolphinViewContainer::slotReturnPressed); - connect(m_urlNavigator, &KUrlNavigator::urlsDropped, - m_view, &DolphinView::dropUrls); + connect(m_urlNavigator, &KUrlNavigator::urlsDropped, this, [=](const QUrl &destination, QDropEvent *event) { +#if KIO_VERSION >= QT_VERSION_CHECK(5, 37, 0) + m_view->dropUrls(destination, event, m_urlNavigator->dropWidget()); +#else + // TODO: remove as soon as we can hard-depend of KF5 >= 5.37 + m_view->dropUrls(destination, event, m_view); +#endif + }); // Initialize status bar m_statusBar = new DolphinStatusBar(this); diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index bef6a8b73a..5fcec92412 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -1051,14 +1051,14 @@ void DolphinView::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* even event->mimeData(), event->buttons(), event->modifiers()); - dropUrls(destUrl, &dropEvent); + dropUrls(destUrl, &dropEvent, this); setActive(true); } -void DolphinView::dropUrls(const QUrl &destUrl, QDropEvent *dropEvent) +void DolphinView::dropUrls(const QUrl &destUrl, QDropEvent *dropEvent, QWidget *dropWidget) { - KIO::DropJob* job = DragAndDropHelper::dropUrls(destUrl, dropEvent, this); + KIO::DropJob* job = DragAndDropHelper::dropUrls(destUrl, dropEvent, dropWidget); if (job) { connect(job, &KIO::DropJob::result, this, &DolphinView::slotPasteJobResult); diff --git a/src/views/dolphinview.h b/src/views/dolphinview.h index 6b62b5da68..5c832efd1f 100644 --- a/src/views/dolphinview.h +++ b/src/views/dolphinview.h @@ -363,9 +363,9 @@ public slots: void pasteIntoFolder(); /** - * Handles a drop of @p dropEvent onto @p destUrl + * Handles a drop of @p dropEvent onto widget @p dropWidget and destination @p destUrl */ - void dropUrls(const QUrl &destUrl, QDropEvent *dropEvent); + void dropUrls(const QUrl &destUrl, QDropEvent *dropEvent, QWidget *dropWidget); void stopLoading(); diff --git a/src/views/draganddrophelper.h b/src/views/draganddrophelper.h index fe77b1e6ee..3153f06ef0 100644 --- a/src/views/draganddrophelper.h +++ b/src/views/draganddrophelper.h @@ -41,7 +41,7 @@ public: * @param destUrl URL of the item destination. Is used only if destItem::isNull() * is true. * @param event Drop event. - * @param window Associated widget. + * @param window Widget where the drop happened, will be used as parent of the drop menu. * @return KIO::DropJob pointer */ static KIO::DropJob* dropUrls(const QUrl& destUrl,