From 287081aaaded3e17264afc36fc0a5e0317214a71 Mon Sep 17 00:00:00 2001 From: hewenfei Date: Sun, 11 Jun 2023 17:23:00 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=89=A9=E5=B1=95=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=9A=90=E8=97=8F=E7=95=8C=E9=9D=A2=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=9B=B4=E6=96=B0=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extension/recent-file/metadata.json | 2 +- qml/AppUI/Sidebar.qml | 214 ++++++++++++++++----------- src/extension/menu-extension-iface.h | 9 +- src/extension/menu-extension.cpp | 5 + src/extension/menu-extension.h | 3 +- 5 files changed, 140 insertions(+), 93 deletions(-) diff --git a/extension/recent-file/metadata.json b/extension/recent-file/metadata.json index 9079b7e..d076fa2 100644 --- a/extension/recent-file/metadata.json +++ b/extension/recent-file/metadata.json @@ -1,4 +1,4 @@ { "Type": "UKUI_MENU_EXTENSION", - "Version": "1.0.0" + "Version": "1.0.1" } diff --git a/qml/AppUI/Sidebar.qml b/qml/AppUI/Sidebar.qml index cd9212e..4eb182a 100644 --- a/qml/AppUI/Sidebar.qml +++ b/qml/AppUI/Sidebar.qml @@ -24,67 +24,89 @@ import QtQuick.Controls 2.5 import AppControls2 1.0 as AppControls2 import org.ukui.menu.core 1.0 import org.ukui.menu.utils 1.0 +import org.ukui.menu.extension 1.0 Item { ColumnLayout { + id: sidebarLayout + anchors.fill: parent anchors.topMargin: 12 spacing: 0 - Row { + function updateSidebarLayout(options) { + sidebarBottomBar.visible = !options.includes(MenuExtension.HideBottomBar); + fullScreenbutton.visible = !options.includes(MenuExtension.HideFullScreenButton); + } + + Item { + id: sidebarTopBar Layout.fillWidth: true Layout.preferredHeight: 40 Layout.rightMargin: 12 - Layout.leftMargin: 16 + Layout.leftMargin: 12 - ListView { - id: extensionListView - width: parent.width - 34 - height: parent.height - clip: true - spacing: 24 - interactive: false - orientation: ListView.Horizontal - model: extensionManager.extensionModel() - delegate: headerDelegate + RowLayout { + anchors.fill: parent + // spacing: 5 - function send(data) { - if (currentItem !== null) { - model.send(currentIndex, data); + ListView { + id: extensionInfoList + + Layout.fillWidth: true + Layout.fillHeight: true + Layout.leftMargin: 4 + Layout.rightMargin: 4 + + clip: true + spacing: 24 + interactive: false + orientation: ListView.Horizontal + model: extensionManager.extensionModel() + delegate: extensionInfoDelegate + + function send(data) { + if (currentItem !== null) { + model.send(currentIndex, data); + } + } + + onCurrentIndexChanged: { + if (currentItem !== null) { + currentItem.select(); + } } } - onCurrentIndexChanged: { - if (currentItem !== null) { - currentItem.select(); - } - } - } + AppControls2.StyleBackground { + id: fullScreenbutton + Layout.preferredWidth: 34 + Layout.preferredHeight: 34 + Layout.alignment: Qt.AlignVCenter - AppControls2.StyleBackground { - width: 34; height: width - radius: 4 - useStyleTransparent: false - alpha: buttonMouseArea.containsPress ? 0.65 : buttonMouseArea.containsMouse ? 0.40 : 0.00 - borderColor: Palette.Highlight - border.width: buttonMouseArea.activeFocus ? 2 : 0 - ThemeIcon { - anchors.centerIn: parent - width: parent.width / 2; height: width - source: "image://appicon/view-fullscreen-symbolic" - MouseArea { - id: buttonMouseArea - hoverEnabled: true - anchors.fill: parent - ToolTip.delay: 500 - ToolTip.text: qsTr("Expand") - ToolTip.visible: containsMouse + radius: 4 + useStyleTransparent: false + alpha: buttonMouseArea.containsPress ? 0.65 : buttonMouseArea.containsMouse ? 0.40 : 0.00 + borderColor: Palette.Highlight + border.width: buttonMouseArea.activeFocus ? 2 : 0 + ThemeIcon { + anchors.centerIn: parent + width: 16; height: 16 + source: "image://appicon/view-fullscreen-symbolic" + MouseArea { + id: buttonMouseArea + hoverEnabled: true + anchors.fill: parent + ToolTip.delay: 500 + ToolTip.text: qsTr("Expand") + ToolTip.visible: containsMouse - onClicked: mainWindow.isFullScreen = true - activeFocusOnTab: true - Keys.onPressed: { - if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return) { - mainWindow.isFullScreen = true; + onClicked: mainWindow.isFullScreen = true + activeFocusOnTab: true + Keys.onPressed: { + if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return) { + mainWindow.isFullScreen = true; + } } } } @@ -101,60 +123,72 @@ Item { anchors.fill: parent clip: true onLoaded: { - item.send.connect(extensionListView.send); + item.send.connect(extensionInfoList.send); + sidebarLayout.updateSidebarLayout(extensionInfoList.currentItem.extensionOptions); } Keys.onTabPressed: { - extensionListView.focus = true + extensionInfoList.focus = true } } } - Row { + Item { + id: sidebarBottomBar Layout.fillWidth: true - Layout.preferredHeight: 40 + Layout.preferredHeight: 32 + Layout.topMargin: 5 + Layout.bottomMargin: 8 + Layout.leftMargin: 12 Layout.rightMargin: 12 - layoutDirection: Qt.RightToLeft - AppControls2.StyleBackground { - width: 32 - height: 32 - paletteRole: Palette.Base - useStyleTransparent: false - alpha: powerButtonArea.containsPress ? 0.85 : powerButtonArea.containsMouse ? 0.65 : 0 - radius: height / 2 - borderColor: Palette.Highlight - border.width: powerButtonArea.activeFocus ? 2 : 0 - PowerButton { - id: powerButtonBase - } + RowLayout { + anchors.fill: parent + layoutDirection: Qt.RightToLeft + spacing: 5 - Image { - anchors.centerIn: parent - width: Math.floor(parent.width / 2) - height: width - source: powerButtonBase.icon - } + AppControls2.StyleBackground { + Layout.preferredWidth: 32 + Layout.preferredHeight: 32 + Layout.alignment: Qt.AlignVCenter - MouseArea { - id: powerButtonArea - anchors.fill: parent - hoverEnabled: true - ToolTip.delay: 500 - ToolTip.visible: containsMouse - ToolTip.text: powerButtonBase.toolTip - acceptedButtons: Qt.LeftButton | Qt.RightButton - property int spacingFromMenu: 16 - - activeFocusOnTab: true - Keys.onPressed: { - if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return) { - powerButtonBase.clicked(true, 0, 0, mainWindow.isFullScreen); - } + paletteRole: Palette.Base + useStyleTransparent: false + alpha: powerButtonArea.containsPress ? 0.85 : powerButtonArea.containsMouse ? 0.65 : 0 + radius: height / 2 + borderColor: Palette.Highlight + border.width: powerButtonArea.activeFocus ? 2 : 0 + PowerButton { + id: powerButtonBase } - onClicked: { - var buttonPosition = powerButtonArea.mapToGlobal(width, height); - powerButtonBase.clicked(mouse.button === Qt.LeftButton, buttonPosition.x + spacingFromMenu, buttonPosition.y + spacingFromMenu, mainWindow.isFullScreen); + Image { + anchors.centerIn: parent + width: 24 + height: 24 + source: powerButtonBase.icon + } + + MouseArea { + id: powerButtonArea + anchors.fill: parent + hoverEnabled: true + ToolTip.delay: 500 + ToolTip.visible: containsMouse + ToolTip.text: powerButtonBase.toolTip + acceptedButtons: Qt.LeftButton | Qt.RightButton + property int spacingFromMenu: 16 + + activeFocusOnTab: true + Keys.onPressed: { + if (event.key === Qt.Key_Enter || event.key === Qt.Key_Return) { + powerButtonBase.clicked(true, 0, 0, mainWindow.isFullScreen); + } + } + + onClicked: { + var buttonPosition = powerButtonArea.mapToGlobal(width, height); + powerButtonBase.clicked(mouse.button === Qt.LeftButton, buttonPosition.x + spacingFromMenu, buttonPosition.y + spacingFromMenu, mainWindow.isFullScreen); + } } } } @@ -162,18 +196,18 @@ Item { } Component { - id: headerDelegate + id: extensionInfoDelegate AppControls2.StyleBackground { - id: headerDelegateItem useStyleTransparent: false paletteRole: Palette.Highlight alpha: 0 radius: 4 borderColor: Palette.Highlight - border.width: headerDelegateItem.activeFocus ? 2 : 0 + border.width: activeFocus ? 2 : 0 property var extensionData: model.data + property var extensionOptions: model.options width: styleText.width height: ListView.view ? ListView.view.height : 0 @@ -219,8 +253,8 @@ Item { } Component.onCompleted: { - if (extensionListView.count > 0) { - extensionListView.currentIndex = 0; + if (extensionInfoList.count > 0) { + extensionInfoList.currentIndex = 0; } } } diff --git a/src/extension/menu-extension-iface.h b/src/extension/menu-extension-iface.h index 9ea2fbb..818df9e 100644 --- a/src/extension/menu-extension-iface.h +++ b/src/extension/menu-extension-iface.h @@ -21,7 +21,7 @@ #define UKUI_MENU_EXTENSION_TYPE "UKUI_MENU_EXTENSION" #define UKUI_MENU_EXTENSION_IFACE_IID "org.ukui.menu.extension" -#define UKUI_MENU_EXTENSION_IFACE_VERSION "1.0.0" +#define UKUI_MENU_EXTENSION_IFACE_VERSION "1.0.1" #include #include @@ -35,11 +35,18 @@ class Q_DECL_EXPORT MenuExtensionIFace : public QObject { Q_OBJECT public: + enum Option { + HideBottomBar, + HideFullScreenButton + }; + Q_ENUM(Option) + explicit MenuExtensionIFace(QObject *parent = nullptr) : QObject(parent) {}; virtual int index() = 0; virtual QString name() = 0; virtual QUrl url() = 0; virtual QVariantMap data() = 0; + virtual QVariantList options() { return {}; }; virtual void receive(QVariantMap data) = 0; Q_SIGNALS: diff --git a/src/extension/menu-extension.cpp b/src/extension/menu-extension.cpp index e915f66..0b5d9cb 100644 --- a/src/extension/menu-extension.cpp +++ b/src/extension/menu-extension.cpp @@ -23,6 +23,7 @@ #include #include #include +#include namespace UkuiMenu { @@ -35,6 +36,7 @@ MenuExtension *MenuExtension::instance() MenuExtension::MenuExtension() { qRegisterMetaType("ExtensionModel*"); + qmlRegisterUncreatableType("org.ukui.menu.extension", 1, 0, "MenuExtension", ""); // TODO load extension from filesystem. loadExtensions(); @@ -121,6 +123,7 @@ ExtensionModel::ExtensionModel(const QVector &extensions, Q m_roleNames.insert(Name, "name"); m_roleNames.insert(Url, "url"); m_roleNames.insert(Data, "data"); + m_roleNames.insert(Options, "options"); for (int i = 0; i < m_extensions.size(); ++i) { connect(m_extensions.at(i), &MenuExtensionIFace::dataUpdated, this, [this, i] { @@ -150,6 +153,8 @@ QVariant ExtensionModel::data(const QModelIndex &index, int role) const case Data: { return m_extensions.at(row)->data(); } + case Options: + return m_extensions.at(row)->options(); default: break; } diff --git a/src/extension/menu-extension.h b/src/extension/menu-extension.h index fb7e882..4de4a2e 100644 --- a/src/extension/menu-extension.h +++ b/src/extension/menu-extension.h @@ -57,7 +57,8 @@ public: enum Name { Name, Url, - Data + Data, + Options }; explicit ExtensionModel(const QVector &extensions, QObject *parent = nullptr); From 95406ad135218b27f796913895221f7accc61c06 Mon Sep 17 00:00:00 2001 From: hewenfei Date: Fri, 9 Jun 2023 16:15:46 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=89=93=E5=BC=80?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=89=80=E5=9C=A8=E7=9B=AE=E5=BD=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E7=BC=BA=E5=B0=91=E5=8F=82=E6=95=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- extension/recent-file/recent-file-extension.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extension/recent-file/recent-file-extension.cpp b/extension/recent-file/recent-file-extension.cpp index f319da7..bc28e79 100644 --- a/extension/recent-file/recent-file-extension.cpp +++ b/extension/recent-file/recent-file-extension.cpp @@ -404,7 +404,7 @@ void RecentFileExtension::creatMenu(const QString &path, const int &index) QDBusMessage message = QDBusMessage::createMethodCall(FREEDESKTOP_FILEMANAGER_NAME, FREEDESKTOP_FILEMANAGER_PATH, FREEDESKTOP_FILEMANAGER_INTERFACE, "ShowFolders"); - message << QStringList(path); + message << QStringList(path) << "ukui-menu-recent-file"; QDBusConnection::sessionBus().asyncCall(message); }); From c51e78b5055e15025f49c6d7b8e7331a99e60ac8 Mon Sep 17 00:00:00 2001 From: youdiansaodongxi Date: Thu, 8 Jun 2023 17:11:06 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E4=BC=98=E5=85=88=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/appdata/data-provider-manager.h | 2 +- src/appdata/data-provider-plugin-iface.h | 2 +- src/appdata/plugin/all-app-data-provider.cpp | 81 ++++++++++++++++---- src/appdata/plugin/all-app-data-provider.h | 8 +- src/data-entity.cpp | 11 +++ src/data-entity.h | 3 + src/ukui-menu-application.cpp | 14 +++- src/windows/menu-main-window.cpp | 10 --- src/windows/menu-main-window.h | 3 - 9 files changed, 99 insertions(+), 35 deletions(-) diff --git a/src/appdata/data-provider-manager.h b/src/appdata/data-provider-manager.h index 2a22665..584bfe0 100644 --- a/src/appdata/data-provider-manager.h +++ b/src/appdata/data-provider-manager.h @@ -59,7 +59,7 @@ Q_SIGNALS: void pluginChanged(const QString &id, PluginGroup::Group group); void dataChanged(QVector data, DataUpdateMode::Mode mode, quint32 index); void labelChanged(); - void toUpdate(); + void toUpdate(bool isShowed); private: DataProviderManager(); diff --git a/src/appdata/data-provider-plugin-iface.h b/src/appdata/data-provider-plugin-iface.h index 3b28c1e..07aa1df 100644 --- a/src/appdata/data-provider-plugin-iface.h +++ b/src/appdata/data-provider-plugin-iface.h @@ -80,7 +80,7 @@ public: virtual void forceUpdate(QString &key) {}; public Q_SLOTS: - virtual void update() {}; + virtual void update(bool isShowed) {}; Q_SIGNALS: /** diff --git a/src/appdata/plugin/all-app-data-provider.cpp b/src/appdata/plugin/all-app-data-provider.cpp index a9e2ead..3cbaabd 100644 --- a/src/appdata/plugin/all-app-data-provider.cpp +++ b/src/appdata/plugin/all-app-data-provider.cpp @@ -83,21 +83,33 @@ void AllAppDataProvider::forceUpdate() sendData(); } -void AllAppDataProvider::update() +void AllAppDataProvider::update(bool isShowed) { - bool isRecentDataChanged = false; - { - QMutexLocker locker(&m_mutex); - for (DataEntity & appdata : m_appData) { - bool info = appdata.isRecentInstall(); - setRecentState(appdata); - if (appdata.isRecentInstall() != info) { - isRecentDataChanged = true; + m_windowStatus = isShowed; + if (isShowed) { + m_timer->blockSignals(true); + bool isRecentDataChanged = false; + { + QMutexLocker locker(&m_mutex); + for (DataEntity &appdata : m_appData) { + bool info = appdata.isRecentInstall(); + setRecentState(appdata); + if (appdata.isRecentInstall() != info) { + isRecentDataChanged = true; + break; + } } } - } - if (isRecentDataChanged) { - sendData(); + if (isRecentDataChanged) { + std::sort(m_appData.begin(), m_appData.end(), appDataSort); + sendData(); + } + } else { + m_timer->blockSignals(false); + if (m_updateStatus) { + reloadAppData(); + m_updateStatus = false; + } } } @@ -117,11 +129,13 @@ void AllAppDataProvider::reloadAppData() continue; } setRecentState(app); + setSortPriority(app); appData.append(app); } std::sort(appData.begin(), appData.end(), appDataSort); m_appData.swap(appData); + updateTimer(); } void AllAppDataProvider::reloadFolderData() @@ -163,6 +177,7 @@ void AllAppDataProvider::updateData(const QList &apps) if (appdata.id() == app.id()) { appdata = app; setRecentState(appdata); + setSortPriority(appdata); break; } } @@ -186,6 +201,22 @@ void AllAppDataProvider::updateFolderData(QStringList &idList) AppFolderHelper::instance()->forceSync(); } +void AllAppDataProvider::updateTimer() +{ + if (m_timer == nullptr) { + m_timer = new QTimer(this); + m_timer->setInterval(3600000*48); + connect(m_timer, &QTimer::timeout, this, [this]{ + if (m_windowStatus) { + m_updateStatus = true; + } else { + reloadAppData(); + } + }); + } + m_timer->start(); +} + bool AllAppDataProvider::appDataSort(const DataEntity &a, const DataEntity &b) { if ((a.top() != 0) && (b.top() != 0)) { @@ -206,10 +237,10 @@ bool AllAppDataProvider::appDataSort(const DataEntity &a, const DataEntity &b) } else if (b.isRecentInstall()) { return false; } else { - if (a.launchTimes() == b.launchTimes()) { + if (a.priority() == b.priority()) { return letterSort(a.firstLetter(), b.firstLetter()); } else { - return a.launchTimes() > b.launchTimes(); + return a.priority() > b.priority(); } } } else { @@ -217,13 +248,32 @@ bool AllAppDataProvider::appDataSort(const DataEntity &a, const DataEntity &b) } } +void AllAppDataProvider::setSortPriority(DataEntity &app) +{ + QDateTime installTime = QDateTime::fromString(app.insertTime(), "yyyy-MM-dd hh:mm:ss"); + if (installTime.isValid()) { + qint64 appTime = installTime.secsTo(QDateTime::currentDateTime()); + if (appTime <= 3600*240) { + appTime = appTime / (3600*24); + double priority = app.launchTimes() * (-0.4 * (appTime^2) + 100); + app.setPriority(priority); + return; + } else { + appTime = appTime / (3600*24); + double priority = app.launchTimes() * (240 / (appTime - 6)); + app.setPriority(priority); + return; + } + } +} + void AllAppDataProvider::setRecentState(DataEntity &app) { if (!UserConfig::instance()->isPreInstalledApps(app.id())) { if (app.launched() == 0) { QDateTime installTime = QDateTime::fromString(app.insertTime(), "yyyy-MM-dd hh:mm:ss"); if (installTime.isValid()) { - int appTime = installTime.secsTo(QDateTime::currentDateTime()); + qint64 appTime = installTime.secsTo(QDateTime::currentDateTime()); if ((appTime >= 0 ) && (appTime <= 3600*48)) { app.setRecentInstall(true); return; @@ -260,6 +310,7 @@ void AllAppDataProvider::onAppAdded(const QList& apps) QMutexLocker locker(&m_mutex); for (auto app : apps) { setRecentState(app); + setSortPriority(app); m_appData.append(app); } std::sort(m_appData.begin(), m_appData.end(), appDataSort); diff --git a/src/appdata/plugin/all-app-data-provider.h b/src/appdata/plugin/all-app-data-provider.h index f6b3ccd..a187272 100644 --- a/src/appdata/plugin/all-app-data-provider.h +++ b/src/appdata/plugin/all-app-data-provider.h @@ -22,6 +22,7 @@ #include "data-provider-plugin-iface.h" #include #include +#include namespace UkuiMenu { @@ -40,7 +41,7 @@ public: void forceUpdate() override; public Q_SLOTS: - void update() override; + void update(bool isShowed) override; private Q_SLOTS: void onAppAdded(const QList& apps); @@ -57,14 +58,19 @@ private: void mergeData(QVector &data); void updateData(const QList& apps); void updateFolderData(QStringList& idList); + void updateTimer(); static bool appDataSort(const DataEntity &a, const DataEntity &b); + static void setSortPriority(DataEntity &app); static void setRecentState(DataEntity &app); static bool letterSort(const QString &a, const QString &b); private: + QTimer *m_timer = nullptr; QMutex m_mutex; QVector m_appData; QVector m_folderData; + bool m_updateStatus = false; + bool m_windowStatus = false; }; } // UkuiMenu diff --git a/src/data-entity.cpp b/src/data-entity.cpp index 28cab5c..b41b02a 100644 --- a/src/data-entity.cpp +++ b/src/data-entity.cpp @@ -33,6 +33,7 @@ public: int top{0}; // 置顶状态及序号 int favorite{0}; // 收藏状态及序号 int launchTimes{0}; // 启动次数 + double priority{0}; DataType::Type type {DataType::Normal}; QString id; // 应用可执行文件路径 QString icon; @@ -112,6 +113,16 @@ void DataEntity::setLaunchTimes(int launchTimes) d->launchTimes = launchTimes; } +double DataEntity::priority() const +{ + return d->priority; +} + +void DataEntity::setPriority(double priority) +{ + d->priority = priority; +} + QString DataEntity::insertTime() const { return d->insertTime; diff --git a/src/data-entity.h b/src/data-entity.h index 875694c..eba255d 100644 --- a/src/data-entity.h +++ b/src/data-entity.h @@ -89,6 +89,9 @@ public: int launchTimes() const; void setLaunchTimes(int launchTimes); + double priority() const; + void setPriority(double priority); + QString insertTime() const; void setInsertTime(const QString& insertTime); diff --git a/src/ukui-menu-application.cpp b/src/ukui-menu-application.cpp index 1195efc..8b6bc3a 100644 --- a/src/ukui-menu-application.cpp +++ b/src/ukui-menu-application.cpp @@ -115,6 +115,14 @@ void UkuiMenuApplication::loadMenuUI() const QUrl url(QStringLiteral("qrc:/qml/main.qml")); m_mainWindow = new MenuWindow(m_engine, nullptr); m_mainWindow->setSource(url); + connect(m_mainWindow, &QQuickView::activeFocusItemChanged, m_mainWindow, [this] { + if (m_mainWindow->activeFocusItem()) { + return; + } + + execCommand(Hide); + DataProviderManager::instance()->toUpdate(false); + }); } void UkuiMenuApplication::initDbusService() @@ -136,16 +144,12 @@ void UkuiMenuApplication::execCommand(Command command) case Active: { if (m_mainWindow) { m_mainWindow->setVisible(!m_mainWindow->isVisible()); - if (m_mainWindow->isVisible()) { - DataProviderManager::instance()->toUpdate(); - } } break; } case Show: { if (m_mainWindow) { m_mainWindow->setVisible(true); - DataProviderManager::instance()->toUpdate(); } break; } @@ -166,6 +170,8 @@ void UkuiMenuApplication::execCommand(Command command) default: break; } + bool isShowed = m_mainWindow->isVisible(); + DataProviderManager::instance()->toUpdate(isShowed); } UkuiMenuApplication::~UkuiMenuApplication() diff --git a/src/windows/menu-main-window.cpp b/src/windows/menu-main-window.cpp index e440b03..2bb8d60 100644 --- a/src/windows/menu-main-window.cpp +++ b/src/windows/menu-main-window.cpp @@ -399,7 +399,6 @@ void MenuWindow::init() // 访问窗口api rootContext()->setContextProperty("mainWindow", this); - connect(this, &QQuickView::activeFocusItemChanged, this, &MenuWindow::onActiveFocusItemChanged); connect(m_geometryHelper, &WindowGeometryHelper::geometryChanged, this, [this] { QEvent event(QEvent::Move); @@ -526,15 +525,6 @@ void MenuWindow::showEvent(QShowEvent *event) QQuickView::showEvent(event); } -void MenuWindow::onActiveFocusItemChanged() -{ - if (activeFocusItem()) { - return; - } - - setVisible(false); -} - bool MenuWindow::effectEnabled() const { return GlobalSetting::instance()->get(GlobalSetting::EffectEnabled).toBool(); diff --git a/src/windows/menu-main-window.h b/src/windows/menu-main-window.h index a15403b..2399530 100644 --- a/src/windows/menu-main-window.h +++ b/src/windows/menu-main-window.h @@ -133,9 +133,6 @@ Q_SIGNALS: void beforeFullScreenExited(); void panelPosChanged(); -private Q_SLOTS: - void onActiveFocusItemChanged(); - protected: void exposeEvent(QExposeEvent *event) override; void focusOutEvent(QFocusEvent *event) override; From ea35c8fd75a73ec8a70f84c47caa08970a853c5e Mon Sep 17 00:00:00 2001 From: youdiansaodongxi Date: Wed, 14 Jun 2023 11:40:12 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=9B=BE=E6=A0=87?= =?UTF-8?q?=E8=B7=9F=E9=9A=8F=E4=B8=BB=E9=A2=98=E5=8F=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qml/AppControls2/FolderIcon.qml | 1 + qml/AppControls2/IconLabel.qml | 1 + qml/AppUI/FullScreenContent.qml | 1 + src/extension/extensions/favorite-extension.cpp | 12 ++++++++++++ src/model/app-model.cpp | 10 ++++++++++ src/model/app-model.h | 2 ++ src/settings/settings.cpp | 4 ++++ src/settings/settings.h | 1 + 8 files changed, 32 insertions(+) diff --git a/qml/AppControls2/FolderIcon.qml b/qml/AppControls2/FolderIcon.qml index bc5717e..3473e13 100644 --- a/qml/AppControls2/FolderIcon.qml +++ b/qml/AppControls2/FolderIcon.qml @@ -41,6 +41,7 @@ StyleBackground { width: iconGrid.cellWidth height: iconGrid.cellHeight source: modelData + cache: false } } } diff --git a/qml/AppControls2/IconLabel.qml b/qml/AppControls2/IconLabel.qml index 3c6fc7d..9c2b42b 100644 --- a/qml/AppControls2/IconLabel.qml +++ b/qml/AppControls2/IconLabel.qml @@ -61,6 +61,7 @@ Item { height: root.iconHeight width: root.iconWidth source: root.appIcon + cache: false } StyleText { diff --git a/qml/AppUI/FullScreenContent.qml b/qml/AppUI/FullScreenContent.qml index 3edaa72..47ff255 100644 --- a/qml/AppUI/FullScreenContent.qml +++ b/qml/AppUI/FullScreenContent.qml @@ -256,6 +256,7 @@ RowLayout { height: 96 width: 96 source: icon + cache: false } } diff --git a/src/extension/extensions/favorite-extension.cpp b/src/extension/extensions/favorite-extension.cpp index 9a1b5a8..350c978 100644 --- a/src/extension/extensions/favorite-extension.cpp +++ b/src/extension/extensions/favorite-extension.cpp @@ -20,6 +20,8 @@ #include "app-data-manager.h" #include "app-manager.h" #include "commons.h" +#include "settings.h" + #include #include #include @@ -55,6 +57,7 @@ public: Q_INVOKABLE void openMenu(const int &index); public Q_SLOTS: void exchangedAppsOrder(int startIndex, int endIndex); + void onStyleChanged(const GlobalSetting::Key &key); private: QVector m_favoriteAppsData; @@ -72,6 +75,7 @@ FavoriteExtension::FavoriteExtension(QObject *parent) : MenuExtensionIFace(paren updateFavoriteData(); connect(AppDataManager::instance(),&AppDataManager::favoriteAppChanged, this,&FavoriteExtension::updateFavoriteData); + connect(GlobalSetting::instance(), &GlobalSetting::styleChanged, m_favoriteAppsModel, &FavoriteAppsModel::onStyleChanged); } FavoriteExtension::~FavoriteExtension() @@ -181,6 +185,14 @@ void FavoriteAppsModel::exchangedAppsOrder(int startIndex, int endIndex) AppDataManager::instance()->changedFavoriteOrderSignal(startId, endNum); } +void FavoriteAppsModel::onStyleChanged(const GlobalSetting::Key &key) +{ + if (key == GlobalSetting::IconThemeName) { + beginResetModel(); + endResetModel(); + } +} + bool FavoriteMenuProvider::isSupport(const MenuProvider::RequestType &type) { return type == DataType; diff --git a/src/model/app-model.cpp b/src/model/app-model.cpp index 27f127e..1c0e687 100644 --- a/src/model/app-model.cpp +++ b/src/model/app-model.cpp @@ -20,6 +20,7 @@ #include "app-manager.h" #include "menu-manager.h" #include "app-folder-helper.h" +#include "settings.h" #include #include @@ -31,6 +32,7 @@ AppModel::AppModel(QObject *parent) : QAbstractListModel(parent) reloadPluginData(); connect(DataProviderManager::instance(), &DataProviderManager::dataChanged, this, &AppModel::onPluginDataChanged); connect(DataProviderManager::instance(), &DataProviderManager::pluginChanged, this, &AppModel::reloadPluginData); + connect(GlobalSetting::instance(), &GlobalSetting::styleChanged, this, &AppModel::onStyleChanged); } int AppModel::rowCount(const QModelIndex &parent) const @@ -121,6 +123,14 @@ void AppModel::reloadPluginData() resetModel(data); } +void AppModel::onStyleChanged(const GlobalSetting::Key &key) +{ + if (key == GlobalSetting::IconThemeName) { + Q_EMIT beginResetModel(); + Q_EMIT endResetModel(); + } +} + void AppModel::toRenameFolder(QString id) { Q_EMIT renameText(id); diff --git a/src/model/app-model.h b/src/model/app-model.h index 61e63c6..9e8e4b0 100644 --- a/src/model/app-model.h +++ b/src/model/app-model.h @@ -25,6 +25,7 @@ #include "commons.h" #include "data-provider-manager.h" #include "menu-provider.h" +#include "settings.h" namespace UkuiMenu { @@ -53,6 +54,7 @@ public Q_SLOTS: private Q_SLOTS: void onPluginDataChanged(QVector data, DataUpdateMode::Mode mode, quint32 index); void reloadPluginData(); + void onStyleChanged(const GlobalSetting::Key& key); private: void resetModel(QVector &data); diff --git a/src/settings/settings.cpp b/src/settings/settings.cpp index e463651..50aee94 100644 --- a/src/settings/settings.cpp +++ b/src/settings/settings.cpp @@ -31,6 +31,7 @@ #define UKUI_STYLE_NAME_KEY "styleName" #define UKUI_STYLE_THEME_COLOR_KEY "themeColor" #define UKUI_STYLE_SYSTEM_FONT_SIZE "systemFontSize" +#define UKUI_STYLE_ICON_THEME_NAME_KEY "iconThemeName" namespace UkuiMenu { @@ -83,6 +84,9 @@ void GlobalSetting::initStyleSetting() } else if (key == UKUI_STYLE_SYSTEM_FONT_SIZE) { updateData(SystemFontSize, settings->get(key)); Q_EMIT styleChanged(SystemFontSize); + } else if (key == UKUI_STYLE_ICON_THEME_NAME_KEY) { + updateData(IconThemeName, settings->get(key)); + Q_EMIT styleChanged(IconThemeName); } }); } diff --git a/src/settings/settings.h b/src/settings/settings.h index 5bf4cc3..af33fb4 100644 --- a/src/settings/settings.h +++ b/src/settings/settings.h @@ -52,6 +52,7 @@ public: UnKnowKey = 0, StyleName, ThemeColor, + IconThemeName, Transparency, EffectEnabled, SystemFontSize