forked from owncloud/client
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
428 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,7 +2,6 @@ | |
*build*/ | ||
*flymake* | ||
CMakeLists.txt.user* | ||
*.patch | ||
*~ | ||
*.autosave | ||
doc/_build/* | ||
|
256 changes: 256 additions & 0 deletions
256
shell_integration/dolphin/0001-KOverlayIconPlugin.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,256 @@ | ||
From 3a26dc77f8e988ea99b23c4d5a2c831ecc31c920 Mon Sep 17 00:00:00 2001 | ||
From: Olivier Goffart <ogoffart@woboq.com> | ||
Date: Thu, 17 Jul 2014 13:26:56 +0200 | ||
Subject: [PATCH] WIP: add KOverlayIconPlugin | ||
|
||
--- | ||
.../src/kitemviews/kfileitemmodelrolesupdater.cpp | 35 ++++++++++++- | ||
.../src/kitemviews/kfileitemmodelrolesupdater.h | 9 ++++ | ||
lib/konq/CMakeLists.txt | 4 +- | ||
lib/konq/koverlayiconplugin.cpp | 30 ++++++++++++ | ||
lib/konq/koverlayiconplugin.desktop | 4 ++ | ||
lib/konq/koverlayiconplugin.h | 57 ++++++++++++++++++++++ | ||
6 files changed, 137 insertions(+), 2 deletions(-) | ||
create mode 100644 lib/konq/koverlayiconplugin.cpp | ||
create mode 100644 lib/konq/koverlayiconplugin.desktop | ||
create mode 100644 lib/konq/koverlayiconplugin.h | ||
|
||
diff --git a/dolphin/src/kitemviews/kfileitemmodelrolesupdater.cpp b/dolphin/src/kitemviews/kfileitemmodelrolesupdater.cpp | ||
index 0865d40..840a65d 100644 | ||
--- a/dolphin/src/kitemviews/kfileitemmodelrolesupdater.cpp | ||
+++ b/dolphin/src/kitemviews/kfileitemmodelrolesupdater.cpp | ||
@@ -28,9 +28,11 @@ | ||
#include <KGlobal> | ||
#include <KIO/JobUiDelegate> | ||
#include <KIO/PreviewJob> | ||
+#include <KServiceTypeTrader> | ||
|
||
#include "private/kpixmapmodifier.h" | ||
#include "private/kdirectorycontentscounter.h" | ||
+#include <koverlayiconplugin.h> | ||
|
||
#include <QApplication> | ||
#include <QPainter> | ||
@@ -129,6 +131,17 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel* model, QO | ||
m_directoryContentsCounter = new KDirectoryContentsCounter(m_model, this); | ||
connect(m_directoryContentsCounter, SIGNAL(result(QString,int)), | ||
this, SLOT(slotDirectoryContentsCountReceived(QString,int))); | ||
+ | ||
+ | ||
+ const KService::List pluginServices = KServiceTypeTrader::self()->query("KOverlayIconPlugin"); | ||
+ | ||
+ for (KService::List::ConstIterator it = pluginServices.constBegin(); it != pluginServices.constEnd(); ++it) { | ||
+ KOverlayIconPlugin* plugin = (*it)->createInstance<KOverlayIconPlugin>(this); | ||
+ if (plugin) { | ||
+ m_overlayIconsPlugin.append(plugin); | ||
+ connect(plugin, SIGNAL(overlaysChanged(KUrl,QStringList)), this, SLOT(slotOverlaysChanged(KUrl,QStringList))); | ||
+ } | ||
+ } | ||
} | ||
|
||
KFileItemModelRolesUpdater::~KFileItemModelRolesUpdater() | ||
@@ -1075,7 +1088,11 @@ QHash<QByteArray, QVariant> KFileItemModelRolesUpdater::rolesData(const KFileIte | ||
data.insert("type", item.mimeComment()); | ||
} | ||
|
||
- data.insert("iconOverlays", item.overlays()); | ||
+ QStringList overlays = item.overlays(); | ||
+ foreach(KOverlayIconPlugin *it, m_overlayIconsPlugin) { | ||
+ overlays.append(it->getOverlays(item)); | ||
+ } | ||
+ data.insert("iconOverlays", overlays); | ||
|
||
#ifdef HAVE_BALOO | ||
if (m_balooFileMonitor) { | ||
@@ -1086,6 +1103,22 @@ QHash<QByteArray, QVariant> KFileItemModelRolesUpdater::rolesData(const KFileIte | ||
return data; | ||
} | ||
|
||
+void KFileItemModelRolesUpdater::slotOverlaysChanged(const KUrl& url, const QStringList &) | ||
+{ | ||
+ KFileItem item = m_model->fileItem(url); | ||
+ if (item.isNull()) | ||
+ return; | ||
+ int index = m_model->index(item); | ||
+ QHash <QByteArray, QVariant> data = m_model->data(index); | ||
+ QStringList overlays = item.overlays(); | ||
+ foreach(KOverlayIconPlugin *it, m_overlayIconsPlugin) { | ||
+ overlays.append(it->getOverlays(item)); | ||
+ } | ||
+ data.insert("iconOverlays", overlays); | ||
+ m_model->setData(index, data); | ||
+} | ||
+ | ||
+ | ||
void KFileItemModelRolesUpdater::updateAllPreviews() | ||
{ | ||
if (m_state == Paused) { | ||
diff --git a/dolphin/src/kitemviews/kfileitemmodelrolesupdater.h b/dolphin/src/kitemviews/kfileitemmodelrolesupdater.h | ||
index a9e979a..6d3add0 100644 | ||
--- a/dolphin/src/kitemviews/kfileitemmodelrolesupdater.h | ||
+++ b/dolphin/src/kitemviews/kfileitemmodelrolesupdater.h | ||
@@ -32,6 +32,7 @@ | ||
#include <QSize> | ||
#include <QStringList> | ||
|
||
+class KOverlayIconPlugin; | ||
class KDirectoryContentsCounter; | ||
class KFileItemModel; | ||
class KJob; | ||
@@ -180,6 +181,12 @@ private slots: | ||
void slotPreviewJobFinished(); | ||
|
||
/** | ||
+ * Is invoked when one of the KOverlayIconPlugin emit the signal that an overlay has changed | ||
+ */ | ||
+ void slotOverlaysChanged(const KUrl&, const QStringList&); | ||
+ | ||
+ | ||
+ /** | ||
* Resolves the sort role of the next item in m_pendingSortRole, applies it | ||
* to the model, and invokes itself if there are any pending items left. If | ||
* that is not the case, \a startUpdating() is called. | ||
@@ -331,6 +338,8 @@ private: | ||
|
||
KDirectoryContentsCounter* m_directoryContentsCounter; | ||
|
||
+ QList<KOverlayIconPlugin*> m_overlayIconsPlugin; | ||
+ | ||
#ifdef HAVE_BALOO | ||
Baloo::FileMonitor* m_balooFileMonitor; | ||
#endif | ||
diff --git a/lib/konq/CMakeLists.txt b/lib/konq/CMakeLists.txt | ||
index 8ecbfa9..7381caf 100644 | ||
--- a/lib/konq/CMakeLists.txt | ||
+++ b/lib/konq/CMakeLists.txt | ||
@@ -22,6 +22,7 @@ set(konq_LIB_SRCS | ||
konq_historyprovider.cpp | ||
kversioncontrolplugin.cpp # used by dolphin and its version control plugins (deprecated) | ||
kversioncontrolplugin2.cpp # used by dolphin and its version control plugins | ||
+ koverlayiconplugin.cpp | ||
|
||
konq_nameandurlinputdialog.cpp # deprecated (functionality has moved to kdelibs) | ||
knewmenu.cpp # deprecated (functionality has moved to kdelibs) | ||
@@ -67,8 +68,9 @@ install( FILES | ||
konq_fileitemcapabilities.h | ||
kversioncontrolplugin.h | ||
kversioncontrolplugin2.h | ||
+ koverlayiconplugin.h | ||
konq_historyprovider.h | ||
konq_historyentry.h | ||
DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel | ||
) | ||
-install( FILES konqpopupmenuplugin.desktop konqdndpopupmenuplugin.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR} ) | ||
+install( FILES konqpopupmenuplugin.desktop konqdndpopupmenuplugin.desktop koverlayiconplugin.desktop DESTINATION ${SERVICETYPES_INSTALL_DIR} ) | ||
diff --git a/lib/konq/koverlayiconplugin.cpp b/lib/konq/koverlayiconplugin.cpp | ||
new file mode 100644 | ||
index 0000000..6125040 | ||
--- /dev/null | ||
+++ b/lib/konq/koverlayiconplugin.cpp | ||
@@ -0,0 +1,30 @@ | ||
+/***************************************************************************** | ||
+ * Copyright (C) 2014 by Olivier Goffart <ogoffart@woboq.com> * | ||
+ * * | ||
+ * This library is free software; you can redistribute it and/or * | ||
+ * modify it under the terms of the GNU Library General Public * | ||
+ * License version 2 as published by the Free Software Foundation. * | ||
+ * * | ||
+ * This library is distributed in the hope that it will be useful, * | ||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of * | ||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * | ||
+ * Library General Public License for more details. * | ||
+ * * | ||
+ * You should have received a copy of the GNU Library General Public License * | ||
+ * along with this library; see the file COPYING.LIB. If not, write to * | ||
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * | ||
+ * Boston, MA 02110-1301, USA. * | ||
+ *****************************************************************************/ | ||
+ | ||
+#include "koverlayiconplugin.h" | ||
+#include <KFileItem> | ||
+ | ||
+KOverlayIconPlugin::KOverlayIconPlugin(QObject* parent) : QObject(parent) | ||
+{ | ||
+} | ||
+ | ||
+KOverlayIconPlugin::~KOverlayIconPlugin() | ||
+{ | ||
+} | ||
+ | ||
+#include "koverlayiconplugin.moc" | ||
diff --git a/lib/konq/koverlayiconplugin.desktop b/lib/konq/koverlayiconplugin.desktop | ||
new file mode 100644 | ||
index 0000000..65a1170 | ||
--- /dev/null | ||
+++ b/lib/konq/koverlayiconplugin.desktop | ||
@@ -0,0 +1,4 @@ | ||
+[Desktop Entry] | ||
+Type=ServiceType | ||
+X-KDE-ServiceType=KOverlayIconPlugin | ||
+Comment=Plugin to add overlay icons in Dolphin | ||
diff --git a/lib/konq/koverlayiconplugin.h b/lib/konq/koverlayiconplugin.h | ||
new file mode 100644 | ||
index 0000000..bcdf31b | ||
--- /dev/null | ||
+++ b/lib/konq/koverlayiconplugin.h | ||
@@ -0,0 +1,57 @@ | ||
+/***************************************************************************** | ||
+ * Copyright (C) 2014 by Olivier Goffart <ogoffart@woboq.com> * | ||
+ * * | ||
+ * This library is free software; you can redistribute it and/or * | ||
+ * modify it under the terms of the GNU Library General Public * | ||
+ * License version 2 as published by the Free Software Foundation. * | ||
+ * * | ||
+ * This library is distributed in the hope that it will be useful, * | ||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of * | ||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * | ||
+ * Library General Public License for more details. * | ||
+ * * | ||
+ * You should have received a copy of the GNU Library General Public License * | ||
+ * along with this library; see the file COPYING.LIB. If not, write to * | ||
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * | ||
+ * Boston, MA 02110-1301, USA. * | ||
+ *****************************************************************************/ | ||
+ | ||
+ | ||
+#ifndef OverlayIconPlugin_H | ||
+#define OverlayIconPlugin_H | ||
+ | ||
+#include <QtCore/QObject> | ||
+#include <libkonq_export.h> | ||
+ | ||
+class KUrl; | ||
+class KFileItem; | ||
+ | ||
+/** | ||
+ * @brief Base class for overlay icon plugins. | ||
+ * | ||
+ * Enables the file manager to show custom overlay icons on files. | ||
+ * | ||
+ * To write a custom plugin you need to create a .desktop file for your plugin with | ||
+ * KDE-ServiceTypes=KOverlayIconPlugin | ||
+ */ | ||
+class LIBKONQ_EXPORT KOverlayIconPlugin : public QObject { | ||
+ Q_OBJECT | ||
+ void *d; | ||
+public: | ||
+ explicit KOverlayIconPlugin(QObject *parent = 0); | ||
+ ~KOverlayIconPlugin(); | ||
+ | ||
+ /** | ||
+ * Returns a list of overlay pixmap to add to a file | ||
+ * This can be a path to an icon, or the icon name | ||
+ */ | ||
+ virtual QStringList getOverlays(const KFileItem &item) = 0; | ||
+signals: | ||
+ | ||
+ /** | ||
+ * Emit this signal when the list of overlay icon changed for a given URL | ||
+ */ | ||
+ void overlaysChanged(const KUrl &url, const QStringList &overlays); | ||
+}; | ||
+ | ||
+#endif | ||
-- | ||
2.1.3 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
cmake_minimum_required(VERSION 2.6) | ||
project(dolphin-owncloud) | ||
find_package(KDE4 REQUIRED) | ||
include(KDE4Defaults) | ||
include(MacroLibrary) | ||
find_package(LibKonq REQUIRED) | ||
|
||
add_definitions (${QT_DEFINITIONS} ${KDE4_DEFINITIONS}) | ||
add_definitions(-DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS) | ||
include_directories (${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${KDE4_INCLUDES} ) | ||
include_directories( ${KDE4_INCLUDE_DIR} ${QT_INCLUDES} ${LIBKONQ_INCLUDE_DIR} ) | ||
|
||
kde4_add_plugin(ownclouddolphinplugin ownclouddolphinplugin.cpp) | ||
|
||
target_link_libraries(ownclouddolphinplugin ${KDE4_KIO_LIBS} ${LIBKONQ_LIBRARY}) | ||
install(FILES ownclouddolphinplugin.desktop DESTINATION ${SERVICES_INSTALL_DIR}) | ||
install(TARGETS ownclouddolphinplugin DESTINATION ${PLUGIN_INSTALL_DIR}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
|
||
|
||
- The patch 0001-KOverlayIconPlugin.patch should be applied to kde-baseapps git repository | ||
(It should applies to both KDE/4.14 or Applications/14.12 branches) | ||
|
||
- Recompile and install dolphin | ||
|
||
- Build and install the plugin | ||
|
||
- After installing, run | ||
kdeinit4 --noincremental | ||
|
||
- To test taht the plugin is well installed | ||
ktraderclient --servicetype KOverlayIconPlugin | ||
It should show the Owncloud plugin | ||
|
||
- restart dolphin (make sure to kill all instances) | ||
|
Oops, something went wrong.