diff --git a/app/SettingsBase.cpp b/app/SettingsBase.cpp --- a/app/SettingsBase.cpp +++ b/app/SettingsBase.cpp @@ -140,8 +140,7 @@ quitAction = actionCollection()->addAction( KStandardAction::Quit, QStringLiteral("quit_action"), this, SLOT(close()) ); // Configure goes at the end configureAction = actionCollection()->addAction( KStandardAction::Preferences, QStringLiteral("configure"), this, SLOT(configShow()) ); - actionCollection()->setDefaultShortcut(configureAction, QKeySequence(Qt::CTRL + Qt::Key_M)); - configureAction->setText( i18n("Configure") ); + configureAction->setText( i18n("Configure...") ); // Help after it initHelpMenu(); configureAction->setIcon(QIcon::fromTheme(QStringLiteral("settings-configure"))); diff --git a/sidebar/SidebarMode.h b/sidebar/SidebarMode.h --- a/sidebar/SidebarMode.h +++ b/sidebar/SidebarMode.h @@ -51,6 +51,7 @@ Q_PROPERTY(int activeCategory READ activeCategory WRITE setActiveCategory NOTIFY activeCategoryChanged) Q_PROPERTY(int activeSubCategory READ activeSubCategory WRITE setActiveSubCategory NOTIFY activeSubCategoryChanged) Q_PROPERTY(int width READ width NOTIFY widthChanged) + Q_PROPERTY(bool actionMenuVisible READ actionMenuVisible NOTIFY actionMenuVisibleChanged) public: SidebarMode(QObject * parent, const QVariantList& ); @@ -72,14 +73,17 @@ int width() const; + bool actionMenuVisible() const; + Q_INVOKABLE QAction *action(const QString &name) const; // QML doesn't understand QIcon, otherwise we could get it from the QAction itself Q_INVOKABLE QString actionIconName(const QString &name) const; Q_INVOKABLE void requestToolTip(int index, const QRectF &rect); Q_INVOKABLE void requestSubCategoryToolTip(int index, const QRectF &rect); Q_INVOKABLE void hideToolTip(); Q_INVOKABLE void hideSubCategoryToolTip(); Q_INVOKABLE void loadMostUsed(int index); + Q_INVOKABLE void showActionMenu(const QPoint &position); protected: QList views() const override; @@ -94,10 +98,12 @@ void activeCategoryChanged(); void activeSubCategoryChanged(); void widthChanged(); + void actionMenuVisibleChanged(); private: class Private; Private *const d; + void setActionMenuVisible(const bool &actionMenuVisible); }; #endif diff --git a/sidebar/SidebarMode.cpp b/sidebar/SidebarMode.cpp --- a/sidebar/SidebarMode.cpp +++ b/sidebar/SidebarMode.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #include #include @@ -249,6 +250,7 @@ QPersistentModelIndex activeCategoryIndex; int activeCategory; int activeSubCategory; + bool m_actionMenuVisible = false; }; SidebarMode::SidebarMode( QObject *parent, const QVariantList& ) @@ -396,6 +398,21 @@ d->moduleView->loadModule( idx ); } +void SidebarMode::showActionMenu(const QPoint &position) +{ + QMenu *menu = new QMenu(); + connect(menu, &QMenu::aboutToHide, this, [this] () { setActionMenuVisible(false); } ); + menu->setAttribute(Qt::WA_DeleteOnClose); + + const QStringList actionList { QStringLiteral("configure"), QStringLiteral("help_contents"), QStringLiteral("help_about_app"), QStringLiteral("help_about_kde") }; + for (const QString &actionName : actionList) { + menu->addAction(d->collection->action(actionName)); + } + + menu->popup(position); + setActionMenuVisible(true); +} + void SidebarMode::changeModule( const QModelIndex& activeModule ) { d->moduleView->closeModules(); @@ -442,11 +459,6 @@ emit activeSubCategoryChanged(); } -int SidebarMode::activeSubCategory() const -{ - return d->activeSubCategory; -} - void SidebarMode::setActiveSubCategory(int cat) { if (d->activeSubCategory == cat) { @@ -468,6 +480,26 @@ return d->mainWidget->width(); } +bool SidebarMode::actionMenuVisible() const +{ + return d->m_actionMenuVisible; +} + +void SidebarMode::setActionMenuVisible(const bool &actionMenuVisible) +{ + if (d->m_actionMenuVisible == actionMenuVisible) { + return; + } + + d->m_actionMenuVisible = actionMenuVisible; + emit actionMenuVisibleChanged(); +} + +int SidebarMode::activeSubCategory() const +{ + return d->activeSubCategory; +} + void SidebarMode::initWidget() { // Create the widgets diff --git a/sidebar/package/contents/ui/ActionMenu.qml b/sidebar/package/contents/ui/ActionMenu.qml deleted file mode 100644 --- a/sidebar/package/contents/ui/ActionMenu.qml +++ /dev/null @@ -1,44 +0,0 @@ -/* - Copyright (c) 2017 Kai Uwe Broulik - - 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. -*/ - -import QtQuick 2.3 -import QtQml 2.2 -import QtQuick.Controls 1.0 as QtControls - -QtControls.Menu { - id: menu - - property alias actions: instantiator.model - - Instantiator { - id: instantiator - - delegate: QtControls.MenuItem { - readonly property QtObject action: systemsettings.action(modelData) - - text: action.text - iconName: systemsettings.actionIconName(modelData) - visible: action.visible - enabled: action.enabled - onTriggered: action.trigger() - } - - onObjectAdded: menu.insertItem(index, object) - onObjectRemoved: menu.removeItem(object) - } -} diff --git a/sidebar/package/contents/ui/CategoriesPage.qml b/sidebar/package/contents/ui/CategoriesPage.qml --- a/sidebar/package/contents/ui/CategoriesPage.qml +++ b/sidebar/package/contents/ui/CategoriesPage.qml @@ -16,12 +16,11 @@ Boston, MA 02110-1301, USA. */ -import QtQuick 2.3 +import QtQuick 2.5 +import QtQuick.Controls 2.5 as QQC2 import QtQuick.Layouts 1.1 -import QtQuick.Controls 1.0 as QtControls -import QtQuick.Controls 2.0 as QtControls2 -import org.kde.kirigami 2.7 as Kirigami +import org.kde.kirigami 2.8 as Kirigami Kirigami.ScrollablePage { id: mainColumn @@ -40,35 +39,33 @@ fill: parent margins: Kirigami.Units.smallSpacing } - QtControls.ToolButton { + + QQC2.ToolButton { id: menuButton - iconName: "application-menu" + icon.name: "application-menu" + checkable: true + checked: systemsettings.actionMenuVisible Layout.maximumWidth: Kirigami.Units.iconSizes.smallMedium + Kirigami.Units.smallSpacing * 2 Layout.maximumHeight: width Keys.onBacktabPressed: { root.focusPreviousRequest() } - menu: ActionMenu { - actions: ["configure", "help_contents", "help_about_app", "help_about_kde"] + onClicked: systemsettings.showActionMenu(mapToGlobal(0, height)) + + QQC2.ToolTip { + text: i18n("Show menu") } } - Kirigami.ActionTextField { + + Kirigami.SearchField { id: searchField focus: true Layout.minimumHeight: Layout.maximumHeight Layout.maximumHeight: Kirigami.Units.iconSizes.smallMedium + Kirigami.Units.smallSpacing * 2 Layout.fillWidth: true - placeholderText: i18n("Search...") onTextChanged: { systemsettings.categoryModel.filterRegExp = text; } - rightActions: [ - Kirigami.Action { - iconName: LayoutMirroring.enabled ? "edit-clear-rtl" : "edit-clear" - visible: searchField.text.length !== 0 - onTriggered: searchField.text = "" - } - ] } } Kirigami.Separator { diff --git a/sidebar/package/contents/ui/IntroIcon.qml b/sidebar/package/contents/ui/IntroIcon.qml --- a/sidebar/package/contents/ui/IntroIcon.qml +++ b/sidebar/package/contents/ui/IntroIcon.qml @@ -16,11 +16,11 @@ Boston, MA 02110-1301, USA. */ -import QtQuick 2.1 +import QtQuick 2.5 +import QtQuick.Controls 2.5 as QQC2 import QtQuick.Layouts 1.1 -import QtQuick.Controls 2.0 as QQC2 -import org.kde.kirigami 2.1 as Kirigami +import org.kde.kirigami 2.5 as Kirigami MouseArea { id: item diff --git a/sidebar/package/contents/ui/SubCategoryPage.qml b/sidebar/package/contents/ui/SubCategoryPage.qml --- a/sidebar/package/contents/ui/SubCategoryPage.qml +++ b/sidebar/package/contents/ui/SubCategoryPage.qml @@ -16,12 +16,11 @@ Boston, MA 02110-1301, USA. */ -import QtQuick 2.1 +import QtQuick 2.5 +import QtQuick.Controls 2.5 as QQC2 import QtQuick.Layouts 1.1 -import QtQuick.Controls 1.0 as QtControls -import QtQuick.Controls 2.0 as QtControls2 -import org.kde.kirigami 2.3 as Kirigami +import org.kde.kirigami 2.5 as Kirigami Kirigami.ScrollablePage { id: subCategoryColumn diff --git a/sidebar/package/contents/ui/introPage.qml b/sidebar/package/contents/ui/introPage.qml --- a/sidebar/package/contents/ui/introPage.qml +++ b/sidebar/package/contents/ui/introPage.qml @@ -16,10 +16,11 @@ Boston, MA 02110-1301, USA. */ -import QtQuick 2.1 +import QtQuick 2.5 +import QtQuick.Controls 2.5 as QQC2 import QtQuick.Layouts 1.1 -import QtQuick.Controls 2.0 as Controls -import org.kde.kirigami 2.1 as Kirigami + +import org.kde.kirigami 2.5 as Kirigami Rectangle { id: root @@ -49,7 +50,7 @@ height: width opacity: 0.3 } - Controls.Label { + QQC2.Label { Layout.alignment: Qt.AlignHCenter text: i18n("System Settings") } diff --git a/sidebar/package/contents/ui/main.qml b/sidebar/package/contents/ui/main.qml --- a/sidebar/package/contents/ui/main.qml +++ b/sidebar/package/contents/ui/main.qml @@ -16,10 +16,9 @@ Boston, MA 02110-1301, USA. */ -import QtQuick 2.1 -import QtQuick.Layouts 1.1 -import QtQuick.Controls 1.0 as QtControls -import org.kde.kirigami 2.1 as Kirigami +import QtQuick 2.5 + +import org.kde.kirigami 2.5 as Kirigami Kirigami.ApplicationItem { id: root