/* SPDX-FileCopyrightText: 2014-2015 Eike Hein SPDX-License-Identifier: GPL-2.0-or-later */ import QtQuick import QtQuick.Layouts import org.kde.kirigami as Kirigami import org.kde.ksvg as KSvg import org.kde.plasma.components as PlasmaComponents3 import org.kde.plasma.core as PlasmaCore import org.kde.plasma.plasmoid import org.kde.plasma.private.kicker as Kicker PlasmoidItem { id: kicker anchors.fill: parent signal reset property bool isDash: Plasmoid.pluginName === "org.kde.plasma.kickerdash" switchWidth: isDash || !fullRepresentationItem ? 0 : fullRepresentationItem.Layout.minimumWidth switchHeight: isDash || !fullRepresentationItem ? 0 : fullRepresentationItem.Layout.minimumHeight // this is a bit of a hack to prevent Plasma from spawning a dialog on its own when we're Dash preferredRepresentation: isDash ? fullRepresentation : null compactRepresentation: isDash ? null : compactRepresentationComponent fullRepresentation: isDash ? compactRepresentationComponent : menuRepresentationComponent readonly property Component itemListDialogComponent: Component { ItemListDialog {} } property Item dragSource: null property QtObject globalFavorites: rootModel.favoritesModel property QtObject systemFavorites: rootModel.systemFavoritesModel Plasmoid.icon: Plasmoid.configuration.useCustomButtonImage ? Plasmoid.configuration.customButtonImage : Plasmoid.configuration.icon onSystemFavoritesChanged: { if (systemFavorites) { systemFavorites.favorites = Plasmoid.configuration.favoriteSystemActions; } } function action_menuedit() { processRunner.runMenuEditor(); } function updateSvgMetrics() { lineSvg.horLineHeight = lineSvg.elementSize("horizontal-line").height; lineSvg.vertLineWidth = lineSvg.elementSize("vertical-line").width; } Component { id: compactRepresentationComponent CompactRepresentation {} } Component { id: menuRepresentationComponent MenuRepresentation {} } Kicker.RootModel { id: rootModel autoPopulate: false appNameFormat: Plasmoid.configuration.appNameFormat flat: kicker.isDash || Plasmoid.configuration.limitDepth sorted: Plasmoid.configuration.alphaSort showSeparators: !kicker.isDash // TODO: appletInterface property now can be ported to "applet" and have the real Applet* assigned directly appletInterface: kicker showAllApps: kicker.isDash showAllAppsCategorized: true showTopLevelItems: !kicker.isDash showRecentApps: Plasmoid.configuration.showRecentApps showRecentDocs: Plasmoid.configuration.showRecentDocs recentOrdering: Plasmoid.configuration.recentOrdering onShowRecentAppsChanged: { Plasmoid.configuration.showRecentApps = showRecentApps; } onShowRecentDocsChanged: { Plasmoid.configuration.showRecentDocs = showRecentDocs; } onRecentOrderingChanged: { Plasmoid.configuration.recentOrdering = recentOrdering; } Component.onCompleted: { favoritesModel.initForClient("org.kde.plasma.kicker.favorites.instance-" + Plasmoid.id) if (!Plasmoid.configuration.favoritesPortedToKAstats) { if (favoritesModel.count < 1) { favoritesModel.portOldFavorites(Plasmoid.configuration.favoriteApps); } Plasmoid.configuration.favoritesPortedToKAstats = true; } } } Connections { target: globalFavorites function onFavoritesChanged() { Plasmoid.configuration.favoriteApps = target.favorites; } } Connections { target: systemFavorites function onFavoritesChanged() { Plasmoid.configuration.favoriteSystemActions = target.favorites; } } Connections { target: Plasmoid.configuration function onFavoriteAppsChanged() { globalFavorites.favorites = Plasmoid.configuration.favoriteApps; } function onFavoriteSystemActionsChanged() { systemFavorites.favorites = Plasmoid.configuration.favoriteSystemActions; } } Kicker.RunnerModel { id: runnerModel appletInterface: kicker favoritesModel: globalFavorites runners: { const results = ["krunner_services", "krunner_systemsettings", "krunner_sessions", "krunner_powerdevil", "calculator", "unitconverter"]; if (Plasmoid.configuration.useExtraRunners) { results.push(...Plasmoid.configuration.extraRunners); } return results; } } Kicker.DragHelper { id: dragHelper dragIconSize: Kirigami.Units.iconSizes.medium } Kicker.ProcessRunner { id: processRunner } Kicker.WindowSystem { id: windowSystem } KSvg.FrameSvgItem { id: highlightItemSvg visible: false imagePath: "widgets/viewitem" prefix: "hover" } KSvg.FrameSvgItem { id: listItemSvg visible: false imagePath: "widgets/listitem" prefix: "normal" } KSvg.Svg { id: lineSvg imagePath: "widgets/line" property int horLineHeight property int vertLineWidth } PlasmaComponents3.Label { id: toolTipDelegate width: contentWidth height: undefined property Item toolTip text: toolTip ? toolTip.text : "" textFormat: Text.PlainText } Timer { id: justOpenedTimer repeat: false interval: 600 } Connections { target: kicker function onExpandedChanged(expanded) { if (expanded) { windowSystem.monitorWindowVisibility(Plasmoid.fullRepresentationItem); justOpenedTimer.start(); } else { kicker.reset(); } } } function resetDragSource() { dragSource = null; } function enableHideOnWindowDeactivate() { kicker.hideOnWindowDeactivate = true; } Plasmoid.contextualActions: [ PlasmaCore.Action { text: i18n("Edit Applications…") icon.name: "kmenuedit" visible: Plasmoid.immutability !== PlasmaCore.Types.SystemImmutable onTriggered: processRunner.runMenuEditor() } ] Component.onCompleted: { if (Plasmoid.hasOwnProperty("activationTogglesExpanded")) { Plasmoid.activationTogglesExpanded = !kicker.isDash } windowSystem.focusIn.connect(enableHideOnWindowDeactivate); kicker.hideOnWindowDeactivate = true; updateSvgMetrics(); PlasmaCore.Theme.themeChanged.connect(updateSvgMetrics); rootModel.refreshed.connect(reset); dragHelper.dropped.connect(resetDragSource); } }