This commit is contained in:
Valeria Fadeeva 2024-10-07 22:45:20 +05:00
parent 0cabedc7e4
commit 395fc82614
53 changed files with 2230 additions and 1877 deletions

View File

@ -6,6 +6,4 @@ DittoMenu plasmoid
[YooMoney](https://yoomoney.ru/to/4100115921160758)
[Qiwi](https://qiwi.com/n/VALERIAFADEEVA)
Etherium 0x981FBf878fe451BDB83BEaF68078394d4B13213f

View File

@ -1,231 +0,0 @@
/***************************************************************************
* Copyright (C) 2013 by Aurélien Gâteau <agateau@kde.org> *
* Copyright (C) 2013-2015 by Eike Hein <hein@kde.org> *
* *
* 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 . *
***************************************************************************/
.pragma library
function fillActionMenu(i18n, actionMenu, actionList, favoriteModel, favoriteId) {
// Accessing actionList can be a costly operation, so we don't
// access it until we need the menu.
var actions = createFavoriteActions(i18n, favoriteModel, favoriteId);
if (actions) {
if (actionList && actionList.length > 0) {
var separator = { "type": "separator" };
actionList.unshift(separator);
// actionList = actions.concat(actionList); // this crashes Qt O.o
actionList.unshift.apply(actionList, actions);
} else {
actionList = actions;
}
}
actionMenu.actionList = actionList;
}
function createFavoriteActions(i18n, favoriteModel, favoriteId) {
if (favoriteModel === null || !favoriteModel.enabled || favoriteId == null) {
return null;
}
if ("initForClient" in favoriteModel) {
var activities = favoriteModel.activities.runningActivities;
if (activities.length <= 1) {
var action = {};
if (favoriteModel.isFavorite(favoriteId)) {
action.text = i18n("Remove from Favorites");
action.icon = "list-remove";
action.actionId = "_kicker_favorite_remove";
} else if (favoriteModel.maxFavorites == -1 || favoriteModel.count < favoriteModel.maxFavorites) {
action.text = i18n("Add to Favorites");
action.icon = "bookmark-new";
action.actionId = "_kicker_favorite_add";
} else {
return null;
}
action.actionArgument = { favoriteModel: favoriteModel, favoriteId: favoriteId };
return [action];
} else {
var actions = [];
var linkedActivities = favoriteModel.linkedActivitiesFor(favoriteId);
// Adding the item to link/unlink to all activities
var linkedToAllActivities =
!(linkedActivities.indexOf(":global") === -1);
actions.push({
text : i18n("On All Activities"),
checkable : true,
actionId : linkedToAllActivities ?
"_kicker_favorite_remove_from_activity" :
"_kicker_favorite_set_to_activity",
checked : linkedToAllActivities,
actionArgument : {
favoriteModel: favoriteModel,
favoriteId: favoriteId,
favoriteActivity: ""
}
});
// Adding items for each activity separately
var addActivityItem = function(activityId, activityName) {
var linkedToThisActivity =
!(linkedActivities.indexOf(activityId) === -1);
actions.push({
text : activityName,
checkable : true,
checked : linkedToThisActivity && !linkedToAllActivities,
actionId :
// If we are on all activities, and the user clicks just one
// specific activity, unlink from everything else
linkedToAllActivities ? "_kicker_favorite_set_to_activity" :
// If we are linked to the current activity, just unlink from
// that single one
linkedToThisActivity ? "_kicker_favorite_remove_from_activity" :
// Otherwise, link to this activity, but do not unlink from
// other ones
"_kicker_favorite_add_to_activity",
actionArgument : {
favoriteModel : favoriteModel,
favoriteId : favoriteId,
favoriteActivity : activityId
}
});
};
// Adding the item to link/unlink to the current activity
addActivityItem(favoriteModel.activities.currentActivity, i18n("On The Current Activity"));
actions.push({
type: "separator",
actionId: "_kicker_favorite_separator"
});
// Adding the items for each activity
activities.forEach(function(activityId) {
addActivityItem(activityId, favoriteModel.activityNameForId(activityId));
});
return [{
text : i18n("Show In Favorites"),
icon : "favorite",
subActions : actions
}];
}
} else {
var action = {};
if (favoriteModel.isFavorite(favoriteId)) {
action.text = i18n("Remove from Favorites");
action.icon = "list-remove";
action.actionId = "_kicker_favorite_remove";
} else if (favoriteModel.maxFavorites == -1 || favoriteModel.count < favoriteModel.maxFavorites) {
action.text = i18n("Add to Favorites");
action.icon = "bookmark-new";
action.actionId = "_kicker_favorite_add";
} else {
return null;
}
action.actionArgument = { favoriteModel: favoriteModel, favoriteId: favoriteId };
return [action];
}
}
function triggerAction(plasmoid, model, index, actionId, actionArgument) {
function startsWith(txt, needle) {
return txt.substr(0, needle.length) === needle;
}
if (startsWith(actionId, "_kicker_favorite_")) {
handleFavoriteAction(actionId, actionArgument);
return;
}
var closeRequested = model.trigger(index, actionId, actionArgument);
if (closeRequested) {
plasmoid.expanded = false;
return true;
}
return false;
}
function handleFavoriteAction(actionId, actionArgument) {
var favoriteId = actionArgument.favoriteId;
var favoriteModel = actionArgument.favoriteModel;
console.log(actionId);
if (favoriteModel === null || favoriteId == null) {
return null;
}
if ("initForClient" in favoriteModel) {
if (actionId == "_kicker_favorite_remove") {
console.log("Removing from all activities");
favoriteModel.removeFavoriteFrom(favoriteId, ":any");
} else if (actionId == "_kicker_favorite_add") {
console.log("Adding to global activity");
favoriteModel.addFavoriteTo(favoriteId, ":global");
} else if (actionId == "_kicker_favorite_remove_from_activity") {
console.log("Removing from a specific activity");
favoriteModel.removeFavoriteFrom(favoriteId, actionArgument.favoriteActivity);
} else if (actionId == "_kicker_favorite_add_to_activity") {
console.log("Adding to another activity");
favoriteModel.addFavoriteTo(favoriteId, actionArgument.favoriteActivity);
} else if (actionId == "_kicker_favorite_set_to_activity") {
console.log("Removing the item from the favourites, and re-adding it just to be on a specific activity");
favoriteModel.setFavoriteOn(favoriteId, actionArgument.favoriteActivity);
}
} else {
if (actionId == "_kicker_favorite_remove") {
favoriteModel.removeFavorite(favoriteId);
} else if (actionId == "_kicker_favorite_add") {
favoriteModel.addFavorite(favoriteId);
}
}
}

View File

@ -1,212 +0,0 @@
/***************************************************************************
* Copyright (C) 2014 by Eike Hein <hein@kde.org> *
* *
* 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 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.4 as Kirigami
Kirigami.FormLayout {
id: configGeneral
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_switchCategoriesOnHover: switchCategoriesOnHover.checked
//property alias cfg_useExtraRunners: useExtraRunners.checked
property alias cfg_numberColumns: numberColumns.value
property alias cfg_numberRows: numberRows.value
property alias cfg_showFavoritesFirst: showFavoritesFirst.checked
property alias cfg_labels2lines: labels2lines.checked
property alias cfg_displayPosition: displayPosition.currentIndex
RowLayout {
spacing: PlasmaCore.Units.smallSpacing
Kirigami.FormData.label: i18n("Icon:")
Button {
id: iconButton
Layout.minimumWidth: previewFrame.width + PlasmaCore.Units.smallSpacing * 2
Layout.maximumWidth: Layout.minimumWidth
Layout.minimumHeight: previewFrame.height + PlasmaCore.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;
}
}
KQuickAddons.IconDialog {
id: iconDialog
function setCustomButtonImage(image) {
cfg_customButtonImage = image || cfg_icon || "start-here-kde"
cfg_useCustomButtonImage = true;
}
onIconNameChanged: setCustomButtonImage(iconName);
}
// 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;
})
iconMenu.open(0, height)
}
PlasmaCore.FrameSvgItem {
id: previewFrame
anchors.centerIn: parent
imagePath: plasmoid.location === PlasmaCore.Types.Vertical || plasmoid.location === PlasmaCore.Types.Horizontal
? "widgets/panel-background" : "widgets/background"
width: PlasmaCore.Units.iconSizes.large + fixedMargins.left + fixedMargins.right
height: PlasmaCore.Units.iconSizes.large + fixedMargins.top + fixedMargins.bottom
PlasmaCore.IconItem {
anchors.centerIn: parent
width: PlasmaCore.Units.iconSizes.large
height: width
source: cfg_useCustomButtonImage ? cfg_customButtonImage : cfg_icon
}
}
}
// QQC Menu can only be opened at cursor position, not a random one
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_useCustomButtonImage = false;
}
}
}
}
CheckBox {
id: showFavoritesFirst
Kirigami.FormData.label: i18n("Show favorites first")
}
ComboBox {
Kirigami.FormData.label: i18n("Menu position")
id: displayPosition
model: [
i18n("Default"),
i18n("Center"),
i18n("Center bottom"),
]
onActivated: cfg_displayPosition = currentIndex
}
CheckBox {
id: labels2lines
text: i18n("Show labels in two lines")
}
SpinBox{
id: numberColumns
minimumValue: 4
maximumValue: 10
Kirigami.FormData.label: i18n("Number of columns")
}
SpinBox{
id: numberRows
minimumValue: 1
maximumValue: 10
Kirigami.FormData.label: i18n("Number of rows")
}
RowLayout{
//Layout.fillWidth: true
Button {
text: i18n("Unhide all hidden applications")
onClicked: {
plasmoid.configuration.hiddenApplications = [""];
unhideAllAppsPopup.text = i18n("Unhidden!");
}
}
Label {
id: unhideAllAppsPopup
}
}
}

View File

@ -1,118 +0,0 @@
/***************************************************************************
* Copyright (C) 2015 by Eike Hein <hein@kde.org> *
* *
* 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 "../code/tools.js" as Tools
Item {
id: item
width: GridView.view.cellWidth
height: GridView.view.cellHeight
property bool showLabel: true
property int itemIndex: model.index
property string favoriteId: model.favoriteId !== undefined ? model.favoriteId : ""
property url url: model.url !== undefined ? model.url : ""
property variant icon: model.decoration !== undefined ? model.decoration : ""
property var m: model
property bool hasActionList: ((model.favoriteId !== null)
|| (("hasActionList" in model) && (model.hasActionList === true)))
Accessible.role: Accessible.MenuItem
Accessible.name: model.display
function openActionMenu(x, y) {
var actionList = hasActionList ? model.actionList : [];
Tools.fillActionMenu(i18n, actionMenu, actionList, GridView.view.model.favoritesModel, model.favoriteId);
actionMenu.visualParent = item;
actionMenu.open(x, y);
}
function actionTriggered(actionId, actionArgument) {
var close = (Tools.triggerAction(plasmoid, GridView.view.model, model.index, actionId, actionArgument) === true);
if (close) root.toggle();
}
Item{
height: iconSize + PlasmaCore.Units.gridUnit * 2 + PlasmaCore.Units.smallSpacing
width: parent.width
anchors.centerIn: parent
PlasmaCore.IconItem {
id: icon
anchors{
top: parent.top
horizontalCenter: parent.horizontalCenter
}
width: root.iconSize
height: width
colorGroup: PlasmaCore.Theme.ComplementaryColorGroup
animated: false
usesPlasmaTheme: item.GridView.view.usesPlasmaTheme
source: model.decoration
}
PlasmaComponents.Label {
id: label
visible: showLabel
anchors {
top: icon.bottom
topMargin: PlasmaCore.Units.smallSpacing
horizontalCenter: parent.horizontalCenter
}
maximumLineCount: plasmoid.configuration.labels2lines ? 2 : 1
horizontalAlignment: Text.AlignHCenter
width: parent.width - PlasmaCore.Units.largeSpacing
height: PlasmaCore.Units.gridUnit * 2
elide: Text.ElideRight
wrapMode: Text.Wrap
color: theme.textColor
text: ("name" in model ? model.name : model.display)
}
}
PlasmaCore.ToolTipArea {
id: toolTip
property string text: model.display
anchors.fill: parent
active: root.visible && label.truncated
mainItem: toolTipDelegate
onContainsMouseChanged: item.GridView.view.itemContainsMouseChanged(containsMouse)
}
Keys.onPressed: {
if (event.key === Qt.Key_Menu && hasActionList) {
event.accepted = true;
openActionMenu(item);
} else if ((event.key === Qt.Key_Enter || event.key === Qt.Key_Return)) {
event.accepted = true;
if ("trigger" in GridView.view.model) {
GridView.view.model.trigger(index, "", null);
root.toggle();
}
itemGrid.itemActivated(index, "", null);
}
}
}

View File

@ -1,485 +0,0 @@
/***************************************************************************
* Copyright (C) 2015 by Eike Hein <hein@kde.org> *
* *
* 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 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.draganddrop 2.0
import QtQuick.Controls 2.12
FocusScope {
id: itemGrid
signal keyNavLeft
signal keyNavRight
signal keyNavUp
signal keyNavDown
signal itemActivated(int index, string actionId, string argument)
property bool dragEnabled: false
property bool dropEnabled: false
property bool showLabels: true
property alias usesPlasmaTheme: gridView.usesPlasmaTheme
property alias currentIndex: gridView.currentIndex
property alias currentItem: gridView.currentItem
property alias contentItem: gridView.contentItem
property alias count: gridView.count
property alias model: gridView.model
property alias cellWidth: gridView.cellWidth
property alias cellHeight: gridView.cellHeight
property alias iconSize: gridView.iconSize
property alias scrollBar: scrollArea
//<>property alias horizontalScrollBarPolicy: scrollArea.horizontalScrollBarPolicy
//<>property alias verticalScrollBarPolicy: scrollArea.verticalScrollBarPolicy
onDropEnabledChanged: {
if (!dropEnabled && "dropPlaceHolderIndex" in model) {
model.dropPlaceHolderIndex = -1;
}
}
onFocusChanged: {
if (!focus) {
currentIndex = -1;
}
}
function currentRow() {
if (currentIndex == -1) {
return -1;
}
return Math.floor(currentIndex / Math.floor(width / itemGrid.cellWidth));
}
function currentCol() {
if (currentIndex == -1) {
return -1;
}
return currentIndex - (currentRow() * Math.floor(width / itemGrid.cellWidth));
}
function lastRow() {
var columns = Math.floor(width / itemGrid.cellWidth);
return Math.ceil(count / columns) - 1;
}
function tryActivate(row, col) {
if (count) {
var columns = Math.floor(width / itemGrid.cellWidth);
var rows = Math.ceil(count / columns);
row = Math.min(row, rows - 1);
col = Math.min(col, columns - 1);
currentIndex = Math.min(row ? ((Math.max(1, row) * columns) + col)
: col,
count - 1);
focus = true;
}
}
function forceLayout() {
gridView.forceLayout();
}
ActionMenu {
id: actionMenu
onActionClicked: {
visualParent.actionTriggered(actionId, actionArgument);
}
}
DropArea {
id: dropArea
anchors.fill: parent
onDragMove: {
if (!itemGrid.dropEnabled || gridView.animating || !kicker.dragSource) {
return;
}
var x = Math.max(0, event.x - (width % itemGrid.cellWidth));
var cPos = mapToItem(gridView.contentItem, x, event.y);
var item = gridView.itemAt(cPos.x, cPos.y);
if (item) {
if (kicker.dragSource.parent === gridView.contentItem) {
if (item !== kicker.dragSource) {
item.GridView.view.model.moveRow(dragSource.itemIndex, item.itemIndex);
}
} else if (kicker.dragSource.GridView.view.model.favoritesModel === itemGrid.model
&& !itemGrid.model.isFavorite(kicker.dragSource.favoriteId)) {
var hasPlaceholder = (itemGrid.model.dropPlaceholderIndex !== -1);
itemGrid.model.dropPlaceholderIndex = item.itemIndex;
if (!hasPlaceholder) {
gridView.currentIndex = (item.itemIndex - 1);
}
}
} else if (kicker.dragSource.parent !== gridView.contentItem
&& kicker.dragSource.GridView.view.model.favoritesModel === itemGrid.model
&& !itemGrid.model.isFavorite(kicker.dragSource.favoriteId)) {
var hasPlaceholder = (itemGrid.model.dropPlaceholderIndex !== -1);
itemGrid.model.dropPlaceholderIndex = hasPlaceholder ? itemGrid.model.count - 1 : itemGrid.model.count;
if (!hasPlaceholder) {
gridView.currentIndex = (itemGrid.model.count - 1);
}
} else {
itemGrid.model.dropPlaceholderIndex = -1;
gridView.currentIndex = -1;
}
}
onDragLeave: {
if ("dropPlaceholderIndex" in itemGrid.model) {
itemGrid.model.dropPlaceholderIndex = -1;
gridView.currentIndex = -1;
}
}
onDrop: {
if (kicker.dragSource && kicker.dragSource.parent !== gridView.contentItem && kicker.dragSource.GridView.view.model.favoritesModel === itemGrid.model) {
itemGrid.model.addFavorite(kicker.dragSource.favoriteId, itemGrid.model.dropPlaceholderIndex);
gridView.currentIndex = -1;
}
}
Timer {
id: resetAnimationDurationTimer
interval: 120
repeat: false
onTriggered: {
gridView.animationDuration = interval - 20;
}
}
//PlasmaExtras.ScrollArea
Flickable{
id: scrollArea
clip: true
anchors.fill: parent
boundsBehavior: Flickable.StopAtBounds
interactive: false
focus: true
GridView {
id: gridView
width: itemGrid.width
height: itemGrid.height
signal itemContainsMouseChanged(bool containsMouse)
property bool usesPlasmaTheme: false
property int iconSize: PlasmaCore.Units.iconSizes.huge
property bool animating: false
property int animationDuration: itemGrid.dropEnabled ? resetAnimationDurationTimer.interval : 0
focus: true
snapMode: GridView.SnapToRow
ScrollBar.vertical: ScrollBar {
visible: true
active: true
policy: ScrollBar.AlwaysOn;
}
currentIndex: -1
move: Transition {
enabled: itemGrid.dropEnabled
SequentialAnimation {
PropertyAction { target: gridView; property: "animating"; value: true }
NumberAnimation {
duration: gridView.animationDuration
properties: "x, y"
easing.type: Easing.OutQuad
}
PropertyAction { target: gridView; property: "animating"; value: false }
}
}
moveDisplaced: Transition {
enabled: itemGrid.dropEnabled
SequentialAnimation {
PropertyAction { target: gridView; property: "animating"; value: true }
NumberAnimation {
duration: gridView.animationDuration
properties: "x, y"
easing.type: Easing.OutQuad
}
PropertyAction { target: gridView; property: "animating"; value: false }
}
}
keyNavigationWraps: false
boundsBehavior: Flickable.StopAtBounds
delegate: ItemGridDelegate {
showLabel: itemGrid.showLabels
}
highlight: Item {
property bool isDropPlaceHolder: "dropPlaceholderIndex" in itemGrid.model && itemGrid.currentIndex === itemGrid.model.dropPlaceholderIndex
PlasmaComponents.Highlight {
visible: gridView.currentItem && !isDropPlaceHolder
anchors.fill: parent
}
PlasmaCore.FrameSvgItem {
visible: gridView.currentItem && isDropPlaceHolder
anchors.fill: parent
imagePath: "widgets/viewitem"
prefix: "selected"
opacity: 0.5
PlasmaCore.IconItem {
anchors {
right: parent.right
rightMargin: parent.margins.right
bottom: parent.bottom
bottomMargin: parent.margins.bottom
}
width: PlasmaCore.Units.iconSizes.smallMedium
height: width
source: "list-add"
active: false
}
}
}
highlightFollowsCurrentItem: true
highlightMoveDuration: 0
onCurrentIndexChanged: {
if (currentIndex != -1) {
hoverArea.hoverEnabled = false
focus = true;
}
}
onCountChanged: {
animationDuration = 0;
resetAnimationDurationTimer.start();
}
onModelChanged: {
currentIndex = -1;
}
Keys.onLeftPressed: {
if (itemGrid.currentCol() !== 0) {
event.accepted = true;
moveCurrentIndexLeft();
} else {
itemGrid.keyNavLeft();
}
}
Keys.onRightPressed: {
var columns = Math.floor(width / cellWidth);
if (itemGrid.currentCol() !== columns - 1 && currentIndex != count -1) {
event.accepted = true;
moveCurrentIndexRight();
} else {
itemGrid.keyNavRight();
}
}
Keys.onUpPressed: {
if (itemGrid.currentRow() !== 0) {
event.accepted = true;
moveCurrentIndexUp();
positionViewAtIndex(currentIndex, GridView.Contain);
} else {
itemGrid.keyNavUp();
}
}
Keys.onDownPressed: {
if (itemGrid.currentRow() < itemGrid.lastRow()) {
// Fix moveCurrentIndexDown()'s lack of proper spatial nav down
// into partial columns.
event.accepted = true;
var columns = Math.floor(width / cellWidth);
var newIndex = currentIndex + columns;
currentIndex = Math.min(newIndex, count - 1);
positionViewAtIndex(currentIndex, GridView.Contain);
} else {
itemGrid.keyNavDown();
}
}
onItemContainsMouseChanged: {
if (!containsMouse) {
if (!actionMenu.opened) {
gridView.currentIndex = -1;
}
hoverArea.pressX = -1;
hoverArea.pressY = -1;
hoverArea.lastX = -1;
hoverArea.lastY = -1;
hoverArea.pressedItem = null;
hoverArea.hoverEnabled = true;
}
}
}
}
MouseArea {
id: hoverArea
//anchors.fill: parent
width: itemGrid.width - PlasmaCore.Units.largeSpacing
height: itemGrid.height
property int pressX: -1
property int pressY: -1
property int lastX: -1
property int lastY: -1
property Item pressedItem: null
acceptedButtons: Qt.LeftButton | Qt.RightButton
hoverEnabled: true
function updatePositionProperties(x, y) {
// Prevent hover event synthesis in QQuickWindow interfering
// with keyboard navigation by ignoring repeated events with
// identical coordinates. As the work done here would be re-
// dundant in any case, these are safe to ignore.
if (lastX === x && lastY === y) {
return;
}
lastX = x;
lastY = y;
var cPos = mapToItem(gridView.contentItem, x, y);
var item = gridView.itemAt(cPos.x, cPos.y);
if (!item) {
gridView.currentIndex = -1;
pressedItem = null;
} else {
gridView.currentIndex = item.itemIndex;
itemGrid.focus = (itemGrid.currentIndex != -1)
}
return item;
}
onPressed: mouse => {
mouse.accepted = true;
updatePositionProperties(mouse.x, mouse.y);
pressX = mouse.x;
pressY = mouse.y;
if (mouse.button == Qt.RightButton) {
if (gridView.currentItem) {
if (gridView.currentItem.hasActionList) {
var mapped = mapToItem(gridView.currentItem, mouse.x, mouse.y);
gridView.currentItem.openActionMenu(mapped.x, mapped.y);
}
} else {
var mapped = mapToItem(rootItem, mouse.x, mouse.y);
contextMenu.open(mapped.x, mapped.y);
}
} else {
pressedItem = gridView.currentItem;
}
}
onReleased: mouse => {
mouse.accepted = true;
updatePositionProperties(mouse.x, mouse.y);
if (gridView.currentItem && gridView.currentItem == pressedItem) {
if ("trigger" in gridView.model) {
gridView.model.trigger(pressedItem.itemIndex, "", null);
root.toggle();
}
itemGrid.itemActivated(pressedItem.itemIndex, "", null);
} else if (!dragHelper.dragging && !pressedItem && mouse.button == Qt.LeftButton) {
root.toggle();
}
pressX = -1;
pressY = -1;
pressedItem = null;
}
onPositionChanged: mouse => {
var item = pressedItem? pressedItem : updatePositionProperties(mouse.x, mouse.y);
if (gridView.currentIndex != -1) {
if (itemGrid.dragEnabled && pressX != -1 && dragHelper.isDrag(pressX, pressY, mouse.x, mouse.y)) {
if ("pluginName" in item.m) {
dragHelper.startDrag(kicker, item.url, item.icon,
"text/x-plasmoidservicename", item.m.pluginName);
} else {
dragHelper.startDrag(kicker, item.url, item.icon);
}
kicker.dragSource = item;
pressX = -1;
pressY = -1;
}
}
}
}
}
}

View File

@ -1,210 +0,0 @@
/***************************************************************************
* Copyright (C) 2015 by Eike Hein <hein@kde.org> *
* *
* 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 org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.private.kicker 0.1 as Kicker
PlasmaExtras.ScrollArea {
id: itemMultiGrid
//anchors {
// top: parent.top
//}
anchors.fill: parent
//width: parent.width
implicitHeight: itemColumn.implicitHeight
signal keyNavLeft(int subGridIndex)
signal keyNavRight(int subGridIndex)
signal keyNavUp()
signal keyNavDown()
property bool grabFocus: false
property alias model: repeater.model
property alias count: repeater.count
property int aCellHeight
property int aCellWidth
verticalScrollBarPolicy: Qt.ScrollBarAsNeeded
horizontalScrollBarPolicy: Qt.ScrollBarAlwaysOff
flickableItem.flickableDirection: Flickable.VerticalFlick
onFocusChanged: {
if (!focus) {
for (var i = 0; i < repeater.count; i++) {
subGridAt(i).focus = false;
}
}
}
function subGridAt(index) {
return repeater.itemAt(index).itemGrid;
}
function tryActivate(row, col) { // FIXME TODO: Cleanup messy algo.
if (flickableItem.contentY > 0) {
row = 0;
}
var target = null;
var rows = 0;
for (var i = 0; i < repeater.count; i++) {
var grid = subGridAt(i);
if (rows <= row) {
target = grid;
rows += grid.lastRow() + 2; // Header counts as one.
} else {
break;
}
}
if (target) {
rows -= (target.lastRow() + 2);
target.tryActivate(row - rows, col);
}
}
Column {
id: itemColumn
width: itemMultiGrid.width //- PlasmaCore.Units.gridUnit
Repeater {
id: repeater
delegate: Item {
width: itemColumn.width
//height: gridViewLabel.height + gridView.height + (index == repeater.count - 1 ? 0 : PlasmaCore.Units.smallSpacing)
height: gridView.height
//visible: gridView.count > 0
property Item itemGrid: gridView
MouseArea {
width: parent.width
height: parent.height
onClicked: root.toggle()
}
ItemGridView {
id: gridView
anchors {
top: parent.top
}
width: parent.width
height: Math.ceil(count / plasmoid.configuration.numberColumns) * root.cellSize
cellWidth: root.cellSize
cellHeight: root.cellSize
iconSize: root.iconSize
//<> verticalScrollBarPolicy: Qt.ScrollBarAlwaysOff
model: repeater.model.modelForRow(index)
onFocusChanged: {
if (focus) {
itemMultiGrid.focus = true;
}
}
onCountChanged: {
if (itemMultiGrid.grabFocus && index == 0 && count > 0) {
currentIndex = 0;
focus = true;
}
}
onCurrentItemChanged: {
if (!currentItem) {
return;
}
if (index == 0 && currentRow() === 0) {
itemMultiGrid.flickableItem.contentY = 0;
return;
}
var y = currentItem.y;
y = contentItem.mapToItem(itemMultiGrid.flickableItem.contentItem, 0, y).y;
if (y < itemMultiGrid.flickableItem.contentY) {
itemMultiGrid.flickableItem.contentY = y;
} else {
y += root.cellSize;
y -= itemMultiGrid.flickableItem.contentY;
y -= itemMultiGrid.viewport.height;
if (y > 0) {
itemMultiGrid.flickableItem.contentY += y;
}
}
}
onKeyNavLeft: {
itemMultiGrid.keyNavLeft(index);
}
onKeyNavRight: {
itemMultiGrid.keyNavRight(index);
}
onKeyNavUp: {
if (index > 0) {
var prevGrid = subGridAt(index - 1);
prevGrid.tryActivate(prevGrid.lastRow(), currentCol());
} else {
itemMultiGrid.keyNavUp();
}
}
onKeyNavDown: {
if (index < repeater.count - 1) {
subGridAt(index + 1).tryActivate(0, currentCol());
} else {
itemMultiGrid.keyNavDown();
}
}
}
// HACK: Steal wheel events from the nested grid view and forward them to
// the ScrollView's internal WheelArea.
Kicker.WheelInterceptor {
anchors.fill: gridView
z: 1
destination: findWheelArea(itemMultiGrid.flickableItem)
}
}
}
}
}

View File

@ -1,29 +0,0 @@
{
"KPlugin": {
"Authors": [
{
"Email": "adhemarks@gmail.com",
"Name": "adhe"
}
],
"Category": "Application Launchers",
"Description": "A configurable launcher menu",
"Description[x-test]": "xxA configurable launcher menuxx",
"EnabledByDefault": true,
"Icon": "start-here-kde",
"Id": "com.github.adhec.DittoMenu",
"License": "GPL-2.0+",
"Name": "Ditto Menu",
"Name[x-test]": "xxDitto Menuxx",
"ServiceTypes": [
"Plasma/Applet"
],
"Version": "0.30",
"Website": ""
},
"X-Plasma-API": "declarativeappletscript",
"X-Plasma-MainScript": "ui/main.qml",
"X-Plasma-Provides": [
"org.kde.plasma.launchermenu"
]
}

View File

@ -6,14 +6,13 @@
<kcfgfile name=""/>
<group name="General">
<entry name="appsIconSize" type="Enum">
<default>0</default>
</entry>
<entry name="displayPosition" type="Enum">
<label>Position.</label>
<choices name="Settings::displayPosition">
<choice name="Default" />
<choice name="Center" />
<choice name="CenterBottom" />
</choices>
<default>2</default>
<label>Position.</label>
<default>0</default>
</entry>
<entry name="icon" type="String">
@ -38,7 +37,7 @@
</entry>
<entry name="numberColumns" type="Int">
<default>7</default>
<default>6</default>
</entry>
<entry name="numberRows" type="Int">
@ -49,7 +48,8 @@
<default>org.kde.dolphin.desktop,systemsettings.desktop,org.manjaro.pamac.manager.desktop,ar.com.softwareperonista.Pace.desktop,melawy-welcome.desktop,firefoxdeveloperedition.desktop,firefox.desktop,org.kde.kate.desktop,skypeforlinux.desktop,org.telegram.desktop.desktop,discord.desktop,Zoom.desktop,brave-browser.desktop,google-chrome.desktop,gimp.desktop,org.inkscape.Inkscape.desktop,com.obsproject.Studio.desktop,code.desktop,org.kde.kleopatra.desktop,org.kde.konsole.desktop,org.kde.kcalc.desktop,blender.desktop,gparted.desktop,org.kde.partitionmanager.desktop,org.kde.kinfocenter.desktop</default>
</entry>
<entry name="favoriteSystemActions" type="StringList">
<default>logout,lock-screen,reboot,shutdown</default>
<label>List of system action favorites.</label>
<default>logout,lock-screen,reboot,shutdown</default>
</entry>
<entry name="hiddenApplications" type="StringList">
<default></default>
@ -86,8 +86,9 @@
<default>true</default>
</entry>
<entry name="viewUser" type="Bool">
<entry name="showInfoUser" type="Bool">
<default>true</default>
</entry>
</group>
</kcfg>

View File

@ -1,26 +1,13 @@
/***************************************************************************
* Copyright (C) 2013 by Aurélien Gâteau <agateau@kde.org> *
* Copyright (C) 2014-2015 by Eike Hein <hein@kde.org> *
* *
* 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 . *
***************************************************************************/
/*
SPDX-FileCopyrightText: 2013 Aurélien Gâteau <agateau@kde.org>
SPDX-FileCopyrightText: 2014-2015 Eike Hein <hein@kde.org>
import QtQuick 2.0
SPDX-License-Identifier: GPL-2.0-or-later
*/
import org.kde.plasma.components 2.0 as PlasmaComponents
import QtQuick 2.15
import org.kde.plasma.extras 2.0 as PlasmaExtras
Item {
id: root
@ -28,7 +15,7 @@ Item {
property QtObject menu
property Item visualParent
property variant actionList
property bool opened: menu ? (menu.status != PlasmaComponents.DialogStatus.Closed) : false
property bool opened: menu ? (menu.status !== PlasmaExtras.Menu.Closed) : false
signal actionClicked(string actionId, variant actionArgument)
signal closed
@ -91,7 +78,7 @@ Item {
Component {
id: contextMenuComponent
PlasmaComponents.ContextMenu {
PlasmaExtras.Menu {
visualParent: root.visualParent
}
}
@ -99,7 +86,7 @@ Item {
Component {
id: contextSubmenuItemComponent
PlasmaComponents.MenuItem {
PlasmaExtras.MenuItem {
id: submenuItem
property variant actionItem
@ -107,10 +94,7 @@ Item {
text: actionItem.text ? actionItem.text : ""
icon: actionItem.icon ? actionItem.icon : null
property variant submenu : submenu_
PlasmaComponents.ContextMenu {
id: submenu_
property PlasmaExtras.Menu submenu: PlasmaExtras.Menu {
visualParent: submenuItem.action
}
}
@ -119,19 +103,19 @@ Item {
Component {
id: contextMenuItemComponent
PlasmaComponents.MenuItem {
PlasmaExtras.MenuItem {
property variant actionItem
text : actionItem.text ? actionItem.text : ""
enabled : actionItem.type != "title" && ("enabled" in actionItem ? actionItem.enabled : true)
separator : actionItem.type == "separator"
section : actionItem.type == "title"
enabled : actionItem.type !== "title" && ("enabled" in actionItem ? actionItem.enabled : true)
separator : actionItem.type === "separator"
section : actionItem.type === "title"
icon : actionItem.icon ? actionItem.icon : null
checkable : actionItem.checkable ? actionItem.checkable : false
checked : actionItem.checked ? actionItem.checked : false
onClicked: {
actionClicked(actionItem.actionId, actionItem.actionArgument);
root.actionClicked(actionItem.actionId, actionItem.actionArgument);
}
}
}

View File

@ -20,8 +20,9 @@
import QtQuick 2.0
import QtQuick.Layouts 1.1
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.plasmoid
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.kirigami as Kirigami
Item {
id: root
@ -32,62 +33,18 @@ Item {
|| plasmoid.location == PlasmaCore.Types.BottomEdge
|| plasmoid.location == PlasmaCore.Types.LeftEdge)
readonly property bool vertical: (plasmoid.formFactor == PlasmaCore.Types.Vertical)
readonly property bool useCustomButtonImage: (plasmoid.configuration.useCustomButtonImage
&& plasmoid.configuration.customButtonImage.length != 0)
readonly property bool useCustomButtonImage: (Plasmoid.configuration.useCustomButtonImage
&& Plasmoid.configuration.customButtonImage.length != 0)
property QtObject dashWindow: null
Plasmoid.status: dashWindow && dashWindow.visible ? PlasmaCore.Types.RequiresAttentionStatus : PlasmaCore.Types.PassiveStatus
onWidthChanged: updateSizeHints()
onHeightChanged: updateSizeHints()
function updateSizeHints() {
if (useCustomButtonImage) {
if (vertical) {
var scaledHeight = Math.floor(parent.width * (buttonIcon.implicitHeight / buttonIcon.implicitWidth));
root.Layout.minimumHeight = scaledHeight;
root.Layout.maximumHeight = scaledHeight;
root.Layout.minimumWidth = PlasmaCore.Units.iconSizes.small;
root.Layout.maximumWidth = inPanel ? PlasmaCore.Units.iconSizeHints.panel : -1;
} else {
var scaledWidth = Math.floor(parent.height * (buttonIcon.implicitWidth / buttonIcon.implicitHeight));
root.Layout.minimumWidth = scaledWidth;
root.Layout.maximumWidth = scaledWidth;
root.Layout.minimumHeight = PlasmaCore.Units.iconSizes.small;
root.Layout.maximumHeight = inPanel ? PlasmaCore.Units.iconSizeHints.panel : -1;
}
} else {
root.Layout.minimumWidth = PlasmaCore.Units.iconSizes.small;
root.Layout.maximumWidth = inPanel ? PlasmaCore.Units.iconSizeHints.panel : -1;
root.Layout.minimumHeight = PlasmaCore.Units.iconSizes.small
root.Layout.maximumHeight = inPanel ? PlasmaCore.Units.iconSizeHints.panel : -1;
}
}
Connections {
target: PlasmaCore.Units.iconSizeHints
function onPanelChanged(){ updateSizeHints()}
}
PlasmaCore.IconItem {
Kirigami.Icon {
id: buttonIcon
anchors.fill: parent
readonly property double aspectRatio: (vertical ? implicitHeight / implicitWidth
: implicitWidth / implicitHeight)
source: useCustomButtonImage ? plasmoid.configuration.customButtonImage : plasmoid.configuration.icon
source: useCustomButtonImage ? Plasmoid.configuration.customButtonImage : Plasmoid.configuration.icon
active: mouseArea.containsMouse
smooth: true
// A custom icon could also be rectangular. However, if a square, custom, icon is given, assume it
// to be an icon and round it to the nearest icon size again to avoid scaling artefacts.
roundToIconSize: !useCustomButtonImage || aspectRatio === 1
onSourceChanged: updateSizeHints()
}
MouseArea

View File

@ -0,0 +1,233 @@
/***************************************************************************
* Copyright (C) 2014 by Eike Hein <hein@kde.org> *
* *
* 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.15
//import QtQuick.Controls 2.15
//import QtQuick.Dialogs 1.2
//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.kquickcontrolsaddons 2.0 as KQuickAddons
//import org.kde.draganddrop 2.0 as DragDrop
//import org.kde.kirigami 2.4 as Kirigami
import QtQuick 2.15
import QtQuick.Layouts 1.0
import QtQuick.Controls 2.15
import org.kde.draganddrop 2.0 as DragDrop
import org.kde.kirigami 2.5 as Kirigami
import org.kde.iconthemes as KIconThemes
import org.kde.plasma.core as PlasmaCore
import org.kde.kirigami 2.20 as Kirigami
import org.kde.ksvg 1.0 as KSvg
import org.kde.plasma.plasmoid 2.0
import org.kde.kcmutils as KCM
KCM.SimpleKCM {
id: configGeneral
property string cfg_icon: plasmoid.configuration.icon
property bool cfg_useCustomButtonImage: plasmoid.configuration.useCustomButtonImage
property string cfg_customButtonImage: plasmoid.configuration.customButtonImage
property alias cfg_numberColumns: numberColumns.value
property alias cfg_numberRows: numberRows.value
property alias cfg_showFavoritesFirst: showFavoritesFirst.checked
property alias cfg_labels2lines: labels2lines.checked
property alias cfg_displayPosition: displayPosition.currentIndex
property alias cfg_appsIconSize: appsIconSize.currentIndex
property alias cfg_showInfoUser: showInfoUser.checked
Kirigami.FormLayout {
anchors.left: parent.left
anchors.right: parent.right
Button {
id: iconButton
Kirigami.FormData.label: i18n("Icon:")
implicitWidth: previewFrame.width + Kirigami.Units.smallSpacing * 2
implicitHeight: previewFrame.height + Kirigami.Units.smallSpacing * 2
// Just to provide some visual feedback when dragging;
// cannot have checked without checkable enabled
checkable: true
checked: dropArea.containsAcceptableDrag
onPressed: iconMenu.opened ? iconMenu.close() : iconMenu.open()
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;
}
}
KIconThemes.IconDialog {
id: iconDialog
function setCustomButtonImage(image) {
configGeneral.cfg_customButtonImage = image || configGeneral.cfg_icon || "start-here-kde-symbolic"
configGeneral.cfg_useCustomButtonImage = true;
}
onIconNameChanged: setCustomButtonImage(iconName);
}
KSvg.FrameSvgItem {
id: previewFrame
anchors.centerIn: parent
imagePath: Plasmoid.location === PlasmaCore.Types.Vertical || Plasmoid.location === PlasmaCore.Types.Horizontal
? "widgets/panel-background" : "widgets/background"
width: Kirigami.Units.iconSizes.large + fixedMargins.left + fixedMargins.right
height: Kirigami.Units.iconSizes.large + fixedMargins.top + fixedMargins.bottom
Kirigami.Icon {
anchors.centerIn: parent
width: Kirigami.Units.iconSizes.large
height: width
source: configGeneral.cfg_useCustomButtonImage ? configGeneral.cfg_customButtonImage : configGeneral.cfg_icon
}
}
Menu {
id: iconMenu
// Appear below the button
y: +parent.height
onClosed: iconButton.checked = false;
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: {
configGeneral.cfg_icon = "start-here-kde-symbolic"
configGeneral.cfg_useCustomButtonImage = false
}
}
}
}
Item {
Kirigami.FormData.isSection: true
}
ComboBox {
id: appsIconSize
Kirigami.FormData.label: i18n("Icon size:")
Layout.fillWidth: true
model: [i18n("Small"),i18n("Medium"),i18n("Large"), i18n("Huge")]
}
CheckBox {
id: showFavoritesFirst
Kirigami.FormData.label: i18n("Show favorites first")
}
ComboBox {
Kirigami.FormData.label: i18n("Menu position")
id: displayPosition
model: [
i18n("Default"),
i18n("Center"),
i18n("Center bottom"),
]
}
CheckBox {
id: labels2lines
text: i18n("Show labels in two lines")
visible: false // TODO
}
SpinBox{
id: numberColumns
from: 3
to: 15
Kirigami.FormData.label: i18n("Number of columns")
}
SpinBox{
id: numberRows
from: 1
to: 15
Kirigami.FormData.label: i18n("Number of rows")
}
CheckBox {
id: showInfoUser
Kirigami.FormData.label: i18n("Show user")
}
RowLayout{
visible: false
Button {
text: i18n("Unhide all hidden applications")
onClicked: {
plasmoid.configuration.hiddenApplications = [""];
unhideAllAppsPopup.text = i18n("Unhidden!");
}
}
Label {
id: unhideAllAppsPopup
}
}
}
}

View File

@ -0,0 +1,121 @@
/*
SPDX-FileCopyrightText: 2015 Eike Hein <hein@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
import QtQuick 2.15
import org.kde.plasma.components 3.0 as PlasmaComponents3
import org.kde.plasma.core as PlasmaCore
import org.kde.kirigami 2.20 as Kirigami
import "code/tools.js" as Tools
Item {
id: item
width: GridView.view.cellWidth
height: GridView.view.cellHeight
enabled: !model.disabled
property bool showLabel: true
property int itemIndex: model.index
property string favoriteId: model.favoriteId !== undefined ? model.favoriteId : ""
property url url: model.url !== undefined ? model.url : ""
property variant icon: model.decoration !== undefined ? model.decoration : ""
property var m: model
property bool hasActionList: ((model.favoriteId !== null)
|| (("hasActionList" in model) && (model.hasActionList === true)))
Accessible.role: Accessible.MenuItem
Accessible.name: model.display
function openActionMenu(x, y) {
var actionList = hasActionList ? model.actionList : [];
Tools.fillActionMenu(i18n, actionMenu, actionList, GridView.view.model.favoritesModel, model.favoriteId);
actionMenu.visualParent = item;
actionMenu.open(x, y);
}
function actionTriggered(actionId, actionArgument) {
var close = (Tools.triggerAction(GridView.view.model, model.index, actionId, actionArgument) === true);
if (close) {
root.toggle();
}
}
Kirigami.Icon {
id: icon
y: item.showLabel ? (2 * highlightItemSvg.margins.top) : undefined
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: item.showLabel ? undefined : parent.verticalCenter
width: iconSize
height: width
animated: false
source: model.decoration
}
PlasmaComponents3.Label {
id: label
visible: item.showLabel
anchors {
top: icon.bottom
topMargin: Kirigami.Units.smallSpacing
left: parent.left
leftMargin: highlightItemSvg.margins.left
right: parent.right
rightMargin: highlightItemSvg.margins.right
}
horizontalAlignment: Text.AlignHCenter
maximumLineCount: 2
elide: Text.ElideMiddle
wrapMode: Text.Wrap
color: Kirigami.Theme.textColor
font.pointSize: Kirigami.Theme.defaultFont.pointSize + 0.5
text: ("name" in model ? model.name : model.display)
textFormat: Text.PlainText
}
PlasmaCore.ToolTipArea {
id: toolTip
property string text: model.display
anchors.fill: parent
active: root.visible && label.truncated
mainItem: toolTipDelegate
onContainsMouseChanged: item.GridView.view.itemContainsMouseChanged(containsMouse)
}
Keys.onPressed: event => {
if (event.key === Qt.Key_Menu && hasActionList) {
event.accepted = true;
openActionMenu(item);
} else if ((event.key === Qt.Key_Enter || event.key === Qt.Key_Return)) {
event.accepted = true;
if ("trigger" in GridView.view.model) {
GridView.view.model.trigger(index, "", null);
root.toggle();
}
itemGrid.itemActivated(index, "", null);
}
}
}

View File

@ -0,0 +1,469 @@
/*
SPDX-FileCopyrightText: 2015 Eike Hein <hein@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
import QtQuick 2.15
import org.kde.kquickcontrolsaddons 2.0
import org.kde.ksvg 1.0 as KSvg
import org.kde.plasma.components as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.kirigami 2.20 as Kirigami
FocusScope {
id: itemGrid
signal keyNavLeft
signal keyNavRight
signal keyNavUp
signal keyNavDown
signal itemActivated(int index, string actionId, string argument)
property bool dragEnabled: true
property bool dropEnabled: false
property bool showLabels: true
property alias currentIndex: gridView.currentIndex
property alias currentItem: gridView.currentItem
property alias contentItem: gridView.contentItem
property alias count: gridView.count
property alias model: gridView.model
property alias cellWidth: gridView.cellWidth
property alias cellHeight: gridView.cellHeight
property alias iconSize: gridView.iconSize
property var horizontalScrollBarPolicy: PlasmaComponents.ScrollBar.AlwaysOff
property var verticalScrollBarPolicy: PlasmaComponents.ScrollBar.AlwaysOn
onDropEnabledChanged: {
if (!dropEnabled && "dropPlaceHolderIndex" in model) {
model.dropPlaceHolderIndex = -1;
}
}
onFocusChanged: {
//if (!focus && !root.keyEventProxy.activeFocus) {
if (!focus) {
currentIndex = -1;
}
}
function currentRow() {
if (currentIndex === -1) {
return -1;
}
return Math.floor(currentIndex / Math.floor(width / itemGrid.cellWidth));
}
function currentCol() {
if (currentIndex === -1) {
return -1;
}
return currentIndex - (currentRow() * Math.floor(width / itemGrid.cellWidth));
}
function lastRow() {
var columns = Math.floor(width / itemGrid.cellWidth);
return Math.ceil(count / columns) - 1;
}
function tryActivate(row, col) {
if (count) {
var columns = Math.floor(width / itemGrid.cellWidth);
var rows = Math.ceil(count / columns);
row = Math.min(row, rows - 1);
col = Math.min(col, columns - 1);
currentIndex = Math.min(row ? ((Math.max(1, row) * columns) + col)
: col,
count - 1);
focus = true;
}
}
function forceLayout() {
gridView.forceLayout();
}
ActionMenu {
id: actionMenu
onActionClicked: {
visualParent.actionTriggered(actionId, actionArgument);
}
}
DropArea {
id: dropArea
//Rectangle {
//color: "red"
// anchors.fill: parent
//}
anchors.fill: parent
onPositionChanged: event => {
if (!itemGrid.dropEnabled || gridView.animating || !kicker.dragSource) {
return;
}
var x = Math.max(0, event.x - (width % itemGrid.cellWidth));
var cPos = mapToItem(gridView.contentItem, x, event.y);
var item = gridView.itemAt(cPos.x, cPos.y);
if (item) {
if (kicker.dragSource.parent === gridView.contentItem) {
if (item !== kicker.dragSource) {
item.GridView.view.model.moveRow(dragSource.itemIndex, item.itemIndex);
}
} else if (kicker.dragSource.GridView.view.model.favoritesModel === itemGrid.model
&& !itemGrid.model.isFavorite(kicker.dragSource.favoriteId)) {
var hasPlaceholder = (itemGrid.model.dropPlaceholderIndex !== -1);
itemGrid.model.dropPlaceholderIndex = item.itemIndex;
if (!hasPlaceholder) {
gridView.currentIndex = (item.itemIndex - 1);
}
}
} else if (kicker.dragSource.parent !== gridView.contentItem
&& kicker.dragSource.GridView.view.model.favoritesModel === itemGrid.model
&& !itemGrid.model.isFavorite(kicker.dragSource.favoriteId)) {
var hasPlaceholder = (itemGrid.model.dropPlaceholderIndex !== -1);
itemGrid.model.dropPlaceholderIndex = hasPlaceholder ? itemGrid.model.count - 1 : itemGrid.model.count;
if (!hasPlaceholder) {
gridView.currentIndex = (itemGrid.model.count - 1);
}
} else {
itemGrid.model.dropPlaceholderIndex = -1;
gridView.currentIndex = -1;
}
}
onExited: {
if ("dropPlaceholderIndex" in itemGrid.model) {
itemGrid.model.dropPlaceholderIndex = -1;
gridView.currentIndex = -1;
}
}
onDropped: {
if (kicker.dragSource && kicker.dragSource.parent !== gridView.contentItem && kicker.dragSource.GridView.view.model.favoritesModel === itemGrid.model) {
itemGrid.model.addFavorite(kicker.dragSource.favoriteId, itemGrid.model.dropPlaceholderIndex);
gridView.currentIndex = -1;
}
}
Timer {
id: resetAnimationDurationTimer
interval: 120
repeat: false
onTriggered: {
gridView.animationDuration = interval - 20;
}
}
PlasmaComponents.ScrollView {
id: scrollArea
anchors.fill: parent
focus: true
PlasmaComponents.ScrollBar.horizontal.policy: itemGrid.horizontalScrollBarPolicy
PlasmaComponents.ScrollBar.vertical.policy: itemGrid.verticalScrollBarPolicy
GridView {
id: gridView
width: itemGrid.width
height: itemGrid.height
signal itemContainsMouseChanged(bool containsMouse)
property int iconSize: Kirigami.Units.iconSizes.huge
property bool animating: false
property int animationDuration: itemGrid.dropEnabled ? resetAnimationDurationTimer.interval : 0
focus: true
currentIndex: -1
move: Transition {
enabled: itemGrid.dropEnabled
SequentialAnimation {
PropertyAction { target: gridView; property: "animating"; value: true }
NumberAnimation {
duration: gridView.animationDuration
properties: "x, y"
easing.type: Easing.OutQuad
}
PropertyAction { target: gridView; property: "animating"; value: false }
}
}
moveDisplaced: Transition {
enabled: itemGrid.dropEnabled
SequentialAnimation {
PropertyAction { target: gridView; property: "animating"; value: true }
NumberAnimation {
duration: gridView.animationDuration
properties: "x, y"
easing.type: Easing.OutQuad
}
PropertyAction { target: gridView; property: "animating"; value: false }
}
}
keyNavigationWraps: false
boundsBehavior: Flickable.StopAtBounds
delegate: ItemGridDelegate {
showLabel: itemGrid.showLabels
}
highlight: Item {
property bool isDropPlaceHolder: "dropPlaceholderIndex" in itemGrid.model && itemGrid.currentIndex === itemGrid.model.dropPlaceholderIndex
PlasmaExtras.Highlight {
visible: gridView.currentItem && !isDropPlaceHolder
hovered: true
pressed: hoverArea.pressed
anchors.fill: parent
}
KSvg.FrameSvgItem {
visible: gridView.currentItem && isDropPlaceHolder
anchors.fill: parent
imagePath: "widgets/viewitem"
prefix: "selected"
opacity: 0.5
Kirigami.Icon {
anchors {
right: parent.right
rightMargin: parent.margins.right
bottom: parent.bottom
bottomMargin: parent.margins.bottom
}
width: Kirigami.Units.iconSizes.smallMedium
height: width
source: "list-add"
active: false
}
}
}
highlightFollowsCurrentItem: true
highlightMoveDuration: 0
onCurrentIndexChanged: {
if (currentIndex !== -1) {
hoverArea.hoverEnabled = false
focus = true;
}
}
onCountChanged: {
animationDuration = 0;
resetAnimationDurationTimer.start();
}
onModelChanged: {
currentIndex = -1;
}
Keys.onLeftPressed: event => {
if (itemGrid.currentCol() !== 0) {
event.accepted = true;
moveCurrentIndexLeft();
} else {
itemGrid.keyNavLeft();
}
}
Keys.onRightPressed: event => {
var columns = Math.floor(width / cellWidth);
if (itemGrid.currentCol() !== columns - 1 && currentIndex !== count -1) {
event.accepted = true;
moveCurrentIndexRight();
} else {
itemGrid.keyNavRight();
}
}
Keys.onUpPressed: event => {
if (itemGrid.currentRow() !== 0) {
event.accepted = true;
moveCurrentIndexUp();
positionViewAtIndex(currentIndex, GridView.Contain);
} else {
itemGrid.keyNavUp();
}
}
Keys.onDownPressed: event => {
if (itemGrid.currentRow() < itemGrid.lastRow()) {
// Fix moveCurrentIndexDown()'s lack of proper spatial nav down
// into partial columns.
event.accepted = true;
var columns = Math.floor(width / cellWidth);
var newIndex = currentIndex + columns;
currentIndex = Math.min(newIndex, count - 1);
positionViewAtIndex(currentIndex, GridView.Contain);
} else {
itemGrid.keyNavDown();
}
}
onItemContainsMouseChanged: containsMouse => {
if (!containsMouse) {
//if (!actionMenu.opened) {
// gridView.currentIndex = -1;
//}
hoverArea.pressX = -1;
hoverArea.pressY = -1;
hoverArea.lastX = -1;
hoverArea.lastY = -1;
hoverArea.pressedItem = null;
hoverArea.hoverEnabled = true;
}
}
}
}
MouseArea {
id: hoverArea
//anchors.fill: parent
width: itemGrid.width - Kirigami.Units.gridUnit
height: itemGrid.height
property int pressX: -1
property int pressY: -1
property int lastX: -1
property int lastY: -1
property Item pressedItem: null
acceptedButtons: Qt.LeftButton | Qt.RightButton
hoverEnabled: true
function updatePositionProperties(x, y) {
// Prevent hover event synthesis in QQuickWindow interfering
// with keyboard navigation by ignoring repeated events with
// identical coordinates. As the work done here would be re-
// dundant in any case, these are safe to ignore.
if (lastX === x && lastY === y) {
return;
}
lastX = x;
lastY = y;
var cPos = mapToItem(gridView.contentItem, x, y);
var item = gridView.itemAt(cPos.x, cPos.y);
if (!item) {
gridView.currentIndex = -1;
pressedItem = null;
} else {
itemGrid.focus = (item.itemIndex !== -1)
gridView.currentIndex = item.itemIndex;
}
return item;
}
onPressed: mouse => {
mouse.accepted = true;
updatePositionProperties(mouse.x, mouse.y);
pressX = mouse.x;
pressY = mouse.y;
if (mouse.button === Qt.RightButton) {
if (gridView.currentItem) {
if (gridView.currentItem.hasActionList) {
var mapped = mapToItem(gridView.currentItem, mouse.x, mouse.y);
gridView.currentItem.openActionMenu(mapped.x, mapped.y);
}
} else {
var mapped = mapToItem(rootItem, mouse.x, mouse.y);
contextMenu.open(mapped.x, mapped.y);
}
} else {
pressedItem = gridView.currentItem;
}
}
onReleased: mouse => {
mouse.accepted = true;
updatePositionProperties(mouse.x, mouse.y);
if (!dragHelper.dragging) {
if (pressedItem) {
if ("trigger" in gridView.model) {
gridView.model.trigger(pressedItem.itemIndex, "", null);
root.toggle();
}
itemGrid.itemActivated(pressedItem.itemIndex, "", null);
} else if (mouse.button === Qt.LeftButton) {
root.toggle();
}
}
pressX = pressY = -1;
pressedItem = null;
}
onPositionChanged: mouse => {
var item = pressedItem? pressedItem : updatePositionProperties(mouse.x, mouse.y);
if (gridView.currentIndex !== -1) {
if (itemGrid.dragEnabled && pressX !== -1 && dragHelper.isDrag(pressX, pressY, mouse.x, mouse.y)) {
if ("pluginName" in item.m) {
dragHelper.startDrag(kicker, item.url, item.icon,
"text/x-plasmoidservicename", item.m.pluginName);
} else {
// dragHelper.startDrag(kicker, item.url, item.icon);
dragHelper.startDrag(kicker,item.url);
}
kicker.dragSource = item;
pressX = -1;
pressY = -1;
}
}
}
}
}
}

View File

@ -0,0 +1,257 @@
/*
SPDX-FileCopyrightText: 2015 Eike Hein <hein@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
import QtQuick
import org.kde.ksvg 1.0 as KSvg
import org.kde.plasma.components as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.kirigami 2.20 as Kirigami
import org.kde.plasma.private.kicker 0.1 as Kicker
import org.kde.plasma.plasmoid
PlasmaComponents.ScrollView {
id: itemMultiGrid
anchors {
top: parent.top
}
width: parent.width
implicitHeight: itemColumn.implicitHeight
signal keyNavLeft(int subGridIndex)
signal keyNavRight(int subGridIndex)
signal keyNavUp()
signal keyNavDown()
property bool grabFocus: false
property alias model: repeater.model
property alias count: repeater.count
property alias flickableItem: flickable
property int cellWidth
property int cellHeight
function subGridAt(index) {
return repeater.itemAt(index).itemGrid;
}
function tryActivate(row, col) { // FIXME TODO: Cleanup messy algo.
if (flickable.contentY > 0) {
row = 0;
}
var target = null;
var rows = 0;
for (var i = 0; i < repeater.count; i++) {
var grid = subGridAt(i);
if(grid.count > 0 ){
if (rows <= row) {
target = grid;
rows += grid.lastRow() + 2; // Header counts as one.
} else {
break;
}
}
}
if (target) {
rows -= (target.lastRow() + 2);
target.tryActivate(row - rows, col);
}
}
onFocusChanged: {
if (!focus) {
for (var i = 0; i < repeater.count; i++) {
subGridAt(i).focus = false;
}
}
}
Flickable {
id: flickable
flickableDirection: Flickable.VerticalFlick
contentHeight: itemColumn.implicitHeight
//focusPolicy: Qt.NoFocus
Column {
id: itemColumn
width: itemMultiGrid.width - Kirigami.Units.gridUnit
Repeater {
id: repeater
delegate: Item {
width: itemColumn.width
height: gridView.height + gridViewLabel.height + Kirigami.Units.largeSpacing * 2
visible: gridView.count > 0
property Item itemGrid: gridView
Kirigami.Heading {
id: gridViewLabel
anchors.top: parent.top
x: Kirigami.Units.smallSpacing
width: parent.width - x
height: dummyHeading.height
elide: Text.ElideRight
wrapMode: Text.NoWrap
opacity: 0.8
color: Kirigami.Theme.textColor
level: 3
font.bold: true
font.weight: Font.DemiBold
text: repeater.model.modelForRow(index).description
textFormat: Text.PlainText
}
Rectangle{
anchors.right: parent.right
anchors.left: gridViewLabel.right
anchors.leftMargin: Kirigami.Units.largeSpacing
anchors.rightMargin: Kirigami.Units.largeSpacing
anchors.verticalCenter: gridViewLabel.verticalCenter
height: 1
color: Kirigami.Theme.textColor
opacity: 0.15
}
MouseArea {
width: parent.width
height: parent.height
onClicked: root.toggle()
}
ItemGridView {
id: gridView
anchors {
top: gridViewLabel.bottom
topMargin: Kirigami.Units.largeSpacing
}
width: parent.width
height: Math.ceil(count / Plasmoid.configuration.numberColumns) * itemMultiGrid.cellHeight
cellWidth: itemMultiGrid.cellWidth
cellHeight: itemMultiGrid.cellHeight
iconSize: root.iconSize
verticalScrollBarPolicy: PlasmaComponents.ScrollBar.AlwaysOff
model: repeater.model.modelForRow(index)
onFocusChanged: {
if (focus) {
itemMultiGrid.focus = true;
}
}
onCountChanged: {
if (itemMultiGrid.grabFocus && index == 0 && count > 0) {
currentIndex = 0;
focus = true;
}
}
onCurrentItemChanged: {
if (!currentItem) {
return;
}
if (index == 0 && currentRow() === 0) {
flickable.contentY = 0;
return;
}
var y = currentItem.y;
y = contentItem.mapToItem(flickable.contentItem, 0, y).y;
if (y < flickable.contentY) {
flickable.contentY = y;
} else {
y += itemMultiGrid.cellHeight;
y -= flickable.contentY;
y -= itemMultiGrid.height;
if (y > 0) {
flickable.contentY += y;
}
}
}
onKeyNavLeft: {
itemMultiGrid.keyNavLeft(index);
}
onKeyNavRight: {
itemMultiGrid.keyNavRight(index);
}
onKeyNavUp: {
if (index > 0) {
var i;
for (i = index; i > 0 ; i--) {
var prevGrid = subGridAt(i-1);
if(prevGrid.count > 0 ){
prevGrid.tryActivate(prevGrid.lastRow(), currentCol());
break;
}
}
if(i === 0){
itemMultiGrid.keyNavUp();
}
// var prevGrid = subGridAt(index - 1);
// prevGrid.tryActivate(prevGrid.lastRow(), currentCol());
} else {
itemMultiGrid.keyNavUp();
}
}
onKeyNavDown: {
if (index < repeater.count - 1) {
var i;
for (i = index; i < repeater.count - 1 ; i++) {
var grid = subGridAt(i+1);
if(grid.count > 0 ){
grid.tryActivate(0, currentCol());
break;
}
}
if(i === repeater.count){
itemMultiGrid.keyNavDown();
}
// subGridAt(index + 1).tryActivate(0, currentCol());
} else {
itemMultiGrid.keyNavDown();
}
}
}
// HACK: Steal wheel events from the nested grid view and forward them to
// the ScrollView's internal WheelArea.
Kicker.WheelInterceptor {
anchors.fill: gridView
z: 1
destination: findWheelArea(itemMultiGrid)
}
}
}
}
}
}

View File

@ -20,63 +20,96 @@
import QtQuick 2.4
import QtQuick.Layouts 1.1
import QtQuick.Controls 2.12
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.components 3.0 as PlasmaComponents3
import org.kde.plasma.extras 2.0 as PlasmaExtras
import org.kde.plasma.private.kicker 0.1 as Kicker
import org.kde.kcoreaddons 1.0 as KCoreAddons // kuser
import org.kde.coreaddons 1.0 as KCoreAddons // kuser
import org.kde.plasma.private.shell 2.0
import org.kde.kwindowsystem 1.0
import QtGraphicalEffects 1.0
import Qt5Compat.GraphicalEffects
import org.kde.kquickcontrolsaddons 2.0
import org.kde.plasma.components 3.0 as PlasmaComponents3
import org.kde.plasma.private.quicklaunch 1.0
import QtQuick.Controls 2.12
import org.kde.kirigami as Kirigami
import org.kde.plasma.plasma5support 2.0 as P5Support
import org.kde.plasma.private.sessions as Sessions
import org.kde.ksvg 1.0 as KSvg
import org.kde.kcmutils as KCM
import org.kde.plasma.plasmoid 2.0
Item{
id: main
property int sizeImage: PlasmaCore.Units.iconSizes.large * 2
property int sizeImage: Kirigami.Units.iconSizes.large * 2.5
onVisibleChanged: {
root.visible = !root.visible
}
PlasmaExtras.Menu {
id: contextMenu
PlasmaExtras.MenuItem {
action: Plasmoid.internalAction("configure")
}
}
PlasmaCore.Dialog {
id: root
objectName: "popupWindow"
//flags: Qt.Window
flags: Qt.WindowStaysOnTopHint
location: PlasmaCore.Types.Floating
//flags: Qt.WindowStaysOnTopHint
flags: Qt.Dialog | Qt.FramelessWindowHint
location:{
if (Plasmoid.configuration.displayPosition === 1)
return PlasmaCore.Types.Floating
else if (Plasmoid.configuration.displayPosition === 2)
return PlasmaCore.Types.BottomEdge
else
return Plasmoid.location
}
hideOnWindowDeactivate: true
property int iconSize: PlasmaCore.Units.iconSizes.large
property int cellSize: iconSize
+ PlasmaCore.Units.gridUnit * 2
+ (2 * Math.max(highlightItemSvg.margins.top + highlightItemSvg.margins.bottom,
highlightItemSvg.margins.left + highlightItemSvg.margins.right))
property int iconSize:{ switch(Plasmoid.configuration.appsIconSize){
case 0: return Kirigami.Units.iconSizes.smallMedium;
case 1: return Kirigami.Units.iconSizes.medium;
case 2: return Kirigami.Units.iconSizes.large;
case 3: return Kirigami.Units.iconSizes.huge;
default: return 64
}
}
property int cellSizeHeight: iconSize
+ Kirigami.Units.gridUnit * 2
+ (2 * Math.max(highlightItemSvg.margins.top + highlightItemSvg.margins.bottom,
highlightItemSvg.margins.left + highlightItemSvg.margins.right))
property int cellSizeWidth: cellSizeHeight + Kirigami.Units.gridUnit
property bool searching: (searchField.text != "")
property bool showFavorites
onVisibleChanged: {
if (visible) {
root.showFavorites = plasmoid.configuration.showFavoritesFirst
root.showFavorites = Plasmoid.configuration.showFavoritesFirst
var pos = popupPosition(width, height);
x = pos.x;
y = pos.y;
requestActivate();
reset();
animation1.start()
//animation1.start()
}else{
rootItem.opacity = 0
//rootItem.opacity = 0
}
}
@ -96,6 +129,7 @@ Item{
main.visible = !main.visible
}
function reset() {
searchField.text = "";
@ -108,16 +142,15 @@ Item{
}
function popupPosition(width, height) {
var screenAvail = plasmoid.availableScreenRect;
var screenGeom = plasmoid.screenGeometry;
var screenAvail = kicker.availableScreenRect;
var screenGeom = kicker.screenGeometry;
var screen = Qt.rect(screenAvail.x + screenGeom.x,
screenAvail.y + screenGeom.y,
screenAvail.width,
screenAvail.height);
var offset = PlasmaCore.Units.smallSpacing
var offset = Kirigami.Units.smallSpacing;
// Fall back to bottom-left of screen area when the applet is on the desktop or floating.
var x = offset;
@ -127,62 +160,65 @@ Item{
var vertMidPoint;
if (plasmoid.configuration.displayPosition === 1) {
if (Plasmoid.configuration.displayPosition === 1) {
horizMidPoint = screen.x + (screen.width / 2);
vertMidPoint = screen.y + (screen.height / 2);
x = horizMidPoint - width / 2;
y = vertMidPoint - height / 2;
} else if (plasmoid.configuration.displayPosition === 2) {
} else if (Plasmoid.configuration.displayPosition === 2) {
horizMidPoint = screen.x + (screen.width / 2);
vertMidPoint = screen.y + (screen.height / 2);
x = horizMidPoint - width / 2;
y = screen.y + screen.height - height - offset - panelSvg.margins.top;
} else if (plasmoid.location === PlasmaCore.Types.BottomEdge) {
} else if (Plasmoid.location === PlasmaCore.Types.BottomEdge) {
horizMidPoint = screen.x + (screen.width / 2);
appletTopLeft = parent.mapToGlobal(0, 0);
x = (appletTopLeft.x < horizMidPoint) ? screen.x + offset : (screen.x + screen.width) - width - offset;
y = screen.y + screen.height - height - offset - panelSvg.margins.top;
} else if (plasmoid.location === PlasmaCore.Types.TopEdge) {
} else if (Plasmoid.location === PlasmaCore.Types.TopEdge) {
horizMidPoint = screen.x + (screen.width / 2);
var appletBottomLeft = parent.mapToGlobal(0, parent.height);
x = (appletBottomLeft.x < horizMidPoint) ? screen.x + offset : (screen.x + screen.width) - width - offset;
y = parent.height + panelSvg.margins.bottom + offset;
y = screen.y + y + (plasmoid.configuration.viewUser ? main.sizeImage*0.5 : 0);
} else if (plasmoid.location === PlasmaCore.Types.LeftEdge) {
//y = screen.y + parent.height + panelSvg.margins.bottom + offset;
y = screen.y + panelSvg.margins.bottom + offset;
} else if (Plasmoid.location === PlasmaCore.Types.LeftEdge) {
vertMidPoint = screen.y + (screen.height / 2);
appletTopLeft = parent.mapToGlobal(0, 0);
x = parent.width + panelSvg.margins.right + offset;
y = (appletTopLeft.y < vertMidPoint) ? screen.y + offset : (screen.y + screen.height) - height - offset;
y = screen.y + y + (plasmoid.configuration.viewUser ? main.sizeImage*0.5 : 0);
} else if (plasmoid.location === PlasmaCore.Types.RightEdge) {
x = appletTopLeft.x*2 + parent.width + panelSvg.margins.right + offset;
y = screen.y + (appletTopLeft.y < vertMidPoint) ? screen.y + offset : (screen.y + screen.height) - height - offset;
} else if (Plasmoid.location === PlasmaCore.Types.RightEdge) {
vertMidPoint = screen.y + (screen.height / 2);
appletTopLeft = parent.mapToGlobal(0, 0);
x = appletTopLeft.x - panelSvg.margins.left - offset - width;
y = (appletTopLeft.y < vertMidPoint) ? screen.y + offset : (screen.y + screen.height) - height - offset;
y = screen.y + y + (plasmoid.configuration.viewUser ? main.sizeImage*0.5 : 0);
y = screen.y + (appletTopLeft.y < vertMidPoint) ? screen.y + offset : (screen.y + screen.height) - height - offset;
}
return Qt.point(x, y);
}
FocusScope {
id: rootItem
Layout.minimumWidth: (root.cellSize * plasmoid.configuration.numberColumns)+ PlasmaCore.Units.largeSpacing
Layout.maximumWidth: (root.cellSize * plasmoid.configuration.numberColumns)+ PlasmaCore.Units.largeSpacing
Layout.minimumHeight: (root.cellSize * plasmoid.configuration.numberRows) + searchField.implicitHeight + (plasmoid.configuration.viewUser ? main.sizeImage*0.5 : PlasmaCore.Units.largeSpacing * 1.5 ) + PlasmaCore.Units.largeSpacing * 6
Layout.maximumHeight: (root.cellSize * plasmoid.configuration.numberRows) + searchField.implicitHeight + (plasmoid.configuration.viewUser ? main.sizeImage*0.5 : PlasmaCore.Units.largeSpacing * 1.5 ) + PlasmaCore.Units.largeSpacing * 6
Layout.minimumWidth: (root.cellSizeWidth * Plasmoid.configuration.numberColumns)+ Kirigami.Units.gridUnit*1.5
Layout.maximumWidth: (root.cellSizeWidth * Plasmoid.configuration.numberColumns)+ Kirigami.Units.gridUnit*1.5
Layout.minimumHeight: (root.cellSizeHeight * Plasmoid.configuration.numberRows) + searchField.implicitHeight + (Plasmoid.configuration.showInfoUser ? main.sizeImage*0.5 : Kirigami.Units.gridUnit * 1.5 ) + Kirigami.Units.gridUnit * 5
Layout.maximumHeight: (root.cellSizeHeight * Plasmoid.configuration.numberRows) + searchField.implicitHeight + (Plasmoid.configuration.showInfoUser ? main.sizeImage*0.5 : Kirigami.Units.gridUnit * 1.5 ) + Kirigami.Units.gridUnit * 5
focus: true
opacity: 0
KCoreAddons.KUser { id: kuser }
Logic { id: logic }
Logic { id: logic }
OpacityAnimator { id: animation1; target: rootItem; from: 0; to: 1; }
OpacityAnimator { id: animation1; target: rootItem; from: 0; to: 1; easing.type: Easing.InOutQuad; }
PlasmaCore.DataSource {
Sessions.SessionManagement {
id: sm
}
Sessions.SessionsModel {
id: sessionsModel
}
P5Support.DataSource {
id: pmEngine
engine: "powermanagement"
connectedSources: ["PowerDevil", "Sleep States"]
@ -193,7 +229,7 @@ Item{
}
}
PlasmaCore.DataSource {
P5Support.DataSource {
id: executable
engine: "executable"
connectedSources: []
@ -213,13 +249,13 @@ Item{
signal exited(string cmd, int exitCode, int exitStatus, string stdout, string stderr)
}
PlasmaComponents.Highlight {
PlasmaExtras.Highlight {
id: delegateHighlight
visible: false
z: -1 // otherwise it shows ontop of the icon/label and tints them slightly
}
PlasmaExtras.Heading {
Kirigami.Heading {
id: dummyHeading
visible: false
width: 0
@ -231,30 +267,14 @@ Item{
font: dummyHeading.font
}
ActionMenu {
id: actionMenu
onActionClicked: visualParent.actionTriggered(actionId, actionArgument)
}
PlasmaCore.FrameSvgItem {
id : headingSvg
width: parent.width + backgroundSvg.margins.right + backgroundSvg.margins.left
height: root.cellSize * plasmoid.configuration.numberRows + PlasmaCore.Units.largeSpacing * 2 + backgroundSvg.margins.bottom - 1 //<>+ paginationBar.height
y: globalFavoritesGrid.y - PlasmaCore.Units.largeSpacing
x: - backgroundSvg.margins.left
imagePath: "widgets/plasmoidheading"
prefix: "footer"
opacity: 0.7
}
RowLayout{
id: rowTop
anchors {
left: parent.left
right: parent.right
top: parent.top
margins: PlasmaCore.Units.smallSpacing
topMargin: PlasmaCore.Units.largeSpacing / 2
margins: Kirigami.Units.smallSpacing
topMargin: Kirigami.Units.largeSpacing
}
PlasmaComponents3.ToolButton {
@ -281,8 +301,9 @@ Item{
PlasmaComponents3.ToolButton {
icon.name: "system-lock-screen"
onClicked: pmEngine.performOperation("lockScreen")
enabled: pmEngine.data["Sleep States"]["LockScreen"]
//onClicked: pmEngine.performOperation("lockScreen")
//enabled: pmEngine.data["Sleep States"]["LockScreen"]
onClicked: sm.lock()
ToolTip.delay: 200
ToolTip.timeout: 1000
ToolTip.visible: hovered
@ -290,36 +311,46 @@ Item{
}
PlasmaComponents3.ToolButton {
icon.name: "system-shutdown"
onClicked: pmEngine.performOperation("requestShutDown")
icon.name: "system-switch-user"
onClicked: sm.switchUser()
ToolTip.delay: 200
ToolTip.timeout: 1000
ToolTip.visible: hovered
ToolTip.text: i18n("Leave ...")
ToolTip.text: i18n("Switch User")
}
PlasmaComponents3.ToolButton {
icon.name: "system-shutdown"
// onClicked: sm.requestShutdown()
onClicked: sm.requestLogoutPrompt()
ToolTip.delay: 200
ToolTip.timeout: 1000
ToolTip.visible: hovered
ToolTip.text: i18n("Shutdown")
}
}
PlasmaExtras.Heading {
Kirigami.Heading {
anchors {
top: rowTop.bottom
topMargin: PlasmaCore.Units.largeSpacing
topMargin: Kirigami.Units.gridUnit
horizontalCenter: parent.horizontalCenter
}
level: 1
color: theme.textColor
color: Kirigami.Theme.textColor
text: i18n("Hi, ")+ kuser.fullName
font.bold: true
visible: plasmoid.configuration.viewUser
font.weight: Font.Bold
visible: Plasmoid.configuration.showInfoUser
}
RowLayout {
id: rowSearchField
anchors{
top: plasmoid.configuration.viewUser ? parent.top : rowTop.bottom
topMargin: plasmoid.configuration.viewUser ? PlasmaCore.Units.largeSpacing*3 + sizeImage/2 : PlasmaCore.Units.largeSpacing/2
top: Plasmoid.configuration.showInfoUser ? parent.top : rowTop.bottom
topMargin: Plasmoid.configuration.showInfoUser ? Kirigami.Units.gridUnit*3 + sizeImage/2 : Kirigami.Units.gridUnit/2
left: parent.left
right: parent.right
margins: PlasmaCore.Units.smallSpacing
margins: Kirigami.Units.smallSpacing
}
Item{
@ -329,31 +360,39 @@ Item{
id: searchField
Layout.fillWidth: true
placeholderText: i18n("Type here to search ...")
leftPadding: PlasmaCore.Units.largeSpacing + PlasmaCore.Units.iconSizes.small
topPadding: 10
bottomPadding: 10
leftPadding: Kirigami.Units.gridUnit + Kirigami.Units.iconSizes.small
text: ""
//clearButtonShown: true // TODO: kubuntu 20.04
font.pointSize: Kirigami.Theme.defaultFont.pointSize + 2
onTextChanged: {
runnerModel.query = text;
}
Keys.onPressed: {
if (event.key === Qt.Key_Escape) {
event.accepted = true;
if(root.searching){
searchField.clear()
} else {
root.toggle()
}
}
Keys.onPressed: (event)=> {
if (event.key === Qt.Key_Escape) {
event.accepted = true;
if(root.searching){
searchField.clear()
} else {
root.toggle()
}
}
if (event.key === Qt.Key_Down || event.key === Qt.Key_Tab || event.key === Qt.Key_Backtab) {
event.accepted = true;
if(root.showFavorites)
globalFavoritesGrid.tryActivate(0,0)
else
mainColumn.visibleGrid.tryActivate(0,0)
}
}
if (event.key === Qt.Key_Down || event.key === Qt.Key_Tab || event.key === Qt.Key_Backtab) {
event.accepted = true;
if(root.searching){
runnerGrid.tryActivate(0,0)
}
else{
if(root.showFavorites)
globalFavoritesGrid.tryActivate(0,0)
else
mainColumn.visibleGrid.tryActivate(0,0)
}
}
}
function backspace() {
if (!root.visible) {
@ -370,15 +409,15 @@ Item{
focus = true;
text = text + newText;
}
PlasmaCore.IconItem {
Kirigami.Icon {
source: 'search'
anchors {
left: searchField.left
verticalCenter: searchField.verticalCenter
leftMargin: PlasmaCore.Units.smallSpacing * 2
leftMargin: Kirigami.Units.smallSpacing * 2
}
height: PlasmaCore.Units.iconSizes.small
height: Kirigami.Units.iconSizes.small
width: height
}
@ -425,35 +464,30 @@ Item{
ItemGridView {
id: globalFavoritesGrid
visible: (plasmoid.configuration.showFavoritesFirst || root.showFavorites ) && !root.searching && root.showFavorites
visible: (Plasmoid.configuration.showFavoritesFirst || root.showFavorites ) && !root.searching && root.showFavorites
anchors {
top: rowSearchField.bottom
topMargin: PlasmaCore.Units.largeSpacing * 2
left: parent.left
right: parent.right
topMargin: Kirigami.Units.gridUnit
}
width: root.cellSize * plasmoid.configuration.numberColumns + PlasmaCore.Units.largeSpacing
height: root.cellSize * plasmoid.configuration.numberRows
focus: true
cellWidth: root.cellSize
cellHeight: root.cellSize
iconSize: root.iconSize
dragEnabled: true
dropEnabled: true
usesPlasmaTheme: true
width: rootItem.width
height: root.cellSizeHeight * Plasmoid.configuration.numberRows
focus: true
cellWidth: root.cellSizeWidth
cellHeight: root.cellSizeHeight
iconSize: root.iconSize
onKeyNavUp: searchField.focus = true
Keys.onPressed: {
if(event.modifiers & Qt.ControlModifier ||event.modifiers & Qt.ShiftModifier){
searchField.focus = true;
return
}
if (event.key === Qt.Key_Tab) {
event.accepted = true;
searchField.focus = true
}
}
Keys.onPressed:(event)=> {
if(event.modifiers & Qt.ControlModifier ||event.modifiers & Qt.ShiftModifier){
searchField.focus = true;
return
}
if (event.key === Qt.Key_Tab) {
event.accepted = true;
searchField.focus = true
}
}
}
//
@ -464,22 +498,21 @@ Item{
Item{
id: mainGrids
visible: (!plasmoid.configuration.showFavoritesFirst && !root.showFavorites ) || root.searching || !root.showFavorites //TODO
visible: (!Plasmoid.configuration.showFavoritesFirst && !root.showFavorites ) || root.searching || !root.showFavorites //TODO
anchors {
top: rowSearchField.bottom
topMargin: PlasmaCore.Units.largeSpacing * 2
left: parent.left
right: parent.right
topMargin: Kirigami.Units.gridUnit
}
width: root.cellSize * plasmoid.configuration.numberColumns + PlasmaCore.Units.largeSpacing
height: root.cellSize * plasmoid.configuration.numberRows
width: rootItem.width
height: root.cellSizeHeight * Plasmoid.configuration.numberRows
Item {
id: mainColumn
width: root.cellSize * plasmoid.configuration.numberColumns + PlasmaCore.Units.largeSpacing
height: root.cellSize * plasmoid.configuration.numberRows
//width: root.cellSize * Plasmoid.configuration.numberColumns + Kirigami.Units.gridUnit
width: rootItem.width
height: root.cellSizeHeight * Plasmoid.configuration.numberRows
property Item visibleGrid: allAppsGrid
@ -492,17 +525,17 @@ Item{
ItemGridView {
id: allAppsGrid
width: root.cellSize * plasmoid.configuration.numberColumns + PlasmaCore.Units.largeSpacing
height: root.cellSize * plasmoid.configuration.numberRows
cellWidth: root.cellSize
cellHeight: root.cellSize
//width: root.cellSize * Plasmoid.configuration.numberColumns + Kirigami.Units.gridUnit
width: rootItem.width
height: root.cellSizeHeight * Plasmoid.configuration.numberRows
cellWidth: root.cellSizeWidth
cellHeight: root.cellSizeHeight
iconSize: root.iconSize
enabled: (opacity == 1) ? 1 : 0
z: enabled ? 5 : -1
dropEnabled: false
dragEnabled: false
opacity: root.searching ? 0 : 1
onOpacityChanged: {
if (opacity == 1) {
//allAppsGrid.scrollBar.flickableItem.contentY = 0;
@ -514,12 +547,12 @@ Item{
ItemMultiGridView {
id: runnerGrid
width: root.cellSize * plasmoid.configuration.numberColumns + PlasmaCore.Units.largeSpacing
height: root.cellSize * plasmoid.configuration.numberRows
z: (opacity == 1.0) ? 1 : 0
aCellWidth: parent.width - PlasmaCore.Units.largeSpacing
aCellHeight: root.cellSize
width: rootItem.width
height: root.cellSizeHeight * Plasmoid.configuration.numberRows
cellWidth: root.cellSizeWidth
cellHeight: root.cellSizeHeight
enabled: (opacity == 1.0) ? 1 : 0
z: enabled ? 5 : -1
model: runnerModel
grabFocus: true
opacity: root.searching ? 1.0 : 0.0
@ -531,65 +564,65 @@ Item{
onKeyNavUp: searchField.focus = true
}
Keys.onPressed: {
if(event.modifiers & Qt.ControlModifier ||event.modifiers & Qt.ShiftModifier){
searchField.focus = true;
return
}
if (event.key === Qt.Key_Tab) {
event.accepted = true;
searchField.focus = true
} else if (event.key === Qt.Key_Backspace) {
event.accepted = true;
if(root.searching)
searchField.backspace();
else
searchField.focus = true
} else if (event.key === Qt.Key_Escape) {
event.accepted = true;
if(root.searching){
searchField.clear()
} else {
root.toggle()
Keys.onPressed: (event)=> {
if(event.modifiers & Qt.ControlModifier ||event.modifiers & Qt.ShiftModifier){
searchField.focus = true;
return
}
if (event.key === Qt.Key_Tab) {
event.accepted = true;
searchField.focus = true
} else if (event.key === Qt.Key_Backspace) {
event.accepted = true;
if(root.searching)
searchField.backspace();
else
searchField.focus = true
} else if (event.key === Qt.Key_Escape) {
event.accepted = true;
if(root.searching){
searchField.clear()
} else {
root.toggle()
}
} else if (event.text !== "") {
event.accepted = true;
searchField.appendText(event.text);
}
}
}
}
Keys.onPressed: (event)=> {
if(event.modifiers & Qt.ControlModifier ||event.modifiers & Qt.ShiftModifier){
searchField.focus = true;
return
}
if (event.key === Qt.Key_Escape) {
event.accepted = true;
if (root.searching) {
reset();
} else {
root.visible = false;
}
return;
}
if (searchField.focus) {
return;
}
if (event.key === Qt.Key_Backspace) {
event.accepted = true;
searchField.backspace();
} else if (event.text !== "") {
event.accepted = true;
searchField.appendText(event.text);
}
}
} else if (event.text !== "") {
event.accepted = true;
searchField.appendText(event.text);
}
}
}
}
Keys.onPressed: {
if(event.modifiers & Qt.ControlModifier ||event.modifiers & Qt.ShiftModifier){
searchField.focus = true;
return
}
if (event.key === Qt.Key_Escape) {
event.accepted = true;
if (root.searching) {
reset();
} else {
root.visible = false;
}
return;
}
if (searchField.focus) {
return;
}
if (event.key === Qt.Key_Backspace) {
event.accepted = true;
searchField.backspace();
} else if (event.text !== "") {
event.accepted = true;
searchField.appendText(event.text);
}
}
}
@ -633,22 +666,18 @@ Item{
Image {
id: iconUser
//anchors.centerIn: parent
source: kuser.faceIconUrl.toString() || "user-identity"
source: kuser.faceIconUrl
cache: false
visible: source !== "" && plasmoid.configuration.viewUser
visible: source !== "" && Plasmoid.configuration.showInfoUser
sourceSize.width: main.sizeImage
sourceSize.height: main.sizeImage
fillMode: Image.PreserveAspectFit
// Crop the avatar to fit in a circle, like the lock and login screens
// but don't on software rendering where this won't render
layer.enabled:true // iconUser.GraphicsInfo.api !== GraphicsInfo.Software
layer.enabled:true
layer.effect: OpacityMask {
// this Rectangle is a circle due to radius size
maskSource: Rectangle {
width: main.sizeImage
height: width
width: iconUser.width
height: iconUser.height
radius: height / 2
visible: false
}
@ -658,22 +687,21 @@ Item{
State {
name: "show"
when: dialog.visible
PropertyChanges { target: iconUser; y: 0; opacity: 1; }
PropertyChanges { target: iconUser; opacity: 1; }
},
State {
name: "hide"
when: !dialog.visible
PropertyChanges { target: iconUser; y: sizeImage/2 ; opacity: 0; }
PropertyChanges { target: iconUser; opacity: 0; }
}
]
transitions: Transition {
PropertyAnimation { properties: "opacity,y"; easing.type: Easing.InOutQuad; }
PropertyAnimation { properties: "opacity"; easing.type: Easing.InOutQuad; }
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.LeftButton
onClicked: KCMShell.openSystemSettings("kcm_users")
visible: KCMShell.authorize("user_manager.desktop").length > 0
onClicked: KCM.KCMLauncher.openSystemSettings("kcm_users")
}
}
}

View File

@ -0,0 +1,181 @@
/*
SPDX-FileCopyrightText: 2013 Aurélien Gâteau <agateau@kde.org>
SPDX-FileCopyrightText: 2013-2015 Eike Hein <hein@kde.org>
SPDX-FileCopyrightText: 2017 Ivan Cukic <ivan.cukic@kde.org>
SPDX-License-Identifier: GPL-2.0-or-later
*/
.pragma library
function fillActionMenu(i18n, actionMenu, actionList, favoriteModel, favoriteId) {
// Accessing actionList can be a costly operation, so we don't
// access it until we need the menu.
var actions = createFavoriteActions(i18n, favoriteModel, favoriteId);
if (actions) {
if (actionList && actionList.length > 0) {
var actionListCopy = Array.from(actionList);
var separator = { "type": "separator" };
actionListCopy.push(separator);
// actionList = actions.concat(actionList); // this crashes Qt O.o
actionListCopy.push.apply(actionListCopy, actions);
actionList = actionListCopy;
} else {
actionList = actions;
}
}
actionMenu.actionList = actionList;
}
function createFavoriteActions(i18n, favoriteModel, favoriteId) {
if (!favoriteModel || !favoriteModel.enabled || !favoriteId) {
return null;
}
if (favoriteModel.activities === undefined ||
favoriteModel.activities.runningActivities.length <= 1) {
var action = {};
if (favoriteModel.isFavorite(favoriteId)) {
action.text = i18n("Remove from Favorites");
action.icon = "bookmark-remove";
action.actionId = "_kicker_favorite_remove";
} else if (favoriteModel.maxFavorites === -1 || favoriteModel.count < favoriteModel.maxFavorites) {
action.text = i18n("Add to Favorites");
action.icon = "bookmark-new";
action.actionId = "_kicker_favorite_add";
} else {
return null;
}
action.actionArgument = { favoriteModel: favoriteModel, favoriteId: favoriteId };
return [action];
} else {
var actions = [];
var linkedActivities = favoriteModel.linkedActivitiesFor(favoriteId);
var activities = favoriteModel.activities.runningActivities;
// Adding the item to link/unlink to all activities
var linkedToAllActivities =
!(linkedActivities.indexOf(":global") === -1);
actions.push({
text : i18n("On All Activities"),
checkable : true,
actionId : linkedToAllActivities ?
"_kicker_favorite_remove_from_activity" :
"_kicker_favorite_set_to_activity",
checked : linkedToAllActivities,
actionArgument : {
favoriteModel: favoriteModel,
favoriteId: favoriteId,
favoriteActivity: ""
}
});
// Adding items for each activity separately
var addActivityItem = function(activityId, activityName) {
var linkedToThisActivity =
!(linkedActivities.indexOf(activityId) === -1);
actions.push({
text : activityName,
checkable : true,
checked : linkedToThisActivity && !linkedToAllActivities,
actionId :
// If we are on all activities, and the user clicks just one
// specific activity, unlink from everything else
linkedToAllActivities ? "_kicker_favorite_set_to_activity" :
// If we are linked to the current activity, just unlink from
// that single one
linkedToThisActivity ? "_kicker_favorite_remove_from_activity" :
// Otherwise, link to this activity, but do not unlink from
// other ones
"_kicker_favorite_add_to_activity",
actionArgument : {
favoriteModel : favoriteModel,
favoriteId : favoriteId,
favoriteActivity : activityId
}
});
};
// Adding the item to link/unlink to the current activity
addActivityItem(favoriteModel.activities.currentActivity, i18n("On the Current Activity"));
actions.push({
type: "separator",
actionId: "_kicker_favorite_separator"
});
// Adding the items for each activity
activities.forEach(function(activityId) {
addActivityItem(activityId, favoriteModel.activityNameForId(activityId));
});
return [{
text : i18n("Show in Favorites"),
icon : "favorite",
subActions : actions
}];
}
}
function triggerAction(model, index, actionId, actionArgument) {
function startsWith(txt, needle) {
return txt.substr(0, needle.length) === needle;
}
if (startsWith(actionId, "_kicker_favorite_")) {
handleFavoriteAction(actionId, actionArgument);
return;
}
var closeRequested = model.trigger(index, actionId, actionArgument);
if (closeRequested) {
return true;
}
return false;
}
function handleFavoriteAction(actionId, actionArgument) {
var favoriteId = actionArgument.favoriteId;
var favoriteModel = actionArgument.favoriteModel;
if (favoriteModel === null || favoriteId === null) {
return null;
}
if (actionId === "_kicker_favorite_remove") {
favoriteModel.removeFavorite(favoriteId);
} else if (actionId === "_kicker_favorite_add") {
favoriteModel.addFavorite(favoriteId);
} else if (actionId === "_kicker_favorite_remove_from_activity") {
favoriteModel.removeFavoriteFrom(favoriteId, actionArgument.favoriteActivity);
} else if (actionId === "_kicker_favorite_add_to_activity") {
favoriteModel.addFavoriteTo(favoriteId, actionArgument.favoriteActivity);
} else if (actionId === "_kicker_favorite_set_to_activity") {
favoriteModel.setFavoriteOn(favoriteId, actionArgument.favoriteActivity);
}
}

View File

@ -19,32 +19,31 @@
import QtQuick 2.0
import QtQuick.Layouts 1.1
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.plasmoid
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.components 3.0 as PC3
import org.kde.plasma.private.kicker 0.1 as Kicker
import org.kde.plasma.plasma5support 2.0 as P5Support
import org.kde.kirigami as Kirigami
import org.kde.ksvg 1.0 as KSvg
PlasmoidItem {
Item {
id: kicker
anchors.fill: parent
signal reset
property bool isDash: false
Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation
Plasmoid.compactRepresentation: null
Plasmoid.fullRepresentation: compactRepresentation
preferredRepresentation: compactRepresentation
compactRepresentation: compactRepresentation
fullRepresentation: compactRepresentation
property Item dragSource: null
property QtObject globalFavorites: rootModel.favoritesModel
property QtObject systemFavorites: rootModel.systemFavoritesModel
function action_menuedit() {
processRunner.runMenuEditor();
}
@ -54,45 +53,60 @@ Item {
CompactRepresentation {}
}
Component {
id: menuRepresentation
MenuRepresentation {}
property QtObject globalFavorites: rootModel.favoritesModel
property QtObject systemFavorites: rootModel.systemFavoritesModel
Plasmoid.icon: Plasmoid.configuration.useCustomButtonImage ? Plasmoid.configuration.customButtonImage : Plasmoid.configuration.icon
onSystemFavoritesChanged: {
systemFavorites.favorites = Plasmoid.configuration.favoriteSystemActions;
}
readonly property Kicker.RootModel rootModel: Kicker.RootModel {
Kicker.RootModel {
id: rootModel
autoPopulate: false
appNameFormat: plasmoid.configuration.appNameFormat
appNameFormat: 0
flat: true
sorted: true
showSeparators: false
appletInterface: plasmoid
appletInterface: kicker
showAllApps: true
showRecentApps: false
showRecentDocs: false
showRecentContacts: false
showPowerSession: false
onShowRecentAppsChanged: {
Plasmoid.configuration.showRecentApps = showRecentApps;
}
onShowRecentDocsChanged: {
Plasmoid.configuration.showRecentDocs = showRecentDocs;
}
onRecentOrderingChanged: {
Plasmoid.configuration.recentOrdering = recentOrdering;
}
Component.onCompleted: {
favoritesModel.initForClient("org.kde.plasma.kicker.favorites.instance-" + Plasmoid.id)
favoritesModel.initForClient("org.kde.plasma.kickoff.favorites.instance-" + plasmoid.id)
if (!plasmoid.configuration.favoritesPortedToKAstats) {
if (!Plasmoid.configuration.favoritesPortedToKAstats) {
if (favoritesModel.count < 1) {
favoritesModel.portOldFavorites(plasmoid.configuration.favorites);
favoritesModel.portOldFavorites(Plasmoid.configuration.favoriteApps);
}
plasmoid.configuration.favoritesPortedToKAstats = true;
Plasmoid.configuration.favoritesPortedToKAstats = true;
}
}
}
Connections {
target: globalFavorites
function onFavoritesChanged () {
plasmoid.configuration.favoriteApps = target.favorites;
function onFavoritesChanged() {
Plasmoid.configuration.favoriteApps = target.favorites;
}
}
@ -100,19 +114,19 @@ Item {
target: systemFavorites
function onFavoritesChanged() {
plasmoid.configuration.favoriteSystemActions = target.favorites;
Plasmoid.configuration.favoriteSystemActions = target.favorites;
}
}
Connections {
target: plasmoid.configuration
target: Plasmoid.configuration
function onFavoriteAppsChanged () {
globalFavorites.favorites = plasmoid.configuration.favoriteApps;
globalFavorites.favorites = Plasmoid.configuration.favoriteApps;
}
function onFavoriteSystemActionsChanged () {
systemFavorites.favorites = plasmoid.configuration.favoriteSystemActions;
systemFavorites.favorites = Plasmoid.configuration.favoriteSystemActions;
}
function onHiddenApplicationsChanged(){
@ -121,13 +135,28 @@ Item {
}
Kicker.RunnerModel {
id: runnerModel
id: runnerModel
appletInterface: kicker
favoritesModel: globalFavorites
runners: {
const results = ["krunner_services",
"krunner_systemsettings",
"krunner_sessions",
"krunner_powerdevil",
"calculator",
"unitconverter"];
if (Plasmoid.configuration.useExtraRunners) {
results.push(...Plasmoid.configuration.extraRunners);
}
return results;
}
}
appletInterface: plasmoid
favoritesModel: globalFavorites
deleteWhenEmpty: false
mergeResults: true
}
Kicker.DragHelper {
id: dragHelper
@ -137,7 +166,11 @@ Item {
id: processRunner;
}
PlasmaCore.FrameSvgItem {
Kicker.WindowSystem {
id: windowSystem
}
KSvg.FrameSvgItem {
id : highlightItemSvg
visible: false
@ -146,7 +179,7 @@ Item {
prefix: "hover"
}
PlasmaCore.FrameSvgItem {
KSvg.FrameSvgItem {
id : panelSvg
visible: false
@ -154,7 +187,7 @@ Item {
imagePath: "widgets/panel-background"
}
PlasmaCore.FrameSvgItem {
KSvg.FrameSvgItem {
id : scrollbarSvg
visible: false
@ -162,7 +195,7 @@ Item {
imagePath: "widgets/scrollbar"
}
PlasmaCore.FrameSvgItem {
KSvg.FrameSvgItem {
id : backgroundSvg
visible: false
@ -171,25 +204,51 @@ Item {
}
PlasmaComponents.Label {
PC3.Label {
id: toolTipDelegate
width: contentWidth
height: contentHeight
height: undefined
property Item toolTip
text: (toolTip != null) ? toolTip.text : ""
text: toolTip ? toolTip.text : ""
textFormat: Text.PlainText
}
function resetDragSource() {
dragSource = null;
}
Component.onCompleted: {
plasmoid.setAction("menuedit", i18n("Edit Applications..."));
function enableHideOnWindowDeactivate() {
kicker.hideOnWindowDeactivate = true;
}
Plasmoid.contextualActions: [
PlasmaCore.Action {
text: i18n("Edit Applications…")
icon.name: "kmenuedit"
visible: Plasmoid.immutability !== PlasmaCore.Types.SystemImmutable
onTriggered: processRunner.runMenuEditor()
}
]
Component.onCompleted: {
// plasmoid.setAction("menuedit", i18n("Edit Applications..."));
// //rootModel.refreshed.connect(reset);
// //dragHelper.dropped.connect(resetDragSource);
if (Plasmoid.hasOwnProperty("activationTogglesExpanded")) {
Plasmoid.activationTogglesExpanded = !kicker.isDash
}
windowSystem.focusIn.connect(enableHideOnWindowDeactivate);
kicker.hideOnWindowDeactivate = true;
//updateSvgMetrics();
//PlasmaCore.Theme.themeChanged.connect(updateSvgMetrics);
//rootModel.refreshed.connect(reset);
//dragHelper.dropped.connect(resetDragSource);
dragHelper.dropped.connect(resetDragSource);
}
}

View File

@ -0,0 +1,25 @@
{
"KPackageStructure": "Plasma/Applet",
"KPlugin": {
"Authors": [
{
"Email": "adhemarks@gmail.com",
"Name": "Ademir"
}
],
"Category": "Application Launchers",
"Description": "Configurable grid of application icons",
"Description[x-test]": "xxConfigurable grid of application iconsxx",
"EnabledByDefault": true,
"Icon": "start-here-kde",
"Id": "com.github.adhec.MenuDitto",
"License": "GPL-2.0+",
"Name": "Menu Ditto",
"Name[x-test]": "xxMenu Dittoxx",
"Website": "https://kde.org/plasma-desktop"
},
"X-Plasma-API-Minimum-Version": "6.0",
"X-Plasma-Provides": [
"org.kde.plasma.launchermenu"
]
}

View File

@ -4,11 +4,11 @@ With KDE Frameworks v5.37 and above, translations are bundled with the `*.plasmo
## Install Translations
Go to `~/.local/share/plasma/plasmoids/com.github.adhec.DittoMenu/translate/` and run `sh ./build --restartplasma`.
Go to `~/.local/share/plasma/plasmoids/com.github.adhec.MenuDitto/translate/` and run `sh ./build --restartplasma`.
## New Translations
1. Fill out [`template.pot`](template.pot) with your translations then open a [new issue](https://github.com/adhec/dittoMenuKDE/issues/new), name the file `spanish.txt`, attach the txt file to the issue (drag and drop).
1. Fill out [`template.pot`](template.pot) with your translations then open a [new issue](https://github.com/prateekmedia/MenuDitto/issues/new), name the file `spanish.txt`, attach the txt file to the issue (drag and drop).
Or if you know how to make a pull request
@ -35,11 +35,11 @@ Or if you know how to make a pull request
## Status
| Locale | Lines | % Done|
|----------|---------|-------|
| Template | 28 | |
| fr | 27/28 | 96% |
| ko | 25/28 | 89% |
| nl | 18/28 | 64% |
| pl | 21/28 | 75% |
| pt_BR | 28/28 | 100% |
| ru | 28/28 | 100% |
| tr | 21/28 | 75% |
| Template | 35 | |
| fr | 23/35 | 65% |
| ko | 20/35 | 57% |
| nl | 14/35 | 40% |
| pl | 17/35 | 48% |
| pt_BR | 23/35 | 65% |
| ru | 35/35 | 100% |
| tr | 17/35 | 48% |

View File

@ -1,4 +1,4 @@
#!/bin/bash
#!/bin/sh
# Version: 6
# This script will convert the *.po files to *.mo files, rebuilding the package/contents/locale folder.
@ -6,9 +6,9 @@
# Eg: contents/locale/fr_CA/LC_MESSAGES/plasma_applet_org.kde.plasma.eventcalendar.mo
DIR=`cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd`
plasmoidName=com.github.adhec.DittoMenu
plasmoidName=com.github.adhec.MenuDitto
widgetName="${plasmoidName##*.}" # Strip namespace
website=https://github.com/adhec/dittoMenuKDE
website=https://github.com/prateekmedia/MenuDitto
bugAddress="$website"
packageRoot=".." # Root of translatable sources
projectName="plasma_applet_${plasmoidName}" # project name

View File

@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: dittomenu\n"
"Report-Msgid-Bugs-To: https://github.com/adhec/dittoMenuKDE\n"
"POT-Creation-Date: 2024-01-03 17:25+0500\n"
"Report-Msgid-Bugs-To: https://github.com/prateekmedia/MenuDitto\n"
"POT-Creation-Date: 2024-10-07 22:12+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: omano\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,44 +17,64 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../contents/code/tools.js
msgid "Remove from Favorites"
msgstr "Enlever des Favoris"
#: ../contents/code/tools.js
msgid "Add to Favorites"
msgstr "Ajouter aux Favoris"
#: ../contents/code/tools.js
msgid "On All Activities"
msgstr "Sur toutes les Activités"
#: ../contents/code/tools.js
msgid "On The Current Activity"
msgstr "Sur l'Activité actuelle"
#: ../contents/code/tools.js
msgid "Show In Favorites"
msgstr "Voir dans les Favoris"
#: ../contents/config/config.qml
msgid "General"
msgstr "Général"
#: ../contents/ui/code/tools.js
msgid "Remove from Favorites"
msgstr "Enlever des Favoris"
#: ../contents/ui/code/tools.js
msgid "Add to Favorites"
msgstr "Ajouter aux Favoris"
#: ../contents/ui/code/tools.js
msgid "On All Activities"
msgstr "Sur toutes les Activités"
#: ../contents/ui/code/tools.js
msgid "On the Current Activity"
msgstr ""
#: ../contents/ui/code/tools.js
msgid "Show in Favorites"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon:"
msgstr "Icône:"
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Open icon chooser dialog"
msgid "Choose..."
msgstr "Choisir..."
msgid "Choose"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Reset icon to default"
msgid "Clear Icon"
msgstr "Supprimer l'icône"
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon size:"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Small"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Medium"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Large"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Huge"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Show favorites first"
msgstr "Voir les Favoris en premier"
@ -87,6 +107,10 @@ msgstr "Nombre de colonnes"
msgid "Number of rows"
msgstr "Nombre de lignes"
#: ../contents/ui/ConfigGeneral.qml
msgid "Show user"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Unhide all hidden applications"
msgstr "Ne plus cacher les applications"
@ -96,7 +120,7 @@ msgid "Unhidden!"
msgstr "Plus cachées!"
#: ../contents/ui/main.qml
msgid "Edit Applications..."
msgid "Edit Applications"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
@ -112,8 +136,12 @@ msgid "Lock Screen"
msgstr "Verrouiller l'écran"
#: ../contents/ui/MenuRepresentation.qml
msgid "Leave ..."
msgstr "Quitter ..."
msgid "Switch User"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "Shutdown"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "Hi, "
@ -136,3 +164,16 @@ msgstr "Toutes les applications"
#~ msgid "A configurable launcher menu"
#~ msgstr "Un menu de lancement configurable"
#~ msgid "On The Current Activity"
#~ msgstr "Sur l'Activité actuelle"
#~ msgid "Show In Favorites"
#~ msgstr "Voir dans les Favoris"
#~ msgctxt "@item:inmenu Open icon chooser dialog"
#~ msgid "Choose..."
#~ msgstr "Choisir..."
#~ msgid "Leave ..."
#~ msgstr "Quitter ..."

View File

@ -1,8 +1,8 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: https://github.com/adhec/dittoMenuKDE\n"
"POT-Creation-Date: 2024-01-03 17:25+0500\n"
"Report-Msgid-Bugs-To: https://github.com/prateekmedia/MenuDitto\n"
"POT-Creation-Date: 2024-10-07 22:12+0500\n"
"PO-Revision-Date: 2021-09-29 09:43+0900\n"
"Last-Translator: \n"
"Language-Team: \n"
@ -14,44 +14,64 @@ msgstr ""
"X-Poedit-Basepath: .\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: ../contents/code/tools.js
msgid "Remove from Favorites"
msgstr "즐겨찾기에서 제거"
#: ../contents/code/tools.js
msgid "Add to Favorites"
msgstr "즐겨찾기에 추가"
#: ../contents/code/tools.js
msgid "On All Activities"
msgstr "모든 활동"
#: ../contents/code/tools.js
msgid "On The Current Activity"
msgstr "현재 활동만"
#: ../contents/code/tools.js
msgid "Show In Favorites"
msgstr "즐겨찾기에 표시"
#: ../contents/config/config.qml
msgid "General"
msgstr "일반"
#: ../contents/ui/code/tools.js
msgid "Remove from Favorites"
msgstr "즐겨찾기에서 제거"
#: ../contents/ui/code/tools.js
msgid "Add to Favorites"
msgstr "즐겨찾기에 추가"
#: ../contents/ui/code/tools.js
msgid "On All Activities"
msgstr "모든 활동"
#: ../contents/ui/code/tools.js
msgid "On the Current Activity"
msgstr ""
#: ../contents/ui/code/tools.js
msgid "Show in Favorites"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon:"
msgstr "아이콘:"
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Open icon chooser dialog"
msgid "Choose..."
msgstr "선택..."
msgid "Choose"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Reset icon to default"
msgid "Clear Icon"
msgstr "아이콘 초기화"
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon size:"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Small"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Medium"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Large"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Huge"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Show favorites first"
msgstr "즐겨찾기 먼저 표시"
@ -84,6 +104,10 @@ msgstr ""
msgid "Number of rows"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Show user"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Unhide all hidden applications"
msgstr "모든 숨겨진 프로그램 복구"
@ -93,8 +117,8 @@ msgid "Unhidden!"
msgstr "복구됨!"
#: ../contents/ui/main.qml
msgid "Edit Applications..."
msgstr "프로그램 편집..."
msgid "Edit Applications"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "System Preferences"
@ -109,8 +133,12 @@ msgid "Lock Screen"
msgstr "잠금"
#: ../contents/ui/MenuRepresentation.qml
msgid "Leave ..."
msgstr "떠나기..."
msgid "Switch User"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "Shutdown"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "Hi, "
@ -133,3 +161,19 @@ msgstr "모든 프로그램"
#~ msgid "A configurable launcher menu"
#~ msgstr "프로그램 실행기"
#~ msgid "On The Current Activity"
#~ msgstr "현재 활동만"
#~ msgid "Show In Favorites"
#~ msgstr "즐겨찾기에 표시"
#~ msgctxt "@item:inmenu Open icon chooser dialog"
#~ msgid "Choose..."
#~ msgstr "선택..."
#~ msgid "Edit Applications..."
#~ msgstr "프로그램 편집..."
#~ msgid "Leave ..."
#~ msgstr "떠나기..."

View File

@ -6,9 +6,9 @@
# https://invent.kde.org/sysadmin/l10n-scripty/-/blob/master/extract-messages.sh
DIR=`cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd`
plasmoidName=com.github.adhec.DittoMenu
plasmoidName=com.github.adhec.MenuDitto
widgetName="${plasmoidName##*.}" # Strip namespace
website=https://github.com/adhec/dittoMenuKDE
website=https://github.com/prateekmedia/MenuDitto
bugAddress="$website"
packageRoot=".." # Root of translatable sources
projectName="plasma_applet_${plasmoidName}" # project name

View File

@ -6,8 +6,8 @@
msgid ""
msgstr ""
"Project-Id-Version: dittomenu\n"
"Report-Msgid-Bugs-To: https://github.com/adhec/dittoMenuKDE\n"
"POT-Creation-Date: 2024-01-03 17:25+0500\n"
"Report-Msgid-Bugs-To: https://github.com/prateekmedia/MenuDitto\n"
"POT-Creation-Date: 2024-10-07 22:12+0500\n"
"PO-Revision-Date: 2022-01-01 20:09+0100\n"
"Last-Translator: Heimen Stoffels <vistausss@fastmail.com>\n"
"Language-Team: \n"
@ -18,44 +18,64 @@ msgstr ""
"X-Generator: Poedit 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../contents/code/tools.js
msgid "Remove from Favorites"
msgstr "Verwijderen uit favorieten"
#: ../contents/code/tools.js
msgid "Add to Favorites"
msgstr "Toevoegen aan favorieten"
#: ../contents/code/tools.js
msgid "On All Activities"
msgstr "Op alle activiteiten"
#: ../contents/code/tools.js
msgid "On The Current Activity"
msgstr "Op de huidige activiteit"
#: ../contents/code/tools.js
msgid "Show In Favorites"
msgstr "Toevoegen aan favorieten"
#: ../contents/config/config.qml
msgid "General"
msgstr "Algemeen"
#: ../contents/ui/code/tools.js
msgid "Remove from Favorites"
msgstr "Verwijderen uit favorieten"
#: ../contents/ui/code/tools.js
msgid "Add to Favorites"
msgstr "Toevoegen aan favorieten"
#: ../contents/ui/code/tools.js
msgid "On All Activities"
msgstr "Op alle activiteiten"
#: ../contents/ui/code/tools.js
msgid "On the Current Activity"
msgstr ""
#: ../contents/ui/code/tools.js
msgid "Show in Favorites"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon:"
msgstr "Pictogram:"
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Open icon chooser dialog"
msgid "Choose..."
msgstr "Kiezen…"
msgid "Choose"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Reset icon to default"
msgid "Clear Icon"
msgstr "Pictogram verwijderen"
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon size:"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Small"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Medium"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Large"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Huge"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Show favorites first"
msgstr "Favorieten bovenaan tonen"
@ -88,6 +108,10 @@ msgstr ""
msgid "Number of rows"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Show user"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Unhide all hidden applications"
msgstr "Alle verborgen programma's zichtbaar maken"
@ -97,8 +121,8 @@ msgid "Unhidden!"
msgstr "Alles programma's zijn weer zichtbaar!"
#: ../contents/ui/main.qml
msgid "Edit Applications..."
msgstr "Programma's bewerken…"
msgid "Edit Applications"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "System Preferences"
@ -113,7 +137,11 @@ msgid "Lock Screen"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "Leave ..."
msgid "Switch User"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "Shutdown"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
@ -138,6 +166,19 @@ msgstr ""
#~ msgid "A configurable launcher menu"
#~ msgstr "Een instelbare programmastarter"
#~ msgid "On The Current Activity"
#~ msgstr "Op de huidige activiteit"
#~ msgid "Show In Favorites"
#~ msgstr "Toevoegen aan favorieten"
#~ msgctxt "@item:inmenu Open icon chooser dialog"
#~ msgid "Choose..."
#~ msgstr "Kiezen…"
#~ msgid "Edit Applications..."
#~ msgstr "Programma's bewerken…"
#~ msgctxt "@action"
#~ msgid "Lock Screen"
#~ msgstr "Scherm vergrendelen"

View File

@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: dittomenu\n"
"Report-Msgid-Bugs-To: https://github.com/adhec/dittoMenuKDE\n"
"POT-Creation-Date: 2024-01-03 17:25+0500\n"
"Report-Msgid-Bugs-To: https://github.com/prateekmedia/MenuDitto\n"
"POT-Creation-Date: 2024-10-07 22:12+0500\n"
"PO-Revision-Date: 2022-04-05 10:40+0100\n"
"Last-Translator: Krzysztof Korab <korapps@outlook.com>\n"
"Language-Team: \n"
@ -17,44 +17,64 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../contents/code/tools.js
msgid "Remove from Favorites"
msgstr "Usuń z ulubionych"
#: ../contents/code/tools.js
msgid "Add to Favorites"
msgstr "Dodaj do ulubionych"
#: ../contents/code/tools.js
msgid "On All Activities"
msgstr "Na wszystkich aktywnościach"
#: ../contents/code/tools.js
msgid "On The Current Activity"
msgstr "Na bieżącej aktywności"
#: ../contents/code/tools.js
msgid "Show In Favorites"
msgstr "Pokaż w ulubionych"
#: ../contents/config/config.qml
msgid "General"
msgstr "Ogólne"
#: ../contents/ui/code/tools.js
msgid "Remove from Favorites"
msgstr "Usuń z ulubionych"
#: ../contents/ui/code/tools.js
msgid "Add to Favorites"
msgstr "Dodaj do ulubionych"
#: ../contents/ui/code/tools.js
msgid "On All Activities"
msgstr "Na wszystkich aktywnościach"
#: ../contents/ui/code/tools.js
msgid "On the Current Activity"
msgstr ""
#: ../contents/ui/code/tools.js
msgid "Show in Favorites"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon:"
msgstr "Ikona:"
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Open icon chooser dialog"
msgid "Choose..."
msgstr "Wybierz..."
msgid "Choose"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Reset icon to default"
msgid "Clear Icon"
msgstr "Wyczyść ikonę"
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon size:"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Small"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Medium"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Large"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Huge"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Show favorites first"
msgstr "Najpierw pokaż ulubione"
@ -87,6 +107,10 @@ msgstr ""
msgid "Number of rows"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Show user"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Unhide all hidden applications"
msgstr "Uwidocznij wszystkie ukryte aplikacje"
@ -96,8 +120,8 @@ msgid "Unhidden!"
msgstr "Wszystkie programy są widoczne!"
#: ../contents/ui/main.qml
msgid "Edit Applications..."
msgstr "Edytuj programy..."
msgid "Edit Applications"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "System Preferences"
@ -112,7 +136,11 @@ msgid "Lock Screen"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "Leave ..."
msgid "Switch User"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "Shutdown"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
@ -134,6 +162,19 @@ msgstr ""
#~ msgid "A configurable launcher menu"
#~ msgstr "Konfigurowalne menu uruchamiania programów"
#~ msgid "On The Current Activity"
#~ msgstr "Na bieżącej aktywności"
#~ msgid "Show In Favorites"
#~ msgstr "Pokaż w ulubionych"
#~ msgctxt "@item:inmenu Open icon chooser dialog"
#~ msgid "Choose..."
#~ msgstr "Wybierz..."
#~ msgid "Edit Applications..."
#~ msgstr "Edytuj programy..."
#~ msgctxt "@action"
#~ msgid "Lock Screen"
#~ msgstr "Zablokuj ekran"

View File

@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: dittomenu\n"
"Report-Msgid-Bugs-To: https://github.com/adhec/dittoMenuKDE\n"
"POT-Creation-Date: 2024-01-03 17:25+0500\n"
"Report-Msgid-Bugs-To: https://github.com/prateekmedia/MenuDitto\n"
"POT-Creation-Date: 2024-10-07 22:12+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,44 +17,64 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../contents/code/tools.js
msgid "Remove from Favorites"
msgstr "Remover dos favoritos"
#: ../contents/code/tools.js
msgid "Add to Favorites"
msgstr "Adicionar aos Favoritos"
#: ../contents/code/tools.js
msgid "On All Activities"
msgstr "Em todas as atividades"
#: ../contents/code/tools.js
msgid "On The Current Activity"
msgstr "Na atividade atual"
#: ../contents/code/tools.js
msgid "Show In Favorites"
msgstr "Exibir nos favoritos"
#: ../contents/config/config.qml
msgid "General"
msgstr "Geral"
#: ../contents/ui/code/tools.js
msgid "Remove from Favorites"
msgstr "Remover dos favoritos"
#: ../contents/ui/code/tools.js
msgid "Add to Favorites"
msgstr "Adicionar aos Favoritos"
#: ../contents/ui/code/tools.js
msgid "On All Activities"
msgstr "Em todas as atividades"
#: ../contents/ui/code/tools.js
msgid "On the Current Activity"
msgstr ""
#: ../contents/ui/code/tools.js
msgid "Show in Favorites"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon:"
msgstr "Ícone"
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Open icon chooser dialog"
msgid "Choose..."
msgstr "Procurar"
msgid "Choose"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Reset icon to default"
msgid "Clear Icon"
msgstr "Resetar Ícone"
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon size:"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Small"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Medium"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Large"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Huge"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Show favorites first"
msgstr "Exbir os Favoritros primeiro"
@ -87,6 +107,10 @@ msgstr "Numero de colunas"
msgid "Number of rows"
msgstr "Numero de filas"
#: ../contents/ui/ConfigGeneral.qml
msgid "Show user"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Unhide all hidden applications"
msgstr "Mostrar aplicativos ocultos"
@ -96,8 +120,8 @@ msgid "Unhidden!"
msgstr "Reexibido"
#: ../contents/ui/main.qml
msgid "Edit Applications..."
msgstr "Editar Programa"
msgid "Edit Applications"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "System Preferences"
@ -112,8 +136,12 @@ msgid "Lock Screen"
msgstr "Tela de bloqueio"
#: ../contents/ui/MenuRepresentation.qml
msgid "Leave ..."
msgstr "Sair ..."
msgid "Switch User"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "Shutdown"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "Hi, "
@ -136,3 +164,19 @@ msgstr "Todos os programas"
#~ msgid "A configurable launcher menu"
#~ msgstr "Configuração do Menu Iniciar"
#~ msgid "On The Current Activity"
#~ msgstr "Na atividade atual"
#~ msgid "Show In Favorites"
#~ msgstr "Exibir nos favoritos"
#~ msgctxt "@item:inmenu Open icon chooser dialog"
#~ msgid "Choose..."
#~ msgstr "Procurar"
#~ msgid "Edit Applications..."
#~ msgstr "Editar Programa"
#~ msgid "Leave ..."
#~ msgstr "Sair ..."

View File

@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: dittomenu\n"
"Report-Msgid-Bugs-To: https://github.com/adhec/dittoMenuKDE\n"
"POT-Creation-Date: 2024-01-03 17:25+0500\n"
"Report-Msgid-Bugs-To: https://github.com/prateekmedia/MenuDitto\n"
"POT-Creation-Date: 2024-10-07 22:12+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Edward Karate <edward.karate@ya.ru>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,47 +17,67 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../contents/code/tools.js
msgid "Remove from Favorites"
msgstr "Убрать из избранного"
#: ../contents/code/tools.js
msgid "Add to Favorites"
msgstr "Добавить в избранное"
#: ../contents/code/tools.js
msgid "On All Activities"
msgstr "По всем видам деятельности"
#: ../contents/code/tools.js
msgid "On The Current Activity"
msgstr "О текущей деятельности"
#: ../contents/code/tools.js
msgid "Show In Favorites"
msgstr "Показать в Избранном"
#: ../contents/config/config.qml
msgid "General"
msgstr "Общие"
#: ../contents/ui/code/tools.js
msgid "Remove from Favorites"
msgstr "Убрать из избранных"
#: ../contents/ui/code/tools.js
msgid "Add to Favorites"
msgstr "Добавить в избранные"
#: ../contents/ui/code/tools.js
msgid "On All Activities"
msgstr "По всем видам деятельности"
#: ../contents/ui/code/tools.js
msgid "On the Current Activity"
msgstr "В текущей активности"
#: ../contents/ui/code/tools.js
msgid "Show in Favorites"
msgstr "Показать в Избранных"
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon:"
msgstr "Значок"
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Open icon chooser dialog"
msgid "Choose..."
msgstr "Выбрать..."
msgid "Choose"
msgstr "Выбрать"
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Reset icon to default"
msgid "Clear Icon"
msgstr "Очистить значок"
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon size:"
msgstr "Размер значков"
#: ../contents/ui/ConfigGeneral.qml
msgid "Small"
msgstr "Маленький"
#: ../contents/ui/ConfigGeneral.qml
msgid "Medium"
msgstr "Средний"
#: ../contents/ui/ConfigGeneral.qml
msgid "Large"
msgstr "Большой"
#: ../contents/ui/ConfigGeneral.qml
msgid "Huge"
msgstr "Огромный"
#: ../contents/ui/ConfigGeneral.qml
msgid "Show favorites first"
msgstr "Сначала показать избранное"
msgstr "Сначала показать избранные"
#: ../contents/ui/ConfigGeneral.qml
msgid "Menu position"
@ -65,7 +85,7 @@ msgstr "Положение меню"
#: ../contents/ui/ConfigGeneral.qml
msgid "Default"
msgstr "По умолчанию"
msgstr "По-умолчанию"
#: ../contents/ui/ConfigGeneral.qml
msgid "Center"
@ -87,6 +107,10 @@ msgstr "Количество колонок"
msgid "Number of rows"
msgstr "Количество строк"
#: ../contents/ui/ConfigGeneral.qml
msgid "Show user"
msgstr "Показывать пользователя"
#: ../contents/ui/ConfigGeneral.qml
msgid "Unhide all hidden applications"
msgstr "Показать все скрытые приложения"
@ -96,8 +120,8 @@ msgid "Unhidden!"
msgstr "Показаны!"
#: ../contents/ui/main.qml
msgid "Edit Applications..."
msgstr "Редактировать меню..."
msgid "Edit Applications"
msgstr "Редактировать приложения…"
#: ../contents/ui/MenuRepresentation.qml
msgid "System Preferences"
@ -112,8 +136,12 @@ msgid "Lock Screen"
msgstr "Заблокировать"
#: ../contents/ui/MenuRepresentation.qml
msgid "Leave ..."
msgstr "Выход ..."
msgid "Switch User"
msgstr "Сменить пользователя"
#: ../contents/ui/MenuRepresentation.qml
msgid "Shutdown"
msgstr "Выключение"
#: ../contents/ui/MenuRepresentation.qml
msgid "Hi, "
@ -121,11 +149,11 @@ msgstr "Привет, "
#: ../contents/ui/MenuRepresentation.qml
msgid "Type here to search ..."
msgstr "Введите текст для поиска..."
msgstr "Введите текст для поиска ..."
#: ../contents/ui/MenuRepresentation.qml
msgid "Favorites"
msgstr "Избранное"
msgstr "Избранные"
#: ../contents/ui/MenuRepresentation.qml
msgid "All apps"
@ -137,6 +165,22 @@ msgstr "Все приложения"
#~ msgid "A configurable launcher menu"
#~ msgstr "Настраиваемое меню приложений"
#~ msgid "On The Current Activity"
#~ msgstr "О текущей деятельности"
#~ msgid "Show In Favorites"
#~ msgstr "Показать в Избранных"
#~ msgctxt "@item:inmenu Open icon chooser dialog"
#~ msgid "Choose..."
#~ msgstr "Выбрать..."
#~ msgid "Edit Applications..."
#~ msgstr "Редактировать меню..."
#~ msgid "Leave ..."
#~ msgstr "Выход ..."
#~ msgctxt "@action"
#~ msgid "Lock Screen"
#~ msgstr "Заблокировать"

View File

@ -1,14 +1,14 @@
# Translation of DittoMenu in LANGUAGE
# Translation of MenuDitto in LANGUAGE
# Copyright (C) 2024
# This file is distributed under the same license as the DittoMenu package.
# This file is distributed under the same license as the MenuDitto package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: DittoMenu\n"
"Report-Msgid-Bugs-To: https://github.com/adhec/dittoMenuKDE\n"
"POT-Creation-Date: 2024-01-03 17:25+0500\n"
"Project-Id-Version: MenuDitto\n"
"Report-Msgid-Bugs-To: https://github.com/prateekmedia/MenuDitto\n"
"POT-Creation-Date: 2024-10-07 22:12+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,28 +17,28 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../contents/code/tools.js
#: ../contents/config/config.qml
msgid "General"
msgstr ""
#: ../contents/ui/code/tools.js
msgid "Remove from Favorites"
msgstr ""
#: ../contents/code/tools.js
#: ../contents/ui/code/tools.js
msgid "Add to Favorites"
msgstr ""
#: ../contents/code/tools.js
#: ../contents/ui/code/tools.js
msgid "On All Activities"
msgstr ""
#: ../contents/code/tools.js
msgid "On The Current Activity"
#: ../contents/ui/code/tools.js
msgid "On the Current Activity"
msgstr ""
#: ../contents/code/tools.js
msgid "Show In Favorites"
msgstr ""
#: ../contents/config/config.qml
msgid "General"
#: ../contents/ui/code/tools.js
msgid "Show in Favorites"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
@ -47,7 +47,7 @@ msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Open icon chooser dialog"
msgid "Choose..."
msgid "Choose"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
@ -55,6 +55,26 @@ msgctxt "@item:inmenu Reset icon to default"
msgid "Clear Icon"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon size:"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Small"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Medium"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Large"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Huge"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Show favorites first"
msgstr ""
@ -87,6 +107,10 @@ msgstr ""
msgid "Number of rows"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Show user"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Unhide all hidden applications"
msgstr ""
@ -96,7 +120,7 @@ msgid "Unhidden!"
msgstr ""
#: ../contents/ui/main.qml
msgid "Edit Applications..."
msgid "Edit Applications"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
@ -112,7 +136,11 @@ msgid "Lock Screen"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "Leave ..."
msgid "Switch User"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "Shutdown"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml

View File

@ -7,8 +7,8 @@
msgid ""
msgstr ""
"Project-Id-Version: dittomenu\n"
"Report-Msgid-Bugs-To: https://github.com/adhec/dittoMenuKDE\n"
"POT-Creation-Date: 2024-01-03 17:25+0500\n"
"Report-Msgid-Bugs-To: https://github.com/prateekmedia/MenuDitto\n"
"POT-Creation-Date: 2024-10-07 22:12+0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -20,44 +20,64 @@ msgstr ""
"X-Language: tr_TR\n"
"X-Source-Language: C\n"
#: ../contents/code/tools.js
msgid "Remove from Favorites"
msgstr "Favorilerden Çıkar"
#: ../contents/code/tools.js
msgid "Add to Favorites"
msgstr "Favorilerden Ekle"
#: ../contents/code/tools.js
msgid "On All Activities"
msgstr "Tüm Etkinliklerde"
#: ../contents/code/tools.js
msgid "On The Current Activity"
msgstr "Mevcut Etkinlik Üzerine"
#: ../contents/code/tools.js
msgid "Show In Favorites"
msgstr "Favorilerde Göster"
#: ../contents/config/config.qml
msgid "General"
msgstr "Genel"
#: ../contents/ui/code/tools.js
msgid "Remove from Favorites"
msgstr "Favorilerden Çıkar"
#: ../contents/ui/code/tools.js
msgid "Add to Favorites"
msgstr "Favorilerden Ekle"
#: ../contents/ui/code/tools.js
msgid "On All Activities"
msgstr "Tüm Etkinliklerde"
#: ../contents/ui/code/tools.js
msgid "On the Current Activity"
msgstr ""
#: ../contents/ui/code/tools.js
msgid "Show in Favorites"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon:"
msgstr "Sİmge:"
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Open icon chooser dialog"
msgid "Choose..."
msgstr "Seçmek..."
msgid "Choose"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgctxt "@item:inmenu Reset icon to default"
msgid "Clear Icon"
msgstr "Simgeyi Temizle"
#: ../contents/ui/ConfigGeneral.qml
msgid "Icon size:"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Small"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Medium"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Large"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Huge"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Show favorites first"
msgstr "Önce favorileri göster"
@ -90,6 +110,10 @@ msgstr ""
msgid "Number of rows"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Show user"
msgstr ""
#: ../contents/ui/ConfigGeneral.qml
msgid "Unhide all hidden applications"
msgstr "Tüm gizli uygulamaları göster"
@ -99,8 +123,8 @@ msgid "Unhidden!"
msgstr "Gizli!"
#: ../contents/ui/main.qml
msgid "Edit Applications..."
msgstr "Uygulamaları Düzenle..."
msgid "Edit Applications"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "System Preferences"
@ -115,7 +139,11 @@ msgid "Lock Screen"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "Leave ..."
msgid "Switch User"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
msgid "Shutdown"
msgstr ""
#: ../contents/ui/MenuRepresentation.qml
@ -140,6 +168,19 @@ msgstr ""
#~ msgid "A configurable launcher menu"
#~ msgstr "Yapılandırılabilir bir başlatıcı menüsü"
#~ msgid "On The Current Activity"
#~ msgstr "Mevcut Etkinlik Üzerine"
#~ msgid "Show In Favorites"
#~ msgstr "Favorilerde Göster"
#~ msgctxt "@item:inmenu Open icon chooser dialog"
#~ msgid "Choose..."
#~ msgstr "Seçmek..."
#~ msgid "Edit Applications..."
#~ msgstr "Uygulamaları Düzenle..."
#~ msgctxt "@action"
#~ msgid "Lock Screen"
#~ msgstr "Kilit Ekranı"

View File

@ -1,5 +1,6 @@
#!/bin/bash
git add . && git commit -m "Update" && git push
git add . && git commit -m "Update"
git push
echo "Ready"