From ef01020632c467baf2c7905de398ef843aa58191 Mon Sep 17 00:00:00 2001 From: wackyideas Date: Sat, 23 Sep 2023 00:51:26 +0200 Subject: [PATCH] Added small taskbar support, fixed some bugs and strange behavior in SevenTasks. --- Documentation/Software/KWin/Reflection.md | 4 +- .../Software/Plasmoids/SevenStart.md | 18 + Documentation/Themes/Seven-Black.md | 5 +- INSTALL.md | 2 +- .../Seven-Black/solid/widgets/tooltip.svg | 3693 +++++++++++++++++ .../contents/config/main.xml | 3 + .../contents/ui/CompactRepresentation.qml | 170 +- .../contents/ui/ConfigGeneral.qml | 12 +- .../contents/ui/ContextMenu.qml | 93 + .../contents/ui/FloatingOrb.qml | 103 + .../contents/ui/ItemMultiGridView.qml | 10 +- .../contents/ui/KickerListModel.qml | 3 + .../contents/ui/MenuRepresentation.qml | 6 +- .../contents/ui/SearchView.qml | 3 +- .../contents/ui/StartOrb.qml | 103 + .../contents/ui/main.qml | 7 +- .../contents/ui/orbs/hovered.png | Bin 17362 -> 17368 bytes .../contents/ui/orbs/normal.png | Bin 16604 -> 17023 bytes .../contents/ui/orbs/selected.png | Bin 17049 -> 17219 bytes .../contents/ui/Task.qml | 39 +- .../contents/ui/code/tools.js | 6 +- .../contents/ui/main.qml | 13 +- .../src/package/contents/ui/ContextMenu.qml | 774 ---- .../src/package/contents/ui/Task.qml | 39 +- .../src/package/contents/ui/code/tools.js | 6 +- .../src/package/contents/ui/main.qml | 13 +- README.md | 1 + Screenshots/Taskbar_3.png | Bin 0 -> 28646 bytes 28 files changed, 4241 insertions(+), 885 deletions(-) create mode 100755 Plasma/KDE_Plasma_Theme/Seven-Black/solid/widgets/tooltip.svg create mode 100644 Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/ContextMenu.qml create mode 100644 Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/FloatingOrb.qml create mode 100644 Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/StartOrb.qml delete mode 100755 Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/ContextMenu.qml create mode 100644 Screenshots/Taskbar_3.png diff --git a/Documentation/Software/KWin/Reflection.md b/Documentation/Software/KWin/Reflection.md index 180966a..7834cc1 100755 --- a/Documentation/Software/KWin/Reflection.md +++ b/Documentation/Software/KWin/Reflection.md @@ -86,7 +86,7 @@ This only applies to regular windows (most windows with server-side decorations) ## Configuration menu -The accent color can be edited in real time through the configuration menu. Internally, the color is stored in the RGB color model as that's what OpenGL expects during rendering. The color mixer window is designed to look and function like Windows 7's Personalization menu, and includes the accent colors found on Windows 7, which were directly pulled from the following registry key: +The accent color can be edited in real time through the configuration menu. Real time editing was made possible through the use of [QSharedMemory](https://doc.qt.io/qt-6/qsharedmemory.html) and calling the ```reconfigure()``` method through qdbus whenever a change occurs. Internally, the color is stored in the RGB color model as that's what OpenGL expects during rendering. The color mixer window is designed to look and function like Windows 7's Personalization menu, and includes the accent colors found on Windows 7, which were directly pulled from the following registry key: ```[ HKEY_CURRENT_USER\Software\Microsoft\Windows\DWM\ColorizationColor ]``` @@ -152,4 +152,4 @@ Windows 8.1 features a slightly more pastel variety of colors compared to Window |     |#c4ffffff|

-While not very conclusive, [here](https://stackoverflow.com/questions/3560890/vista-7-how-to-get-glass-color) is a useful thread for more information on how accent colors work in Aero, focusing mainly on Windows 7. \ No newline at end of file +While not very conclusive, [here](https://stackoverflow.com/questions/3560890/vista-7-how-to-get-glass-color) is a useful thread for more information on how accent colors work in Aero, focusing mainly on Windows 7. diff --git a/Documentation/Software/Plasmoids/SevenStart.md b/Documentation/Software/Plasmoids/SevenStart.md index 720ae03..10850d4 100755 --- a/Documentation/Software/Plasmoids/SevenStart.md +++ b/Documentation/Software/Plasmoids/SevenStart.md @@ -26,6 +26,21 @@ The first notable thing about SevenStart is the use of animated icons or "orbs" In earlier versions of SevenStart, only two images were used, but now three images are used due to upstream updates causing subtle timing issues that would cause undesirable visual effects. Using three images did end up allowing SevenStart to replicate the effects of Vista and 7's Start menu more accurately. By default, SevenStart uses internal icons if no external icons are provided in the configuration window. +Users can also force the orb to have a constant size, which allows the orb to stick out of the panel if the panel's height is lower than the orb's height. This allows the user to have a small panel with the orb protruding out of the panel, much like Windows 7 and Vista. The implementation is very similar to the user icon sticking out of the menu, which is described in more detail below. This implementation introduces a couple of problems: + +1. Right clicking on this dialog window won't open the standard context menu as expected, as it actually isn't part of the compact or full representation. +2. When compositing is disabled, even with the NoBackground hint, this dialog window will simply be drawn with an opaque, black background. + +The first problem is solved by implementing a separate context menu that pulls the appropriate actions from [ContainmentInterface](https://api.kde.org/frameworks/plasma-framework/html/classContainmentInterface.html) and [AppletInterface](https://api.kde.org/frameworks/plasma-framework/html/classAppletInterface.html), which is actually the ```plasmoid``` object. + +Potential solutions to the second problem are far less trivial, as all of them require some sort of compromise. The potential solutions are: + +1. Reverting to the regular orb while compositing is disabled, which is embedded within the panel, and/or resizing the orb back to its unaltered scale. This solution is aesthetically not pleasing at all, and it pretty much defeats the purpose of even enabling this feature to begin with. +2. Adding a compiled component to this plasmoid, which would expose more Qt and KDE API methods that can define an opacity mask around the orb. The downside to this solution is that a compiled component reduces portability and makes the installation process slightly more complicated. To see how such an implementation would work however, see this [link](https://github.com/ryanmcalister/donutwindow). +3. Applying an opacity mask through an already existing SVG file which can be applied to the dialog window. The downside to this solution is that it feels pretty much like a hack/workaround, and because it uses the provided frameworks in an unintended way. + +This implementation goes for the third solution, which takes advantage of the solid appearance variant found in Plasma themes. The dialog window loads in a completely transparent tooltip SVG that has a customized opacity mask that is created based on the orb texture. This does mean that if the user wants to have a different kind of orb texture that's not spherical in shape, they would also need to provide a correct SVG that represents the opacity mask of the orb. See the source code for more implementation details. + Another notable thing about the compact representation is that it is used in an unusual way compared to how plasmoids are generally designed to behave. Plasmoids have two representations: 1. Compact representation, which is used when the plasmoid is in a panel. @@ -88,3 +103,6 @@ Files: |OftenUsedView.qml|Used to display recently opened programs.| |SidePanelItemDelegate.qml|Displays and holds information about the sidebar menu entries.| |ApplicationsView.qml|Used to display all applications installed on the system.| +|StartOrb.qml|Dialog window representing the orb that is used for the small taskbar layout.| +|FloatingOrb.qml|The actual orb button that handles the visual animations and functionality.| +|ContextMenu.qml|Reimplemented context menu for StartOrb to bypass Dialog limitations.| diff --git a/Documentation/Themes/Seven-Black.md b/Documentation/Themes/Seven-Black.md index 8652738..ae4b6bf 100755 --- a/Documentation/Themes/Seven-Black.md +++ b/Documentation/Themes/Seven-Black.md @@ -34,6 +34,8 @@ Regular textures are used for all other windows (plasmoids, OSD popups, task swi The opaque appearance state aims to be a recreation of Aero Basic (WIP). Currently, only plasmoids using solid textures and the window manager don't comply with the aesthetic, but everything else does. A potential solution is to detect a change in compositing in plasmoids that use solid textures, change the dialog type to ```NoBackground``` and display a custom texture as the background while compositing is disabled. A similar solution can also be applied to the window manager. +Another important note is that the tooltip SVG used in the solid appearance is now used as a workaround to allow orb transparency in SevenStart. For more information, go to [SevenStart](../Software/Plasmoids/SevenStart.md)'s documentation. + ### Icons This theme also features a small set of icons used mainly by plasmoids like the system tray. Most of these icons are simply just scaled down variants of icons taken from Breeze, while other icons are taken directly from the main icon theme of this project. @@ -54,7 +56,7 @@ The "Unique" column describes if the file itself is exclusive to Seven-Black. |panel-background.svg |widgets/ |Default taskbar texture. |Y |Y |N | |tooltip.svg |widgets/ |Default tooltip texture. |Y |Y |N | |button-close.svg |widgets/ |Close button icon used in SevenTasks. |N |N |Y | -|menuitem.svg |widgets/ |Texture used for menu items in SevenStart and SevenTasks|N |N |Y | +|menuitem.svg |widgets/ |Texture used for menu items in SevenStart and SevenTasks.|N |N |Y | |showdesktop.svg |widgets/ |Texture used for the Show desktop plasmoid. |N |N |Y | |sidebaritem.svg |widgets/ |Texture used for sidebar entries in SevenStart. |N |N |Y | |startmenu-buttons.svg |widgets/ |Texture used for the shut down button in SevenStart.|N |N |Y | @@ -70,6 +72,7 @@ The "Unique" column describes if the file itself is exclusive to Seven-Black. |panel-background.svg |opaque/widgets/|Used when compositing is disabled. |N |Y |N | |tooltip.svg |opaque/widgets/|Used when compositing is disabled. |N |Y |N | |background.svg |solid/dialogs/ |Used by the system tray and date and time plasmoid. |Y |Y |N | +|tooltip.svg |solid/widgets/ |Used to provide an opacity mask to SevenStart's orb. |Y |Y |N | ## Nonstandard SVGs diff --git a/INSTALL.md b/INSTALL.md index 056847b..93fd65a 100755 --- a/INSTALL.md +++ b/INSTALL.md @@ -72,7 +72,7 @@ Starting off with the simplest modifications, this is a list of recommended sett - Under KWin Scripts: - Enable 'MinimizeAll' -When editing Plasma's bottom panel, make sure its width is set to 40 pixels. +When editing Plasma's bottom panel, make sure its width is set to 40 pixels (30 if using a small panel). ### KDE Plasma Theme diff --git a/Plasma/KDE_Plasma_Theme/Seven-Black/solid/widgets/tooltip.svg b/Plasma/KDE_Plasma_Theme/Seven-Black/solid/widgets/tooltip.svg new file mode 100755 index 0000000..5b581af --- /dev/null +++ b/Plasma/KDE_Plasma_Theme/Seven-Black/solid/widgets/tooltip.svg @@ -0,0 +1,3693 @@ + +image/svg+xmlimage/svg+xml diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/config/main.xml b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/config/main.xml index 5e421f2..36334cb 100755 --- a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/config/main.xml +++ b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/config/main.xml @@ -12,6 +12,9 @@ true + + false + diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/CompactRepresentation.qml b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/CompactRepresentation.qml index c0cf0f2..2107ba3 100755 --- a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/CompactRepresentation.qml +++ b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/CompactRepresentation.qml @@ -22,10 +22,10 @@ import QtQuick.Layouts 1.1 import org.kde.plasma.plasmoid 2.0 import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.kwindowsystem 1.0 Item { id: root - readonly property var screenGeometry: plasmoid.screenGeometry readonly property bool inPanel: (plasmoid.location == PlasmaCore.Types.TopEdge || plasmoid.location == PlasmaCore.Types.RightEdge @@ -33,23 +33,28 @@ Item { || plasmoid.location == PlasmaCore.Types.LeftEdge) readonly property bool vertical: (plasmoid.formFactor == PlasmaCore.Types.Vertical) readonly property bool useCustomButtonImage: (plasmoid.configuration.useCustomButtonImage) + + // Should the orb be rendered in its own dialog window so that it can stick out of the panel? + readonly property bool stickOutOrb: plasmoid.configuration.stickOutOrb && inPanel && !editMode property QtObject dashWindow: null + property QtObject orb: null + property QtObject contextMenu: null Plasmoid.status: dashWindow && dashWindow.visible ? PlasmaCore.Types.RequiresAttentionStatus : PlasmaCore.Types.PassiveStatus onWidthChanged: updateSizeHints() onHeightChanged: updateSizeHints() - + clip: true function updateSizeHints() { if (useCustomButtonImage) { if (vertical) { - var scaledHeight = Math.floor(parent.width * (buttonIcon.implicitHeight / buttonIcon.implicitWidth)); + var scaledHeight = Math.floor(parent.width * (floatingOrbPanel.buttonIcon.implicitHeight / floatingOrbPanel.buttonIcon.implicitWidth)); root.Layout.minimumHeight = scaledHeight; root.Layout.maximumHeight = scaledHeight; root.Layout.minimumWidth = units.iconSizes.small; root.Layout.maximumWidth = inPanel ? units.iconSizeHints.panel : -1; } else { - var scaledWidth = Math.floor(parent.height * (buttonIcon.implicitWidth / buttonIcon.implicitHeight)); + var scaledWidth = Math.floor(parent.height * (floatingOrbPanel.buttonIcon.implicitWidth / floatingOrbPanel.buttonIcon.implicitHeight)); root.Layout.minimumWidth = scaledWidth; root.Layout.maximumWidth = scaledWidth; root.Layout.minimumHeight = units.iconSizes.small; @@ -61,15 +66,89 @@ Item { root.Layout.minimumHeight = units.iconSizes.small root.Layout.maximumHeight = inPanel ? units.iconSizeHints.panel : -1; } + if(stickOutOrb && orb) { + root.Layout.minimumWidth = orb.width + panelSvg.margins.right*(compositing ? 0 : 1); + root.Layout.maximumWidth = orb.width + panelSvg.margins.right*(compositing ? 0 : 1); + root.Layout.minimumHeight = orb.height; + root.Layout.maximumHeight = orb.height; + } } + onStickOutOrbChanged: { + updateSizeHints(); + positionOrb(); + } + + + /* The following code gets the ContainmentInterface instance which is used for two things: + * 1. Getting context menu actions for entering edit mode and adding plasmoids + * 2. Keeping track on when edit mode is enabled. This allows us to hide the StartOrb + * object so the user can actually highlight and select this plasmoid during edit mode. + */ + property var containmentInterface: null + readonly property bool editMode: containmentInterface ? containmentInterface.editMode : false + onParentChanged: { + if (parent) { + for (var obj = root, depth = 0; !!obj; obj = obj.parent, depth++) { + if (obj.toString().startsWith('ContainmentInterface')) { + // desktop containment / plasmoidviewer + // Note: This doesn't always work. FolderViewDropArea may not yet have + // ContainmentInterface as a parent when this loop runs. + if (typeof obj['editMode'] === 'boolean') { + root.containmentInterface = obj + break + } + } else if (obj.toString().startsWith('DeclarativeDropArea')) { + // panel containment + if (typeof obj['Plasmoid'] !== 'undefined' && obj['Plasmoid'].toString().startsWith('ContainmentInterface')) { + if (typeof obj['Plasmoid']['editMode'] === 'boolean') { + root.containmentInterface = obj.Plasmoid + break + } + } + } + } + } + } Connections { target: units.iconSizeHints function onPanelChanged() { updateSizeHints(); } } + property bool compositing: kwindowsystem.compositingActive - // If the url is empty (default value), then use the fallback url. + /* We want to change the background hint for the orb dialog window depending + * on the compositing state. In this case, 0 refers to NoBackground, while + * 2 refers to SolidBackground. + */ + onCompositingChanged: { + if(compositing) { + orb.backgroundHints = 0; + } else { + orb.backgroundHints = 2; + } + updateSizeHints(); + positionOrb(); + + // Add a little padding to the orb. + if(compositing) + orb.x += panelSvg.margins.left; + } + + function positionOrb() { + var pos = plasmoid.mapToGlobal(kicker.x, kicker.y); // Gets the global position of this plasmoid, in screen coordinates. + orb.width = floatingOrbPanel.buttonIcon.implicitWidth + panelSvg.margins.left; + orb.height = floatingOrbPanel.buttonIcon.implicitHeight; + orb.x = pos.x; + orb.y = pos.y + panelSvg.margins.bottom; + + // Keep the orb positioned exactly on the bottom if it is rendered out of bounds (beyond the screen geometry) + if(orb.y + orb.height > plasmoid.screenGeometry.height) { + orb.y -= orb.y + orb.height - plasmoid.screenGeometry.height; + } + } + // If the url is empty (default value), then use the fallback url. Otherwise, return the url path relative to + // the location of the source code. function getResolvedUrl(url, fallback) { if(url.toString() === "") { return Qt.resolvedUrl(fallback); @@ -78,6 +157,12 @@ Item { } property int opacityDuration: 250 + function createContextMenu(pos) { + contextMenu = Qt.createQmlObject("ContextMenu {}", root); + contextMenu.fillActions(); + contextMenu.show(); + } + /* * Three IconItems are used in order to achieve the same look and feel as Windows 7's * orbs. When the menu is closed, hovering over the orb results in the hovered icon @@ -85,73 +170,48 @@ Item { * visibility, where the normal and hovered icons are invisible, and the pressed icon * is visible. * - * These icons will by default try to fill up as much space as they can in the compact - * representation. + * When they're bounded by the panel, these icons will by default try to fill up as + * much space as they can in the compact representation while preserving their aspect + * ratio. */ - PlasmaCore.IconItem { - id: buttonIcon - anchors.fill: parent - opacity: 1 - readonly property double aspectRatio: (vertical ? implicitHeight / implicitWidth - : implicitWidth / implicitHeight) - - source: getResolvedUrl(plasmoid.configuration.customButtonImage, "orbs/normal.png") - - smooth: true - roundToIconSize: !useCustomButtonImage || aspectRatio === 1 - onSourceChanged: updateSizeHints() - } - PlasmaCore.IconItem { - id: buttonIconPressed - anchors.fill: parent - opacity: 1 - visible: dashWindow.visible - readonly property double aspectRatio: (vertical ? implicitHeight / implicitWidth - : implicitWidth / implicitHeight) - source: getResolvedUrl(plasmoid.configuration.customButtonImageActive, "orbs/selected.png") // - - smooth: true - roundToIconSize: !useCustomButtonImage || aspectRatio === 1 - onSourceChanged: updateSizeHints() - } - PlasmaCore.IconItem { - id: buttonIconHovered - z: 1 - source: getResolvedUrl(plasmoid.configuration.customButtonImageHover, "orbs/hovered.png"); - opacity: mouseArea.containsMouse - visible: !dashWindow.visible + FloatingOrb { + id: floatingOrbPanel + visible: (!stickOutOrb) anchors.fill: parent - readonly property double aspectRatio: (vertical ? implicitHeight / implicitWidth - : implicitWidth / implicitHeight) - smooth: true - Behavior on opacity { - NumberAnimation { properties: "opacity"; easing.type: Easing.InOutQuad; duration: opacityDuration } - } - // A custom icon could also be rectangular. However, if a square, custom, icon is given, assume it - // to be an icon and round it to the nearest icon size again to avoid scaling artifacts. - roundToIconSize: !useCustomButtonImage || aspectRatio === 1 - - onSourceChanged: updateSizeHints() + objectName: "innerorb" } - // Clicking on the plasmoid or activating it in any way causes the Full representation - // to show/hide. + // Covers the entire compact representation just in case the orb dialog doesn't cover + // the entire area by itself. MouseArea { - id: mouseArea + id: mouseAreaCompositingOff anchors.fill: parent hoverEnabled: true + visible: stickOutOrb + acceptedButtons: Qt.LeftButton | Qt.RightButton onClicked: { - dashWindow.visible = !dashWindow.visible; - dashWindow.showingAllPrograms = false; + if(mouse.button == Qt.RightButton) { + var pos = plasmoid.mapToGlobal(mouse.x, mouse.y); + createContextMenu(pos); + + + } else { + dashWindow.visible = !dashWindow.visible; + dashWindow.showingAllPrograms = false; + } } } + Component.onCompleted: { dashWindow = Qt.createQmlObject("MenuRepresentation {}", root); + orb = Qt.createQmlObject("StartOrb {}", root); plasmoid.activated.connect(function() { dashWindow.visible = !dashWindow.visible; + dashWindow.showingAllPrograms = false; }); + positionOrb(); } } diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/ConfigGeneral.qml b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/ConfigGeneral.qml index aec5bde..c348454 100755 --- a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/ConfigGeneral.qml +++ b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/ConfigGeneral.qml @@ -48,6 +48,7 @@ Item { property alias cfg_appNameFormat: appNameFormat.currentIndex property alias cfg_switchCategoriesOnHover: switchCategoriesOnHover.checked + property alias cfg_stickOutOrb: stickOutOrb.checked property alias cfg_useExtraRunners: useExtraRunners.checked @@ -61,7 +62,7 @@ Item { spacing: units.smallSpacing Label { - text: i18n("Icon:") + text: i18n("Orb:") } IconPicker { @@ -73,7 +74,7 @@ Item { } Label { - text: i18n("Hover Icon:") + text: i18n("Hover Orb:") } IconPicker { id: iconPickerHover @@ -84,7 +85,7 @@ Item { } Label { - text: i18n("Active Icon:") + text: i18n("Clicked Orb:") } IconPicker { id: iconPickerActive @@ -123,6 +124,11 @@ Item { text: i18n("Switch categories on hover") } + CheckBox { + id: stickOutOrb + + text: i18n("Force constant orb size") + } } } diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/ContextMenu.qml b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/ContextMenu.qml new file mode 100644 index 0000000..584cc60 --- /dev/null +++ b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/ContextMenu.qml @@ -0,0 +1,93 @@ + +import QtQuick 2.15 +import QtQuick.Layouts 1.1 +import org.kde.plasma.plasmoid 2.0 + +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents + + +PlasmaComponents.ContextMenu { + id: menu + + placement: { + if (plasmoid.location === PlasmaCore.Types.LeftEdge) { + return PlasmaCore.Types.RightPosedTopAlignedPopup; + } else if (plasmoid.location === PlasmaCore.Types.TopEdge) { + return PlasmaCore.Types.BottomPosedLeftAlignedPopup; + } else if (plasmoid.location === PlasmaCore.Types.RightEdge) { + return PlasmaCore.Types.LeftPosedTopAlignedPopup; + } else { + return PlasmaCore.Types.TopPosedLeftAlignedPopup; + } + } + + minimumWidth: root.width + function show() { + openRelative(); + } + + function newMenuItem(parent) { + return Qt.createQmlObject(` + import org.kde.plasma.components 2.0 as PlasmaComponents + + PlasmaComponents.MenuItem { } + `, parent); + } + + function newSeparator(parent) { + return Qt.createQmlObject(` + import org.kde.plasma.components 2.0 as PlasmaComponents + + PlasmaComponents.MenuItem { separator: true } + `, parent); + } + function fillItem(item, action) { + item.text = action.text; + item.icon = action.icon; + item.visible = action.visible; + item.objectName = action.objectName; + item.clicked.connect(function() { + action.trigger(); + }); + addMenuItem(item); + } + function fillActions() { + plasmoid.prepareContextualActions(); + for(var index = 0; index < plasmoid.contextualActions.length; index++) { + var action = plasmoid.contextualActions[index]; + var item = newMenuItem(menu); + fillItem(item, action); + } + var action = plasmoid.action("alternatives"); + if(action && action.enabled) { + var item = newMenuItem(menu); + fillItem(item, action); + } + + item = newMenuItem(menu); + action = plasmoid.action("configure"); + fillItem(item, action); + + item = newSeparator(menu); + addMenuItem(item); + + action = containmentInterface.action("add widgets"); + if(action) { + item = newMenuItem(menu); + fillItem(item, action); + }; + + action = containmentInterface.action("configure"); + if(action) { + item = newMenuItem(menu); + fillItem(item, action); + }; + + } + onStatusChanged: { + if (status == PlasmaComponents.DialogStatus.Closed) { + menu.destroy(); + } + } +} diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/FloatingOrb.qml b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/FloatingOrb.qml new file mode 100644 index 0000000..59261ce --- /dev/null +++ b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/FloatingOrb.qml @@ -0,0 +1,103 @@ + +import QtQuick 2.4 +import QtQuick.Controls 1.1 +import QtQuick.Controls.Styles 1.1 +import QtQuick.Layouts 1.1 +import QtQuick.Dialogs 1.2 +import QtQuick.Window 2.1 +import QtGraphicalEffects 1.0 + +import org.kde.plasma.plasmoid 2.0 +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras + +import org.kde.plasma.private.kicker 0.1 as Kicker +import org.kde.kcoreaddons 1.0 as KCoreAddons // kuser +import org.kde.plasma.private.shell 2.0 + +import org.kde.kwindowsystem 1.0 +import org.kde.kquickcontrolsaddons 2.0 +import org.kde.plasma.private.quicklaunch 1.0 + +import org.kde.kirigami 2.13 as Kirigami +import org.kde.kquickcontrolsaddons 2.0 as KQuickAddons + +import org.kde.kwindowsystem 1.0 +import org.kde.kquickcontrolsaddons 2.0 as KQuickControlsAddons + + +Item { + id: floatingOrb + width: buttonIcon.implicitWidth + height: buttonIcon.implicitHeight + property alias buttonIcon: buttonIcon + property alias buttonIconPressed: buttonIconPressed + property alias buttonIconHovered: buttonIconHovered + property alias mouseArea: mouseArea + + PlasmaCore.IconItem { + id: buttonIcon + anchors.fill: parent + opacity: 1 + readonly property double aspectRatio: (vertical ? implicitHeight / implicitWidth + : implicitWidth / implicitHeight) + + source: getResolvedUrl(plasmoid.configuration.customButtonImage, "orbs/normal.png") + smooth: true + roundToIconSize: !useCustomButtonImage || aspectRatio === 1 + onSourceChanged: updateSizeHints() + } + PlasmaCore.IconItem { + id: buttonIconPressed + anchors.fill: parent + opacity: 1 + visible: dashWindow.visible + readonly property double aspectRatio: (vertical ? implicitHeight / implicitWidth + : implicitWidth / implicitHeight) + + source: getResolvedUrl(plasmoid.configuration.customButtonImageActive, "orbs/selected.png") // + + smooth: true + roundToIconSize: !useCustomButtonImage || aspectRatio === 1 + onSourceChanged: updateSizeHints() + } + PlasmaCore.IconItem { + id: buttonIconHovered + z: 1 + source: getResolvedUrl(plasmoid.configuration.customButtonImageHover, "orbs/hovered.png"); + opacity: mouseArea.containsMouse || mouseAreaCompositingOff.containsMouse + visible: !dashWindow.visible + anchors.fill: parent + readonly property double aspectRatio: (vertical ? implicitHeight / implicitWidth + : implicitWidth / implicitHeight) + smooth: true + Behavior on opacity { + NumberAnimation { properties: "opacity"; easing.type: Easing.InOutQuad; duration: opacityDuration } + } + // A custom icon could also be rectangular. However, if a square, custom, icon is given, assume it + // to be an icon and round it to the nearest icon size again to avoid scaling artifacts. + roundToIconSize: !useCustomButtonImage || aspectRatio === 1 + + onSourceChanged: updateSizeHints() + } + + MouseArea + { + id: mouseArea + anchors.fill: parent + hoverEnabled: true + acceptedButtons: Qt.LeftButton | Qt.RightButton + onClicked: { + if(mouse.button == Qt.RightButton) { + var pos = plasmoid.mapToGlobal(mouse.x, mouse.y); + createContextMenu(pos); + + + } else { + dashWindow.visible = !dashWindow.visible; + dashWindow.showingAllPrograms = false; + } + } + } +} diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/ItemMultiGridView.qml b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/ItemMultiGridView.qml index adaac4e..298a12a 100755 --- a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/ItemMultiGridView.qml +++ b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/ItemMultiGridView.qml @@ -126,7 +126,10 @@ PlasmaExtras.ScrollArea { delegate: Item { width: itemColumn.width height: gridViewLabel.height + gridView.height + (index == repeater.count - 1 ? 0 : units.smallSpacing) - visible: repeater.model.modelForRow(index).count > 0 + visible: { + if(!repeater.model.modelForRow(index)) return false; + return repeater.model.modelForRow(index).count > 0 + } property alias currentIndex: gridView.currentIndex property alias count: gridView.count @@ -143,7 +146,10 @@ PlasmaExtras.ScrollArea { color: "#1d3287"; level: 4 verticalAlignment: Qt.AlignVCenter - text: repeater.model.modelForRow(index).description + " (" + repeater.model.modelForRow(index).count +")" + text: { + if(!repeater.model.modelForRow(index)) return ""; + return repeater.model.modelForRow(index).description + " (" + repeater.model.modelForRow(index).count +")"; + } } //Line that extends from the header to the right of the search view. diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/KickerListModel.qml b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/KickerListModel.qml index 49c664a..2825836 100755 --- a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/KickerListModel.qml +++ b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/KickerListModel.qml @@ -65,6 +65,7 @@ ListModel { } function parseModel(appList, model, path) { + // console.log(path, model, model.description, model.count); for (var i = 0; i < model.count; i++) { var item = model.modelForRow(i); if (!item) { @@ -72,8 +73,10 @@ ListModel { } var itemPath = (path || []).concat(i); if (item && item.hasChildren) { + // console.log(item) parseModel(appList, item, itemPath); } else { + // console.log(itemPath, item, item.description); appList.push(item); } } diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml index f7de27f..0cc2ecd 100755 --- a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml +++ b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/MenuRepresentation.qml @@ -42,7 +42,7 @@ import org.kde.plasma.private.quicklaunch 1.0 import org.kde.kirigami 2.13 as Kirigami import org.kde.kquickcontrolsaddons 2.0 as KQuickAddons -import org.kde.kwindowsystem 1.0 + PlasmaCore.Dialog { @@ -61,7 +61,7 @@ PlasmaCore.Dialog { property bool searching: (searchField.text != "") property bool showingAllPrograms: false property bool firstTimePopup: false // To make sure the user icon is displayed properly. - property bool compositingEnabled: kwindowsystem.compositingActive + property int slideAnimationDuration: 105 @@ -182,7 +182,7 @@ PlasmaCore.Dialog { focus: true clip: true - KWindowSystem { id: kwindowsystem } // Used for detecting compositing changes. + KCoreAddons.KUser { id: kuser } // Used for getting the username and icon. Logic { id: logic } // Probably useful. diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/SearchView.qml b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/SearchView.qml index d082b0f..23963da 100755 --- a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/SearchView.qml +++ b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/SearchView.qml @@ -57,7 +57,7 @@ Item { if (!searchField.text) { repeaterModelIndex = 0; runnerGrid.repeater.currentModelIndex = 0; - runnerModel.model = null; + if(runnerModel.model) runnerModel.model = null; } else { if(runnerGrid.count != 0) { runnerGrid.repeater.currentModelIndex = 0; @@ -72,6 +72,7 @@ Item { if(!focus) repeaterModelIndex = runnerGrid.repeater.currentModelIndex; else { runnerGrid.repeater.currentModelIndex = repeaterModelIndex; + console.log("home."); } } } diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/StartOrb.qml b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/StartOrb.qml new file mode 100644 index 0000000..11b4dc1 --- /dev/null +++ b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/StartOrb.qml @@ -0,0 +1,103 @@ + +import QtQuick 2.4 +import QtQuick.Controls 1.1 +import QtQuick.Controls.Styles 1.1 +import QtQuick.Layouts 1.1 +import QtQuick.Dialogs 1.2 +import QtQuick.Window 2.1 +import QtGraphicalEffects 1.0 + +import org.kde.plasma.plasmoid 2.0 +import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.plasma.components 2.0 as PlasmaComponents +import org.kde.plasma.extras 2.0 as PlasmaExtras + +import org.kde.plasma.private.kicker 0.1 as Kicker +import org.kde.kcoreaddons 1.0 as KCoreAddons // kuser +import org.kde.plasma.private.shell 2.0 + +import org.kde.kwindowsystem 1.0 +import org.kde.kquickcontrolsaddons 2.0 +import org.kde.plasma.private.quicklaunch 1.0 + +import org.kde.kirigami 2.13 as Kirigami +import org.kde.kquickcontrolsaddons 2.0 as KQuickAddons + +import org.kde.kwindowsystem 1.0 +import org.kde.kquickcontrolsaddons 2.0 as KQuickControlsAddons + +/* + * This is the Dialog that displays the Start menu orb when it sticks out + * of the panel. In principle, it works in almost the same way as the + * Start menu user icon, in fact most of the code is directly copied from + * there. + * + * With this approach, two important problems come up: + * 1. Right clicking on this dialog window won't open the standard + * context menu as expected, as it actually isn't part of the + * compact or full representation. + * 2. When compositing is disabled, even with the NoBackground hint, this + * dialog window will simply be drawn with an opaque, black background. + * + * This source code tackles both problems in such a way to avoid having to + * introduce a compiled component of the plasmoid, which would greatly + * reduce its portability and ease of installation. The downside of this + * approach is that the solution to the second problem leaves us bound to + * the Seven-Black Plasma theme, as it uses the SVG file found in + * + * /solid/widgets/tooltip.svg + * + * However, this can be circumvented by copying this file over to any other + * theme, as this is probably the *least* used SVG texture in KDE, if not + * completely unused. This SVG file contains only the opacity and input + * mask of the dialog window, which gets applied when X11 compositing is + * disabled. Another slight limitation to this approach is that the + * possible choice of menu orbs is limited to perfect spheres in this + * particular configuration. This can be corrected if the opacity mask is + * changed in the SVG file, meaning that installing custom orbs might + * potentially be a two-step process now. + * + * Compared to the popup avatar, this dialog window should NOT have any + * visualParent set, as it causes inexplicable behavior where the orb + * moves away. I have no idea why it does that. + * + * This has been developed only for the bottom/south oriented panel, and + * other orientations should receive support when I begin giving pretty + * much *everything* else support for other orientations. + * + */ + + PlasmaCore.Dialog { + id: iconUser + flags: Qt.WindowStaysOnTopHint | Qt.Popup | Qt.X11BypassWindowManagerHint // To prevent the icon from animating its opacity when its visibility is changed + type: "Tooltip" // Crucial to making this work under no compositing. See above for details. + location: "Floating" + + // Positions are defined when the plasmoid has been fully loaded, to prevent undefined behavior. + x: 0 + y: 0 + onYChanged: { // Tries to circumvent possible inexplicable changes in position. Currently doesn't seem to run in practice anymore, as it has most likely been fixed by keeping the visualParent undefined. + var pos = plasmoid.mapToGlobal(kicker.x, kicker.y); + if(iconUser.y - pos.y < 0) { + iconUser.y -= iconUser.y - pos.y + panelSvg.margins.bottom*2 + panelSvg.margins.top*2; + } + } + backgroundHints: PlasmaCore.Types.SolidBackground + visible: root.visible && stickOutOrb + opacity: iconUser.visible // To prevent even more NP-hard unpredictable behavior + + // The actual orb button, this dialog window is just a container for it. + mainItem: FloatingOrb { + id: floatingOrbIcon + } + Component.onCompleted: { + /* + * When compositing is enabled, we want to simply use the NoBackground + * hint to render a fully transparent, blur-free window. If we used the + * same opacity mask for both cases, blur would be applied behind the + * orb, which would also by extension render reflections and colorize + * the entire area as well. + */ + iconUser.backgroundHints = compositing ? 0 : 2; + } +} diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/main.qml b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/main.qml index 2c00674..13cf635 100755 --- a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/main.qml +++ b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/main.qml @@ -24,6 +24,8 @@ import org.kde.plasma.plasmoid 2.0 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.private.kicker 0.1 as Kicker +import org.kde.kquickcontrolsaddons 2.0 as KQuickControlsAddons +import org.kde.kwindowsystem 1.0 Item { id: kicker @@ -33,6 +35,7 @@ Item { anchors.fill: parent property bool isDash: false property Item dragSource: null + clip: true // With this we can make the compact representation be any // item we want. @@ -42,6 +45,7 @@ Item { property QtObject globalFavorites: rootModel.favoritesModel property QtObject systemFavorites: rootModel.systemFavoritesModel + property bool compositingEnabled: kwindowsystem.compositingActive // Runs KMenuEdit. function action_menuedit() { @@ -82,7 +86,7 @@ Item { } signal exited(string cmd, int exitCode, int exitStatus, string stdout, string stderr) } - + KWindowSystem { id: kwindowsystem } // Used for detecting compositing changes. Kicker.RootModel { id: rootModel @@ -230,5 +234,6 @@ Item { rootModel.refreshed.connect(reset); dragHelper.dropped.connect(resetDragSource); + } } diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/orbs/hovered.png b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/orbs/hovered.png index 6a652f19fbcba8d455cf5b82b574c2805b3efee1..a01a6d19700f5fed3d81c9a795e5252753c62aba 100755 GIT binary patch delta 13214 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 delta 13540 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 diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/orbs/normal.png b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.SevenStart/contents/ui/orbs/normal.png index b5220309ea32f7ce616227f0ad8d41afd6f67a66..8c00905118e3f4fe8ad281f1e748ea1b188607c5 100755 GIT binary patch delta 12965 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 qkqZJBBA|T1xVy}f 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 delta 13239 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 diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.seventasks/contents/ui/Task.qml b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.seventasks/contents/ui/Task.qml index 6d08a16..7d91674 100755 --- a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.seventasks/contents/ui/Task.qml +++ b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.seventasks/contents/ui/Task.qml @@ -58,6 +58,7 @@ MouseArea { property real taskHeight: 0 property string previousState: "" property bool rightClickDragging: false + property bool toolTipOpen: false property Item audioStreamOverlay property var audioStreams: [] @@ -153,6 +154,7 @@ MouseArea { } hoverEnabled = true; taskList.updateHoverFunc(); + toolTipArea.tooltipClicked = true; } onContainsMouseChanged: { @@ -176,6 +178,7 @@ MouseArea { hoverEnabled = true; updateMousePosition(ma.mouseX); + toolTipArea.tooltipClicked = true; } @@ -226,8 +229,11 @@ MouseArea { if (plasmoid.configuration.showToolTips && toolTipArea.active) { hideToolTipTemporarily(); } + /*if(childCount >= 2 && plasmoid.configuration.showToolTips && toolTipArea.active) { + toolTipArea.tooltipClicked = !toolTipArea.tooltipClicked; + }*/ TaskTools.activateTask(modelIndex(), model, mouse.modifiers, task); - + } else if (mouse.button === Qt.BackButton || mouse.button === Qt.ForwardButton) { var sourceName = mpris2Source.sourceNameForLauncherUrl(model.LauncherUrlWithoutIcon, model.AppPid); if (sourceName) { @@ -452,7 +458,7 @@ MouseArea { opacity: 0.6 visible: childCount >= 3 ? true : false anchors.rightMargin: PlasmaCore.Units.smallSpacing - enabledBorders: Plasma.FrameSvg.EnabledBorders.RightBorder + enabledBorders: PlasmaCore.FrameSvg.RightBorder } @@ -711,8 +717,8 @@ MouseArea { PlasmaCore.ToolTipArea { id: toolTipArea z: -1 - //backgroundHints: "SolidBackground" - MouseArea { + + MouseArea { id: ma hoverEnabled: true propagateComposedEvents: true @@ -720,34 +726,32 @@ MouseArea { onPositionChanged: { task.updateMousePosition(ma.mouseX); task.positionChanged(mouse); - //var xtr = toolTipArea.backgroundHints(); - } onContainsMouseChanged: { - task.updateMousePosition(ma.mouseX); - //task.onContainsMouseChanged(); - //toolTipArea.onContainsMouseChanged(); - //mouse.accepted = false; } onPressed: mouse.accepted = false; onReleased: mouse.accepted = false; onWheel: wheel.accepted = false; - //onExited: { hoverGradient.horizontalOffset = 0; - //task.onExited(); - //} } anchors.fill: parent location: plasmoid.location - - active: !inPopup && !groupDialog.visible && plasmoid.configuration.showToolTips + property bool tooltipClicked: true + active: !inPopup && !groupDialog.visible && (plasmoid.configuration.showToolTips || tasks.toolTipOpenedByClick === toolTipArea) interactive: model.IsWindow === true mainItem: (model.IsWindow === true) ? openWindowToolTipDelegate : pinnedAppToolTipDelegate property alias mainToolTip: toolTipArea.mainItem + onToolTipVisibleChanged: { + task.toolTipOpen = toolTipVisible; + if(!toolTipVisible) { + tasks.toolTipOpenedByClick = null; + } else { + tasks.toolTipAreaItem = toolTipArea; + } + } onContainsMouseChanged: { - updateMousePosition(ma.mouseX); if (containsMouse) { mainItem.parentTask = task; @@ -802,6 +806,9 @@ MouseArea { mainItem.smartLauncherCount = Qt.binding(function() { return mainItem.smartLauncherCountVisible ? task.smartLauncherItem.count : 0; }); + tasks.toolTipAreaItem = toolTipArea; + } else { + tasks.toolTipOpenedByClick = null; } } } diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.seventasks/contents/ui/code/tools.js b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.seventasks/contents/ui/code/tools.js index e672436..5816e75 100755 --- a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.seventasks/contents/ui/code/tools.js +++ b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.seventasks/contents/ui/code/tools.js @@ -148,7 +148,11 @@ function activateTask(index, model, modifiers, task) { else if (plasmoid.configuration.showToolTips && plasmoid.configuration.groupedTaskVisualization === 1 ) { - task.showToolTip(); + if(tasks.toolTipOpenedByClick) tasks.toolTipOpenedByClick.hideImmediately(); + else { + tasks.toolTipOpenedByClick = task.toolTipAreaItem; + task.showToolTip(); + } } // Option 3: show Present Windows for all child tasks diff --git a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.seventasks/contents/ui/main.qml b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.seventasks/contents/ui/main.qml index 6ea6c6e..c8d3e4a 100755 --- a/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.seventasks/contents/ui/main.qml +++ b/Plasma/Plasma_Widgets/User/io.gitgud.wackyideas.seventasks/contents/ui/main.qml @@ -27,7 +27,8 @@ MouseArea { // This property tells the plasmoid to render labels next to task icons. // Previously, this property was determined by the value of (plasmoid.pluginName === "org.kde.plasma.icontasks") property bool iconsOnly: !plasmoid.configuration.labelVisible - + property var toolTipOpenedByClick: null + property var toolTipAreaItem: null //property QtObject contextMenuComponent: Qt.createComponent("ContextMenu.qml"); property QtObject tasksMenuComponent: Qt.createComponent("TasksMenu.qml"); property QtObject pulseAudioComponent: Qt.createComponent("PulseAudio.qml"); @@ -60,6 +61,7 @@ MouseArea { signal requestLayout signal windowsHovered(variant winIds, bool hovered) + signal activateWindowView(variant winIds) signal presentWindows(variant winIds) states: State { @@ -511,10 +513,12 @@ MouseArea { // With this, we can update each task icon pretty much globally. function updateHoverFunc() { for(var i = 0; i < taskRepeater.count; i++) { - taskRepeater.itemAt(i).updateHoverColor(); + if(taskRepeater.itemAt(i)) { + taskRepeater.itemAt(i).updateHoverColor(); + } } tasks.state = ""; - console.log("Updated hovers"); + //console.log("Updated hovers"); } Timer { @@ -604,7 +608,8 @@ MouseArea { tasks.requestLayout.connect(layoutTimer.restart); tasks.requestLayout.connect(iconGeometryTimer.restart); tasks.windowsHovered.connect(backend.windowsHovered); - tasks.presentWindows.connect(backend.presentWindows); + //tasks.presentWindows.connect(backend.presentWindows); + tasks.activateWindowView.connect(backend.activateWindowView); dragHelper.dropped.connect(resetDragSource); taskList.updateHoverFunc(); } diff --git a/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/ContextMenu.qml b/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/ContextMenu.qml deleted file mode 100755 index 09493d6..0000000 --- a/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/ContextMenu.qml +++ /dev/null @@ -1,774 +0,0 @@ -/* - SPDX-FileCopyrightText: 2012-2016 Eike Hein - SPDX-FileCopyrightText: 2016 Kai Uwe Broulik - - SPDX-License-Identifier: GPL-2.0-or-later -*/ - -import QtQuick 2.15 - -import org.kde.plasma.plasmoid 2.0 - -import org.kde.plasma.core 2.0 as PlasmaCore -import org.kde.plasma.components 2.0 as PlasmaComponents - -import org.kde.taskmanager 0.1 as TaskManager - -import "code/layout.js" as LayoutManager - -PlasmaComponents.ContextMenu { - id: menu - - property QtObject backend - property QtObject mpris2Source - property var modelIndex - readonly property var atm: TaskManager.AbstractTasksModel - - property bool showAllPlaces: false - - - placement: { - if (plasmoid.location === PlasmaCore.Types.LeftEdge) { - return PlasmaCore.Types.RightPosedTopAlignedPopup; - } else if (plasmoid.location === PlasmaCore.Types.TopEdge) { - return PlasmaCore.Types.BottomPosedLeftAlignedPopup; - } else if (plasmoid.location === PlasmaCore.Types.RightEdge) { - return PlasmaCore.Types.LeftPosedTopAlignedPopup; - } else { - return PlasmaCore.Types.TopPosedLeftAlignedPopup; - } - } - - minimumWidth: visualParent.width - //We have all of the above - - //Might be important, at least the opening part - onStatusChanged: { - if (visualParent && get(atm.LauncherUrlWithoutIcon) != "" && status == PlasmaComponents.DialogStatus.Open) { - activitiesDesktopsMenu.refresh(); - - } else if (status == PlasmaComponents.DialogStatus.Closed) { - menu.destroy(); - backend.ungrabMouse(visualParent); - } - } - - Component.onCompleted: { - // Cannot have "Connections" as child of PlasmaCoponents.ContextMenu. - backend.showAllPlaces.connect(showContextMenuWithAllPlaces); - } - - Component.onDestruction: { - backend.showAllPlaces.disconnect(showContextMenuWithAllPlaces); - } - - function showContextMenuWithAllPlaces() { - visualParent.showContextMenu({showAllPlaces: true}); - } - - function get(modelProp) { - return tasksModel.data(modelIndex, modelProp) - } - - function show() { - loadDynamicLaunchActions(get(atm.LauncherUrlWithoutIcon)); - openRelative(); - } - - function newMenuItem(parent) { - return Qt.createQmlObject(` - import org.kde.plasma.components 2.0 as PlasmaComponents - - PlasmaComponents.MenuItem {} - `, parent); - } - - function newSeparator(parent) { - return Qt.createQmlObject(` - import org.kde.plasma.components 2.0 as PlasmaComponents - - PlasmaComponents.MenuItem { separator: true } - `, parent); - } - - function loadDynamicLaunchActions(launcherUrl) { - var sections = [ - { - title: i18n("Places"), - group: "places", - actions: backend.placesActions(launcherUrl, showAllPlaces, menu) - }, - { - title: i18n("Recent Files"), - group: "recents", - actions: backend.recentDocumentActions(launcherUrl, menu) - }, - { - title: i18n("Actions"), - group: "actions", - actions: backend.jumpListActions(launcherUrl, menu) - } - ] - - // C++ can override section heading by returning a QString as first action - sections.forEach((section) => { - if (typeof section.actions[0] === "string") { - section.title = section.actions.shift(); // take first - } - }); - - // QMenu does not limit its width automatically. Even if we set a maximumWidth - // it would just cut off text rather than eliding. So we do this manually. - var textMetrics = Qt.createQmlObject("import QtQuick 2.4; TextMetrics {}", menu); - var maximumWidth = LayoutManager.maximumContextMenuTextWidth(); - - sections.forEach(function (section) { - if (section["actions"].length > 0 || section["group"] == "actions") { - // Don't add the "Actions" header if the menu has nothing but actions - // in it, because then it's redundant (all menus have actions) - if ( - (section["group"] != "actions") || - (section["group"] == "actions" && (sections[0]["actions"].length > 0 || sections[1]["actions"].length > 0)) - ) { - var sectionHeader = newMenuItem(menu); - sectionHeader.text = section["title"]; - sectionHeader.section = true; - menu.addMenuItem(sectionHeader, startNewInstanceItem); - } - } - - for (var i = 0; i < section["actions"].length; ++i) { - var item = newMenuItem(menu); - item.action = section["actions"][i]; - - // Crude way of manually eliding... - var elided = false; - textMetrics.text = Qt.binding(function() { - return item.action.text; - }); - - while (textMetrics.width > maximumWidth) { - item.action.text = item.action.text.slice(0, -1); - elided = true; - } - - if (elided) { - item.action.text += "…"; - } - - menu.addMenuItem(item, startNewInstanceItem); - } - }); - - // Add Media Player control actions - var sourceName = mpris2Source.sourceNameForLauncherUrl(launcherUrl, get(atm.AppPid)); - - if (sourceName && !(get(atm.WinIdList) !== undefined && get(atm.WinIdList).length > 1)) { - var playerData = mpris2Source.data[sourceName] - - if (playerData.CanControl) { - var playing = (playerData.PlaybackStatus === "Playing"); - var menuItem = menu.newMenuItem(menu); - menuItem.text = i18nc("Play previous track", "Previous Track"); - menuItem.icon = "media-skip-backward"; - menuItem.enabled = Qt.binding(function() { - return playerData.CanGoPrevious; - }); - menuItem.clicked.connect(function() { - mpris2Source.goPrevious(sourceName); - }); - menu.addMenuItem(menuItem, startNewInstanceItem); - - menuItem = menu.newMenuItem(menu); - // PlasmaCore Menu doesn't actually handle icons or labels changing at runtime... - menuItem.text = Qt.binding(function() { - // if CanPause, toggle the menu entry between Play & Pause, otherwise always use Play - return playing && playerData.CanPause ? i18nc("Pause playback", "Pause") : i18nc("Start playback", "Play"); - }); - menuItem.icon = Qt.binding(function() { - return playing && playerData.CanPause ? "media-playback-pause" : "media-playback-start"; - }); - menuItem.enabled = Qt.binding(function() { - return playing ? playerData.CanPause : playerData.CanPlay; - }); - menuItem.clicked.connect(function() { - if (playing) { - mpris2Source.pause(sourceName); - } else { - mpris2Source.play(sourceName); - } - }); - menu.addMenuItem(menuItem, startNewInstanceItem); - - menuItem = menu.newMenuItem(menu); - menuItem.text = i18nc("Play next track", "Next Track"); - menuItem.icon = "media-skip-forward"; - menuItem.enabled = Qt.binding(function() { - return playerData.CanGoNext; - }); - menuItem.clicked.connect(function() { - mpris2Source.goNext(sourceName); - }); - menu.addMenuItem(menuItem, startNewInstanceItem); - - menuItem = menu.newMenuItem(menu); - menuItem.text = i18nc("Stop playback", "Stop"); - menuItem.icon = "media-playback-stop"; - menuItem.enabled = Qt.binding(function() { - return playerData.PlaybackStatus !== "Stopped"; - }); - menuItem.clicked.connect(function() { - mpris2Source.stop(sourceName); - }); - menu.addMenuItem(menuItem, startNewInstanceItem); - - // Technically media controls and audio streams are separate but for the user they're - // semantically related, don't add a separator inbetween. - if (!menu.visualParent.hasAudioStream) { - menu.addMenuItem(newSeparator(menu), startNewInstanceItem); - } - - // If we don't have a window associated with the player but we can quit - // it through MPRIS we'll offer a "Quit" option instead of "Close" - if (!closeWindowItem.visible && playerData.CanQuit) { - menuItem = menu.newMenuItem(menu); - menuItem.text = i18nc("Quit media player app", "Quit"); - menuItem.icon = "application-exit"; - menuItem.visible = Qt.binding(function() { - return !closeWindowItem.visible; - }); - menuItem.clicked.connect(function() { - mpris2Source.quit(sourceName); - }); - menu.addMenuItem(menuItem); - } - - // If we don't have a window associated with the player but we can raise - // it through MPRIS we'll offer a "Restore" option - if (get(atm.IsLauncher) === true && !startNewInstanceItem.visible && playerData.CanRaise) { - menuItem = menu.newMenuItem(menu); - menuItem.text = i18nc("Open or bring to the front window of media player app", "Restore"); - menuItem.icon = playerData["Desktop Icon Name"]; - menuItem.visible = Qt.binding(function() { - return !startNewInstanceItem.visible; - }); - menuItem.clicked.connect(function() { - mpris2Source.raise(sourceName); - }); - menu.addMenuItem(menuItem, startNewInstanceItem); - } - } - } - - // We allow mute/unmute whenever an application has a stream, regardless of whether it - // is actually playing sound. - // This way you can unmute, e.g. a telephony app, even after the conversation has ended, - // so you still have it ringing later on. - if (menu.visualParent.hasAudioStream) { - var muteItem = menu.newMenuItem(menu); - muteItem.checkable = true; - muteItem.checked = Qt.binding(function() { - return menu.visualParent && menu.visualParent.muted; - }); - muteItem.clicked.connect(function() { - menu.visualParent.toggleMuted(); - }); - muteItem.text = i18n("Mute"); - muteItem.icon = "audio-volume-muted"; - menu.addMenuItem(muteItem, startNewInstanceItem); - - menu.addMenuItem(newSeparator(menu), startNewInstanceItem); - } - } - - PlasmaComponents.MenuItem { - id: startNewInstanceItem - visible: get(atm.CanLaunchNewInstance) - text: i18n("Open New Window") - icon: "window-new" - - onClicked: tasksModel.requestNewInstance(modelIndex) - } - - PlasmaComponents.MenuItem { - id: virtualDesktopsMenuItem - - visible: virtualDesktopInfo.numberOfDesktops > 1 - && (visualParent && get(atm.IsLauncher) !== true - && get(atm.IsStartup) !== true - && get(atm.IsVirtualDesktopsChangeable) === true) - - enabled: visible - - text: i18n("Move to &Desktop") - icon: "virtual-desktops" - - Connections { - target: virtualDesktopInfo - - function onNumberOfDesktopsChanged() {Qt.callLater(virtualDesktopsMenu.refresh)} - function onDesktopIdsChanged() {Qt.callLater(virtualDesktopsMenu.refresh)} - function onDesktopNamesChanged() {Qt.callLater(virtualDesktopsMenu.refresh)} - } - - PlasmaComponents.ContextMenu { - id: virtualDesktopsMenu - - visualParent: virtualDesktopsMenuItem.action - - function refresh() { - clearMenuItems(); - - if (virtualDesktopInfo.numberOfDesktops <= 1) { - return; - } - - var menuItem = menu.newMenuItem(virtualDesktopsMenu); - menuItem.text = i18n("Move &To Current Desktop"); - menuItem.enabled = Qt.binding(function() { - return menu.visualParent && menu.get(atm.VirtualDesktops).indexOf(virtualDesktopInfo.currentDesktop) === -1; - }); - menuItem.clicked.connect(function() { - tasksModel.requestVirtualDesktops(menu.modelIndex, [virtualDesktopInfo.currentDesktop]); - }); - - menuItem = menu.newMenuItem(virtualDesktopsMenu); - menuItem.text = i18n("&All Desktops"); - menuItem.checkable = true; - menuItem.checked = Qt.binding(function() { - return menu.visualParent && menu.get(atm.IsOnAllVirtualDesktops) === true; - }); - menuItem.clicked.connect(function() { - tasksModel.requestVirtualDesktops(menu.modelIndex, []); - }); - backend.setActionGroup(menuItem.action); - - menu.newSeparator(virtualDesktopsMenu); - - for (var i = 0; i < virtualDesktopInfo.desktopNames.length; ++i) { - menuItem = menu.newMenuItem(virtualDesktopsMenu); - menuItem.text = i18nc("1 = number of desktop, 2 = desktop name", "&%1 %2", i + 1, virtualDesktopInfo.desktopNames[i]); - menuItem.checkable = true; - menuItem.checked = Qt.binding((function(i) { - return function() { return menu.visualParent && menu.get(atm.VirtualDesktops).indexOf(virtualDesktopInfo.desktopIds[i]) > -1 }; - })(i)); - menuItem.clicked.connect((function(i) { - return function() { return tasksModel.requestVirtualDesktops(menu.modelIndex, [virtualDesktopInfo.desktopIds[i]]); }; - })(i)); - backend.setActionGroup(menuItem.action); - } - - menu.newSeparator(virtualDesktopsMenu); - - menuItem = menu.newMenuItem(virtualDesktopsMenu); - menuItem.text = i18n("&New Desktop"); - menuItem.clicked.connect(function() { - tasksModel.requestNewVirtualDesktop(menu.modelIndex); - }); - } - - Component.onCompleted: refresh() - } - } - - PlasmaComponents.MenuItem { - id: activitiesDesktopsMenuItem - - visible: activityInfo.numberOfRunningActivities > 1 - && (visualParent && !get(atm.IsLauncher) - && !get(atm.IsStartup)) - - enabled: visible - - text: i18n("Show in &Activities") - icon: "activities" - - Connections { - target: activityInfo - - function onNumberOfRunningActivitiesChanged() { - activitiesDesktopsMenu.refresh() - } - } - - PlasmaComponents.ContextMenu { - id: activitiesDesktopsMenu - - visualParent: activitiesDesktopsMenuItem.action - - function refresh() { - clearMenuItems(); - - if (activityInfo.numberOfRunningActivities <= 1) { - return; - } - - var menuItem = menu.newMenuItem(activitiesDesktopsMenu); - menuItem.text = i18n("Add To Current Activity"); - menuItem.enabled = Qt.binding(function() { - return menu.visualParent && menu.get(atm.Activities).length > 0 && - menu.get(atm.Activities).indexOf(activityInfo.currentActivity) < 0; - }); - menuItem.clicked.connect(function() { - tasksModel.requestActivities(menu.modelIndex, menu.get(atm.Activities).concat(activityInfo.currentActivity)); - }); - - menuItem = menu.newMenuItem(activitiesDesktopsMenu); - menuItem.text = i18n("All Activities"); - menuItem.checkable = true; - menuItem.checked = Qt.binding(function() { - return menu.visualParent && menu.get(atm.Activities).length === 0; - }); - menuItem.toggled.connect(function(checked) { - let newActivities = []; // will cast to an empty QStringList i.e all activities - if (!checked) { - newActivities = new Array(activityInfo.currentActivity); - } - tasksModel.requestActivities(menu.modelIndex, newActivities); - }); - - menu.newSeparator(activitiesDesktopsMenu); - - var runningActivities = activityInfo.runningActivities(); - for (var i = 0; i < runningActivities.length; ++i) { - var activityId = runningActivities[i]; - - menuItem = menu.newMenuItem(activitiesDesktopsMenu); - menuItem.text = activityInfo.activityName(runningActivities[i]); - menuItem.checkable = true; - menuItem.checked = Qt.binding( (function(activityId) { - return function() { - return menu.visualParent && menu.get(atm.Activities).indexOf(activityId) >= 0; - }; - })(activityId)); - menuItem.toggled.connect((function(activityId) { - return function (checked) { - var newActivities = menu.get(atm.Activities); - if (checked) { - newActivities = newActivities.concat(activityId); - } else { - var index = newActivities.indexOf(activityId) - if (index < 0) { - return; - } - - newActivities.splice(index, 1); - } - return tasksModel.requestActivities(menu.modelIndex, newActivities); - }; - })(activityId)); - } - - menu.newSeparator(activitiesDesktopsMenu); - - for (var i = 0; i < runningActivities.length; ++i) { - var activityId = runningActivities[i]; - var onActivities = menu.get(atm.Activities); - - // if the task is on a single activity, don't insert a "move to" item for that activity - if(onActivities.length == 1 && onActivities[0] == activityId) { - continue; - } - - menuItem = menu.newMenuItem(activitiesDesktopsMenu); - menuItem.text = i18n("Move to %1", activityInfo.activityName(activityId)) - menuItem.clicked.connect((function(activityId) { - return function () { - return tasksModel.requestActivities(menu.modelIndex, [activityId]); - }; - })(activityId)); - } - - menu.newSeparator(activitiesDesktopsMenu); - } - - Component.onCompleted: refresh() - } - } - - PlasmaComponents.MenuItem { - id: launcherToggleAction - - visible: visualParent - && get(atm.IsLauncher) !== true - && get(atm.IsStartup) !== true - && plasmoid.immutability !== PlasmaCore.Types.SystemImmutable - && (activityInfo.numberOfRunningActivities < 2) - && !doesBelongToCurrentActivity() - - enabled: visualParent && get(atm.LauncherUrlWithoutIcon) != "" - - text: i18n("&Pin to Task Manager") - icon: "window-pin" - - function doesBelongToCurrentActivity() { - return tasksModel.launcherActivities(get(atm.LauncherUrlWithoutIcon)).some(function(activity) { - return activity === activityInfo.currentActivity || activity === activityInfo.nullUuid; - }); - } - - onClicked: { - tasksModel.requestAddLauncher(get(atm.LauncherUrl)); - } - } - - PlasmaComponents.MenuItem { - id: showLauncherInActivitiesItem - - text: i18n("&Pin to Task Manager") - icon: "window-pin" - - visible: visualParent - && get(atm.IsStartup) !== true - && plasmoid.immutability !== PlasmaCore.Types.SystemImmutable - && (activityInfo.numberOfRunningActivities >= 2) - - Connections { - target: activityInfo - function onNumberOfRunningActivitiesChanged() { - activitiesDesktopsMenu.refresh() - } - } - - PlasmaComponents.ContextMenu { - id: activitiesLaunchersMenu - visualParent: showLauncherInActivitiesItem.action - - function refresh() { - clearMenuItems(); - - if (menu.visualParent === null) return; - - var createNewItem = function(id, title, url, activities) { - var result = menu.newMenuItem(activitiesLaunchersMenu); - result.text = title; - - result.visible = true; - result.checkable = true; - - result.checked = activities.some(function(activity) { return activity === id }); - - result.clicked.connect( - function() { - if (result.checked) { - tasksModel.requestAddLauncherToActivity(url, id); - } else { - tasksModel.requestRemoveLauncherFromActivity(url, id); - } - } - ); - - return result; - } - - if (menu.visualParent === null) return; - - var url = menu.get(atm.LauncherUrlWithoutIcon); - - var activities = tasksModel.launcherActivities(url); - - createNewItem(activityInfo.nullUuid, i18n("On All Activities"), url, activities); - - if (activityInfo.numberOfRunningActivities <= 1) { - return; - } - - createNewItem(activityInfo.currentActivity, i18n("On The Current Activity"), url, activities); - - menu.newSeparator(activitiesLaunchersMenu); - - var runningActivities = activityInfo.runningActivities(); - - runningActivities.forEach(function(id) { - createNewItem(id, activityInfo.activityName(id), url, activities); - }); - } - - Component.onCompleted: { - menu.onVisualParentChanged.connect(refresh); - refresh(); - } - } - } - - PlasmaComponents.MenuItem { - visible: (visualParent - && plasmoid.immutability !== PlasmaCore.Types.SystemImmutable - && !launcherToggleAction.visible - && activityInfo.numberOfRunningActivities < 2) - - text: i18n("Unpin from Task Manager") - icon: "window-unpin" - - onClicked: { - tasksModel.requestRemoveLauncher(get(atm.LauncherUrlWithoutIcon)); - } - } - - PlasmaComponents.MenuItem { - id: moreActionsMenuItem - - visible: (visualParent && get(atm.IsLauncher) !== true && get(atm.IsStartup) !== true) - - enabled: visible - - text: i18n("More") - icon: "view-more-symbolic" - - PlasmaComponents.ContextMenu { - visualParent: moreActionsMenuItem.action - - PlasmaComponents.MenuItem { - enabled: menu.visualParent && menu.get(atm.IsMovable) === true - - text: i18n("&Move") - icon: "transform-move" - - onClicked: tasksModel.requestMove(menu.modelIndex) - } - - PlasmaComponents.MenuItem { - enabled: menu.visualParent && menu.get(atm.IsResizable) === true - - text: i18n("Re&size") - icon: "transform-scale" - - onClicked: tasksModel.requestResize(menu.modelIndex) - } - - PlasmaComponents.MenuItem { - visible: (menu.visualParent && get(atm.IsLauncher) !== true && get(atm.IsStartup) !== true) - - enabled: menu.visualParent && get(atm.IsMaximizable) === true - - checkable: true - checked: menu.visualParent && get(atm.IsMaximized) === true - - text: i18n("Ma&ximize") - icon: "window-maximize" - - onClicked: tasksModel.requestToggleMaximized(modelIndex) - } - - PlasmaComponents.MenuItem { - visible: (menu.visualParent && get(atm.IsLauncher) !== true && get(atm.IsStartup) !== true) - - enabled: menu.visualParent && get(atm.IsMinimizable) === true - - checkable: true - checked: menu.visualParent && get(atm.IsMinimized) === true - - text: i18n("Mi&nimize") - icon: "window-minimize" - - onClicked: tasksModel.requestToggleMinimized(modelIndex) - } - - PlasmaComponents.MenuItem { - checkable: true - checked: menu.visualParent && menu.get(atm.IsKeepAbove) === true - - text: i18n("Keep &Above Others") - icon: "window-keep-above" - - onClicked: tasksModel.requestToggleKeepAbove(menu.modelIndex) - } - - PlasmaComponents.MenuItem { - checkable: true - checked: menu.visualParent && menu.get(atm.IsKeepBelow) === true - - text: i18n("Keep &Below Others") - icon: "window-keep-below" - - onClicked: tasksModel.requestToggleKeepBelow(menu.modelIndex) - } - - PlasmaComponents.MenuItem { - enabled: menu.visualParent && menu.get(atm.IsFullScreenable) === true - - checkable: true - checked: menu.visualParent && menu.get(atm.IsFullScreen) === true - - text: i18n("&Fullscreen") - icon: "view-fullscreen" - - onClicked: tasksModel.requestToggleFullScreen(menu.modelIndex) - } - - PlasmaComponents.MenuItem { - enabled: menu.visualParent && menu.get(atm.IsShadeable) === true - - checkable: true - checked: menu.visualParent && menu.get(atm.IsShaded) === true - - text: i18n("&Shade") - icon: "window-shade" - - onClicked: tasksModel.requestToggleShaded(menu.modelIndex) - } - - PlasmaComponents.MenuItem { - separator: true - } - - PlasmaComponents.MenuItem { - visible: (plasmoid.configuration.groupingStrategy !== 0) && menu.get(atm.IsWindow) === true - - checkable: true - checked: menu.visualParent && menu.get(atm.IsGroupable) === true - - text: i18n("Allow this program to be grouped") - icon: "view-group" - - onClicked: tasksModel.requestToggleGrouping(menu.modelIndex) - } - - PlasmaComponents.MenuItem { - separator: true - } - - PlasmaComponents.MenuItem { - property QtObject configureAction: null - - enabled: configureAction && configureAction.enabled - visible: configureAction && configureAction.visible - - text: configureAction ? configureAction.text : "" - icon: configureAction ? configureAction.icon : "" - - onClicked: configureAction.trigger() - - Component.onCompleted: configureAction = plasmoid.action("configure") - } - - PlasmaComponents.MenuItem { - property QtObject alternativesAction: null - - enabled: alternativesAction && alternativesAction.enabled - visible: alternativesAction && alternativesAction.visible - - text: alternativesAction ? alternativesAction.text : "" - icon: alternativesAction ? alternativesAction.icon : "" - - onClicked: alternativesAction.trigger() - - Component.onCompleted: alternativesAction = plasmoid.action("alternatives") - } - } - } - - PlasmaComponents.MenuItem { separator: true } - - PlasmaComponents.MenuItem { - id: closeWindowItem - visible: (visualParent && get(atm.IsLauncher) !== true && get(atm.IsStartup) !== true) - - enabled: visualParent && get(atm.IsClosable) === true - - text: i18n("&Close") - icon: "window-close" - - onClicked: tasksModel.requestClose(modelIndex) - } -} diff --git a/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/Task.qml b/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/Task.qml index 6d08a16..7d91674 100755 --- a/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/Task.qml +++ b/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/Task.qml @@ -58,6 +58,7 @@ MouseArea { property real taskHeight: 0 property string previousState: "" property bool rightClickDragging: false + property bool toolTipOpen: false property Item audioStreamOverlay property var audioStreams: [] @@ -153,6 +154,7 @@ MouseArea { } hoverEnabled = true; taskList.updateHoverFunc(); + toolTipArea.tooltipClicked = true; } onContainsMouseChanged: { @@ -176,6 +178,7 @@ MouseArea { hoverEnabled = true; updateMousePosition(ma.mouseX); + toolTipArea.tooltipClicked = true; } @@ -226,8 +229,11 @@ MouseArea { if (plasmoid.configuration.showToolTips && toolTipArea.active) { hideToolTipTemporarily(); } + /*if(childCount >= 2 && plasmoid.configuration.showToolTips && toolTipArea.active) { + toolTipArea.tooltipClicked = !toolTipArea.tooltipClicked; + }*/ TaskTools.activateTask(modelIndex(), model, mouse.modifiers, task); - + } else if (mouse.button === Qt.BackButton || mouse.button === Qt.ForwardButton) { var sourceName = mpris2Source.sourceNameForLauncherUrl(model.LauncherUrlWithoutIcon, model.AppPid); if (sourceName) { @@ -452,7 +458,7 @@ MouseArea { opacity: 0.6 visible: childCount >= 3 ? true : false anchors.rightMargin: PlasmaCore.Units.smallSpacing - enabledBorders: Plasma.FrameSvg.EnabledBorders.RightBorder + enabledBorders: PlasmaCore.FrameSvg.RightBorder } @@ -711,8 +717,8 @@ MouseArea { PlasmaCore.ToolTipArea { id: toolTipArea z: -1 - //backgroundHints: "SolidBackground" - MouseArea { + + MouseArea { id: ma hoverEnabled: true propagateComposedEvents: true @@ -720,34 +726,32 @@ MouseArea { onPositionChanged: { task.updateMousePosition(ma.mouseX); task.positionChanged(mouse); - //var xtr = toolTipArea.backgroundHints(); - } onContainsMouseChanged: { - task.updateMousePosition(ma.mouseX); - //task.onContainsMouseChanged(); - //toolTipArea.onContainsMouseChanged(); - //mouse.accepted = false; } onPressed: mouse.accepted = false; onReleased: mouse.accepted = false; onWheel: wheel.accepted = false; - //onExited: { hoverGradient.horizontalOffset = 0; - //task.onExited(); - //} } anchors.fill: parent location: plasmoid.location - - active: !inPopup && !groupDialog.visible && plasmoid.configuration.showToolTips + property bool tooltipClicked: true + active: !inPopup && !groupDialog.visible && (plasmoid.configuration.showToolTips || tasks.toolTipOpenedByClick === toolTipArea) interactive: model.IsWindow === true mainItem: (model.IsWindow === true) ? openWindowToolTipDelegate : pinnedAppToolTipDelegate property alias mainToolTip: toolTipArea.mainItem + onToolTipVisibleChanged: { + task.toolTipOpen = toolTipVisible; + if(!toolTipVisible) { + tasks.toolTipOpenedByClick = null; + } else { + tasks.toolTipAreaItem = toolTipArea; + } + } onContainsMouseChanged: { - updateMousePosition(ma.mouseX); if (containsMouse) { mainItem.parentTask = task; @@ -802,6 +806,9 @@ MouseArea { mainItem.smartLauncherCount = Qt.binding(function() { return mainItem.smartLauncherCountVisible ? task.smartLauncherItem.count : 0; }); + tasks.toolTipAreaItem = toolTipArea; + } else { + tasks.toolTipOpenedByClick = null; } } } diff --git a/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/code/tools.js b/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/code/tools.js index e672436..5816e75 100755 --- a/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/code/tools.js +++ b/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/code/tools.js @@ -148,7 +148,11 @@ function activateTask(index, model, modifiers, task) { else if (plasmoid.configuration.showToolTips && plasmoid.configuration.groupedTaskVisualization === 1 ) { - task.showToolTip(); + if(tasks.toolTipOpenedByClick) tasks.toolTipOpenedByClick.hideImmediately(); + else { + tasks.toolTipOpenedByClick = task.toolTipAreaItem; + task.showToolTip(); + } } // Option 3: show Present Windows for all child tasks diff --git a/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/main.qml b/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/main.qml index 6ea6c6e..c8d3e4a 100755 --- a/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/main.qml +++ b/Plasma/Plasma_Widgets/User/seventasks_src/src/package/contents/ui/main.qml @@ -27,7 +27,8 @@ MouseArea { // This property tells the plasmoid to render labels next to task icons. // Previously, this property was determined by the value of (plasmoid.pluginName === "org.kde.plasma.icontasks") property bool iconsOnly: !plasmoid.configuration.labelVisible - + property var toolTipOpenedByClick: null + property var toolTipAreaItem: null //property QtObject contextMenuComponent: Qt.createComponent("ContextMenu.qml"); property QtObject tasksMenuComponent: Qt.createComponent("TasksMenu.qml"); property QtObject pulseAudioComponent: Qt.createComponent("PulseAudio.qml"); @@ -60,6 +61,7 @@ MouseArea { signal requestLayout signal windowsHovered(variant winIds, bool hovered) + signal activateWindowView(variant winIds) signal presentWindows(variant winIds) states: State { @@ -511,10 +513,12 @@ MouseArea { // With this, we can update each task icon pretty much globally. function updateHoverFunc() { for(var i = 0; i < taskRepeater.count; i++) { - taskRepeater.itemAt(i).updateHoverColor(); + if(taskRepeater.itemAt(i)) { + taskRepeater.itemAt(i).updateHoverColor(); + } } tasks.state = ""; - console.log("Updated hovers"); + //console.log("Updated hovers"); } Timer { @@ -604,7 +608,8 @@ MouseArea { tasks.requestLayout.connect(layoutTimer.restart); tasks.requestLayout.connect(iconGeometryTimer.restart); tasks.windowsHovered.connect(backend.windowsHovered); - tasks.presentWindows.connect(backend.presentWindows); + //tasks.presentWindows.connect(backend.presentWindows); + tasks.activateWindowView.connect(backend.activateWindowView); dragHelper.dropped.connect(resetDragSource); taskList.updateHoverFunc(); } diff --git a/README.md b/README.md index 36b743e..3a62ebe 100755 --- a/README.md +++ b/README.md @@ -86,6 +86,7 @@ Lastly, feel free to fork this project and/or contribute to it in any way. Any a + ### Clock diff --git a/Screenshots/Taskbar_3.png b/Screenshots/Taskbar_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6d70b6a25ae61e8aa0e45013ec4545e963306996 GIT binary patch literal 28646 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≺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 JPDHLkV1h*{^aTI_ literal 0 HcmV?d00001