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.sen...@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.sen...@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 <h...@kde.org> * + * * + * 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 <h...@kde.org> * + * * + * 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 <m...@vhanda.in> + * Copyright (C) 2015-2016 Kai Uwe Broulik <k...@privat.broulik.de> * * 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 <QtQml/qqml.h> @@ -35,5 +36,6 @@ { qmlRegisterType<Milou::SourcesModel> (uri, 0, 1, "SourcesModel"); qmlRegisterType<Milou::Preview> (uri, 0, 1, "Preview"); + qmlRegisterType<Milou::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<int, QByteArray> 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 QList<Plasma::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