diff --git a/app/SettingsBase.cpp b/app/SettingsBase.cpp --- a/app/SettingsBase.cpp +++ b/app/SettingsBase.cpp @@ -141,7 +141,7 @@ // 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 @@ -80,6 +80,7 @@ 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; 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 @@ -396,6 +397,19 @@ d->moduleView->loadModule( idx ); } +void SidebarMode::showActionMenu(const QPoint &position) +{ + QMenu *menu = new QMenu(); + QStringList actionList { QStringLiteral("configure"), QStringLiteral("help_contents"), QStringLiteral("help_about_app"), QStringLiteral("help_about_kde") }; + for (QAction *a : d->collection->actions()) { + if (actionList.contains(a->objectName())) { + menu->addAction(a); + } + } + connect(menu, &QMenu::aboutToHide, this, [this] () { QMetaObject::invokeMethod(d->quickWidget->rootObject(), "closeMenu"); } ); + menu->exec(position); +} + void SidebarMode::changeModule( const QModelIndex& activeModule ) { d->moduleView->closeModules(); 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,17 +16,18 @@ 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 Component.onCompleted: searchField.forceActiveFocus() + property alias actionMenuButton: menuButton + header: Rectangle { Kirigami.Theme.colorSet: Kirigami.Theme.Window Kirigami.Theme.inherit: false @@ -40,35 +41,28 @@ fill: parent margins: Kirigami.Units.smallSpacing } - QtControls.ToolButton { + + QQC2.ToolButton { id: menuButton - iconName: "application-menu" + icon.name: "application-menu" + checkable: true 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)) } - 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 @@ -41,6 +40,10 @@ subCategoryColumn.focus = true; } + function closeMenu() { + mainColumn.actionMenuButton.checked = false; + } + wideScreen: pageStack.depth > 1 && systemsettings.width > Kirigami.Units.gridUnit * 70 CategoriesPage { id: mainColumn