Hello community,
here is the log from the commit of package milou5 for openSUSE:Factory checked in at 2016-04-07 13:30:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/milou5 (Old)
and /work/SRC/openSUSE:Factory/.milou5.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "milou5"
Changes:
--------
--- /work/SRC/openSUSE:Factory/milou5/milou5.changes 2016-03-03 15:14:59.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.milou5.new/milou5.changes 2016-04-07 13:30:14.000000000 +0200
@@ -1,0 +2,16 @@
+Tue Mar 29 16:21:02 UTC 2016 - hrvoje.senjan@gmail.com
+
+- Update to 5.6.1
+ * New bugfix release
+ * For more details please see:
+ https://www.kde.org/announcements/plasma-5.6.1.php
+
+-------------------------------------------------------------------
+Sun Mar 20 09:19:56 UTC 2016 - hrvoje.senjan@gmail.com
+
+- Update to 5.6.0
+ * New feature release
+ * For more details please see:
+ https://www.kde.org/announcements/plasma-5.6.0.php
+
+-------------------------------------------------------------------
Old:
----
milou-5.5.5.tar.xz
New:
----
milou-5.6.1.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ milou5.spec ++++++
--- /var/tmp/diff_new_pack.DgcOzB/_old 2016-04-07 13:30:15.000000000 +0200
+++ /var/tmp/diff_new_pack.DgcOzB/_new 2016-04-07 13:30:15.000000000 +0200
@@ -18,7 +18,7 @@
%bcond_without lang
Name: milou5
-Version: 5.5.5
+Version: 5.6.1
Release: 0
Summary: Dedicated search application built on top of Baloo
License: GPL-2.0+ and LGPL-2.1+
++++++ milou-5.5.5.tar.xz -> milou-5.6.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/milou-5.5.5/CMakeLists.txt new/milou-5.6.1/CMakeLists.txt
--- old/milou-5.5.5/CMakeLists.txt 2016-03-01 14:38:51.000000000 +0100
+++ new/milou-5.6.1/CMakeLists.txt 2016-03-29 16:16:01.000000000 +0200
@@ -1,5 +1,5 @@
project(Milou)
-set(PROJECT_VERSION "5.5.5")
+set(PROJECT_VERSION "5.6.1")
set(PROJECT_VERSION_MAJOR 5)
cmake_minimum_required(VERSION 2.8.12)
@@ -13,7 +13,7 @@
include(ECMAddTests)
include(KDEInstallDirs)
include(KDECMakeSettings)
-include(KDECompilerSettings)
+include(KDECompilerSettings NO_POLICY_SCOPE)
include(GenerateExportHeader)
# find_package(KdepimLibs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/milou-5.5.5/lib/CMakeLists.txt new/milou-5.6.1/lib/CMakeLists.txt
--- old/milou-5.5.5/lib/CMakeLists.txt 2016-03-01 14:38:13.000000000 +0100
+++ new/milou-5.6.1/lib/CMakeLists.txt 2016-03-29 16:15:28.000000000 +0200
@@ -4,6 +4,7 @@
preview.cpp
previewplugin.cpp
sourcesmodel.cpp
+ draghelper.cpp
)
add_library(milou SHARED ${lib_SRCS})
@@ -12,6 +13,7 @@
target_link_libraries (milou
Qt5::Qml
Qt5::Quick
+ Qt5::Widgets # for QAction...
KF5::Service
KF5::Plasma
KF5::Runner
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/milou-5.5.5/lib/draghelper.cpp new/milou-5.6.1/lib/draghelper.cpp
--- old/milou-5.5.5/lib/draghelper.cpp 1970-01-01 01:00:00.000000000 +0100
+++ new/milou-5.6.1/lib/draghelper.cpp 2016-03-29 16:15:28.000000000 +0200
@@ -0,0 +1,80 @@
+/***************************************************************************
+ * Copyright (C) 2013 by Eike Hein *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
+ ***************************************************************************/
+
+#include "draghelper.h"
+
+#include <QApplication>
+#include <QDrag>
+#include <QMimeData>
+#include <QQuickItem>
+
+using namespace Milou;
+
+DragHelper::DragHelper(QObject* parent) : QObject(parent)
+, m_dragIconSize(32)
+{
+ qmlRegisterType<QMimeData>();
+}
+
+DragHelper::~DragHelper()
+{
+}
+
+int DragHelper::dragIconSize() const
+{
+ return m_dragIconSize;
+}
+
+void DragHelper::setDragIconSize(int size)
+{
+ if (m_dragIconSize != size) {
+ m_dragIconSize = size;
+
+ emit dragIconSizeChanged();
+ }
+}
+
+bool DragHelper::isDrag(int oldX, int oldY, int newX, int newY) const
+{
+ return ((QPoint(oldX, oldY) - QPoint(newX, newY)).manhattanLength() >= QApplication::startDragDistance());
+}
+
+void DragHelper::startDrag(QQuickItem *item, QMimeData *mimeData, const QIcon &icon)
+{
+ // This allows the caller to return, making sure we don't crash if
+ // the caller is destroyed mid-drag
+
+ QMetaObject::invokeMethod(this, "doDrag", Qt::QueuedConnection,
+ Q_ARG(QQuickItem*, item), Q_ARG(QMimeData*, mimeData), Q_ARG(QIcon, icon));
+}
+
+void DragHelper::doDrag(QQuickItem *item, QMimeData *mimeData, const QIcon &icon) const
+{
+ QDrag *drag = new QDrag(item);
+ drag->setMimeData(mimeData);
+
+ if (!icon.isNull()) {
+ drag->setPixmap(icon.pixmap(m_dragIconSize, m_dragIconSize));
+ }
+
+ drag->exec();
+
+ emit dropped();
+}
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/milou-5.5.5/lib/draghelper.h new/milou-5.6.1/lib/draghelper.h
--- old/milou-5.5.5/lib/draghelper.h 1970-01-01 01:00:00.000000000 +0100
+++ new/milou-5.6.1/lib/draghelper.h 2016-03-29 16:15:28.000000000 +0200
@@ -0,0 +1,59 @@
+/***************************************************************************
+ * Copyright (C) 2013 by Eike Hein *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program 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 General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
+ ***************************************************************************/
+
+#ifndef DRAGHELPER_H
+#define DRAGHELPER_H
+
+#include <QObject>
+#include <QIcon>
+
+#include "milou_export.h"
+
+class QQuickItem;
+class QMimeData;
+
+namespace Milou {
+
+class MILOU_EXPORT DragHelper : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int dragIconSize READ dragIconSize WRITE setDragIconSize NOTIFY dragIconSizeChanged)
+
+ public:
+ DragHelper(QObject *parent = 0);
+ ~DragHelper();
+
+ int dragIconSize() const;
+ void setDragIconSize(int size);
+
+ Q_INVOKABLE bool isDrag(int oldX, int oldY, int newX, int newY) const;
+ Q_INVOKABLE void startDrag(QQuickItem* item, QMimeData *mimeData, const QIcon &icon = QIcon());
+
+ Q_SIGNALS:
+ void dragIconSizeChanged() const;
+ void dropped() const;
+
+ private:
+ int m_dragIconSize;
+ Q_INVOKABLE void doDrag(QQuickItem* item, QMimeData *mimeData, const QIcon &icon = QIcon()) const;
+};
+
+}
+
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/milou-5.5.5/lib/qml/ResultDelegate.qml new/milou-5.6.1/lib/qml/ResultDelegate.qml
--- old/milou-5.5.5/lib/qml/ResultDelegate.qml 2016-03-01 14:38:13.000000000 +0100
+++ new/milou-5.6.1/lib/qml/ResultDelegate.qml 2016-03-29 16:15:28.000000000 +0200
@@ -1,6 +1,7 @@
/*
* This file is part of the KDE Milou Project
* Copyright (C) 2013-2014 Vishesh Handa
+ * Copyright (C) 2015-2016 Kai Uwe Broulik
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -23,35 +24,101 @@
import QtQuick 2.1
import QtQuick.Layouts 1.1
+import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.kquickcontrolsaddons 2.0 as QtExtra
+
import "globals.js" as Globals
MouseArea {
id: resultDelegate
+
property variant theModel: model
- property string typeText: {
- var currentType = model.type
- var reversed = resultDelegate.ListView.view.reversed
- var nextIndex = model.index + (reversed ? 1 : -1)
- var nextType = resultDelegate.ListView.view.model.getType(nextIndex)
-
- if (nextType != currentType) {
- return String(currentType)
- } else {
- return ""
+ readonly property bool isCurrent: ListView.isCurrentItem // cannot properly Connect {} to this
+ readonly property bool sectionHasChanged: (reversed && ListView.section != ListView.nextSection)
+ || (!reversed && ListView.section != ListView.previousSection)
+
+ property int activeAction: -1
+
+ property string typeText: sectionHasChanged ? ListView.section : ""
+
+ property bool __pressed: false
+ property int __pressX: -1
+ property int __pressY: -1
+
+ onIsCurrentChanged: {
+ if (!isCurrent) {
+ activeAction = -1
+ }
+ }
+
+ function activateNextAction() {
+ if (activeAction === actionsRepeater.count - 1) { // last action, do nothing
+ return false
+ }
+ ++activeAction
+ return true
+ }
+
+ function activatePreviousAction() {
+ if (activeAction < 0) { // no action, do nothing
+ return false
}
+ --activeAction
+ return true
+ }
+
+ function activateLastAction() {
+ activeAction = actionsRepeater.count - 1
}
width: listItem.implicitWidth
height: listItem.implicitHeight
+ acceptedButtons: Qt.LeftButton
hoverEnabled: true
onEntered: {
listView.currentIndex = index
}
+ onPressed: {
+ __pressed = true;
+ __pressX = mouse.x;
+ __pressY = mouse.y;
+ }
+
+ onReleased: {
+ if (__pressed) {
+ listView.currentIndex = model.index
+ listView.runCurrentIndex()
+ }
+
+ __pressed = false;
+ __pressX = -1;
+ __pressY = -1;
+ }
+
+ onPositionChanged: {
+ if (__pressX != -1 && typeof dragHelper !== "undefined" && dragHelper.isDrag(__pressX, __pressY, mouse.x, mouse.y)) {
+ var mimeData = ListView.view.model.getMimeData(index);
+ if (mimeData) {
+ dragHelper.startDrag(root, mimeData, model.decoration);
+ __pressed = false;
+ __pressX = -1;
+ __pressY = -1;
+ }
+ }
+ }
+
+ onContainsMouseChanged: {
+ if (!containsMouse) {
+ __pressed = false;
+ __pressX = -1;
+ __pressY = -1;
+ }
+ }
+
PlasmaComponents.Label {
id: typeText
text: resultDelegate.typeText
@@ -71,52 +138,95 @@
PlasmaComponents.ListItem {
id: listItem
- enabled: true
-
- onClicked: {
- listView.currentIndex = model.index
- listView.runCurrentIndex()
- }
-
- RowLayout {
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.leftMargin: Globals.CategoryWidth
- height: typePixmap.height
- QtExtra.QIconItem {
- id: typePixmap
- width: Globals.IconSize
- height: Globals.IconSize
-
- icon: model.decoration
- smooth: true
+ // fake pressed look
+ checked: resultDelegate.pressed
+ separatorVisible: resultDelegate.sectionHasChanged
+ && !resultDelegate.isCurrent
+ && (index === 0 || resultDelegate.ListView.view.currentIndex !== (index - 1))
+
+ Item {
+ anchors {
+ left: parent.left
+ right: parent.right
+ leftMargin: Globals.CategoryWidth
}
+ height: typePixmap.height
- PlasmaComponents.Label {
- id: displayLabel
- text: String(typeof modelData !== "undefined" ? modelData : model.display)
-
- height: typePixmap.height
-
- elide: Text.ElideMiddle
- maximumLineCount: 1
-
- Layout.maximumWidth: parent.width - displayLabel.x
+ RowLayout {
+ anchors {
+ left: parent.left
+ right: actionsRow.left
+ rightMargin: units.smallSpacing
+ }
+
+ QtExtra.QIconItem {
+ id: typePixmap
+ width: Globals.IconSize
+ height: Globals.IconSize
+
+ icon: model.decoration
+ smooth: true
+ }
+
+ PlasmaComponents.Label {
+ id: displayLabel
+ text: String(typeof modelData !== "undefined" ? modelData : model.display)
+
+ height: typePixmap.height
+
+ elide: Text.ElideMiddle
+ wrapMode: Text.NoWrap
+
+ Layout.maximumWidth: parent.width - displayLabel.x
+ }
+
+ PlasmaComponents.Label {
+ id: subtextLabel
+ text: model.isDuplicate > 1 ? String(model.subtext) : ""
+
+ color: theme.textColor
+ opacity: 0.3
+
+ height: typePixmap.height
+
+ elide: Text.ElideMiddle
+ wrapMode: Text.NoWrap
+ Layout.fillWidth: true
+ }
}
- PlasmaComponents.Label {
- id: subtextLabel
- text: model.isDuplicate > 1 ? String(model.subtext) : ""
-
- color: theme.textColor
- opacity: 0.3
-
- height: typePixmap.height
-
- elide: Text.ElideRight
- maximumLineCount: 1
- Layout.fillWidth: true
+ Row {
+ id: actionsRow
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ visible: resultDelegate.isCurrent
+
+ Repeater {
+ id: actionsRepeater
+ model: typeof actions !== "undefined" ? actions : 0
+
+ PlasmaComponents.ToolButton {
+ width: height
+ height: listItem.height
+ visible: modelData.visible
+ enabled: modelData.enabled
+ tooltip: modelData.text
+ checkable: checked
+ checked: resultDelegate.activeAction === index
+
+ PlasmaCore.IconItem {
+ anchors.centerIn: parent
+ width: Globals.IconSize
+ height: Globals.IconSize
+ // ToolButton cannot cope with QIcon
+ source: modelData.icon
+ active: parent.hovered || parent.checked
+ }
+
+ onClicked: listView.runAction(index)
+ }
+ }
}
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/milou-5.5.5/lib/qml/ResultsView.qml new/milou-5.6.1/lib/qml/ResultsView.qml
--- old/milou-5.5.5/lib/qml/ResultsView.qml 2016-03-01 14:38:13.000000000 +0100
+++ new/milou-5.6.1/lib/qml/ResultsView.qml 2016-03-29 16:15:28.000000000 +0200
@@ -24,7 +24,7 @@
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.core 2.0 as PlasmaCore
-import org.kde.milou 0.1 as Milou
+import org.kde.milou 0.2 as Milou
import "globals.js" as Globals
@@ -32,20 +32,33 @@
id: listView
property alias queryString: resultModel.queryString
property alias runner: resultModel.runner
+ property alias runnerName: resultModel.runnerName
+ property alias runnerIcon: resultModel.runnerIcon
property bool reversed
signal activated
signal updateQueryString(string text, int cursorPosition)
+ // NOTE this also flips increment/decrementCurrentIndex (Bug 360789)
verticalLayoutDirection: reversed ? ListView.BottomToTop : ListView.TopToBottom
keyNavigationWraps: true
highlight: PlasmaComponents.Highlight {}
highlightMoveDuration: 0
+ section {
+ criteria: ViewSection.FullString
+ property: "type"
+ }
+
// This is used to keep track if the user has pressed enter before
// the first result has been shown, in the case the first result should
// be run when the model is populated
property bool runAutomatically
+ Milou.DragHelper {
+ id: dragHelper
+ dragIconSize: units.iconSizes.medium
+ }
+
model: Milou.SourcesModel {
id: resultModel
queryLimit: 20
@@ -80,8 +93,12 @@
if (!currentItem) {
runAutomatically = true
return;
- }
- else {
+ } else {
+ if (currentItem.activeAction > -1) {
+ runAction(currentItem.activeAction)
+ return
+ }
+
if (resultModel.run(currentIndex)) {
activated()
}
@@ -89,10 +106,39 @@
}
}
- Keys.onTabPressed: incrementCurrentIndex()
- Keys.onBacktabPressed: decrementCurrentIndex()
- Keys.onUpPressed: decrementCurrentIndex();
- Keys.onDownPressed: incrementCurrentIndex();
+ function runAction(index) {
+ if (resultModel.runAction(currentIndex, index)) {
+ activated()
+ }
+ }
+
+ Keys.onTabPressed: {
+ if (!currentItem || !currentItem.activateNextAction()) {
+ if (reversed) {
+ decrementCurrentIndex()
+ } else {
+ incrementCurrentIndex()
+ }
+ }
+ }
+ Keys.onBacktabPressed: {
+ if (!currentItem || !currentItem.activatePreviousAction()) {
+ if (reversed) {
+ incrementCurrentIndex()
+ } else {
+ decrementCurrentIndex()
+ }
+
+ // activate previous action cannot know whether we want to back tab from an action
+ // to the main result or back tab from another search result, so we explicitly highlight
+ // the last action here to provide a consistent navigation experience
+ if (currentItem) {
+ currentItem.activateLastAction()
+ }
+ }
+ }
+ Keys.onUpPressed: reversed ? incrementCurrentIndex() : decrementCurrentIndex();
+ Keys.onDownPressed: reversed ? decrementCurrentIndex() : incrementCurrentIndex();
boundsBehavior: Flickable.StopAtBounds
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/milou-5.5.5/lib/qml/qmlplugins.cpp new/milou-5.6.1/lib/qml/qmlplugins.cpp
--- old/milou-5.5.5/lib/qml/qmlplugins.cpp 2016-03-01 14:38:13.000000000 +0100
+++ new/milou-5.6.1/lib/qml/qmlplugins.cpp 2016-03-29 16:15:28.000000000 +0200
@@ -24,6 +24,7 @@
#include "sourcesmodel.h"
#include "preview.h"
+#include "draghelper.h"
#include
@@ -35,5 +36,6 @@
{
qmlRegisterTypeMilou::SourcesModel (uri, 0, 1, "SourcesModel");
qmlRegisterTypeMilou::Preview (uri, 0, 1, "Preview");
+ qmlRegisterTypeMilou::DragHelper (uri, 0, 2, "DragHelper");
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/milou-5.5.5/lib/sourcesmodel.cpp new/milou-5.6.1/lib/sourcesmodel.cpp
--- old/milou-5.5.5/lib/sourcesmodel.cpp 2016-03-01 14:38:13.000000000 +0100
+++ new/milou-5.6.1/lib/sourcesmodel.cpp 2016-03-29 16:15:28.000000000 +0200
@@ -26,7 +26,9 @@
#include <KDirWatch>
#include <KSharedConfig>
+#include <QAction>
#include <QModelIndex>
+#include <QMimeData>
#include <QSet>
using namespace Milou;
@@ -58,6 +60,7 @@
QHash roles = QAbstractListModel::roleNames();
roles.insert(TypeRole, "type");
roles.insert(SubtextRole, "subtext");
+ roles.insert(ActionsRole, "actions");
roles.insert(DuplicateRole, "isDuplicate");
roles.insert(PreviewTypeRole, "previewType");
roles.insert(PreviewUrlRole, "previewUrl");
@@ -108,6 +111,21 @@
case SubtextRole:
return m.subtext();
+ case ActionsRole: {
+ const auto &actions = m_manager->actionsForMatch(m);
+ if (actions.isEmpty()) {
+ return QVariantList();
+ }
+
+ QVariantList actionsList;
+ actionsList.reserve(actions.size());
+
+ for (QAction *action : actions) {
+ actionsList.append(QVariant::fromValue(action));
+ }
+
+ return actionsList;
+ }
case DuplicateRole:
return m_duplicates.value(m.text());
@@ -151,7 +169,34 @@
void SourcesModel::setRunner(const QString& runner)
{
- m_runner = runner;
+ if (m_runner != runner) {
+ m_runner = runner;
+
+ m_manager->setSingleModeRunnerId(m_runner);
+ m_manager->setSingleMode(!m_runner.isEmpty());
+
+ emit runnerChanged();
+ }
+}
+
+QString SourcesModel::runnerName() const
+{
+ auto *singleRunner = m_manager->singleModeRunner();
+ if (!singleRunner) {
+ return QString();
+ }
+
+ return singleRunner->name();
+}
+
+QIcon SourcesModel::runnerIcon() const
+{
+ auto *singleRunner = m_manager->singleModeRunner();
+ if (!singleRunner) {
+ return QIcon();
+ }
+
+ return singleRunner->icon();
}
void SourcesModel::setQueryLimit(int limit)
@@ -176,8 +221,6 @@
}
m_modelPopulated = false;
- m_manager->setSingleModeRunnerId(m_runner);
- m_manager->setSingleMode(!m_runner.isEmpty());
m_manager->launchQuery(m_queryString, m_runner);
// We avoid clearing the model instantly, and instead wait for the results
@@ -380,8 +423,36 @@
return true;
}
+bool SourcesModel::runAction(int index, int actionIndex)
+{
+ Plasma::QueryMatch match = fetchMatch(index);
+ Q_ASSERT(match.runner());
+
+ const auto &actions = m_manager->actionsForMatch(match);
+ if (actionIndex < 0 || actionIndex >= actions.count()) {
+ return false;
+ }
+
+ QAction *action = actions.at(actionIndex);
+ match.setSelectedAction(action);
+ m_manager->run(match);
+ return true;
+}
+
void SourcesModel::reloadConfiguration()
{
KSharedConfig::openConfig("krunnerrc")->reparseConfiguration();
m_manager->reloadConfiguration();
}
+
+QMimeData *SourcesModel::getMimeData(int index) const
+{
+ Plasma::QueryMatch match = fetchMatch(index);
+ Q_ASSERT(match.runner());
+
+ // we're returning a parent-less QObject from a Q_INVOKABLE
+ // which means the QML engine will take care of deleting it eventually
+ QMimeData *mimeData = m_manager->mimeDataForMatch(match);
+
+ return mimeData;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/milou-5.5.5/lib/sourcesmodel.h new/milou-5.6.1/lib/sourcesmodel.h
--- old/milou-5.5.5/lib/sourcesmodel.h 2016-03-01 14:38:13.000000000 +0100
+++ new/milou-5.6.1/lib/sourcesmodel.h 2016-03-29 16:15:28.000000000 +0200
@@ -38,7 +38,10 @@
Q_OBJECT
Q_PROPERTY(QString queryString READ queryString WRITE setQueryString)
Q_PROPERTY(int queryLimit READ queryLimit WRITE setQueryLimit)
- Q_PROPERTY(QString runner READ runner WRITE setRunner)
+ Q_PROPERTY(QString runner READ runner WRITE setRunner NOTIFY runnerChanged)
+
+ Q_PROPERTY(QString runnerName READ runnerName NOTIFY runnerChanged)
+ Q_PROPERTY(QIcon runnerIcon READ runnerIcon NOTIFY runnerChanged)
public:
explicit SourcesModel(QObject* parent = 0);
@@ -47,6 +50,7 @@
enum Roles {
TypeRole = Qt::UserRole + 1,
SubtextRole,
+ ActionsRole,
DuplicateRole,
PreviewTypeRole,
PreviewUrlRole,
@@ -62,6 +66,9 @@
QString runner() const;
void setRunner(const QString& runner);
+ QString runnerName() const;
+ QIcon runnerIcon() const;
+
QString queryString() const;
int queryLimit() const;
@@ -75,6 +82,8 @@
*/
void updateSearchTerm(const QString& text, int pos);
+ void runnerChanged();
+
public slots:
void reloadConfiguration();
void setQueryString(const QString& str);
@@ -82,11 +91,13 @@
void clear();
bool run(int index);
+ bool runAction(int index, int actionIndex);
Q_INVOKABLE QString getType(int index) const {
return data(createIndex(index, 0), TypeRole).toString();
}
+ Q_INVOKABLE QMimeData *getMimeData(int index) const;
private slots:
void slotMatchesChanged(const QListPlasma::QueryMatch& list);
Files old/milou-5.5.5/po/ar/messages.mo and new/milou-5.6.1/po/ar/messages.mo differ
Files old/milou-5.5.5/po/ast/messages.mo and new/milou-5.6.1/po/ast/messages.mo differ
Files old/milou-5.5.5/po/bs/messages.mo and new/milou-5.6.1/po/bs/messages.mo differ
Files old/milou-5.5.5/po/ca/messages.mo and new/milou-5.6.1/po/ca/messages.mo differ
Files old/milou-5.5.5/po/ca@valencia/messages.mo and new/milou-5.6.1/po/ca@valencia/messages.mo differ
Files old/milou-5.5.5/po/cs/messages.mo and new/milou-5.6.1/po/cs/messages.mo differ
Files old/milou-5.5.5/po/da/messages.mo and new/milou-5.6.1/po/da/messages.mo differ
Files old/milou-5.5.5/po/de/messages.mo and new/milou-5.6.1/po/de/messages.mo differ
Files old/milou-5.5.5/po/el/messages.mo and new/milou-5.6.1/po/el/messages.mo differ
Files old/milou-5.5.5/po/en_GB/messages.mo and new/milou-5.6.1/po/en_GB/messages.mo differ
Files old/milou-5.5.5/po/es/messages.mo and new/milou-5.6.1/po/es/messages.mo differ
Files old/milou-5.5.5/po/et/messages.mo and new/milou-5.6.1/po/et/messages.mo differ
Files old/milou-5.5.5/po/fi/messages.mo and new/milou-5.6.1/po/fi/messages.mo differ
Files old/milou-5.5.5/po/fr/messages.mo and new/milou-5.6.1/po/fr/messages.mo differ
Files old/milou-5.5.5/po/gl/messages.mo and new/milou-5.6.1/po/gl/messages.mo differ
Files old/milou-5.5.5/po/hu/messages.mo and new/milou-5.6.1/po/hu/messages.mo differ
Files old/milou-5.5.5/po/ia/messages.mo and new/milou-5.6.1/po/ia/messages.mo differ
Files old/milou-5.5.5/po/it/messages.mo and new/milou-5.6.1/po/it/messages.mo differ
Files old/milou-5.5.5/po/ja/messages.mo and new/milou-5.6.1/po/ja/messages.mo differ
Files old/milou-5.5.5/po/ko/messages.mo and new/milou-5.6.1/po/ko/messages.mo differ
Files old/milou-5.5.5/po/lt/messages.mo and new/milou-5.6.1/po/lt/messages.mo differ
Files old/milou-5.5.5/po/nb/messages.mo and new/milou-5.6.1/po/nb/messages.mo differ
Files old/milou-5.5.5/po/nds/messages.mo and new/milou-5.6.1/po/nds/messages.mo differ
Files old/milou-5.5.5/po/nl/messages.mo and new/milou-5.6.1/po/nl/messages.mo differ
Files old/milou-5.5.5/po/nn/messages.mo and new/milou-5.6.1/po/nn/messages.mo differ
Files old/milou-5.5.5/po/pa/messages.mo and new/milou-5.6.1/po/pa/messages.mo differ
Files old/milou-5.5.5/po/pl/messages.mo and new/milou-5.6.1/po/pl/messages.mo differ
Files old/milou-5.5.5/po/pt/messages.mo and new/milou-5.6.1/po/pt/messages.mo differ
Files old/milou-5.5.5/po/pt_BR/messages.mo and new/milou-5.6.1/po/pt_BR/messages.mo differ
Files old/milou-5.5.5/po/ro/messages.mo and new/milou-5.6.1/po/ro/messages.mo differ
Files old/milou-5.5.5/po/ru/messages.mo and new/milou-5.6.1/po/ru/messages.mo differ
Files old/milou-5.5.5/po/sk/messages.mo and new/milou-5.6.1/po/sk/messages.mo differ
Files old/milou-5.5.5/po/sl/messages.mo and new/milou-5.6.1/po/sl/messages.mo differ
Files old/milou-5.5.5/po/sr/messages.mo and new/milou-5.6.1/po/sr/messages.mo differ
Files old/milou-5.5.5/po/sr@ijekavian/messages.mo and new/milou-5.6.1/po/sr@ijekavian/messages.mo differ
Files old/milou-5.5.5/po/sr@ijekavianlatin/messages.mo and new/milou-5.6.1/po/sr@ijekavianlatin/messages.mo differ
Files old/milou-5.5.5/po/sr@latin/messages.mo and new/milou-5.6.1/po/sr@latin/messages.mo differ
Files old/milou-5.5.5/po/sv/messages.mo and new/milou-5.6.1/po/sv/messages.mo differ
Files old/milou-5.5.5/po/tr/messages.mo and new/milou-5.6.1/po/tr/messages.mo differ
Files old/milou-5.5.5/po/uk/messages.mo and new/milou-5.6.1/po/uk/messages.mo differ
Files old/milou-5.5.5/po/zh_CN/messages.mo and new/milou-5.6.1/po/zh_CN/messages.mo differ
Files old/milou-5.5.5/po/zh_TW/messages.mo and new/milou-5.6.1/po/zh_TW/messages.mo differ