From e9b3cf2ed7b0faddf5a1d5e123d06c54e492755c Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Sat, 7 Apr 2018 14:52:40 +0300 Subject: [PATCH] Use a new architecture for internal separators --the old architecture that was trying to keep an internal separators record couldnt catch up and at the same time could create issues with internal separators at different activities. --- app/launcherssignals.cpp | 39 ----- app/launcherssignals.h | 2 - .../package/contents/ui/ParabolicManager.qml | 159 +++--------------- plasmoid/package/contents/ui/main.qml | 31 ---- .../package/contents/ui/task/TaskDelegate.qml | 24 +-- .../contents/ui/task/TaskHiddenSpacer.qml | 6 + 6 files changed, 46 insertions(+), 215 deletions(-) diff --git a/app/launcherssignals.cpp b/app/launcherssignals.cpp index 447ad5893..6d9fecb47 100644 --- a/app/launcherssignals.cpp +++ b/app/launcherssignals.cpp @@ -272,43 +272,4 @@ void LaunchersSignals::moveTask(QString layoutName, int senderId, int launcherGr } } - -void LaunchersSignals::internalSeparators(QString layoutName, int senderId, int launcherGroup, - QStringList separators, QStringList indexes) -{ - Dock::LaunchersGroup group = static_cast(launcherGroup); - - if ((Dock::LaunchersGroup)group == Dock::UniqueLaunchers) { - return; - } - - QString lName = (group == Dock::LayoutLaunchers) ? layoutName : ""; - - foreach (auto applet, lattePlasmoids(lName)) { - if (applet->id() != senderId) { - if (QQuickItem *appletInterface = applet->property("_plasma_graphicObject").value()) { - const auto &childItems = appletInterface->childItems(); - - if (childItems.isEmpty()) { - continue; - } - - for (QQuickItem *item : childItems) { - if (auto *metaObject = item->metaObject()) { - int methodIndex = metaObject->indexOfMethod("extSignalInternalSeparators(QVariant,QVariant,QVariant)"); - - if (methodIndex == -1) { - continue; - } - - QMetaMethod method = metaObject->method(methodIndex); - method.invoke(item, Q_ARG(QVariant, launcherGroup), Q_ARG(QVariant, separators), Q_ARG(QVariant, indexes)); - } - } - } - } - } -} - - } //end of namespace diff --git a/app/launcherssignals.h b/app/launcherssignals.h index fc1d53923..b11aad1e4 100644 --- a/app/launcherssignals.h +++ b/app/launcherssignals.h @@ -56,8 +56,6 @@ public slots: Q_INVOKABLE void removeLauncherFromActivity(QString layoutName, int launcherGroup, QString launcher, QString activity); Q_INVOKABLE void urlsDropped(QString layoutName, int launcherGroup, QStringList urls); Q_INVOKABLE void moveTask(QString layoutName, int senderId, int launcherGroup, int from, int to); - Q_INVOKABLE void internalSeparators(QString layoutName, int senderId, int launcherGroup, - QStringList separators, QStringList indexes); private: QList lattePlasmoids(QString layoutName); diff --git a/plasmoid/package/contents/ui/ParabolicManager.qml b/plasmoid/package/contents/ui/ParabolicManager.qml index 51dac9573..58197c0c1 100644 --- a/plasmoid/package/contents/ui/ParabolicManager.qml +++ b/plasmoid/package/contents/ui/ParabolicManager.qml @@ -43,10 +43,6 @@ Item { //(id, mScale) property variant frozenTasks: [] - //the internal separators in the form - //(launcherUrl, index) - property variant separators: [] - //new launchers in order to be moved in correct place //(launcher, pos) property variant launchersToBeMoved: [] @@ -54,61 +50,16 @@ Item { Connections{ target: root onTasksCountChanged:parManager.updateTasksEdgesIndexes(); - onDragSourceChanged: { - if (!root.dragSource && parManager.hasInternalSeparator) { - //! Send the internal separators to other docks - var tasks = icList.contentItem.children; - var size = icList.contentItem.children.length; - var tempSeparatorsArray = []; - var tempSeparatorsIndexes = []; - - for(var i=0; i=icList.contentItem.children.length) { - break; - } - - if (tasks[i] && tasks[i].isSeparator) { - tempSeparatorsArray.push(tasks[i].launcherUrl); - tempSeparatorsIndexes.push(tasks[i].itemIndex); - } - } - - if (tempSeparatorsArray.length > 0) { - if (latteDock && latteDock.launchersGroup >= Latte.Dock.LayoutLaunchers) { - //reorder to lowest - for(var i=0; i=0){ - //add that separator - //console.log("add separator:"+launcher+" at:"+taskIndex); - separators.push({launcherUrl: launcher, index: taskIndex}); - updated = true; - } else if (currentPos>-1 && taskIndex === -1) { - //remove that separator - //console.log("remove separator:"+launcher); - separators.splice(currentPos,1); - updated = true; - } else if (currentPos>-1 && taskIndex>-1 && separators[currentPos].index !== taskIndex) { - //update that separator - //console.log("update separator:"+launcher+" from:"+separators[currentPos].index+" -> "+taskIndex); - - separators[currentPos].index = taskIndex; - updated = true; - } - - //if (separators.length > 0) - // console.log(separators[0].launcherUrl+ " _________ " + separators[0].index); - - if (updated) { - //console.log("message sent..."); - hasInternalSeparator = separators.length > 0; - - updateTasksEdgesIndexes(); - - root.separatorsUpdated(); - } - } - - function separatorArrayPos(launcher) { - var res = -1; - var sLength = separators.length; - - for (var i=0; i=separators.length) - return false; - - if (separators[i].launcherUrl === launcher) - return i; - } - - return res; - } - function availableLowerIndex(from) { var next = from; @@ -393,18 +301,9 @@ Item { } function taskIsSeparator(taskIndex){ - var sLength = separators.length; - - for (var i=0; i=separators.length) - return false; - - if (separators[i].index === taskIndex) - return true; - } + var task = icList.childAtIndex(taskIndex); - return false; + return (task && !task.isForcedHidden && task.isSeparator); } function taskIsForcedHidden(taskIndex) { @@ -412,7 +311,7 @@ Item { //!tasks that become hidden there is a chance to have index===-1 and to not be //!able to be tracked down - return ((!task && (taskIndex>=0 && taskIndex=0 && taskIndex= 0) { - var internseparators = 0; + var ignored = 0; for(var i=firstRealTaskIndex; i=icList.contentItem.children.length){ - break; - } - - if (tasks[j] && tasks[j].launcherUrl === separators[i]) { - curIndex = tasks[j].itemIndex; - } - } - - if ((curIndex !== -1) && (curIndex!==toIndex)) { - if (toIndex>=icList.contentItem.children.length) { - toIndex = icList.contentItem.children.length-1; - } - - console.log("Fix internal separator pos, from :: " +curIndex + " to :: " + toIndex); - tasksModel.move(curIndex, toIndex); - } - } - } - } - //! END ::: external launchers signals in order to update the tasks model diff --git a/plasmoid/package/contents/ui/task/TaskDelegate.qml b/plasmoid/package/contents/ui/task/TaskDelegate.qml index 811804178..e3591d373 100644 --- a/plasmoid/package/contents/ui/task/TaskDelegate.qml +++ b/plasmoid/package/contents/ui/task/TaskDelegate.qml @@ -334,13 +334,7 @@ MouseArea{ Connections{ target: root onEditModeChanged: separatorItem.updateForceHiddenState(); - onDragSourceChanged: { - separatorItem.updateForceHiddenState(); - - if (isSeparator && !root.dragSource) { - parabolicManager.setSeparator(launcherUrl, itemIndex); - } - } + onDragSourceChanged: separatorItem.updateForceHiddenState(); onSeparatorsUpdated: separatorItem.updateForceHiddenState(); onGlobalDirectRenderChanged:{ @@ -480,11 +474,19 @@ MouseArea{ } onItemIndexChanged: { + if (isSeparator) { + root.separatorsUpdated(); + } + if (itemIndex>=0) lastValidTimer.start(); + } - if (isSeparator){ - parabolicManager.setSeparator(launcherUrl, itemIndex); + onLastValidIndexChanged: { + if (lastValidIndex>=0 && lastValidIndex parabolicManager.lastRealTaskIndex)) { + parabolicManager.updateTasksEdgesIndexes(); + } } } @@ -516,13 +518,13 @@ MouseArea{ onIsSeparatorChanged: { if (isSeparator) { - parabolicManager.setSeparator(launcherUrl, itemIndex); + root.separatorsUpdated(); if (parabolicManager.isLauncherToBeMoved(launcherUrl) && itemIndex>=0) { parabolicManager.moveLauncherToCorrectPos(launcherUrl, itemIndex); } } else { - parabolicManager.setSeparator(launcherUrl, -1); + root.separatorsUpdated(); } } diff --git a/plasmoid/package/contents/ui/task/TaskHiddenSpacer.qml b/plasmoid/package/contents/ui/task/TaskHiddenSpacer.qml index b87fe92d6..74fc1169c 100644 --- a/plasmoid/package/contents/ui/task/TaskHiddenSpacer.qml +++ b/plasmoid/package/contents/ui/task/TaskHiddenSpacer.qml @@ -100,6 +100,12 @@ Item{ onLatteAppletPosChanged: hiddenSpacer.updateNeighbour(); } + Connections{ + target: parabolicManager + onFirstRealTaskIndexChanged: hiddenSpacer.updateNeighbour(); + onLastRealTaskIndexChanged: hiddenSpacer.updateNeighbour(); + } + Connections{ target: mainItemContainer onItemIndexChanged: hiddenSpacer.updateNeighbour();