1
0
mirror of https://github.com/KDE/latte-dock.git synced 2025-03-09 00:58:15 +03:00

improve and simplify context menu data

This commit is contained in:
Michail Vourlakos 2021-03-01 16:18:43 +02:00
parent 5d1bf42709
commit 7f64126d5f
4 changed files with 37 additions and 43 deletions

View File

@ -27,11 +27,9 @@
<method name="showSettingsWindow">
<arg name="page" type="i" direction="in"/>
</method>
<method name="setContextMenuView">
<arg name="id" type="i" direction="in"/>
</method>
<method name="contextMenuData">
<arg name="data" type="as" direction="out"/>
<arg name="containmentId" type="u" direction="in"/>
</method>
<method name="setBackgroundFromBroadcast">
<arg name="activity" type="s" direction="in"/>

View File

@ -1133,36 +1133,33 @@ void Corona::showSettingsWindow(int page)
m_layoutsManager->showLatteSettingsDialog(p);
}
void Corona::setContextMenuView(int id)
{
//! set context menu view id
m_contextMenuViewId = id;
}
QStringList Corona::contextMenuData()
QStringList Corona::contextMenuData(const uint &containmentId)
{
QStringList data;
Types::ViewType viewType{Types::DockView};
auto view = m_layoutsManager->synchronizer()->viewForContainment(m_contextMenuViewId);
auto view = m_layoutsManager->synchronizer()->viewForContainment(containmentId);
if (view) {
viewType = view->type();
}
data << QString::number((int)m_layoutsManager->memoryUsage());
data << m_layoutsManager->synchronizer()->currentLayoutsNames().join(";;");
data << QString::number((int)viewType);
data << QString::number((int)m_layoutsManager->memoryUsage()); // Memory Usage
data << m_layoutsManager->centralLayoutsNames().join(";;"); // All Active layouts
data << m_layoutsManager->synchronizer()->currentLayoutsNames().join(";;"); // All Current layouts
QStringList layoutsmenu;
for(const auto &layoutName : m_layoutsManager->synchronizer()->menuLayouts()) {
if (m_layoutsManager->synchronizer()->centralLayout(layoutName)) {
data << QString("1," + layoutName);
} else if (m_layoutsManager->memoryUsage() == Latte::MemoryUsage::SingleLayout) {
data << QString("0," + layoutName);
if (m_layoutsManager->synchronizer()->centralLayout(layoutName)
|| m_layoutsManager->memoryUsage() == Latte::MemoryUsage::SingleLayout) {
layoutsmenu << layoutName;
}
}
//! reset context menu view id
m_contextMenuViewId = -1;
data << layoutsmenu.join(";;");
data << QString::number((int)viewType); //Selected View type
data << (view ? view->layout()->name() : QString()); //Selected View layout*/
return data;
}

View File

@ -158,8 +158,8 @@ public:
void quitApplication();
void switchToLayout(QString layout);
void showSettingsWindow(int page);
void setContextMenuView(int id);
QStringList contextMenuData();
QStringList contextMenuData(const uint &containmentId);
public slots:
void aboutApplication();
@ -225,8 +225,6 @@ private:
//!it can be used on startup to change memory usage from command line
int m_userSetMemoryUsage{ -1};
int m_contextMenuViewId{-1};
QString m_layoutNameOnStartUp;
QString m_importFullConfigurationFile;

View File

@ -36,7 +36,13 @@
#include <Plasma/Corona>
#include <Plasma/ServiceJob>
const int LAYOUTSPOS = 3;
const int MEMORYINDEX = 0;
const int ACTIVELAYOUTSINDEX = 1;
const int CURRENTLAYOUTSINDEX = 2;
const int LAYOUTMENUINDEX = 3;
const int VIEWTYPEINDEX = 4;
const int VIEWLAYOUTINDEX = 5;
const char LAYOUTSNAME[] = "layouts";
const char PREFERENCESNAME[] = "preferences";
const char QUITLATTENAME[] = "quit latte";
@ -222,17 +228,12 @@ QList<QAction *> Menu::contextualActions()
QDBusInterface iface("org.kde.lattedock", "/Latte", "", QDBusConnection::sessionBus());
if (iface.isValid()) {
iface.call("setContextMenuView", (int)containment()->id());
QDBusReply<QStringList> replyData = iface.call("contextMenuData");
QDBusReply<QStringList> replyData = iface.call("contextMenuData", containment()->id());
m_data = replyData.value();
}
ViewType viewType{DockView};
if (m_data.size() >= LAYOUTSPOS + 1) {
viewType = static_cast<ViewType>((m_data[2]).toInt());
}
ViewType viewType{static_cast<ViewType>((m_data[VIEWTYPEINDEX]).toInt())};
const QString configureActionText = (viewType == DockView) ? i18n("&Edit Dock...") : i18n("&Edit Panel...");
m_configureAction->setText(configureActionText);
@ -295,29 +296,29 @@ void Menu::populateLayouts()
{
m_switchLayoutsMenu->clear();
LayoutsMemoryUsage memoryUsage = static_cast<LayoutsMemoryUsage>((m_data[0]).toInt());
QStringList currentNames = m_data[1].split(";;");
LayoutsMemoryUsage memoryUsage = static_cast<LayoutsMemoryUsage>((m_data[MEMORYINDEX]).toInt());
QStringList activeNames = m_data[ACTIVELAYOUTSINDEX].split(";;");
QStringList currentNames = m_data[CURRENTLAYOUTSINDEX].split(";;");
QStringList layoutMenuNames = m_data[LAYOUTMENUINDEX].split(";;");
bool hasActiveNoCurrentLayout{false};
if (memoryUsage == LayoutsMemoryUsage::MultipleLayouts) {
for (int i = LAYOUTSPOS; i < m_data.size(); ++i) {
QString layout = m_data[i].right(m_data[i].length() - 2);
if (!currentNames.contains(layout)) {
for (int i = 0; i<activeNames.count(); ++i) {
if (!currentNames.contains(activeNames[i])) {
hasActiveNoCurrentLayout = true;
break;
}
}
}
for (int i = LAYOUTSPOS; i < m_data.size(); ++i) {
bool isActive = m_data[i].startsWith("0") ? false : true;
for (int i = 0; i < layoutMenuNames.count(); ++i) {
bool isActive = activeNames.contains(layoutMenuNames[i]);
QString layout = m_data[i].right(m_data[i].length() - 2);
QString layoutText = layout;
QString layoutText = layoutMenuNames[i];
bool isCurrent = ((memoryUsage == SingleLayout && isActive)
|| (memoryUsage == MultipleLayouts && currentNames.contains(layout)));
|| (memoryUsage == MultipleLayouts && currentNames.contains(layoutMenuNames[i])));
if (isCurrent && hasActiveNoCurrentLayout) {
layoutText += QString(" " + i18nc("current layout", "[Current]"));
@ -335,7 +336,7 @@ void Menu::populateLayouts()
}
}
layoutAction->setData(layout);
layoutAction->setData(layoutMenuNames[i]);
if (isCurrent) {
QFont font = layoutAction->font();