diff --git a/applets/CMakeLists.txt b/applets/CMakeLists.txt index ddc74f626..c4c5b43e2 100644 --- a/applets/CMakeLists.txt +++ b/applets/CMakeLists.txt @@ -1,14 +1,16 @@ add_subdirectory(kicker) add_subdirectory(kickoff) add_subdirectory(trash) add_subdirectory(taskmanager) plasma_install_package(window-list org.kde.plasma.windowlist) plasma_install_package(icontasks org.kde.plasma.icontasks) if(KF5Activities_FOUND) add_subdirectory(pager) add_subdirectory(showActivityManager) endif() +add_subdirectory(minimizeall) +add_subdirectory(showdesktop) add_subdirectory(kimpanel) diff --git a/applets/kicker/package/contents/config/config.qml b/applets/kicker/package/contents/config/config.qml index 51d62c03a..09ac30ad2 100644 --- a/applets/kicker/package/contents/config/config.qml +++ b/applets/kicker/package/contents/config/config.qml @@ -1,30 +1,30 @@ /*************************************************************************** * Copyright (C) 2014 by Eike Hein * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * ***************************************************************************/ import QtQuick 2.0 import org.kde.plasma.configuration 2.0 ConfigModel { ConfigCategory { name: i18n("General") - icon: "kde" + icon: "preferences-desktop-plasma" source: "ConfigGeneral.qml" } } diff --git a/applets/kicker/package/contents/ui/ConfigGeneral.qml b/applets/kicker/package/contents/ui/ConfigGeneral.qml index c0e13d4f3..514e5a6dc 100644 --- a/applets/kicker/package/contents/ui/ConfigGeneral.qml +++ b/applets/kicker/package/contents/ui/ConfigGeneral.qml @@ -1,275 +1,243 @@ /*************************************************************************** * Copyright (C) 2014 by Eike Hein * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.0 -import QtQuick.Dialogs 1.2 -import QtQuick.Layouts 1.0 +import QtQuick 2.5 +import QtQuick.Controls 2.5 import org.kde.plasma.core 2.0 as PlasmaCore -import org.kde.plasma.components 2.0 as PlasmaComponents - import org.kde.kquickcontrolsaddons 2.0 as KQuickAddons import org.kde.draganddrop 2.0 as DragDrop +import org.kde.kirigami 2.5 as Kirigami import org.kde.plasma.private.kicker 0.1 as Kicker -Item { +Kirigami.FormLayout { id: configGeneral - width: childrenRect.width - height: childrenRect.height + anchors.left: parent.left + anchors.right: parent.right property bool isDash: (plasmoid.pluginName === "org.kde.plasma.kickerdash") property string cfg_icon: plasmoid.configuration.icon property bool cfg_useCustomButtonImage: plasmoid.configuration.useCustomButtonImage property string cfg_customButtonImage: plasmoid.configuration.customButtonImage property alias cfg_appNameFormat: appNameFormat.currentIndex property alias cfg_limitDepth: limitDepth.checked property alias cfg_alphaSort: alphaSort.checked property alias cfg_recentOrdering: recentOrdering.currentIndex property alias cfg_showRecentApps: showRecentApps.checked property alias cfg_showRecentDocs: showRecentDocs.checked property alias cfg_showRecentContacts: showRecentContacts.checked property alias cfg_useExtraRunners: useExtraRunners.checked property alias cfg_alignResultsToBottom: alignResultsToBottom.checked - ColumnLayout { - anchors.left: parent.left - RowLayout { - spacing: units.smallSpacing + Button { + id: iconButton - Label { - text: i18n("Icon:") - } + Kirigami.FormData.label: i18n("Icon:") - Button { - id: iconButton - Layout.minimumWidth: previewFrame.width + units.smallSpacing * 2 - Layout.maximumWidth: Layout.minimumWidth - Layout.minimumHeight: previewFrame.height + units.smallSpacing * 2 - Layout.maximumHeight: Layout.minimumWidth - - DragDrop.DropArea { - id: dropArea - - property bool containsAcceptableDrag: false - - anchors.fill: parent - - onDragEnter: { - // Cannot use string operations (e.g. indexOf()) on "url" basic type. - var urlString = event.mimeData.url.toString(); - - // This list is also hardcoded in KIconDialog. - var extensions = [".png", ".xpm", ".svg", ".svgz"]; - containsAcceptableDrag = urlString.indexOf("file:///") === 0 && extensions.some(function (extension) { - return urlString.indexOf(extension) === urlString.length - extension.length; // "endsWith" - }); - - if (!containsAcceptableDrag) { - event.ignore(); - } - } - onDragLeave: containsAcceptableDrag = false - - onDrop: { - if (containsAcceptableDrag) { - // Strip file:// prefix, we already verified in onDragEnter that we have only local URLs. - iconDialog.setCustomButtonImage(event.mimeData.url.toString().substr("file://".length)); - } - containsAcceptableDrag = false; - } - } + implicitWidth: previewFrame.width + units.smallSpacing * 2 + implicitHeight: previewFrame.height + units.smallSpacing * 2 - KQuickAddons.IconDialog { - id: iconDialog + // Just to provide some visual feedback when dragging; + // cannot have checked without checkable enabled + checkable: true + checked: dropArea.containsAcceptableDrag - function setCustomButtonImage(image) { - cfg_customButtonImage = image || cfg_icon || "start-here-kde" - cfg_useCustomButtonImage = true; - } + onPressed: iconMenu.opened ? iconMenu.close() : iconMenu.open() - onIconNameChanged: setCustomButtonImage(iconName); - } + DragDrop.DropArea { + id: dropArea - // just to provide some visual feedback, cannot have checked without checkable enabled - checkable: true - checked: dropArea.containsAcceptableDrag - onClicked: { - checked = Qt.binding(function() { // never actually allow it being checked - return iconMenu.status === PlasmaComponents.DialogStatus.Open || dropArea.containsAcceptableDrag; - }) + property bool containsAcceptableDrag: false - iconMenu.open(0, height) - } + anchors.fill: parent - PlasmaCore.FrameSvgItem { - id: previewFrame - anchors.centerIn: parent - imagePath: plasmoid.location === PlasmaCore.Types.Vertical || plasmoid.location === PlasmaCore.Types.Horizontal - ? "widgets/panel-background" : "widgets/background" - width: units.iconSizes.large + fixedMargins.left + fixedMargins.right - height: units.iconSizes.large + fixedMargins.top + fixedMargins.bottom - - PlasmaCore.IconItem { - anchors.centerIn: parent - width: units.iconSizes.large - height: width - source: cfg_useCustomButtonImage ? cfg_customButtonImage : cfg_icon - } - } - } + onDragEnter: { + // Cannot use string operations (e.g. indexOf()) on "url" basic type. + var urlString = event.mimeData.url.toString(); - // QQC Menu can only be opened at cursor position, not a random one - PlasmaComponents.ContextMenu { - id: iconMenu - visualParent: iconButton + // This list is also hardcoded in KIconDialog. + var extensions = [".png", ".xpm", ".svg", ".svgz"]; + containsAcceptableDrag = urlString.indexOf("file:///") === 0 && extensions.some(function (extension) { + return urlString.indexOf(extension) === urlString.length - extension.length; // "endsWith" + }); - PlasmaComponents.MenuItem { - text: i18nc("@item:inmenu Open icon chooser dialog", "Choose...") - icon: "document-open-folder" - onClicked: iconDialog.open() + if (!containsAcceptableDrag) { + event.ignore(); } - PlasmaComponents.MenuItem { - text: i18nc("@item:inmenu Reset icon to default", "Clear Icon") - icon: "edit-clear" - onClicked: { - cfg_useCustomButtonImage = false; - } + } + onDragLeave: containsAcceptableDrag = false + + onDrop: { + if (containsAcceptableDrag) { + // Strip file:// prefix, we already verified in onDragEnter that we have only local URLs. + iconDialog.setCustomButtonImage(event.mimeData.url.toString().substr("file://".length)); } + containsAcceptableDrag = false; } } - GroupBox { - Layout.fillWidth: true + KQuickAddons.IconDialog { + id: iconDialog - title: i18n("Behavior") + function setCustomButtonImage(image) { + cfg_customButtonImage = image || cfg_icon || "start-here-kde" + cfg_useCustomButtonImage = true; + } - flat: true + onIconNameChanged: setCustomButtonImage(iconName); + } - ColumnLayout { - RowLayout { - Label { - text: i18n("Show applications as:") - } + PlasmaCore.FrameSvgItem { + id: previewFrame + anchors.centerIn: parent + imagePath: plasmoid.location === PlasmaCore.Types.Vertical || plasmoid.location === PlasmaCore.Types.Horizontal + ? "widgets/panel-background" : "widgets/background" + width: units.iconSizes.large + fixedMargins.left + fixedMargins.right + height: units.iconSizes.large + fixedMargins.top + fixedMargins.bottom + + PlasmaCore.IconItem { + anchors.centerIn: parent + width: units.iconSizes.large + height: width + source: cfg_useCustomButtonImage ? cfg_customButtonImage : cfg_icon + } + } + + Menu { + id: iconMenu - ComboBox { - id: appNameFormat + // Appear below the button + y: +parent.height - Layout.fillWidth: true + onClosed: iconButton.checked = false; - model: [i18n("Name only"), i18n("Description only"), i18n("Name (Description)"), i18n("Description (Name)")] - } + MenuItem { + text: i18nc("@item:inmenu Open icon chooser dialog", "Choose...") + icon.name: "document-open-folder" + onClicked: iconDialog.open() + } + MenuItem { + text: i18nc("@item:inmenu Reset icon to default", "Clear Icon") + icon.name: "edit-clear" + onClicked: { + cfg_icon = "start-here-kde" + cfg_useCustomButtonImage = false } + } + } + } - CheckBox { - id: limitDepth - visible: !isDash + Item { + Kirigami.FormData.isSection: true + } - text: i18n("Flatten menu to a single level") - } + ComboBox { + id: appNameFormat - CheckBox { - id: alphaSort + Kirigami.FormData.label: i18n("Show applications as:") - text: i18n("Sort alphabetically") - } - } - } + model: [i18n("Name only"), i18n("Description only"), i18n("Name (Description)"), i18n("Description (Name)")] + } - GroupBox { - Layout.fillWidth: true + Item { + Kirigami.FormData.isSection: true + } - title: i18n("Categories") + CheckBox { + id: alphaSort - flat: true + Kirigami.FormData.label: i18n("Behavior:") - ColumnLayout { - RowLayout { - Label { - text: i18n("Show:") - } + text: i18n("Sort applications alphabetically") + } - ComboBox { - id: recentOrdering + CheckBox { + id: limitDepth - Layout.fillWidth: true + visible: !isDash - model: [i18n("Recently used"), i18n("Often used")] - } - } + text: i18n("Flatten sub-menus to a single level") + } - CheckBox { - id: showRecentApps - text: recentOrdering.currentIndex == 0 - ? i18n("Show recent applications") - : i18n("Show often used applications") - } + Item { + Kirigami.FormData.isSection: true + } - CheckBox { - id: showRecentDocs + CheckBox { + id: showRecentApps - text: recentOrdering.currentIndex == 0 - ? i18n("Show recent documents") - : i18n("Show often used documents") - } + Kirigami.FormData.label: i18n("Show categories:") - CheckBox { - id: showRecentContacts + text: recentOrdering.currentIndex == 0 + ? i18n("Recent applications") + : i18n("Often used applications") + } - text: recentOrdering.currentIndex == 0 - ? i18n("Show recent contacts") - : i18n("Show often used contacts") - } - } - } + CheckBox { + id: showRecentDocs - GroupBox { - Layout.fillWidth: true + text: recentOrdering.currentIndex == 0 + ? i18n("Recent documents") + : i18n("Often used documents") + } - title: i18n("Search") + CheckBox { + id: showRecentContacts - flat: true + text: recentOrdering.currentIndex == 0 + ? i18n("Recent contacts") + : i18n("Often used contacts") + } - ColumnLayout { - CheckBox { - id: useExtraRunners + ComboBox { + id: recentOrdering - text: i18n("Expand search to bookmarks, files and emails") - } + Kirigami.FormData.label: i18n("Sort items in categories by:") + model: [i18nc("@item:inlistbox Sort items in categories by [Recently used | Often used]", "Recently used"), i18nc("@item:inlistbox Sort items in categories by [Recently used | Ofetn used]", "Often used")] + } - CheckBox { - id: alignResultsToBottom + Item { + Kirigami.FormData.isSection: true + } - visible: !isDash + CheckBox { + id: useExtraRunners - text: i18n("Align search results to bottom") - } - } - } + Kirigami.FormData.label: i18n("Search:") + + text: i18n("Expand search to bookmarks, files and emails") + } + + CheckBox { + id: alignResultsToBottom + + visible: !isDash + + text: i18n("Align search results to bottom") } } diff --git a/applets/kickoff/package/contents/config/config.qml b/applets/kickoff/package/contents/config/config.qml index 71594a05e..b50b4b0d9 100644 --- a/applets/kickoff/package/contents/config/config.qml +++ b/applets/kickoff/package/contents/config/config.qml @@ -1,29 +1,29 @@ /* * Copyright 2013 Marco Martin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. */ import QtQuick 2.0 import org.kde.plasma.configuration 2.0 ConfigModel { ConfigCategory { - name: i18n("Appearance") - icon: "preferences-desktop-color" + name: i18n("General") + icon: "preferences-desktop-plasma" source: "ConfigGeneral.qml" } } diff --git a/applets/kickoff/package/contents/ui/ConfigButtons.qml b/applets/kickoff/package/contents/ui/ConfigButtons.qml index 88a808f49..c4685abec 100644 --- a/applets/kickoff/package/contents/ui/ConfigButtons.qml +++ b/applets/kickoff/package/contents/ui/ConfigButtons.qml @@ -1,212 +1,224 @@ /* * Copyright 2016 John Salatas * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. */ -import QtQuick 2.0 -import QtQuick.Layouts 1.0 as Layouts -import QtQuick.Controls 1.0 as Controls +import QtQuick 2.5 import QtQml.Models 2.1 + import org.kde.plasma.core 2.0 as PlasmaCore +import org.kde.kirigami 2.5 as Kirigami GridView { id: configButtons - cellHeight: units.gridUnit * 5 + cellHeight: units.gridUnit * 6 + units.smallSpacing cellWidth: units.gridUnit * 6 width: cellWidth * 5 height: cellHeight * 2 property var items: { "bookmark": { icon: "bookmarks", text: i18n("Favorites")}, "application": { icon: "applications-other", text: i18n("Applications")}, "computer": { icon: "pm", text: i18n("Computer")}, "used": { icon: "view-history", text: i18n("History")}, "oftenUsed": { icon: "office-chart-pie", text: i18n("Often Used")}, "leave": { icon: "system-log-out", text: i18n("Leave")} } property var menuItems property var previousCell: [-1, -1] property alias listModel: visualModel.model property int sourceIndex: -1 Component.onCompleted: { menuItems = plasmoid.configuration.menuItems; resetModel(); } function updateModel() { var enabledItems = []; var disabledItems = []; for(var i = 0; i < menuItems.length; i++) { var confItemName = menuItems[i].substring(0, menuItems[i].indexOf(":")); var confItemEnabled = menuItems[i].substring(menuItems[i].length-1) === "t"; var listItem = items[confItemName]; listItem['name'] = confItemName; listItem['enabled'] = confItemEnabled; if(confItemEnabled) { enabledItems.push(listItem); } else { disabledItems.push(listItem); } } fillEmpty(enabledItems); fillEmpty(disabledItems); return enabledItems.concat(disabledItems); } function fillEmpty(list) { var emptyItem = { icon: undefined, text: undefined, name: 'empty', enabled: undefined}; var itemsToAdd = 5 - list.length; for(var j = 0; j < itemsToAdd; j++) { list.push(emptyItem); } } function updateConfiguration() { menuItems = []; for(var i = 0; i < visualModel.items.count; i++) { var itemName = visualModel.items.get(i).model['name']; if(itemName !== 'empty') { var configItem = itemName +":" +(i<5?"t":"f"); menuItems.push(configItem); } } resetModel(); } function resetModel() { listModel.clear(); var items = updateModel(); for(var i = 0; i< items.length; i++) { listModel.append(items[i]); } } displaced: Transition { NumberAnimation { properties: "x,y"; easing.type: Easing.OutQuad } } PlasmaCore.DataSource { id: pmSource engine: "powermanagement" connectedSources: ["PowerDevil"] } model: DelegateModel { id: visualModel model: ListModel { id: listModel } delegate: MouseArea { id: delegateRoot width: units.gridUnit * 6 height: units.gridUnit * 5 property int visualIndex: DelegateModel.itemsIndex drag.target: button onReleased: { button.Drag.drop() } KickoffConfigurationButton { id: button icon: model.icon === "pm" ? (pmSource.data["PowerDevil"] && pmSource.data["PowerDevil"]["Is Lid Present"] ? "computer-laptop" : "computer") : model.icon text: model.text || "" name: model.name anchors { horizontalCenter: parent.horizontalCenter; verticalCenter: parent.verticalCenter } Drag.active: delegateRoot.drag.active && name != 'empty' Drag.source: delegateRoot Drag.hotSpot.x: 36 Drag.hotSpot.y: 36 onStateChanged: { if(!Drag.active && sourceIndex != -1) { sourceIndex = -1; updateConfiguration(); } } states: [ State { when: button.Drag.active ParentChange { target: button; parent: root; } AnchorChanges { target: button; anchors.horizontalCenter: undefined; anchors.verticalCenter: undefined; } } ] } DropArea { anchors { fill: parent; margins: 15 } onEntered: { var source = drag.source.visualIndex; var target = delegateRoot.visualIndex; sourceIndex = drag.source.visualIndex; if(!(previousCell[0] === source && previousCell[1] === target)) { previousCell = [source, target]; if(source < 5 && target >= 5) { visualModel.items.move(source, target); visualModel.items.move(target === 9 ? 8 : 9, 4); } else if (source >= 5 && target < 5) { visualModel.items.move(source, target); visualModel.items.move(5, 9); } else { visualModel.items.move(source, target); } } } onDropped: { var targetIndex = drag.source.visualIndex; updateConfiguration(); sourceIndex = -1; previousCell = [-1, -1]; } } } } + + Kirigami.Heading { + level: 2 + text: i18n("Active Tabs") + anchors.bottom: configButtons.top + } + + Kirigami.Heading { + level: 2 + text: i18n("Inactive Tabs") + anchors.bottom: configButtons.verticalCenter + } } diff --git a/applets/kickoff/package/contents/ui/ConfigGeneral.qml b/applets/kickoff/package/contents/ui/ConfigGeneral.qml index 44790740d..e643f4709 100644 --- a/applets/kickoff/package/contents/ui/ConfigGeneral.qml +++ b/applets/kickoff/package/contents/ui/ConfigGeneral.qml @@ -1,168 +1,129 @@ /* * Copyright 2013 David Edmundson * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. */ -import QtQuick 2.0 +import QtQuick 2.5 import QtQuick.Layouts 1.1 -import QtQuick.Controls 1.0 as QtControls +import QtQuick.Controls 2.5 import org.kde.plasma.core 2.0 as PlasmaCore -import org.kde.plasma.components 2.0 as PlasmaComponents - import org.kde.kquickcontrolsaddons 2.0 as KQuickAddons - -import org.kde.plasma.extras 2.0 as PlasmaExtras +import org.kde.kirigami 2.5 as Kirigami ColumnLayout { + property string cfg_icon: plasmoid.configuration.icon property alias cfg_switchTabsOnHover: switchTabsOnHoverCheckbox.checked property alias cfg_showAppsByName: showApplicationsByNameCheckbox.checked property alias cfg_useExtraRunners: useExtraRunners.checked property alias cfg_alphaSort: alphaSort.checked property alias cfg_menuItems: configButtons.menuItems - spacing: units.smallSpacing + Kirigami.FormLayout { - RowLayout { - spacing: units.smallSpacing + Button { + id: iconButton - QtControls.Label { - text: i18n("Icon:") - } + Kirigami.FormData.label: i18n("Icon:") - QtControls.Button { - id: iconButton - Layout.minimumWidth: previewFrame.width + units.smallSpacing * 2 - Layout.maximumWidth: Layout.minimumWidth - Layout.minimumHeight: previewFrame.height + units.smallSpacing * 2 - Layout.maximumHeight: Layout.minimumWidth + implicitWidth: previewFrame.width + units.smallSpacing * 2 + implicitHeight: previewFrame.height + units.smallSpacing * 2 KQuickAddons.IconDialog { id: iconDialog - onIconNameChanged: cfg_icon = iconName || "start-here-kde" // TODO use actual default + onIconNameChanged: cfg_icon = iconName || "start-here-kde" } - // just to provide some visual feedback, cannot have checked without checkable enabled - checkable: true - onClicked: { - checked = Qt.binding(function() { // never actually allow it being checked - return iconMenu.status === PlasmaComponents.DialogStatus.Open - }) - - iconMenu.open(0, height) - } + onPressed: iconMenu.opened ? iconMenu.close() : iconMenu.open() PlasmaCore.FrameSvgItem { id: previewFrame anchors.centerIn: parent imagePath: plasmoid.location === PlasmaCore.Types.Vertical || plasmoid.location === PlasmaCore.Types.Horizontal ? "widgets/panel-background" : "widgets/background" width: units.iconSizes.large + fixedMargins.left + fixedMargins.right height: units.iconSizes.large + fixedMargins.top + fixedMargins.bottom PlasmaCore.IconItem { anchors.centerIn: parent width: units.iconSizes.large height: width source: cfg_icon } } - } - // QQC Menu can only be opened at cursor position, not a random one - PlasmaComponents.ContextMenu { - id: iconMenu - visualParent: iconButton + Menu { + id: iconMenu - PlasmaComponents.MenuItem { - text: i18nc("@item:inmenu Open icon chooser dialog", "Choose...") - icon: "document-open-folder" - onClicked: iconDialog.open() - } - PlasmaComponents.MenuItem { - text: i18nc("@item:inmenu Reset icon to default", "Clear Icon") - icon: "edit-clear" - onClicked: cfg_icon = "start-here-kde" // TODO reset to actual default + // Appear below the button + y: +parent.height + + MenuItem { + text: i18nc("@item:inmenu Open icon chooser dialog", "Choose...") + icon.name: "document-open-folder" + onClicked: iconDialog.open() + } + MenuItem { + text: i18nc("@item:inmenu Reset icon to default", "Clear Icon") + icon.name: "edit-clear" + onClicked: cfg_icon = "start-here-kde" + } } } - } - - QtControls.CheckBox { - id: switchTabsOnHoverCheckbox - text: i18n("Switch tabs on hover") - } - QtControls.CheckBox { - id: showApplicationsByNameCheckbox - text: i18n("Show applications by name") - } + Item { + Kirigami.FormData.isSection: true + } - QtControls.CheckBox { - id: useExtraRunners - text: i18n("Expand search to bookmarks, files and emails") - } + CheckBox { + id: switchTabsOnHoverCheckbox - QtControls.CheckBox { - id: alphaSort - text: i18n("Sort alphabetically") - } + Kirigami.FormData.label: i18n("General:") - Item { - width: height - height: units.gridUnit / 2 - } + text: i18n("Switch tabs on hover") + } - SystemPalette { - id: palette - } + CheckBox { + id: showApplicationsByNameCheckbox + text: i18n("Show applications by name") + } - PlasmaExtras.Heading { - level: 2 - text: i18n("Menu Buttons") - color: palette.text - } + CheckBox { + id: useExtraRunners + text: i18n("Expand search to bookmarks, files and emails") + } - Row { - spacing: units.gridUnit - Column { - QtControls.Label { - text: i18n("Visible Tabs") - height: configButtons.cellHeight - } - QtControls.Label { - text: i18n("Hidden Tabs") - height: configButtons.cellHeight - } + CheckBox { + id: alphaSort + text: i18n("Sort alphabetically") } - Column { - ConfigButtons { - id: configButtons - } + + Item { + Kirigami.FormData.isSection: true } } - QtControls.Label { + ConfigButtons { + id: configButtons + } + + Label { Layout.fillWidth: true text: i18n("Drag tabs between the boxes to show/hide them, or reorder the visible tabs by dragging.") wrapMode: Text.WordWrap } - - Item { - //spacer - Layout.fillHeight: true - } } diff --git a/applets/kickoff/package/contents/ui/FullRepresentation.qml b/applets/kickoff/package/contents/ui/FullRepresentation.qml index 6b393a159..8fefcd730 100644 --- a/applets/kickoff/package/contents/ui/FullRepresentation.qml +++ b/applets/kickoff/package/contents/ui/FullRepresentation.qml @@ -1,820 +1,820 @@ /* Copyright (C) 2011 Martin Gräßlin Copyright (C) 2012 Gregor Taetzner Copyright (C) 2012 Marco Martin Copyright (C) 2013 2014 David Edmundson Copyright 2014 Sebastian Kügler This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ import QtQuick 2.3 import org.kde.plasma.plasmoid 2.0 import QtQuick.Layouts 1.1 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.kquickcontrolsaddons 2.0 import org.kde.plasma.private.kicker 0.1 as Kicker Item { id: root Layout.minimumWidth: units.gridUnit * 26 Layout.maximumWidth: Layout.minimumWidth Layout.minimumHeight: units.gridUnit * 34 Layout.maximumHeight: Layout.minimumHeight property string previousState property bool switchTabsOnHover: plasmoid.configuration.switchTabsOnHover property Item currentView: mainTabGroup.currentTab.decrementCurrentIndex ? mainTabGroup.currentTab : mainTabGroup.currentTab.item property KickoffButton firstButton: null property var configMenuItems property QtObject globalFavorites: rootModelFavorites state: "Normal" onFocusChanged: { header.input.forceActiveFocus(); } function switchToInitial() { if (firstButton != null) { root.state = "Normal"; mainTabGroup.currentTab = firstButton.tab; tabBar.currentTab = firstButton; header.query = "" } } Kicker.DragHelper { id: dragHelper dragIconSize: units.iconSizes.medium onDropped: kickoff.dragSource = null } Kicker.AppsModel { id: rootModel autoPopulate: false appletInterface: plasmoid appNameFormat: plasmoid.configuration.showAppsByName ? 0 : 1 flat: false sorted: plasmoid.configuration.alphaSort showSeparators: false showTopLevelItems: true favoritesModel: Kicker.KAStatsFavoritesModel { id: rootModelFavorites favorites: plasmoid.configuration.favorites onFavoritesChanged: { plasmoid.configuration.favorites = favorites; } } Component.onCompleted: { favoritesModel.initForClient("org.kde.plasma.kickoff.favorites.instance-" + plasmoid.id) if (!plasmoid.configuration.favoritesPortedToKAstats) { favoritesModel.portOldFavorites(plasmoid.configuration.favorites); plasmoid.configuration.favoritesPortedToKAstats = true; } rootModel.refresh(); } } PlasmaCore.DataSource { id: pmSource engine: "powermanagement" connectedSources: ["PowerDevil"] } PlasmaCore.Svg { id: arrowsSvg imagePath: "widgets/arrows" size: "16x16" } Header { id: header } Rectangle { id: headerSeparator height: Math.floor(units.devicePixelRatio) color: Qt.tint(PlasmaCore.ColorScope.textColor, Qt.rgba(PlasmaCore.ColorScope.backgroundColor.r, PlasmaCore.ColorScope.backgroundColor.g, PlasmaCore.ColorScope.backgroundColor.b, 0.7)) opacity: 0.6 width: root.width - 2 * units.gridUnit anchors { top: header.top horizontalCenter: header.horizontalCenter } } Item { id: mainArea anchors.topMargin: mainTabGroup.state == "top" ? units.smallSpacing : 0 PlasmaComponents.TabGroup { id: mainTabGroup currentTab: favoritesPage anchors { fill: parent } //pages FavoritesView { id: favoritesPage } PlasmaExtras.ConditionalLoader { id: applicationsPage when: mainTabGroup.currentTab == applicationsPage source: Qt.resolvedUrl("ApplicationsView.qml") } PlasmaExtras.ConditionalLoader { id: systemPage when: mainTabGroup.currentTab == systemPage source: Qt.resolvedUrl("ComputerView.qml") } PlasmaExtras.ConditionalLoader { id: recentlyUsedPage when: mainTabGroup.currentTab == recentlyUsedPage source: Qt.resolvedUrl("RecentlyUsedView.qml") } PlasmaExtras.ConditionalLoader { id: oftenUsedPage when: mainTabGroup.currentTab == oftenUsedPage source: Qt.resolvedUrl("OftenUsedView.qml") } PlasmaExtras.ConditionalLoader { id: leavePage when: mainTabGroup.currentTab == leavePage source: Qt.resolvedUrl("LeaveView.qml") } PlasmaExtras.ConditionalLoader { id: searchPage when: root.state == "Search" //when: mainTabGroup.currentTab == searchPage || root.state == "Search" source: Qt.resolvedUrl("SearchView.qml") } state: { switch (plasmoid.location) { case PlasmaCore.Types.LeftEdge: return LayoutMirroring.enabled ? "right" : "left"; case PlasmaCore.Types.TopEdge: return "top"; case PlasmaCore.Types.RightEdge: return LayoutMirroring.enabled ? "left" : "right"; case PlasmaCore.Types.BottomEdge: default: return "bottom"; } } states: [ State { name: "left" AnchorChanges { target: header anchors { left: root.left top: undefined right: root.right bottom: root.bottom } } PropertyChanges { target: header width: header.implicitWidth } AnchorChanges { target: mainArea anchors { left: tabBar.right top: root.top right: root.right bottom: header.top } } AnchorChanges { target: tabBar anchors { left: root.left top: root.top right: undefined bottom: header.top } } PropertyChanges { target:tabBarSeparator width: Math.floor(units.devicePixelRatio) height: root.height } AnchorChanges { target: tabBarSeparator anchors { left: tabBar.right top: tabBar.top right: undefined bottom: tabBar.bottom } } }, State { name: "top" AnchorChanges { target: header anchors { left: root.left top: undefined right: root.right bottom: root.bottom } } PropertyChanges { target: header height: header.implicitHeight } AnchorChanges { target: mainArea anchors { left: root.left top: tabBar.bottom right: root.right bottom: header.top } } AnchorChanges { target: tabBar anchors { left: root.left top: root.top right: root.right bottom: undefined } } PropertyChanges { target:tabBarSeparator width: root.width height: Math.floor(units.devicePixelRatio) } AnchorChanges { target: tabBarSeparator anchors { left: root.left top: tabBar.bottom right: root.right bottom: undefined } } }, State { name: "right" AnchorChanges { target: header anchors { left: root.left top: undefined right: root.right bottom: root.bottom } } PropertyChanges { target: header width: header.implicitWidth } AnchorChanges { target: mainArea anchors { left: root.left top: root.top right: tabBar.left bottom: header.top } } AnchorChanges { target: tabBar anchors { left: undefined top: root.top right: root.right bottom: header.top } } PropertyChanges { target:tabBarSeparator width: Math.floor(units.devicePixelRatio) height: root.height } AnchorChanges { target: tabBarSeparator anchors { left: undefined top: tabBar.top right: tabBar.left bottom: tabBar.bottom } } }, State { name: "bottom" AnchorChanges { target: header anchors { left: root.left top: root.top right: root.right bottom: undefined } } PropertyChanges { target: header height: header.implicitHeight } AnchorChanges { target: headerSeparator anchors { top: undefined bottom: header.bottom horizontalCenter: header.horizontalCenter } } AnchorChanges { target: mainArea anchors { left: root.left top: header.bottom right: root.right bottom: tabBar.top } } AnchorChanges { target: tabBar anchors { left: root.left top: undefined right: root.right bottom: root.bottom } } PropertyChanges { target:tabBarSeparator width: root.width height: Math.floor(units.devicePixelRatio) } AnchorChanges { target: tabBarSeparator anchors { left: root.left top: undefined right: root.right bottom: tabBar.top } } } ] } // mainTabGroup } PlasmaComponents.TabBar { id: tabBar property int count: 5 // updated in createButtons() width: { if (opacity == 0) { return 0; } switch (plasmoid.location) { case PlasmaCore.Types.LeftEdge: case PlasmaCore.Types.RightEdge: return units.gridUnit * 5; default: return 0; } } height: { if (opacity == 0) { return 0; } switch (plasmoid.location) { case PlasmaCore.Types.LeftEdge: case PlasmaCore.Types.RightEdge: return 0; default: return units.gridUnit * 5; } } Behavior on width { NumberAnimation { duration: units.longDuration; easing.type: Easing.InQuad; } enabled: plasmoid.expanded } Behavior on height { NumberAnimation { duration: units.longDuration; easing.type: Easing.InQuad; } enabled: plasmoid.expanded } tabPosition: { switch (plasmoid.location) { case PlasmaCore.Types.TopEdge: return Qt.TopEdge; case PlasmaCore.Types.LeftEdge: return Qt.LeftEdge; case PlasmaCore.Types.RightEdge: return Qt.RightEdge; default: return Qt.BottomEdge; } } onCurrentTabChanged: header.input.forceActiveFocus(); Connections { target: plasmoid onExpandedChanged: { if(menuItemsChanged()) { createButtons(); } if (!expanded) { switchToInitial(); } } } } // tabBar Rectangle { id: tabBarSeparator - - width: root.width height: Math.floor(units.devicePixelRatio) color: Qt.tint(PlasmaCore.ColorScope.textColor, Qt.rgba(PlasmaCore.ColorScope.backgroundColor.r, PlasmaCore.ColorScope.backgroundColor.g, PlasmaCore.ColorScope.backgroundColor.b, 0.7)) opacity: 0.6 anchors { top: header.top left: root.left right: root.right + leftMargin: 4 + rightMargin: 4 } } MouseArea { anchors.fill: tabBar property var oldPos: null hoverEnabled: root.switchTabsOnHover onExited: { // Reset so we switch immediately when MouseArea is entered // freshly, e.g. from the panel. oldPos = null; clickTimer.stop(); } onPositionChanged: { var button = tabBar.layout.childAt(mouse.x, mouse.y); if (!button || button.objectName !== "KickoffButton") { clickTimer.stop(); return; } // Switch immediately when MouseArea was freshly entered, e.g. // from the panel. if (oldPos === null) { oldPos = Qt.point(mouse.x, mouse.y); clickTimer.stop(); button.clicked(); return; } var dx = (mouse.x - oldPos.x); var dy = (mouse.y - oldPos.y); // Check Manhattan length against drag distance to get a decent // pointer motion vector. if ((Math.abs(dx) + Math.abs(dy)) > Qt.styleHints.startDragDistance) { if (tabBar.currentTab !== button) { var tabBarPos = mapToItem(tabBar, oldPos.x, oldPos.y); oldPos = Qt.point(mouse.x, mouse.y); var angleMouseMove = Math.atan2(dy, dx) * 180 / Math.PI; var angleToCornerA = 0; var angleToCornerB = 0; switch (plasmoid.location) { case PlasmaCore.Types.TopEdge: { angleToCornerA = Math.atan2(tabBar.height - tabBarPos.y, 0 - tabBarPos.x); angleToCornerB = Math.atan2(tabBar.height - tabBarPos.y, tabBar.width - tabBarPos.x); break; } case PlasmaCore.Types.LeftEdge: { angleToCornerA = Math.atan2(0 - tabBarPos.y, tabBar.width - tabBarPos.x); angleToCornerB = Math.atan2(tabBar.height - tabBarPos.y, tabBar.width - tabBarPos.x); break; } case PlasmaCore.Types.RightEdge: { angleToCornerA = Math.atan2(0 - tabBarPos.y, 0 - tabBarPos.x); angleToCornerB = Math.atan2(tabBar.height - tabBarPos.y, 0 - tabBarPos.x); break; } // PlasmaCore.Types.BottomEdge default: { angleToCornerA = Math.atan2(0 - tabBarPos.y, 0 - tabBarPos.x); angleToCornerB = Math.atan2(0 - tabBarPos.y, tabBar.width - tabBarPos.x); } } // Degrees are nicer to debug than radians. angleToCornerA = angleToCornerA * 180 / Math.PI; angleToCornerB = angleToCornerB * 180 / Math.PI; var lower = Math.min(angleToCornerA, angleToCornerB); var upper = Math.max(angleToCornerA, angleToCornerB); // If the motion vector is outside the angle range from oldPos to the // relevant tab bar corners, switch immediately. Otherwise start the // timer, which gets aborted should the pointer exit the tab bar // early. var inRange = (lower < angleMouseMove == angleMouseMove < upper); // Mirror-flip. if (plasmoid.location === PlasmaCore.Types.RightEdge ? inRange : !inRange) { clickTimer.stop(); button.clicked(); return; } else { clickTimer.pendingButton = button; clickTimer.start(); } } else { oldPos = Qt.point(mouse.x, mouse.y); } } } onClicked: { clickTimer.stop(); var button = tabBar.layout.childAt(mouse.x, mouse.y); if (!button || button.objectName !== "KickoffButton") { return; } button.clicked(); } Timer { id: clickTimer property Item pendingButton: null interval: 250 onTriggered: { if (pendingButton) { pendingButton.clicked(); } } } } Keys.forwardTo: [tabBar.layout] Keys.onPressed: { if (mainTabGroup.currentTab == applicationsPage) { if (event.key !== Qt.Key_Tab) { root.state = "Applications"; } } switch(event.key) { case Qt.Key_Up: { currentView.decrementCurrentIndex(); event.accepted = true; break; } case Qt.Key_Down: { currentView.incrementCurrentIndex(); event.accepted = true; break; } case Qt.Key_Left: { if (header.input.focus && header.state == "query") { break; } if (!currentView.deactivateCurrentIndex()) { if (root.state == "Applications") { mainTabGroup.currentTab = firstButton.tab; tabBar.currentTab = firstButton; } root.state = "Normal" } event.accepted = true; break; } case Qt.Key_Right: { if (header.input.focus && header.state == "query") { break; } currentView.activateCurrentIndex(); event.accepted = true; break; } case Qt.Key_Tab: { root.state == "Applications" ? root.state = "Normal" : root.state = "Applications"; event.accepted = true; break; } case Qt.Key_Enter: case Qt.Key_Return: { currentView.activateCurrentIndex(1); event.accepted = true; break; } case Qt.Key_Escape: { if (header.state != "query") { plasmoid.expanded = false; } else { header.query = ""; } event.accepted = true; break; } case Qt.Key_Menu: { currentView.openContextMenu(); event.accepted = true; break; } default: if (!header.input.focus) { header.input.forceActiveFocus(); } } } states: [ State { name: "Normal" PropertyChanges { target: root Keys.forwardTo: [tabBar.layout] } PropertyChanges { target: tabBar //Set the opacity and NOT the visibility, as visibility is recursive //and this binding would be executed also on popup show/hide //as recommended by the docs: http://doc.qt.io/qt-5/qml-qtquick-item.html#visible-prop //plus, it triggers https://bugreports.qt.io/browse/QTBUG-66907 //in which a mousearea may think it's under the mouse while it isn't opacity: tabBar.count > 1 ? 1 : 0 } }, State { name: "Applications" PropertyChanges { target: root Keys.forwardTo: [root] } PropertyChanges { target: tabBar opacity: tabBar.count > 1 ? 1 : 0 } }, State { name: "Search" PropertyChanges { target: tabBar opacity: 0 } PropertyChanges { target: mainTabGroup currentTab: searchPage } PropertyChanges { target: root Keys.forwardTo: [root] } } ] // states function getButtonDefinition(name) { switch(name) { case "bookmark": return {id: "bookmarkButton", tab: favoritesPage, iconSource: "bookmarks", text: i18n("Favorites")}; case "application": return {id: "applicationButton", tab: applicationsPage, iconSource: "applications-other", text: i18n("Applications")}; case "computer": return {id: "computerButton", tab: systemPage, iconSource: pmSource.data["PowerDevil"] && pmSource.data["PowerDevil"]["Is Lid Present"] ? "computer-laptop" : "computer", text: i18n("Computer")}; case "used": return {id: "usedButton", tab: recentlyUsedPage, iconSource: "view-history", text: i18n("History")}; case "oftenUsed": return {id: "usedButton", tab: oftenUsedPage, iconSource: "office-chart-pie", text: i18n("Often Used")}; case "leave": return {id: "leaveButton", tab: leavePage, iconSource: "system-log-out", text: i18n("Leave")}; } } Component { id: kickoffButton KickoffButton {} } Component.onCompleted: { createButtons(); } function getEnabled(configuration) { var res = []; for(var i = 0; i < configuration.length; i++) { var confItemName = configuration[i].substring(0, configuration[i].indexOf(":")); var confItemEnabled = configuration[i].substring(configuration[i].length-1) === "t"; if(confItemEnabled) { res.push(confItemName); } } return res; } function createButtons() { configMenuItems = plasmoid.configuration.menuItems; var menuItems = getEnabled(plasmoid.configuration.menuItems); tabBar.count = menuItems.length // remove old menu items for(var i = tabBar.layout.children.length -1; i >= 0; i--) { if(tabBar.layout.children[i].objectName === "KickoffButton") { tabBar.layout.children[i].destroy(); } } for (var i = 0; i < menuItems.length; i++) { var props = getButtonDefinition(menuItems[i]); var button = kickoffButton.createObject(tabBar.layout, props); if(i === 0) { firstButton = button; switchToInitial(); } } } function menuItemsChanged() { if(configMenuItems.length !== plasmoid.configuration.menuItems.length) { return true; } for(var i = 0; i < configMenuItems.length; i++) { if(configMenuItems[i] !== plasmoid.configuration.menuItems[i]) { return true; } } return false; } } diff --git a/applets/minimizeall/CMakeLists.txt b/applets/minimizeall/CMakeLists.txt new file mode 100644 index 000000000..28c07fd46 --- /dev/null +++ b/applets/minimizeall/CMakeLists.txt @@ -0,0 +1,2 @@ + +plasma_install_package(package org.kde.plasma.minimizeall) diff --git a/applets/minimizeall/Messages.sh b/applets/minimizeall/Messages.sh new file mode 100644 index 000000000..8c3182818 --- /dev/null +++ b/applets/minimizeall/Messages.sh @@ -0,0 +1,2 @@ +#! /usr/bin/env bash +$XGETTEXT `find . -name \*.qml -o -name \*.cpp` -o $podir/plasma_applet_org.kde.plasma.minimizeall.pot diff --git a/applets/minimizeall/package/contents/config/main.xml b/applets/minimizeall/package/contents/config/main.xml new file mode 100644 index 000000000..12f34144e --- /dev/null +++ b/applets/minimizeall/package/contents/config/main.xml @@ -0,0 +1,13 @@ + + + + + + + user-desktop + + + diff --git a/applets/minimizeall/package/contents/ui/main.qml b/applets/minimizeall/package/contents/ui/main.qml new file mode 100644 index 000000000..17ac18bdd --- /dev/null +++ b/applets/minimizeall/package/contents/ui/main.qml @@ -0,0 +1,172 @@ +/* + * Copyright 2015 Sebastian Kügler + * Copyright 2016 Anthony Fieroni + * Copyright 2018 David Edmundson + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +import QtQuick 2.7 +import QtQuick.Layouts 1.1 + +import org.kde.plasma.plasmoid 2.0 +import org.kde.plasma.core 2.0 as PlasmaCore + +import org.kde.taskmanager 0.1 as TaskManager + +Item { + id: root + + readonly property bool inPanel: (plasmoid.location === PlasmaCore.Types.TopEdge + || plasmoid.location === PlasmaCore.Types.RightEdge + || plasmoid.location === PlasmaCore.Types.BottomEdge + || plasmoid.location === PlasmaCore.Types.LeftEdge) + + Layout.minimumWidth: units.gridUnit + Layout.minimumHeight: units.gridUnit + + Layout.maximumWidth: inPanel ? units.iconSizeHints.panel : -1 + Layout.maximumHeight: inPanel ? units.iconSizeHints.panel : -1 + + Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation + + Plasmoid.onActivated: toggleActive() + + property bool active: false + property var minimizedClients: [] //list of persistentmodelindexes from task manager model of clients minimised by us + + function activate() { + var clients = [] + for (var i = 0 ; i < tasksModel.count; i++) { + var idx = tasksModel.makeModelIndex(i); + if (!tasksModel.data(idx, TaskManager.AbstractTasksModel.IsMinimized)) { + tasksModel.requestToggleMinimized(idx); + clients.push(tasksModel.makePersistentModelIndex(i)); + } + } + root.minimizedClients = clients; + root.active = true; + } + + function deactivate() { + root.active = false; + for (var i = 0 ; i < root.minimizedClients.length; i++) { + var idx = root.minimizedClients[i] + //client deleted, do nothing + if (!idx.valid) { + continue; + } + //if the user has restored it already, do nothing + if (!tasksModel.data(idx, TaskManager.AbstractTasksModel.IsMinimized)) { + continue; + } + tasksModel.requestToggleMinimized(idx); + } + root.minimizedClients = []; + } + + function toggleActive() { + if (root.active) { + deactivate(); + } else { + activate(); + } + } + + TaskManager.TasksModel { + id: tasksModel + sortMode: TaskManager.TasksModel.SortDisabled + groupMode: TaskManager.TasksModel.GroupDisabled + } + + Connections { + target: tasksModel + enabled: root.active + + onActiveTaskChanged: { + if (tasksModel.activeTask.valid) { //to suppress changing focus to non windows, such as the desktop + root.active = false; + root.minimizedClients = []; + } + } + onVirtualDesktopChanged: deactivate() + onActivityChanged: deactivate() + } + + PlasmaCore.FrameSvgItem { + id: expandedItem + anchors.fill: parent + imagePath: "widgets/tabbar" + prefix: { + var prefix; + switch (plasmoid.location) { + case PlasmaCore.Types.LeftEdge: + prefix = "west-active-tab"; + break; + case PlasmaCore.Types.TopEdge: + prefix = "north-active-tab"; + break; + case PlasmaCore.Types.RightEdge: + prefix = "east-active-tab"; + break; + default: + prefix = "south-active-tab"; + } + if (!hasElementPrefix(prefix)) { + prefix = "active-tab"; + } + return prefix; + } + opacity: root.active ? 1 : 0 + Behavior on opacity { + NumberAnimation { + duration: units.shortDuration + easing.type: Easing.InOutQuad + } + } + } + + PlasmaCore.IconItem { + id:icon + source: plasmoid.configuration.icon + active: tooltip.containsMouse + anchors.fill: parent + } + + PlasmaCore.ToolTipArea { + id: tooltip + anchors.fill: parent + mainText : i18n("Minimize Windows") + subText : i18n("Show the desktop by minimizing all windows") + icon : plasmoid.configuration.icon + + MouseArea { + id: mouseArea + anchors.fill: parent + onClicked: root.toggleActive() + } + //also activate when dragging an item over the plasmoid so a user can easily drag data to the desktop + DropArea { + anchors.fill: parent + onEntered: activateTimer.start() + onExited: activateTimer.stop() + Timer { + id: activateTimer + interval: 250 //to match TaskManager + onTriggered: toggleActive() + } + } + } +} diff --git a/applets/minimizeall/package/metadata.desktop b/applets/minimizeall/package/metadata.desktop new file mode 100644 index 000000000..5548dbeeb --- /dev/null +++ b/applets/minimizeall/package/metadata.desktop @@ -0,0 +1,41 @@ +[Desktop Entry] +Name=Minimize all Windows +Name[ca]=Minimitza totes les finestres +Name[ca@valencia]=Minimitza totes les finestres +Name[en_GB]=Minimise all Windows +Name[es]=Minimizar todas las ventanas +Name[fr]=Minimiser toutes les fenêtres +Name[nl]=Alle vensters minimaliseren +Name[pt]=Minimizar Todas as Janelas +Name[sv]=Minimera alla fönster +Name[uk]=Мінімізувати усі вікна +Name[x-test]=xxMinimize all Windowsxx +Name[zh_TW]=最小化所有視窗 +Comment=Shows the desktop by minimizing all windows +Comment[ca]=Mostra l'escriptori minimitzant totes les finestres +Comment[ca@valencia]=Mostra l'escriptori minimitzant totes les finestres +Comment[en_GB]=Shows the desktop by minimising all windows +Comment[es]=Muestra el escritorio minimizando todas las ventanas +Comment[fr]=Afficher le bureau en minimisant toutes les fenêtres +Comment[nl]=Toont het bureaublad door alle vensters te minimaliseren +Comment[pt]=Mostra o ecrã, minimizando todas as janelas +Comment[sv]=Visar skrivbordet genom att minimera alla fönster +Comment[uk]=Показати стільницю, мінімізувавши усі вікна +Comment[x-test]=xxShows the desktop by minimizing all windowsxx +Comment[zh_TW]=藉由最小化所有視窗顯示桌面 +Icon=user-desktop + +Type=Service +X-KDE-ServiceTypes=Plasma/Applet +X-KDE-PluginInfo-Author=Sebastian Kügler +X-KDE-PluginInfo-Email=sebas@kde.org +X-KDE-PluginInfo-Name=org.kde.plasma.minimizeall +X-KDE-PluginInfo-Version=1.0 +X-KDE-PluginInfo-Website=http://plasma.kde.org/ +X-KDE-PluginInfo-Category=Windows and Tasks +X-KDE-PluginInfo-Depends= +X-KDE-PluginInfo-License=GPL-2.0+ +X-KDE-PluginInfo-EnabledByDefault=true +X-Plasma-MainScript=ui/main.qml +X-Plasma-Provides=org.kde.plasma.windowmanagement +X-Plasma-API=declarativeappletscript diff --git a/applets/pager/package/contents/config/config.qml b/applets/pager/package/contents/config/config.qml index edf43ea81..4bc1f7707 100644 --- a/applets/pager/package/contents/config/config.qml +++ b/applets/pager/package/contents/config/config.qml @@ -1,29 +1,29 @@ /* * Copyright 2013 Marco Martin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. */ import QtQuick 2.0 import org.kde.plasma.configuration 2.0 ConfigModel { ConfigCategory { name: i18n("General") - icon: "user-desktop" + icon: "preferences-desktop-plasma" source: "configGeneral.qml" } } diff --git a/applets/pager/package/contents/ui/configGeneral.qml b/applets/pager/package/contents/ui/configGeneral.qml index ff6622c85..15fccd3e9 100644 --- a/applets/pager/package/contents/ui/configGeneral.qml +++ b/applets/pager/package/contents/ui/configGeneral.qml @@ -1,181 +1,164 @@ /* * Copyright 2013 David Edmundson * Copyright 2016 Eike Hein * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. */ -import QtQuick 2.0 -import QtQuick.Controls 1.0 as QtControls -import QtQuick.Layouts 1.0 as Layouts +import QtQuick 2.5 +import QtQuick.Controls 2.5 as QtControls +import org.kde.kirigami 2.5 as Kirigami -//FIXME this causes a crash in Oxygen style -//QtControls.GroupBox { -Item { - width: childrenRect.width - height: childrenRect.height +Kirigami.FormLayout { -//FIXME enable when we're back to being a group box -// flat: true -// title: i18n("Appearance") + anchors.left: parent.left + anchors.right: parent.right property bool isActivityPager: (plasmoid.pluginName === "org.kde.plasma.activitypager") property int cfg_displayedText property alias cfg_showWindowIcons: showWindowIcons.checked property int cfg_currentDesktopSelected property alias cfg_pagerLayout: pagerLayout.currentIndex property alias cfg_showOnlyCurrentScreen: showOnlyCurrentScreen.checked property alias cfg_wrapPage: wrapPage.checked onCfg_displayedTextChanged: { switch (cfg_displayedText) { case 0: - displayedTextGroup.current = desktopNumberRadio; + displayedTextGroup.checkedButton = desktopNumberRadio; break; case 1: - displayedTextGroup.current = desktopNameRadio; + displayedTextGroup.checkedButton = desktopNameRadio; break; default: case 2: - displayedTextGroup.current = noTextRadio; + displayedTextGroup.checkedButton = noTextRadio; break; } } onCfg_currentDesktopSelectedChanged: { switch (cfg_currentDesktopSelected) { case 0: - currentDesktopSelectedGroup.current = doesNothingRadio; + currentDesktopSelectedGroup.checkedButton = doesNothingRadio; break; case 1: - currentDesktopSelectedGroup.current = showsDesktopRadio; + currentDesktopSelectedGroup.checkedButton = showsDesktopRadio; break; default: break; } } Component.onCompleted: { cfg_currentDesktopSelectedChanged(); cfg_displayedTextChanged(); } - QtControls.ExclusiveGroup { + QtControls.ButtonGroup { id: displayedTextGroup } - QtControls.ExclusiveGroup { + QtControls.ButtonGroup { id: currentDesktopSelectedGroup } - Layouts.GridLayout { - anchors.left: parent.left - columns: 2 - QtControls.Label { - text: i18n("Display:") - Layouts.Layout.alignment: Qt.AlignVCenter|Qt.AlignRight - } - QtControls.RadioButton { - id: desktopNumberRadio - exclusiveGroup: displayedTextGroup - text: isActivityPager ? i18n("Activity number") : i18n("Desktop number") - onCheckedChanged: if (checked) cfg_displayedText = 0; - } - Item { - width: 2 - height: 2 - Layouts.Layout.rowSpan: 2 - } - QtControls.RadioButton { - id: desktopNameRadio - exclusiveGroup: displayedTextGroup - text: isActivityPager ? i18n("Activity name") : i18n("Desktop name") - onCheckedChanged: if (checked) cfg_displayedText = 1; - } - QtControls.RadioButton { - id: noTextRadio - exclusiveGroup: displayedTextGroup - text: i18n("No text") - onCheckedChanged: if (checked) cfg_displayedText = 2; - } - Item { - width: 2 - height: 2 - } //spacer + QtControls.CheckBox { + id: showWindowIcons - QtControls.CheckBox { - id: showWindowIcons - text: i18n("Icons") - } + Kirigami.FormData.label: i18n("General:") - Item { - width: 2 - height: 2 - } //spacer + text: i18n("Show application icons on window outlines") + } - QtControls.CheckBox { - id: showOnlyCurrentScreen - text: i18n("Only the current screen") - } + QtControls.CheckBox { + id: showOnlyCurrentScreen + text: i18n("Show only current screen") + } - Item { - width: 2 - height: 2 - } //spacer + QtControls.CheckBox { + id: wrapPage + text: i18n("Navigation wraps around") + } - QtControls.CheckBox { - id: wrapPage - text: i18n("Page navigation wraps around") - } - QtControls.Label { - text: i18n("Layout:") - Layouts.Layout.alignment: Qt.AlignVCenter|Qt.AlignRight - visible: isActivityPager - } + Item { + Kirigami.FormData.isSection: true + } - QtControls.ComboBox { - id: pagerLayout - model: [i18nc("The pager layout", "Default"), i18n("Horizontal"), i18n("Vertical")] - visible: isActivityPager - } - QtControls.Label { - text: i18n("Selecting current desktop:") - Layouts.Layout.alignment: Qt.AlignVCenter|Qt.AlignRight - } - QtControls.RadioButton { - id: doesNothingRadio - exclusiveGroup: currentDesktopSelectedGroup - text: i18n("Does nothing") - onCheckedChanged: if (checked) cfg_currentDesktopSelected = 0; - } - Item { - width: 2 - height: 2 - Layouts.Layout.rowSpan: 2 - } - QtControls.RadioButton { - id: showsDesktopRadio - exclusiveGroup: currentDesktopSelectedGroup - text: i18n("Shows desktop") - onCheckedChanged: if (checked) cfg_currentDesktopSelected = 1; - } + QtControls.ComboBox { + id: pagerLayout + + Kirigami.FormData.label: i18n("Layout:") + + model: [i18nc("The pager layout", "Default"), i18n("Horizontal"), i18n("Vertical")] + visible: isActivityPager } + + Item { + Kirigami.FormData.isSection: true + visible: isActivityPager + } + + + QtControls.RadioButton { + id: noTextRadio + + Kirigami.FormData.label: i18n("Text display:") + + QtControls.ButtonGroup.group: displayedTextGroup + text: i18n("No text") + onCheckedChanged: if (checked) cfg_displayedText = 2; + } + QtControls.RadioButton { + id: desktopNumberRadio + QtControls.ButtonGroup.group: displayedTextGroup + text: isActivityPager ? i18n("Activity number") : i18n("Desktop number") + onCheckedChanged: if (checked) cfg_displayedText = 0; + } + QtControls.RadioButton { + id: desktopNameRadio + QtControls.ButtonGroup.group: displayedTextGroup + text: isActivityPager ? i18n("Activity name") : i18n("Desktop name") + onCheckedChanged: if (checked) cfg_displayedText = 1; + } + + + Item { + Kirigami.FormData.isSection: true + } + + + QtControls.RadioButton { + id: doesNothingRadio + + Kirigami.FormData.label: isActivityPager ? i18n("Selecting current Activity:") : i18n("Selecting current virtual desktop:") + + QtControls.ButtonGroup.group: currentDesktopSelectedGroup + text: i18n("Does nothing") + onCheckedChanged: if (checked) cfg_currentDesktopSelected = 0; + } + QtControls.RadioButton { + id: showsDesktopRadio + QtControls.ButtonGroup.group: currentDesktopSelectedGroup + text: i18n("Shows the desktop") + onCheckedChanged: if (checked) cfg_currentDesktopSelected = 1; + } } diff --git a/applets/pager/package/metadata.desktop b/applets/pager/package/metadata.desktop index 76baffb49..672822b33 100644 --- a/applets/pager/package/metadata.desktop +++ b/applets/pager/package/metadata.desktop @@ -1,170 +1,170 @@ [Desktop Entry] Name=Pager Name[af]=Pager Name[be@latin]=Stały Name[bg]=Пейджър Name[bn]=পেজার Name[bn_IN]=পেজার Name[bs]=Pejdžer Name[ca]=Paginador Name[ca@valencia]=Paginador Name[cs]=Přepínač ploch Name[csb]=Pager Name[da]=Skrivebordsvælger Name[de]=Arbeitsflächen-Umschalter Name[el]=Πίνακας σελίδων Name[en_GB]=Pager Name[eo]=Paĝilo Name[es]=Paginador Name[et]=Peiler Name[eu]=Bilagailua Name[fa]=پی‌جو Name[fi]=Sivutin Name[fr]=Gestionnaire de bureaux Name[fy]=Semafoan Name[ga]=Brabhsálaí Leathanach Name[gl]=Paxinador Name[gu]=પેજર Name[he]=Pager Name[hi]=पेजर Name[hne]=पेजर Name[hr]=Pager Name[hsb]=Listowar Name[hu]=Asztalváltó Name[ia]=Pager -Name[id]=Pemisah +Name[id]=Pager Name[is]=Flettir Name[it]=Cambiadesktop Name[ja]=ページャ Name[kk]=Ақтарғыш Name[km]=Pager Name[kn]=ಪುಟವೀಕ್ಷಕ (ಪೇಜರ್) Name[ko]=호출기 Name[ku]=Rûpelker Name[lt]=Puslapiuotojas Name[lv]=Lapotājs Name[mai]=पेजर Name[mk]=Пејџер Name[ml]=പേജര്‍ Name[mr]=पेजर Name[nb]=Skrivebordsbytter Name[nds]=Schriefdisch-Översicht Name[ne]=पेजर Name[nl]=Pager Name[nn]=Skrivebordsbytar Name[oc]=Recebedor d'apèl Name[or]=ପେଜର Name[pa]=ਪੇਜ਼ਰ Name[pl]=Przełącznik pulpitów Name[pt]=Paginador Name[pt_BR]=Paginador Name[ro]=Paginator Name[ru]=Переключение рабочих столов Name[se]=Čállinbeavdemolsojeaddj Name[si]=පේජරය Name[sk]=Prepínač plôch Name[sl]=Pozivnik Name[sr]=листач Name[sr@ijekavian]=листач Name[sr@ijekavianlatin]=listač Name[sr@latin]=listač Name[sv]=Skrivbordsvisning Name[ta]=Pager Name[te]=పేజర్ Name[tg]=Пейҷер Name[th]=สลับหน้าพื้นที่ทำงาน Name[tr]=Sayfalayıcı Name[ug]=چاقىرغۇ Name[uk]=Пейджер Name[vi]=Pager Name[wa]=Pager Name[x-test]=xxPagerxx Name[zh_CN]=调度器 Name[zh_TW]=虛擬桌面管理器 Comment=Switch between virtual desktops Comment[ar]=بدّل بين أسطح المكتب الوهمية Comment[be@latin]=Pieraklučeńnie virtualnych stałoŭ Comment[bg]=Превключване между работните плотове Comment[bs]=Prebacujte virtuelne površi Comment[ca]=Commuta entre escriptoris virtuals Comment[ca@valencia]=Commuta entre escriptoris virtuals Comment[cs]=Přepínač mezi virtuálními plochami Comment[da]=Skift mellem virtuelle skriveborde Comment[de]=Ermöglicht Ihnen das Wechseln zwischen virtuellen Arbeitsflächen. Comment[el]=Εναλλαγή μεταξύ εικονικών επιφανειών εργασίας Comment[en_GB]=Switch between virtual desktops Comment[eo]=Komuti inter virtualaj labortabloj Comment[es]=Cambiar entre escritorios virtuales Comment[et]=Lülitumine virtuaalsete töölaudade vahel Comment[eu]=Aldatu alegiazko mahaigain batetik bestera Comment[fi]=Vaihda virtuaalityöpöytää Comment[fr]=Passe d'un bureau virtuel à l'autre Comment[fy]=Wikselje tusken firuele buroblêden Comment[ga]=Athraigh an deasc fhíorúil Comment[gl]=Cambia entre escritorios virtuais Comment[gu]=વર્ચ્યુઅલ ડેસ્કટોપ્સની વચ્ચે બદલો Comment[he]=משמש למעבר בין שולחנות עבודה וירטואלים Comment[hi]=आभासी डेस्कटॉप्स के बीच स्विच करें Comment[hne]=आभासी डेस्कटाप मं स्विच करव Comment[hr]=Mijenjanje virtualnih radnih površina Comment[hsb]=Mjez wirtuelnymi dźěłowymi powjerchami tam a sem skakać Comment[hu]=Virtuális asztalok közötti váltásra szolgáló elem Comment[ia]=Commuta inter scriptorios virtual Comment[id]=Berpindah di antara desktop virtual Comment[is]=Skiptir milli sýndarskjáborða Comment[it]=Passa tra i desktop virtuali Comment[ja]=仮想デスクトップを切り替えます Comment[kk]=Виртуалды үстелдерді ақтару Comment[km]=ប្ដូរ​រវាង​ផ្ទៃតុ​និម្មិត Comment[kn]=ವಾಸ್ತವಪ್ರಾಯ ಗಣಕತೆರೆಗಳ ನಡುವೆ ಅಂತರಿಸು Comment[ko]=가상 데스크톱 사이를 전환합니다 Comment[lt]=Persijungti tarp virtualių darbalaukių Comment[lv]=Pārslēgties starp virtuālām darbvirsmām Comment[mk]=Менување меѓу виртуелни раб. површини Comment[ml]=വര്‍ച്ചുവല്‍ പണിയിടങ്ങള്‍ തമ്മില്‍ മാറുക Comment[mr]=आभासी डेस्कटॉप बदला Comment[nb]=Bytt mellom virtuelle skrivebord Comment[nds]=Twischen Schriefdischen wesseln Comment[nl]=Schakel tussen virtuele bureaubladen Comment[nn]=Byt mellom virtuelle skrivebord Comment[or]=ଆଭାସୀ ଡ଼େସ୍କଟପଗୁଡ଼ିକ ମଧ୍ଯରେ ଅଦଳ ବଦଳ କରନ୍ତୁ Comment[pa]=ਵਰਚੁਅਲ ਡੈਸਕਟਾਪਾਂ ਵਿੱਚ ਸਵਿੱਚ ਕਰੋ Comment[pl]=Przełącza między pulpitami Comment[pt]=Mudar de ecrã virtual Comment[pt_BR]=Alterna entre áreas de trabalho virtuais Comment[ro]=Comută între birouri virtuale Comment[ru]=Переключение между рабочими столами Comment[si]=අතත්‍ය වැඩතල අතර මාරුවන්න Comment[sk]=Prepínanie medzi virtuálnymi plochami Comment[sl]=Preklapljajte med navideznimi namizji Comment[sr]=Пребацујте виртуелне површи Comment[sr@ijekavian]=Пребацујте виртуелне површи Comment[sr@ijekavianlatin]=Prebacujte virtuelne površi Comment[sr@latin]=Prebacujte virtuelne površi Comment[sv]=Byt mellan virtuella skrivbord Comment[ta]=Switch between virtual desktops Comment[te]=వర్చ్యువల్ రంగస్థలముల మధ్యన మారుము Comment[tg]=Переключение между рабочими столами Comment[th]=สลับไปมาระหว่างพื้นที่ทำงานเสมือน Comment[tr]=Sanal masaüstleri arasında gezin Comment[ug]=مەۋھۇم ئۈستەلئۈستىلىرىنى ئالماشتۇر Comment[uk]=Перемкніть віртуальні стільниці Comment[wa]=Passer d' on forveyou scribanne a èn ôte Comment[x-test]=xxSwitch between virtual desktopsxx Comment[zh_CN]=在虚拟桌面间切换 Comment[zh_TW]=在虛擬桌面間切換 Icon=user-desktop Type=Service X-Plasma-API=declarativeappletscript X-KDE-ServiceTypes=Plasma/Applet X-Plasma-MainScript=ui/main.qml X-Plasma-Provides=org.kde.plasma.virtualdesktops X-KDE-PluginInfo-Author=The Plasma Team X-KDE-PluginInfo-Email=plasma-devel@kde.org X-KDE-PluginInfo-Name=org.kde.plasma.pager X-KDE-PluginInfo-Version=4.0 X-KDE-PluginInfo-Website=http://userbase.kde.org/Plasma/Pager X-KDE-PluginInfo-Category=Windows and Tasks X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL-2.0+ X-KDE-PluginInfo-EnabledByDefault=true diff --git a/applets/showdesktop/CMakeLists.txt b/applets/showdesktop/CMakeLists.txt new file mode 100644 index 000000000..ca0915523 --- /dev/null +++ b/applets/showdesktop/CMakeLists.txt @@ -0,0 +1,20 @@ +plasma_install_package(package org.kde.plasma.showdesktop) + +add_definitions(-DTRANSLATION_DOMAIN="plasma_applet_org.kde.plasma.showdesktop") + +set(showdesktop_SRCS + plugin/showdesktop.cpp + plugin/showdesktopplugin.cpp +) + +add_library(showdesktopplugin SHARED ${showdesktop_SRCS}) + +target_link_libraries(showdesktopplugin + Qt5::Core + Qt5::Qml + Qt5::Quick + KF5::WindowSystem + ) + +install(TARGETS showdesktopplugin DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/showdesktop) +install(FILES plugin/qmldir DESTINATION ${KDE_INSTALL_QMLDIR}/org/kde/plasma/private/showdesktop) diff --git a/applets/showdesktop/Messages.sh b/applets/showdesktop/Messages.sh new file mode 100755 index 000000000..fa1b058a1 --- /dev/null +++ b/applets/showdesktop/Messages.sh @@ -0,0 +1,2 @@ +#! /usr/bin/env bash +$XGETTEXT `find . -name \*.qml -o -name \*.cpp` -o $podir/plasma_applet_org.kde.plasma.showdesktop.pot diff --git a/applets/showdesktop/package/contents/config/main.xml b/applets/showdesktop/package/contents/config/main.xml new file mode 100644 index 000000000..12f34144e --- /dev/null +++ b/applets/showdesktop/package/contents/config/main.xml @@ -0,0 +1,13 @@ + + + + + + + user-desktop + + + diff --git a/applets/showdesktop/package/contents/ui/main.qml b/applets/showdesktop/package/contents/ui/main.qml new file mode 100644 index 000000000..c6f306cdb --- /dev/null +++ b/applets/showdesktop/package/contents/ui/main.qml @@ -0,0 +1,91 @@ +/* + Copyright (C) 2014 Ashish Madeti + Copyright (C) 2016 Kai Uwe Broulik + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +import QtQuick 2.1 +import QtQuick.Layouts 1.1 + +import org.kde.plasma.core 2.0 as PlasmaCore + +import org.kde.plasma.plasmoid 2.0 + +import org.kde.plasma.private.showdesktop 0.1 + +QtObject { + id: root + + // you can't have an applet with just a compact representation :( + Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation + Plasmoid.onActivated: showdesktop.showingDesktop = !showdesktop.showingDesktop + Plasmoid.icon: plasmoid.configuration.icon + Plasmoid.title: i18n("Show Desktop") + Plasmoid.toolTipSubText: i18n("Show the Plasma desktop") + + // QtObject has no default property + property QtObject showdesktop: ShowDesktop { } + + Component.onCompleted: { + plasmoid.setAction("minimizeall", i18nc("@action", "Minimize All Windows")) + } + + function action_minimizeall() { + showdesktop.minimizeAll() + } + + Plasmoid.fullRepresentation: PlasmaCore.ToolTipArea { + readonly property bool inPanel: (plasmoid.location === PlasmaCore.Types.TopEdge + || plasmoid.location === PlasmaCore.Types.RightEdge + || plasmoid.location === PlasmaCore.Types.BottomEdge + || plasmoid.location === PlasmaCore.Types.LeftEdge) + + Layout.minimumWidth: units.iconSizes.small + Layout.minimumHeight: Layout.minimumWidth + + Layout.maximumWidth: inPanel ? units.iconSizeHints.panel : -1 + Layout.maximumHeight: inPanel ? units.iconSizeHints.panel : -1 + + icon: plasmoid.icon + mainText: plasmoid.title + subText: plasmoid.toolTipSubText + + MouseArea { + anchors.fill: parent + onClicked: showdesktop.showingDesktop = !showdesktop.showingDesktop + } + + PlasmaCore.IconItem { + anchors.fill: parent + source: plasmoid.icon + active: parent.containsMouse || showdesktop.showingDesktop + } + + // also activate when dragging an item over the plasmoid so a user can easily drag data to the desktop + DropArea { + anchors.fill: parent + onEntered: activateTimer.start() + onExited: activateTimer.stop() + + Timer { + id: activateTimer + interval: 250 //to match TaskManager + onTriggered: plasmoid.activated() + } + } + } + +} diff --git a/applets/showdesktop/package/metadata.desktop b/applets/showdesktop/package/metadata.desktop new file mode 100644 index 000000000..4c3442840 --- /dev/null +++ b/applets/showdesktop/package/metadata.desktop @@ -0,0 +1,44 @@ +[Desktop Entry] +Name=Show Desktop +Name[ca]=Mostra l'escriptori +Name[ca@valencia]=Mostra l'escriptori +Name[en_GB]=Show Desktop +Name[es]=Mostrar el escritorio +Name[fr]=Afficher un bureau +Name[nl]=Bureaublad tonen +Name[pt]=Mostrar o Ecrã +Name[sv]=Visa skrivbord +Name[uk]=Показати стільницю +Name[x-test]=xxShow Desktopxx +Name[zh_TW]=顯示桌面 +Comment=Show the Plasma desktop +Comment[ca]=Mostra l'escriptori Plasma +Comment[ca@valencia]=Mostra l'escriptori Plasma +Comment[en_GB]=Show the Plasma desktop +Comment[es]=Mostrar el escritorio Plasma +Comment[fr]=Afficher le bureau Plasma +Comment[nl]=Toont het Plasma-bureaublad +Comment[pt]=Mostra toda a área de trabalho do Plasma no ecrã +Comment[sv]=Visa Plasmas skrivbord +Comment[uk]=Показати стільницю Плазми +Comment[x-test]=xxShow the Plasma desktopxx +Comment[zh_TW]=顯示 Plasma 桌面 +Icon=user-desktop + +Type=Service +X-KDE-ServiceTypes=Plasma/Applet + +X-KDE-PluginInfo-Author=Petri Damstén +X-KDE-PluginInfo-Email=damu@iki.fi +X-KDE-PluginInfo-Name=org.kde.plasma.showdesktop +X-KDE-PluginInfo-Version=1.0 +X-KDE-PluginInfo-Website=http://plasma.kde.org/ +X-KDE-PluginInfo-Category=Windows and Tasks +X-KDE-PluginInfo-Depends= +X-KDE-PluginInfo-License=GPL-2.0+ +X-KDE-PluginInfo-EnabledByDefault=true +X-Plasma-MainScript=ui/main.qml +X-Plasma-Provides=org.kde.plasma.windowmanagement +X-Plasma-API=declarativeappletscript + +X-KDE-FormFactors=desktop diff --git a/applets/showdesktop/plugin/qmldir b/applets/showdesktop/plugin/qmldir new file mode 100644 index 000000000..2a8cca8cc --- /dev/null +++ b/applets/showdesktop/plugin/qmldir @@ -0,0 +1,2 @@ +module org.kde.plasma.private.showdesktop +plugin showdesktopplugin diff --git a/applets/showdesktop/plugin/showdesktop.cpp b/applets/showdesktop/plugin/showdesktop.cpp new file mode 100644 index 000000000..35fb8403d --- /dev/null +++ b/applets/showdesktop/plugin/showdesktop.cpp @@ -0,0 +1,46 @@ +/* + * Copyright 2008 Petri Damsten + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "showdesktop.h" + +#include + +ShowDesktop::ShowDesktop(QObject *parent) : QObject(parent) +{ + connect(KWindowSystem::self(), &KWindowSystem::showingDesktopChanged, + this, &ShowDesktop::showingDesktopChanged); +} + +ShowDesktop::~ShowDesktop() = default; + +bool ShowDesktop::showingDesktop() const +{ + return KWindowSystem::showingDesktop(); +} + +void ShowDesktop::setShowingDesktop(bool showingDesktop) +{ + KWindowSystem::setShowingDesktop(showingDesktop); +} + +void ShowDesktop::minimizeAll() +{ + const auto &windows = KWindowSystem::windows(); + for (WId wid : windows) { + KWindowSystem::minimizeWindow(wid); + } +} diff --git a/applets/showdesktop/plugin/showdesktop.h b/applets/showdesktop/plugin/showdesktop.h new file mode 100644 index 000000000..eee32df92 --- /dev/null +++ b/applets/showdesktop/plugin/showdesktop.h @@ -0,0 +1,43 @@ +/* + * Copyright 2008 Petri Damsten + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef SHOWDESKTOP_HEADER +#define SHOWDESKTOP_HEADER + +#include + +class ShowDesktop : public QObject +{ + Q_OBJECT + + Q_PROPERTY(bool showingDesktop READ showingDesktop WRITE setShowingDesktop NOTIFY showingDesktopChanged) + +public: + explicit ShowDesktop(QObject *parent = nullptr); + ~ShowDesktop() override; + + bool showingDesktop() const; + void setShowingDesktop(bool showingDesktop); + + Q_INVOKABLE void minimizeAll(); + +Q_SIGNALS: + void showingDesktopChanged(bool showingDesktop); + +}; + +#endif //SHOWDESKTOP_HEADER diff --git a/applets/showdesktop/plugin/showdesktopplugin.cpp b/applets/showdesktop/plugin/showdesktopplugin.cpp new file mode 100644 index 000000000..75e275b43 --- /dev/null +++ b/applets/showdesktop/plugin/showdesktopplugin.cpp @@ -0,0 +1,29 @@ +/* + Copyright (C) 2014 Ashish Madeti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "showdesktopplugin.h" +#include "showdesktop.h" + +// Qt +#include + +void ShowDesktopPlugin::registerTypes(const char *uri) +{ + Q_ASSERT(QLatin1String(uri) == QLatin1String("org.kde.plasma.private.showdesktop")); + qmlRegisterType(uri, 0, 1, "ShowDesktop"); +} diff --git a/applets/showdesktop/plugin/showdesktopplugin.h b/applets/showdesktop/plugin/showdesktopplugin.h new file mode 100644 index 000000000..618c8cf84 --- /dev/null +++ b/applets/showdesktop/plugin/showdesktopplugin.h @@ -0,0 +1,35 @@ +/* + Copyright (C) 2014 Ashish Madeti + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#ifndef SHOWDESKTOPPLUGIN_H +#define SHOWDESKTOPPLUGIN_H + +#include +#include +#include + +class ShowDesktopPlugin : public QQmlExtensionPlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") + +public: + void registerTypes(const char *uri) override; +}; + +#endif // SHOWDESKTOPPLUGIN_H diff --git a/applets/taskmanager/package/contents/config/main.xml b/applets/taskmanager/package/contents/config/main.xml index eb250d023..ba5de1742 100644 --- a/applets/taskmanager/package/contents/config/main.xml +++ b/applets/taskmanager/package/contents/config/main.xml @@ -1,120 +1,121 @@ false true true false 1 true true 1 true 2 1 false true true false + 0 true true true 0 3 diff --git a/applets/taskmanager/package/contents/ui/ConfigBehavior.qml b/applets/taskmanager/package/contents/ui/ConfigBehavior.qml index 37ad7c3e3..0121d9359 100644 --- a/applets/taskmanager/package/contents/ui/ConfigBehavior.qml +++ b/applets/taskmanager/package/contents/ui/ConfigBehavior.qml @@ -1,150 +1,151 @@ /*************************************************************************** * Copyright (C) 2013 by Eike Hein * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * ***************************************************************************/ import QtQuick 2.0 import QtQuick.Controls 1.4 as QQC1 import QtQuick.Controls 2.5 import QtQuick.Layouts 1.12 import org.kde.kirigami 2.4 as Kirigami import org.kde.plasma.core 2.0 as PlasmaCore Item { width: childrenRect.width height: childrenRect.height property alias cfg_groupingStrategy: groupingStrategy.currentIndex property alias cfg_groupPopups: groupPopups.checked property alias cfg_onlyGroupWhenFull: onlyGroupWhenFull.checked property alias cfg_sortingStrategy: sortingStrategy.currentIndex property alias cfg_separateLaunchers: separateLaunchers.checked property alias cfg_middleClickAction: middleClickAction.currentIndex property alias cfg_wheelEnabled: wheelEnabled.checked property alias cfg_showOnlyCurrentScreen: showOnlyCurrentScreen.checked property alias cfg_showOnlyCurrentDesktop: showOnlyCurrentDesktop.checked property alias cfg_showOnlyCurrentActivity: showOnlyCurrentActivity.checked property alias cfg_showOnlyMinimized: showOnlyMinimized.checked Kirigami.FormLayout { anchors.left: parent.left anchors.right: parent.right // TODO: port to QQC2 version once we've fixed https://bugs.kde.org/show_bug.cgi?id=403153 QQC1.ComboBox { id: groupingStrategy visible: (plasmoid.pluginName !== "org.kde.plasma.icontasks") Kirigami.FormData.label: i18n("Group:") Layout.fillWidth: true model: [i18n("Do not group"), i18n("By program name")] } CheckBox { id: groupPopups visible: (plasmoid.pluginName !== "org.kde.plasma.icontasks") text: i18n("Open groups in popups") enabled: groupingStrategy.currentIndex > 0 } RowLayout { visible: (plasmoid.pluginName !== "org.kde.plasma.icontasks") // Indent the option as it depends on the previous one Item { width: units.largeSpacing } CheckBox { id: onlyGroupWhenFull text: i18n("Group only when the Task Manager is full") enabled: groupingStrategy.currentIndex > 0 && groupPopups.checked } } Item { Kirigami.FormData.isSection: true visible: (plasmoid.pluginName !== "org.kde.plasma.icontasks") } // TODO: port to QQC2 version once we've fixed https://bugs.kde.org/show_bug.cgi?id=403153 QQC1.ComboBox { id: sortingStrategy visible: (plasmoid.pluginName !== "org.kde.plasma.icontasks") Kirigami.FormData.label: i18n("Sort:") Layout.fillWidth: true model: [i18n("Do not sort"), i18n("Manually"), i18n("Alphabetically"), i18n("By desktop"), i18n("By activity")] } CheckBox { id: separateLaunchers visible: (plasmoid.pluginName !== "org.kde.plasma.icontasks") text: i18n("Keep launchers separate") enabled: sortingStrategy.currentIndex == 1 } Item { Kirigami.FormData.isSection: true visible: (plasmoid.pluginName !== "org.kde.plasma.icontasks") } // TODO: port to QQC2 version once we've fixed https://bugs.kde.org/show_bug.cgi?id=403153 QQC1.ComboBox { id: middleClickAction Kirigami.FormData.label: i18n("On middle-click:") Layout.fillWidth: true model: [ i18nc("The click action", "None"), i18n("Close window or group"), i18n("New instance"), i18n("Minimize/Restore window or group"), - i18nc("When clicking it would toggle grouping windows of a specific app", "Group/Ungroup") + i18nc("When clicking it would toggle grouping windows of a specific app", "Group/Ungroup"), + i18n("Bring to the current virtual desktop") ] } CheckBox { id: wheelEnabled text: i18n("Cycle through tasks with mouse wheel") } Item { Kirigami.FormData.isSection: true } CheckBox { id: showOnlyCurrentScreen Kirigami.FormData.label: i18n("Filter:") text: i18n("Show only tasks from the current screen") } CheckBox { id: showOnlyCurrentDesktop text: i18n("Show only tasks from the current desktop") } CheckBox { id: showOnlyCurrentActivity text: i18n("Show only tasks from the current activity") } CheckBox { id: showOnlyMinimized visible: (plasmoid.pluginName !== "org.kde.plasma.icontasks") text: i18n("Show only tasks that are minimized") } } } diff --git a/applets/taskmanager/package/contents/ui/ContextMenu.qml b/applets/taskmanager/package/contents/ui/ContextMenu.qml index 5677f65a2..bffc1edff 100644 --- a/applets/taskmanager/package/contents/ui/ContextMenu.qml +++ b/applets/taskmanager/package/contents/ui/ContextMenu.qml @@ -1,738 +1,738 @@ /*************************************************************************** * Copyright (C) 2012-2016 by Eike Hein * * Copyright (C) 2016 by Kai Uwe Broulik * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * ***************************************************************************/ import QtQuick 2.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.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 onStatusChanged: { - if (visualParent && get(atm.LauncherUrlWithoutIcon) !== "" && status == PlasmaComponents.DialogStatus.Open) { + if (visualParent && get(atm.LauncherUrlWithoutIcon) != "" && status == PlasmaComponents.DialogStatus.Open) { launcherToggleAction.checked = (tasksModel.launcherPosition(get(atm.LauncherUrlWithoutIcon)) !== -1); 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(function() { 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 Documents"), group: "recents", actions: backend.recentDocumentActions(launcherUrl, menu) }, { title: i18n("Actions"), group: "actions", actions: backend.jumpListActions(launcherUrl, menu) } ] // 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) { // Always show the "Actions:" header, since we visually merge // This section with the one beneath it that shows universal actions if (section["actions"].length > 0 || section["group"] == "actions") { 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 (!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: (visualParent && get(atm.IsLauncher) !== true && get(atm.IsStartup) !== true) - enabled: visualParent && get(atm.LauncherUrlWithoutIcon) !== "" + enabled: visualParent && get(atm.LauncherUrlWithoutIcon) != "" text: i18n("Start New Instance") icon: "list-add-symbolic" 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") Connections { target: virtualDesktopInfo onNumberOfDesktopsChanged: Qt.callLater(virtualDesktopsMenu.refresh) onDesktopIdsChanged: Qt.callLater(virtualDesktopsMenu.refresh) 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("Move To &Activity") Connections { target: activityInfo 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) { var newActivities = undefined; // 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); } Component.onCompleted: refresh() } } PlasmaComponents.MenuItem { id: moreActionsMenuItem visible: (visualParent && get(atm.IsLauncher) !== true && get(atm.IsStartup) !== true) enabled: visible text: i18n("More Actions") 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") 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 { id: launcherToggleAction visible: visualParent && get(atm.IsLauncher) !== true && get(atm.IsStartup) !== true && plasmoid.immutability !== PlasmaCore.Types.SystemImmutable && (activityInfo.numberOfRunningActivities < 2) - enabled: visualParent && get(atm.LauncherUrlWithoutIcon) !== "" + enabled: visualParent && get(atm.LauncherUrlWithoutIcon) != "" checkable: true text: i18n("&Pin to Task Manager") icon: "window-pin" onClicked: { if (tasksModel.launcherPosition(get(atm.LauncherUrlWithoutIcon)) !== -1) { tasksModel.requestRemoveLauncher(get(atm.LauncherUrlWithoutIcon)); } else { tasksModel.requestAddLauncher(get(atm.LauncherUrl)); } } } PlasmaComponents.MenuItem { id: showLauncherInActivitiesItem text: i18n("&Pin to Task Manager") icon: "window-pin" visible: visualParent && get(atm.IsLauncher) !== true && get(atm.IsStartup) !== true && plasmoid.immutability !== PlasmaCore.Types.SystemImmutable && (activityInfo.numberOfRunningActivities >= 2) Connections { target: activityInfo 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); var NULL_UUID = "00000000-0000-0000-0000-000000000000"; createNewItem(NULL_UUID, 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 && get(atm.IsLauncher) === true) && plasmoid.immutability !== PlasmaCore.Types.SystemImmutable text: i18n("Unpin from Task Manager") icon: "window-unpin" onClicked: { tasksModel.requestRemoveLauncher(get(atm.LauncherUrlWithoutIcon)); } } 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/applets/taskmanager/package/contents/ui/Task.qml b/applets/taskmanager/package/contents/ui/Task.qml index 55a4cc87f..6100c0ef5 100644 --- a/applets/taskmanager/package/contents/ui/Task.qml +++ b/applets/taskmanager/package/contents/ui/Task.qml @@ -1,587 +1,589 @@ /*************************************************************************** * Copyright (C) 2012-2013 by Eike Hein * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * ***************************************************************************/ import QtQuick 2.0 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.draganddrop 2.0 import org.kde.plasma.private.taskmanager 0.1 as TaskManagerApplet import "code/layout.js" as LayoutManager import "code/tools.js" as TaskTools MouseArea { id: task width: groupDialog.contentWidth height: Math.max(theme.mSize(theme.defaultFont).height, units.iconSizes.medium) + LayoutManager.verticalMargins() visible: false LayoutMirroring.enabled: (Qt.application.layoutDirection == Qt.RightToLeft) LayoutMirroring.childrenInherit: (Qt.application.layoutDirection == Qt.RightToLeft) readonly property var m: model readonly property int pid: model.AppPid !== undefined ? model.AppPid : 0 readonly property string appName: model.AppName readonly property variant winIdList: model.WinIdList property int itemIndex: index property bool inPopup: false property bool isWindow: model.IsWindow === true property int childCount: model.ChildCount !== undefined ? model.ChildCount : 0 property int previousChildCount: 0 property alias labelText: label.text property bool pressed: false property int pressX: -1 property int pressY: -1 property QtObject contextMenu: null property int wheelDelta: 0 readonly property bool smartLauncherEnabled: plasmoid.configuration.smartLaunchersEnabled && !inPopup && model.IsStartup !== true property QtObject smartLauncherItem: null property alias toolTipAreaItem: toolTipArea property Item audioStreamOverlay property var audioStreams: [] property bool delayAudioStreamIndicator: false readonly property bool hasAudioStream: plasmoid.configuration.indicateAudioStreams && audioStreams.length > 0 readonly property bool playingAudio: hasAudioStream && audioStreams.some(function (item) { return !item.corked }) readonly property bool muted: hasAudioStream && audioStreams.every(function (item) { return item.muted }) readonly property bool highlighted: (inPopup && activeFocus) || (!inPopup && containsMouse) || (task.contextMenu && task.contextMenu.status === PlasmaComponents.DialogStatus.Open) || (groupDialog.visible && groupDialog.visualParent === task) function hideToolTipTemporarily() { toolTipArea.hideToolTip(); } acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MidButton | Qt.BackButton | Qt.ForwardButton onPidChanged: updateAudioStreams({delay: false}) onAppNameChanged: updateAudioStreams({delay: false}) onIsWindowChanged: { if (isWindow) { taskInitComponent.createObject(task); } } onChildCountChanged: { if (!childCount && groupDialog.visualParent == task) { groupDialog.visible = false; return; } if (containsMouse) { groupDialog.activeTask = null; } if (childCount > previousChildCount) { tasksModel.requestPublishDelegateGeometry(modelIndex(), backend.globalRect(task), task); } previousChildCount = childCount; } onItemIndexChanged: { hideToolTipTemporarily(); if (!inPopup && !tasks.vertical && (LayoutManager.calculateStripes() > 1 || !plasmoid.configuration.separateLaunchers)) { tasks.requestLayout(); } } onContainsMouseChanged: { if (containsMouse) { if (inPopup) { forceActiveFocus(); } } else { pressed = false; } if (model.IsWindow === true) { tasks.windowsHovered(model.WinIdList, containsMouse); } } onPressed: { if (mouse.button == Qt.LeftButton || mouse.button == Qt.MidButton || mouse.button === Qt.BackButton || mouse.button === Qt.ForwardButton) { pressed = true; pressX = mouse.x; pressY = mouse.y; } else if (mouse.button == Qt.RightButton) { // When we're a launcher, there's no window controls, so we can show all // places without the menu getting super huge. if (model.IsLauncher === true) { showContextMenu({showAllPlaces: true}) } else { showContextMenu(); } } } onReleased: { if (pressed) { if (mouse.button == Qt.MidButton) { if (plasmoid.configuration.middleClickAction === TaskManagerApplet.Backend.NewInstance) { tasksModel.requestNewInstance(modelIndex()); } else if (plasmoid.configuration.middleClickAction === TaskManagerApplet.Backend.Close) { tasks.taskClosedWithMouseMiddleButton = winIdList.slice() tasksModel.requestClose(modelIndex()); } else if (plasmoid.configuration.middleClickAction === TaskManagerApplet.Backend.ToggleMinimized) { tasksModel.requestToggleMinimized(modelIndex()); } else if (plasmoid.configuration.middleClickAction === TaskManagerApplet.Backend.ToggleGrouping) { tasksModel.requestToggleGrouping(modelIndex()); + } else if (plasmoid.configuration.middleClickAction === TaskManagerApplet.Backend.BringToCurrentDesktop) { + tasksModel.requestVirtualDesktops(modelIndex(), [virtualDesktopInfo.currentDesktop]); } } else if (mouse.button == Qt.LeftButton) { TaskTools.activateTask(modelIndex(), model, mouse.modifiers, task); if (plasmoid.configuration.showToolTips) { hideToolTipTemporarily(); } } else if (mouse.button === Qt.BackButton || mouse.button === Qt.ForwardButton) { var sourceName = mpris2Source.sourceNameForLauncherUrl(model.LauncherUrlWithoutIcon, model.AppPid); if (sourceName) { if (mouse.button === Qt.BackButton) { mpris2Source.goPrevious(sourceName); } else { mpris2Source.goNext(sourceName); } } else { mouse.accepted = false; } } backend.cancelHighlightWindows(); } pressed = false; pressX = -1; pressY = -1; } onPositionChanged: { // mouse.button is always 0 here, hence checking with mouse.buttons if (pressX != -1 && mouse.buttons == Qt.LeftButton && dragHelper.isDrag(pressX, pressY, mouse.x, mouse.y)) { tasks.dragSource = task; dragHelper.startDrag(task, model.MimeType, model.MimeData, model.LauncherUrlWithoutIcon, model.decoration); pressX = -1; pressY = -1; return; } } onWheel: { if (plasmoid.configuration.wheelEnabled && (!inPopup || !groupDialog.overflowing)) { wheelDelta = TaskTools.wheelActivateNextPrevTask(task, wheelDelta, wheel.angleDelta.y); } else { wheel.accepted = false; } } onSmartLauncherEnabledChanged: { if (smartLauncherEnabled && !smartLauncherItem) { var smartLauncher = Qt.createQmlObject(" import org.kde.plasma.private.taskmanager 0.1 as TaskManagerApplet; TaskManagerApplet.SmartLauncherItem { }", task); smartLauncher.launcherUrl = Qt.binding(function() { return model.LauncherUrlWithoutIcon; }); smartLauncherItem = smartLauncher; } } onHasAudioStreamChanged: { if (hasAudioStream) { audioStreamIconLoader.active = true } } Keys.onReturnPressed: TaskTools.activateTask(modelIndex(), model, event.modifiers, task) Keys.onEnterPressed: Keys.onReturnPressed(event); function modelIndex() { return (inPopup ? tasksModel.makeModelIndex(groupDialog.visualParent.itemIndex, index) : tasksModel.makeModelIndex(index)); } function showContextMenu(args) { contextMenu = tasks.createContextMenu(task, modelIndex(), args); contextMenu.show(); } function updateAudioStreams(args) { if (args) { // When the task just appeared (e.g. virtual desktop switch), show the audio indicator // right away. Only when audio streams change during the lifetime of this task, delay // showing that to avoid distraction. delayAudioStreamIndicator = !!args.delay; } var pa = pulseAudio.item; if (!pa) { task.audioStreams = []; return; } var streams = pa.streamsForPid(task.pid); if (streams.length) { pa.registerPidMatch(task.appName); } else { // We only want to fall back to appName matching if we never managed to map // a PID to an audio stream window. Otherwise if you have two instances of // an application, one playing and the other not, it will look up appName // for the non-playing instance and erroneously show an indicator on both. if (!pa.hasPidMatch(task.appName)) { streams = pa.streamsForAppName(task.appName); } } task.audioStreams = streams; } function toggleMuted() { if (muted) { task.audioStreams.forEach(function (item) { item.unmute(); }); } else { task.audioStreams.forEach(function (item) { item.mute(); }); } } Connections { target: pulseAudio.item ignoreUnknownSignals: true // Plasma-PA might not be available onStreamsChanged: task.updateAudioStreams({delay: true}) } Component { id: taskInitComponent Timer { id: timer interval: units.longDuration * 2 repeat: false onTriggered: { parent.hoverEnabled = true; if (parent.isWindow) { tasksModel.requestPublishDelegateGeometry(parent.modelIndex(), backend.globalRect(parent), parent); } timer.destroy(); } Component.onCompleted: timer.start() } } PlasmaCore.FrameSvgItem { id: frame anchors { fill: parent topMargin: (!tasks.vertical && taskList.rows > 1) ? units.smallSpacing / 4 : 0 bottomMargin: (!tasks.vertical && taskList.rows > 1) ? units.smallSpacing / 4 : 0 leftMargin: ((inPopup || tasks.vertical) && taskList.columns > 1) ? units.smallSpacing / 4 : 0 rightMargin: ((inPopup || tasks.vertical) && taskList.columns > 1) ? units.smallSpacing / 4 : 0 } imagePath: "widgets/tasks" property string basePrefix: "normal" prefix: TaskTools.taskPrefix(basePrefix) PlasmaCore.ToolTipArea { id: toolTipArea anchors.fill: parent location: plasmoid.location active: !inPopup && !groupDialog.visible && plasmoid.configuration.showToolTips interactive: true mainItem: toolTipDelegate onContainsMouseChanged: { if (containsMouse) { toolTipDelegate.parentTask = task; toolTipDelegate.rootIndex = tasksModel.makeModelIndex(itemIndex, -1); toolTipDelegate.appName = Qt.binding(function() { return model.AppName; }); toolTipDelegate.pidParent = Qt.binding(function() { return model.AppPid; }); toolTipDelegate.windows = Qt.binding(function() { return model.WinIdList; }); toolTipDelegate.isGroup = Qt.binding(function() { return model.IsGroupParent === true; }); toolTipDelegate.icon = Qt.binding(function() { return model.decoration; }); toolTipDelegate.launcherUrl = Qt.binding(function() { return model.LauncherUrlWithoutIcon; }); toolTipDelegate.isLauncher = Qt.binding(function() { return model.IsLauncher === true; }); toolTipDelegate.isMinimizedParent = Qt.binding(function() { return model.IsMinimized === true; }); toolTipDelegate.displayParent = Qt.binding(function() { return model.display; }); toolTipDelegate.genericName = Qt.binding(function() { return model.GenericName; }); toolTipDelegate.virtualDesktopParent = Qt.binding(function() { return (model.VirtualDesktops !== undefined || model.VirtualDesktops.length === 0) ? model.VirtualDesktops : [0]; }); toolTipDelegate.isOnAllVirtualDesktopsParent = Qt.binding(function() { return model.IsOnAllVirtualDesktops === true; }); toolTipDelegate.activitiesParent = Qt.binding(function() { return model.Activities; }); toolTipDelegate.smartLauncherCountVisible = Qt.binding(function() { return plasmoid.configuration.smartLaunchersEnabled && task.smartLauncherItem && task.smartLauncherItem.countVisible; }); toolTipDelegate.smartLauncherCount = Qt.binding(function() { return toolTipDelegate.smartLauncherCountVisible ? task.smartLauncherItem.count : 0; }); } } } } Loader { anchors.fill: frame asynchronous: true source: "TaskProgressOverlay.qml" active: plasmoid.configuration.smartLaunchersEnabled && task.smartLauncherItem && task.smartLauncherItem.progressVisible } Item { id: iconBox anchors { left: parent.left leftMargin: adjustMargin(true, parent.width, taskFrame.margins.left) top: parent.top topMargin: adjustMargin(false, parent.height, taskFrame.margins.top) } width: height height: (parent.height - adjustMargin(false, parent.height, taskFrame.margins.top) - adjustMargin(false, parent.height, taskFrame.margins.bottom)) function adjustMargin(vert, size, margin) { if (!size) { return margin; } var margins = vert ? LayoutManager.horizontalMargins() : LayoutManager.verticalMargins(); if ((size - margins) < units.iconSizes.small) { return Math.ceil((margin * (units.iconSizes.small / size)) / 2); } return margin; } //width: inPopup ? units.iconSizes.small : Math.min(height, parent.width - LayoutManager.horizontalMargins()) PlasmaCore.IconItem { id: icon anchors.fill: parent active: task.highlighted enabled: true usesPlasmaTheme: false source: model.decoration } Loader { // QTBUG anchors.fill in conjunction with the Loader doesn't reliably work on creation: // have a window with a badge, move it from one screen to another, the new task item on the // other screen will now have a glitched out badge mask. width: parent.width height: parent.height asynchronous: true source: "TaskBadgeOverlay.qml" active: plasmoid.configuration.smartLaunchersEnabled && height >= units.iconSizes.small && task.smartLauncherItem && task.smartLauncherItem.countVisible } states: [ // Using a state transition avoids a binding loop between label.visible and // the text label margin, which derives from the icon width. State { name: "standalone" when: !label.visible && !audioStreamIconLoader.shown AnchorChanges { target: iconBox anchors.left: undefined anchors.horizontalCenter: parent.horizontalCenter } PropertyChanges { target: iconBox anchors.leftMargin: 0 width: parent.width - adjustMargin(true, task.width, taskFrame.margins.left) - adjustMargin(true, task.width, taskFrame.margins.right) } } ] Loader { anchors.fill: parent active: model.IsStartup === true sourceComponent: busyIndicator } Component { id: busyIndicator PlasmaComponents.BusyIndicator { anchors.fill: parent } } } Loader { id: audioStreamIconLoader readonly property bool shown: item && item.visible source: "AudioStream.qml" width: units.roundToIconSize(Math.min(Math.min(iconBox.width, iconBox.height), units.iconSizes.smallMedium)) height: width anchors { right: parent.right rightMargin: iconBox.adjustMargin(true, parent.width, taskFrame.margins.right) verticalCenter: parent.verticalCenter } } PlasmaComponents.Label { id: label visible: (inPopup || !iconsOnly && model.IsLauncher !== true && (parent.width - iconBox.height - units.smallSpacing) >= (theme.mSize(theme.defaultFont).width * LayoutManager.minimumMColumns())) anchors { fill: parent leftMargin: taskFrame.margins.left + iconBox.width + units.smallSpacing topMargin: taskFrame.margins.top rightMargin: taskFrame.margins.right + (audioStreamIconLoader.shown ? (audioStreamIconLoader.width + units.smallSpacing) : 0) bottomMargin: taskFrame.margins.bottom } text: model.display wrapMode: (maximumLineCount == 1) ? Text.NoWrap : Text.Wrap elide: Text.ElideRight textFormat: Text.PlainText verticalAlignment: Text.AlignVCenter maximumLineCount: plasmoid.configuration.maxTextLines || undefined } states: [ State { name: "launcher" when: model.IsLauncher === true PropertyChanges { target: frame basePrefix: "" } }, State { name: "hovered" when: task.highlighted && frame.hasElementPrefix("hover") && plasmoid.configuration.taskHoverEffect PropertyChanges { target: frame basePrefix: "hover" } }, State { name: "attention" when: model.IsDemandingAttention === true || (task.smartLauncherItem && task.smartLauncherItem.urgent) PropertyChanges { target: frame basePrefix: "attention" } }, State { name: "minimized" when: model.IsMinimized === true PropertyChanges { target: frame basePrefix: "minimized" } }, State { name: "active" when: model.IsActive === true PropertyChanges { target: frame basePrefix: "focus" } } ] Component.onCompleted: { if (!inPopup && model.IsWindow === true) { var component = Qt.createComponent("GroupExpanderOverlay.qml"); component.createObject(task); } if (!inPopup && model.IsWindow !== true) { taskInitComponent.createObject(task); } updateAudioStreams({delay: false}) } } diff --git a/applets/taskmanager/plugin/backend.h b/applets/taskmanager/plugin/backend.h index 2b4b20d9a..46e5e47ce 100644 --- a/applets/taskmanager/plugin/backend.h +++ b/applets/taskmanager/plugin/backend.h @@ -1,124 +1,125 @@ /*************************************************************************** * Copyright (C) 2013-2016 by Eike Hein * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * ***************************************************************************/ #ifndef BACKEND_H #define BACKEND_H #include #include #include #include class QAction; class QActionGroup; class QQuickItem; class QQuickWindow; class QJsonArray; namespace KActivities { class Consumer; } class Backend : public QObject { Q_OBJECT Q_PROPERTY(QQuickItem* taskManagerItem READ taskManagerItem WRITE setTaskManagerItem NOTIFY taskManagerItemChanged) Q_PROPERTY(QQuickItem* toolTipItem READ toolTipItem WRITE setToolTipItem NOTIFY toolTipItemChanged) Q_PROPERTY(QQuickWindow* groupDialog READ groupDialog WRITE setGroupDialog NOTIFY groupDialogChanged) Q_PROPERTY(bool highlightWindows READ highlightWindows WRITE setHighlightWindows NOTIFY highlightWindowsChanged) public: enum MiddleClickAction { None = 0, Close, NewInstance, ToggleMinimized, - ToggleGrouping + ToggleGrouping, + BringToCurrentDesktop }; Q_ENUM(MiddleClickAction) explicit Backend(QObject *parent = nullptr); ~Backend() override; QQuickItem *taskManagerItem() const; void setTaskManagerItem(QQuickItem *item); QQuickItem *toolTipItem() const; void setToolTipItem(QQuickItem *item); QQuickWindow *groupDialog() const; void setGroupDialog(QQuickWindow *dialog); bool highlightWindows() const; void setHighlightWindows(bool highlight); Q_INVOKABLE QVariantList jumpListActions(const QUrl &launcherUrl, QObject *parent); Q_INVOKABLE QVariantList placesActions(const QUrl &launcherUrl, bool showAllPlaces, QObject *parent); Q_INVOKABLE QVariantList recentDocumentActions(const QUrl &launcherUrl, QObject *parent); Q_INVOKABLE void setActionGroup(QAction *action) const; Q_INVOKABLE QRect globalRect(QQuickItem *item) const; Q_INVOKABLE void ungrabMouse(QQuickItem *item) const; Q_INVOKABLE bool canPresentWindows() const; Q_INVOKABLE bool isApplication(const QUrl &url) const; Q_INVOKABLE QList jsonArrayToUrlList(const QJsonArray &array) const; Q_INVOKABLE void cancelHighlightWindows(); static QUrl tryDecodeApplicationsUrl(const QUrl &launcherUrl); public Q_SLOTS: void presentWindows(const QVariant &winIds); void windowsHovered(const QVariant &winIds, bool hovered); Q_SIGNALS: void taskManagerItemChanged() const; void toolTipItemChanged() const; void groupDialogChanged() const; void highlightWindowsChanged() const; void addLauncher(const QUrl &url) const; void showAllPlaces(); private Q_SLOTS: void toolTipWindowChanged(QQuickWindow *window); void handleJumpListAction() const; void handleRecentDocumentAction() const; private: void updateWindowHighlight(); QQuickItem *m_taskManagerItem = nullptr; QQuickItem *m_toolTipItem = nullptr; QQuickWindow *m_groupDialog = nullptr; WId m_panelWinId; bool m_highlightWindows; QList m_windowsToHighlight; QActionGroup *m_actionGroup = nullptr; KActivities::Consumer *m_activitiesConsumer = nullptr; }; #endif diff --git a/containments/desktop/package/contents/ui/ConfigFilter.qml b/containments/desktop/package/contents/ui/ConfigFilter.qml index c9b08a5d2..a2c9ee11f 100644 --- a/containments/desktop/package/contents/ui/ConfigFilter.qml +++ b/containments/desktop/package/contents/ui/ConfigFilter.qml @@ -1,255 +1,227 @@ /*************************************************************************** * Copyright (C) 2014 by Eike Hein * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.0 +import QtQuick 2.5 +import QtQuick.Controls 2.5 +import QtQuick.Controls 1.0 as QQC1 import QtQuick.Layouts 1.0 +import org.kde.kirigami 2.5 as Kirigami import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.private.desktopcontainment.folder 0.1 as Folder -Item { +ColumnLayout { id: configIcons - width: childrenRect.width - height: childrenRect.height - property alias cfg_filterMode: filterMode.currentIndex property alias cfg_filterPattern: filterPattern.text property alias cfg_filterMimeTypes: mimeTypesModel.checkedTypes PlasmaCore.SortFilterModel { id: filteredMimeTypesModel sourceModel: Folder.MimeTypesModel { id: mimeTypesModel } // SortFilterModel doesn't have a case-sensitivity option // but filterRegExp always causes case-insensitive sorting. filterRegExp: mimeFilter.text filterRole: "name" sortRole: mimeTypesView.getColumn(mimeTypesView.sortIndicatorColumn).role sortOrder: mimeTypesView.sortIndicatorOrder function checkFiltered() { var types = []; for (var i = 0; i < count; ++i) { types.push(get(i).name); } mimeTypesModel.checkedTypes = types; } function uncheckFiltered() { var types = []; for (var i = 0; i < count; ++i) { types.push(get(i).name); } mimeTypesModel.checkedTypes = mimeTypesModel.checkedTypes.filter(function(x) { return types.indexOf(x) < 0; }); } } - - ColumnLayout { - width: parent.width - height: parent.height - + Kirigami.FormLayout { ComboBox { id: filterMode - - Layout.fillWidth: true - - model: [i18n("Show All Files"), i18n("Show Files Matching"), i18n("Hide Files Matching")] - } - - Label { - Layout.fillWidth: true - - text: i18n("File name pattern:") + Kirigami.FormData.label: i18n("Files:") + model: [i18n("Show all"), i18n("Show matching"), i18n("Hide matching")] } TextField { id: filterPattern - - Layout.fillWidth: true - + Kirigami.FormData.label: i18n("File name pattern:") enabled: (filterMode.currentIndex > 0) } - Label { - Layout.fillWidth: true - - text: i18n("File types:") - } - TextField { id: mimeFilter - - Layout.fillWidth: true - + Kirigami.FormData.label: i18n("File types:") enabled: (filterMode.currentIndex > 0) - - placeholderText: i18n("Search file type...") + placeholderText: i18n("Search...") } + } - RowLayout { - Layout.fillWidth: true - Layout.fillHeight: true + ColumnLayout { + Layout.fillWidth: true + Layout.fillHeight: true - CheckBox { // Purely for metrics. - id: metricsCheckBox - visible: false - } + CheckBox { // Purely for metrics. + id: metricsCheckBox + visible: false + } - TableView { - id: mimeTypesView + QQC1.TableView { + id: mimeTypesView - // Signal the delegates listen to when user presses space to toggle current row. - signal toggleCurrent + // Signal the delegates listen to when user presses space to toggle current row. + signal toggleCurrent - Layout.fillWidth: true - Layout.fillHeight: true + Layout.fillWidth: true + Layout.fillHeight: true - enabled: (filterMode.currentIndex > 0) + enabled: (filterMode.currentIndex > 0) - model: filteredMimeTypesModel + model: filteredMimeTypesModel - sortIndicatorVisible: true - sortIndicatorColumn: 2 // Default to sort by "File type". + sortIndicatorVisible: true + sortIndicatorColumn: 2 // Default to sort by "File type". - onSortIndicatorColumnChanged: { // Disallow sorting by icon. - if (sortIndicatorColumn === 1) { - sortIndicatorColumn = 2; - } + onSortIndicatorColumnChanged: { // Disallow sorting by icon. + if (sortIndicatorColumn === 1) { + sortIndicatorColumn = 2; } + } - Keys.onSpacePressed: toggleCurrent() + Keys.onSpacePressed: toggleCurrent() - function adjustColumns() { - // Resize description column to take whatever space is left. - var width = viewport.width; - for (var i = 0; i < columnCount - 1; ++i) { - width -= getColumn(i).width; - } - descriptionColumn.width = width; + function adjustColumns() { + // Resize description column to take whatever space is left. + var width = viewport.width; + for (var i = 0; i < columnCount - 1; ++i) { + width -= getColumn(i).width; } + descriptionColumn.width = width; + } - onWidthChanged: adjustColumns() - // Component.onCompleted is too early to do this... - onRowCountChanged: adjustColumns() - - TableViewColumn { - role: "checked" - width: metricsCheckBox.width - resizable: false - movable: false - - delegate: CheckBox { - id: checkBox - - checked: styleData.value - activeFocusOnTab: false // only let the TableView as a whole get focus - onClicked: { - model.checked = checked - // Clicking it breaks the binding to the model value which becomes - // an issue during sorting as TableView re-uses delegates. - checked = Qt.binding(function() { - return styleData.value; - }); - } + onWidthChanged: adjustColumns() + // Component.onCompleted is too early to do this... + onRowCountChanged: adjustColumns() + + QQC1.TableViewColumn { + role: "checked" + width: metricsCheckBox.width + resizable: false + movable: false + + delegate: CheckBox { + id: checkBox + + checked: styleData.value + activeFocusOnTab: false // only let the TableView as a whole get focus + onClicked: { + model.checked = checked + // Clicking it breaks the binding to the model value which becomes + // an issue during sorting as TableView re-uses delegates. + checked = Qt.binding(function() { + return styleData.value; + }); + } - Connections { - target: mimeTypesView - onToggleCurrent: { - if (styleData.row === mimeTypesView.currentRow) { - model.checked = !checkBox.checked - } + Connections { + target: mimeTypesView + onToggleCurrent: { + if (styleData.row === mimeTypesView.currentRow) { + model.checked = !checkBox.checked } } } } - - TableViewColumn { - role: "decoration" - width: units.iconSizes.small - resizable: false - movable: false - - delegate: PlasmaCore.IconItem { - width: units.iconSizes.small - height: units.iconSizes.small - animated: false // TableView re-uses delegates, avoid animation when sorting/filtering. - source: styleData.value - } - } - - TableViewColumn { - id: nameColumn - role: "name" - title: i18n("File type") - width: units.gridUnit * 10 // Assume somewhat reasonable default for mime type name. - onWidthChanged: mimeTypesView.adjustColumns() - movable: false - } - TableViewColumn { - id: descriptionColumn - role: "comment" - title: i18n("Description") - movable: false - resizable: false - } } - ColumnLayout { - Layout.alignment: Qt.AlignTop - // Need to explicitly base the size off the button's implicitWidth - // to avoid the column from growing way too wide due to fillWidth... - Layout.maximumWidth: Math.max(selectAllButton.implicitWidth, deselectAllButton.implicitWidth) - - Button { - id: selectAllButton - Layout.fillWidth: true - - enabled: (filterMode.currentIndex > 0) - - text: i18n("Select All") + QQC1.TableViewColumn { + role: "decoration" + width: units.iconSizes.small + resizable: false + movable: false - onClicked: filteredMimeTypesModel.checkFiltered() + delegate: PlasmaCore.IconItem { + width: units.iconSizes.small + height: units.iconSizes.small + animated: false // TableView re-uses delegates, avoid animation when sorting/filtering. + source: styleData.value } + } - Button { - id: deselectAllButton - Layout.fillWidth: true + QQC1.TableViewColumn { + id: nameColumn + role: "name" + title: i18n("File type") + width: units.gridUnit * 10 // Assume somewhat reasonable default for mime type name. + onWidthChanged: mimeTypesView.adjustColumns() + movable: false + } - enabled: (filterMode.currentIndex > 0) + QQC1.TableViewColumn { + id: descriptionColumn + role: "comment" + title: i18n("Description") + movable: false + resizable: false + } + } - text: i18n("Deselect All") + RowLayout { + Button { + id: selectAllButton + enabled: (filterMode.currentIndex > 0) + icon.name: "edit-select-all" + ToolTip.delay: 1000 + ToolTip.timeout: 5000 + ToolTip.visible: (Kirigami.Settings.isMobile ? pressed : hovered) && ToolTip.text.length > 0 + ToolTip.text: i18n("Select All") + onClicked: filteredMimeTypesModel.checkFiltered() + } - onClicked: filteredMimeTypesModel.uncheckFiltered() - } + Button { + id: deselectAllButton + enabled: (filterMode.currentIndex > 0) + icon.name: "edit-select-none" + ToolTip.delay: 1000 + ToolTip.timeout: 5000 + ToolTip.visible: (Kirigami.Settings.isMobile ? pressed : hovered) && ToolTip.text.length > 0 + ToolTip.text: i18n("Deselect All") + onClicked: filteredMimeTypesModel.uncheckFiltered() } } } } diff --git a/containments/desktop/package/contents/ui/ConfigIcons.qml b/containments/desktop/package/contents/ui/ConfigIcons.qml index 6c47035ef..cc7dc85e8 100644 --- a/containments/desktop/package/contents/ui/ConfigIcons.qml +++ b/containments/desktop/package/contents/ui/ConfigIcons.qml @@ -1,332 +1,332 @@ /*************************************************************************** * Copyright (C) 2014 by Eike Hein * * Copyright (C) 2015 by Kai Uwe Broulik * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * ***************************************************************************/ -import QtQuick 2.4 -import QtQuick.Controls 1.0 +import QtQuick 2.5 +import QtQuick.Controls 2.5 import QtQuick.Dialogs 1.1 import QtQuick.Layouts 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.kquickcontrolsaddons 2.0 import org.kde.kconfig 1.0 // for KAuthorized -import org.kde.kirigami 2.4 as Kirigami +import org.kde.kirigami 2.5 as Kirigami import org.kde.private.desktopcontainment.desktop 0.1 as Desktop import org.kde.private.desktopcontainment.folder 0.1 as Folder Item { id: configIcons - width: childrenRect.width - height: childrenRect.height - property bool isPopup: (plasmoid.location !== PlasmaCore.Types.Floating) property string cfg_icon: plasmoid.configuration.icon property alias cfg_useCustomIcon: useCustomIcon.checked property alias cfg_arrangement: arrangement.currentIndex property alias cfg_alignment: alignment.currentIndex property bool cfg_locked property alias cfg_sortMode: sortMode.mode property alias cfg_sortDesc: sortDesc.checked property alias cfg_sortDirsFirst: sortDirsFirst.checked property alias cfg_toolTips: toolTips.checked property alias cfg_selectionMarkers: selectionMarkers.checked property alias cfg_popups: popups.checked property alias cfg_previews: previews.checked property alias cfg_previewPlugins: previewPluginsDialog.previewPlugins property alias cfg_viewMode: viewMode.currentIndex property alias cfg_iconSize: iconSize.value property alias cfg_labelWidth: labelWidth.currentIndex property alias cfg_textLines: textLines.value readonly property bool lockedByKiosk: !KAuthorized.authorize("editable_desktop_icons") IconDialog { id: iconDialog onIconNameChanged: cfg_icon = iconName || "folder" } Kirigami.FormLayout { anchors.horizontalCenter: parent.horizontalCenter // Panel button RowLayout { spacing: units.smallSpacing visible: isPopup Kirigami.FormData.label: i18n("Panel button:") CheckBox { id: useCustomIcon visible: isPopup checked: cfg_useCustomIcon text: i18n("Use a custom icon") } Button { id: iconButton Layout.minimumWidth: units.iconSizes.large + units.smallSpacing * 2 Layout.maximumWidth: Layout.minimumWidth Layout.minimumHeight: Layout.minimumWidth Layout.maximumHeight: Layout.minimumWidth checkable: true enabled: useCustomIcon.checked onClicked: { checked = Qt.binding(function() { return iconMenu.status === PlasmaComponents.DialogStatus.Open; }) iconMenu.open(0, height); } PlasmaCore.IconItem { anchors.centerIn: parent width: units.iconSizes.large height: width source: cfg_icon } } PlasmaComponents.ContextMenu { id: iconMenu visualParent: iconButton PlasmaComponents.MenuItem { text: i18nc("@item:inmenu Open icon chooser dialog", "Choose...") icon: "document-open-folder" onClicked: iconDialog.open() } PlasmaComponents.MenuItem { text: i18nc("@item:inmenu Reset icon to default", "Clear Icon") icon: "edit-clear" onClicked: cfg_icon = "folder" } } } Item { visible: isPopup Kirigami.FormData.isSection: true } // Arrangement section ComboBox { id: arrangement Layout.fillWidth: true Kirigami.FormData.label: i18n("Arrangement:") model: [i18n("Rows"), i18n("Columns")] } ComboBox { id: alignment Layout.fillWidth: true - model: [i18n("Align Left"), i18n("Align Right")] + model: [i18n("Align left"), i18n("Align right")] } CheckBox { id: locked visible: ("containmentType" in plasmoid) checked: cfg_locked || lockedByKiosk enabled: !lockedByKiosk onCheckedChanged: { if (!lockedByKiosk) { cfg_locked = checked; } } text: i18n("Lock in place") } Item { Kirigami.FormData.isSection: true } // Sorting section ComboBox { id: sortMode Layout.fillWidth: true Kirigami.FormData.label: i18n("Sorting:") property int mode // FIXME TODO HACK: This maps the combo box list model to the KDirModel::ModelColumns // enum, which should be done in C++. property variant indexToMode: [-1, 0, 1, 6, 2] property variant modeToIndex: {'-1' : '0', '0' : '1', '1' : '2', '6' : '3', '2' : '4'} model: [i18n("Manual"), i18n("Name"), i18n("Size"), i18n("Type"), i18n("Date")] Component.onCompleted: currentIndex = modeToIndex[mode] onActivated: mode = indexToMode[index] } CheckBox { id: sortDesc enabled: (sortMode.currentIndex != 0) text: i18n("Descending") } CheckBox { id: sortDirsFirst enabled: (sortMode.currentIndex != 0) text: i18n("Folders first") } Item { Kirigami.FormData.isSection: true } // View Mode section (only if we're a pop-up) ComboBox { id: viewMode visible: isPopup Layout.fillWidth: true Kirigami.FormData.label: i18nc("whether to use icon or list view", "View mode:") model: [i18n("List"), i18n("Icons")] } // Size section Slider { id: iconSize + + Layout.fillWidth: true visible: !isPopup || viewMode.currentIndex === 1 Kirigami.FormData.label: i18n("Icon size:") - minimumValue: 0 - maximumValue: 5 + from: 0 + to: 5 stepSize: 1 - tickmarksEnabled: true + snapMode: Slider.SnapAlways } RowLayout { Layout.fillWidth: true Label { Layout.alignment: Qt.AlignLeft visible: !isPopup || viewMode.currentIndex === 1 text: i18n("Small") } Item { Layout.fillWidth: true } Label { Layout.alignment: Qt.AlignRight visible: !isPopup || viewMode.currentIndex === 1 text: i18n("Large") } } ComboBox { id: labelWidth visible: !isPopup || viewMode.currentIndex === 1 Kirigami.FormData.label: i18n("Label width:") model: [ i18n("Narrow"), i18n("Medium"), i18n("Wide") ] } SpinBox { id: textLines visible: !isPopup || viewMode.currentIndex === 1 Kirigami.FormData.label: i18n("Text lines:") - minimumValue: 1 - maximumValue: 10 + from: 1 + to: 10 stepSize: 1 } Item { Kirigami.FormData.isSection: true } // Features section CheckBox { id: toolTips Kirigami.FormData.label: i18n("Features:") text: i18n("Tooltips") } CheckBox { id: selectionMarkers visible: Qt.styleHints.singleClickActivation text: i18n("Selection markers") } CheckBox { id: popups visible: !isPopup text: i18n("Folder preview popups") } CheckBox { id: previews text: i18n("Preview thumbnails") } Button { id: previewSettings - text: i18n("More Preview Options...") + icon.name: "configure" + text: i18n("Configure Preview Plugins...") onClicked: { previewPluginsDialog.visible = true; } } } FolderItemPreviewPluginsDialog { id: previewPluginsDialog } } diff --git a/containments/desktop/package/contents/ui/ConfigLocation.qml b/containments/desktop/package/contents/ui/ConfigLocation.qml index 84668a44b..078037fcc 100644 --- a/containments/desktop/package/contents/ui/ConfigLocation.qml +++ b/containments/desktop/package/contents/ui/ConfigLocation.qml @@ -1,227 +1,212 @@ /*************************************************************************** * Copyright (C) 2014 by Eike Hein * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * ***************************************************************************/ -import QtQuick 2.0 -import QtQuick.Controls 1.0 +import QtQuick 2.5 +import QtQuick.Controls 2.5 import QtQuick.Layouts 1.0 import org.kde.plasma.plasmoid 2.0 -import org.kde.kirigami 2.4 as Kirigami +import org.kde.kirigami 2.5 as Kirigami import org.kde.private.desktopcontainment.folder 0.1 as Folder Item { id: configLocation - width: childrenRect.width - height: childrenRect.height - property string cfg_url property alias cfg_labelMode: labelMode.currentIndex property alias cfg_labelText: labelText.text property bool titleVisible: !("containmentType" in plasmoid) onCfg_urlChanged: applyConfig() function applyConfig(force) { - if (!force && locationGroup.current != null) { + if (!force && locationGroup.checkedButton != null) { return; } if (cfg_url == "desktop:/") { locationDesktop.checked = true; locationCustomValue.text = ""; } else if (cfg_url == "activities:/current/") { locationCurrentActivity.checked = true; locationCustomValue.text = ""; } else { var placeForUrl = placesModel.indexForUrl(cfg_url); if (placeForUrl !== -1) { locationPlace.checked = true; locationPlaceValue.currentIndex = placeForUrl; locationCustomValue.text = ""; } else { locationCustom.checked = true; locationCustomValue.text = cfg_url; } } locationPlaceValue.enabled = locationPlace.checked; } Folder.PlacesModel { id: placesModel showDesktopEntry: false onPlacesChanged: applyConfig(true) } - ExclusiveGroup { + ButtonGroup { id: locationGroup - onCurrentChanged: { - if (current == locationDesktop) { + buttons: [locationDesktop, locationCurrentActivity, locationPlace, locationCustom] + + onCheckedButtonChanged: { + if (checkedButton == locationDesktop) { cfg_url = "desktop:/"; - } else if (current == locationCurrentActivity) { + } else if (checkedButton == locationCurrentActivity) { cfg_url = "activities:/current/"; } } } Kirigami.FormLayout { anchors.horizontalCenter: parent.horizontalCenter RadioButton { id: locationDesktop Kirigami.FormData.label: i18n("Show:") text: i18n("Desktop folder") - exclusiveGroup: locationGroup } RadioButton { id: locationCurrentActivity visible: placesModel.activityLinkingEnabled text: i18n("Files linked to the current activity") - exclusiveGroup: locationGroup } - RadioButton { - id: locationPlace - - text: i18n("Places panel item:") + RowLayout { + RadioButton { + id: locationPlace - exclusiveGroup: locationGroup + text: i18n("Places panel item:") - onCheckedChanged: { - locationPlaceValue.enabled = checked; + onCheckedChanged: { + locationPlaceValue.enabled = checked; + } } - } - RowLayout { - Layout.fillWidth: true - Item { - width: units.largeSpacing - } ComboBox { id: locationPlaceValue Layout.fillWidth: true model: placesModel textRole: "display" enabled: true onEnabledChanged: { if (enabled && currentIndex != -1) { cfg_url = placesModel.urlForIndex(currentIndex); } } onActivated: { cfg_url = placesModel.urlForIndex(index); } } } - RadioButton { - id: locationCustom - - exclusiveGroup: locationGroup - text: i18n("Custom location:") - } - RowLayout { - Layout.fillWidth: true - Item { - width: units.largeSpacing + RadioButton { + id: locationCustom + + text: i18n("Custom location:") } + TextField { id: locationCustomValue enabled: locationCustom.checked Layout.fillWidth: true - placeholderText: i18n("Type a path or a URL here") + placeholderText: i18n("Type path or URL...") onEnabledChanged: { if (enabled && text != "") { cfg_url = text; } } onTextChanged: { if (enabled) { cfg_url = text; } } } Button { - iconName: "document-open" + icon.name: "document-open" enabled: locationCustom.checked onClicked: { directoryPicker.open(); } } Folder.DirectoryPicker { id: directoryPicker onUrlChanged: { locationCustomValue.text = url; } } } Item { visible: titleVisible Kirigami.FormData.isSection: true } ComboBox { id: labelMode visible: titleVisible - Layout.fillWidth: true Kirigami.FormData.label: i18n("Title:") model: [i18n("None"), i18n("Default"), i18n("Full path"), i18n("Custom title")] } RowLayout { - Layout.fillWidth: true visible: titleVisible Item { width: units.largeSpacing } + TextField { id: labelText Layout.fillWidth: true enabled: (labelMode.currentIndex == 3) - placeholderText: i18n("Enter custom title here") + placeholderText: i18n("Enter custom title...") } } } } diff --git a/containments/folder/metadata.desktop b/containments/folder/metadata.desktop index d7c9f08d2..d9bd66eea 100644 --- a/containments/folder/metadata.desktop +++ b/containments/folder/metadata.desktop @@ -1,112 +1,112 @@ [Desktop Entry] Name=Folder View Name[ar]=عرض المجلّد Name[ca]=Vista de carpeta Name[ca@valencia]=Vista de carpeta Name[cs]=Pohled na složku Name[da]=Mappevisning Name[de]=Ordner-Ansicht Name[el]=Προβολή φακέλου Name[en_GB]=Folder View Name[es]=Vista de carpetas Name[et]=Kataloogivaade Name[eu]=Karpeta ikuspegia Name[fi]=Kansionäkymä Name[fr]=Vue de dossier Name[gl]=Vista de cartafoles Name[he]=הצגת תיקיות Name[hu]=Mappanézet Name[id]=Tampilan Folder Name[is]=Möppusýn Name[it]=Vista delle cartelle Name[ja]=フォルダビュー Name[ko]=폴더 보기 Name[lt]=Aplanko rodymas Name[nl]=Mapweergave Name[nn]=Mappevising Name[pa]=ਫੋਲਡਰ ਝਲਕ Name[pl]=Widok katalogu Name[pt]=Vista da Pasta Name[pt_BR]=Visualização de Pastas Name[ru]=Просмотр папки Name[se]=Máhppačájeheapmi Name[sk]=Pohľad priečinka Name[sl]=Prikaz mape Name[sr]=Приказ фасцикле Name[sr@ijekavian]=Приказ фасцикле Name[sr@ijekavianlatin]=Prikaz fascikle Name[sr@latin]=Prikaz fascikle Name[sv]=Katalogvy Name[tr]=Klasör Görünümü Name[uk]=Перегляд теки Name[x-test]=xxFolder Viewxx Name[zh_CN]=文件夹视图 Name[zh_TW]=資料夾檢視 Comment=Display the contents of folders Comment[ar]=اعرض محتويات المجلّدات Comment[bs]=Prikaži sadržaj fascikli Comment[ca]=Mostra el contingut de les carpetes Comment[ca@valencia]=Mostra el contingut de les carpetes Comment[cs]=Zobrazit obsah složek Comment[da]=Vis indholdet af mapper Comment[de]=Ordnerinhalte anzeigen Comment[el]=Εμφάνιση περιεχομένων των φακέλων Comment[en_GB]=Display the contents of folders Comment[es]=Mostrar el contenido de carpetas Comment[et]=Kataloogide sisu näitamine Comment[eu]=Karpeten edukia erakusten du Comment[fi]=Näyttää kansion sisällön Comment[fr]=Afficher le contenu de dossiers Comment[gl]=Mostra o contido dos cartafoles Comment[he]=מציג תוכל של תיקיה Comment[hu]=Megjeleníti a mappák tartalmát Comment[ia]=Monstra le contentos de dossieres -Comment[id]=Tampilkan isi folder +Comment[id]=Tampilkan konten folder Comment[is]=Sýna innihald mappa Comment[it]=Visualizza il contenuto delle cartelle Comment[ja]=フォルダーの内容を表示します Comment[ko]=폴더의 내용 보기 Comment[lt]=Rodyti aplankų turinį Comment[nb]=Vis mappers innhold Comment[nds]=Den Inholt vun Ornern wiesen Comment[nl]=Toon de inhoud van mappen Comment[nn]=Vis innhaldet i mapper Comment[pa]=ਫੋਲਡਰਾਂ ਦੀ ਸਮੱਗਰੀ ਵੇਖਾਓ Comment[pl]=Wyświetla zawartość katalogów Comment[pt]=Mostrar o conteúdo das pastas Comment[pt_BR]=Mostra o conteúdo das pastas Comment[ru]=Вывод содержимого папки Comment[sk]=Zobraziť obsah priečinkov Comment[sl]=Pokaži vsebino map Comment[sr]=Приказ садржаја фасцикле Comment[sr@ijekavian]=Приказ садржаја фасцикле Comment[sr@ijekavianlatin]=Prikaz sadržaja fascikle Comment[sr@latin]=Prikaz sadržaja fascikle Comment[sv]=Visa innehåll i kataloger Comment[tr]=Klasörün içeriklerini görüntüle Comment[uk]=Показ вмісту тек Comment[x-test]=xxDisplay the contents of foldersxx Comment[zh_CN]=显示文件夹的内容 Comment[zh_TW]=顯示資料夾內容 Type=Service Icon=org.kde.plasma.folder X-KDE-ParentApp= X-KDE-ServiceTypes=Plasma/Applet,Plasma/Containment X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml X-Plasma-RootPath=org.kde.desktopcontainment X-Plasma-Provides=org.kde.plasma.filemanagement X-Plasma-RequiredExtensions=LaunchApp,http,localio,networkio X-Plasma-ContainmentType=Desktop X-Plasma-DropMimeTypes=inode/directory X-KDE-PluginInfo-Author=Eike Hein X-KDE-PluginInfo-Email=hein@kde.org X-KDE-PluginInfo-Name=org.kde.plasma.folder X-KDE-PluginInfo-Version=3.0 X-KDE-PluginInfo-Category=File System X-KDE-PluginInfo-Depends= X-KDE-PluginInfo-License=GPL-2.0+ X-KDE-PluginInfo-EnabledByDefault=true diff --git a/containments/panel/contents/ui/ConfigOverlay.qml b/containments/panel/contents/ui/ConfigOverlay.qml index c743f250a..733d2f8ca 100644 --- a/containments/panel/contents/ui/ConfigOverlay.qml +++ b/containments/panel/contents/ui/ConfigOverlay.qml @@ -1,400 +1,412 @@ /* * Copyright 2013 Marco Martin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. */ import QtQuick 2.1 import QtQuick.Layouts 1.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.kquickcontrolsaddons 2.0 MouseArea { id: configurationArea z: 1000 anchors.fill: currentLayout hoverEnabled: true property bool isResizingLeft: false property bool isResizingRight: false property Item currentApplet property int lastX property int lastY readonly property int spacerHandleSize: units.smallSpacing onHeightChanged: tooltip.visible = false; onWidthChanged: tooltip.visible = false; onPositionChanged: { if (currentApplet && currentApplet.applet && currentApplet.applet.pluginName === "org.kde.plasma.panelspacer") { if (plasmoid.formFactor === PlasmaCore.Types.Vertical) { if ((mouse.y - handle.y) < spacerHandleSize || (mouse.y - handle.y) > (handle.height - spacerHandleSize)) { configurationArea.cursorShape = Qt.SizeVerCursor; } else { configurationArea.cursorShape = Qt.ArrowCursor; } } else { if ((mouse.x - handle.x) < spacerHandleSize || (mouse.x - handle.x) > (handle.width - spacerHandleSize)) { configurationArea.cursorShape = Qt.SizeHorCursor; } else { configurationArea.cursorShape = Qt.ArrowCursor; } } } else { configurationArea.cursorShape = Qt.ArrowCursor; } if (pressed) { if (currentApplet && currentApplet.applet.pluginName === "org.kde.plasma.panelspacer") { if (isResizingLeft) { if (plasmoid.formFactor === PlasmaCore.Types.Vertical) { handle.y += (mouse.y - lastY); handle.height = currentApplet.height + (currentApplet.y - handle.y); } else { handle.x += (mouse.x - lastX); handle.width = currentApplet.width + (currentApplet.x - handle.x); } lastX = mouse.x; lastY = mouse.y; return; } else if (isResizingRight) { if (plasmoid.formFactor === PlasmaCore.Types.Vertical) { handle.height = mouse.y - handle.y; } else { handle.width = mouse.x - handle.x; } lastX = mouse.x; lastY = mouse.y; return; } } var padding = units.gridUnit * 3; if (currentApplet && (mouse.x < -padding || mouse.y < -padding || mouse.x > width + padding || mouse.y > height + padding)) { var newCont = plasmoid.containmentAt(mouse.x, mouse.y); if (newCont && newCont !== plasmoid) { var newPos = newCont.mapFromApplet(plasmoid, mouse.x, mouse.y); newCont.addApplet(currentApplet.applet, newPos.x, newPos.y); root.dragOverlay.currentApplet = null; return; } } if (plasmoid.formFactor === PlasmaCore.Types.Vertical) { currentApplet.y += (mouse.y - lastY); handle.y = currentApplet.y; } else { currentApplet.x += (mouse.x - lastX); handle.x = currentApplet.x; } lastX = mouse.x; lastY = mouse.y; var item = currentLayout.childAt(mouse.x, mouse.y); if (item && item !== placeHolder) { placeHolder.width = item.width; placeHolder.height = item.height; placeHolder.parent = configurationArea; var posInItem = mapToItem(item, mouse.x, mouse.y); if ((plasmoid.formFactor === PlasmaCore.Types.Vertical && posInItem.y < item.height/2) || (plasmoid.formFactor !== PlasmaCore.Types.Vertical && posInItem.x < item.width/2)) { root.layoutManager.insertBefore(item, placeHolder); } else { root.layoutManager.insertAfter(item, placeHolder); } } } else { var item = currentLayout.childAt(mouse.x, mouse.y); if (root.dragOverlay && item && item !== lastSpacer) { root.dragOverlay.currentApplet = item; } else { root.dragOverlay.currentApplet = null; } } if (root.dragOverlay.currentApplet) { hideTimer.stop(); tooltip.visible = true; tooltip.raise(); } } onExited: hideTimer.restart(); onCurrentAppletChanged: { if (!currentApplet || !root.dragOverlay.currentApplet) { hideTimer.start(); return; } handle.x = currentApplet.x; handle.y = currentApplet.y; handle.width = currentApplet.width; handle.height = currentApplet.height; } onPressed: { if (!root.dragOverlay.currentApplet) { return; } if (currentApplet.applet.pluginName === "org.kde.plasma.panelspacer") { if (plasmoid.formFactor === PlasmaCore.Types.Vertical) { if ((mouse.y - handle.y) < spacerHandleSize) { configurationArea.isResizingLeft = true; configurationArea.isResizingRight = false; } else if ((mouse.y - handle.y) > (handle.height - spacerHandleSize)) { configurationArea.isResizingLeft = false; configurationArea.isResizingRight = true; } else { configurationArea.isResizingLeft = false; configurationArea.isResizingRight = false; } } else { if ((mouse.x - handle.x) < spacerHandleSize) { configurationArea.isResizingLeft = true; configurationArea.isResizingRight = false; } else if ((mouse.x - handle.x) > (handle.width - spacerHandleSize)) { configurationArea.isResizingLeft = false; configurationArea.isResizingRight = true; } else { configurationArea.isResizingLeft = false; configurationArea.isResizingRight = false; } } } lastX = mouse.x; lastY = mouse.y; placeHolder.width = currentApplet.width; placeHolder.height = currentApplet.height; root.layoutManager.insertBefore(currentApplet, placeHolder); currentApplet.parent = moveAppletLayer; currentApplet.z = 900; } onReleased: { if (!root.dragOverlay.currentApplet) { return; } if (plasmoid.formFactor === PlasmaCore.Types.Vertical) { currentApplet.applet.configuration.length = handle.height; } else { currentApplet.applet.configuration.length = handle.width; } configurationArea.isResizingLeft = false; configurationArea.isResizingRight = false; root.layoutManager.insertBefore(placeHolder, currentApplet); placeHolder.parent = configurationArea; currentApplet.z = 1; handle.x = currentApplet.x; handle.y = currentApplet.y; handle.width = currentApplet.width; handle.height = currentApplet.height; root.layoutManager.save(); } Item { id: placeHolder visible: configurationArea.containsMouse Layout.fillWidth: currentApplet ? currentApplet.Layout.fillWidth : false Layout.fillHeight: currentApplet ? currentApplet.Layout.fillHeight : false } Timer { id: hideTimer interval: units.longDuration * 3 onTriggered: tooltip.visible = false; } Connections { target: currentApplet onXChanged: handle.x = currentApplet.x onYChanged: handle.y = currentApplet.y onWidthChanged: handle.width = currentApplet.width onHeightChanged: handle.height = currentApplet.height } Rectangle { id: handle visible: configurationArea.containsMouse color: theme.backgroundColor radius: 3 opacity: currentApplet ? 0.5 : 0 PlasmaCore.IconItem { source: "transform-move" width: Math.min(parent.width, parent.height) height: width anchors.centerIn: parent } Rectangle { anchors { left: parent.left top: parent.top bottom: (plasmoid.formFactor !== PlasmaCore.Types.Vertical) ? parent.bottom : undefined right: (plasmoid.formFactor !== PlasmaCore.Types.Vertical) ? undefined : parent.right } visible: currentApplet && currentApplet.applet.pluginName === "org.kde.plasma.panelspacer" opacity: visible && !xAnim.running && !yAnim.running ? 1.0 : 0 width: configurationArea.spacerHandleSize height: configurationArea.spacerHandleSize color: theme.textColor Behavior on opacity { NumberAnimation { duration: units.longDuration easing.type: Easing.InOutQuad } } } Rectangle { anchors { right: parent.right top: (plasmoid.formFactor !== PlasmaCore.Types.Vertical) ? parent.top : undefined bottom: parent.bottom left: (plasmoid.formFactor !== PlasmaCore.Types.Vertical) ? undefined : parent.left } visible: currentApplet && currentApplet.applet.pluginName === "org.kde.plasma.panelspacer" opacity: visible && !xAnim.running && !yAnim.running ? 1.0 : 0 width: configurationArea.spacerHandleSize height: configurationArea.spacerHandleSize color: theme.textColor Behavior on opacity { NumberAnimation { duration: units.longDuration easing.type: Easing.InOutQuad } } } Behavior on x { enabled: !configurationArea.pressed NumberAnimation { id: xAnim duration: units.longDuration easing.type: Easing.InOutQuad } } Behavior on y { id: yAnim enabled: !configurationArea.pressed NumberAnimation { duration: units.longDuration easing.type: Easing.InOutQuad } } Behavior on width { enabled: !configurationArea.pressed NumberAnimation { duration: units.longDuration easing.type: Easing.InOutQuad } } Behavior on height { enabled: !configurationArea.pressed NumberAnimation { duration: units.longDuration easing.type: Easing.InOutQuad } } Behavior on opacity { NumberAnimation { duration: units.longDuration easing.type: Easing.InOutQuad } } } PlasmaCore.Dialog { id: tooltip visualParent: currentApplet type: PlasmaCore.Dialog.Dock flags: Qt.WindowStaysOnTopHint|Qt.WindowDoesNotAcceptFocus|Qt.BypassWindowManagerHint location: plasmoid.location onVisualParentChanged: { if (visualParent) { + currentApplet.applet.prepareContextualActions(); + alternativesButton.visible = currentApplet.applet.action("alternatives") && currentApplet.applet.action("alternatives").enabled; configureButton.visible = currentApplet.applet.action("configure") && currentApplet.applet.action("configure").enabled; closeButton.visible = currentApplet.applet.action("remove") && currentApplet.applet.action("remove").enabled; label.text = currentApplet.applet.title; } } mainItem: MouseArea { enabled: currentApplet width: handleButtons.width height: handleButtons.height hoverEnabled: true onEntered: hideTimer.stop(); onExited: hideTimer.restart(); ColumnLayout { id: handleButtons spacing: units.smallSpacing PlasmaExtras.Heading { id: label level: 3 Layout.fillWidth: true Layout.leftMargin: units.smallSpacing * 2 Layout.rightMargin: units.smallSpacing * 2 } PlasmaComponents.ToolButton { id: configureButton Layout.fillWidth: true iconSource: "configure" text: i18n("Configure...") onClicked: { tooltip.visible = false; currentApplet.applet.action("configure").trigger() } } + PlasmaComponents.ToolButton { + id: alternativesButton + Layout.fillWidth: true + iconSource: "widget-alternatives" + text: i18n("Show Alternatives...") + onClicked: { + tooltip.visible = false; + currentApplet.applet.action("alternatives").trigger() + } + } PlasmaComponents.ToolButton { id: closeButton Layout.fillWidth: true iconSource: "delete" text: i18n("Remove") onClicked: { tooltip.visible = false; currentApplet.applet.action("remove").trigger(); } } } } } } diff --git a/desktoppackage/contents/configuration/AppletConfiguration.qml b/desktoppackage/contents/configuration/AppletConfiguration.qml index def2321ff..c093881d9 100644 --- a/desktoppackage/contents/configuration/AppletConfiguration.qml +++ b/desktoppackage/contents/configuration/AppletConfiguration.qml @@ -1,421 +1,426 @@ /* * Copyright 2013 Marco Martin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. */ import QtQuick 2.6 import QtQuick.Dialogs 1.1 import QtQuick.Controls 2.3 as QtControls import QtQuick.Layouts 1.0 import QtQuick.Window 2.2 import org.kde.kirigami 2.5 as Kirigami import org.kde.plasma.core 2.1 as PlasmaCore import org.kde.plasma.configuration 2.0 //TODO: all of this will be done with desktop components Rectangle { id: root Layout.minimumWidth: units.gridUnit * 30 Layout.minimumHeight: units.gridUnit * 20 LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft LayoutMirroring.childrenInherit: true //BEGIN properties color: Kirigami.Theme.backgroundColor width: units.gridUnit * 40 height: units.gridUnit * 30 property bool isContainment: false //END properties //BEGIN model property ConfigModel globalConfigModel: globalAppletConfigModel ConfigModel { id: globalAppletConfigModel ConfigCategory { name: i18nd("plasma_shell_org.kde.plasma.desktop", "Keyboard Shortcuts") icon: "preferences-desktop-keyboard" source: "ConfigurationShortcuts.qml" } } PlasmaCore.SortFilterModel { id: configDialogFilterModel sourceModel: configDialog.configModel filterRole: "visible" filterCallback: function(source_row, value) { return value; } } //END model //BEGIN functions function saveConfig() { if (pageStack.currentItem.saveConfig) { pageStack.currentItem.saveConfig() } for (var key in plasmoid.configuration) { if (pageStack.currentItem["cfg_"+key] !== undefined) { plasmoid.configuration[key] = pageStack.currentItem["cfg_"+key] } } } function settingValueChanged() { applyButton.enabled = true; } //END functions //BEGIN connections Component.onCompleted: { if (!isContainment && configDialog.configModel && configDialog.configModel.count > 0) { if (configDialog.configModel.get(0).source) { pageStack.sourceFile = configDialog.configModel.get(0).source } else if (configDialog.configModel.get(0).kcm) { pageStack.sourceFile = Qt.resolvedUrl("ConfigurationKcmPage.qml"); pageStack.currentItem.kcm = configDialog.configModel.get(0).kcm; } else { pageStack.sourceFile = ""; } pageStack.title = configDialog.configModel.get(0).name } else { pageStack.sourceFile = globalConfigModel.get(0).source pageStack.title = globalConfigModel.get(0).name } // root.width = pageStackColumn.implicitWidth // root.height = pageStackColumn.implicitHeight } //END connections //BEGIN UI components MessageDialog { id: messageDialog icon: StandardIcon.Warning property Item delegate title: i18nd("plasma_shell_org.kde.plasma.desktop", "Apply Settings") text: i18nd("plasma_shell_org.kde.plasma.desktop", "The settings of the current module have changed. Do you want to apply the changes or discard them?") standardButtons: StandardButton.Apply | StandardButton.Discard | StandardButton.Cancel onApply: { applyAction.trigger() delegate.openCategory() } onDiscard: { delegate.openCategory() } } ColumnLayout { id: pageStackColumn anchors { fill: parent margins: pageStackColumn.spacing * units.devicePixelRatio //margins are hardcoded in QStyle we should match that here } property int implicitWidth: Math.max(contentRow.implicitWidth, buttonsRow.implicitWidth) + 8 property int implicitHeight: contentRow.implicitHeight + buttonsRow.implicitHeight + 8 RowLayout { id: contentRow spacing: 0 Layout.fillWidth: true Layout.fillHeight: true Layout.preferredHeight: parent.height - buttonsRow.height QtControls.ScrollView { id: categoriesScroll QtControls.ScrollBar.horizontal.policy: QtControls.ScrollBar.AlwaysOff Layout.fillHeight: true visible: (configDialog.configModel ? configDialog.configModel.count : 0) + globalConfigModel.count > 1 Layout.maximumWidth: units.gridUnit * 7 Layout.preferredWidth: categories.implicitWidth Keys.onUpPressed: { var buttons = categories.children var foundPrevious = false for (var i = buttons.length - 1; i >= 0; --i) { var button = buttons[i]; if (!button.hasOwnProperty("current")) { // not a ConfigCategoryDelegate continue; } if (foundPrevious) { button.openCategory() return } else if (button.current) { foundPrevious = true } } } Keys.onDownPressed: { var buttons = categories.children var foundNext = false for (var i = 0, length = buttons.length; i < length; ++i) { var button = buttons[i]; console.log(button) if (!button.hasOwnProperty("current")) { continue; } if (foundNext) { button.openCategory() return } else if (button.current) { foundNext = true } } } - ColumnLayout { - id: categories - spacing: 0 - width: categoriesScroll.width - - property Item currentItem: children[1] - - Repeater { - model: root.isContainment ? globalConfigModel : undefined - delegate: ConfigCategoryDelegate {} - } - Repeater { - model: configDialogFilterModel - delegate: ConfigCategoryDelegate {} - } - Repeater { - model: !root.isContainment ? globalConfigModel : undefined - delegate: ConfigCategoryDelegate {} + // Encapsulate as ColumnLayout will keep overwriting its own implicitWidth + Item { + implicitWidth: categoriesScroll.Layout.maximumWidth + implicitHeight: categories.implicitHeight + ColumnLayout { + id: categories + spacing: 0 + width: categoriesScroll.width + + property Item currentItem: children[1] + + Repeater { + model: root.isContainment ? globalConfigModel : undefined + delegate: ConfigCategoryDelegate {} + } + Repeater { + model: configDialogFilterModel + delegate: ConfigCategoryDelegate {} + } + Repeater { + model: !root.isContainment ? globalConfigModel : undefined + delegate: ConfigCategoryDelegate {} + } } } } Rectangle { Layout.fillHeight: true width: Math.round(units.devicePixelRatio) color: Kirigami.Theme.highlightColor visible: categoriesScroll.visible opacity: categoriesScroll.activeFocus && Window.active ? 1 : 0.3 Behavior on color { ColorAnimation { duration: units.longDuration easing.type: Easing.InOutQuad } } } Item { // spacer width: units.largeSpacing visible: categoriesScroll.visible } QtControls.ScrollView { id: scroll Layout.fillHeight: true Layout.fillWidth: true // we want to focus the controls in the settings page right away, don't focus the ScrollView activeFocusOnTab: false property Item flickableItem: pageFlickable // this horrible code below ensures the control with active focus stays visible in the window // by scrolling the view up or down as needed when tabbing through the window Window.onActiveFocusItemChanged: { var flickable = scroll.flickableItem; var item = Window.activeFocusItem; if (!item) { return; } // when an item within ScrollView has active focus the ScrollView, // as FocusScope, also has it, so we only scroll in this case if (!scroll.activeFocus) { return; } var padding = units.gridUnit * 2 // some padding to the top/bottom when we scroll var yPos = item.mapToItem(scroll.contentItem, 0, 0).y; if (yPos < flickable.contentY) { flickable.contentY = Math.max(0, yPos - padding); // The "Math.min(padding, item.height)" ensures that we only scroll the item into view // when it's barely visible. The logic was mostly meant for keyboard navigating through // a list of CheckBoxes, so this check keeps us from trying to scroll an inner ScrollView // into view when it implicitly gains focus (like plasma-pa config dialog has). } else if (yPos + Math.min(padding, item.height) > flickable.contentY + flickable.height) { flickable.contentY = Math.min(flickable.contentHeight - flickable.height, yPos - flickable.height + item.height + padding); } } Flickable { id: pageFlickable anchors.fill: parent contentHeight: pageColumn.height contentWidth: width Column { id: pageColumn spacing: units.largeSpacing / 2 Kirigami.Heading { id: pageTitle width: scroll.width level: 1 text: pageStack.title } QtControls.StackView { id: pageStack property string title: "" property bool invertAnimations: false height: Math.max((scroll.height - pageTitle.height - parent.spacing), (pageStack.currentItem ? (pageStack.currentItem.implicitHeight ? pageStack.currentItem.implicitHeight : pageStack.currentItem.childrenRect.height) : 0)) width: scroll.width property string sourceFile onSourceFileChanged: { if (!sourceFile) { return; } //in a StackView pages need to be initialized with stackviews size, or have none var props = {"width": width, "height": height} var plasmoidConfig = plasmoid.configuration for (var key in plasmoidConfig) { props["cfg_" + key] = plasmoid.configuration[key] } var newItem = replace(Qt.resolvedUrl(sourceFile), props) for (var key in plasmoidConfig) { var changedSignal = newItem["cfg_" + key + "Changed"] if (changedSignal) { changedSignal.connect(root.settingValueChanged) } } var configurationChangedSignal = newItem.configurationChanged if (configurationChangedSignal) { configurationChangedSignal.connect(root.settingValueChanged) } applyButton.enabled = false; scroll.flickableItem.contentY = 0 /* * This is not needed on a desktop shell that has ok/apply/cancel buttons, i'll leave it here only for future reference until we have a prototype for the active shell. * root.pageChanged will start a timer, that in turn will call saveConfig() when triggered for (var prop in currentItem) { if (prop.indexOf("cfg_") === 0) { currentItem[prop+"Changed"].connect(root.pageChanged) } }*/ } replaceEnter: Transition { ParallelAnimation { //OpacityAnimator when starting from 0 is buggy (it shows one frame with opacity 1) NumberAnimation { property: "opacity" from: 0 to: 1 duration: units.longDuration easing.type: Easing.InOutQuad } XAnimator { from: pageStack.invertAnimations ? -scroll.width/3: scroll.width/3 to: 0 duration: units.longDuration easing.type: Easing.InOutQuad } } } replaceExit: Transition { ParallelAnimation { OpacityAnimator { from: 1 to: 0 duration: units.longDuration easing.type: Easing.InOutQuad } XAnimator { from: 0 to: pageStack.invertAnimations ? scroll.width/3 : -scroll.width/3 duration: units.longDuration easing.type: Easing.InOutQuad } } } } } } } } QtControls.Action { id: acceptAction onTriggered: { applyAction.trigger(); configDialog.close(); } shortcut: "Return" } QtControls.Action { id: applyAction onTriggered: { root.saveConfig(); applyButton.enabled = false; } } QtControls.Action { id: cancelAction onTriggered: configDialog.close(); shortcut: "Escape" } RowLayout { id: buttonsRow Layout.alignment: Qt.AlignVCenter | Qt.AlignRight QtControls.Button { icon.name: "dialog-ok" text: i18nd("plasma_shell_org.kde.plasma.desktop", "OK") onClicked: acceptAction.trigger() } QtControls.Button { id: applyButton enabled: false icon.name: "dialog-ok-apply" text: i18nd("plasma_shell_org.kde.plasma.desktop", "Apply") visible: pageStack.currentItem && (!pageStack.currentItem.kcm || pageStack.currentItem.kcm.buttons & 4) // 4 = Apply button onClicked: applyAction.trigger() } QtControls.Button { icon.name: "dialog-cancel" text: i18nd("plasma_shell_org.kde.plasma.desktop", "Cancel") onClicked: cancelAction.trigger() } } } //END UI components } diff --git a/desktoppackage/contents/configuration/ConfigurationContainmentAppearance.qml b/desktoppackage/contents/configuration/ConfigurationContainmentAppearance.qml index 711e2385f..5c0cdd895 100644 --- a/desktoppackage/contents/configuration/ConfigurationContainmentAppearance.qml +++ b/desktoppackage/contents/configuration/ConfigurationContainmentAppearance.qml @@ -1,198 +1,199 @@ /* * Copyright 2013 Marco Martin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. */ import QtQuick 2.0 import org.kde.plasma.configuration 2.0 import QtQuick.Controls 2.3 as QtControls import QtQuick.Layouts 1.1 import org.kde.kconfig 1.0 // for KAuthorized import org.kde.plasma.private.shell 2.0 as ShellPrivate // for WallpaperPlugin import org.kde.kirigami 2.5 as Kirigami ColumnLayout { id: root spacing: 0 property int formAlignment: wallpaperComboBox.Kirigami.ScenePosition.x - root.Kirigami.ScenePosition.x + (units.largeSpacing/2) property string currentWallpaper: "" property string containmentPlugin: "" signal configurationChanged //BEGIN functions function saveConfig() { if (main.currentItem.saveConfig) { main.currentItem.saveConfig() } for (var key in configDialog.wallpaperConfiguration) { if (main.currentItem["cfg_"+key] !== undefined) { configDialog.wallpaperConfiguration[key] = main.currentItem["cfg_"+key] } } configDialog.currentWallpaper = root.currentWallpaper; configDialog.applyWallpaper() configDialog.containmentPlugin = root.containmentPlugin } //END functions Component.onCompleted: { for (var i = 0; i < configDialog.containmentPluginsConfigModel.count; ++i) { var data = configDialog.containmentPluginsConfigModel.get(i); if (configDialog.containmentPlugin === data.pluginName) { pluginComboBox.currentIndex = i pluginComboBox.activated(i); break; } } for (var i = 0; i < configDialog.wallpaperConfigModel.count; ++i) { var data = configDialog.wallpaperConfigModel.get(i); if (configDialog.currentWallpaper === data.pluginName) { wallpaperComboBox.currentIndex = i wallpaperComboBox.activated(i); break; } } } Kirigami.InlineMessage { visible: plasmoid.immutable || animating text: i18nd("plasma_shell_org.kde.plasma.desktop", "Layout cannot be changed while widgets are locked") showCloseButton: true Layout.fillWidth: true Layout.leftMargin: Kirigami.Units.smallSpacing Layout.rightMargin: Kirigami.Units.smallSpacing } Kirigami.FormLayout { id: parentLayout // needed for twinFormLayouts to work in wallpaper plugins + twinFormLayouts: main.currentItem.formLayout Layout.fillWidth: true QtControls.ComboBox { id: pluginComboBox Layout.preferredWidth: Math.max(implicitWidth, wallpaperComboBox.implicitWidth) Kirigami.FormData.label: i18nd("plasma_shell_org.kde.plasma.desktop", "Layout:") enabled: !plasmoid.immutable model: configDialog.containmentPluginsConfigModel width: theme.mSize(theme.defaultFont).width * 24 textRole: "name" onActivated: { var model = configDialog.containmentPluginsConfigModel.get(currentIndex) root.containmentPlugin = model.pluginName root.configurationChanged() } } RowLayout { Layout.fillWidth: true visible: !switchContainmentWarning.visible Kirigami.FormData.label: i18nd("plasma_shell_org.kde.plasma.desktop", "Wallpaper Type:") QtControls.ComboBox { id: wallpaperComboBox Layout.preferredWidth: Math.max(implicitWidth, pluginComboBox.implicitWidth) model: configDialog.wallpaperConfigModel width: theme.mSize(theme.defaultFont).width * 24 textRole: "name" onActivated: { var model = configDialog.wallpaperConfigModel.get(currentIndex) root.currentWallpaper = model.pluginName configDialog.currentWallpaper = model.pluginName main.sourceFile = model.source root.configurationChanged() } } QtControls.Button { icon.name: "get-hot-new-stuff" text: i18nd("plasma_shell_org.kde.plasma.desktop", "Get New Plugins...") visible: KAuthorized.authorize("ghns") onClicked: wallpaperPlugin.getNewWallpaperPlugin(this) Layout.preferredHeight: wallpaperComboBox.height ShellPrivate.WallpaperPlugin { id: wallpaperPlugin } } } } ColumnLayout { id: switchContainmentWarning Layout.fillWidth: true visible: configDialog.containmentPlugin !== root.containmentPlugin QtControls.Label { Layout.fillWidth: true text: i18nd("plasma_shell_org.kde.plasma.desktop", "Layout changes must be applied before other changes can be made") wrapMode: Text.Wrap horizontalAlignment: Text.AlignHCenter } QtControls.Button { Layout.alignment: Qt.AlignHCenter text: i18nd("plasma_shell_org.kde.plasma.desktop", "Apply now") onClicked: saveConfig() } Binding { target: categoriesScroll //from parent scope AppletConfiguration property: "enabled" value: !switchContainmentWarning.visible } } Item { Layout.fillHeight: true visible: switchContainmentWarning.visible } Item { id: emptyConfig } QtControls.StackView { id: main Layout.fillHeight: true; Layout.fillWidth: true; visible: !switchContainmentWarning.visible // Bug 360862: if wallpaper has no config, sourceFile will be "" // so we wouldn't load emptyConfig and break all over the place // hence set it to some random value initially property string sourceFile: "tbd" onSourceFileChanged: { if (sourceFile) { var props = {} var wallpaperConfig = configDialog.wallpaperConfiguration for (var key in wallpaperConfig) { props["cfg_" + key] = wallpaperConfig[key] } var newItem = replace(Qt.resolvedUrl(sourceFile), props) for (var key in wallpaperConfig) { var changedSignal = newItem["cfg_" + key + "Changed"] if (changedSignal) { changedSignal.connect(root.configurationChanged) } } } else { replace(emptyConfig) } } } } diff --git a/desktoppackage/contents/configuration/panelconfiguration/ToolBar.qml b/desktoppackage/contents/configuration/panelconfiguration/ToolBar.qml index c1767811c..5bc944d99 100644 --- a/desktoppackage/contents/configuration/panelconfiguration/ToolBar.qml +++ b/desktoppackage/contents/configuration/panelconfiguration/ToolBar.qml @@ -1,385 +1,385 @@ /* * Copyright 2013 Marco Martin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. */ import QtQuick 2.0 -import QtQuick.Controls 1.1 as QQC +import QtQuick.Controls 2.5 as QQC2 import QtQuick.Layouts 1.0 import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.configuration 2.0 import org.kde.kirigami 2.0 as Kirigami Item { id: root state: parent.state implicitWidth: Math.max(buttonsLayout_1.width, buttonsLayout_2.width, row.width) + units.smallSpacing * 2 implicitHeight: row.height + 20 readonly property string lockWidgetsButtonText: i18nd("plasma_shell_org.kde.plasma.desktop", "Lock Widgets") readonly property string removePanelButtonText: i18nd("plasma_shell_org.kde.plasma.desktop", "Remove Panel") readonly property string addWidgetsButtonText: i18nd("plasma_shell_org.kde.plasma.desktop", "Add Widgets...") readonly property string addSpacerButtonText: i18nd("plasma_shell_org.kde.plasma.desktop", "Add Spacer") readonly property string settingsButtonText: i18nd("plasma_shell_org.kde.plasma.desktop", "More Settings...") - QQC.Action { + QQC2.Action { shortcut: "Escape" onTriggered: { // avoid leaving the panel in an inconsistent state when escaping while dragging it // "checked" means "pressed" in this case, we abuse that property to make the button look pressed if (edgeHandle.checked || sizeHandle.checked) { return } if (contextMenuLoader.opened) { contextMenuLoader.close() } else { configDialog.close() } } } GridLayout { id: buttonsLayout_1 rows: 1 columns: 1 flow: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? GridLayout.TopToBottom : GridLayout.LeftToRight anchors.margins: rowSpacing anchors.topMargin: plasmoid.formFactor === PlasmaCore.Types.Vertical ? rowSpacing + closeButton.height : rowSpacing property bool showText: plasmoid.formFactor === PlasmaCore.Types.Vertical || (row.x + row.width < root.width - placeHolder.width - units.iconSizes.small*4 - units.largeSpacing*5) rowSpacing: units.smallSpacing columnSpacing: units.smallSpacing PlasmaComponents.Button { iconSource: "document-encrypt" text: buttonsLayout_1.showText ? root.lockWidgetsButtonText : "" tooltip: buttonsLayout_1.showText ? "" : root.lockWidgetsButtonText Layout.fillWidth: true onClicked: { plasmoid.action("lock widgets").trigger(); configDialog.close(); } } Item { width: units.smallSpacing height: units.smallSpacing } Kirigami.Separator { Layout.fillWidth: true Layout.fillHeight: true } Item { width: units.smallSpacing height: units.smallSpacing } PlasmaComponents.Button { iconSource: "delete" text: buttonsLayout_1.showText ? root.removePanelButtonText : "" tooltip: buttonsLayout_1.showText ? "" : root.removePanelButtonText Layout.fillWidth: true onClicked: { plasmoid.action("remove").trigger(); } } } GridLayout { id: row columns: dialogRoot.vertical ? 1 : 2 rows: dialogRoot.vertical ? 2 : 1 anchors.centerIn: parent rowSpacing: units.smallSpacing columnSpacing: units.smallSpacing EdgeHandle { id: edgeHandle Layout.alignment: Qt.AlignHCenter } SizeHandle { id: sizeHandle Layout.alignment: Qt.AlignHCenter } } PlasmaComponents.Label { id: placeHolder visible: false text: addWidgetsButtonText + addSpacerButtonText + settingsButtonText } Connections { target: configDialog onVisibleChanged: { if (!configDialog.visible) { settingsButton.checked = false } } } GridLayout { id: buttonsLayout_2 rows: 1 columns: 1 flow: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? GridLayout.TopToBottom : GridLayout.LeftToRight anchors.margins: rowSpacing property bool showText: plasmoid.formFactor === PlasmaCore.Types.Vertical || (row.x + row.width < root.width - placeHolder.width - units.iconSizes.small*4 - units.largeSpacing*5) rowSpacing: units.smallSpacing columnSpacing: units.smallSpacing PlasmaComponents.Button { text: buttonsLayout_2.showText ? root.addWidgetsButtonText : "" tooltip: buttonsLayout_2.showText ? "" : root.addWidgetsButtonText iconSource: "list-add" Layout.fillWidth: true onClicked: { configDialog.close(); configDialog.showAddWidgetDialog(); } } PlasmaComponents.Button { iconSource: "distribute-horizontal-x" text: buttonsLayout_2.showText ? root.addSpacerButtonText : "" tooltip: buttonsLayout_2.showText ? "" : root.addSpacerButtonText Layout.fillWidth: true onClicked: { configDialog.addPanelSpacer(); } } PlasmaComponents.Button { id: settingsButton iconSource: "configure" text: buttonsLayout_2.showText ? root.settingsButtonText : "" tooltip: buttonsLayout_2.showText ? "" : root.settingsButtonText Layout.fillWidth: true checkable: true onCheckedChanged: { if (checked) { contextMenuLoader.open() } else { contextMenuLoader.close() } } } PlasmaComponents.ToolButton { id: closeButton parent: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? buttonsLayout_2 : root anchors.right: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? undefined : parent.right iconSource: "window-close" tooltip: i18nd("plasma_shell_org.kde.plasma.desktop", "Close") onClicked: { configDialog.close() } } Loader { id: contextMenuLoader property bool opened: item && item.visible onOpenedChanged: settingsButton.checked = opened source: "MoreSettingsMenu.qml" active: false function open() { active = true item.visible = true } function close() { if (item) { item.visible = false } } } } //BEGIN States states: [ State { name: "TopEdge" PropertyChanges { target: root height: root.implicitHeight } AnchorChanges { target: root anchors { top: undefined bottom: root.parent.bottom left: root.parent.left right: root.parent.right } } AnchorChanges { target: buttonsLayout_1 anchors { verticalCenter: root.verticalCenter top: undefined bottom: undefined left: root.left right: undefined } } AnchorChanges { target: buttonsLayout_2 anchors { verticalCenter: root.verticalCenter top: undefined bottom: undefined left: undefined right: root.right } } PropertyChanges { target: buttonsLayout_1 width: buttonsLayout_1.implicitWidth } PropertyChanges { target: buttonsLayout_2 width: buttonsLayout_2.implicitWidth } }, State { name: "BottomEdge" PropertyChanges { target: root height: root.implicitHeight } AnchorChanges { target: root anchors { top: root.parent.top bottom: undefined left: root.parent.left right: root.parent.right } } AnchorChanges { target: buttonsLayout_1 anchors { verticalCenter: root.verticalCenter top: undefined bottom: undefined left: root.left right: undefined } } AnchorChanges { target: buttonsLayout_2 anchors { verticalCenter: root.verticalCenter top: undefined bottom: undefined left: undefined right: root.right } } PropertyChanges { target: buttonsLayout_1 width: buttonsLayout_1.implicitWidth } PropertyChanges { target: buttonsLayout_2 width: buttonsLayout_2.implicitWidth } }, State { name: "LeftEdge" PropertyChanges { target: root width: root.implicitWidth } AnchorChanges { target: root anchors { top: root.parent.top bottom: root.parent.bottom left: undefined right: root.parent.right } } AnchorChanges { target: buttonsLayout_1 anchors { verticalCenter: undefined top: root.top bottom: undefined left: root.left right: root.right } } AnchorChanges { target: buttonsLayout_2 anchors { verticalCenter: undefined top: undefined bottom: root.bottom left: root.left right: root.right } } }, State { name: "RightEdge" PropertyChanges { target: root width: root.implicitWidth } AnchorChanges { target: root anchors { top: root.parent.top bottom: root.parent.bottom left: root.parent.left right: undefined } } AnchorChanges { target: buttonsLayout_1 anchors { verticalCenter: undefined top: root.top bottom: undefined left: root.left right: root.right } } AnchorChanges { target: buttonsLayout_2 anchors { verticalCenter: undefined top: undefined bottom: root.bottom left: root.left right: root.right } } } ] //END States } diff --git a/desktoppackage/contents/explorer/AppletAlternatives.qml b/desktoppackage/contents/explorer/AppletAlternatives.qml index 2e00624e7..b105f1268 100644 --- a/desktoppackage/contents/explorer/AppletAlternatives.qml +++ b/desktoppackage/contents/explorer/AppletAlternatives.qml @@ -1,192 +1,192 @@ /* * Copyright 2014 Marco Martin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 2.010-1301, USA. */ import QtQuick 2.0 -import QtQuick.Controls 1.0 as QtControls +import QtQuick.Controls 2.5 as QQC2 import QtQuick.Layouts 1.1 import QtQuick.Window 2.1 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.shell 2.0 PlasmaCore.Dialog { id: dialog visualParent: alternativesHelper.applet location: alternativesHelper.applet.location Component.onCompleted: { flags = flags | Qt.WindowStaysOnTopHint; dialog.show(); } ColumnLayout { id: root signal configurationChanged Layout.minimumWidth: units.gridUnit * 20 Layout.minimumHeight: Math.min(Screen.height - units.gridUnit * 10, heading.height + buttonsRow.height + mainList.contentHeight + units.gridUnit) LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft LayoutMirroring.childrenInherit: true property string currentPlugin // we don't want a binding here, just set it to the current plugin once Component.onCompleted: currentPlugin = alternativesHelper.currentPlugin - QtControls.Action { + QQC2.Action { shortcut: "Escape" onTriggered: dialog.close() } - QtControls.Action { + QQC2.Action { shortcut: "Return" onTriggered: switchButton.clicked(null) } - QtControls.Action { + QQC2.Action { shortcut: "Enter" onTriggered: switchButton.clicked(null) } - QtControls.Action { + QQC2.Action { shortcut: "Up" onTriggered: mainList.decrementCurrentIndex() } - QtControls.Action { + QQC2.Action { shortcut: "Down" onTriggered: mainList.incrementCurrentIndex() } WidgetExplorer { id: widgetExplorer provides: alternativesHelper.appletProvides } PlasmaExtras.Heading { id: heading text: i18nd("plasma_shell_org.kde.plasma.desktop", "Alternative Widgets"); } // HACK for some reason initially setting the index does not work // I tried setting it in Component.onCompleted of either delegate and list // but that did not help either, hence the Timer as a last resort Timer { id: setCurrentIndexTimer property int desiredIndex: 0 interval: 0 onTriggered: mainList.currentIndex = desiredIndex } PlasmaExtras.ScrollArea { id: scrollArea Layout.fillWidth: true Layout.fillHeight: true Layout.preferredHeight: mainList.height ListView { id: mainList model: widgetExplorer.widgetsModel boundsBehavior: Flickable.StopAtBounds highlight: PlasmaComponents.Highlight { id: highlight } highlightMoveDuration : 0 highlightResizeDuration: 0 delegate: PlasmaComponents.ListItem { enabled: true onClicked: mainList.currentIndex = index Component.onCompleted: { if (model.pluginName === alternativesHelper.currentPlugin) { setCurrentIndexTimer.desiredIndex = index setCurrentIndexTimer.restart() } } Connections { target: mainList onCurrentIndexChanged: { if (mainList.currentIndex === index) { root.currentPlugin = model.pluginName } } } RowLayout { x: 2 * units.smallSpacing width: parent.width - 2 * x spacing: units.largeSpacing PlasmaCore.IconItem { Layout.preferredWidth: units.iconSizes.huge Layout.preferredHeight: units.iconSizes.huge source: model.decoration } ColumnLayout { height: parent.height Layout.fillWidth: true PlasmaExtras.Heading { level: 4 Layout.fillWidth: true text: model.name wrapMode: Text.NoWrap elide: Text.ElideRight } PlasmaComponents.Label { Layout.fillWidth: true text: model.description font.pointSize: theme.smallestFont.pointSize maximumLineCount: 2 wrapMode: Text.WordWrap elide: Text.ElideRight } } } } } } RowLayout { id: buttonsRow Layout.fillWidth: true PlasmaComponents.Button { id: switchButton enabled: root.currentPlugin !== alternativesHelper.currentPlugin Layout.fillWidth: true text: i18nd("plasma_shell_org.kde.plasma.desktop", "Switch"); onClicked: { if (enabled) { alternativesHelper.loadAlternative(root.currentPlugin); dialog.close(); } } } PlasmaComponents.Button { id: cancelButton Layout.fillWidth: true text: i18nd("plasma_shell_org.kde.plasma.desktop", "Cancel"); onClicked: { dialog.close(); } } } } } diff --git a/desktoppackage/contents/explorer/AppletDelegate.qml b/desktoppackage/contents/explorer/AppletDelegate.qml index eff13f098..d6484f9b7 100644 --- a/desktoppackage/contents/explorer/AppletDelegate.qml +++ b/desktoppackage/contents/explorer/AppletDelegate.qml @@ -1,234 +1,234 @@ /* * Copyright 2011 Marco Martin * Copyright 2015 Kai Uwe Broulik * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import QtQuick 2.4 import QtQuick.Layouts 1.1 import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.extras 2.0 as PlasmaExtras import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.draganddrop 2.0 Item { id: delegate readonly property string pluginName: model.pluginName readonly property bool pendingUninstall: pendingUninstallTimer.applets.indexOf(pluginName) > -1 width: list.cellWidth height: list.cellHeight DragArea { anchors.fill: parent supportedActions: Qt.MoveAction | Qt.LinkAction //onDragStarted: tooltipDialog.visible = false delegateImage: decoration enabled: !delegate.pendingUninstall mimeData { source: parent } Component.onCompleted: mimeData.setData("text/x-plasmoidservicename", pluginName) onDragStarted: { kwindowsystem.showingDesktop = true; main.draggingWidget = true; } onDrop: { main.draggingWidget = false; } MouseArea { id: mouseArea anchors.fill: parent hoverEnabled: true onDoubleClicked: { if (!delegate.pendingUninstall) { widgetExplorer.addApplet(pluginName) } } onEntered: list.currentIndex = index onExited: list.currentIndex = -1 } ColumnLayout { id: mainLayout spacing: units.smallSpacing anchors { left: parent.left right: parent.right //bottom: parent.bottom margins: units.smallSpacing * 2 rightMargin: units.smallSpacing * 2 // don't cram the text to the border too much top: parent.top } Item { id: iconContainer width: units.iconSizes.enormous height: width Layout.alignment: Qt.AlignHCenter opacity: delegate.pendingUninstall ? 0.6 : 1 Behavior on opacity { OpacityAnimator { duration: units.longDuration easing.type: Easing.InOutQuad } } Item { id: iconWidget anchors.fill: parent PlasmaCore.IconItem { anchors.fill: parent source: model.decoration visible: model.screenshot === "" } Image { width: units.iconSizes.enormous height: width anchors.fill: parent fillMode: Image.PreserveAspectFit source: model.screenshot } } Item { id: badgeMask anchors.fill: parent Rectangle { x: Math.round(-units.smallSpacing * 1.5 / 2) y: x width: runningBadge.width + Math.round(units.smallSpacing * 1.5) height: width radius: height visible: running } } Rectangle { id: runningBadge width: height height: Math.round(theme.mSize(countLabel.font).height * 1.3) radius: height color: theme.highlightColor visible: running onVisibleChanged: maskShaderSource.scheduleUpdate() PlasmaComponents.Label { id: countLabel anchors.fill: parent horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter text: running } } ShaderEffect { anchors.fill: parent property var source: ShaderEffectSource { sourceItem: iconWidget hideSource: true live: false } property var mask: ShaderEffectSource { id: maskShaderSource sourceItem: badgeMask hideSource: true live: false } supportsAtlasTextures: true fragmentShader: " varying highp vec2 qt_TexCoord0; uniform highp float qt_Opacity; uniform lowp sampler2D source; uniform lowp sampler2D mask; void main() { gl_FragColor = texture2D(source, qt_TexCoord0.st) * (1.0 - (texture2D(mask, qt_TexCoord0.st).a)) * qt_Opacity; } " } PlasmaComponents.ToolButton { id: uninstallButton anchors { top: parent.top right: parent.right } - iconSource: delegate.pendingUninstall ? "edit-undo" : "list-remove" + iconSource: delegate.pendingUninstall ? "edit-undo" : "edit-delete" // we don't really "undo" anything but we'll pretend to the user that we do tooltip: delegate.pendingUninstall ? i18nd("plasma_shell_org.kde.plasma.desktop", "Undo uninstall") : i18nd("plasma_shell_org.kde.plasma.desktop", "Uninstall widget") flat: false visible: model.local onHoveredChanged: { if (hovered) { // hovering the uninstall button triggers onExited of the main mousearea list.currentIndex = index } } onClicked: { var pending = pendingUninstallTimer.applets if (delegate.pendingUninstall) { var index = pending.indexOf(pluginName) if (index > -1) { pending.splice(index, 1) } } else { pending.push(pluginName) } pendingUninstallTimer.applets = pending if (pending.length) { pendingUninstallTimer.restart() } else { pendingUninstallTimer.stop() } } } } PlasmaExtras.Heading { id: heading Layout.fillWidth: true level: 4 text: model.name elide: Text.ElideRight wrapMode: Text.WordWrap maximumLineCount: 2 lineHeight: 0.95 horizontalAlignment: Text.AlignHCenter } PlasmaComponents.Label { Layout.fillWidth: true // otherwise causes binding loop due to the way the Plasma sets the height height: implicitHeight text: model.description font.pointSize: theme.smallestFont.pointSize wrapMode: Text.WordWrap elide: Text.ElideRight maximumLineCount: heading.lineCount === 1 ? 3 : 2 horizontalAlignment: Text.AlignHCenter } } } } diff --git a/desktoppackage/contents/explorer/WidgetExplorer.qml b/desktoppackage/contents/explorer/WidgetExplorer.qml index d341f7c65..2f3412336 100644 --- a/desktoppackage/contents/explorer/WidgetExplorer.qml +++ b/desktoppackage/contents/explorer/WidgetExplorer.qml @@ -1,378 +1,378 @@ /* * Copyright 2011 Marco Martin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details * * You should have received a copy of the GNU Library General Public * License along with this program; if not, write to the * Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import QtQuick 2.7 -import QtQuick.Controls 1.1 +import QtQuick.Controls 2.5 as QQC2 import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.extras 2.0 as PlasmaExtras import org.kde.kquickcontrolsaddons 2.0 import org.kde.kwindowsystem 1.0 import QtQuick.Window 2.1 import QtQuick.Layouts 1.1 import org.kde.plasma.private.shell 2.0 Item { id: main width: Math.max(heading.paintedWidth, units.iconSizes.enormous * 2 + units.smallSpacing * 4 + units.gridUnit * 2) height: 800//Screen.height opacity: draggingWidget ? 0.3 : 1 property QtObject containment //external drop events can cause a raise event causing us to lose focus and //therefore get deleted whilst we are still in a drag exec() //this is a clue to the owning dialog that hideOnWindowDeactivate should be deleted //See https://bugs.kde.org/show_bug.cgi?id=332733 property bool preventWindowHide: draggingWidget || categoriesDialog.status !== PlasmaComponents.DialogStatus.Closed || getWidgetsDialog.status !== PlasmaComponents.DialogStatus.Closed property bool outputOnly: draggingWidget property Item categoryButton property bool draggingWidget: false signal closed() onVisibleChanged: { if (!visible) { kwindowsystem.showingDesktop = false } } Component.onCompleted: { if (!root.widgetExplorer) { root.widgetExplorer = widgetExplorerComponent.createObject(root) } root.widgetExplorer.containment = main.containment } Component.onDestruction: { if (pendingUninstallTimer.running) { // we're not being destroyed so at least reset the filters widgetExplorer.widgetsModel.filterQuery = "" widgetExplorer.widgetsModel.filterType = "" widgetExplorer.widgetsModel.searchTerm = "" } else { root.widgetExplorer.destroy() root.widgetExplorer = null } } function addCurrentApplet() { var pluginName = list.currentItem ? list.currentItem.pluginName : "" if (pluginName) { widgetExplorer.addApplet(pluginName) } } KWindowSystem { id: kwindowsystem } - Action { + QQC2.Action { shortcut: "Escape" onTriggered: { if (searchInput.length > 0) { searchInput.text = "" } else { main.closed() } } } - Action { + QQC2.Action { shortcut: "Up" onTriggered: list.currentIndex = (list.count + list.currentIndex - 1) % list.count } - Action { + QQC2.Action { shortcut: "Down" onTriggered: list.currentIndex = (list.currentIndex + 1) % list.count } - Action { + QQC2.Action { shortcut: "Enter" onTriggered: addCurrentApplet() } - Action { + QQC2.Action { shortcut: "Return" onTriggered: addCurrentApplet() } Component { id: widgetExplorerComponent WidgetExplorer { //view: desktop onShouldClose: main.closed(); } } PlasmaComponents.ModelContextMenu { id: categoriesDialog visualParent: categoryButton // model set on first invocation onClicked: { list.contentX = 0 list.contentY = 0 categoryButton.text = (model.filterData ? model.display : "") widgetExplorer.widgetsModel.filterQuery = model.filterData widgetExplorer.widgetsModel.filterType = model.filterType } } PlasmaComponents.ModelContextMenu { id: getWidgetsDialog visualParent: getWidgetsButton placement: PlasmaCore.Types.TopPosedLeftAlignedPopup // model set on first invocation onClicked: model.trigger() } /* PlasmaCore.Dialog { id: tooltipDialog property Item appletDelegate location: PlasmaCore.Types.RightEdge //actually we want this to be the opposite location of the explorer itself type: PlasmaCore.Dialog.Tooltip flags:Qt.Window|Qt.WindowStaysOnTopHint|Qt.X11BypassWindowManagerHint onAppletDelegateChanged: { if (!appletDelegate) { toolTipHideTimer.restart() toolTipShowTimer.running = false } else if (tooltipDialog.visible) { tooltipDialog.visualParent = appletDelegate } else { tooltipDialog.visualParent = appletDelegate toolTipShowTimer.restart() toolTipHideTimer.running = false } } mainItem: Tooltip { id: tooltipWidget } Behavior on y { NumberAnimation { duration: units.longDuration } } } Timer { id: toolTipShowTimer interval: 500 repeat: false onTriggered: { tooltipDialog.visible = true } } Timer { id: toolTipHideTimer interval: 1000 repeat: false onTriggered: tooltipDialog.visible = false } */ RowLayout { id: topBar anchors { top: parent.top left: parent.left right: parent.right } Item { id: header Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter PlasmaExtras.Title { id: heading anchors.verticalCenter: parent.verticalCenter text: i18nd("plasma_shell_org.kde.plasma.desktop", "Widgets") width: parent.width elide: Text.ElideRight } } PlasmaComponents.ToolButton { id: categoryButton tooltip: i18nd("plasma_shell_org.kde.plasma.desktop", "Categories") iconSource: "view-filter" onClicked: { categoriesDialog.model = widgetExplorer.filterModel categoriesDialog.open(0, categoryButton.height) } } PlasmaComponents.ToolButton { id: closeButton iconSource: "window-close" onClicked: main.closed() } } RowLayout { id: newSearchRow anchors.top: topBar.bottom anchors.topMargin: units.smallSpacing width: topBar.width PlasmaComponents.TextField { id: searchInput Layout.fillWidth: true clearButtonShown: true placeholderText: i18nd("plasma_shell_org.kde.plasma.desktop", "Search...") onTextChanged: { list.positionViewAtBeginning() list.currentIndex = -1 widgetExplorer.widgetsModel.searchTerm = text } Component.onCompleted: forceActiveFocus() } } Timer { id: setModelTimer interval: 20 running: true onTriggered: list.model = widgetExplorer.widgetsModel } PlasmaExtras.ScrollArea { anchors { top: newSearchRow.bottom left: parent.left right: parent.right bottom: bottomBar.top bottomMargin: units.smallSpacing topMargin: units.smallSpacing } verticalScrollBarPolicy: Qt.ScrollBarAlwaysOn // hide the flickering by fading in nicely opacity: setModelTimer.running ? 0 : 1 Behavior on opacity { OpacityAnimator { duration: units.longDuration easing.type: Easing.InOutQuad } } GridView { id: list // model set delayed by Timer above activeFocusOnTab: true keyNavigationWraps: true cellWidth: (width - units.smallSpacing) / 2 cellHeight: cellWidth + units.gridUnit * 4 + units.smallSpacing * 2 delegate: AppletDelegate {} highlight: PlasmaComponents.Highlight {} highlightMoveDuration: 0 //highlightResizeDuration: 0 //slide in to view from the left add: Transition { NumberAnimation { properties: "x" from: -list.width to: 0 duration: units.shortDuration * 3 } } //slide out of view to the right remove: Transition { NumberAnimation { properties: "x" to: list.width duration: units.shortDuration * 3 } } //if we are adding other items into the view use the same animation as normal adding //this makes everything slide in together //if we make it move everything ends up weird addDisplaced: list.add //moved due to filtering displaced: Transition { NumberAnimation { properties: "y" duration: units.shortDuration * 3 } } } } Column { id: bottomBar anchors { left: parent.left right: parent.right bottom: parent.bottom } spacing: units.smallSpacing PlasmaComponents.Button { id: getWidgetsButton anchors { left: parent.left right: parent.right } iconSource: "get-hot-new-stuff" - text: i18nd("plasma_shell_org.kde.plasma.desktop", "Get new widgets") + text: i18nd("plasma_shell_org.kde.plasma.desktop", "Get New Widgets...") onClicked: { getWidgetsDialog.model = widgetExplorer.widgetsMenuActions getWidgetsDialog.openRelative() } } /* TODO: WidgetExplorer.extraActions is unimplemented Repeater { model: widgetExplorer.extraActions.length PlasmaComponents.Button { anchors { left: parent.left right: parent.right } iconSource: widgetExplorer.extraActions[modelData].icon text: widgetExplorer.extraActions[modelData].text onClicked: widgetExplorer.extraActions[modelData].trigger() } } */ } } diff --git a/kcms/colors/editor/scmeditoroptions.cpp b/kcms/colors/editor/scmeditoroptions.cpp index c2701d860..3f7eb5bdd 100644 --- a/kcms/colors/editor/scmeditoroptions.cpp +++ b/kcms/colors/editor/scmeditoroptions.cpp @@ -1,100 +1,99 @@ /* KDE Display color scheme setup module * Copyright (C) 2007 Matthew Woehlke * Copyright (C) 2007 Jeremy Whiting * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "scmeditoroptions.h" #include #include SchemeEditorOptions::SchemeEditorOptions(KSharedConfigPtr config, QWidget *parent) : QWidget( parent ) , m_config( config ) { setupUi(this); m_disableUpdates = false; loadOptions(); } void SchemeEditorOptions::updateValues() { loadOptions(); } void SchemeEditorOptions::loadOptions() { KConfigGroup generalGroup(KSharedConfig::openConfig(), "General"); shadeSortedColumn->setChecked(generalGroup.readEntry("shadeSortColumn", true)); KConfigGroup KDEgroup(m_config, "KDE"); contrastSlider->setValue(KDEgroup.readEntry("contrast", KColorScheme::contrast())); KConfigGroup group(m_config, "ColorEffects:Inactive"); useInactiveEffects->setChecked(group.readEntry("Enable", false)); // NOTE: keep this in sync with kdelibs/kdeui/colors/kcolorscheme.cpp // NOTE: remove extra logic from updateFromOptions and on_useInactiveEffects_stateChanged when this changes! inactiveSelectionEffect->setChecked(group.readEntry("ChangeSelectionColor", group.readEntry("Enable", true))); } // Option slot void SchemeEditorOptions::on_contrastSlider_valueChanged(int value) { KConfigGroup group(m_config, "KDE"); group.writeEntry("contrast", value); emit changed(true); } void SchemeEditorOptions::on_shadeSortedColumn_stateChanged(int state) { if (m_disableUpdates) return; KConfigGroup group(m_config, "General"); group.writeEntry("shadeSortColumn", bool(state != Qt::Unchecked)); emit changed(true); } void SchemeEditorOptions::on_useInactiveEffects_stateChanged(int state) { KConfigGroup group(m_config, "ColorEffects:Inactive"); group.writeEntry("Enable", bool(state != Qt::Unchecked)); m_disableUpdates = true; - printf("re-init\n"); inactiveSelectionEffect->setChecked(group.readEntry("ChangeSelectionColor", bool(state != Qt::Unchecked))); m_disableUpdates = false; emit changed(true); } void SchemeEditorOptions::on_inactiveSelectionEffect_stateChanged(int state) { if (m_disableUpdates) { // don't write the config as we are reading it! return; } KConfigGroup group(m_config, "ColorEffects:Inactive"); group.writeEntry("ChangeSelectionColor", bool(state != Qt::Unchecked)); emit changed(true); } diff --git a/kcms/colors/kcm_colors.desktop b/kcms/colors/kcm_colors.desktop index 9d15ea418..47135cc5b 100644 --- a/kcms/colors/kcm_colors.desktop +++ b/kcms/colors/kcm_colors.desktop @@ -1,177 +1,178 @@ [Desktop Entry] Exec=kcmshell5 kcm_colors Icon=preferences-desktop-color Type=Service X-KDE-ServiceTypes=KCModule X-DocPath=kcontrol/colors/index.html X-KDE-Library=kcm_colors X-KDE-ParentApp=kcontrol X-KDE-System-Settings-Parent-Category=appearance X-KDE-Weight=60 Name=Colors Name[af]=Kleure Name[ar]=الألوان Name[be]=Колеры Name[be@latin]=Kolery Name[bg]=Цветове Name[bn]=রং Name[bn_IN]=রং Name[br]=Livioù Name[bs]=Boje Name[ca]=Colors Name[ca@valencia]=Colors Name[cs]=Barvy Name[csb]=Farwë Name[cy]=Lliwiau Name[da]=Farver Name[de]=Farben Name[el]=Χρώματα Name[en_GB]=Colours Name[eo]=Koloroj Name[es]=Colores Name[et]=Värvid Name[eu]=Koloreak Name[fa]=رنگها Name[fi]=Värit Name[fr]=Couleurs Name[fy]=Kleuren Name[ga]=Dathanna Name[gl]=Cores Name[gu]=રંગો Name[he]=צבעים Name[hi]=रंग Name[hne]=रंग Name[hr]=Boje Name[hsb]=Barby Name[hu]=Színek Name[ia]=Colores Name[id]=Warna Name[is]=Litir Name[it]=Colori Name[ja]=色 Name[ka]=ცვეტები Name[kk]=Түстер Name[km]=ពណ៌ Name[kn]=ಬಣ್ಣಗಳು Name[ko]=색상 Name[ku]=Reng Name[lt]=Spalvos Name[lv]=Krāsas Name[mai]=रँग Name[mk]=Бои Name[ml]=നിറങ്ങള്‍ Name[mr]=रंग Name[ms]=Warna Name[nb]=Farger Name[nds]=Klören Name[ne]=रङ Name[nl]=Kleuren Name[nn]=Fargar Name[oc]=Colors Name[or]=ରଙ୍ଗ Name[pa]=ਰੰਗ Name[pl]=Kolory Name[pt]=Cores Name[pt_BR]=Cores Name[ro]=Culori Name[ru]=Цвета Name[se]=Ivnnit Name[si]=වර්‍ණ Name[sk]=Farby Name[sl]=Barve Name[sr]=Боје Name[sr@ijekavian]=Боје Name[sr@ijekavianlatin]=Boje Name[sr@latin]=Boje Name[sv]=Färger Name[ta]=வண்ணங்கள் Name[te]=రంగులు Name[tg]=Рангҳо Name[th]=สี Name[tr]=Renkler Name[ug]=رەڭلەر Name[uk]=Кольори Name[uz]=Ranglar Name[uz@cyrillic]=Ранглар Name[vi]=Màu sắc Name[wa]=Coleurs Name[xh]=Imibala Name[x-test]=xxColorsxx Name[zh_CN]=色彩 Name[zh_TW]=顏色 Comment=Choose color scheme Comment[ca]=Trieu l'esquema de colors Comment[ca@valencia]=Trieu l'esquema de colors Comment[de]=Farbschema auswählen Comment[en_GB]=Choose colour scheme Comment[es]=Escoger un esquema de color Comment[fi]=Valitse väriteema +Comment[fr]=Choisissez le schéma de couleurs Comment[gl]=Escoller un esquema de cores Comment[id]=Pilihlah skema warna Comment[it]=Scegli schema di colori Comment[ko]=색 배열 선택 Comment[nl]=Kleurenschema kiezen Comment[nn]=Vel fargeoppsett Comment[pl]=Wybierz zestaw kolorów Comment[pt]=Escolher o esquema de cores Comment[pt_BR]=Escolha o esquema de cores Comment[sk]=Vyberte farebnú schému Comment[sv]=Välj färgschema Comment[uk]=Вибір схеми кольорів Comment[x-test]=xxChoose color schemexx Comment[zh_CN]=选择配色方案 Comment[zh_TW]=選擇色彩主題 X-KDE-Keywords=colors,colours,scheme,contrast,Widget colors,Color Scheme,color style,color theme X-KDE-Keywords[ar]=لون,ألوان,مخطّط,مخطط,تباين,ألوان الودجات,مخطّط ألوان,مخطط ألوان,نمط اللون,سمة اللون X-KDE-Keywords[bs]=boje,boje,tema,kontrast,dodatak bojama,tema u boji,stil boja,tema boja X-KDE-Keywords[ca]=colors,esquema,contrast,colors d'estris,Esquema de color,estil de color, tema de color X-KDE-Keywords[ca@valencia]=colors,esquema,contrast,colors d'estris,Esquema de color,estil de color, tema de color X-KDE-Keywords[da]=farver,tema,kontrast,widget-farver,farvetema,farvestil,farveskema X-KDE-Keywords[de]=Farben,Schema,Kontrast,Farbschema,Elemente X-KDE-Keywords[el]=χρώματα,χρώματα,σχήμα,αντίθεση,χρώματα γραφικών συστατικών,χρωματικό σχήμα,χρωματικό στιλ,θέμα χρώματος X-KDE-Keywords[en_GB]=colours,scheme,contrast,Widget colours,Colour Scheme,colour style,colour theme X-KDE-Keywords[es]=colores,esquema,contraste,colores de elementos gráficos,Esquema de color,estilo de color,tema de color X-KDE-Keywords[et]=värv,värvid,skeem,kontrast,vidina värvid,värviskeem,värvistiil,värviteema X-KDE-Keywords[eu]=kolore,koloreak,eskema,kontraste,trepetaren koloreak,kolore-eskema,kolore-estilo, kolorearen gai X-KDE-Keywords[fi]=värit,teema,kontrasti,käyttöliittymäelementtien värit,elementtien värit,väriteema,värityyli X-KDE-Keywords[fr]=couleurs, couleurs, schéma, contraste, couleur des composants graphiques, schéma de couleur, style de couleur, thème de couleur X-KDE-Keywords[ga]=dathanna,scéim,codarsnacht,dathanna Giuirléidí,Scéim Datha,téama datha X-KDE-Keywords[gl]=cores,esquema,contraste,cores do trebello,esquema de cores, tema de cores X-KDE-Keywords[he]=colors,colours,scheme,contrast,Widget colors,Color Scheme,color style,color theme,צבעים,ערכת נושא,צבע X-KDE-Keywords[hu]=színek,színek,séma,kontraszt,Grafikai elemek színei,Színséma,színstílus,színtéma X-KDE-Keywords[ia]=colores,colores,schema,contrasto,colores de Widget,Schema de Color,stilo de color, thema de color X-KDE-Keywords[id]=warna,warna,skema,kontras,Widget warna,Skema Warna,gaya warna,tema warna X-KDE-Keywords[it]=colori,schema,contrasto,colore degli oggetti,schema di colore,stile colore,tema colore X-KDE-Keywords[kk]=colors,colours,scheme,contrast,Widget colors,Color Scheme,color style,color theme X-KDE-Keywords[km]=colors,colours,scheme,contrast,Widget colors,Color Scheme,color style,color theme X-KDE-Keywords[ko]=colors,colours,scheme,contrast,Widget colors,Color Scheme,color style,color theme,색,색 배열,고대비 X-KDE-Keywords[mr]=रंग, रंग, योजना, कॉन्ट्रास्ट, विजेट रंग, रंगयोजना, रंगप्रकार, रंगशैली X-KDE-Keywords[nb]=farger,oppsett,kontrast,elementfarger,fargeoppsett,fargestil,fargetema X-KDE-Keywords[nds]=Klöör,Klören,Schema,Kontrast,Lüttprogramm-Klören,Klöörschema,Klöörstil,Klöörmuster X-KDE-Keywords[nl]=colors,colours, kleuren,scheme,schema,contrast,Widget colors,Widgetkleuren,Color Scheme,kleurschema,kleurstijl,kleurthema X-KDE-Keywords[nn]=fargar,oppsett,kontrast,elementfargar,fargeoppsett,fargestil,fargetema X-KDE-Keywords[pa]=ਰੰਗ,ਸਕੀਮ,ਕਨਟਰਾਸਟ,ਵਿਜੈਟ ਰੰਗ,ਰੰਗ ਸਕੀ,ਰੰਗ ਸਟਾਈਲ,ਰੰਗ ਥੀਮ X-KDE-Keywords[pl]=kolory,schemat,kontrast,kolory elementów interfejsu,zestaw kolorów,styl kolorów,motyw kolorów X-KDE-Keywords[pt]=cores,esquema,contraste,cores dos elementos,esquema de cores,estilo de cores,tema de cores X-KDE-Keywords[pt_BR]=cor,cores,esquema,contraste,Cores do widget,Esquema de cores,estilo de cores,tema de cores X-KDE-Keywords[ru]=colors,colours,scheme,contrast,Widget colors,Color Scheme,color style,color theme,цвет,цвета,схема,контраст,цвета виджета,цветовая схема,цветовой стиль,цветовая тема X-KDE-Keywords[sk]=farba,farby,schéma,kontrast,farby widgetov,Farebná schéma,štýl farieb,téma farieb X-KDE-Keywords[sl]=barve,shema,tema,kontrast,barve gradnikov,barvna shema,barvna tema,barvni slog X-KDE-Keywords[sr]=colors,colours,scheme,contrast,Widget colors,Color Scheme,color style,color theme,боје,шема,контраст,боје виџета,шема боја,стил боја,тема боја X-KDE-Keywords[sr@ijekavian]=colors,colours,scheme,contrast,Widget colors,Color Scheme,color style,color theme,боје,шема,контраст,боје виџета,шема боја,стил боја,тема боја X-KDE-Keywords[sr@ijekavianlatin]=colors,colours,scheme,contrast,Widget colors,Color Scheme,color style,color theme,boje,šema,kontrast,boje vidžeta,šema boja,stil boja,tema boja X-KDE-Keywords[sr@latin]=colors,colours,scheme,contrast,Widget colors,Color Scheme,color style,color theme,boje,šema,kontrast,boje vidžeta,šema boja,stil boja,tema boja X-KDE-Keywords[sv]=färger,schema,kontrast,Komponentfärger,Färgschema,färgstil,färgtema X-KDE-Keywords[tr]=renkler,renk,şema,karşıtlık,kontrast,Gereç renkleri,RenkŞeması,renk biçemi,renk teması,renk biçimi X-KDE-Keywords[uk]=кольори,кольори,схема,контраст,кольори віджетів,схема кольорів,стиль кольорів,тема кольорів,colors,colours,scheme,contrast,Widget colors,Color Scheme,color style,color theme X-KDE-Keywords[x-test]=xxcolorsxx,xxcoloursxx,xxschemexx,xxcontrastxx,xxWidget colorsxx,xxColor Schemexx,xxcolor stylexx,xxcolor themexx X-KDE-Keywords[zh_CN]=colors,colours,scheme,contrast,Widget colors,Color Scheme,color style,color theme,颜色,配色方案,对比度,部件颜色,颜色方案,颜色风格,颜色主题 X-KDE-Keywords[zh_TW]=colors,colours,scheme,contrast,Widget colors,Color Scheme,color style,color theme Categories=Qt;KDE;X-KDE-settings-looknfeel; diff --git a/kcms/colors/package/metadata.desktop b/kcms/colors/package/metadata.desktop index d9d730231..320649920 100644 --- a/kcms/colors/package/metadata.desktop +++ b/kcms/colors/package/metadata.desktop @@ -1,127 +1,128 @@ [Desktop Entry] Name=Colors Name[af]=Kleure Name[ar]=الألوان Name[be]=Колеры Name[be@latin]=Kolery Name[bg]=Цветове Name[bn]=রং Name[bn_IN]=রং Name[br]=Livioù Name[bs]=Boje Name[ca]=Colors Name[ca@valencia]=Colors Name[cs]=Barvy Name[csb]=Farwë Name[cy]=Lliwiau Name[da]=Farver Name[de]=Farben Name[el]=Χρώματα Name[en_GB]=Colours Name[eo]=Koloroj Name[es]=Colores Name[et]=Värvid Name[eu]=Koloreak Name[fa]=رنگها Name[fi]=Värit Name[fr]=Couleurs Name[fy]=Kleuren Name[ga]=Dathanna Name[gl]=Cores Name[gu]=રંગો Name[he]=צבעים Name[hi]=रंग Name[hne]=रंग Name[hr]=Boje Name[hsb]=Barby Name[hu]=Színek Name[ia]=Colores Name[id]=Warna Name[is]=Litir Name[it]=Colori Name[ja]=色 Name[ka]=ცვეტები Name[kk]=Түстер Name[km]=ពណ៌ Name[kn]=ಬಣ್ಣಗಳು Name[ko]=색상 Name[ku]=Reng Name[lt]=Spalvos Name[lv]=Krāsas Name[mai]=रँग Name[mk]=Бои Name[ml]=നിറങ്ങള്‍ Name[mr]=रंग Name[ms]=Warna Name[nb]=Farger Name[nds]=Klören Name[ne]=रङ Name[nl]=Kleuren Name[nn]=Fargar Name[oc]=Colors Name[or]=ରଙ୍ଗ Name[pa]=ਰੰਗ Name[pl]=Kolory Name[pt]=Cores Name[pt_BR]=Cores Name[ro]=Culori Name[ru]=Цвета Name[se]=Ivnnit Name[si]=වර්‍ණ Name[sk]=Farby Name[sl]=Barve Name[sr]=Боје Name[sr@ijekavian]=Боје Name[sr@ijekavianlatin]=Boje Name[sr@latin]=Boje Name[sv]=Färger Name[ta]=வண்ணங்கள் Name[te]=రంగులు Name[tg]=Рангҳо Name[th]=สี Name[tr]=Renkler Name[ug]=رەڭلەر Name[uk]=Кольори Name[uz]=Ranglar Name[uz@cyrillic]=Ранглар Name[vi]=Màu sắc Name[wa]=Coleurs Name[xh]=Imibala Name[x-test]=xxColorsxx Name[zh_CN]=色彩 Name[zh_TW]=顏色 Comment=Choose color scheme Comment[ca]=Trieu l'esquema de colors Comment[ca@valencia]=Trieu l'esquema de colors Comment[de]=Farbschema auswählen Comment[en_GB]=Choose colour scheme Comment[es]=Escoger un esquema de color Comment[fi]=Valitse väriteema +Comment[fr]=Choisissez le schéma de couleurs Comment[gl]=Escoller un esquema de cores Comment[id]=Pilihlah skema warna Comment[it]=Scegli schema di colori Comment[ko]=색 배열 선택 Comment[nl]=Kleurenschema kiezen Comment[nn]=Vel fargeoppsett Comment[pl]=Wybierz zestaw kolorów Comment[pt]=Escolher o esquema de cores Comment[pt_BR]=Escolha o esquema de cores Comment[sk]=Vyberte farebnú schému Comment[sv]=Välj färgschema Comment[uk]=Вибір схеми кольорів Comment[x-test]=xxChoose color schemexx Comment[zh_CN]=选择配色方案 Comment[zh_TW]=選擇色彩主題 Icon=preferences-desktop-color Type=Service X-KDE-PluginInfo-Author=Kai Uwe Broulik X-KDE-PluginInfo-Email=kde@privat.broulik.de X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-Name=kcm_colors X-KDE-PluginInfo-Version= X-KDE-PluginInfo-Website= X-KDE-ServiceTypes=Plasma/Generic X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml diff --git a/kcms/colors/schemes/Honeycomb.colors b/kcms/colors/schemes/Honeycomb.colors index 2c5ad138d..627d2ed5d 100644 --- a/kcms/colors/schemes/Honeycomb.colors +++ b/kcms/colors/schemes/Honeycomb.colors @@ -1,118 +1,119 @@ [ColorEffects:Disabled] Color=48,43,30 ColorAmount=0.125 ColorEffect=2 ContrastAmount=0.5 ContrastEffect=1 IntensityAmount=0.05 IntensityEffect=0 [ColorEffects:Inactive] Color=227,170,0 ColorAmount=0.025 ColorEffect=2 ContrastAmount=0.25 ContrastEffect=1 IntensityAmount=0.05 IntensityEffect=0 [Colors:Button] BackgroundAlternate=136,138,133 BackgroundNormal=186,189,183 DecorationFocus=85,85,85 DecorationHover=243,195,0 ForegroundActive=191,92,0 ForegroundInactive=117,80,25 ForegroundLink=232,82,144 ForegroundNegative=191,3,3 ForegroundNeutral=43,116,199 ForegroundNormal=0,0,0 ForegroundPositive=0,137,43 ForegroundVisited=100,74,155 [Colors:Selection] BackgroundAlternate=243,195,0 BackgroundNormal=227,170,0 DecorationFocus=85,85,85 DecorationHover=243,195,0 ForegroundActive=191,92,0 ForegroundInactive=255,235,85 ForegroundLink=232,82,144 ForegroundNegative=191,3,3 ForegroundNeutral=43,116,199 ForegroundNormal=255,255,255 ForegroundPositive=0,137,43 ForegroundVisited=100,74,155 [Colors:Tooltip] BackgroundAlternate=255,235,85 BackgroundNormal=255,242,153 DecorationFocus=85,85,85 DecorationHover=243,195,0 ForegroundActive=191,92,0 ForegroundInactive=117,80,25 ForegroundLink=232,82,144 ForegroundNegative=191,3,3 ForegroundNeutral=43,116,199 ForegroundNormal=64,48,0 ForegroundPositive=0,137,43 ForegroundVisited=100,74,155 [Colors:View] BackgroundAlternate=255,251,231 BackgroundNormal=255,255,255 DecorationFocus=85,85,85 DecorationHover=243,195,0 ForegroundActive=191,92,0 ForegroundInactive=117,80,25 ForegroundLink=232,82,144 ForegroundNegative=191,3,3 ForegroundNeutral=43,116,199 ForegroundNormal=0,0,0 ForegroundPositive=0,137,43 ForegroundVisited=100,74,155 [Colors:Window] BackgroundAlternate=186,189,183 BackgroundNormal=212,215,208 DecorationFocus=85,85,85 DecorationHover=243,195,0 ForegroundActive=191,92,0 ForegroundInactive=117,80,25 ForegroundLink=232,82,144 ForegroundNegative=191,3,3 ForegroundNeutral=43,116,199 ForegroundNormal=0,0,0 ForegroundPositive=0,137,43 ForegroundVisited=100,74,155 [General] Name=Honeycomb Name[ca]=Honeycomb Name[ca@valencia]=Honeycomb Name[de]=Honigwabe Name[en_GB]=Honeycomb Name[es]=Panal Name[fi]=Hunajakenno +Name[fr]=Honeycomb Name[gl]=Tarro de mel Name[id]=Honeycomb Name[it]=Alveare Name[ko]=벌집 Name[nl]=Honingraat Name[nn]=Bikube Name[pl]=Plaster miodu Name[pt]=Favo de Mel Name[pt_BR]=Favo de Mel Name[ru]=Соты Name[sk]=Medový plást Name[sv]=Bikaka Name[uk]=Соти Name[x-test]=xxHoneycombxx Name[zh_CN]=蜂窝 Name[zh_TW]=Honeycomb [WM] activeBackground=227,170,0 activeForeground=255,255,255 inactiveBackground=136,138,133 inactiveForeground=46,52,54 diff --git a/kcms/colors/schemes/ObsidianCoast.colors b/kcms/colors/schemes/ObsidianCoast.colors index 0305de4e7..423cf6844 100644 --- a/kcms/colors/schemes/ObsidianCoast.colors +++ b/kcms/colors/schemes/ObsidianCoast.colors @@ -1,117 +1,118 @@ [ColorEffects:Disabled] ColorAmount=-0.8 ColorEffect=0 ContrastAmount=0.65 ContrastEffect=1 IntensityAmount=0.25 IntensityEffect=2 [ColorEffects:Inactive] Color=0,0,0 ColorAmount=0.025 ColorEffect=2 ContrastAmount=0.4 ContrastEffect=2 IntensityAmount=0 IntensityEffect=0 [Colors:Button] BackgroundAlternate=66,65,64 BackgroundNormal=64,63,62 DecorationFocus=39,94,160 DecorationHover=87,129,176 ForegroundActive=150,191,240 ForegroundInactive=120,119,117 ForegroundLink=80,142,216 ForegroundNegative=232,88,72 ForegroundNeutral=192,162,95 ForegroundNormal=232,230,227 ForegroundPositive=120,183,83 ForegroundVisited=142,121,165 [Colors:Selection] BackgroundAlternate=22,68,120 BackgroundNormal=24,72,128 DecorationFocus=39,94,160 DecorationHover=87,129,176 ForegroundActive=150,191,240 ForegroundInactive=81,119,166 ForegroundLink=80,142,216 ForegroundNegative=232,88,72 ForegroundNeutral=192,162,95 ForegroundNormal=255,255,255 ForegroundPositive=120,183,83 ForegroundVisited=142,121,165 [Colors:Tooltip] BackgroundAlternate=17,51,86 BackgroundNormal=16,48,80 DecorationFocus=39,94,160 DecorationHover=87,129,176 ForegroundActive=150,191,240 ForegroundInactive=120,119,117 ForegroundLink=80,142,216 ForegroundNegative=232,88,72 ForegroundNeutral=192,162,95 ForegroundNormal=196,209,224 ForegroundPositive=120,183,83 ForegroundVisited=142,121,165 [Colors:View] BackgroundAlternate=36,35,35 BackgroundNormal=32,31,31 DecorationFocus=39,94,160 DecorationHover=87,129,176 ForegroundActive=150,191,240 ForegroundInactive=120,119,117 ForegroundLink=80,142,216 ForegroundNegative=232,88,72 ForegroundNeutral=192,162,95 ForegroundNormal=212,210,207 ForegroundPositive=120,183,83 ForegroundVisited=142,121,165 [Colors:Window] BackgroundAlternate=52,51,50 BackgroundNormal=48,47,47 DecorationFocus=39,94,160 DecorationHover=87,129,176 ForegroundActive=150,191,240 ForegroundInactive=120,119,117 ForegroundLink=80,142,216 ForegroundNegative=232,88,72 ForegroundNeutral=192,162,95 ForegroundNormal=224,222,219 ForegroundPositive=120,183,83 ForegroundVisited=142,121,165 [General] Name=Obsidian Coast Name[ca]=Obsidian Coast Name[ca@valencia]=Obsidian Coast Name[de]=Obsidian-Küste Name[en_GB]=Obsidian Coast Name[es]=Costa de obsidiana Name[fi]=Obsidian Coast +Name[fr]=Obsidian Coast Name[gl]=Costa obsidiana Name[id]=Obsidian Coast Name[it]=Costa dell'ossidiana Name[ko]=흑요석 해안 Name[nl]=Obsidian Coast Name[nn]=Obsidian-kyst Name[pl]=Wybrzeże Obsydian Name[pt]=Costa Obsidiana Name[pt_BR]=Costa Obsidiana Name[ru]=Обсидиан Name[sk]=Obsidiánové pobrežie Name[sv]=Obsidiankust Name[uk]=Обсидіановий берег Name[x-test]=xxObsidian Coastxx Name[zh_CN]=黑曜石海岸 Name[zh_TW]=Obsidian Coast [WM] activeBackground=19,47,80 activeForeground=255,255,255 inactiveBackground=64,63,62 inactiveForeground=128,127,125 diff --git a/kcms/colors/schemes/OxygenCold.colors b/kcms/colors/schemes/OxygenCold.colors index 54ed62f94..11c66ee23 100644 --- a/kcms/colors/schemes/OxygenCold.colors +++ b/kcms/colors/schemes/OxygenCold.colors @@ -1,131 +1,132 @@ [ColorEffects:Disabled] ColorAmount=0 ColorEffect=0 ContrastAmount=0.65 ContrastEffect=1 IntensityAmount=0.1 IntensityEffect=2 [ColorEffects:Inactive] Color=112,111,110 ColorAmount=0.025 ColorEffect=2 ContrastAmount=0.1 ContrastEffect=2 IntensityAmount=0 IntensityEffect=0 [Colors:Button] BackgroundAlternate=224,223,222 BackgroundNormal=232,231,230 DecorationFocus=43,116,199 DecorationHover=119,183,255 ForegroundActive=255,128,224 ForegroundInactive=136,135,134 ForegroundLink=0,87,174 ForegroundNegative=191,3,3 ForegroundNeutral=176,128,0 ForegroundNormal=20,19,18 ForegroundPositive=0,110,40 ForegroundVisited=69,40,134 [Colors:Selection] BackgroundAlternate=62,138,204 BackgroundNormal=65,139,212 DecorationFocus=43,116,199 DecorationHover=119,183,255 ForegroundActive=255,128,224 ForegroundInactive=165,193,228 ForegroundLink=0,49,110 ForegroundNegative=156,14,14 ForegroundNeutral=255,221,0 ForegroundNormal=255,255,255 ForegroundPositive=128,255,128 ForegroundVisited=69,40,134 [Colors:Tooltip] BackgroundAlternate=196,224,255 BackgroundNormal=192,218,255 DecorationFocus=43,116,199 DecorationHover=119,183,255 ForegroundActive=255,128,224 ForegroundInactive=96,112,128 ForegroundLink=0,87,174 ForegroundNegative=191,3,3 ForegroundNeutral=176,128,0 ForegroundNormal=20,19,18 ForegroundPositive=0,110,40 ForegroundVisited=69,40,134 [Colors:View] BackgroundAlternate=248,247,246 BackgroundNormal=255,255,255 DecorationFocus=43,116,199 DecorationHover=119,183,255 ForegroundActive=255,128,224 ForegroundInactive=136,135,134 ForegroundLink=0,87,174 ForegroundNegative=191,3,3 ForegroundNeutral=176,128,0 ForegroundNormal=20,19,18 ForegroundPositive=0,110,40 ForegroundVisited=69,40,134 [Colors:Window] BackgroundAlternate=218,217,216 BackgroundNormal=224,223,222 DecorationFocus=43,116,199 DecorationHover=119,183,255 ForegroundActive=255,128,224 ForegroundInactive=136,135,134 ForegroundLink=0,87,174 ForegroundNegative=191,3,3 ForegroundNeutral=176,128,0 ForegroundNormal=20,19,18 ForegroundPositive=0,110,40 ForegroundVisited=69,40,134 [Colors:Complementary] BackgroundAlternate=196,224,255 BackgroundNormal=24,21,19 DecorationFocus=58,167,221 DecorationHover=110,214,255 ForegroundActive=255,128,224 ForegroundInactive=137,136,135 ForegroundLink=88,172,255 ForegroundNegative=191,3,3 ForegroundNeutral=176,128,0 ForegroundNormal=231,253,255 ForegroundPositive=0,110,40 ForegroundVisited=150,111,232 [General] Name=Oxygen Cold Name[ca]=Oxygen Cold Name[ca@valencia]=Oxygen Cold Name[de]=Oxygen-Kalt Name[en_GB]=Oxygen Cold Name[es]=Oxígeno frío Name[fi]=Oxygen Cold +Name[fr]=Oxygen Cold Name[gl]=Osíxeno frío Name[id]=Oxygen Cold Name[it]=Oxygen freddo Name[ko]=Oxygen Cold Name[nl]=Oxygen Cold Name[nn]=Oxygen kald Name[pl]=Zimny tlen Name[pt]=Oxygen Frio Name[pt_BR]=Oxygen Frio Name[ru]=Oxygen (холодная) Name[sk]=Studený kyslík Name[sv]=Kallt syre Name[uk]=Холодна Oxygen Name[x-test]=xxOxygen Coldxx Name[zh_CN]=氧气冷色 Name[zh_TW]=Oxygen Cold [WM] activeBackground=96,148,207 activeForeground=255,255,255 inactiveBackground=224,223,222 inactiveForeground=20,19,18 diff --git a/kcms/colors/schemes/Steel.colors b/kcms/colors/schemes/Steel.colors index 771b972ee..6ae9507c4 100644 --- a/kcms/colors/schemes/Steel.colors +++ b/kcms/colors/schemes/Steel.colors @@ -1,117 +1,118 @@ [ColorEffects:Disabled] ColorAmount=-0.9 ColorEffect=0 ContrastAmount=0.65 ContrastEffect=1 IntensityAmount=0.25 IntensityEffect=2 [ColorEffects:Inactive] Color=135,133,129 ColorAmount=0.05 ColorEffect=2 ContrastAmount=0.25 ContrastEffect=2 IntensityAmount=0 IntensityEffect=0 [Colors:Button] BackgroundAlternate=224,223,216 BackgroundNormal=232,231,223 DecorationFocus=69,98,112 DecorationHover=74,139,163 ForegroundActive=232,87,82 ForegroundInactive=148,133,111 ForegroundLink=41,111,190 ForegroundNegative=139,83,127 ForegroundNeutral=191,165,103 ForegroundNormal=0,0,0 ForegroundPositive=67,102,46 ForegroundVisited=100,74,155 [Colors:Selection] BackgroundAlternate=118,154,165 BackgroundNormal=123,160,173 DecorationFocus=69,98,112 DecorationHover=74,139,163 ForegroundActive=232,87,82 ForegroundInactive=178,197,204 ForegroundLink=41,111,190 ForegroundNegative=139,83,127 ForegroundNeutral=191,165,103 ForegroundNormal=255,255,255 ForegroundPositive=67,102,46 ForegroundVisited=100,74,155 [Colors:Tooltip] BackgroundAlternate=216,228,231 BackgroundNormal=219,231,235 DecorationFocus=69,98,112 DecorationHover=74,139,163 ForegroundActive=232,87,82 ForegroundInactive=148,133,111 ForegroundLink=41,111,190 ForegroundNegative=139,83,127 ForegroundNeutral=191,165,103 ForegroundNormal=37,34,28 ForegroundPositive=67,102,46 ForegroundVisited=100,74,155 [Colors:View] BackgroundAlternate=250,250,248 BackgroundNormal=255,255,255 DecorationFocus=69,98,112 DecorationHover=74,139,163 ForegroundActive=232,87,82 ForegroundInactive=148,133,111 ForegroundLink=41,111,190 ForegroundNegative=139,83,127 ForegroundNeutral=191,165,103 ForegroundNormal=0,0,0 ForegroundPositive=67,102,46 ForegroundVisited=100,74,155 [Colors:Window] BackgroundAlternate=212,211,204 BackgroundNormal=224,223,216 DecorationFocus=69,98,112 DecorationHover=74,139,163 ForegroundActive=232,87,82 ForegroundInactive=148,133,111 ForegroundLink=41,111,190 ForegroundNegative=139,83,127 ForegroundNeutral=191,165,103 ForegroundNormal=0,0,0 ForegroundPositive=67,102,46 ForegroundVisited=100,74,155 [General] Name=Steel Name[ca]=Steel Name[ca@valencia]=Steel Name[de]=Stahl Name[en_GB]=Steel Name[es]=Acero Name[fi]=Teräs +Name[fr]=Acier Name[gl]=Ferro Name[id]=Steel Name[it]=Acciaio Name[ko]=강철 Name[nl]=Steel Name[nn]=Stål Name[pl]=Stal Name[pt]=Aço Name[pt_BR]=Aço Name[ru]=Сталь Name[sk]=Oceľ Name[sv]=Stål Name[uk]=Сталь Name[x-test]=xxSteelxx Name[zh_CN]=钢铁 Name[zh_TW]=Steel [WM] activeBackground=74,139,163 activeForeground=255,255,255 inactiveBackground=208,206,192 inactiveForeground=100,92,72 diff --git a/kcms/colors/schemes/WontonSoup.colors b/kcms/colors/schemes/WontonSoup.colors index 68be0bcbf..2948cde75 100644 --- a/kcms/colors/schemes/WontonSoup.colors +++ b/kcms/colors/schemes/WontonSoup.colors @@ -1,115 +1,116 @@ [ColorEffects:Disabled] ColorAmount=0 ColorEffect=0 ContrastAmount=0.65 ContrastEffect=1 IntensityAmount=0.25 IntensityEffect=2 [ColorEffects:Inactive] ColorAmount=0 ColorEffect=0 ContrastAmount=0.25 ContrastEffect=2 IntensityAmount=0.05 IntensityEffect=2 [Colors:Button] BackgroundAlternate=90,98,109 BackgroundNormal=82,88,99 DecorationFocus=125,141,153 DecorationHover=119,149,179 ForegroundActive=255,255,255 ForegroundInactive=135,143,154 ForegroundLink=156,212,255 ForegroundNegative=225,150,209 ForegroundNeutral=218,198,115 ForegroundNormal=210,222,240 ForegroundPositive=145,221,100 ForegroundVisited=64,128,255 [Colors:Selection] BackgroundAlternate=111,126,144 BackgroundNormal=120,136,156 DecorationFocus=125,141,153 DecorationHover=119,149,179 ForegroundActive=255,255,255 ForegroundInactive=174,192,218 ForegroundLink=156,212,255 ForegroundNegative=225,150,209 ForegroundNeutral=218,198,115 ForegroundNormal=209,225,244 ForegroundPositive=145,221,100 ForegroundVisited=64,128,255 [Colors:Tooltip] BackgroundAlternate=171,181,195 BackgroundNormal=182,193,208 DecorationFocus=125,141,153 DecorationHover=119,149,179 ForegroundActive=255,255,255 ForegroundInactive=112,118,128 ForegroundLink=87,161,218 ForegroundNegative=99,66,92 ForegroundNeutral=86,78,45 ForegroundNormal=42,44,48 ForegroundPositive=57,86,38 ForegroundVisited=46,95,185 [Colors:View] BackgroundAlternate=67,71,80 BackgroundNormal=60,64,72 DecorationFocus=125,141,153 DecorationHover=119,149,179 ForegroundActive=255,255,255 ForegroundInactive=135,143,154 ForegroundLink=156,212,255 ForegroundNegative=225,150,209 ForegroundNeutral=218,198,115 ForegroundNormal=210,222,240 ForegroundPositive=145,221,100 ForegroundVisited=64,128,255 [Colors:Window] BackgroundAlternate=78,83,94 BackgroundNormal=73,78,88 DecorationFocus=125,141,153 DecorationHover=119,149,179 ForegroundActive=255,255,255 ForegroundInactive=135,143,154 ForegroundLink=156,212,255 ForegroundNegative=225,150,209 ForegroundNeutral=218,198,115 ForegroundNormal=182,193,208 ForegroundPositive=145,221,100 ForegroundVisited=64,128,255 [General] Name=Wonton Soup Name[ca]=Wonton Soup Name[ca@valencia]=Wonton Soup Name[de]=Wonton-Suppe Name[en_GB]=Wonton Soup Name[es]=Sopa wantán Name[fi]=Wonton Soup +Name[fr]=Wonton Soup Name[gl]=Sopa de Wonton Name[id]=Wonton Soup Name[it]=Zuppa di Wonton Name[nl]=Wonton Soup Name[nn]=Wonton-suppe Name[pl]=Zupa Wonton Name[pt]=Sopa Wonton Name[pt_BR]=Sopa de Wonton Name[ru]=Суп с вонтонами Name[sk]=Wonton Soup Name[sv]=Wontonsoppa Name[uk]=Суп із вонтонами Name[x-test]=xxWonton Soupxx Name[zh_CN]=旺顿汤 Name[zh_TW]=Wonton Soup [WM] activeBackground=138,151,166 activeForeground=224,237,255 inactiveBackground=82,89,99 inactiveForeground=140,152,168 diff --git a/kcms/colors/schemes/Zion.colors b/kcms/colors/schemes/Zion.colors index c7baa3bb1..6412be306 100644 --- a/kcms/colors/schemes/Zion.colors +++ b/kcms/colors/schemes/Zion.colors @@ -1,117 +1,118 @@ [ColorEffects:Disabled] Color=210,205,218 ColorAmount=-0.9 ColorEffect=0 ContrastAmount=0.65 ContrastEffect=1 IntensityAmount=0 IntensityEffect=0 [ColorEffects:Inactive] Color=0,0,0 ColorAmount=0.5 ColorEffect=1 ContrastAmount=0.25 ContrastEffect=1 IntensityAmount=0 IntensityEffect=0 [Colors:Button] BackgroundAlternate=252,252,252 BackgroundNormal=255,255,255 DecorationFocus=128,128,128 DecorationHover=0,0,0 ForegroundActive=0,102,255 ForegroundInactive=112,112,112 ForegroundLink=0,0,192 ForegroundNegative=128,0,0 ForegroundNeutral=112,96,0 ForegroundNormal=0,0,0 ForegroundPositive=0,96,0 ForegroundVisited=88,0,176 [Colors:Selection] BackgroundAlternate=171,188,248 BackgroundNormal=176,192,255 DecorationFocus=128,128,128 DecorationHover=0,0,0 ForegroundActive=0,102,255 ForegroundInactive=64,64,192 ForegroundLink=0,0,192 ForegroundNegative=128,0,0 ForegroundNeutral=112,96,0 ForegroundNormal=0,0,0 ForegroundPositive=0,96,0 ForegroundVisited=88,0,176 [Colors:Tooltip] BackgroundAlternate=250,250,250 BackgroundNormal=255,255,255 DecorationFocus=128,128,128 DecorationHover=0,0,0 ForegroundActive=0,102,255 ForegroundInactive=112,112,112 ForegroundLink=0,0,192 ForegroundNegative=128,0,0 ForegroundNeutral=112,96,0 ForegroundNormal=0,0,0 ForegroundPositive=0,96,0 ForegroundVisited=88,0,176 [Colors:View] BackgroundAlternate=252,252,252 BackgroundNormal=255,255,255 DecorationFocus=128,128,128 DecorationHover=0,0,0 ForegroundActive=0,102,255 ForegroundInactive=112,112,112 ForegroundLink=0,0,192 ForegroundNegative=128,0,0 ForegroundNeutral=112,96,0 ForegroundNormal=0,0,0 ForegroundPositive=0,96,0 ForegroundVisited=88,0,176 [Colors:Window] BackgroundAlternate=248,248,248 BackgroundNormal=252,252,252 DecorationFocus=128,128,128 DecorationHover=0,0,0 ForegroundActive=0,102,255 ForegroundInactive=112,112,112 ForegroundLink=0,0,192 ForegroundNegative=128,0,0 ForegroundNeutral=112,96,0 ForegroundNormal=0,0,0 ForegroundPositive=0,96,0 ForegroundVisited=88,0,176 [General] Name=Zion Name[ca]=Zion Name[ca@valencia]=Zion Name[de]=Zion Name[en_GB]=Zion Name[es]=Sion Name[fi]=Zion +Name[fr]=Zion Name[gl]=Sion Name[id]=Zion Name[it]=Sion Name[nl]=Zion Name[nn]=Zion Name[pl]=Zion Name[pt]=Zion Name[pt_BR]=Zion Name[ru]=Сион Name[sk]=Zion Name[sv]=Zion Name[uk]=Сіон Name[x-test]=xxZionxx Name[zh_CN]=锡安 Name[zh_TW]=Zion [WM] activeBackground=176,193,255 activeForeground=0,0,0 inactiveBackground=255,255,255 inactiveForeground=0,0,0 diff --git a/kcms/colors/schemes/ZionReversed.colors b/kcms/colors/schemes/ZionReversed.colors index aedaa4f66..2f219b7ee 100644 --- a/kcms/colors/schemes/ZionReversed.colors +++ b/kcms/colors/schemes/ZionReversed.colors @@ -1,117 +1,118 @@ [ColorEffects:Disabled] Color=56,56,56 ColorAmount=0.5 ColorEffect=2 ContrastAmount=0.5 ContrastEffect=1 IntensityAmount=0.05 IntensityEffect=0 [ColorEffects:Inactive] Color=0,0,0 ColorAmount=0.5 ColorEffect=1 ContrastAmount=0.25 ContrastEffect=2 IntensityAmount=0 IntensityEffect=0 [Colors:Button] BackgroundAlternate=12,12,12 BackgroundNormal=0,0,0 DecorationFocus=192,192,192 DecorationHover=255,255,255 ForegroundActive=192,255,255 ForegroundInactive=160,160,160 ForegroundLink=128,181,255 ForegroundNegative=255,128,172 ForegroundNeutral=255,212,128 ForegroundNormal=255,255,255 ForegroundPositive=128,255,128 ForegroundVisited=192,128,255 [Colors:Selection] BackgroundAlternate=0,52,116 BackgroundNormal=0,49,110 DecorationFocus=192,192,192 DecorationHover=255,255,255 ForegroundActive=192,255,255 ForegroundInactive=96,148,207 ForegroundLink=128,181,255 ForegroundNegative=255,128,172 ForegroundNeutral=255,212,128 ForegroundNormal=255,255,255 ForegroundPositive=128,255,128 ForegroundVisited=192,128,255 [Colors:Tooltip] BackgroundAlternate=12,12,12 BackgroundNormal=0,0,0 DecorationFocus=192,192,192 DecorationHover=255,255,255 ForegroundActive=192,255,255 ForegroundInactive=160,160,160 ForegroundLink=128,181,255 ForegroundNegative=255,128,172 ForegroundNeutral=255,212,128 ForegroundNormal=255,255,255 ForegroundPositive=128,255,128 ForegroundVisited=192,128,255 [Colors:View] BackgroundAlternate=12,12,12 BackgroundNormal=0,0,0 DecorationFocus=192,192,192 DecorationHover=255,255,255 ForegroundActive=192,255,255 ForegroundInactive=160,160,160 ForegroundLink=128,181,255 ForegroundNegative=255,128,172 ForegroundNeutral=255,212,128 ForegroundNormal=255,255,255 ForegroundPositive=128,255,128 ForegroundVisited=192,128,255 [Colors:Window] BackgroundAlternate=20,20,20 BackgroundNormal=16,16,16 DecorationFocus=192,192,192 DecorationHover=255,255,255 ForegroundActive=192,255,255 ForegroundInactive=160,160,160 ForegroundLink=128,181,255 ForegroundNegative=255,128,172 ForegroundNeutral=255,212,128 ForegroundNormal=255,255,255 ForegroundPositive=128,255,128 ForegroundVisited=192,128,255 [General] Name=Zion (Reversed) Name[ca]=Zion (invertit) Name[ca@valencia]=Zion (invertit) Name[de]=Zion (Invertiert) Name[en_GB]=Zion (Reversed) Name[es]=Sion (invertido) Name[fi]=Zion (käänteinen) +Name[fr]=Zion (inversé) Name[gl]=Sion (invertido) Name[id]=Zion (Reversed) Name[it]=Sion (invertito) Name[nl]=Zion (omgekeerd) Name[nn]=Zion (omvend) Name[pl]=Zion (Odwrócony) Name[pt]=Zion (Invertido) Name[pt_BR]=Zion (Invertido) Name[ru]=Сион (инвертированная) Name[sk]=Zion (Prevrátené) Name[sv]=Zion (omvänd) Name[uk]=Сіон (обернена) Name[x-test]=xxZion (Reversed)xx Name[zh_CN]=锡安 (反色) Name[zh_TW]=Zion (顏色反轉版) [WM] activeBackground=0,49,110 activeForeground=255,255,255 inactiveBackground=64,64,64 inactiveForeground=128,128,128 diff --git a/kcms/cursortheme/kcm_cursortheme.desktop b/kcms/cursortheme/kcm_cursortheme.desktop index ecd912a09..52a69e461 100644 --- a/kcms/cursortheme/kcm_cursortheme.desktop +++ b/kcms/cursortheme/kcm_cursortheme.desktop @@ -1,117 +1,118 @@ [Desktop Entry] Exec=kcmshell5 kcm_cursortheme Icon=preferences-desktop-cursors Type=Service X-KDE-ServiceTypes=KCModule X-KDE-Library=kcm_cursortheme X-KDE-ParentApp=kcontrol X-KDE-System-Settings-Parent-Category=workspacetheme X-DocPath=kcontrol/cursortheme/index.html X-KDE-Weight=60 Name=Cursors Name[ca]=Cursors Name[ca@valencia]=Cursors Name[cs]=Kurzory Name[da]=Markører Name[de]=Zeiger Name[el]=Δρομείς Name[en_GB]=Cursors Name[es]=Cursores Name[eu]=Kurtsoreak Name[fi]=Osoittimet Name[fr]=Pointeurs Name[gl]=Cursores Name[he]=מצביעים Name[hu]=Kurzorok Name[id]=Kursor Name[it]=Puntatori Name[ko]=커서 Name[lt]=Žymekliai Name[nl]=Cursors Name[nn]=Peikarar Name[pa]=ਕਰਸਰਾਂ Name[pl]=Wskaźniki Name[pt]=Cursores Name[pt_BR]=Cursores Name[ru]=Курсоры мыши Name[sk]=Kurzory Name[sl]=Kazalke Name[sr]=Показивачи Name[sr@ijekavian]=Показивачи Name[sr@ijekavianlatin]=Pokazivači Name[sr@latin]=Pokazivači Name[sv]=Pekare Name[tr]=İmleçler Name[uk]=Вказівники Name[x-test]=xxCursorsxx Name[zh_CN]=光标 Name[zh_TW]=游標 Comment=Choose mouse cursor theme Comment[ca]=Trieu el tema del cursor del ratolí Comment[ca@valencia]=Trieu el tema del cursor del ratolí Comment[de]=Design für den Mauszeiger auswählen Comment[en_GB]=Choose mouse cursor theme Comment[es]=Escoger un tema de cursores para el ratón Comment[fi]=Valitse hiiriosoitinteema +Comment[fr]=Choisissez le thème de souris Comment[gl]=Escoller un tema de cursor de rato -Comment[id]=Pilihlah tema kursor mouse +Comment[id]=Memilih tema kursor mouse Comment[it]=Scegli tema dei puntatori del mouse Comment[ko]=마우스 커서 테마 선택 Comment[nl]=Muiscursorthema kiezen Comment[nn]=Vel peikartema Comment[pl]=Wybierz zestaw wskaźników myszy Comment[pt]=Escolher o tema do cursor do rato Comment[pt_BR]=Escolha o tema do cursor do mouse Comment[sk]=Vyberte tému kurzora myši Comment[sv]=Välj muspekartema Comment[uk]=Вибір теми вказівника миші Comment[x-test]=xxChoose mouse cursor themexx Comment[zh_CN]=选择鼠标光标主题 Comment[zh_TW]=選擇滑鼠游標主題 X-KDE-Keywords=Mouse,Cursor,Theme,Cursor Appearance,Cursor Color,Cursor Theme,Mouse Theme,Mouse Appearance,Mouse Skins,Pointer Colors,Pointer Appearance X-KDE-Keywords[ar]=فأرة,مؤشّر,مؤشر,سمة,ثيم,مظهر المؤشّر,لون المؤشّر,سمة المؤشّر,سمة الفأرة,مظهر الفأرة,بشرات الفأرة,ألوان المؤشّر,مظهر المؤشّر X-KDE-Keywords[bs]=Miš,kursor,tema,pojavljivanje kurosra,boja kursora,tema kursora,tema miša,pojavljivanje miša,površina miša,pokazatelj boja,pojava boja X-KDE-Keywords[ca]=Ratolí,Cursor,Tema,Aparença de cursor,Color de cursor,Tema de cursor,Tema de ratolí,Aparença de ratolí,Pells de ratolí,Colors d'apuntador,Aparença d'apuntador X-KDE-Keywords[ca@valencia]=Ratolí,Cursor,Tema,Aparença de cursor,Color de cursor,Tema de cursor,Tema de ratolí,Aparença de ratolí,Pells de ratolí,Colors d'apuntador,Aparença d'apuntador X-KDE-Keywords[da]=Mus,markør,cursor,tema,markørens udseende,markørfarve,markørtema,musetema,musens udseende,museskin X-KDE-Keywords[de]=Maus,Zeiger,Mauszeiger,Zeigerfarbe,Zeigerdesign X-KDE-Keywords[el]=ποντίκι,δρομέας,θέμα,εμφάνιση δρομέα,χρώμα δρομέα,θέμα δρομέα,θέμα ποντικιού,εμφάνιση ποντικιού,θέματα ποντικιού,χρώματα δείκτη,εμφάνιση δείκτη X-KDE-Keywords[en_GB]=Mouse,Cursor,Theme,Cursor Appearance,Cursor Colour,Cursor Theme,Mouse Theme,Mouse Appearance,Mouse Skins,Pointer Colours,Pointer Appearance X-KDE-Keywords[es]=Ratón,Cursor,Tema,Apariencia del cursor,Color del cursor,Tema del cursor,Tema del ratón,Apariencia del ratón,Pieles del ratón,Colores del puntero,Apariencia del puntero X-KDE-Keywords[et]=Hiir,Kursor,Teema,Kursori välimus,Kursori värv,Kursori teema,Hiireteema,Hiire välimus,Hiire nahad,Osutusseadme värvid,Osutusseadme välimus X-KDE-Keywords[eu]=sagu,kurtsore,gai,kurtsorearen itsura,kurtsorearen kolorea,saguaren gaia,saguaren itxura,saguaren azalak,erakuslearen koloreak,erakuslearen itxura X-KDE-Keywords[fi]=hiiri,osoitin,teema,osoittimen ulkoasu,osoittimen väri,osoitinteema,hiiren teema,hiiriteema,hiiren ulkoasu,hiiriteemat,osoitinvärit X-KDE-Keywords[fr]=Souris, Curseur, Thème, Apparence du curseur, Couleur du curseur, Thème de curseurs, Thème de la souris, Apparence de la souris, Revêtement de la souris, Couleur du pointeur, Apparence du pointeur X-KDE-Keywords[gl]=rato, cursor, tema, aparencia do cursor, cor do cursor, tema do cursor, tema do rato, aparencia do rato, cor do rato, punteiro, cor do punteiro, aparencia do punteiro, tema do punteiro X-KDE-Keywords[hu]=Egér,Kurzor,Téma,Kurzormegjelenés,Kurzorszín,Kurzortéma,Egértéma,Egérmegjelenés,Egérfelületek,Mutató színek,Mutató megjelenés X-KDE-Keywords[ia]=Mus,Cursor,Thema,Apparentia,Cursor,Color,Thema de Cursor,Thema de Mus, Apparentia de Mus,Pelles de Mus,Colores de punctator,Apparentia de punctator X-KDE-Keywords[id]=Mouse,Kursor,Tema,Penampilan Kursor,Warna Kursor,Tema Kursor,Tema Mouse,Penampilan Mouse,Kulit Mouse,Warna Penunjuk,Penampilan Penunjuk X-KDE-Keywords[it]=Mouse,Puntatore,Aspetto puntatore,Colore puntatore,Tema puntatore,Tema mouse,Aspetto mouse,Skin mouse,Colore puntatore,Aspetto puntatore X-KDE-Keywords[kk]=Mouse,Cursor,Theme,Cursor Appearance,Cursor Color,Cursor Theme,Mouse Theme,Mouse Appearance,Mouse Skins,Pointer Colors,Pointer Appearance X-KDE-Keywords[km]=Mouse,Cursor,Theme,Cursor Appearance,Cursor Color,Cursor Theme,Mouse Theme,Mouse Appearance,Mouse Skins,Pointer Colors,Pointer Appearance X-KDE-Keywords[ko]=Mouse,Cursor,Theme,Cursor Appearance,Cursor Color,Cursor Theme,Mouse Theme,Mouse Appearance,Mouse Skins,Pointer Colors,Pointer Appearance,마우스,커서,커서 테마,포인터 X-KDE-Keywords[mr]=माऊस, कर्सर, थीम, कर्सर, अपिरिअन्स, कर्सर, कलर, कर्सर थीम, माऊस थीम, माऊस अपिरिअन्स, माऊस स्कीन्स, पॉईटर अपिरिअन्स X-KDE-Keywords[nb]=Mus,peker,tema,pekerutseende,pekerfarge,pekertema,musetema,musutseende,museskins,pekerfarger,pekeerutseende X-KDE-Keywords[nds]=Muus,Wieser,Muster, Wieserutsehn,Klöör,Utsehn X-KDE-Keywords[nl]=Muis,Cursor,Thema,Uiterlijk van cursor,kleur van cursor,Thema van cursor,Thema van muis,uiterlijk van muis,Muisoppervlak,Kleuren van aanwijzer,Uiterlijk van aanwijzer X-KDE-Keywords[nn]=mus,peikar,tema,peikarutsjånad,peikarfarge,peikartema,musetema,musutsjånad,musedrakt,peikarfargar,peikarutsjånad X-KDE-Keywords[pl]=Mysz,Kursor,Motyw,Wygląd kursora,Kolor kursora,Motyw kursora,Motyw myszy,Wygląd myszy,Skórki myszy,Kolory wskaźnika,Wygląd wskaźnika X-KDE-Keywords[pt]=Rato,Cursor,Tema,Aparência do Cursor,Cor do Cursor,Tema do Cursor,Tema do Rato,Aparência do Rato,Visuais do Rato,Cores do Cursor X-KDE-Keywords[pt_BR]=Mouse,Cursor,Tema,Aparência do cursor,Cor do cursor,Tema do cursor,Tema do mouse,Aparência do mouse,Visuais do mouse,Cores do ponteiro,Aparência do ponteiro X-KDE-Keywords[ru]=Mouse,Cursor,Theme,Cursor Appearance,Cursor Color,Cursor Theme,Mouse Theme,Mouse Appearance,Mouse Skins,Pointer Colors,Pointer Appearance,мышь,курсор,тема,внешний вид курсора мыши,цвет указателя,внешний вид указателя X-KDE-Keywords[sk]=Myš, kurzor,téma,vzhľad kurzora,farba kurzora,téma kurzora,téma myši,vzhľad myši,skiny myši,farby ukazovateľa,vzhľad ukazovateľa X-KDE-Keywords[sl]=miška,kazalec,kurzor,kazalka,tema,videz kazalca,videz kazalke,barva kazalca,barva kazalke,tema kazalcev,tema kazalk,tema miške,videz miške,preobleke miške,teme miške X-KDE-Keywords[sr]=Mouse,Cursor,Theme,Cursor Appearance,Cursor Color,Cursor Theme,Mouse Theme,Mouse Appearance,Mouse Skins,Pointer Colors,Pointer Appearance,миш,показивач,курсор,тема,изглед показивача,боја показивача,тема показивача,тема миша,изглед миша,пресвлаке миша,боје показивача X-KDE-Keywords[sr@ijekavian]=Mouse,Cursor,Theme,Cursor Appearance,Cursor Color,Cursor Theme,Mouse Theme,Mouse Appearance,Mouse Skins,Pointer Colors,Pointer Appearance,миш,показивач,курсор,тема,изглед показивача,боја показивача,тема показивача,тема миша,изглед миша,пресвлаке миша,боје показивача X-KDE-Keywords[sr@ijekavianlatin]=Mouse,Cursor,Theme,Cursor Appearance,Cursor Color,Cursor Theme,Mouse Theme,Mouse Appearance,Mouse Skins,Pointer Colors,Pointer Appearance,miš,pokazivač,kursor,tema,izgled pokazivača,boja pokazivača,tema pokazivača,tema miša,izgled miša,presvlake miša,boje pokazivača X-KDE-Keywords[sr@latin]=Mouse,Cursor,Theme,Cursor Appearance,Cursor Color,Cursor Theme,Mouse Theme,Mouse Appearance,Mouse Skins,Pointer Colors,Pointer Appearance,miš,pokazivač,kursor,tema,izgled pokazivača,boja pokazivača,tema pokazivača,tema miša,izgled miša,presvlake miša,boje pokazivača X-KDE-Keywords[sv]=Mus,Pekare,Tema,Utseende,Färg,Pekartema,Mustema,Musutseende,Musskal,Pekarfärger,Pekarutseende X-KDE-Keywords[tr]=Fare,İşaretçi,Tema,İşaretçi Görünümü,İşaretçi Rengi,İşaretçi Teması,Fare Teması,Fare Görünümü,Fare Kabuğu,İşaretçi Renkleri,İşaretçi Görünümü X-KDE-Keywords[uk]=миша,вказівник,тема,вигляд вказівника,колір вказівника,тема вказівника,тема миші,вигляд миші,Mouse,Cursor,Theme,Cursor Appearance,Cursor Color,Cursor Theme,Mouse Theme,Mouse Appearance,Mouse Skins,Pointer Colors,Pointer Appearance X-KDE-Keywords[x-test]=xxMousexx,xxCursorxx,xxThemexx,xxCursor Appearancexx,xxCursor Colorxx,xxCursor Themexx,xxMouse Themexx,xxMouse Appearancexx,xxMouse Skinsxx,xxPointer Colorsxx,xxPointer Appearancexx X-KDE-Keywords[zh_CN]=Mouse,Cursor,Theme,Cursor Appearance,Cursor Color,Cursor Theme,Mouse Theme,Mouse Appearance,Mouse Skins,Pointer Colors,Pointer Appearance,鼠标,指针,主题,指针外观,指针颜色,指针主题,鼠标主题,鼠标外观,鼠标皮肤,指针外观 X-KDE-Keywords[zh_TW]=Mouse,Cursor,Theme,Cursor Appearance,Cursor Color,Cursor Theme,Mouse Theme,Mouse Appearance,Mouse Skins,Pointer Colors,Pointer Appearance diff --git a/kcms/cursortheme/package/metadata.desktop b/kcms/cursortheme/package/metadata.desktop index dc100739e..c87890fa8 100644 --- a/kcms/cursortheme/package/metadata.desktop +++ b/kcms/cursortheme/package/metadata.desktop @@ -1,75 +1,76 @@ [Desktop Entry] Name=Cursors Name[ca]=Cursors Name[ca@valencia]=Cursors Name[cs]=Kurzory Name[da]=Markører Name[de]=Zeiger Name[el]=Δρομείς Name[en_GB]=Cursors Name[es]=Cursores Name[eu]=Kurtsoreak Name[fi]=Osoittimet Name[fr]=Pointeurs Name[gl]=Cursores Name[he]=מצביעים Name[hu]=Kurzorok Name[id]=Kursor Name[it]=Puntatori Name[ko]=커서 Name[lt]=Žymekliai Name[nl]=Cursors Name[nn]=Peikarar Name[pa]=ਕਰਸਰਾਂ Name[pl]=Wskaźniki Name[pt]=Cursores Name[pt_BR]=Cursores Name[ru]=Курсоры мыши Name[sk]=Kurzory Name[sl]=Kazalke Name[sr]=Показивачи Name[sr@ijekavian]=Показивачи Name[sr@ijekavianlatin]=Pokazivači Name[sr@latin]=Pokazivači Name[sv]=Pekare Name[tr]=İmleçler Name[uk]=Вказівники Name[x-test]=xxCursorsxx Name[zh_CN]=光标 Name[zh_TW]=游標 Comment=Choose mouse cursor theme Comment[ca]=Trieu el tema del cursor del ratolí Comment[ca@valencia]=Trieu el tema del cursor del ratolí Comment[de]=Design für den Mauszeiger auswählen Comment[en_GB]=Choose mouse cursor theme Comment[es]=Escoger un tema de cursores para el ratón Comment[fi]=Valitse hiiriosoitinteema +Comment[fr]=Choisissez le thème de souris Comment[gl]=Escoller un tema de cursor de rato -Comment[id]=Pilihlah tema kursor mouse +Comment[id]=Memilih tema kursor mouse Comment[it]=Scegli tema dei puntatori del mouse Comment[ko]=마우스 커서 테마 선택 Comment[nl]=Muiscursorthema kiezen Comment[nn]=Vel peikartema Comment[pl]=Wybierz zestaw wskaźników myszy Comment[pt]=Escolher o tema do cursor do rato Comment[pt_BR]=Escolha o tema do cursor do mouse Comment[sk]=Vyberte tému kurzora myši Comment[sv]=Välj muspekartema Comment[uk]=Вибір теми вказівника миші Comment[x-test]=xxChoose mouse cursor themexx Comment[zh_CN]=选择鼠标光标主题 Comment[zh_TW]=選擇滑鼠游標主題 Icon=edit-select Keywords= Type=Service X-KDE-ParentApp= X-KDE-PluginInfo-Author=Marco Martin X-KDE-PluginInfo-Email=mart@kde.org X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-Name=kcm_cursortheme X-KDE-PluginInfo-Version= X-KDE-PluginInfo-Website=https://www.kde.org/plasma-desktop X-KDE-ServiceTypes=Plasma/Generic X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml diff --git a/kcms/desktoptheme/kcm.cpp b/kcms/desktoptheme/kcm.cpp index 15e6a8ed3..2a7500be1 100644 --- a/kcms/desktoptheme/kcm.cpp +++ b/kcms/desktoptheme/kcm.cpp @@ -1,372 +1,372 @@ /* This file is part of the KDE Project Copyright (c) 2014 Marco Martin Copyright (c) 2014 Vishesh Handa Copyright (c) 2016 David Rosca Copyright (c) 2018 Kai Uwe Broulik This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "kcm.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include Q_LOGGING_CATEGORY(KCM_DESKTOP_THEME, "kcm_desktoptheme") K_PLUGIN_FACTORY_WITH_JSON(KCMDesktopThemeFactory, "kcm_desktoptheme.json", registerPlugin();) KCMDesktopTheme::KCMDesktopTheme(QObject *parent, const QVariantList &args) : KQuickAddons::ConfigModule(parent, args) , m_defaultTheme(new Plasma::Theme(this)) , m_haveThemeExplorerInstalled(false) { //This flag seems to be needed in order for QQuickWidget to work //see https://bugreports.qt-project.org/browse/QTBUG-40765 //also, it seems to work only if set in the kcm, not in the systemsettings' main qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); qmlRegisterType(); KAboutData* about = new KAboutData(QStringLiteral("kcm_desktoptheme"), i18n("Plasma Theme"), QStringLiteral("0.1"), QString(), KAboutLicense::LGPL); about->addAuthor(i18n("David Rosca"), QString(), QStringLiteral("nowrep@gmail.com")); setAboutData(about); setButtons(Apply | Default | Help); m_model = new QStandardItemModel(this); QHash roles = m_model->roleNames(); roles[PluginNameRole] = QByteArrayLiteral("pluginName"); roles[ThemeNameRole] = QByteArrayLiteral("themeName"); roles[DescriptionRole] = QByteArrayLiteral("description"); roles[IsLocalRole] = QByteArrayLiteral("isLocal"); roles[PendingDeletionRole] = QByteArrayLiteral("pendingDeletion"); m_model->setItemRoleNames(roles); m_haveThemeExplorerInstalled = !QStandardPaths::findExecutable(QStringLiteral("plasmathemeexplorer")).isEmpty(); } KCMDesktopTheme::~KCMDesktopTheme() { delete m_defaultTheme; } QStandardItemModel *KCMDesktopTheme::desktopThemeModel() const { return m_model; } QString KCMDesktopTheme::selectedPlugin() const { return m_selectedPlugin; } void KCMDesktopTheme::setSelectedPlugin(const QString &plugin) { if (m_selectedPlugin == plugin) { return; } m_selectedPlugin = plugin; emit selectedPluginChanged(m_selectedPlugin); emit selectedPluginIndexChanged(); updateNeedsSave(); } int KCMDesktopTheme::selectedPluginIndex() const { const auto results = m_model->match(m_model->index(0, 0), PluginNameRole, m_selectedPlugin); if (results.count() == 1) { return results.first().row(); } return -1; } bool KCMDesktopTheme::downloadingFile() const { return m_tempCopyJob; } void KCMDesktopTheme::setPendingDeletion(int index, bool pending) { QModelIndex idx = m_model->index(index, 0); m_model->setData(idx, pending, PendingDeletionRole); if (pending && selectedPluginIndex() == index) { // move to the next non-pending theme const auto nonPending = m_model->match(idx, PendingDeletionRole, false); setSelectedPlugin(nonPending.first().data(PluginNameRole).toString()); } updateNeedsSave(); } void KCMDesktopTheme::getNewStuff(QQuickItem *ctx) { if (!m_newStuffDialog) { m_newStuffDialog = new KNS3::DownloadDialog(QStringLiteral("plasma-themes.knsrc")); - m_newStuffDialog.data()->setWindowTitle(i18n("Download New Desktop Themes")); + m_newStuffDialog.data()->setWindowTitle(i18n("Download New Plasma Themes")); m_newStuffDialog->setWindowModality(Qt::WindowModal); m_newStuffDialog->winId(); // so it creates the windowHandle(); connect(m_newStuffDialog.data(), &KNS3::DownloadDialog::accepted, this, &KCMDesktopTheme::load); } if (ctx && ctx->window()) { m_newStuffDialog->windowHandle()->setTransientParent(ctx->window()); } m_newStuffDialog.data()->show(); } void KCMDesktopTheme::installThemeFromFile(const QUrl &url) { if (url.isLocalFile()) { installTheme(url.toLocalFile()); return; } if (m_tempCopyJob) { return; } m_tempInstallFile.reset(new QTemporaryFile()); if (!m_tempInstallFile->open()) { emit showErrorMessage(i18n("Unable to create a temporary file.")); m_tempInstallFile.reset(); return; } m_tempCopyJob = KIO::file_copy(url, QUrl::fromLocalFile(m_tempInstallFile->fileName()), -1, KIO::Overwrite); m_tempCopyJob->uiDelegate()->setAutoErrorHandlingEnabled(true); emit downloadingFileChanged(); connect(m_tempCopyJob, &KIO::FileCopyJob::result, this, [this, url](KJob *job) { if (job->error() != KJob::NoError) { emit showErrorMessage(i18n("Unable to download the theme: %1", job->errorText())); return; } installTheme(m_tempInstallFile->fileName()); m_tempInstallFile.reset(); }); connect(m_tempCopyJob, &QObject::destroyed, this, &KCMDesktopTheme::downloadingFileChanged); } void KCMDesktopTheme::installTheme(const QString &path) { qCDebug(KCM_DESKTOP_THEME) << "Installing ... " << path; const QString program = QStringLiteral("kpackagetool5"); const QStringList arguments = { QStringLiteral("--type"), QStringLiteral("Plasma/Theme"), QStringLiteral("--install"), path}; qCDebug(KCM_DESKTOP_THEME) << program << arguments.join(QStringLiteral(" ")); QProcess *myProcess = new QProcess(this); connect(myProcess, static_cast(&QProcess::finished), this, [this, myProcess](int exitCode, QProcess::ExitStatus exitStatus) { Q_UNUSED(exitStatus); if (exitCode == 0) { emit showSuccessMessage(i18n("Theme installed successfully.")); load(); } else { Q_EMIT showErrorMessage(i18n("Theme installation failed.")); } }); connect(myProcess, static_cast(&QProcess::error), this, [this](QProcess::ProcessError e) { qCWarning(KCM_DESKTOP_THEME) << "Theme installation failed: " << e; Q_EMIT showErrorMessage(i18n("Theme installation failed.")); }); myProcess->start(program, arguments); } void KCMDesktopTheme::applyPlasmaTheme(QQuickItem *item, const QString &themeName) { if (!item) { return; } Plasma::Theme *theme = m_themes[themeName]; if (!theme) { theme = new Plasma::Theme(themeName, this); m_themes[themeName] = theme; } Q_FOREACH (Plasma::Svg *svg, item->findChildren()) { svg->setTheme(theme); svg->setUsingRenderingCache(false); } } void KCMDesktopTheme::load() { m_pendingRemoval.clear(); // Get all desktop themes QStringList themes; const QStringList &packs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("plasma/desktoptheme"), QStandardPaths::LocateDirectory); Q_FOREACH (const QString &ppath, packs) { const QDir cd(ppath); const QStringList &entries = cd.entryList(QDir::Dirs | QDir::Hidden | QDir::NoDotAndDotDot); Q_FOREACH (const QString &pack, entries) { const QString _metadata = ppath + QLatin1Char('/') + pack + QStringLiteral("/metadata.desktop"); if (QFile::exists(_metadata)) { themes << _metadata; } } } m_model->clear(); Q_FOREACH (const QString &theme, themes) { int themeSepIndex = theme.lastIndexOf(QLatin1Char('/'), -1); const QString themeRoot = theme.left(themeSepIndex); int themeNameSepIndex = themeRoot.lastIndexOf(QLatin1Char('/'), -1); const QString packageName = themeRoot.right(themeRoot.length() - themeNameSepIndex - 1); KDesktopFile df(theme); if (df.noDisplay()) { continue; } QString name = df.readName(); if (name.isEmpty()) { name = packageName; } const bool isLocal = QFileInfo(theme).isWritable(); if (m_model->findItems(packageName).isEmpty()) { QStandardItem *item = new QStandardItem; item->setText(packageName); item->setData(packageName, PluginNameRole); item->setData(name, ThemeNameRole); item->setData(df.readComment(), DescriptionRole); item->setData(isLocal, IsLocalRole); item->setData(false, PendingDeletionRole); m_model->appendRow(item); } } m_model->setSortRole(ThemeNameRole); // FIXME the model should really be just using Qt::DisplayRole m_model->sort(0 /*column*/); KConfigGroup cg(KSharedConfig::openConfig(QStringLiteral("plasmarc")), "Theme"); setSelectedPlugin(cg.readEntry("name", m_defaultTheme->themeName())); emit selectedPluginIndexChanged(); updateNeedsSave(); } void KCMDesktopTheme::save() { if (m_defaultTheme->themeName() != m_selectedPlugin) { m_defaultTheme->setThemeName(m_selectedPlugin); } processPendingDeletions(); updateNeedsSave(); } void KCMDesktopTheme::defaults() { setSelectedPlugin(QStringLiteral("default")); // can this be done more elegantly? const auto pendingDeletions = m_model->match(m_model->index(0, 0), PendingDeletionRole, true); for (const QModelIndex &idx : pendingDeletions) { m_model->setData(idx, false, PendingDeletionRole); } } bool KCMDesktopTheme::canEditThemes() const { return m_haveThemeExplorerInstalled; } void KCMDesktopTheme::editTheme(const QString &theme) { QProcess::startDetached(QStringLiteral("plasmathemeexplorer -t ") % theme); } void KCMDesktopTheme::updateNeedsSave() { setNeedsSave(!m_model->match(m_model->index(0, 0), PendingDeletionRole, true).isEmpty() || m_selectedPlugin != m_defaultTheme->themeName()); } void KCMDesktopTheme::processPendingDeletions() { const QString program = QStringLiteral("plasmapkg2"); const auto pendingDeletions = m_model->match(m_model->index(0, 0), PendingDeletionRole, true, -1 /*all*/); QVector persistentPendingDeletions; // turn into persistent model index so we can delete as we go std::transform(pendingDeletions.begin(), pendingDeletions.end(), std::back_inserter(persistentPendingDeletions), [](const QModelIndex &idx) { return QPersistentModelIndex(idx); }); for (const QPersistentModelIndex &idx : persistentPendingDeletions) { const QString pluginName = idx.data(PluginNameRole).toString(); const QString displayName = idx.data(Qt::DisplayRole).toString(); Q_ASSERT(pluginName != m_selectedPlugin); const QStringList arguments = {QStringLiteral("-t"), QStringLiteral("theme"), QStringLiteral("-r"), pluginName}; QProcess *process = new QProcess(this); connect(process, static_cast(&QProcess::finished), this, [this, process, idx, pluginName, displayName](int exitCode, QProcess::ExitStatus exitStatus) { Q_UNUSED(exitStatus); if (exitCode == 0) { m_model->removeRow(idx.row()); } else { emit showErrorMessage(i18n("Removing theme failed: %1", QString::fromLocal8Bit(process->readAllStandardOutput().trimmed()))); m_model->setData(idx, false, PendingDeletionRole); } process->deleteLater(); }); process->start(program, arguments); process->waitForFinished(); // needed so it deletes fine when "OK" is clicked and the dialog destroyed } } #include "kcm.moc" diff --git a/kcms/desktoptheme/kcm_desktoptheme.desktop b/kcms/desktoptheme/kcm_desktoptheme.desktop index 123f5b3a7..ee33c90ed 100644 --- a/kcms/desktoptheme/kcm_desktoptheme.desktop +++ b/kcms/desktoptheme/kcm_desktoptheme.desktop @@ -1,112 +1,113 @@ [Desktop Entry] Icon=preferences-desktop-plasma-theme Exec=kcmshell5 kcm_desktoptheme Type=Service X-KDE-ServiceTypes=KCModule X-KDE-Library=kcm_desktoptheme X-KDE-ParentApp=kcontrol X-KDE-System-Settings-Parent-Category=workspacetheme X-KDE-Weight=40 X-DocPath=kcontrol/desktopthemedetails/index.html Name=Plasma Theme Name[ca]=Tema del Plasma Name[ca@valencia]=Tema del Plasma Name[cs]=Motiv Plasma Name[de]=Plasma-Design Name[en_GB]=Plasma Theme Name[es]=Tema de Plasma Name[fi]=Plasma-teema Name[fr]=Thème Plasma pour les thèmes foncés Name[gl]=Tema de Plasma Name[id]=Tema Plasma Name[it]=Tema di Plasma Name[ko]=Plasma 테마 Name[nl]=Plasma-thema Name[nn]=Plasma-tema Name[pl]=Wygląd Plazmy Name[pt]=Tema do Plasma Name[pt_BR]=Tema do Plasma Name[ru]=Тема оформления Plasma Name[sk]=Plasma téma Name[sv]=Plasmatema Name[uk]=Теми Плазми Name[x-test]=xxPlasma Themexx Name[zh_CN]=Plasma 主题 Name[zh_TW]=Plasma 主題 Comment=Choose Plasma theme Comment[ca]=Trieu el tema del Plasma Comment[ca@valencia]=Trieu el tema del Plasma Comment[de]=Plasma-Design auswählen Comment[en_GB]=Choose Plasma theme Comment[es]=Escoger un tema de Plasma Comment[fi]=Valitse Plasma-teema +Comment[fr]=Choisissez le thème Plasma Comment[gl]=Escoller un tema de Plasma Comment[id]=Pilihlah tema Plasma Comment[it]=Scegli tema di Plasma Comment[ko]=Plasma 테마 선택 Comment[nl]=Plasma-thema kiezen Comment[nn]=Vel Plasma-tema Comment[pl]=Wybierz wygląd Plazmy Comment[pt]=Escolher o tema do Plasma Comment[pt_BR]=Escolha o tema do Plasma Comment[sk]=Vyberte Plasma tému Comment[sv]=Välj Plasmatema Comment[uk]=Вибір теми Плазми Comment[x-test]=xxChoose Plasma themexx Comment[zh_CN]=选择 Plasma 主题 Comment[zh_TW]=選擇 Plasma 主題 X-KDE-Keywords=Desktop Theme X-KDE-Keywords[ar]=سمة سطح المكتب X-KDE-Keywords[bs]=Tema površi X-KDE-Keywords[ca]=Tema d'escriptori X-KDE-Keywords[ca@valencia]=Tema d'escriptori X-KDE-Keywords[cs]=Motiv plochy X-KDE-Keywords[da]=Skrivebordstema X-KDE-Keywords[de]=Arbeitsflächen-Design X-KDE-Keywords[el]=Θέμα επιφάνειας εργασίας X-KDE-Keywords[en_GB]=Desktop Theme X-KDE-Keywords[es]=Tema de escritorio X-KDE-Keywords[et]=Töölauateema X-KDE-Keywords[eu]=Mahaigaineko gaia X-KDE-Keywords[fi]=Työpöytäteema X-KDE-Keywords[fr]=Thème du bureau X-KDE-Keywords[ga]=Téama Deisce X-KDE-Keywords[gl]=Tema do escritorio X-KDE-Keywords[he]=ערכת־הנושא X-KDE-Keywords[hu]=Asztali téma X-KDE-Keywords[ia]=Thema de scriptorio X-KDE-Keywords[id]=Tema Desktop X-KDE-Keywords[is]=Skjáborðsþema X-KDE-Keywords[it]=Tema del desktop X-KDE-Keywords[ja]=デスクトップテーマ X-KDE-Keywords[kk]=Desktop Theme,Үстел нақышы X-KDE-Keywords[km]=រូបរាង​ផ្ទៃតុ X-KDE-Keywords[ko]=데스크톱 테마 X-KDE-Keywords[lt]=Darbalaukio apipavidalinimas X-KDE-Keywords[mr]=डेस्कटॉप शैली X-KDE-Keywords[nb]=Skrivebordstema X-KDE-Keywords[nds]=Schriefdischmuster X-KDE-Keywords[nl]=Bureaubladthema X-KDE-Keywords[nn]=Skrivebordstema X-KDE-Keywords[pa]=ਡੈਸਕਟਾਪ ਥੀਮ X-KDE-Keywords[pl]=Wygląd pulpitu X-KDE-Keywords[pt]=Tema do Ambiente de Trabalho X-KDE-Keywords[pt_BR]=Tema da área de trabalho X-KDE-Keywords[ro]=Tematica de birou X-KDE-Keywords[ru]=Тема рабочего стола X-KDE-Keywords[sk]=Téma plochy X-KDE-Keywords[sl]=Namizna tema X-KDE-Keywords[sr]=Desktop Theme,тема површи X-KDE-Keywords[sr@ijekavian]=Desktop Theme,тема површи X-KDE-Keywords[sr@ijekavianlatin]=Desktop Theme,tema površi X-KDE-Keywords[sr@latin]=Desktop Theme,tema površi X-KDE-Keywords[sv]=Skrivbordstema X-KDE-Keywords[tr]=Masaüstü Teması X-KDE-Keywords[ug]=ئۈستەلئۈستى ئۆرنىكى X-KDE-Keywords[uk]=тема,стільниця X-KDE-Keywords[vi]=Sắc thái màn hình X-KDE-Keywords[x-test]=xxDesktop Themexx X-KDE-Keywords[zh_CN]=Desktop Theme,桌面主题 X-KDE-Keywords[zh_TW]=Desktop Theme diff --git a/kcms/desktoptheme/package/metadata.desktop b/kcms/desktoptheme/package/metadata.desktop index caede5fc0..6b545aa94 100644 --- a/kcms/desktoptheme/package/metadata.desktop +++ b/kcms/desktoptheme/package/metadata.desktop @@ -1,62 +1,63 @@ [Desktop Entry] Name=Plasma Theme Name[ca]=Tema del Plasma Name[ca@valencia]=Tema del Plasma Name[cs]=Motiv Plasma Name[de]=Plasma-Design Name[en_GB]=Plasma Theme Name[es]=Tema de Plasma Name[fi]=Plasma-teema Name[fr]=Thème Plasma pour les thèmes foncés Name[gl]=Tema de Plasma Name[id]=Tema Plasma Name[it]=Tema di Plasma Name[ko]=Plasma 테마 Name[nl]=Plasma-thema Name[nn]=Plasma-tema Name[pl]=Wygląd Plazmy Name[pt]=Tema do Plasma Name[pt_BR]=Tema do Plasma Name[ru]=Тема оформления Plasma Name[sk]=Plasma téma Name[sv]=Plasmatema Name[uk]=Теми Плазми Name[x-test]=xxPlasma Themexx Name[zh_CN]=Plasma 主题 Name[zh_TW]=Plasma 主題 Comment=Choose Plasma theme Comment[ca]=Trieu el tema del Plasma Comment[ca@valencia]=Trieu el tema del Plasma Comment[de]=Plasma-Design auswählen Comment[en_GB]=Choose Plasma theme Comment[es]=Escoger un tema de Plasma Comment[fi]=Valitse Plasma-teema +Comment[fr]=Choisissez le thème Plasma Comment[gl]=Escoller un tema de Plasma Comment[id]=Pilihlah tema Plasma Comment[it]=Scegli tema di Plasma Comment[ko]=Plasma 테마 선택 Comment[nl]=Plasma-thema kiezen Comment[nn]=Vel Plasma-tema Comment[pl]=Wybierz wygląd Plazmy Comment[pt]=Escolher o tema do Plasma Comment[pt_BR]=Escolha o tema do Plasma Comment[sk]=Vyberte Plasma tému Comment[sv]=Välj Plasmatema Comment[uk]=Вибір теми Плазми Comment[x-test]=xxChoose Plasma themexx Comment[zh_CN]=选择 Plasma 主题 Comment[zh_TW]=選擇 Plasma 主題 Icon=preferences-desktop-theme Keywords= Type=Service X-KDE-ParentApp= X-KDE-PluginInfo-Author=David Rosca X-KDE-PluginInfo-Email=nowrep@gmail.com X-KDE-PluginInfo-License=GPL-2.0+ X-KDE-PluginInfo-Name=kcm_desktoptheme X-KDE-PluginInfo-Version= X-KDE-PluginInfo-Website=https://www.kde.org/plasma-desktop X-KDE-ServiceTypes=Plasma/Generic X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml diff --git a/kcms/emoticons/emoticons.desktop b/kcms/emoticons/emoticons.desktop index c4b9a93c3..5bb900369 100644 --- a/kcms/emoticons/emoticons.desktop +++ b/kcms/emoticons/emoticons.desktop @@ -1,179 +1,180 @@ [Desktop Entry] Exec=kcmshell5 emoticons Icon=face-smile Type=Service X-DocPath=kcontrol/emoticons/index.html X-KDE-ServiceTypes=KCModule X-KDE-Library=kcm_emoticons X-KDE-ParentApp=kcontrol X-KDE-System-Settings-Parent-Category=icons X-KDE-Weight=110 Name=Emoticons Name[af]=Emotikons Name[ar]=الوجوه التّعبيرية Name[as]=ভাব-প্ৰতীক Name[be@latin]=Smajliki Name[bg]=Емотикони Name[bn]=ইমোট-আইকন Name[bn_IN]=ইমোআইকন Name[bs]=Emotikoni Name[ca]=Emoticones Name[ca@valencia]=Emoticones Name[cs]=Emotikony Name[csb]=Emòtikónczi Name[da]=Emotikoner Name[de]=Emoticons Name[el]=Εικονίδια διάθεσης Name[en_GB]=Emoticons Name[eo]=Miensimboloj Name[es]=Emoticonos Name[et]=Emotikonid Name[eu]=Aurpegierak Name[fa]=صورتک Name[fi]=Hymiöt Name[fr]=Émoticônes Name[fy]=Emobyldkaikes Name[ga]=Straoiseoga Name[gl]=Emoticonas Name[gu]=લાગણીઓ Name[he]=רגשונים Name[hi]=हँसमुख Name[hne]=चेहराचिनहा Name[hr]=Emoticons Name[hsb]=Emotikony Name[hu]=Emotikonok Name[ia]=Emoticones Name[id]=Emoticon Name[is]=Tjáningartákn Name[it]=Faccine Name[ja]=感情アイコン Name[kk]=Көңіл күйі белгілері Name[km]=សញ្ញា​អារម្មណ៍ Name[kn]=ಭಾವನಾಚಿಹ್ನೆಗಳು (ಎಮೋಟಿಕಾನ್) Name[ko]=이모티콘 Name[ku]=Emotîkon Name[lt]=Jaustukai Name[lv]=Emocijzīmes Name[mai]=भाव-प्रतीक Name[mk]=Емотикони Name[ml]=വികാരചിഹ്നങ്ങള്‍ Name[mr]=भावप्रतिमा Name[nb]=Humørfjes Name[nds]=Snuten Name[nl]=Emoticons Name[nn]=Fjesingar Name[or]=Emoticons Name[pa]=ਈਮੋਸ਼ਨ Name[pl]=Emotikony Name[pt]=Ícones Emotivos Name[pt_BR]=Emoticons Name[ro]=Emoticoni Name[ru]=Смайлики Name[si]=ඉමොටිකොන Name[sk]=Emotikony Name[sl]=Izrazne ikone Name[sr]=Емотикони Name[sr@ijekavian]=Емотикони Name[sr@ijekavianlatin]=Emotikoni Name[sr@latin]=Emotikoni Name[sv]=Smilisar Name[ta]=உணர்வோயியங்கள் Name[te]=ఎమొటికాన్లు Name[tg]=Тасвирчаҳо Name[th]=ไอคอนสื่ออารมณ์ Name[tr]=Duygu Simgeleri Name[ug]=چىراي ئىپادىلىرى Name[uk]=Емоційки Name[uz]=His-tuygʻular Name[uz@cyrillic]=Ҳис-туйғулар Name[vi]=Hình biểu cảm Name[wa]=Xhinêyes Name[x-test]=xxEmoticonsxx Name[zh_CN]=表情符号 Name[zh_TW]=表情圖示 Comment=Choose emoticon theme Comment[ca]=Trieu el tema de les emoticones Comment[ca@valencia]=Trieu el tema de les emoticones Comment[de]=Emoticon-Design auswählen Comment[en_GB]=Choose emoticon theme Comment[es]=Escoger un tema de emoticonos Comment[fi]=Valitse hymiöteema +Comment[fr]=Choisir le thème d'émoticônes Comment[gl]=Escoller un tema de emoticonas Comment[id]=Pilihlah tema emoticon Comment[it]=Scegli tema di faccine Comment[ko]=이모티콘 테마 선택 Comment[nl]=Emoticonthema kiezen Comment[nn]=Vel fjesingtema Comment[pl]=Wybierz zestaw emotikon Comment[pt]=Escolher o tema de ícones emotivos Comment[pt_BR]=Escolha o tema de emoticons Comment[sk]=Vyberte tému emotikonov Comment[sv]=Välj smilistema Comment[uk]=Вибір теми емоційок Comment[x-test]=xxChoose emoticon themexx Comment[zh_CN]=选择表情主题 Comment[zh_TW]=選擇表情符號主題 X-KDE-Keywords=Emoticons X-KDE-Keywords[ar]=الوجوه التعبيرية,وجوه تعبيرية,ابتسامات X-KDE-Keywords[bg]=Emoticons,Емотикони X-KDE-Keywords[bn]=ইমোট-আইকন X-KDE-Keywords[bs]=Emotikoni X-KDE-Keywords[ca]=Emoticones X-KDE-Keywords[ca@valencia]=Emoticones X-KDE-Keywords[cs]=Emotikony X-KDE-Keywords[da]=Emotikoner X-KDE-Keywords[de]=Emoticons X-KDE-Keywords[el]=Εικονίδια διάθεσης X-KDE-Keywords[en_GB]=Emoticons X-KDE-Keywords[eo]=Miensimboloj X-KDE-Keywords[es]=Emoticonos X-KDE-Keywords[et]=Emotikonid X-KDE-Keywords[eu]=Aurpegierak X-KDE-Keywords[fa]=صورتک X-KDE-Keywords[fi]=Hymiöt X-KDE-Keywords[fr]=Émoticônes X-KDE-Keywords[ga]=Straoiseoga X-KDE-Keywords[gl]=Emoticonas X-KDE-Keywords[gu]=લાગણીઓ X-KDE-Keywords[he]=רגשונים X-KDE-Keywords[hi]=हँसमुख X-KDE-Keywords[hu]=Emotikonok X-KDE-Keywords[ia]=Emoticones X-KDE-Keywords[id]=Emoticons X-KDE-Keywords[is]=Tjáningartákn X-KDE-Keywords[it]=Faccine X-KDE-Keywords[ja]=感情アイコン X-KDE-Keywords[kk]=Emoticons,Көңіл күйі белгілері X-KDE-Keywords[km]=សញ្ញា​អារម្មណ៍ X-KDE-Keywords[ko]=이모티콘 X-KDE-Keywords[lt]=Jaustukai X-KDE-Keywords[lv]=Emocijzīmes X-KDE-Keywords[mr]=भावप्रतिमा X-KDE-Keywords[nb]=Humørfjes X-KDE-Keywords[nds]=Snuten,Emoticons X-KDE-Keywords[nl]=Emoticons X-KDE-Keywords[nn]=Fjesingar X-KDE-Keywords[pa]=ਈਮੋਸ਼ਨ X-KDE-Keywords[pl]=Emotikony X-KDE-Keywords[pt]=Ícones Emotivos X-KDE-Keywords[pt_BR]=Emoticons X-KDE-Keywords[ro]=Emoticoni X-KDE-Keywords[ru]=Emoticons,смайлики,смайлы,улыбочки X-KDE-Keywords[sk]=Emotikony X-KDE-Keywords[sl]=Izrazne ikone X-KDE-Keywords[sr]=emoticons,емотикони X-KDE-Keywords[sr@ijekavian]=emoticons,емотикони X-KDE-Keywords[sr@ijekavianlatin]=emoticons,emotikoni X-KDE-Keywords[sr@latin]=emoticons,emotikoni X-KDE-Keywords[sv]=Smilisar X-KDE-Keywords[tg]=Тасвирчаҳо X-KDE-Keywords[tr]=Duygu Simgeleri X-KDE-Keywords[ug]=چىراي ئىپادىلىرى X-KDE-Keywords[uk]=емоційка,емоційки,смайлик,смайлики X-KDE-Keywords[vi]=Hình biểu cảm X-KDE-Keywords[wa]=Xhinêyes X-KDE-Keywords[x-test]=xxEmoticonsxx X-KDE-Keywords[zh_CN]=表情符号 X-KDE-Keywords[zh_TW]=Emoticons diff --git a/kcms/fonts/kcm_fonts.desktop b/kcms/fonts/kcm_fonts.desktop index d22568fb4..519575410 100644 --- a/kcms/fonts/kcm_fonts.desktop +++ b/kcms/fonts/kcm_fonts.desktop @@ -1,173 +1,174 @@ [Desktop Entry] Exec=kcmshell5 fonts Icon=preferences-desktop-font Type=Service X-KDE-ServiceTypes=KCModule X-DocPath=kcontrol/fonts/index.html X-KDE-Library=kcm_fonts X-KDE-ParentApp=kcontrol X-KDE-System-Settings-Parent-Category=font X-KDE-Weight=50 Name=Fonts Name[af]=Skriftipes Name[ar]=الخطوط Name[be]=Шрыфты Name[be@latin]=Šryfty Name[bg]=Шрифтове Name[bn]=ফন্ট Name[bn_IN]=ফন্ট Name[br]=Fontoù Name[bs]=Fontovi Name[ca]=Tipus de lletra Name[ca@valencia]=Tipus de lletra Name[cs]=Písma Name[csb]=Fòntë Name[cy]=Ffontiau Name[da]=Skrifttyper Name[de]=Schriftarten Name[el]=Γραμματοσειρές Name[en_GB]=Fonts Name[eo]=Tiparoj Name[es]=Tipos de letra Name[et]=Fondid Name[eu]=Letra-tipoak Name[fa]=قلمها Name[fi]=Fontit Name[fr]=Polices de caractères Name[fy]=Lettertypen Name[ga]=Clónna Name[gl]=Tipos de letra Name[gu]=ફોન્ટ્સ Name[he]=גופנים Name[hi]=फ़ॉन्ट्स Name[hne]=फोंट Name[hr]=Fontovi Name[hsb]=Pisma Name[hu]=Betűtípusok Name[ia]=Fontes Name[id]=Font Name[is]=Letur Name[it]=Caratteri Name[ja]=フォント Name[ka]=ფონტები Name[kk]=Қаріптер Name[km]=ពុម្ព​អក្សរ Name[kn]=ಅಕ್ಷರಶೈಲಿಗಳು Name[ko]=글꼴 Name[ku]=Curenivîs Name[lt]=Šriftai Name[lv]=Fonti Name[mai]=फान्ट Name[mk]=Фонтови Name[ml]=അക്ഷരസഞ്ചയങ്ങള്‍ Name[mr]=फॉन्ट Name[ms]=Fon Name[nb]=Skrifttyper Name[nds]=Schriftoorden Name[ne]=फन्ट Name[nl]=Lettertypen Name[nn]=Skrifter Name[oc]=Poliças Name[or]=ଅକ୍ଷର ରୂପ Name[pa]=ਫੋਂਟ Name[pl]=Czcionki Name[pt]=Tipos de Letra Name[pt_BR]=Fontes Name[ro]=Fonturi Name[ru]=Шрифты Name[se]=Fonttat Name[si]=අකුරු Name[sk]=Písma Name[sl]=Pisave Name[sr]=Фонтови Name[sr@ijekavian]=Фонтови Name[sr@ijekavianlatin]=Fontovi Name[sr@latin]=Fontovi Name[sv]=Teckensnitt Name[ta]=எழுத்துருக்கள் Name[te]=ఫాంట్‍స్ Name[tg]=Ҳарфҳо Name[th]=แบบอักษรต่างๆ Name[tr]=Yazı Tipleri Name[ug]=خەت نۇسخىلىرى Name[uk]=Шрифти Name[uz]=Shriftlar Name[uz@cyrillic]=Шрифтлар Name[vi]=Phông chữ Name[wa]=Fontes Name[xh]=Uhlobo lwamagama Name[x-test]=xxFontsxx Name[zh_CN]=字体 Name[zh_TW]=字型 Comment=Configure user interface fonts Comment[ca]=Configura els tipus de lletra de l'usuari Comment[ca@valencia]=Configura els tipus de lletra de l'usuari Comment[en_GB]=Configure user interface fonts Comment[es]=Configurar los tipos de letra de la interfaz de usuario Comment[fi]=Käyttöliittymäfonttien asetukset… +Comment[fr]=Configurer les polices de l'interface utilisateur Comment[gl]=Configurar os tipos de letra da interface de usuario Comment[id]=Konfigurasikan font antarmuka pengguna Comment[it]=Configura caratteri dell'interfaccia utente Comment[ko]=사용자 인터페이스 글꼴 설정 Comment[nl]=Lettertypen van gebruikersinterface configureren Comment[nn]=Set opp skrifter for brukargrensesnittet Comment[pl]=Ustawienia czcionek interfejsu użytkownika Comment[pt]=Configurar os tipos de letra da interface do utilizador Comment[pt_BR]=Configurar as fontes da interface do usuário Comment[sk]=Nastavte písma používateľského rozhrania Comment[sv]=Anpassa teckensnitt för användargränssnitt Comment[uk]=Налаштовування шрифтів у інтерфейсі користувача Comment[x-test]=xxConfigure user interface fontsxx Comment[zh_CN]=配置用户界面字体 Comment[zh_TW]=設定使用者介面字型 X-KDE-Keywords=fonts,font size,styles,charsets,character sets,panel,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,DPI,anti-aliasing,desktop fonts,toolbar fonts,character,general fonts X-KDE-Keywords[ar]=خطوط,حجم الخط,أنماط,طقم محارف,طقوم محارف,لوحة,لوحة تحكّم,أسطح المكتب,مدير ملفات,أشرطة أدوات,قائمة,عنوان نافذة,عنوان,نقطة/بوصة,DPI,إزالة التسنّن,خطوط سطح المكتب,خطوط شريط الأدوات,محرف,خطوط عامة X-KDE-Keywords[bs]=slova,veličina slova,stil,znakovi,postaviti znakove,ploča,kontrolna ploča,pozadina,upravitelj datoteka,alatne trake,meni,naslov prozora,naslov,DPI,niskopropusni,slova pozadine,slova na alatnoj traci,obilježja,opći fontovi X-KDE-Keywords[ca]=tipus de lletres,mida de tipus de lletra,estils,joc de caràcters,jocs de caràcters,plafó,plafó de control,escriptoris,Gestor de fitxers,Barres d'eines,Menú,Títol de la finestra,Títol,DPI,antialiàsing,tipus de lletra d'escriptori,tipus de lletra de barra d'eines,caràcter,tipus de lletra general X-KDE-Keywords[ca@valencia]=tipus de lletres,mida de tipus de lletra,estils,joc de caràcters,jocs de caràcters,plafó,plafó de control,escriptoris,Gestor de fitxers,Barres d'eines,Menú,Títol de la finestra,Títol,DPI,antialiàsing,tipus de lletra d'escriptori,tipus de lletra de barra d'eines,caràcter,tipus de lletra general X-KDE-Keywords[da]=skrifttyper,skriftstørrelse,stile,tegnsæt,panel,kontrolpanel,skriveborde,filhåndtering,værktøjslinjer,menu,vinduestitel,titel,DPI,anti-aliasing,værktøjslinjer,tegn X-KDE-Keywords[de]=Schriftarten,Schriftgrößen,Stile,Zeichensätze,Kontrollleiste,Stile,Dateiverwaltung,Arbeitsflächen,Werkzeugleisten,Menüs,Fenstertitel,Titel,DPI,Antialiasing,Arbeitsflächenschriften,Werkzeugleistenschriften,Zeichen,Allgemeine Schriftarten X-KDE-Keywords[el]=γραμματοσειρές,μέγεθος γραμματοσειράς,στιλ,σύνολα χαρακτήρων,πίνακας,πίνακας ελέγχου,επιφάνειες εργασίας,διαχειριστής αρχείων,γραμμές εργαλείων,μενού,τίτλος παραθύρου,τίτλος,DPI,εξομάλυνση,γραμματοσειρές επιφάνειας εργασίας,γραμματοσειρές γραμμής εργαλείων,χαρακτήρας,γενικές γραμματοσειρές X-KDE-Keywords[en_GB]=fonts,font size,styles,charsets,character sets,panel,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,DPI,anti-aliasing,desktop fonts,toolbar fonts,character,general fonts X-KDE-Keywords[es]=tipos de letra,tamaño del tipo de letra,estilos,juegos de caracteres,panel,panel de control panel,escritorios,Gestor de archivos,Barras de herramientas,Menú,Título de la ventana,Título,DPI,suavizado de texto,tipos de letra del escritorio,tipos de letra de las barras de herramientas,carácter,tipos de letra generales X-KDE-Keywords[et]=fondid,fondi suurus,kodeering,kooditabel,paneel,juhtpaneel,töölauad,failihaldur,tööriistaribad,menüü,aken,tiitel,nimetus,nimi,DPI,antialias,töölaua fondid,tööriistariba fondid,märk,märgid,sümbolid,üldised fondid X-KDE-Keywords[eu]=letra-tipoak,letra-tamaina,estiloak,karaktere-jokoak,panela,kontrol-panela,mahaigain,fitxategi-kudeatzaile,tresna-barra,menu,leihoaren titulu,titulu,DPI,antialiasing,mahaigaineko letra-tripo,tresna-barrako letra-tipo,karaktere,letra-tipo orokor X-KDE-Keywords[fi]=kirjasimet,fontit,kirjasinkoko,fonttikoko,tyylit,merkistöt,paneeli,ohjauskeskus,työpöydät,Tiedostonhallinta,Työkalurivit,Työkalupalkit,Valikko,Ikkunan otsikko,Otsikko,DPI,antialiasointi,työpöytäkirjasimet,työpöytäfontit,työkalurivikirjasimet, työkalurivien kirjasimet, työkalurivifontit, työkalurivien fontit,merkki,yleiskirjasimet,yleiset kirjasimet,yleisfontit,yleiset fontit X-KDE-Keywords[fr]=polices, taille de police, styles, tables de caractères, jeux de caractères, tableau de bord, bureaux, Gestionnaire de Fichiers, Barre d'outils, Menu, Titre de fenêtre, Titre, DPI, anti crénelage, polices du bureau, police de barre d'outils, caractère, polices générales X-KDE-Keywords[ga]=clónna,clófhoirne,clómhéid,stíleanna,tacair charachtar,painéal,painéal rialaithe,deasca,Bainisteoir Comhad,Barraí Uirlisí,Roghchlár,Teideal Fuinneoige,Teideal,PSO,frithailiasáil,clónna deisce,clófhoirne deisce,clónna barra uirlisí,carachtar,clónna ginearálta,clófhoirne ginearálta X-KDE-Keywords[gl]=tipo de letra,letra,tamaño de letra,tamaño da letra,codificacións de caracteres,conxuntos de caracteres,panel,control,panel de control,escritorios,xestor de ficheiros,barras de ferramentas,menú,título de xanela,título,DPI,PPP,antialiasing,suavizado,tipos de letra do escritorio,tipos de letra das barras de ferramentas,carácter,tipos de letra xerais X-KDE-Keywords[hu]=betűkészletek,betűméret,stílusok,karakterkészletek,karakterkészletek,panel,beállítópanel,asztalok,Fájlkezelő,Eszköztárak,Menü,Ablakcím,Cím,DPI,élsimítás,asztal betűkészletek,eszköztár betűkészletek,karakter,általános betűkészletek X-KDE-Keywords[ia]=fonts,grandor de font,stilos,insimules de characteres,insimules de characteres,pannello,pannello de controlo,scriptorios,Gerente de File,Barra de instrumentos,menu,Titulo de Fenestra,Titulo,DPI,anti-aliasing,fonts de scriptorio, fonts de barra de titulo, character,fonts general X-KDE-Keywords[id]=fon,ukuran fon,gaya,charset,set karakter,panel,panel kendali,desktop,FileManager,Bilah Alat,Menu,Judul Window,Judul,DPI,anti-alias,font desktop,font bilah alat,karakter,font umum X-KDE-Keywords[it]=caratteri,dimensione dei caratteri,stili,codifiche,insiemi di caratteri,pannello,pannello di controllo,desktop,gestore dei file,barre degli strumenti,menu,titolo della finestra,titolo,DPI,anti-aliasing,caratteri del desktop,caratteri della barra degli strumenti,carattere,caratteri generali X-KDE-Keywords[kk]=fonts,font size,styles,charsets,character sets,panel,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,DPI,anti-aliasing,desktop fonts,toolbar fonts,character,general fonts X-KDE-Keywords[km]=fonts,font size,styles,charsets,character sets,panel,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,DPI,anti-aliasing,desktop fonts,toolbar fonts,character,general fonts X-KDE-Keywords[ko]=fonts,font size,styles,charsets,character sets,panel,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,DPI,anti-aliasing,desktop fonts,toolbar fonts,character,general fonts,글꼴,스타일,창 제목,글자 X-KDE-Keywords[mr]=फॉन्ट्स, फॉन्ट साईज, कॅरेक्टर, कॅरेक्टर सेटस, पँनल, कन्ट्रोल पँनल, डेस्कटॉप्स, फाईल मेनेजर, टूलबार्स, मेन्यू, चौकट टाईटल, टाईटल, डी पी आय , अन्टी अलायझिंग, डेस्कटॉप फॉन्टस, टूलबार फॉन्टस, कॅरेक्टर, जनरल फॉन्ट्स X-KDE-Keywords[nb]=skrifter,skriftstørrelse,stiler,tegnsett,panel,kontrollpanel,skrivebord,filbehandler,Verktøylinje,Meny,Vindiustittel,tittel,DPI,kantutjevning,skrivebordsskrifter,verktøylinjeskrifter,generelle skrifter X-KDE-Keywords[nds]=Schriftoorden,Schrift,Stilen,Tekensetten,Paneel,Stüerpaneel,Schriefdisch,Dateipleger,Warktüüchbalkens,Menü,Finstertitel,Titel,DPI,Kantstreken,anti-aliasing,Schriefdisch,Teken X-KDE-Keywords[nl]=lettertypes,lettertype,tekengrootte,stijlen,tekensets,paneel,besturingspaneel,bureaubladen,bestandsbeheerder,werkbalken,menu,venstertitel,titel,DPI,anti-aliasing,lettertypen van bureaublad,lettertypen van werkbalk,teken,algemene lettertypes X-KDE-Keywords[nn]=skrifter,skriftstorleik,stilar,teiknsett,teiknkodingar,panel,kontrollpanel,skrivebord,filhandsamar,verktøylinje,meny,vindaugstittel,tittel,DPI,PPT,kantutjamning,skrivebordsskrifter,verktøylinjeskrifter,generelle skriftar X-KDE-Keywords[pl]=czcionki,rozmiar czcionki,style,zestaw znaków,panel,panel sterowania,pulpity,Menadżer plików,Paski narzędzi,Menu,Tytuł okna,Tytuł,DPI,wygładzanie,czcionki pulpitu,czcionki pasków narzędzi,znak,czcionki ogólne X-KDE-Keywords[pt]=tipos de letra,tamanho de letra,estilos,codificações,codificações de caracteres,painel,painel de controlo,ecrãs,gestor de ficheiros,barras de ferramentas,menu,título da janela,título,PPP,suavização,tipos de letra do ecrã,tipos de letra da barra de ferramentas,carácter,tipos de letra gerais X-KDE-Keywords[pt_BR]=fontes,tamanho da fonte,estilos,codificações,codificações de caracteres,painel,painel de controle,áreas de trabalho,gerenciador de arquivos,barras de ferramentas,Menu,Título da janela,Título,PPP,anti-aliasing,fontes da área de trabalho,fontes da barra de ferramentas,caractere,fontes gerais X-KDE-Keywords[ru]=fonts,font size,styles,charsets,character sets,panel,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,DPI,anti-aliasing,desktop fonts,toolbar fonts,character,general fonts,шрифты,размер шрифтов,стили,кодировки,панель,панель управления,рабочие столы,диспетчер файлов,панель инструментов,меню,заголовок окна,заголовок,сглаживание,шрифты рабочего стола,шрифты панели инструментов,символы,общие шрифты X-KDE-Keywords[sk]=písmo,veľkosť písma,štýly,znakové sady,sady znakov,panel,ovládací panel,plochy,Správca súborov,Panely nástrojov,Ponuka,Titulok okna,Titulok,DPI,anti-aliasing,písma plochy,písma nástrojových panelov,znak,všeobecné písma X-KDE-Keywords[sl]=pisave,velikost pisav,slogi,nabori znakov,znakovni nabori,pult,nadzorna plošča,namizja,upravljalnik datotek,datotečni upravljalnik,orodjarne,orodne vrstice,meni,naslov okna,naslovna vrstica,naslov,ločljivost,točk na palec,glajenje robov,namizne pisave,pisave namizja,pisave orodjarne, pisave orodne vrstice,znak,splošne pisave X-KDE-Keywords[sr]=fonts,font size,styles,charsets,character sets,panel,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,DPI,anti-aliasing,desktop fonts,toolbar fonts,character,general fonts,фонт,величина фонта,стил,кодирање,панел,контролни панел,површ,менаџер фајлова,траке алатки,мени,наслов прозора,тпи,омекшавање,фонт површи,фонт траке алатки,знакови,општи фонт X-KDE-Keywords[sr@ijekavian]=fonts,font size,styles,charsets,character sets,panel,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,DPI,anti-aliasing,desktop fonts,toolbar fonts,character,general fonts,фонт,величина фонта,стил,кодирање,панел,контролни панел,површ,менаџер фајлова,траке алатки,мени,наслов прозора,тпи,омекшавање,фонт површи,фонт траке алатки,знакови,општи фонт X-KDE-Keywords[sr@ijekavianlatin]=fonts,font size,styles,charsets,character sets,panel,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,DPI,anti-aliasing,desktop fonts,toolbar fonts,character,general fonts,font,veličina fonta,stil,kodiranje,panel,kontrolni panel,površ,menadžer fajlova,trake alatki,meni,naslov prozora,tpi,omekšavanje,font površi,font trake alatki,znakovi,opšti font X-KDE-Keywords[sr@latin]=fonts,font size,styles,charsets,character sets,panel,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,DPI,anti-aliasing,desktop fonts,toolbar fonts,character,general fonts,font,veličina fonta,stil,kodiranje,panel,kontrolni panel,površ,menadžer fajlova,trake alatki,meni,naslov prozora,tpi,omekšavanje,font površi,font trake alatki,znakovi,opšti font X-KDE-Keywords[sv]=teckensnitt,teckenstorlek,stil,teckenuppsättningar,panel,kontrollpanel,skrivbord,Filhanterare,Verktygsrader,Meny,Fönsternamn,Namn,Punkter/tum,kantutjämning,skrivbordsteckensnitt,verktygsradsteckensnitt,tecken,allmänna teckensnitt X-KDE-Keywords[tr]=yazı tipi,yazı tipi boyutu,karakterler,karakter setleri,panel,denetim paneli,masaüstleri,Dosya Yöneticisi,Araç Çubukları,Menü,Pencere Başlığı,Başlık,DPI,yumuşatma,anti-aliasing,masaüstü yazı tipleri,araç çubuğu yazı tipleri,karakter,genel yazı tipleri,biçemler X-KDE-Keywords[uk]=fonts,font size,styles,charsets,character sets,panel,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,DPI,anti-aliasing,desktop fonts,toolbar fonts,character,general fonts,шрифт,шрифти,розмір,розмір шрифту,стиль,стилі,гарнітура,гарнітури,кодування,набір,символ,символи,набір символів,панель,панель керування,стільниця,стільниці,файл,керування,керування файлами,менеджер,панель інструментів,меню,заголовок,заголовок вікна,роздільність,згладжування,шрифти стільниці,шрифти панелі,символ,загальні шрифти X-KDE-Keywords[x-test]=xxfontsxx,xxfont sizexx,xxstylesxx,xxcharsetsxx,xxcharacter setsxx,xxpanelxx,xxcontrol panelxx,xxdesktopsxx,xxFileManagerxx,xxToolbarsxx,xxMenuxx,xxWindow Titlexx,xxTitlexx,xxDPIxx,xxanti-aliasingxx,xxdesktop fontsxx,xxtoolbar fontsxx,xxcharacterxx,xxgeneral fontsxx X-KDE-Keywords[zh_CN]=fonts,font size,styles,charsets,character sets,panel,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,DPI,anti-aliasing,desktop fonts,toolbar fonts,character,general fonts,字体字体大小,样式,字符集,面板,控制面板,桌面,文件管理器,工具栏,菜单,窗口标题,标题,反锯齿,桌面字体,工具栏字体,字符,常规字体 X-KDE-Keywords[zh_TW]=fonts,font size,styles,charsets,character sets,panel,control panel,desktops,FileManager,Toolbars,Menu,Window Title,Title,DPI,anti-aliasing,desktop fonts,toolbar fonts,character,general fonts Categories=Qt;KDE;X-KDE-settings-looknfeel; diff --git a/kcms/fonts/package/metadata.desktop b/kcms/fonts/package/metadata.desktop index 03e7552c2..fe8a5f3c3 100644 --- a/kcms/fonts/package/metadata.desktop +++ b/kcms/fonts/package/metadata.desktop @@ -1,129 +1,130 @@ [Desktop Entry] Name=Fonts Name[af]=Skriftipes Name[ar]=الخطوط Name[be]=Шрыфты Name[be@latin]=Šryfty Name[bg]=Шрифтове Name[bn]=ফন্ট Name[bn_IN]=ফন্ট Name[br]=Fontoù Name[bs]=Fontovi Name[ca]=Tipus de lletra Name[ca@valencia]=Tipus de lletra Name[cs]=Písma Name[csb]=Fòntë Name[cy]=Ffontiau Name[da]=Skrifttyper Name[de]=Schriftarten Name[el]=Γραμματοσειρές Name[en_GB]=Fonts Name[eo]=Tiparoj Name[es]=Tipos de letra Name[et]=Fondid Name[eu]=Letra-tipoak Name[fa]=قلمها Name[fi]=Fontit Name[fr]=Polices de caractères Name[fy]=Lettertypen Name[ga]=Clónna Name[gl]=Tipos de letra Name[gu]=ફોન્ટ્સ Name[he]=גופנים Name[hi]=फ़ॉन्ट्स Name[hne]=फोंट Name[hr]=Fontovi Name[hsb]=Pisma Name[hu]=Betűtípusok Name[ia]=Fontes Name[id]=Font Name[is]=Letur Name[it]=Caratteri Name[ja]=フォント Name[ka]=ფონტები Name[kk]=Қаріптер Name[km]=ពុម្ព​អក្សរ Name[kn]=ಅಕ್ಷರಶೈಲಿಗಳು Name[ko]=글꼴 Name[ku]=Curenivîs Name[lt]=Šriftai Name[lv]=Fonti Name[mai]=फान्ट Name[mk]=Фонтови Name[ml]=അക്ഷരസഞ്ചയങ്ങള്‍ Name[mr]=फॉन्ट Name[ms]=Fon Name[nb]=Skrifttyper Name[nds]=Schriftoorden Name[ne]=फन्ट Name[nl]=Lettertypen Name[nn]=Skrifter Name[oc]=Poliças Name[or]=ଅକ୍ଷର ରୂପ Name[pa]=ਫੋਂਟ Name[pl]=Czcionki Name[pt]=Tipos de Letra Name[pt_BR]=Fontes Name[ro]=Fonturi Name[ru]=Шрифты Name[se]=Fonttat Name[si]=අකුරු Name[sk]=Písma Name[sl]=Pisave Name[sr]=Фонтови Name[sr@ijekavian]=Фонтови Name[sr@ijekavianlatin]=Fontovi Name[sr@latin]=Fontovi Name[sv]=Teckensnitt Name[ta]=எழுத்துருக்கள் Name[te]=ఫాంట్‍స్ Name[tg]=Ҳарфҳо Name[th]=แบบอักษรต่างๆ Name[tr]=Yazı Tipleri Name[ug]=خەت نۇسخىلىرى Name[uk]=Шрифти Name[uz]=Shriftlar Name[uz@cyrillic]=Шрифтлар Name[vi]=Phông chữ Name[wa]=Fontes Name[xh]=Uhlobo lwamagama Name[x-test]=xxFontsxx Name[zh_CN]=字体 Name[zh_TW]=字型 Comment=Configure user interface fonts Comment[ca]=Configura els tipus de lletra de l'usuari Comment[ca@valencia]=Configura els tipus de lletra de l'usuari Comment[en_GB]=Configure user interface fonts Comment[es]=Configurar los tipos de letra de la interfaz de usuario Comment[fi]=Käyttöliittymäfonttien asetukset… +Comment[fr]=Configurer les polices de l'interface utilisateur Comment[gl]=Configurar os tipos de letra da interface de usuario Comment[id]=Konfigurasikan font antarmuka pengguna Comment[it]=Configura caratteri dell'interfaccia utente Comment[ko]=사용자 인터페이스 글꼴 설정 Comment[nl]=Lettertypen van gebruikersinterface configureren Comment[nn]=Set opp skrifter for brukargrensesnittet Comment[pl]=Ustawienia czcionek interfejsu użytkownika Comment[pt]=Configurar os tipos de letra da interface do utilizador Comment[pt_BR]=Configurar as fontes da interface do usuário Comment[sk]=Nastavte písma používateľského rozhrania Comment[sv]=Anpassa teckensnitt för användargränssnitt Comment[uk]=Налаштовування шрифтів у інтерфейсі користувача Comment[x-test]=xxConfigure user interface fontsxx Comment[zh_CN]=配置用户界面字体 Comment[zh_TW]=設定使用者介面字型 Icon=preferences-desktop-font Keywords= Type=Service X-KDE-ParentApp= X-KDE-PluginInfo-Author=Antonis Tsiapaliokas X-KDE-PluginInfo-Email=antonis.tsiapaliokas@kde.org X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-Name=kcm_fonts X-KDE-PluginInfo-Version= X-KDE-PluginInfo-Website=https://www.kde.org/plasma-desktop X-KDE-ServiceTypes=Plasma/Generic X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml diff --git a/kcms/icons/kcm_icons.desktop b/kcms/icons/kcm_icons.desktop index 0e8dbf485..c9bd27249 100644 --- a/kcms/icons/kcm_icons.desktop +++ b/kcms/icons/kcm_icons.desktop @@ -1,190 +1,191 @@ [Desktop Entry] Exec=kcmshell5 icons Icon=preferences-desktop-icons Type=Service X-KDE-ServiceTypes=KCModule X-DocPath=kcontrol/icons/index.html X-KDE-Library=kcm_icons X-KDE-ParentApp=kcontrol X-KDE-System-Settings-Parent-Category=icons X-KDE-Weight=40 Name=Icons Name[af]=Ikone Name[ar]=الأيقونات Name[as]=আইকন Name[be]=Значкі Name[be@latin]=Ikony Name[bg]=Икони Name[bn]=আইকন Name[bn_IN]=আইকন Name[br]=Arlunioù Name[bs]=Ikone Name[ca]=Icones Name[ca@valencia]=Icones Name[cs]=Ikony Name[csb]=Ikònë Name[cy]=Eicon Name[da]=Ikoner Name[de]=Symbole Name[el]=Εικονίδια Name[en_GB]=Icons Name[eo]=Piktogramoj Name[es]=Iconos Name[et]=Ikoonid Name[eu]=Ikonoak Name[fa]=شمایلها Name[fi]=Kuvakkeet Name[fr]=Icônes Name[fy]=Byldkaikes Name[ga]=Deilbhíní Name[gl]=Iconas Name[gu]=ચિહ્નો Name[he]=סמלים Name[hi]=प्रतीक Name[hne]=चिनहा Name[hr]=Ikone Name[hsb]=Piktogramy Name[hu]=Ikonok Name[ia]=Icones Name[id]=Ikon Name[is]=Táknmyndir Name[it]=Icone Name[ja]=アイコン Name[ka]=ხატულები Name[kk]=Таңбашалар Name[km]=រូប​តំណាង Name[kn]=ಚಿಹ್ನೆಗಳು Name[ko]=아이콘 Name[ku]=Îkon Name[lt]=Ženkliukai Name[lv]=Ikonas Name[mai]=प्रतीक Name[mk]=Икони Name[ml]=ചിഹ്നങ്ങള്‍ Name[mr]=चिन्ह Name[ms]=Ikon Name[nb]=Ikoner Name[nds]=Lüttbiller Name[ne]=प्रतिमा Name[nl]=Pictogrammen Name[nn]=Ikon Name[oc]=Icònas Name[or]=ଚିତ୍ର ସଂକେତଗୁଡ଼ିକ Name[pa]=ਆਈਕਾਨ Name[pl]=Ikony Name[pt]=Ícones Name[pt_BR]=Ícones Name[ro]=Pictograme Name[ru]=Значки Name[si]=අයිකන Name[sk]=Ikony Name[sl]=Ikone Name[sr]=Иконице Name[sr@ijekavian]=Иконице Name[sr@ijekavianlatin]=Ikonice Name[sr@latin]=Ikonice Name[sv]=Ikoner Name[ta]=சின்னங்கள் Name[te]=ప్రతిమలు Name[tg]=Нишонаҳо Name[th]=ไอคอน Name[tr]=Simgeler Name[ug]=سىنبەلگىلەر Name[uk]=Піктограми Name[uz]=Nishonchalar Name[uz@cyrillic]=Нишончалар Name[vi]=Biểu tượng Name[wa]=Imådjetes Name[xh]=Imphawu zemmifanekiso Name[x-test]=xxIconsxx Name[zh_CN]=图标 Name[zh_TW]=圖示 Comment=Choose icon theme Comment[ca]=Trieu el tema d'icones Comment[ca@valencia]=Trieu el tema d'icones Comment[de]=Symbol-Design auswählen Comment[en_GB]=Choose icon theme Comment[es]=Escoger un tema de iconos Comment[fi]=Valitse kuvaketeema +Comment[fr]=Choisir le thème d'icônes Comment[gl]=Escoller un tema de iconas Comment[id]=Pilihlah tema ikon Comment[it]=Scegli tema di icone Comment[ko]=아이콘 테마 선택 Comment[nl]=Pictogramthema kiezen Comment[nn]=Vel ikontema Comment[pl]=Wybierz zestaw ikon Comment[pt]=Escolher o tema de ícones Comment[pt_BR]=Escolha o tema de ícones Comment[sk]=Vyberte tému ikon Comment[sv]=Välj ikontema Comment[uk]=Вибір теми піктограм Comment[x-test]=xxChoose icon themexx Comment[zh_CN]=选择图标主题 Comment[zh_TW]=選擇圖示主題 X-KDE-Keywords=icons,effects,size,hicolor,locolor X-KDE-Keywords[ar]=أيقونات,تأثيرات,حجم,لون عالي,لون سفلي X-KDE-Keywords[bg]=icons,effects,size,hicolor,locolor,икони,ефекти,размер X-KDE-Keywords[bn]=icons,effects,size,hicolor,locolor X-KDE-Keywords[bs]=icons,effects,size,hicolor,locolor,ikone,efekti,veličina,boje X-KDE-Keywords[ca]=icones,efectes,mida,color alt,color baix X-KDE-Keywords[ca@valencia]=icones,efectes,mida,color alt,color baix X-KDE-Keywords[cs]=ikony,efekty,velikost,hicolor,locolor X-KDE-Keywords[da]=ikoner,effekter,størrelse,hicolor,locolor X-KDE-Keywords[de]=Symbole,Icons,Effekte,Größe,16-Bit-Farben,8-Bit-Farben X-KDE-Keywords[el]=εικονίδια,εφέ,μέγεθος,hicolor,locolor X-KDE-Keywords[en_GB]=icons,effects,size,hicolor,locolor X-KDE-Keywords[eo]=piktogramoj,efektoj,grando,hicolor,locolor X-KDE-Keywords[es]=iconos,efectos,tamaño,hicolor,locolor X-KDE-Keywords[et]=ikoonid,efektid,suurus,hicolor,locolor X-KDE-Keywords[eu]=ikonoak,efektuak,tamaina,hicolor,locolor X-KDE-Keywords[fa]=icons,effects,size,hicolor,locolor X-KDE-Keywords[fi]=kuvakkeet,tehosteet,koko,hicolor,locolor X-KDE-Keywords[fr]=icônes, effets, taille, hicolor, locolor X-KDE-Keywords[ga]=deilbhíní,maisíochtaí,méid,ard-dath,ísealdath X-KDE-Keywords[gl]=iconas, efectos, tamaño, hicolor, locolor X-KDE-Keywords[gu]=ચિહ્નો,અસરો,માપ,ઉચ્ચરંગ,નીચરંગ X-KDE-Keywords[he]=סמלים,אפקטים,icons,effects,size,hicolor,locolor X-KDE-Keywords[hi]=प्रतीक, प्रभाव, आकार, hicolor, locolor X-KDE-Keywords[hu]=ikonok,effektusok,méret,hicolor,locolor X-KDE-Keywords[ia]=icones,effectos,grandor,alte color,basse color X-KDE-Keywords[id]=ikon,efek,ukuran,warna tinggi,warna rendah X-KDE-Keywords[is]=táknmynd,sjónhverfingar,brellur,stærð,hicolor,locolor X-KDE-Keywords[it]=icone,effetti,dimensione,molti colori,pochi colori X-KDE-Keywords[kk]=icons,effects,size,hicolor,locolor X-KDE-Keywords[km]=រូបតំណាង បែបផែន ទំហំ ពណ៌​ខ្ពស់ ពណ៌​ទាប X-KDE-Keywords[ko]=icons,effects,size,hicolor,locolor,아이콘,효과,크기,색상 X-KDE-Keywords[lv]=ikonas,efekti,izmērs,krāsa X-KDE-Keywords[mr]=चिन्ह, परिणाम, आकार, हाय कलर, लो कलर X-KDE-Keywords[nb]=ikoner,effekter,størrelse,fargesterk,fargesvak X-KDE-Keywords[nds]=Lüttbiller,Effekten,Grött,HiColor,LoColor,Klören,Klöör X-KDE-Keywords[nl]=pictoogrammen,effecten,grootte,hi-kleur,lo-kleur X-KDE-Keywords[nn]=ikon,effektar,storleik,hicolor,locolor X-KDE-Keywords[pa]=ਆਈਕਾਨ,ਪ੍ਰਭਾਵ,ਪਰਭਾਵ,ਆਕਾਰ,ਵੱਧ-ਰੰਗ,ਘੱਟਰੰਗ X-KDE-Keywords[pl]=ikony,efekty,rozmiar,hicolor,locolor X-KDE-Keywords[pt]=ícones,efeitos,tamanho,muitas cores,poucas cores X-KDE-Keywords[pt_BR]=ícones,efeitos,tamanho,muitas cores,poucas cores X-KDE-Keywords[ro]=pictograme,efecte,mărime,hicolor,locolor X-KDE-Keywords[ru]=icons,effects,size,hicolor,locolor,значки,иконки,эффекты,размер,цвет X-KDE-Keywords[sk]=ikony,efekty,veľkosť,hicolor,locolor X-KDE-Keywords[sl]=ikone,učinki,velikost,barve,barva X-KDE-Keywords[sr]=icons,effects,size,hicolor,locolor,иконице,ефекти,величина,боја X-KDE-Keywords[sr@ijekavian]=icons,effects,size,hicolor,locolor,иконице,ефекти,величина,боја X-KDE-Keywords[sr@ijekavianlatin]=icons,effects,size,hicolor,locolor,ikonice,efekti,veličina,boja X-KDE-Keywords[sr@latin]=icons,effects,size,hicolor,locolor,ikonice,efekti,veličina,boja X-KDE-Keywords[sv]=ikoner,effekter,storlek,hicolor,locolor X-KDE-Keywords[tg]=нишонаҳо,таъсирҳо,андоза,ранги баланд,ранги паст X-KDE-Keywords[tr]=simgeler,efektler,boyut,yüksekrenk,düşükrenk X-KDE-Keywords[ug]=سىنبەلگىلەر، ئۈنۈملەر، چوڭلۇق، hicolor، locolor X-KDE-Keywords[uk]=icons,effects,size,hicolor,locolor,піктограми,значки,іконки,ефект,ефекти,розмір,колір X-KDE-Keywords[vi]=biểu tượng,hiệu ứng,cỡ,nhiều màu, ít màu, icons,effects,size,hicolor,locolor X-KDE-Keywords[wa]=imådjetes,efets,grandeu,grandeur,coleur X-KDE-Keywords[x-test]=xxiconsxx,xxeffectsxx,xxsizexx,xxhicolorxx,xxlocolorxx X-KDE-Keywords[zh_CN]=icons,effects,size,hicolor,locolor,图标,效果,特效,大小,颜色 X-KDE-Keywords[zh_TW]=icons,effects,size,hicolor,locolor Categories=Qt;KDE;X-KDE-settings-looknfeel; diff --git a/kcms/icons/package/metadata.desktop b/kcms/icons/package/metadata.desktop index d7640c4ba..d16edb511 100644 --- a/kcms/icons/package/metadata.desktop +++ b/kcms/icons/package/metadata.desktop @@ -1,127 +1,128 @@ [Desktop Entry] Name=Icons Name[af]=Ikone Name[ar]=الأيقونات Name[as]=আইকন Name[be]=Значкі Name[be@latin]=Ikony Name[bg]=Икони Name[bn]=আইকন Name[bn_IN]=আইকন Name[br]=Arlunioù Name[bs]=Ikone Name[ca]=Icones Name[ca@valencia]=Icones Name[cs]=Ikony Name[csb]=Ikònë Name[cy]=Eicon Name[da]=Ikoner Name[de]=Symbole Name[el]=Εικονίδια Name[en_GB]=Icons Name[eo]=Piktogramoj Name[es]=Iconos Name[et]=Ikoonid Name[eu]=Ikonoak Name[fa]=شمایلها Name[fi]=Kuvakkeet Name[fr]=Icônes Name[fy]=Byldkaikes Name[ga]=Deilbhíní Name[gl]=Iconas Name[gu]=ચિહ્નો Name[he]=סמלים Name[hi]=प्रतीक Name[hne]=चिनहा Name[hr]=Ikone Name[hsb]=Piktogramy Name[hu]=Ikonok Name[ia]=Icones Name[id]=Ikon Name[is]=Táknmyndir Name[it]=Icone Name[ja]=アイコン Name[ka]=ხატულები Name[kk]=Таңбашалар Name[km]=រូប​តំណាង Name[kn]=ಚಿಹ್ನೆಗಳು Name[ko]=아이콘 Name[ku]=Îkon Name[lt]=Ženkliukai Name[lv]=Ikonas Name[mai]=प्रतीक Name[mk]=Икони Name[ml]=ചിഹ്നങ്ങള്‍ Name[mr]=चिन्ह Name[ms]=Ikon Name[nb]=Ikoner Name[nds]=Lüttbiller Name[ne]=प्रतिमा Name[nl]=Pictogrammen Name[nn]=Ikon Name[oc]=Icònas Name[or]=ଚିତ୍ର ସଂକେତଗୁଡ଼ିକ Name[pa]=ਆਈਕਾਨ Name[pl]=Ikony Name[pt]=Ícones Name[pt_BR]=Ícones Name[ro]=Pictograme Name[ru]=Значки Name[si]=අයිකන Name[sk]=Ikony Name[sl]=Ikone Name[sr]=Иконице Name[sr@ijekavian]=Иконице Name[sr@ijekavianlatin]=Ikonice Name[sr@latin]=Ikonice Name[sv]=Ikoner Name[ta]=சின்னங்கள் Name[te]=ప్రతిమలు Name[tg]=Нишонаҳо Name[th]=ไอคอน Name[tr]=Simgeler Name[ug]=سىنبەلگىلەر Name[uk]=Піктограми Name[uz]=Nishonchalar Name[uz@cyrillic]=Нишончалар Name[vi]=Biểu tượng Name[wa]=Imådjetes Name[xh]=Imphawu zemmifanekiso Name[x-test]=xxIconsxx Name[zh_CN]=图标 Name[zh_TW]=圖示 Comment=Choose icon theme Comment[ca]=Trieu el tema d'icones Comment[ca@valencia]=Trieu el tema d'icones Comment[de]=Symbol-Design auswählen Comment[en_GB]=Choose icon theme Comment[es]=Escoger un tema de iconos Comment[fi]=Valitse kuvaketeema +Comment[fr]=Choisir le thème d'icônes Comment[gl]=Escoller un tema de iconas Comment[id]=Pilihlah tema ikon Comment[it]=Scegli tema di icone Comment[ko]=아이콘 테마 선택 Comment[nl]=Pictogramthema kiezen Comment[nn]=Vel ikontema Comment[pl]=Wybierz zestaw ikon Comment[pt]=Escolher o tema de ícones Comment[pt_BR]=Escolha o tema de ícones Comment[sk]=Vyberte tému ikon Comment[sv]=Välj ikontema Comment[uk]=Вибір теми піктограм Comment[x-test]=xxChoose icon themexx Comment[zh_CN]=选择图标主题 Comment[zh_TW]=選擇圖示主題 Icon=preferences-desktop-icons Type=Service X-KDE-PluginInfo-Author=Kai Uwe Broulik X-KDE-PluginInfo-Email=kde@privat.broulik.de X-KDE-PluginInfo-License=GPL X-KDE-PluginInfo-Name=kcm_icons X-KDE-PluginInfo-Version= X-KDE-PluginInfo-Website=https://www.kde.org/plasma-desktop X-KDE-ServiceTypes=Plasma/Generic X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml diff --git a/kcms/input/mouse.desktop b/kcms/input/mouse.desktop index fcf299905..e283c7d62 100644 --- a/kcms/input/mouse.desktop +++ b/kcms/input/mouse.desktop @@ -1,177 +1,178 @@ [Desktop Entry] Exec=kcmshell5 mouse Icon=preferences-desktop-mouse Type=Service X-KDE-ServiceTypes=KCModule,KCModuleInit X-DocPath=kcontrol/mouse/index.html X-KDE-Library=kcm_input X-KDE-Init-Symbol=mouse X-KDE-ParentApp=kcontrol X-KDE-Init-Phase=0 X-KDE-System-Settings-Parent-Category=input-devices X-KDE-Weight=60 Name=Mouse Name[af]=Muis Name[ar]=الفأرة Name[be]=Мыш Name[be@latin]=Myš Name[bg]=Мишка Name[bn]=মাউস Name[bn_IN]=মাউস Name[br]=Logodenn Name[bs]=Miš Name[ca]=Ratolí Name[ca@valencia]=Ratolí Name[cs]=Myš Name[csb]=Mësz Name[cy]=Llygoden Name[da]=Mus Name[de]=Maus Name[el]=Ποντίκι Name[en_GB]=Mouse Name[eo]=Muso Name[es]=Ratón Name[et]=Hiir Name[eu]=Sagua Name[fa]=موشی Name[fi]=Hiiri Name[fr]=Souris Name[fy]=Mûs Name[ga]=Luch Name[gl]=Rato Name[gu]=માઉસ Name[he]=עכבר Name[hi]=माउस Name[hne]=मुसुवा Name[hr]=Miš Name[hsb]=Myš Name[hu]=Egér Name[ia]=Mus Name[id]=Mouse Name[is]=Mús Name[it]=Mouse Name[ja]=マウス Name[ka]=თაგვი Name[kk]=Тышқан Name[km]=កណ្ដុរ Name[kn]=ಮೂಷಕ (ಮೌಸ್) Name[ko]=마우스 Name[ku]=Mişk Name[lt]=Pelė Name[lv]=Pele Name[mai]=माउस Name[mk]=Глушец Name[ml]=മൌസ് Name[mr]=माऊस Name[ms]=Tetikus Name[nb]=Mus Name[nds]=Muus Name[ne]=माउस Name[nl]=Muis Name[nn]=Mus Name[oc]=Mirga Name[or]=ମାଉସ Name[pa]=ਮਾਊਸ Name[pl]=Mysz Name[pt]=Rato Name[pt_BR]=Mouse Name[ro]=Maus Name[ru]=Мышь Name[se]=Sáhpán Name[si]=මවුසය Name[sk]=Myš Name[sl]=Miška Name[sr]=Миш Name[sr@ijekavian]=Миш Name[sr@ijekavianlatin]=Miš Name[sr@latin]=Miš Name[sv]=Mus Name[ta]=சுட்டி Name[te]=మౌస్ Name[tg]=Муш Name[th]=เมาส์ Name[tr]=Fare Name[ug]=چاشقىنەك Name[uk]=Мишка Name[uz]=Sichqoncha Name[uz@cyrillic]=Сичқонча Name[vi]=Chuột Name[wa]=Sori Name[xh]=Mouse Name[x-test]=xxMousexx Name[zh_CN]=鼠标 Name[zh_TW]=滑鼠 Comment=Mouse Controls Comment[ar]=تحكّمات الفأرة Comment[bs]=Kontrole miša Comment[ca]=Controls del ratolí Comment[ca@valencia]=Controls del ratolí Comment[cs]=Nastavení myši Comment[da]=Musekontroller Comment[de]=Maussteuerung Comment[el]=Στοιχεία ελέγχου ποντικιού Comment[en_GB]=Mouse Controls Comment[es]=Controles del ratón Comment[et]=Hiire määratlused Comment[eu]=Sagu-kontrolak Comment[fi]=Hiiren painikkeet Comment[fr]=Contrôles de la souris Comment[gl]=Controis do rato Comment[he]=פקדי העכבר Comment[hu]=Irányítás az egérrel Comment[id]=Kendali Mouse Comment[is]=Músarstýringar Comment[it]=Controlli del mouse Comment[ko]=마우스 제어 Comment[lt]=Pelės valdikliai Comment[nb]=Musstyring Comment[nds]=De Muus instellen Comment[nl]=Muisbesturing Comment[nn]=Musstyring Comment[pa]=ਮਾਊਸ ਕੰਟਰੋਲ Comment[pl]=Sterowanie myszą Comment[pt]=Controlos do Rato Comment[pt_BR]=Controles do mouse Comment[ru]=Настройка мыши Comment[sk]=Ovládače myši Comment[sl]=Nadzor miške Comment[sr]=Управљање мишем Comment[sr@ijekavian]=Управљање мишем Comment[sr@ijekavianlatin]=Upravljanje mišem Comment[sr@latin]=Upravljanje mišem Comment[sv]=Musstyrning Comment[tr]=Fare Kontrolleri Comment[uk]=Керування мишею Comment[x-test]=xxMouse Controlsxx Comment[zh_CN]=鼠标控制 Comment[zh_TW]=滑鼠控制 X-KDE-Keywords=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,Double Click,Single Click,mapping,right handed,left handed,Pointer Device,Mouse Wheel,Mouse Emulation,Mouse Navigation,Mouse Drag and Drop,Mouse Scrolling,Mouse Sensitivity,Move Mouse with Num Pad,Mouse Num Pad Emulation X-KDE-Keywords[ca]=Ratolí,Acceleració de ratolí,Llindar de ratolí,Botons de ratolí,Selecció,Ombra de cursor,Dispositius d'entrada,Mapatge de botó,Clic,icones,reacció,Apuntadors,Arrossegar,Clic doble,Clic únic,mapatge,dretà,esquerrà,Dispositiu apuntador,Roda del ratolí,Emulació del ratolí,Navegació amb ratolí,Arrossegar i deixar anar de ratolí,Desplaçament amb ratolí,Sensibilitat del ratolí,Moure el ratolí amb teclat numèric,Emulació de ratolí amb teclat numèric X-KDE-Keywords[ca@valencia]=Ratolí,Acceleració de ratolí,Llindar de ratolí,Botons de ratolí,Selecció,Ombra de cursor,Dispositius d'entrada,Mapatge de botó,Clic,icones,reacció,Apuntadors,Arrossegar,Clic doble,Clic únic,mapatge,dretà,esquerrà,Dispositiu apuntador,Roda del ratolí,Emulació del ratolí,Navegació amb ratolí,Arrossegar i deixar anar de ratolí,Desplaçament amb ratolí,Sensibilitat del ratolí,Moure el ratolí amb teclat numèric,Emulació de ratolí amb teclat numèric X-KDE-Keywords[de]=Maus,Mausbeschleunigung,Mausschwellwert,Maustasten,Auswahl,Cursor,Cursor-Form,Eingabegeräte,Knöpfe,Buttons,Zuordnungen,Klicks,Zeigegeräte,Einfachklick,Doppelklick,Rechtshänder,Linkshänder,Ziehen,Mausrad,Maus-Emulation,Maus-Navigation,Ziehen und Ablegen mit der Maus,Blättern mit der Maus,Maus-Empfindlichkeit,Mauszeiger mit der Zahlentastatur verschieben,Maus-Emulation mit der Zahlentastatur X-KDE-Keywords[en_GB]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,Double Click,Single Click,mapping,right handed,left handed,Pointer Device,Mouse Wheel,Mouse Emulation,Mouse Navigation,Mouse Drag and Drop,Mouse Scrolling,Mouse Sensitivity,Move Mouse with Num Pad,Mouse Num Pad Emulation X-KDE-Keywords[es]=Ratón,Aceleración de ratón,Umbral del ratón,Botones del ratón,Selección,Forma del cursor,Dispositivos de entrada,Mapeo de botones,Clic,iconos,reacción,Punteros,Arrastrar,Doble clic,Clic sencillo,mapeo,diestro,zurdo,Dispositivo apuntador,Rueda del ratón,Emulación del ratón,Navegación con el ratón,Arrastrar y soltar con el ratón,Desplazamiento con el ratón,Sensibilidad del ratón,Mover el ratón con el teclado numérico,Emulación del ratón con el teclado numérico X-KDE-Keywords[fi]=Hiiri,Osoittimen kiihdytys,Osoittimen raja-arvo,Hiiripainikkeet,Valinta,Osoittimen muoto,Syöttölaitteet,Syötelaitteet,Painikkeiden kuvaus,Napsauta,Napsautus,kuvakkeet,tuntuma,Osoittimet,Raahaus,Kaksoisnapsautus,kuvaus,oikeakätinen,oikeakätisyys,vasenkätinen,vasenkätisyys,osoitinlaite,hiiren rulla,hiiren emulointi,hiirinavigointi,hiiren vedä ja pudota,hiiren vieritys,hiiren herkkyys,hiiren liikuttaminen numeronäppäimistöltä X-KDE-Keywords[fr]=Souris, Accélération de la souris, Seuil de la souris, Boutons de la souris, Sélection, Forme du curseur, Périphériques d'entrée, affectation des boutons, Clic, icônes, réaction, Pointeurs, Glisser, Double clic, Simple clic, affectation, droitier, gaucher, Périphérique de pointage, Roulette de la souris, Émulation de la souris, Navigation de la souris, Glisser-déposer, Défilement de la souris, Sensibilité de la souris, Déplacement de la souris avec le pavé numérique, Émulation de la souris du pavé numérique X-KDE-Keywords[gl]=rato, aceleración do rato, limiar do rato, botóns do rato, selección, escolla, forma do rato, dispositivos de entrada, mapas de botóns, premer, clic, iconas, punteiro, arrastrar, clic duplo, clic único, dereito, zurdo, dispositivo do punteiro, roda do rato, emulación do rato, navegación co rato, arrastrar e soltar co rato, sensibilidade do rato, mover o rato co teclado numérico, teclado numérico X-KDE-Keywords[id]=Mouse,akselerasi Mouse,ambang batas Mouse,tombol Mouse,Pilihan, Bentuk Kursor,Perangkat input,Pemetaan Tombol,Klik,ikon,feedback,Penunjuk,Tarik,Klik Ganda,Klik Tunggal,pemetaan,tangan kanan,kidal,Perangkat Penunjuk,Roda Mouse,Emulasi Mouse,Navigasi Mouse,Seret dan Letakkan Mouse,Penggulungan Mouse,Sensitivitas Mouse,Gerakkan Mouse dengan Papan Numerik,Emulasi Papan Numerik Mouse X-KDE-Keywords[it]=mouse,accelerazione del mouse,soglia del mouse,pulsanti del mouse,selezione,forma del puntatore,dispositivi di ingresso,mappatura dei pulsanti,clic,icone,notifica di avvio,puntatori,trascinamento,doppio clic,singolo clic,mappatura,destrorso,mancino,dispositivo di puntamento,rotellina del mouse,emulazione del mouse,navigazione con il mouse, trascinamento con il mouse, scorrimento con il mouse, sensibilità del mouse,muovi il mouse con il tastierino numerico,emulazione mouse con il tastierino numerico X-KDE-Keywords[ko]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,Double Click,Single Click,mapping,right handed,left handed,Pointer Device,Mouse Wheel,Mouse Emulation,Mouse Navigation,Mouse Drag and Drop,Mouse Scrolling,Mouse Sensitivity,Move Mouse with Num Pad,Mouse Num Pad Emulation,마우스,마우스 가속,시간,커서 모양,입력 장치,클릭,드래그,왼손잡이,오른손잡이,마우스 휠,마우스 탐색, 마우스 스크롤,감도,스크롤,휠 +X-KDE-Keywords[nb]=Mus,Pekerakselerasjon,Pekerterskel,knapper,valg,pekerform,Inndataenheter,knappeavbildning,Klikk, ikoner,oppstartsmelding,Pekere,Dra,Dobbeltklikk,Enkeltklikk,Knapperekkefølge,høyrehendt,venstrehendt,Pekerenhet,Musehjul,Musemulering,Musenavigasjon,Dra og slipp med Mus, Muserulling,Flytt mus med talltastatur,Museemulering med talltastatur X-KDE-Keywords[nl]=muis,muisversnelling,muisdrempel,muisknoppen,selectie,cursorvorm,invoerapparaten,knoppenmapping,klik,pictogrammen,terugkoppeling,aanwijzer,slepen,dubbelklik,klik,mapping,rechtshandig,linkshandig,aanwijsapparaat,muiswiel,muisemulatie,muisnavigatie,slepen en laten vallen met muis,schuiven met de muis,muisgevoeligheid,muis bewegen met num-pad,emulatie van num-pad met muis X-KDE-Keywords[nn]=mus,peikarakselerasjon,peikarterskel,knappar,val,peikarform,inndataeiningar,knappetilordning,klikk, ikon,oppstartsmelding,peikarar,dra,dobbeltklikk,enkeltklikk,knapperekkjefølgje,høgrehendt,venstrehendt,peikareining,musehjul,musemulering,musenavigasjon,dra-og-slepp med mus,muserulling,flytt mus med taltastatur,museemulering med taltastatur X-KDE-Keywords[pl]=Mysz,Przyspieszenie myszy,Próg myszy,Przyciski myszy,Zaznaczenie, Kształt kursora,Urządzenia wejścia,Mapowanie przycisków,Kliknięcie,ikony,odczucie,Wskaźniki,Przeciągnięcie,Podwójne kliknięcie,mapowanie,praworęczny,leworęczny, Urządzenie wskazujące,Rolka myszy,Emulacja myszy,Nawigacja myszą,Przeciąganie i upuszczanie myszą,Przewijanie myszą,Czułość myszy,Przemieszczaj myszą przy użyciu klawiatury numerycznej,Emulacja myszy klawiaturą numeryczną X-KDE-Keywords[pt]=Rato,Aceleração do rato,Limiar do rato,Botões do rato,Selecção,Forma do Cursor,Dispositivos de Entrada,Associação de Botões,Click,ícones,reacção,Cursores,Arrastar,Duplo-Click,Associação,Destro,Esquerdino,Ponteiro,Roda do Rato,Emulação do Rato,Navegação do Rato,Arrastamento com o Rato,Deslocamento do Rato,Sensibilidade do Rato,Mover o Rato com Teclado Numérico,Emulação do Rato com Teclado Numérico X-KDE-Keywords[pt_BR]=Mouse,aceleração do mouse,limiar do mouse,botões do mouse,seleção,forma do cursor,dispositivos de entrada,associação de botões,clique,ícones,feedback,ponteiros,arrastar,associação,destro,canhoto, ponteiro,roda do mouse, clique simples, clique duplo, emulação do mouse,navegação do mouse,arrastar e soltar com o mouse,deslocamento do mouse,sensibilidade do mouse,mover o mouse com o teclado numérico,emulação do mouse com o teclado numérico X-KDE-Keywords[ru]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,Double Click,Single Click,mapping,right handed,left handed,Pointer Device,Mouse Wheel,Mouse Emulation,Mouse Navigation,Mouse Drag and Drop,Mouse Scrolling,Mouse Sensitivity,Move Mouse with Num Pad,Mouse Num Pad Emulation,мышь,ускорение мыши,границы мыши,кнопки мыши,выбор,форма курсора,двойной щелчок,щелчок,устройство ввода,назначение клавиш,клик,значки,обратная связь,указатели,перемещение,правая рука,левая рука,праворукая,леворукая,колесо мыши,эмуляция мыши,управление мышью, навигация мыши,прокрутка,чувствительность,управление мышью через цифровую клавиатуру X-KDE-Keywords[sk]=Myš,Zrýchlenie myši,Prah myši,Tlačidlá myši,Výber,Tvar kurzora,Vstupné zariadenia,Mapovanie tlačidiel,Klik,ikony,odozva,Ukazovatele,Drag,Dvojklik,Jednoduchý klik,mapovanie,pre pravákov,pre ľavákov,ukazovacie zariadenie,koliesko myši,emulácia myši,navigácia myši,drag and drop myši,rolovanie myši,citlivosť myši,pohyb myši numerickou klávesnicou,emulácia myši numerickou klávesnicou X-KDE-Keywords[sv]=Mus,Musacceleration,Muströskel,Musknappar,Val,Pekarform,Indataenheter,Knappavbildning,Klick,ikoner,återmatning,Pekare,Dra,Dubbelklick,avbildning,högerhänt,vänsterhänt,pekarenhet,mushjul,musemulering,musnavigering,mus drag och släpp,musrullning,muskänslighet,flytta musen med numeriskt tangentbord,emulering av mus med numeriskt tangentbord X-KDE-Keywords[uk]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,Double Click,Single Click,mapping,right handed,left handed,Pointer Device,Mouse Wheel,Mouse Emulation,Mouse Navigation,Mouse Drag and Drop,Mouse Scrolling,Mouse Sensitivity,Move Mouse with Num Pad,Mouse Num Pad Emulation,миша,прискорення,поріг,порогове значення,кнопка,вибір,вказівник,форма,введення,кнопки,клацання,піктограми,значки,іконки,супровід,вказівники,перетягування,подвійне клацання, одинарне клацання,відповідність,праворукий,шульга,лівша,пристрій вказівника,коліщатко миші,емуляція миші,імітація миші,навігація за допомогою миші,перетягування зі скиданням мишею,гортання мишею,чутливість миші,миша з цифровою панеллю,емуляція цифрової панелі миші X-KDE-Keywords[x-test]=xxMousexx,xxMouse accelerationxx,xxMouse thresholdxx,xxMouse buttonsxx,xxSelectionxx,xxCursor Shapexx,xxInput Devicesxx,xxButton Mappingxx,xxClickxx,xxiconsxx,xxfeedbackxx,xxPointersxx,xxDragxx,xxDouble Clickxx,xxSingle Clickxx,xxmappingxx,xxright handedxx,xxleft handedxx,xxPointer Devicexx,xxMouse Wheelxx,xxMouse Emulationxx,xxMouse Navigationxx,xxMouse Drag and Dropxx,xxMouse Scrollingxx,xxMouse Sensitivityxx,xxMove Mouse with Num Padxx,xxMouse Num Pad Emulationxx X-KDE-Keywords[zh_CN]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,mapping,right handed,left handed,Pointer Device,Mouse Wheel,Mouse Emulation,Mouse Navigation,Mouse Drag and Drop,Mouse Scrolling,Mouse Sensitivity,Move Mouse with Num Pad,Mouse Num Pad Emulation,鼠标,鼠标加速,鼠标阀值,鼠标按键,选择,光标形状,输入设备,按键映射,点击,图标,反馈,指针,拖拽,映射,右手习惯,左手习惯,光标设备,指针设备,鼠标滚轮,鼠标模拟,鼠标导航,鼠标拖拽,鼠标滚动,鼠标灵敏度,小键盘移动鼠标,小键盘鼠标模拟 X-KDE-Keywords[zh_TW]=Mouse,Mouse acceleration,Mouse threshold,Mouse buttons,Selection,Cursor Shape,Input Devices,Button Mapping,Click,icons,feedback,Pointers,Drag,Double Click,Single Click,mapping,right handed,left handed,Pointer Device,Mouse Wheel,Mouse Emulation,Mouse Navigation,Mouse Drag and Drop,Mouse Scrolling,Mouse Sensitivity,Move Mouse with Num Pad,Mouse Num Pad Emulation Categories=Qt;KDE;X-KDE-settings-hardware; diff --git a/kcms/kfontinst/kcmfontinst/fontinst.desktop b/kcms/kfontinst/kcmfontinst/fontinst.desktop index 321987d4c..e9a203cc3 100644 --- a/kcms/kfontinst/kcmfontinst/fontinst.desktop +++ b/kcms/kfontinst/kcmfontinst/fontinst.desktop @@ -1,140 +1,141 @@ [Desktop Entry] Exec=kcmshell5 fontinst Icon=preferences-desktop-font-installer Type=Service X-KDE-ServiceTypes=KCModule X-DocPath=kcontrol/fontinst/index.html X-KDE-Library=kcm_fontinst X-KDE-ParentApp=kcontrol X-KDE-OnlyShowOnQtPlatforms=xcb; Categories=Qt;KDE;X-KDE-settings-system; X-KDE-System-Settings-Parent-Category=font Name=Font Management Name[ar]=إدارة الخطوط Name[bg]=Управление на шрифтове Name[bn]=ফন্ট ব্যবস্থাপনা Name[bs]=Font za upravljanje Name[ca]=Gestió dels tipus de lletra Name[ca@valencia]=Gestió dels tipus de lletra Name[cs]=Správa písem Name[da]=Håndtering af skrifttyper Name[de]=Schriftarten-Verwaltung Name[el]=Διαχείριση γραμματοσειρών Name[en_GB]=Font Management Name[es]=Gestión de tipos de letra Name[et]=Fondihaldur Name[eu]=Letra-tipoen kudeaketa Name[fi]=Fonttienhallinta Name[fr]=Gestion des polices de caractères Name[ga]=Bainisteoireacht Clónna Name[gl]=Xestión dos tipos de letra Name[he]=ניהול גופנים Name[hr]=Upravljanje pismima Name[hu]=Betűtípus-kezelés Name[ia]=Gestion de font Name[id]=Pengelolaan Font Name[is]=Leturstjórn Name[it]=Gestione dei caratteri Name[ja]=フォント管理 Name[kk]=Қаріптерді басқару Name[km]=ការ​គ្រប់គ្រង​ពុម្ពអក្សរ Name[ko]=글꼴 관리 Name[lt]=Šriftų tvarkymas Name[lv]=Fontu pārvaldnieks Name[mr]=फॉन्ट व्यवस्थापन Name[nb]=Skriftadministrering Name[nds]=Schriftpleeg Name[nl]=Lettertypenbeheer Name[nn]=Skrift­handsaming Name[pa]=ਫੋਂਟ ਪਰਬੰਧ Name[pl]=Zarządzanie czcionkami Name[pt]=Gestão dos Tipos de Letra Name[pt_BR]=Gerenciamento de fontes Name[ro]=Administrare fonturi Name[ru]=Управление шрифтами Name[sk]=Správa písiem Name[sl]=Upravljanje pisav Name[sr]=Управљање фонтовима Name[sr@ijekavian]=Управљање фонтовима Name[sr@ijekavianlatin]=Upravljanje fontovima Name[sr@latin]=Upravljanje fontovima Name[sv]=Teckensnittshantering Name[tr]=Yazı Tipi Yönetimi Name[uk]=Керування шрифтами Name[vi]=Trình quản lý phông chữ Name[x-test]=xxFont Managementxx Name[zh_CN]=字体管理 Name[zh_TW]=字型管理 Comment=Install, manage and preview fonts Comment[ca]=Instal·la, gestiona i visualitza els tipus de lletres Comment[ca@valencia]=Instal·la, gestiona i visualitza els tipus de lletres Comment[de]=Schriftarten installieren, verwalten und betrachten Comment[en_GB]=Install, manage and preview fonts Comment[es]=Instalación, gestión y vista previa de tipos de letra Comment[fi]=Asenna, hallitse ja esikatsele fontteja +Comment[fr]=Installer, gérer et afficher des polices de caractères Comment[gl]=Instalar, xestionar e obter unha vista previa de tipos de letra Comment[id]=Instal, kelola dan pratinjau font-font Comment[it]=Installa, gestisce e mostra anteprime dei caratteri -Comment[ko]=글꼴 설치, 미리보기, 관리 +Comment[ko]=글꼴 설치, 미리 보기, 관리 Comment[nl]=Lettertypen installeren, beheren en bekijken Comment[nn]=Installer, handter og vis skrifter Comment[pl]=Wgrywanie, zarządzanie i podgląd czcionek Comment[pt]=Instalar, gerir e antever os tipos de letra Comment[pt_BR]=Instale, gerencie e visualize fontes Comment[sk]=Inštalujte, spravujte a prezerajte písma Comment[sv]=Installera, hantera och förhandsgranska teckensnitt Comment[uk]=Встановлення, керування та попередній перегляд шрифтів Comment[x-test]=xxInstall, manage and preview fontsxx Comment[zh_CN]=安装、管理和预览字体 Comment[zh_TW]=安裝、管理及預覽字型 X-KDE-Keywords=font,fonts,installer,truetype,type1,bitmap X-KDE-Keywords[ar]=خط,خطوط,مثبّت,مثبت,ترو.تايب,تايب1,صورة نقطية,truetype X-KDE-Keywords[bs]=slovo,slova,instalacijski program,truetype,tip1,bitna mapa X-KDE-Keywords[ca]=tipus de lletra,tipus de lletres,instal·lador,truetype,type1,mapa de bits X-KDE-Keywords[ca@valencia]=tipus de lletra,tipus de lletres,instal·lador,truetype,type1,mapa de bits X-KDE-Keywords[cs]=písmo,písma,instalátor,truetype,type1,bitmap X-KDE-Keywords[da]=font,fonts,skrifttype,skrifttyper,installer,truetype,type1,bitmap X-KDE-Keywords[de]=Schrift,Fonts,Schriftarten,Installation,TrueType,Type1,Bitmapschriften X-KDE-Keywords[el]=γραμματοσειρά,γραμματοσειρές,πρόγραμμα εγκατάστασης,truetype,type1,bitmap X-KDE-Keywords[en_GB]=font,fonts,installer,truetype,type1,bitmap X-KDE-Keywords[es]=tipo de letra,tipos de letra,instalador,truetype,type1,mapa de bits X-KDE-Keywords[et]=font,fondid,paigaldaja,truetype,type1,bitmap,bittraster X-KDE-Keywords[eu]=letra-tipo,letra-tipoak,instalatzaile,truetype,type1,bitmapa X-KDE-Keywords[fi]=kirjasin,kirjasimet,fontti,fontit,asentaja,asennin,truetype,type1,bitmap,bittikartta X-KDE-Keywords[fr]=police, polices, installateur, TrueType, type1, bitmap X-KDE-Keywords[ga]=cló,clófhoireann,clónna,clófhoirne,suiteálaí,truetype,type1,mapa giotán,giotánmhapach X-KDE-Keywords[gl]=letra, glifo, tipo de letra, tipo, instalador, mapa de bits X-KDE-Keywords[hu]=betűkészlet,betűkészletek,telepítő,truetype,type 1,bitmap X-KDE-Keywords[ia]=font,fonts,installator,truetype,type1,bitmap X-KDE-Keywords[id]=fon,fon,penginstal,truetype,type1,bitmap X-KDE-Keywords[it]=carattere,caratteri,installatore,truetype,type1,bitmap X-KDE-Keywords[kk]=font,fonts,installer,truetype,type1,bitmap X-KDE-Keywords[km]=font,fonts,installer,truetype,type1,bitmap X-KDE-Keywords[ko]=font,fonts,installer,truetype,type1,bitmap,글꼴,폰트,설치 X-KDE-Keywords[mr]=फॉन्ट, फॉन्टस, इंस्टालर, ट्रू टाईप, टाईप १, बीटमँप X-KDE-Keywords[nb]=skrift,skrifter,installer,truetrype,type1,bitmap X-KDE-Keywords[nds]=Schrift,Schriften,Schriftoort,Schriftoorden,TrueType,Type1,Bitmap X-KDE-Keywords[nl]=lettertype,lettertypen,installatieprogramma,truetype,type1,bitmap X-KDE-Keywords[nn]=skrift,skrifter,font,installer,truetype,type1,bitmap,punktskrift X-KDE-Keywords[pl]=czcionki,czcionka,instalator,truetype,typ1,mapa bitowa X-KDE-Keywords[pt]=tipo de letra,tipos de letra,instalador,truetype,type1,imagem X-KDE-Keywords[pt_BR]=fonte,fontes,instalador,truetype,type1,bitmap,imagem X-KDE-Keywords[ru]=font,fonts,installer,truetype,type1,bitmap,шрифт,шрифты,установка шрифтов,инсталлятор,битовая карта,растровое изображение,удаление шрифтов X-KDE-Keywords[sk]=písmo,písma,inštalátor,truetype,type1,bitmap X-KDE-Keywords[sl]=pisava,pisave,namestilnik,truetype,type1,bitmap,namestilnik pisav X-KDE-Keywords[sr]=font,fonts,installer,truetype,type1,bitmap,фонт,фонтови,инсталатер,трутајп,тип‑1,битмапски X-KDE-Keywords[sr@ijekavian]=font,fonts,installer,truetype,type1,bitmap,фонт,фонтови,инсталатер,трутајп,тип‑1,битмапски X-KDE-Keywords[sr@ijekavianlatin]=font,fonts,installer,truetype,type1,bitmap,font,fontovi,instalater,Truetype,Type1,bitmapski X-KDE-Keywords[sr@latin]=font,fonts,installer,truetype,type1,bitmap,font,fontovi,instalater,Truetype,Type1,bitmapski X-KDE-Keywords[sv]=teckensnitt,installation,truetype,type1,bitavbildning X-KDE-Keywords[tr]=yazı tipi,yazı tipleri,yükleyici,kurucu,trueytpe,type1,resim X-KDE-Keywords[uk]=шрифт,шрифти,встановлювач,truetype,type1,растрові X-KDE-Keywords[x-test]=xxfontxx,xxfontsxx,xxinstallerxx,xxtruetypexx,xxtype1xx,xxbitmapxx X-KDE-Keywords[zh_CN]=font,fonts,installer,truetype,type1,bitmap,字体,安装器,点阵 X-KDE-Keywords[zh_TW]=font,fonts,installer,truetype,type1,bitmap diff --git a/kcms/ksmserver/kcmsmserver.desktop b/kcms/ksmserver/kcmsmserver.desktop index 46d4a6e00..bef0f071f 100644 --- a/kcms/ksmserver/kcmsmserver.desktop +++ b/kcms/ksmserver/kcmsmserver.desktop @@ -1,125 +1,128 @@ [Desktop Entry] Exec=kcmshell5 kcmsmserver Icon=system-log-out Type=Service X-KDE-ServiceTypes=KCModule X-DocPath=kcontrol/kcmsmserver/index.html X-KDE-Library=kcm_smserver X-KDE-ParentApp=kcontrol X-KDE-System-Settings-Parent-Category=session X-KDE-Weight=60 Name=Desktop Session Name[ar]=جلسة سطح المكتب Name[bs]=Sesija Radne Površine Name[ca]=Sessió d'escriptori Name[ca@valencia]=Sessió d'escriptori Name[cs]=Sezení plochy Name[da]=Skrivebordssession Name[de]=Arbeitsflächen-Sitzung Name[el]=Συνεδρία επιφάνειας εργασίας Name[en_GB]=Desktop Session Name[es]=Sesión de escritorio Name[et]=Töölauaseanss Name[eu]=Mahaigaineko saioa Name[fi]=Työpöytäistunto Name[fr]=Session de bureau Name[gl]=Sesión de escritorio Name[he]=שולחן העבודה Name[hu]=Asztali munkamenet Name[id]=Sesi Desktop Name[is]=Skjáborðsseta Name[it]=Sessioni del desktop Name[ja]=デスクトップセッション Name[ko]=데스크톱 세션 Name[lt]=Darbalaukio sesija Name[nb]=Skrivebordsøkt Name[nds]=Schriefdischtörn Name[nl]=Bureaubladsessie Name[nn]=Skrivebordsøkt Name[pa]=ਡੈਸਕਟਾਪ ਸ਼ੈਸ਼ਨ Name[pl]=Sesja pulpitu Name[pt]=Sessão do Ambiente de Trabalho Name[pt_BR]=Sessão do Desktop Name[ru]=Управление сеансами Name[sk]=Sedenie plochy Name[sl]=Seja namizja Name[sr]=Сесија површи Name[sr@ijekavian]=Сесија површи Name[sr@ijekavianlatin]=Sesija površi Name[sr@latin]=Sesija površi Name[sv]=Skrivbordssession Name[tr]=Masaüstü Oturumu Name[uk]=Сеанс стільниці Name[x-test]=xxDesktop Sessionxx Name[zh_CN]=桌面会话 Name[zh_TW]=桌面作業階段 Comment=Desktop Session Login and Logout Comment[ar]=الولوج والخروج من جلسة سطح المكتب Comment[bs]=Prijava i odjava sesije radne površine Comment[ca]=Connexió i desconnexió de la sessió d'escriptori Comment[ca@valencia]=Connexió i desconnexió de la sessió d'escriptori Comment[cs]=Přihlášení a odhlášení ze sezení Comment[da]=Login og -ud fra skrivebordssession Comment[de]=An- und Abmelden einer Arbeitsflächen-Sitzung Comment[el]=Σύνδεση και αποσύνδεση συνεδρίας επιφάνειας εργασίας Comment[en_GB]=Desktop Session Login and Logout Comment[es]=Inicio y cierre de sesión del escritorio Comment[et]=Töölauaseansi sisse- ja väljalogimine Comment[eu]=Mahaigaineko saioa hastea eta ixtea Comment[fi]=Työpöytäistunnon sisään- ja uloskirjautuminen Comment[fr]=Connexion et déconnexion de la session de bureau Comment[gl]=Acceso e saída das sesións de escritorio Comment[he]=פעילות שולחן העבודה בהתחברות והתנתקות Comment[hu]=Be- és kijelentkezés az asztali munkamenetbe Comment[id]=Login dan Logout Sesi desktop Comment[is]=Innskráning og útskráning úr skjáborðssetu Comment[it]=Accesso e chiusura della sessione del desktop Comment[ko]=데스크톱 세션 로그인, 로그아웃 Comment[lt]=Darbalaukio sesijos prisijungimas ir atsijungimas Comment[nb]=Skrivebordsøkt inn- og utlogging Comment[nds]=Na Schriefdischtörn an- un dor vun afmellen Comment[nl]=Aan- en afmelden van bureaubladsessie Comment[nn]=Ut- og innlogging av skrivebordsøkt Comment[pa]=ਡੈਸਕਟਾਪ ਸ਼ੈਸ਼ਨ ਲਾਗਇਨ ਅਤੇ ਲਾਗ ਆਉਟ Comment[pl]=Logowanie i wylogowywanie z sesji pulpitu Comment[pt]=Início e Fim de Sessão Comment[pt_BR]=Início e fim da sessão do Desktop Comment[ru]=Настройка диспетчера сеансов Comment[sk]=Prihlásenie a odhlásenie sedenia plochy Comment[sl]=Prijava in odjava iz seje namizja Comment[sr]=Пријављивање и одјављивање из сесије површи Comment[sr@ijekavian]=Пријављивање и одјављивање из сесије површи Comment[sr@ijekavianlatin]=Prijavljivanje i odjavljivanje iz sesije površi Comment[sr@latin]=Prijavljivanje i odjavljivanje iz sesije površi Comment[sv]=Inloggning och utloggning för skrivbordssessioner Comment[tr]=Masaüstü Oturum Açma ve Çıkış Comment[uk]=Вхід та вихід із робочого сеансу Comment[x-test]=xxDesktop Session Login and Logoutxx Comment[zh_CN]=桌面会话登录和注销 Comment[zh_TW]=桌面作業階段登入與登出 X-KDE-Keywords=ksmserver,session,logout,confirmation,save,restore,efi,uefi,bios X-KDE-Keywords[ca]=ksmserver,sessió,sortida,confirmació,desa,restaura,efi,uefi,bios X-KDE-Keywords[ca@valencia]=ksmserver,sessió,eixida,confirmació,guarda,restaura,efi,uefi,bios X-KDE-Keywords[de]=Ksmserver,Sitzung,Abmelden,Logout,Bestätigung,Speichern,Wiederherstellen,efi,uefi,bios X-KDE-Keywords[en_GB]=ksmserver,session,logout,confirmation,save,restore,efi,uefi,bios X-KDE-Keywords[es]=ksmserver,sesión,cerrar sesión,confirmación,guardar,restaurar,efi,uefi,bios X-KDE-Keywords[fi]=ksmserver,istunto,uloskirjautuminen,kirjaudu,ulos,vahvistus,vahvista,tallennus,tallentaminen,tallenna,palautus,palautuminen,palauta,efi,uefi,bios +X-KDE-Keywords[fr]=ksmserver, session, déconnexion, confirmation, enregistrer, restaurer,efi,uefi,bios X-KDE-Keywords[gl]=ksmserver,sesión,saír,confirmación,gardar,restaurar,efi,uefi,bios +X-KDE-Keywords[id]=ksmserver,sesi,,logout,keluar,konfirmasi,simpan,pulihkan,efi,uefi,bios X-KDE-Keywords[it]=ksmserver,sessione,uscita,conferma,salva,ripristina,efi,uefi,bios X-KDE-Keywords[ko]=ksmserver,session,logout,confirmation,save,restore,세션,로그아웃,확인,저장,복원,efi,uefi,bios X-KDE-Keywords[nl]=ksmserver,sessie,afmelden,bevestiging,opslaan,herstellen,efi,uefi,bios X-KDE-Keywords[nn]=ksmserver,økt,logg ut,stadfesting,lagra,tilbakestilla,efi,uefi,bios X-KDE-Keywords[pt]=ksmserver,sessão,encerrar,confirmação,gravar,repor,efi,uefi,bios X-KDE-Keywords[pt_BR]=ksmserver,sessão,encerrar,confirmação,salvar,restaurar,efi,uefi,bios +X-KDE-Keywords[sk]=ksmserver,sedenie,odhlásenie,potvrdenie,uložiť,obnoviť,efi,uefi,bios X-KDE-Keywords[sv]=ksmserver,session,utloggning,bekräftelse,spara,återställ,efi,uefi,bios X-KDE-Keywords[uk]=ksmserver,session,logout,confirmation,save,restore,efi,uefi,bios,сеанс,вихід,підтвердження,зберегти,збереження,відновити,відновлення,іфі,іфай,уіфі,уіфай,юіфай,біос X-KDE-Keywords[x-test]=xxksmserverxx,xxsessionxx,xxlogoutxx,xxconfirmationxx,xxsavexx,xxrestorexx,xxefixx,xxuefixx,xxbiosxx X-KDE-Keywords[zh_CN]=ksmserver,会话,登出,确认,保存,恢复,efi,uefi,bios X-KDE-Keywords[zh_TW]=ksmserver,session,logout,confirmation,save,restore,efi,uefi,bios,工作階段,會話,階段,登出,確認,儲存,恢復,還原,復原 Categories=Qt;KDE;X-KDE-settings-components; diff --git a/kcms/ksplash/kcm_splashscreen.desktop b/kcms/ksplash/kcm_splashscreen.desktop index f1f950b57..f73fad690 100644 --- a/kcms/ksplash/kcm_splashscreen.desktop +++ b/kcms/ksplash/kcm_splashscreen.desktop @@ -1,121 +1,122 @@ [Desktop Entry] Icon=preferences-system-splash Exec=kcmshell5 kcm_splashscreen X-DocPath=kcontrol/splashscreen/index.html Type=Service X-KDE-ServiceTypes=KCModule X-KDE-Library=kcm_splashscreen X-KDE-ParentApp=kcontrol X-KDE-System-Settings-Parent-Category=workspacetheme X-KDE-Weight=100 Name=Splash Screen Name[bs]=Čuvar ekrana Name[ca]=Pantalla de presentació Name[ca@valencia]=Pantalla de presentació Name[cs]=Úvodní obrazovka Name[da]=Splashskærm Name[de]=Startbildschirm Name[el]=Αρχική οθόνη Name[en_GB]=Splash Screen Name[es]=Pantalla de bienvenida Name[et]=Tiitelkuva Name[eu]=Plast pantaila Name[fi]=Tervetuloruutu Name[fr]=Écran de démarrage Name[gl]=Pantalla de benvida Name[he]=מסך פתיחה Name[hu]=Nyitóképernyő Name[id]=Layar Splash Name[is]=Upphafsskjár Name[it]=Schermata iniziale Name[ko]=시작 화면 Name[lt]=Pasveikinimo ekranas Name[nb]=Velkomstbilde Name[nds]=Startschirm Name[nl]=Opstartscherm Name[nn]=Velkomst­bilete Name[pa]=ਸਵਾਗਤੀ ਸਕਰੀਨ Name[pl]=Ekran powitalny Name[pt]=Ecrã Inicial Name[pt_BR]=Tela de apresentação Name[ru]=Заставка Name[se]=Álgošearbma Name[sk]=Úvodná obrazovka Name[sl]=Pozdravno okno Name[sr]=Уводни екран Name[sr@ijekavian]=Уводни екран Name[sr@ijekavianlatin]=Uvodni ekran Name[sr@latin]=Uvodni ekran Name[sv]=Startskärm Name[tr]=Açılış Ekranı Name[uk]=Вікно вітання Name[vi]=Màn hình chào mừng Name[x-test]=xxSplash Screenxx Name[zh_CN]=欢迎屏幕 Name[zh_TW]=啟動畫面 Comment=Choose splash screen theme Comment[ca]=Trieu el tema de la pantalla de presentació Comment[ca@valencia]=Trieu el tema de la pantalla de presentació Comment[de]=Startbildschirm-Design auswählen Comment[en_GB]=Choose splash screen theme Comment[es]=Escoger un tema para la pantalla de bienvenida Comment[fi]=Valitse tervetuloruudun teema +Comment[fr]=Choisissez le thème de l'écran de démarrage Comment[gl]=Escoller un tema da pantalla de benvida Comment[id]=Pilihlah tema layar splash Comment[it]=Scegli tema della schermata iniziale Comment[ko]=시작 화면 테마 선택 Comment[nl]=Opstartschermthema kiezen Comment[nn]=Vel tema for velkomstbilete Comment[pl]=Wybierz wygląd ekranu powitalnego Comment[pt]=Escolher o tema do ecrã inicial Comment[pt_BR]=Escolha o tema da tela de apresentação Comment[sk]=Vyberte tému pre úvodnú obrazovku Comment[sv]=Välj startskärmstema Comment[uk]=Вибір теми вікна вітання Плазми Comment[x-test]=xxChoose splash screen themexx Comment[zh_CN]=选择欢迎屏幕主题 Comment[zh_TW]=選擇啟動畫面主題 X-KDE-Keywords=splash screen,splash theme,startup X-KDE-Keywords[bs]=čuvar ekrana,blijesak teme,pokretanje X-KDE-Keywords[ca]=pantalla de presentació,tema de presentació,engegar X-KDE-Keywords[ca@valencia]=pantalla de presentació,tema de presentació,engegar X-KDE-Keywords[da]=opstartsbillede,opstartsskærm,splash,opstartstema,opstart X-KDE-Keywords[de]=Startbildschirm,Design X-KDE-Keywords[el]=οθόνης εκκίνησης,θέμα εκκίνησης,έναρξη X-KDE-Keywords[en_GB]=splash screen,splash theme,startup X-KDE-Keywords[es]=pantalla de bienvenida,tema de bienvenida,inicio X-KDE-Keywords[et]=tiitelkuva,tiitelkuva teema,käivitamine X-KDE-Keywords[eu]=plasta pantaila,plasta gaia,abiaraztea X-KDE-Keywords[fi]=aloitusruutu,aloitusteema,käynnistys,käynnistysruutu,käynnistysteema,tervetuloruutu,tervetuloikkuna,tervetuloteema X-KDE-Keywords[fr]=écran de démarrage, thème de l'écran de démarrage, démarrage X-KDE-Keywords[gl]=pantalla de benvida, tema de benvida, inicio X-KDE-Keywords[hu]=indítóképernyő,indítótéma,indulás X-KDE-Keywords[id]=screen splash,tema splash,pemulaian X-KDE-Keywords[it]=schermata iniziale,tema della schermata iniziale,avvio X-KDE-Keywords[ko]=splash screen,splash theme,startup,시작 화면,시작 테마,시작 X-KDE-Keywords[nb]=velkomstbilde,velkomstbildetema,oppstart X-KDE-Keywords[nds]=Startschirm,Startschirm-Muster,Hoochfohren X-KDE-Keywords[nl]=splash-scherm,splash-thema,opstarten X-KDE-Keywords[nn]=velkomstbilete,velkomstbilettema,oppstart X-KDE-Keywords[pa]=ਸਵਾਗਤੀ ਸਕਰੀਨ,ਸਪਲੈਸ਼ ਥੀਮ,ਸ਼ੁਰੂ,ਸ਼ੁਰੂਆਤ X-KDE-Keywords[pl]=ekran powitalny,wystrój ekranu powitalnego,uruchamianie X-KDE-Keywords[pt]=ecrã inicial,tema do ecrã inicial,arranque X-KDE-Keywords[pt_BR]=tela inicial,tema inicial,inicialização X-KDE-Keywords[ru]=splash screen,splash theme,startup,заставка,экран-заставка,тема заставки,запуск,приветствие X-KDE-Keywords[sk]=splash screen,splash theme,spustenie X-KDE-Keywords[sl]=pozdravno okno,pozdravni zaslon,tema pozdravnega zaslona,zagon X-KDE-Keywords[sr]=splash screen,splash theme,startup,уводни екран,уводна тема,покретање X-KDE-Keywords[sr@ijekavian]=splash screen,splash theme,startup,уводни екран,уводна тема,покретање X-KDE-Keywords[sr@ijekavianlatin]=splash screen,splash theme,startup,uvodni ekran,uvodna tema,pokretanje X-KDE-Keywords[sr@latin]=splash screen,splash theme,startup,uvodni ekran,uvodna tema,pokretanje X-KDE-Keywords[sv]=startskärm,starttema,start X-KDE-Keywords[tr]=açılış ekranı,açılış ekranı teması,açılış X-KDE-Keywords[uk]=splash screen,splash theme,startup,вікно,вітання,тема,запуск X-KDE-Keywords[x-test]=xxsplash screenxx,xxsplash themexx,xxstartupxx X-KDE-Keywords[zh_CN]=splash screen,splash theme,startup,飞溅屏幕,启动画面,启动画面主题,飞溅屏幕主题,启动 X-KDE-Keywords[zh_TW]=splash screen,splash theme,startup Categories=Qt;KDE;X-KDE-settings-looknfeel; diff --git a/kcms/ksplash/package/metadata.desktop b/kcms/ksplash/package/metadata.desktop index 61e065149..7a7eb882d 100644 --- a/kcms/ksplash/package/metadata.desktop +++ b/kcms/ksplash/package/metadata.desktop @@ -1,82 +1,83 @@ [Desktop Entry] Name=Splash Screen Name[bs]=Čuvar ekrana Name[ca]=Pantalla de presentació Name[ca@valencia]=Pantalla de presentació Name[cs]=Úvodní obrazovka Name[da]=Splashskærm Name[de]=Startbildschirm Name[el]=Αρχική οθόνη Name[en_GB]=Splash Screen Name[es]=Pantalla de bienvenida Name[et]=Tiitelkuva Name[eu]=Plast pantaila Name[fi]=Tervetuloruutu Name[fr]=Écran de démarrage Name[gl]=Pantalla de benvida Name[he]=מסך פתיחה Name[hu]=Nyitóképernyő Name[id]=Layar Splash Name[is]=Upphafsskjár Name[it]=Schermata iniziale Name[ko]=시작 화면 Name[lt]=Pasveikinimo ekranas Name[nb]=Velkomstbilde Name[nds]=Startschirm Name[nl]=Opstartscherm Name[nn]=Velkomst­bilete Name[pa]=ਸਵਾਗਤੀ ਸਕਰੀਨ Name[pl]=Ekran powitalny Name[pt]=Ecrã Inicial Name[pt_BR]=Tela de apresentação Name[ru]=Заставка Name[se]=Álgošearbma Name[sk]=Úvodná obrazovka Name[sl]=Pozdravno okno Name[sr]=Уводни екран Name[sr@ijekavian]=Уводни екран Name[sr@ijekavianlatin]=Uvodni ekran Name[sr@latin]=Uvodni ekran Name[sv]=Startskärm Name[tr]=Açılış Ekranı Name[uk]=Вікно вітання Name[vi]=Màn hình chào mừng Name[x-test]=xxSplash Screenxx Name[zh_CN]=欢迎屏幕 Name[zh_TW]=啟動畫面 Comment=Choose splash screen theme Comment[ca]=Trieu el tema de la pantalla de presentació Comment[ca@valencia]=Trieu el tema de la pantalla de presentació Comment[de]=Startbildschirm-Design auswählen Comment[en_GB]=Choose splash screen theme Comment[es]=Escoger un tema para la pantalla de bienvenida Comment[fi]=Valitse tervetuloruudun teema +Comment[fr]=Choisissez le thème de l'écran de démarrage Comment[gl]=Escoller un tema da pantalla de benvida Comment[id]=Pilihlah tema layar splash Comment[it]=Scegli tema della schermata iniziale Comment[ko]=시작 화면 테마 선택 Comment[nl]=Opstartschermthema kiezen Comment[nn]=Vel tema for velkomstbilete Comment[pl]=Wybierz wygląd ekranu powitalnego Comment[pt]=Escolher o tema do ecrã inicial Comment[pt_BR]=Escolha o tema da tela de apresentação Comment[sk]=Vyberte tému pre úvodnú obrazovku Comment[sv]=Välj startskärmstema Comment[uk]=Вибір теми вікна вітання Плазми Comment[x-test]=xxChoose splash screen themexx Comment[zh_CN]=选择欢迎屏幕主题 Comment[zh_TW]=選擇啟動畫面主題 Icon=preferences-system-splash Keywords= Type=Service X-KDE-ParentApp= X-KDE-PluginInfo-Author=Marco Martin X-KDE-PluginInfo-Email=mart@kde.org X-KDE-PluginInfo-License=GPLv2 X-KDE-PluginInfo-Name=kcm_splashscreen X-KDE-PluginInfo-Version= X-KDE-PluginInfo-Website=https://www.kde.org/plasma-desktop X-KDE-ServiceTypes=Plasma/Generic X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml diff --git a/kcms/lookandfeel/kcm_lookandfeel.desktop b/kcms/lookandfeel/kcm_lookandfeel.desktop index 848d7912a..83f243e5c 100644 --- a/kcms/lookandfeel/kcm_lookandfeel.desktop +++ b/kcms/lookandfeel/kcm_lookandfeel.desktop @@ -1,115 +1,116 @@ [Desktop Entry] Icon=preferences-desktop-theme-global Exec=kcmshell5 kcm_lookandfeel Type=Service X-KDE-ServiceTypes=KCModule X-KDE-Library=kcm_lookandfeel X-KDE-ParentApp=kcontrol X-KDE-System-Settings-Parent-Category=appearance X-KDE-Weight=1 Name=Look and Feel Name[ca]=Aspecte i comportament Name[ca@valencia]=Aspecte i comportament Name[cs]=Vzhled a dojem Name[da]=Udseende og fremtoning Name[de]=Erscheinungsbild Name[el]=Εμφάνιση και αίσθηση Name[en_GB]=Look and Feel Name[es]=Aspecto visual Name[eu]=Itxura eta izaera Name[fi]=Ulkoasu ja tuntuma Name[fr]=Apparence Name[gl]=Aparencia e comportamento Name[he]=מראה ותחושה Name[hu]=Megjelenés Name[id]=Nuansa Dan Suasana Name[it]=Aspetto Name[ko]=모습과 느낌 Name[lt]=Išvaizda ir turinys Name[nb]=Utseende og oppførsel Name[nl]=Uiterlijk en gedrag Name[nn]=Utsjånad og åtferd Name[pa]=ਦਿੱਖ ਅਤੇ ਛੋਹ Name[pl]=Wrażenia wzrokowe i dotykowe Name[pt]=Aparência e Comportamento Name[pt_BR]=Aparência Name[ru]=Оформления рабочей среды Name[sk]=Vzhľad a nastavenie Name[sl]=Videz in občutek Name[sr]=Изглед и осећај Name[sr@ijekavian]=Изглед и осећај Name[sr@ijekavianlatin]=Izgled i osećaj Name[sr@latin]=Izgled i osećaj Name[sv]=Utseende och känsla Name[tr]=Bak ve Hisset Name[uk]=Вигляд і поведінка Name[x-test]=xxLook and Feelxx Name[zh_CN]=观感 Name[zh_TW]=外觀與感覺 Comment=Choose Look and Feel theme Comment[ca]=Trieu el tema d'aspecte i comportament Comment[ca@valencia]=Trieu el tema d'aspecte i comportament Comment[de]=Erscheinungsbild-Design auswählen Comment[en_GB]=Choose Look and Feel theme Comment[es]=Escoger un tema para el aspecto visual Comment[fi]=Valitse ulkoasuteema +Comment[fr]=Sélectionnez le thème d'apparence Comment[gl]=Escolla un tema de aparencia e comportamento Comment[id]=Pilihlah tema Nuansa dan Suasana Comment[it]=Scegli tema dell'aspetto Comment[ko]=모습과 느낌 테마 선택 Comment[nl]=Thema voor uiterlijk en gedrag kiezen Comment[nn]=Vel tema for utsjånad og åtferd Comment[pl]=Wybierz jak będą wyglądać wrażenia wzrokowe i dotykowe Comment[pt]=Escolher o tema de Aparência e Comportamento Comment[pt_BR]=Escolha o tema de aparência Comment[sk]=Vyberte tému pre vzhľad Comment[sv]=Välj tema för utseende och känsla Comment[uk]=Вибір теми вигляду і поведінки Comment[x-test]=xxChoose Look and Feel themexx Comment[zh_CN]=选择观感主题 Comment[zh_TW]=選擇「外觀與感覺」的主題 X-KDE-Keywords=theme, look, feel X-KDE-Keywords[bs]=tema,pogledaj,osjeti X-KDE-Keywords[ca]=tema, aspecte, comportament X-KDE-Keywords[ca@valencia]=tema, aspecte, comportament X-KDE-Keywords[cs]=motiv,vzhled,chování X-KDE-Keywords[da]=tema, udseende, fremtoning, look, feel X-KDE-Keywords[de]=Design,Erscheinungsbild X-KDE-Keywords[el]=θέμα, εμφάνιση, αίσθηση X-KDE-Keywords[en_GB]=theme, look, feel X-KDE-Keywords[es]=tema, aspecto visual X-KDE-Keywords[et]=teema, välimus X-KDE-Keywords[eu]=gaia,itxura,izaera X-KDE-Keywords[fi]=teema, ulkoasu, tuntuma X-KDE-Keywords[fr]=thème, apparence, comportement, graphique X-KDE-Keywords[gl]=tema, aparencia, estilo, comportamento X-KDE-Keywords[hu]=téma, megjelenés X-KDE-Keywords[id]=tema, nuansa, suasana X-KDE-Keywords[it]=tema,aspetto X-KDE-Keywords[ko]=theme, look, feel,테마, 모습과 느낌,외형,외관 X-KDE-Keywords[nb]=tema, utseende, oppførsel X-KDE-Keywords[nds]=Muster, Utsehn, Bedenen X-KDE-Keywords[nl]=thema, uiterlijk, gedrag X-KDE-Keywords[nn]=tema, utsjånad, åtferd X-KDE-Keywords[pa]=ਥੀਮ, ਦਿੱਖ, ਰਵੱਈਆ X-KDE-Keywords[pl]=wystrój, wygląd, odczucia, wrażenia X-KDE-Keywords[pt]=tema, aparência, comportamento X-KDE-Keywords[pt_BR]=tema, visual, aparência X-KDE-Keywords[ru]=theme,look,feel,тема,внешний вид рабочей среды,ощущение,стиль виджетов X-KDE-Keywords[sk]=téma, vzhľad, nastavenie X-KDE-Keywords[sl]=tema, videz, občutek X-KDE-Keywords[sr]=theme,look,feel,тема,изглед,осећај X-KDE-Keywords[sr@ijekavian]=theme,look,feel,тема,изглед,осећај X-KDE-Keywords[sr@ijekavianlatin]=theme,look,feel,tema,izgled,osećaj X-KDE-Keywords[sr@latin]=theme,look,feel,tema,izgled,osećaj X-KDE-Keywords[sv]=tema, utseende, känsla X-KDE-Keywords[tr]=tema, görünüm, duyum X-KDE-Keywords[uk]=theme,look,feel,тема,вигляд,поведінка X-KDE-Keywords[x-test]=xxthemexx,xx lookxx,xx feelxx X-KDE-Keywords[zh_CN]=theme, look, feel, 主题, 观感 X-KDE-Keywords[zh_TW]=theme, look, feel Categories=Qt;KDE;X-KDE-settings-looknfeel; diff --git a/kcms/lookandfeel/package/metadata.desktop b/kcms/lookandfeel/package/metadata.desktop index 8f1d105c6..eafc0084a 100644 --- a/kcms/lookandfeel/package/metadata.desktop +++ b/kcms/lookandfeel/package/metadata.desktop @@ -1,76 +1,77 @@ [Desktop Entry] Name=Look and Feel Name[ca]=Aspecte i comportament Name[ca@valencia]=Aspecte i comportament Name[cs]=Vzhled a dojem Name[da]=Udseende og fremtoning Name[de]=Erscheinungsbild Name[el]=Εμφάνιση και αίσθηση Name[en_GB]=Look and Feel Name[es]=Aspecto visual Name[eu]=Itxura eta izaera Name[fi]=Ulkoasu ja tuntuma Name[fr]=Apparence Name[gl]=Aparencia e comportamento Name[he]=מראה ותחושה Name[hu]=Megjelenés Name[id]=Nuansa Dan Suasana Name[it]=Aspetto Name[ko]=모습과 느낌 Name[lt]=Išvaizda ir turinys Name[nb]=Utseende og oppførsel Name[nl]=Uiterlijk en gedrag Name[nn]=Utsjånad og åtferd Name[pa]=ਦਿੱਖ ਅਤੇ ਛੋਹ Name[pl]=Wrażenia wzrokowe i dotykowe Name[pt]=Aparência e Comportamento Name[pt_BR]=Aparência Name[ru]=Оформления рабочей среды Name[sk]=Vzhľad a nastavenie Name[sl]=Videz in občutek Name[sr]=Изглед и осећај Name[sr@ijekavian]=Изглед и осећај Name[sr@ijekavianlatin]=Izgled i osećaj Name[sr@latin]=Izgled i osećaj Name[sv]=Utseende och känsla Name[tr]=Bak ve Hisset Name[uk]=Вигляд і поведінка Name[x-test]=xxLook and Feelxx Name[zh_CN]=观感 Name[zh_TW]=外觀與感覺 Comment=Choose Look and Feel theme Comment[ca]=Trieu el tema d'aspecte i comportament Comment[ca@valencia]=Trieu el tema d'aspecte i comportament Comment[de]=Erscheinungsbild-Design auswählen Comment[en_GB]=Choose Look and Feel theme Comment[es]=Escoger un tema para el aspecto visual Comment[fi]=Valitse ulkoasuteema +Comment[fr]=Sélectionnez le thème d'apparence Comment[gl]=Escolla un tema de aparencia e comportamento Comment[id]=Pilihlah tema Nuansa dan Suasana Comment[it]=Scegli tema dell'aspetto Comment[ko]=모습과 느낌 테마 선택 Comment[nl]=Thema voor uiterlijk en gedrag kiezen Comment[nn]=Vel tema for utsjånad og åtferd Comment[pl]=Wybierz jak będą wyglądać wrażenia wzrokowe i dotykowe Comment[pt]=Escolher o tema de Aparência e Comportamento Comment[pt_BR]=Escolha o tema de aparência Comment[sk]=Vyberte tému pre vzhľad Comment[sv]=Välj tema för utseende och känsla Comment[uk]=Вибір теми вигляду і поведінки Comment[x-test]=xxChoose Look and Feel themexx Comment[zh_CN]=选择观感主题 Comment[zh_TW]=選擇「外觀與感覺」的主題 Icon=preferences-desktop-theme-style Keywords= Type=Service X-KDE-ParentApp= X-KDE-PluginInfo-Author=Marco Martin X-KDE-PluginInfo-Email=mart@kde.org X-KDE-PluginInfo-License=GPLv2 X-KDE-PluginInfo-Name=kcm_lookandfeel X-KDE-PluginInfo-Version= X-KDE-PluginInfo-Website=https://www.kde.org/plasma-desktop X-KDE-ServiceTypes=Plasma/Generic X-Plasma-API=declarativeappletscript X-Plasma-MainScript=ui/main.qml diff --git a/kcms/style/style.desktop b/kcms/style/style.desktop index f1218e1f5..95845f7d9 100644 --- a/kcms/style/style.desktop +++ b/kcms/style/style.desktop @@ -1,93 +1,98 @@ [Desktop Entry] Exec=kcmshell5 style Icon=preferences-desktop-theme-applications Type=Service X-KDE-ServiceTypes=KCModule,KCModuleInit X-DocPath=kcontrol/kcmstyle/index.html X-KDE-Library=kcm_style X-KDE-Init-Symbol=kcminit_style X-KDE-Init-Phase=0 X-KDE-ParentApp=kcontrol X-KDE-System-Settings-Parent-Category=applicationstyle X-KDE-Weight=0 Name=Application Style Name[ca]=Estil de l'aplicació Name[ca@valencia]=Estil de l'aplicació Name[cs]=Styl aplikací Name[de]=Anwendungs-Stil Name[en_GB]=Application Style Name[es]=Estilo de la aplicación Name[fi]=Sovellustyyli Name[fr]=Apparence des applications Name[gl]=Estilo do aplicativo +Name[id]=Gaya Aplikasi Name[it]=Stile dell'applicazione Name[ko]=프로그램 스타일 Name[nl]=Stijl van toepassing Name[nn]=Program­stil Name[pt]=Estilo das Aplicações Name[pt_BR]=Estilo do aplicativo +Name[sk]=Štýl aplikácií Name[sv]=Programstil Name[uk]=Стиль вікон програм Name[x-test]=xxApplication Stylexx Name[zh_CN]=应用样式 Name[zh_TW]=應用程式樣式 Comment=Configure application style and behavior Comment[ca]=Configura l'estil i el comportament de les aplicacions Comment[ca@valencia]=Configura l'estil i el comportament de les aplicacions Comment[de]=Stil und Verhalten der Anwendungen einrichten Comment[en_GB]=Configure application style and behaviour Comment[es]=Configurar el estilo y el comportamiento de la aplicación Comment[fi]=Sovellustyylin ja toiminnan asetukset +Comment[fr]=Configuration du style et du comportement des applications Comment[gl]=Configurar o estilo e comportamento dos aplicativos +Comment[id]=Konfigurasikan perilaku dan gaya aplikasi Comment[it]=Configura stile e comportamento dell'applicazione Comment[ko]=프로그램 스타일과 행동 설정 Comment[nl]=Toepassingstijl en gedrag configureren Comment[nn]=Set opp utsjånad og åtferd for program Comment[pt]=Configurar o estilo e comportamento das aplicações Comment[pt_BR]=Configurar o estilo e comportamento do aplicativo +Comment[sk]=Nastavte štýl a správanie aplikácií Comment[sv]=Anpassa programstil och beteende Comment[uk]=Налаштовування стилю і поведінки вікон програм Comment[x-test]=xxConfigure application style and behaviorxx Comment[zh_CN]=配置应用程序样式和行为 Comment[zh_TW]=設定應用程式樣式與行為 X-KDE-Keywords=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,theme,plasma,menu,global menu X-KDE-Keywords[ca]=estil,estils,aspecte,estri,icones,barres d'eines,text,ressaltat,aplicacions,aplicacions del KDE,tema,plasma,menu,menu global X-KDE-Keywords[ca@valencia]=estil,estils,aspecte,estri,icones,barres d'eines,text,ressaltat,aplicacions,aplicacions del KDE,tema,plasma,menu,menu global X-KDE-Keywords[da]=stil,style,udseende,kontrol,widget,ikoner,værktøjslinjer,tekst,fremhævning,programmer,KDE-programmer,tema,plasma,menu,global menu X-KDE-Keywords[de]=Stile,Design,Themes,Schema,Elemente,Bildschirmelemente,Icons,Bedienelemente,Schriften,Symbole,Werkzeugleisten,Text,Hervorhebungen,Knöpfe,Anwendungen,Programme,KDE-Programme,Menü,Globales Menü X-KDE-Keywords[el]=στιλ,στιλ,εμφάνιση,γραφικό συστατικό,εικονίδια,γραμμές εργαλείων,κείμενο,τονισμός,εφαρμογές,εφαρμογές KDE,θέμα,plasma,μενού,καθολικό μενού X-KDE-Keywords[en_GB]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,theme,plasma,menu,global menu X-KDE-Keywords[es]=estilo,estilos,apariencia,controles,iconos,barras de herramientas,texto,resaltado,aplicaciones,aplicaciones de KDE,tema,plasma,menú,menú global X-KDE-Keywords[eu]=estilo,estiloak,itxura,trepeta,ikonoak,tresna-barrak,testua,nabarmentzea,aplikazioak,KDE aplikazioak,gaia,plasma,menu,menu orokorra X-KDE-Keywords[fi]=tyyli,tyylit,ulkoasu,käyttöliittymäelementti,elementti,kuvakkeet,työkalurivit,työkalupalkit, teksti,korostus,sovellukset,KDE-sovellukset,teema,plasma,työpöydänlaajuinen valikko X-KDE-Keywords[fr]=style, styles, apparence, composant graphique, icônes, barres d'outil, texte, mise en valeur, applications, applications KDE, thème, plasma, menu, menu global X-KDE-Keywords[gl]=estilo, estilos, aparencia, trebello, iconas, barras de ferramentas, texto, realzar, aplicativos, aplicacións, programas, software, tema, plasma,menu,menú,global menu,menú global X-KDE-Keywords[hu]=stílus,stílusok,kinézet,widget,ikonok,eszköztárak,szöveg,kiemelés,alkalmazások,KDe alkalmazások,téma,plazma,menü,globális menü X-KDE-Keywords[id]=gaya,gaya,look,widget,ikon,bilah alat,teks,sorot,apl,aplikasi KDE,tema,plasma,menu,menu global X-KDE-Keywords[it]=stile,stili,aspetto,oggetto,icone,barre degli strumenti,testo,evidenziazione,applicazioni,applicazioni KDE,tema,plasma,menu,menu globale X-KDE-Keywords[ko]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,theme,plasma,menu,global menu,스타일,모양,위젯,아이콘,툴바,도구 모음,강조,프로그램,앱,KDE 프로그램,테마,전역 메뉴,메뉴 X-KDE-Keywords[nl]=stijl,stijlen,uiterlijk,widget,pictogrammen,werkbalk,tekst,accentuering,apps,KDE-toepassingen,thema,plasma, menu,globaal menu X-KDE-Keywords[nn]=stil,stilar,utsjånad,skjermelement,ikon,verktøylinjer,tekst,framheva,program,KDE-program,tema,plasma,meny,global meny X-KDE-Keywords[pa]=ਸਟਾਈਲ,ਸ਼ੈਲੀ,ਦਿੱਖ,ਵਿਜੈੱਟ,ਆਈਕਾਨ,ਟੂਲਬਾਰ,ਟੈਕਸਟ,ਪਾਠ,ਸ਼ਬਦ,ਉਭਾਰਨਾ,ਐਪਸ,ਕੇਡੀਈ ਐਪਲੀਕੇਸ਼ਨਾਂ,ਥੀਮ,ਪਲਾਜ਼ਮਾ,ਮੇਨੂ,ਗਲੋਬਲ ਮੇਨੂ X-KDE-Keywords[pl]=style,styl,wygląd,element interfejsu,ikony,paski narzędzi,tekst,podświetlenie,programy,programy KDE,motyw,plazma,menu,globalne menu X-KDE-Keywords[pt]=estilo,estilos,aparência,elemento,item,ícones,barras de ferramentas,texto,realce,aplicações,aplicações do KDE,tema,plasma,menu global X-KDE-Keywords[pt_BR]=estilo,estilos,aparência,widget,ícones,barras de ferramentas,texto,realce,aplicativos,aplicativos do KDE,tema,plasma, menu, menu global X-KDE-Keywords[ru]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,theme,plasma,стиль,стили,внешний вид,виджет,значки,панель инструментов,текст,подсветка,приложения,приложения KDE,тема,плазма,меню,глобальное меню X-KDE-Keywords[sk]=štýl,štýly,vzhľad,widget,ikony,panely nástrojov,text,zvýraznenie,aplikácie,KDE aplikácie,téma,plasma,ponuka,globálna ponuka X-KDE-Keywords[sl]=slog,slogi,videz,gradnik,ikone,orodjarne,orodne vrstice,besedilo,poudarek,programi,tema,plasma,meni,splošni meni X-KDE-Keywords[sr]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,theme,plasma,menu,global menu,стил,стилови,изглед,виџет,иконице,траке алатки,текст,истицање,програми,КДЕ програми,тема,Плазма,мени,глобални мени X-KDE-Keywords[sr@ijekavian]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,theme,plasma,menu,global menu,стил,стилови,изглед,виџет,иконице,траке алатки,текст,истицање,програми,КДЕ програми,тема,Плазма,мени,глобални мени X-KDE-Keywords[sr@ijekavianlatin]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,theme,plasma,menu,global menu,stil,stilovi,izgled,vidžet,ikonice,trake alatki,tekst,isticanje,programi,KDE programi,tema,Plasma,meni,globalni meni X-KDE-Keywords[sr@latin]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,theme,plasma,menu,global menu,stil,stilovi,izgled,vidžet,ikonice,trake alatki,tekst,isticanje,programi,KDE programi,tema,Plasma,meni,globalni meni X-KDE-Keywords[sv]=stil,stilar,utseende,grafisk komponent,ikoner,verktygsrader,text,markering,program,KDE-program,tema,plasma,meny,global meny X-KDE-Keywords[tr]=biçim,biçimler,görünüm,parçacık,simgeler,araç çubukları,metin,vurgulama,uygulamalar,KDE uygulamaları,tema,plasmamenüsü,genel menü X-KDE-Keywords[uk]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,theme,plasma,menu,global menu,стиль,стилі,вигляд,віджет,піктограма,піктограми,значок,значки,іконки,панель,панель інструментів,текст,підсвічування,позначення,програма,програми,тема,плазма,меню,загальне меню X-KDE-Keywords[x-test]=xxstylexx,xxstylesxx,xxlookxx,xxwidgetxx,xxiconsxx,xxtoolbarsxx,xxtextxx,xxhighlightxx,xxappsxx,xxKDE applicationsxx,xxthemexx,xxplasmaxx,xxmenuxx,xxglobal menuxx X-KDE-Keywords[zh_CN]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,theme,plasma,风格,外观,部件,图标,工具栏,文本,突出显示,程序,KDE 应用程序,主题 X-KDE-Keywords[zh_TW]=style,styles,look,widget,icons,toolbars,text,highlight,apps,KDE applications,theme,plasma,menu,global menu Categories=Qt;KDE;X-KDE-settings-looknfeel; diff --git a/layout-templates/org.kde.plasma.desktop.defaultPanel/contents/layout.js b/layout-templates/org.kde.plasma.desktop.defaultPanel/contents/layout.js index fc3d49359..048671ef4 100644 --- a/layout-templates/org.kde.plasma.desktop.defaultPanel/contents/layout.js +++ b/layout-templates/org.kde.plasma.desktop.defaultPanel/contents/layout.js @@ -1,83 +1,84 @@ var panel = new Panel var panelScreen = panel.screen var freeEdges = {"bottom": true, "top": true, "left": true, "right": true} for (i = 0; i < panelIds.length; ++i) { var tmpPanel = panelById(panelIds[i]) if (tmpPanel.screen == panelScreen) { // Ignore the new panel if (tmpPanel.id != panel.id) { freeEdges[tmpPanel.location] = false; } } } if (freeEdges["bottom"] == true) { panel.location = "bottom"; } else if (freeEdges["top"] == true) { panel.location = "top"; } else if (freeEdges["left"] == true) { panel.location = "left"; } else if (freeEdges["right"] == true) { panel.location = "right"; } else { // There is no free edge, so leave the default value panel.location = "top"; } panel.height = gridUnit * 2 var kickoff = panel.addWidget("org.kde.plasma.kickoff") kickoff.currentConfigGroup = ["Shortcuts"] kickoff.writeConfig("global", "Alt+F1") //panel.addWidget("org.kde.plasma.showActivityManager") panel.addWidget("org.kde.plasma.pager") panel.addWidget("org.kde.plasma.taskmanager") /* Next up is determining whether to add the Input Method Panel * widget to the panel or not. This is done based on whether * the system locale's language id is a member of the following * white list of languages which are known to pull in one of * our supported IME backends when chosen during installation * of common distributions. */ var langIds = ["as", // Assamese "bn", // Bengali "bo", // Tibetan "brx", // Bodo "doi", // Dogri "gu", // Gujarati "hi", // Hindi "ja", // Japanese "kn", // Kannada "ko", // Korean "kok", // Konkani "ks", // Kashmiri "lep", // Lepcha "mai", // Maithili "ml", // Malayalam "mni", // Manipuri "mr", // Marathi "ne", // Nepali "or", // Odia "pa", // Punjabi "sa", // Sanskrit "sat", // Santali "sd", // Sindhi "si", // Sinhala "ta", // Tamil "te", // Telugu "th", // Thai "ur", // Urdu "vi", // Vietnamese "zh_CN", // Simplified Chinese "zh_TW"] // Traditional Chinese if (langIds.indexOf(languageId) != -1) { panel.addWidget("org.kde.plasma.kimpanel"); } panel.addWidget("org.kde.plasma.systemtray") panel.addWidget("org.kde.plasma.digitalclock") +panel.addWidget("org.kde.plasma.showdesktop")