update
This commit is contained in:
@@ -2,10 +2,7 @@ import QtQuick
|
|||||||
import QtQuick.Controls
|
import QtQuick.Controls
|
||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
import Quickshell
|
import Quickshell
|
||||||
import Quickshell.Io
|
|
||||||
import Quickshell.Services.Pipewire
|
|
||||||
import qs.Commons
|
import qs.Commons
|
||||||
import qs.Modules.Bar.Extras
|
|
||||||
import qs.Services.UI
|
import qs.Services.UI
|
||||||
import qs.Widgets
|
import qs.Widgets
|
||||||
|
|
||||||
@@ -26,12 +23,15 @@ Item {
|
|||||||
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
|
readonly property real capsuleHeight: Style.getCapsuleHeightForScreen(screenName)
|
||||||
readonly property real barFontSize: Style.getBarFontSizeForScreen(screenName)
|
readonly property real barFontSize: Style.getBarFontSizeForScreen(screenName)
|
||||||
|
|
||||||
property bool micActive: false
|
// Access main instance for state
|
||||||
property bool camActive: false
|
readonly property var mainInstance: pluginApi?.mainInstance
|
||||||
property bool scrActive: false
|
|
||||||
property var micApps: []
|
property bool micActive: mainInstance ? mainInstance.micActive : false
|
||||||
property var camApps: []
|
property bool camActive: mainInstance ? mainInstance.camActive : false
|
||||||
property var scrApps: []
|
property bool scrActive: mainInstance ? mainInstance.scrActive : false
|
||||||
|
property var micApps: mainInstance ? mainInstance.micApps : []
|
||||||
|
property var camApps: mainInstance ? mainInstance.camApps : []
|
||||||
|
property var scrApps: mainInstance ? mainInstance.scrApps : []
|
||||||
|
|
||||||
property var cfg: pluginApi?.pluginSettings || ({})
|
property var cfg: pluginApi?.pluginSettings || ({})
|
||||||
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
|
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
|
||||||
@@ -63,156 +63,6 @@ Item {
|
|||||||
visible: root.isVisible
|
visible: root.isVisible
|
||||||
opacity: root.isVisible ? 1.0 : 0.0
|
opacity: root.isVisible ? 1.0 : 0.0
|
||||||
|
|
||||||
PwObjectTracker {
|
|
||||||
objects: Pipewire.ready ? Pipewire.nodes.values : []
|
|
||||||
}
|
|
||||||
|
|
||||||
Process {
|
|
||||||
id: cameraCheckProcess
|
|
||||||
running: false
|
|
||||||
|
|
||||||
command: ["sh", "-c", "for dev in /dev/video*; do [ -e \"$dev\" ] && [ -n \"$(find /proc/[0-9]*/fd/ -lname \"$dev\" 2>/dev/null | head -n1)\" ] && echo \"active\" && exit 0; done; exit 1"]
|
|
||||||
|
|
||||||
onExited: (code, status) => {
|
|
||||||
var isActive = code === 0;
|
|
||||||
root.camActive = isActive;
|
|
||||||
|
|
||||||
if (isActive) {
|
|
||||||
cameraAppsProcess.running = true;
|
|
||||||
} else {
|
|
||||||
root.camApps = [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Process {
|
|
||||||
id: cameraAppsProcess
|
|
||||||
running: false
|
|
||||||
|
|
||||||
command: ["sh", "-c", "for dev in /dev/video*; do [ -e \"$dev\" ] && for fd in /proc/[0-9]*/fd/*; do [ -L \"$fd\" ] && [ \"$(readlink \"$fd\" 2>/dev/null)\" = \"$dev\" ] && ps -p \"$(echo \"$fd\" | cut -d/ -f3)\" -o comm= 2>/dev/null; done; done | sort -u | tr '\\n' ',' | sed 's/,$//'"]
|
|
||||||
|
|
||||||
onExited: (code, status) => {
|
|
||||||
if (stdout) {
|
|
||||||
var appsString = stdout.trim();
|
|
||||||
var apps = appsString.length > 0 ? appsString.split(',') : [];
|
|
||||||
root.camApps = apps;
|
|
||||||
} else {
|
|
||||||
root.camApps = [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Timer {
|
|
||||||
interval: 1000
|
|
||||||
repeat: true
|
|
||||||
running: true
|
|
||||||
triggeredOnStart: true
|
|
||||||
onTriggered: updatePrivacyState()
|
|
||||||
}
|
|
||||||
|
|
||||||
function hasNodeLinks(node, links) {
|
|
||||||
for (var i = 0; i < links.length; i++) {
|
|
||||||
var link = links[i];
|
|
||||||
if (link && (link.source === node || link.target === node)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getAppName(node) {
|
|
||||||
return node.properties["application.name"] || node.nickname || node.name || "";
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateMicrophoneState(nodes, links) {
|
|
||||||
var appNames = [];
|
|
||||||
var isActive = false;
|
|
||||||
|
|
||||||
for (var i = 0; i < nodes.length; i++) {
|
|
||||||
var node = nodes[i];
|
|
||||||
if (!node || !node.isStream || !node.audio || node.isSink) continue;
|
|
||||||
if (!hasNodeLinks(node, links) || !node.properties) continue;
|
|
||||||
|
|
||||||
var mediaClass = node.properties["media.class"] || "";
|
|
||||||
if (mediaClass === "Stream/Input/Audio") {
|
|
||||||
if (node.properties["stream.capture.sink"] === "true") {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
isActive = true;
|
|
||||||
var appName = getAppName(node);
|
|
||||||
if (appName && appNames.indexOf(appName) === -1) {
|
|
||||||
appNames.push(appName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
root.micActive = isActive;
|
|
||||||
root.micApps = appNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateCameraState() {
|
|
||||||
cameraCheckProcess.running = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
function isScreenShareNode(node) {
|
|
||||||
if (!node.properties) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var mediaClass = node.properties["media.class"] || "";
|
|
||||||
|
|
||||||
if (mediaClass.indexOf("Audio") >= 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mediaClass.indexOf("Video") === -1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
var mediaName = (node.properties["media.name"] || "").toLowerCase();
|
|
||||||
|
|
||||||
if (mediaName.match(/^(xdph-streaming|gsr-default|game capture|screen|desktop|display|cast|webrtc|v4l2)/) ||
|
|
||||||
mediaName === "gsr-default_output" ||
|
|
||||||
mediaName.match(/screen-cast|screen-capture|desktop-capture|monitor-capture|window-capture|game-capture/i)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateScreenShareState(nodes, links) {
|
|
||||||
var appNames = [];
|
|
||||||
var isActive = false;
|
|
||||||
|
|
||||||
for (var i = 0; i < nodes.length; i++) {
|
|
||||||
var node = nodes[i];
|
|
||||||
if (!node || !hasNodeLinks(node, links) || !node.properties) continue;
|
|
||||||
|
|
||||||
if (isScreenShareNode(node)) {
|
|
||||||
isActive = true;
|
|
||||||
var appName = getAppName(node);
|
|
||||||
if (appName && appNames.indexOf(appName) === -1) {
|
|
||||||
appNames.push(appName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
root.scrActive = isActive;
|
|
||||||
root.scrApps = appNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
function updatePrivacyState() {
|
|
||||||
if (!Pipewire.ready) return;
|
|
||||||
|
|
||||||
var nodes = Pipewire.nodes.values || [];
|
|
||||||
var links = Pipewire.links.values || [];
|
|
||||||
|
|
||||||
updateMicrophoneState(nodes, links);
|
|
||||||
updateCameraState();
|
|
||||||
updateScreenShareState(nodes, links);
|
|
||||||
}
|
|
||||||
|
|
||||||
function buildTooltip() {
|
function buildTooltip() {
|
||||||
var parts = [];
|
var parts = [];
|
||||||
|
|
||||||
@@ -301,12 +151,14 @@ Item {
|
|||||||
|
|
||||||
MouseArea {
|
MouseArea {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
acceptedButtons: Qt.RightButton
|
acceptedButtons: Qt.RightButton | Qt.LeftButton
|
||||||
hoverEnabled: true
|
hoverEnabled: true
|
||||||
|
|
||||||
onClicked: function (mouse) {
|
onClicked: function (mouse) {
|
||||||
if (mouse.button === Qt.RightButton) {
|
if (mouse.button === Qt.RightButton) {
|
||||||
PanelService.showContextMenu(contextMenu, root, screen);
|
PanelService.showContextMenu(contextMenu, root, screen);
|
||||||
|
} else if (mouse.button === Qt.LeftButton) {
|
||||||
|
if (pluginApi) pluginApi.openPanel(root.screen, root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
282
home/aiden/.config/noctalia/plugins/privacy-indicator/Main.qml
Normal file
282
home/aiden/.config/noctalia/plugins/privacy-indicator/Main.qml
Normal file
@@ -0,0 +1,282 @@
|
|||||||
|
import QtQuick
|
||||||
|
import Quickshell
|
||||||
|
import Quickshell.Io
|
||||||
|
import Quickshell.Services.Pipewire
|
||||||
|
import qs.Commons
|
||||||
|
import qs.Services.UI
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
property var pluginApi: null
|
||||||
|
|
||||||
|
// --- Logic extracted from BarWidget.qml ---
|
||||||
|
|
||||||
|
property bool micActive: false
|
||||||
|
property bool camActive: false
|
||||||
|
property bool scrActive: false
|
||||||
|
property var micApps: []
|
||||||
|
property var camApps: []
|
||||||
|
property var scrApps: []
|
||||||
|
|
||||||
|
property var accessHistory: []
|
||||||
|
|
||||||
|
// Previous states for history tracking
|
||||||
|
property var _prevMicApps: []
|
||||||
|
property var _prevCamApps: []
|
||||||
|
property var _prevScrApps: []
|
||||||
|
|
||||||
|
PwObjectTracker {
|
||||||
|
objects: Pipewire.ready ? Pipewire.nodes.values : []
|
||||||
|
}
|
||||||
|
|
||||||
|
Process {
|
||||||
|
id: cameraDetectionProcess
|
||||||
|
running: false
|
||||||
|
command: ["sh", "-c", "for dev in /sys/class/video4linux/video*; do [ -e \"$dev/name\" ] && grep -qv 'Metadata' \"$dev/name\" && dev_name=$(basename \"$dev\") && find /proc/[0-9]*/fd -lname \"/dev/$dev_name\" 2>/dev/null; done | cut -d/ -f3 | xargs -r ps -o comm= -p | sort -u | tr '\\n' ',' | sed 's/,$//'"]
|
||||||
|
stdout: StdioCollector {
|
||||||
|
onStreamFinished: {
|
||||||
|
var appsString = this.text.trim();
|
||||||
|
var apps = appsString.length > 0 ? appsString.split(',') : [];
|
||||||
|
root.camApps = apps;
|
||||||
|
root.camActive = apps.length > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Timer {
|
||||||
|
interval: 1000
|
||||||
|
repeat: true
|
||||||
|
running: true
|
||||||
|
triggeredOnStart: true
|
||||||
|
onTriggered: updatePrivacyState()
|
||||||
|
}
|
||||||
|
|
||||||
|
function hasNodeLinks(node, links) {
|
||||||
|
for (var i = 0; i < links.length; i++) {
|
||||||
|
var link = links[i];
|
||||||
|
if (link && (link.source === node || link.target === node)) return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAppName(node) {
|
||||||
|
return node.properties["application.name"] || node.nickname || node.name || "";
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateMicrophoneState(nodes, links) {
|
||||||
|
var appNames = [];
|
||||||
|
var isActive = false;
|
||||||
|
for (var i = 0; i < nodes.length; i++) {
|
||||||
|
var node = nodes[i];
|
||||||
|
if (!node || !node.isStream || !node.audio || node.isSink) continue;
|
||||||
|
if (!hasNodeLinks(node, links) || !node.properties) continue;
|
||||||
|
var mediaClass = node.properties["media.class"] || "";
|
||||||
|
if (mediaClass === "Stream/Input/Audio") {
|
||||||
|
if (node.properties["stream.capture.sink"] === "true") continue;
|
||||||
|
isActive = true;
|
||||||
|
var appName = getAppName(node);
|
||||||
|
if (appName && appNames.indexOf(appName) === -1) appNames.push(appName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
root.micActive = isActive;
|
||||||
|
root.micApps = appNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateCameraState() {
|
||||||
|
cameraDetectionProcess.running = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isScreenShareNode(node) {
|
||||||
|
if (!node.properties) return false;
|
||||||
|
var mediaClass = node.properties["media.class"] || "";
|
||||||
|
if (mediaClass.indexOf("Audio") >= 0) return false;
|
||||||
|
if (mediaClass.indexOf("Video") === -1) return false;
|
||||||
|
var mediaName = (node.properties["media.name"] || "").toLowerCase();
|
||||||
|
if (mediaName.match(/^(xdph-streaming|gsr-default|game capture|screen|desktop|display|cast|webrtc|v4l2)/) ||
|
||||||
|
mediaName === "gsr-default_output" ||
|
||||||
|
mediaName.match(/screen-cast|screen-capture|desktop-capture|monitor-capture|window-capture|game-capture/i)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateScreenShareState(nodes, links) {
|
||||||
|
var appNames = [];
|
||||||
|
var isActive = false;
|
||||||
|
for (var i = 0; i < nodes.length; i++) {
|
||||||
|
var node = nodes[i];
|
||||||
|
if (!node || !hasNodeLinks(node, links) || !node.properties) continue;
|
||||||
|
if (isScreenShareNode(node)) {
|
||||||
|
isActive = true;
|
||||||
|
var appName = getAppName(node);
|
||||||
|
if (appName && appNames.indexOf(appName) === -1) appNames.push(appName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
root.scrActive = isActive;
|
||||||
|
root.scrApps = appNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updatePrivacyState() {
|
||||||
|
if (!Pipewire.ready) return;
|
||||||
|
var nodes = Pipewire.nodes.values || [];
|
||||||
|
var links = Pipewire.links.values || [];
|
||||||
|
updateMicrophoneState(nodes, links);
|
||||||
|
updateCameraState();
|
||||||
|
updateScreenShareState(nodes, links);
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- History Persistence ---
|
||||||
|
|
||||||
|
property string stateFile: ""
|
||||||
|
property bool isLoaded: false
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
// Setup state file path
|
||||||
|
Qt.callLater(() => {
|
||||||
|
if (typeof Settings !== 'undefined' && Settings.cacheDir) {
|
||||||
|
stateFile = Settings.cacheDir + "privacy-history.json";
|
||||||
|
historyFileView.path = stateFile;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
FileView {
|
||||||
|
id: historyFileView
|
||||||
|
printErrors: false
|
||||||
|
watchChanges: false
|
||||||
|
|
||||||
|
adapter: JsonAdapter {
|
||||||
|
id: adapter
|
||||||
|
property var history: []
|
||||||
|
}
|
||||||
|
|
||||||
|
onLoaded: {
|
||||||
|
root.isLoaded = true;
|
||||||
|
if (adapter.history) {
|
||||||
|
// Restore history
|
||||||
|
root.accessHistory = adapter.history;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onLoadFailed: error => {
|
||||||
|
// If file doesn't exist (error 2), we are ready to save new data
|
||||||
|
if (error === 2) {
|
||||||
|
root.isLoaded = true;
|
||||||
|
} else {
|
||||||
|
console.error("PrivacyIndicator: Failed to load history file:", error);
|
||||||
|
root.isLoaded = true; // Try to continue anyway
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveHistory() {
|
||||||
|
if (!stateFile || !isLoaded) return;
|
||||||
|
|
||||||
|
adapter.history = root.accessHistory;
|
||||||
|
|
||||||
|
// Ensure cache directory exists and save
|
||||||
|
try {
|
||||||
|
Quickshell.execDetached(["mkdir", "-p", Settings.cacheDir]);
|
||||||
|
Qt.callLater(() => {
|
||||||
|
try {
|
||||||
|
historyFileView.writeAdapter();
|
||||||
|
} catch (e) {
|
||||||
|
console.error("PrivacyIndicator: Failed to save history", e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.error("PrivacyIndicator: Failed to save history", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function addToHistory(app, type, icon, colorKey, action) {
|
||||||
|
var time = new Date().toLocaleTimeString(Qt.locale(), Locale.ShortFormat);
|
||||||
|
var entry = {
|
||||||
|
"appName": app,
|
||||||
|
"type": type,
|
||||||
|
"icon": icon,
|
||||||
|
"colorKey": colorKey,
|
||||||
|
"time": time,
|
||||||
|
"timestamp": Date.now(),
|
||||||
|
"action": action // "started" or "stopped"
|
||||||
|
};
|
||||||
|
var newHistory = [entry].concat(accessHistory);
|
||||||
|
if (newHistory.length > 50) newHistory = newHistory.slice(0, 50); // Increased limit as we have more entries now
|
||||||
|
accessHistory = newHistory;
|
||||||
|
saveHistory();
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearHistory() {
|
||||||
|
accessHistory = [];
|
||||||
|
saveHistory();
|
||||||
|
}
|
||||||
|
|
||||||
|
function checkAppChanges(newApps, oldApps, type, icon, colorKey) {
|
||||||
|
if (!newApps && !oldApps) return;
|
||||||
|
|
||||||
|
// Check for new apps (Started)
|
||||||
|
if (newApps) {
|
||||||
|
for (var i = 0; i < newApps.length; i++) {
|
||||||
|
var app = newApps[i];
|
||||||
|
if (!oldApps || oldApps.indexOf(app) === -1) {
|
||||||
|
addToHistory(app, type, icon, colorKey, "started");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for removed apps (Stopped)
|
||||||
|
if (oldApps) {
|
||||||
|
for (var j = 0; j < oldApps.length; j++) {
|
||||||
|
var oldApp = oldApps[j];
|
||||||
|
if (!newApps || newApps.indexOf(oldApp) === -1) {
|
||||||
|
addToHistory(oldApp, type, icon, colorKey, "stopped");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get active color from settings or default
|
||||||
|
property var cfg: pluginApi?.pluginSettings || ({})
|
||||||
|
property var defaults: pluginApi?.manifest?.metadata?.defaultSettings || ({})
|
||||||
|
property string activeColorKey: cfg.activeColor ?? defaults.activeColor ?? "primary"
|
||||||
|
|
||||||
|
onMicAppsChanged: {
|
||||||
|
checkAppChanges(micApps, _prevMicApps, "Microphone", "microphone", activeColorKey);
|
||||||
|
_prevMicApps = micApps;
|
||||||
|
}
|
||||||
|
// Helper to detect activation edge
|
||||||
|
property bool oldMicActive: false
|
||||||
|
onMicActiveChanged: {
|
||||||
|
if (micActive && (!oldMicActive)) {
|
||||||
|
ToastService.showNotice(pluginApi?.tr("toast.mic-on") || "Microphone is active", "", "microphone");
|
||||||
|
}
|
||||||
|
oldMicActive = micActive
|
||||||
|
}
|
||||||
|
|
||||||
|
property bool oldCamActive: false
|
||||||
|
onCamActiveChanged: {
|
||||||
|
if (camActive && !oldCamActive) {
|
||||||
|
ToastService.showNotice(pluginApi?.tr("toast.cam-on") || "Camera is active", "", "camera");
|
||||||
|
}
|
||||||
|
oldCamActive = camActive
|
||||||
|
}
|
||||||
|
onCamAppsChanged: {
|
||||||
|
checkAppChanges(camApps, _prevCamApps, "Camera", "camera", activeColorKey);
|
||||||
|
_prevCamApps = camApps;
|
||||||
|
}
|
||||||
|
|
||||||
|
property bool oldScrActive: false
|
||||||
|
onScrActiveChanged: {
|
||||||
|
if (scrActive && !oldScrActive) {
|
||||||
|
ToastService.showNotice(pluginApi?.tr("toast.screen-on") || "Screen sharing is active", "", "screen-share");
|
||||||
|
}
|
||||||
|
oldScrActive = scrActive
|
||||||
|
}
|
||||||
|
onScrAppsChanged: {
|
||||||
|
checkAppChanges(scrApps, _prevScrApps, "Screen", "screen-share", activeColorKey);
|
||||||
|
_prevScrApps = scrApps;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
169
home/aiden/.config/noctalia/plugins/privacy-indicator/Panel.qml
Normal file
169
home/aiden/.config/noctalia/plugins/privacy-indicator/Panel.qml
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import Quickshell
|
||||||
|
import qs.Commons
|
||||||
|
import qs.Widgets
|
||||||
|
|
||||||
|
Item {
|
||||||
|
id: root
|
||||||
|
|
||||||
|
property var pluginApi: null
|
||||||
|
|
||||||
|
// Standard panel properties
|
||||||
|
readonly property var geometryPlaceholder: panelContainer
|
||||||
|
property real contentPreferredWidth: 320 * Style.uiScaleRatio
|
||||||
|
property real contentPreferredHeight: 450 * Style.uiScaleRatio
|
||||||
|
|
||||||
|
readonly property var mainInstance: pluginApi?.mainInstance
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
id: panelContainer
|
||||||
|
anchors.fill: parent
|
||||||
|
color: "transparent"
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: Style.marginM
|
||||||
|
spacing: Style.marginM
|
||||||
|
|
||||||
|
// Header Box
|
||||||
|
NBox {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.preferredHeight: headerRow.implicitHeight + Style.marginM * 2
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
id: headerRow
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: Style.marginM
|
||||||
|
spacing: Style.marginS
|
||||||
|
|
||||||
|
NIcon {
|
||||||
|
icon: "shield-check"
|
||||||
|
color: Color.mPrimary
|
||||||
|
pointSize: Style.fontSizeL
|
||||||
|
}
|
||||||
|
|
||||||
|
NText {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: pluginApi?.tr("history.title") || "Access History"
|
||||||
|
font.weight: Style.fontWeightBold
|
||||||
|
pointSize: Style.fontSizeL
|
||||||
|
color: Color.mOnSurface
|
||||||
|
}
|
||||||
|
|
||||||
|
NIconButton {
|
||||||
|
icon: "trash"
|
||||||
|
baseSize: Style.baseWidgetSize * 0.8
|
||||||
|
onClicked: {
|
||||||
|
if (mainInstance) mainInstance.clearHistory();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Item {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.fillHeight: true
|
||||||
|
|
||||||
|
NScrollView {
|
||||||
|
id: scrollView
|
||||||
|
anchors.fill: parent
|
||||||
|
horizontalPolicy: ScrollBar.AlwaysOff
|
||||||
|
verticalPolicy: ScrollBar.AsNeeded
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
width: scrollView.availableWidth
|
||||||
|
spacing: Style.marginS
|
||||||
|
|
||||||
|
Repeater {
|
||||||
|
model: mainInstance ? mainInstance.accessHistory : []
|
||||||
|
|
||||||
|
delegate: Rectangle {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
implicitHeight: 56 * Style.uiScaleRatio
|
||||||
|
radius: Style.radiusM
|
||||||
|
color: Color.mSurfaceVariant
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
anchors.fill: parent
|
||||||
|
anchors.margins: Style.marginM
|
||||||
|
spacing: Style.marginM
|
||||||
|
|
||||||
|
Rectangle {
|
||||||
|
width: 32 * Style.uiScaleRatio
|
||||||
|
height: 32 * Style.uiScaleRatio
|
||||||
|
radius: width/2
|
||||||
|
color: Qt.alpha(iconColor, 0.1)
|
||||||
|
|
||||||
|
readonly property color iconColor: Color.resolveColorKey(modelData.colorKey || "primary")
|
||||||
|
|
||||||
|
NIcon {
|
||||||
|
anchors.centerIn: parent
|
||||||
|
icon: modelData.icon
|
||||||
|
color: parent.iconColor
|
||||||
|
pointSize: Style.fontSizeM
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ColumnLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
spacing: 0
|
||||||
|
|
||||||
|
NText {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: modelData.appName
|
||||||
|
elide: Text.ElideRight
|
||||||
|
font.weight: Style.fontWeightBold
|
||||||
|
pointSize: Style.fontSizeM
|
||||||
|
}
|
||||||
|
|
||||||
|
RowLayout {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
spacing: Style.marginS
|
||||||
|
|
||||||
|
NText {
|
||||||
|
text: modelData.time
|
||||||
|
color: Qt.alpha(Color.mOnSurface, 0.7)
|
||||||
|
pointSize: Style.fontSizeS
|
||||||
|
}
|
||||||
|
|
||||||
|
NText {
|
||||||
|
text: "•"
|
||||||
|
color: Qt.alpha(Color.mOnSurface, 0.3)
|
||||||
|
pointSize: Style.fontSizeS
|
||||||
|
}
|
||||||
|
|
||||||
|
NText {
|
||||||
|
text: {
|
||||||
|
const action = modelData.action || "started";
|
||||||
|
return pluginApi?.tr("history.action." + action) || action;
|
||||||
|
}
|
||||||
|
color: (modelData.action || "started") === "stopped" ? Color.resolveColorKey("error") : Color.resolveColorKey("primary")
|
||||||
|
font.weight: Style.fontWeightBold
|
||||||
|
pointSize: Style.fontSizeS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Empty state
|
||||||
|
NText {
|
||||||
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
visible: (!mainInstance || mainInstance.accessHistory.length === 0)
|
||||||
|
text: pluginApi?.tr("history.empty") || "No recent access"
|
||||||
|
color: Qt.alpha(Color.mOnSurface, 0.5)
|
||||||
|
pointSize: Style.fontSizeM
|
||||||
|
Layout.topMargin: Style.marginL
|
||||||
|
}
|
||||||
|
|
||||||
|
Item { Layout.fillHeight: true } // spacer
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "Alle äußeren Ränder des Widgets entfernen.",
|
"desc": "Alle äußeren Ränder des Widgets entfernen.",
|
||||||
"label": "Ränder entfernen"
|
"label": "Ränder entfernen"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "Farbe der Symbole, wenn sie aktiv sind.",
|
||||||
|
"label": "Aktive Farbsymbol"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "Farbe der Symbole, wenn sie inaktiv sind.",
|
||||||
|
"label": "Inaktive Farbsymbol"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "Kamera: {apps}",
|
"cam-on": "Kamera: {apps}",
|
||||||
"mic-on": "Mikrofon: {apps}",
|
"mic-on": "Mikrofon: {apps}",
|
||||||
"screen-on": "Bildschirmfreigabe: {apps}"
|
"screen-on": "Bildschirmfreigabe: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "Kamera ist aktiv",
|
||||||
|
"mic-on": "Mikrofon ist aktiv",
|
||||||
|
"screen-on": "Bildschirmfreigabe ist aktiv"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "Widget-Einstellungen"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "Zugriffsverlauf",
|
||||||
|
"empty": "Kein kürzlicher Zugriff",
|
||||||
|
"clear": "Leeren",
|
||||||
|
"action": {
|
||||||
|
"started": "Gestartet",
|
||||||
|
"stopped": "Beendet"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -28,5 +28,19 @@
|
|||||||
"cam-on": "Camera: {apps}",
|
"cam-on": "Camera: {apps}",
|
||||||
"mic-on": "Microphone: {apps}",
|
"mic-on": "Microphone: {apps}",
|
||||||
"screen-on": "Screen sharing: {apps}"
|
"screen-on": "Screen sharing: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "Camera is active",
|
||||||
|
"mic-on": "Microphone is active",
|
||||||
|
"screen-on": "Screen sharing is active"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "Access History",
|
||||||
|
"empty": "No recent access",
|
||||||
|
"clear": "Clear",
|
||||||
|
"action": {
|
||||||
|
"started": "Started",
|
||||||
|
"stopped": "Stopped"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "Quita todos los márgenes externos del widget.",
|
"desc": "Quita todos los márgenes externos del widget.",
|
||||||
"label": "Quitar márgenes"
|
"label": "Quitar márgenes"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "Color de los iconos cuando están activos.",
|
||||||
|
"label": "Color de icono activo"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "Color de los iconos cuando están inactivos.",
|
||||||
|
"label": "Color de icono inactivo"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "Cámara: {apps}",
|
"cam-on": "Cámara: {apps}",
|
||||||
"mic-on": "Micrófono: {apps}",
|
"mic-on": "Micrófono: {apps}",
|
||||||
"screen-on": "Compartir pantalla: {apps}"
|
"screen-on": "Compartir pantalla: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "La cámara está activa",
|
||||||
|
"mic-on": "El micrófono está activo",
|
||||||
|
"screen-on": "Compartir pantalla está activo"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "Configuración del widget"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "Historial de acceso",
|
||||||
|
"empty": "Sin accesos recientes",
|
||||||
|
"clear": "Borrar",
|
||||||
|
"action": {
|
||||||
|
"started": "Iniciado",
|
||||||
|
"stopped": "Detenido"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "Supprime toutes les marges extérieures du widget.",
|
"desc": "Supprime toutes les marges extérieures du widget.",
|
||||||
"label": "Supprimer les marges"
|
"label": "Supprimer les marges"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "Couleur des icônes lorsqu'elles sont actives.",
|
||||||
|
"label": "Couleur d'icône active"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "Couleur des icônes lorsqu'elles sont inactives.",
|
||||||
|
"label": "Couleur d'icône inactive"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "Caméra: {apps}",
|
"cam-on": "Caméra: {apps}",
|
||||||
"mic-on": "Microphone: {apps}",
|
"mic-on": "Microphone: {apps}",
|
||||||
"screen-on": "Partage d'écran: {apps}"
|
"screen-on": "Partage d'écran: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "La caméra est active",
|
||||||
|
"mic-on": "Le microphone est actif",
|
||||||
|
"screen-on": "Le partage d'écran est actif"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "Paramètres du widget"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "Historique d'accès",
|
||||||
|
"empty": "Aucun accès récent",
|
||||||
|
"clear": "Effacer",
|
||||||
|
"action": {
|
||||||
|
"started": "Démarré",
|
||||||
|
"stopped": "Arrêté"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "Távolítsd el a widget összes külső margóját.",
|
"desc": "Távolítsd el a widget összes külső margóját.",
|
||||||
"label": "Margók eltávolítása"
|
"label": "Margók eltávolítása"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "Az ikonok színe, amikor aktívak.",
|
||||||
|
"label": "Aktív ikon színe"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "Az ikonok színe, amikor inaktívak.",
|
||||||
|
"label": "Inaktív ikon színe"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "Kamera: {apps}",
|
"cam-on": "Kamera: {apps}",
|
||||||
"mic-on": "Mikrofon: {apps}",
|
"mic-on": "Mikrofon: {apps}",
|
||||||
"screen-on": "Képernyőmegosztás: {apps}"
|
"screen-on": "Képernyőmegosztás: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "A kamera aktív",
|
||||||
|
"mic-on": "A mikrofon aktív",
|
||||||
|
"screen-on": "Képernyőmegosztás aktív"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "Widget beállítások"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "Hozzáférési előzmények",
|
||||||
|
"empty": "Nincs nemrégiben történt hozzáférés",
|
||||||
|
"clear": "Törlés",
|
||||||
|
"action": {
|
||||||
|
"started": "Elindítva",
|
||||||
|
"stopped": "Leállítva"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "Rimuove tutti i margini esterni del widget.",
|
"desc": "Rimuove tutti i margini esterni del widget.",
|
||||||
"label": "Rimuovi margini"
|
"label": "Rimuovi margini"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "Colore delle icone quando sono attive.",
|
||||||
|
"label": "Colore icona attiva"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "Colore delle icone quando sono inattive.",
|
||||||
|
"label": "Colore icona inattiva"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "Kamera: {apps}",
|
"cam-on": "Kamera: {apps}",
|
||||||
"mic-on": "Mikrofonoa: {apps}",
|
"mic-on": "Mikrofonoa: {apps}",
|
||||||
"screen-on": "Ekran-partaĝado: {apps}"
|
"screen-on": "Ekran-partaĝado: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "La fotocamera è attiva",
|
||||||
|
"mic-on": "Il microfono è attivo",
|
||||||
|
"screen-on": "La condivisione dello schermo è attiva"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "Impostazioni widget"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "Cronologia accessi",
|
||||||
|
"empty": "Nessun accesso recente",
|
||||||
|
"clear": "Pulisci",
|
||||||
|
"action": {
|
||||||
|
"started": "Iniziato",
|
||||||
|
"stopped": "Terminato"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "ウィジェットの外側の余白をすべて削除します。",
|
"desc": "ウィジェットの外側の余白をすべて削除します。",
|
||||||
"label": "余白を削除"
|
"label": "余白を削除"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "アクティブ時のアイコンの色。",
|
||||||
|
"label": "アクティブ時の色"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "非アクティブ時のアイコンの色。",
|
||||||
|
"label": "非アクティブ時の色"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "カメラ: {apps}",
|
"cam-on": "カメラ: {apps}",
|
||||||
"mic-on": "マイク: {apps}",
|
"mic-on": "マイク: {apps}",
|
||||||
"screen-on": "画面共有: {apps}"
|
"screen-on": "画面共有: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "カメラがアクティブです",
|
||||||
|
"mic-on": "マイクがアクティブです",
|
||||||
|
"screen-on": "画面共有がアクティブです"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "ウィジェット設定"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "アクセス履歴",
|
||||||
|
"empty": "最近のアクセスはありません",
|
||||||
|
"clear": "クリア",
|
||||||
|
"action": {
|
||||||
|
"started": "開始",
|
||||||
|
"stopped": "停止"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "Hemû marjînalên derveyî yên widgetê rake.",
|
"desc": "Hemû marjînalên derveyî yên widgetê rake.",
|
||||||
"label": "Derdestên derxînin"
|
"label": "Derdestên derxînin"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "Color of the icons when active.",
|
||||||
|
"label": "Active icon color"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "Color of the icons when inactive.",
|
||||||
|
"label": "Inactive icon color"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "Kamera: {apps}",
|
"cam-on": "Kamera: {apps}",
|
||||||
"mic-on": "Mîkrofon: {apps}",
|
"mic-on": "Mîkrofon: {apps}",
|
||||||
"screen-on": "Parvekirina ekranê: {apps}"
|
"screen-on": "Parvekirina ekranê: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "Kamera çalak e",
|
||||||
|
"mic-on": "Mîkrofon çalak e",
|
||||||
|
"screen-on": "Parvekirina ekranê çalak e"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "Widget settings"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "Access History",
|
||||||
|
"empty": "No recent access",
|
||||||
|
"clear": "Clear",
|
||||||
|
"action": {
|
||||||
|
"started": "Started",
|
||||||
|
"stopped": "Stopped"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "Verwijdert alle buitenste marges van de widget.",
|
"desc": "Verwijdert alle buitenste marges van de widget.",
|
||||||
"label": "Marges verwijderen"
|
"label": "Marges verwijderen"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "Kleur van de pictogrammen wanneer ze actief zijn.",
|
||||||
|
"label": "Actieve pictogramkleur"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "Kleur van de pictogrammen wanneer ze inactief zijn.",
|
||||||
|
"label": "Inactieve pictogramkleur"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "Camera: {apps}",
|
"cam-on": "Camera: {apps}",
|
||||||
"mic-on": "Microfoon: {apps}",
|
"mic-on": "Microfoon: {apps}",
|
||||||
"screen-on": "Schermdeling: {apps}"
|
"screen-on": "Schermdeling: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "Camera is actief",
|
||||||
|
"mic-on": "Microfoon is actief",
|
||||||
|
"screen-on": "Scherm delen is actief"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "Widget instellingen"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "Toegangsgeschiedenis",
|
||||||
|
"empty": "Geen recente toegang",
|
||||||
|
"clear": "Wissen",
|
||||||
|
"action": {
|
||||||
|
"started": "Gestart",
|
||||||
|
"stopped": "Gestopt"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "Usuń wszystkie zewnętrzne marginesy widżetu.",
|
"desc": "Usuń wszystkie zewnętrzne marginesy widżetu.",
|
||||||
"label": "Usuń marginesy"
|
"label": "Usuń marginesy"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "Kolor ikon, gdy są aktywne.",
|
||||||
|
"label": "Kolor aktywnej ikony"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "Kolor ikon, gdy są nieaktywne.",
|
||||||
|
"label": "Kolor nieaktywnej ikony"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "Kamera: {apps}",
|
"cam-on": "Kamera: {apps}",
|
||||||
"mic-on": "Mikrofon: {apps}",
|
"mic-on": "Mikrofon: {apps}",
|
||||||
"screen-on": "Udostępnianie ekranu: {apps}"
|
"screen-on": "Udostępnianie ekranu: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "Kamera jest aktywna",
|
||||||
|
"mic-on": "Mikrofon jest aktywny",
|
||||||
|
"screen-on": "Udostępnianie ekranu jest aktywne"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "Ustawienia widżetu"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "Historia dostępu",
|
||||||
|
"empty": "Brak ostatnich dostępów",
|
||||||
|
"clear": "Wyczyść",
|
||||||
|
"action": {
|
||||||
|
"started": "Rozpoczęto",
|
||||||
|
"stopped": "Zatrzymano"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "Remove todas as margens externas do widget.",
|
"desc": "Remove todas as margens externas do widget.",
|
||||||
"label": "Remover margens"
|
"label": "Remover margens"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "Cor dos ícones quando ativos.",
|
||||||
|
"label": "Cor do ícone ativo"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "Cor dos ícones quando inativos.",
|
||||||
|
"label": "Cor do ícone inativo"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "Câmera: {apps}",
|
"cam-on": "Câmera: {apps}",
|
||||||
"mic-on": "Microfone: {apps}",
|
"mic-on": "Microfone: {apps}",
|
||||||
"screen-on": "Compartilhamento de tela: {apps}"
|
"screen-on": "Compartilhamento de tela: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "A câmera está ativa",
|
||||||
|
"mic-on": "O microfone está ativo",
|
||||||
|
"screen-on": "O compartilhamento de tela está ativo"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "Configurações do widget"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "Histórico de acesso",
|
||||||
|
"empty": "Sem acessos recentes",
|
||||||
|
"clear": "Limpar",
|
||||||
|
"action": {
|
||||||
|
"started": "Iniciado",
|
||||||
|
"stopped": "Interrompido"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "Удаляет все внешние отступы виджета.",
|
"desc": "Удаляет все внешние отступы виджета.",
|
||||||
"label": "Убрать отступы"
|
"label": "Убрать отступы"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "Цвет иконок при активации.",
|
||||||
|
"label": "Цвет активной иконки"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "Цвет иконок в спокойном состоянии.",
|
||||||
|
"label": "Цвет неактивной иконки"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "Камера: {apps}",
|
"cam-on": "Камера: {apps}",
|
||||||
"mic-on": "Микрофон: {apps}",
|
"mic-on": "Микрофон: {apps}",
|
||||||
"screen-on": "Демонстрация экрана: {apps}"
|
"screen-on": "Демонстрация экрана: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "Камера активна",
|
||||||
|
"mic-on": "Микрофон активен",
|
||||||
|
"screen-on": "Демонстрация экрана активна"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "Настройки виджета"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "История доступа",
|
||||||
|
"empty": "Нет недавних доступов",
|
||||||
|
"clear": "Очистить",
|
||||||
|
"action": {
|
||||||
|
"started": "Начато",
|
||||||
|
"stopped": "Остановлено"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "Widget’ın tüm dış kenar boşluklarını kaldırır.",
|
"desc": "Widget’ın tüm dış kenar boşluklarını kaldırır.",
|
||||||
"label": "Kenarlıkları kaldır"
|
"label": "Kenarlıkları kaldır"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "Aktif olduğunda simgelerin rengi.",
|
||||||
|
"label": "Aktif simge rengi"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "Devre dışı olduğunda simgelerin rengi.",
|
||||||
|
"label": "Pasif simge rengi"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "Kamera: {apps}",
|
"cam-on": "Kamera: {apps}",
|
||||||
"mic-on": "Mikrofon: {apps}",
|
"mic-on": "Mikrofon: {apps}",
|
||||||
"screen-on": "Ekran paylaşımı: {apps}"
|
"screen-on": "Ekran paylaşımı: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "Kamera aktif",
|
||||||
|
"mic-on": "Mikrofon aktif",
|
||||||
|
"screen-on": "Ekran paylaşımı aktif"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "Bileşen ayarları"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "Erişim Geçmişi",
|
||||||
|
"empty": "Yakın zamanda erişim yok",
|
||||||
|
"clear": "Temizle",
|
||||||
|
"action": {
|
||||||
|
"started": "Başlatıldı",
|
||||||
|
"stopped": "Durduruldu"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "Видаляє всі зовнішні відступи віджета.",
|
"desc": "Видаляє всі зовнішні відступи віджета.",
|
||||||
"label": "Прибрати відступи"
|
"label": "Прибрати відступи"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "Колір іконок при активації.",
|
||||||
|
"label": "Колір активної іконки"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "Колір іконок у спокійному стані.",
|
||||||
|
"label": "Колір неактивної іконки"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "Камера: {apps}",
|
"cam-on": "Камера: {apps}",
|
||||||
"mic-on": "Мікрофон: {apps}",
|
"mic-on": "Мікрофон: {apps}",
|
||||||
"screen-on": "Демонстрація екрана: {apps}"
|
"screen-on": "Демонстрація екрана: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "Камера активна",
|
||||||
|
"mic-on": "Мікрофон активний",
|
||||||
|
"screen-on": "Демонстрація екрана активна"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "Налаштування віджета"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "Історія доступу",
|
||||||
|
"empty": "Немає недавніх доступів",
|
||||||
|
"clear": "Очистити",
|
||||||
|
"action": {
|
||||||
|
"started": "Розпочато",
|
||||||
|
"stopped": "Зупинено"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "移除小部件所有外部边距。",
|
"desc": "移除小部件所有外部边距。",
|
||||||
"label": "移除边距"
|
"label": "移除边距"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "激活图标的颜色。",
|
||||||
|
"label": "激活图标颜色"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "未激活图标的颜色。",
|
||||||
|
"label": "未激活图标颜色"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "摄像头: {apps}",
|
"cam-on": "摄像头: {apps}",
|
||||||
"mic-on": "麦克风: {apps}",
|
"mic-on": "麦克风: {apps}",
|
||||||
"screen-on": "屏幕共享: {apps}"
|
"screen-on": "屏幕共享: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "摄像头已激活",
|
||||||
|
"mic-on": "麦克风已激活",
|
||||||
|
"screen-on": "屏幕共享已激活"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "小部件设置"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "访问历史",
|
||||||
|
"empty": "无最近访问",
|
||||||
|
"clear": "清除",
|
||||||
|
"action": {
|
||||||
|
"started": "已开始",
|
||||||
|
"stopped": "已停止"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,11 +11,36 @@
|
|||||||
"removeMargins": {
|
"removeMargins": {
|
||||||
"desc": "移除小工具外面的所有邊距",
|
"desc": "移除小工具外面的所有邊距",
|
||||||
"label": "移除邊距"
|
"label": "移除邊距"
|
||||||
|
},
|
||||||
|
"activeColor": {
|
||||||
|
"desc": "圖示啟用時的顏色。",
|
||||||
|
"label": "啟用圖示顏色"
|
||||||
|
},
|
||||||
|
"inactiveColor": {
|
||||||
|
"desc": "圖示未啟用時的顏色。",
|
||||||
|
"label": "未啟用圖示顏色"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tooltip": {
|
"tooltip": {
|
||||||
"cam-on": "攝影機: {apps}",
|
"cam-on": "攝影機: {apps}",
|
||||||
"mic-on": "麥克風: {apps}",
|
"mic-on": "麥克風: {apps}",
|
||||||
"screen-on": "螢幕分享: {apps}"
|
"screen-on": "螢幕分享: {apps}"
|
||||||
|
},
|
||||||
|
"toast": {
|
||||||
|
"cam-on": "攝影機已啟用",
|
||||||
|
"mic-on": "麥克風已啟用",
|
||||||
|
"screen-on": "螢幕分享已啟用"
|
||||||
|
},
|
||||||
|
"menu": {
|
||||||
|
"settings": "小工具設定"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"title": "存取紀錄",
|
||||||
|
"empty": "無最近存取",
|
||||||
|
"clear": "清除",
|
||||||
|
"action": {
|
||||||
|
"started": "已開始",
|
||||||
|
"stopped": "已停止"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,22 @@
|
|||||||
{
|
{
|
||||||
"id": "privacy-indicator",
|
"id": "privacy-indicator",
|
||||||
"name": "Privacy Indicator",
|
"name": "Privacy Indicator",
|
||||||
"version": "1.1.0",
|
"version": "1.2.4",
|
||||||
"minNoctaliaVersion": "3.6.0",
|
"minNoctaliaVersion": "3.6.0",
|
||||||
"author": "Noctalia Team",
|
"author": "Noctalia Team",
|
||||||
"official": true,
|
"official": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": "https://github.com/noctalia-dev/noctalia-plugins",
|
"repository": "https://github.com/noctalia-dev/noctalia-plugins",
|
||||||
"description": "A privacy indicator widget that shows when microphone, camera or screen sharing is active.",
|
"description": "A privacy indicator widget that shows when microphone, camera or screen sharing is active.",
|
||||||
"tags": ["Bar", "Privacy", "Indicator"],
|
"tags": [
|
||||||
|
"Bar",
|
||||||
|
"Privacy",
|
||||||
|
"Indicator"
|
||||||
|
],
|
||||||
"entryPoints": {
|
"entryPoints": {
|
||||||
|
"main": "Main.qml",
|
||||||
"barWidget": "BarWidget.qml",
|
"barWidget": "BarWidget.qml",
|
||||||
|
"panel": "Panel.qml",
|
||||||
"settings": "Settings.qml"
|
"settings": "Settings.qml"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 26 KiB |
@@ -9,6 +9,7 @@
|
|||||||
"density": "default",
|
"density": "default",
|
||||||
"enableClipPreview": true,
|
"enableClipPreview": true,
|
||||||
"enableClipboardHistory": true,
|
"enableClipboardHistory": true,
|
||||||
|
"enableSessionSearch": true,
|
||||||
"enableSettingsSearch": true,
|
"enableSettingsSearch": true,
|
||||||
"enableWindowsSearch": true,
|
"enableWindowsSearch": true,
|
||||||
"iconMode": "tabler",
|
"iconMode": "tabler",
|
||||||
@@ -41,7 +42,7 @@
|
|||||||
"backgroundOpacity": 0.93,
|
"backgroundOpacity": 0.93,
|
||||||
"barType": "simple",
|
"barType": "simple",
|
||||||
"capsuleColorKey": "none",
|
"capsuleColorKey": "none",
|
||||||
"capsuleOpacity": 1,
|
"capsuleOpacity": 0.36,
|
||||||
"density": "comfortable",
|
"density": "comfortable",
|
||||||
"displayMode": "always_visible",
|
"displayMode": "always_visible",
|
||||||
"floating": false,
|
"floating": false,
|
||||||
@@ -52,7 +53,7 @@
|
|||||||
"marginVertical": 5,
|
"marginVertical": 5,
|
||||||
"monitors": [
|
"monitors": [
|
||||||
],
|
],
|
||||||
"outerCorners": false,
|
"outerCorners": true,
|
||||||
"position": "top",
|
"position": "top",
|
||||||
"screenOverrides": [
|
"screenOverrides": [
|
||||||
],
|
],
|
||||||
@@ -62,29 +63,20 @@
|
|||||||
"widgets": {
|
"widgets": {
|
||||||
"center": [
|
"center": [
|
||||||
{
|
{
|
||||||
"compactMode": false,
|
"clockColor": "none",
|
||||||
"compactShowAlbumArt": true,
|
"customFont": "Adwaita Sans",
|
||||||
"compactShowVisualizer": false,
|
"formatHorizontal": "HH:mm:ss t",
|
||||||
"hideMode": "hidden",
|
"formatVertical": "HH mm - dd MM",
|
||||||
"hideWhenIdle": false,
|
"id": "Clock",
|
||||||
"id": "MediaMini",
|
"tooltipFormat": "HH:mm ddd, MMM dd",
|
||||||
"maxWidth": 250,
|
"useCustomFont": false
|
||||||
"panelShowAlbumArt": true,
|
|
||||||
"panelShowVisualizer": true,
|
|
||||||
"scrollingMode": "hover",
|
|
||||||
"showAlbumArt": true,
|
|
||||||
"showArtistFirst": true,
|
|
||||||
"showProgressRing": true,
|
|
||||||
"showVisualizer": true,
|
|
||||||
"textColor": "none",
|
|
||||||
"useFixedWidth": false,
|
|
||||||
"visualizerType": "linear"
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"left": [
|
"left": [
|
||||||
{
|
{
|
||||||
"colorizeSystemIcon": "none",
|
"colorizeSystemIcon": "none",
|
||||||
"enableColorization": false,
|
"enableColorization": false,
|
||||||
|
"generalTooltipText": "",
|
||||||
"hideMode": "alwaysExpanded",
|
"hideMode": "alwaysExpanded",
|
||||||
"icon": "rocket",
|
"icon": "rocket",
|
||||||
"id": "CustomButton",
|
"id": "CustomButton",
|
||||||
@@ -100,7 +92,9 @@
|
|||||||
"parseJson": false,
|
"parseJson": false,
|
||||||
"rightClickExec": "",
|
"rightClickExec": "",
|
||||||
"rightClickUpdateText": false,
|
"rightClickUpdateText": false,
|
||||||
|
"showExecTooltip": true,
|
||||||
"showIcon": true,
|
"showIcon": true,
|
||||||
|
"showTextTooltip": true,
|
||||||
"textCollapse": "",
|
"textCollapse": "",
|
||||||
"textCommand": "",
|
"textCommand": "",
|
||||||
"textIntervalMs": 3000,
|
"textIntervalMs": 3000,
|
||||||
@@ -127,7 +121,6 @@
|
|||||||
"labelMode": "name",
|
"labelMode": "name",
|
||||||
"occupiedColor": "secondary",
|
"occupiedColor": "secondary",
|
||||||
"pillSize": 0.6,
|
"pillSize": 0.6,
|
||||||
"reverseScroll": false,
|
|
||||||
"showApplications": false,
|
"showApplications": false,
|
||||||
"showBadge": true,
|
"showBadge": true,
|
||||||
"showLabelsOnlyWhenOccupied": true,
|
"showLabelsOnlyWhenOccupied": true,
|
||||||
@@ -136,21 +129,12 @@
|
|||||||
{
|
{
|
||||||
"clockColor": "none",
|
"clockColor": "none",
|
||||||
"customFont": "",
|
"customFont": "",
|
||||||
"formatHorizontal": "HH:mm ddd, MMM dd",
|
"formatHorizontal": "ddd, MMM dd",
|
||||||
"formatVertical": "HH mm - dd MM",
|
"formatVertical": "HH mm - dd MM",
|
||||||
"id": "Clock",
|
"id": "Clock",
|
||||||
"tooltipFormat": "HH:mm ddd, MMM dd",
|
"tooltipFormat": "HH:mm ddd, MMM dd",
|
||||||
"useCustomFont": false
|
"useCustomFont": false
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"defaultSettings": {
|
|
||||||
"currentIconName": "world-download",
|
|
||||||
"hideOnZero": false,
|
|
||||||
"updateIntervalMinutes": 30,
|
|
||||||
"updateTerminalCommand": "foot -e"
|
|
||||||
},
|
|
||||||
"id": "plugin:update-count"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"compactMode": false,
|
"compactMode": false,
|
||||||
"diskPath": "/",
|
"diskPath": "/",
|
||||||
@@ -169,7 +153,8 @@
|
|||||||
"showNetworkStats": false,
|
"showNetworkStats": false,
|
||||||
"showSwapUsage": false,
|
"showSwapUsage": false,
|
||||||
"textColor": "none",
|
"textColor": "none",
|
||||||
"useMonospaceFont": true
|
"useMonospaceFont": true,
|
||||||
|
"usePadding": false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"defaultSettings": {
|
"defaultSettings": {
|
||||||
@@ -186,17 +171,13 @@
|
|||||||
"id": "plugin:network-indicator"
|
"id": "plugin:network-indicator"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"colorizeIcons": true,
|
"defaultSettings": {
|
||||||
"hideMode": "hidden",
|
"currentIconName": "world-download",
|
||||||
"iconScale": 1,
|
"hideOnZero": false,
|
||||||
"id": "Taskbar",
|
"updateIntervalMinutes": 30,
|
||||||
"maxTaskbarWidth": 40,
|
"updateTerminalCommand": "foot -e"
|
||||||
"onlyActiveWorkspaces": false,
|
},
|
||||||
"onlySameOutput": true,
|
"id": "plugin:update-count"
|
||||||
"showPinnedApps": true,
|
|
||||||
"showTitle": false,
|
|
||||||
"smartWidth": true,
|
|
||||||
"titleWidth": 120
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"right": [
|
"right": [
|
||||||
@@ -214,6 +195,7 @@
|
|||||||
{
|
{
|
||||||
"colorizeSystemIcon": "none",
|
"colorizeSystemIcon": "none",
|
||||||
"enableColorization": false,
|
"enableColorization": false,
|
||||||
|
"generalTooltipText": "",
|
||||||
"hideMode": "alwaysExpanded",
|
"hideMode": "alwaysExpanded",
|
||||||
"icon": "eye",
|
"icon": "eye",
|
||||||
"id": "CustomButton",
|
"id": "CustomButton",
|
||||||
@@ -229,7 +211,9 @@
|
|||||||
"parseJson": false,
|
"parseJson": false,
|
||||||
"rightClickExec": "",
|
"rightClickExec": "",
|
||||||
"rightClickUpdateText": false,
|
"rightClickUpdateText": false,
|
||||||
|
"showExecTooltip": true,
|
||||||
"showIcon": true,
|
"showIcon": true,
|
||||||
|
"showTextTooltip": true,
|
||||||
"textCollapse": "",
|
"textCollapse": "",
|
||||||
"textCommand": "",
|
"textCommand": "",
|
||||||
"textIntervalMs": 3000,
|
"textIntervalMs": 3000,
|
||||||
@@ -250,6 +234,7 @@
|
|||||||
"textColor": "none"
|
"textColor": "none"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
"applyToAllMonitors": false,
|
||||||
"displayMode": "onhover",
|
"displayMode": "onhover",
|
||||||
"iconColor": "none",
|
"iconColor": "none",
|
||||||
"id": "Brightness",
|
"id": "Brightness",
|
||||||
@@ -351,7 +336,7 @@
|
|||||||
"id": "media-sysmon-card"
|
"id": "media-sysmon-card"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"enabled": false,
|
"enabled": true,
|
||||||
"id": "brightness-card"
|
"id": "brightness-card"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -389,11 +374,153 @@
|
|||||||
{
|
{
|
||||||
"name": "DP-3",
|
"name": "DP-3",
|
||||||
"widgets": [
|
"widgets": [
|
||||||
|
{
|
||||||
|
"clockColor": "none",
|
||||||
|
"clockStyle": "minimal",
|
||||||
|
"customFont": "",
|
||||||
|
"format": "HH:mm\\nd MMMM yyyy",
|
||||||
|
"id": "Clock",
|
||||||
|
"roundedCorners": true,
|
||||||
|
"scale": 1.1838477631085023,
|
||||||
|
"showBackground": true,
|
||||||
|
"useCustomFont": false,
|
||||||
|
"x": 20,
|
||||||
|
"y": 60
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hideMode": "visible",
|
||||||
|
"id": "MediaPlayer",
|
||||||
|
"roundedCorners": true,
|
||||||
|
"scale": 1.1461354014452196,
|
||||||
|
"showAlbumArt": true,
|
||||||
|
"showBackground": true,
|
||||||
|
"showButtons": true,
|
||||||
|
"showVisualizer": true,
|
||||||
|
"visualizerType": "mirrored",
|
||||||
|
"x": 20,
|
||||||
|
"y": 160
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "Weather",
|
||||||
|
"scale": 1,
|
||||||
|
"showBackground": true,
|
||||||
|
"x": 240,
|
||||||
|
"y": 60
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "DP-5",
|
"name": "DP-5",
|
||||||
"widgets": [
|
"widgets": [
|
||||||
|
{
|
||||||
|
"hideMode": "visible",
|
||||||
|
"id": "MediaPlayer",
|
||||||
|
"roundedCorners": true,
|
||||||
|
"scale": 1.4949747468305836,
|
||||||
|
"showAlbumArt": true,
|
||||||
|
"showBackground": true,
|
||||||
|
"showButtons": true,
|
||||||
|
"showVisualizer": true,
|
||||||
|
"visualizerType": "mirrored",
|
||||||
|
"x": 40,
|
||||||
|
"y": 200
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "Weather",
|
||||||
|
"scale": 1.3394112549695427,
|
||||||
|
"showBackground": true,
|
||||||
|
"x": 320,
|
||||||
|
"y": 80
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clockColor": "none",
|
||||||
|
"clockStyle": "minimal",
|
||||||
|
"customFont": "",
|
||||||
|
"format": "HH:mm\\nd MMMM yyyy",
|
||||||
|
"id": "Clock",
|
||||||
|
"roundedCorners": true,
|
||||||
|
"scale": 1.5562573345334174,
|
||||||
|
"showBackground": true,
|
||||||
|
"useCustomFont": false,
|
||||||
|
"x": 40,
|
||||||
|
"y": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "HDMI-A-1",
|
||||||
|
"widgets": [
|
||||||
|
{
|
||||||
|
"clockColor": "none",
|
||||||
|
"clockStyle": "minimal",
|
||||||
|
"customFont": "",
|
||||||
|
"format": "HH:mm\\nd MMMM yyyy",
|
||||||
|
"id": "Clock",
|
||||||
|
"roundedCorners": true,
|
||||||
|
"scale": 1.1744196726926817,
|
||||||
|
"showBackground": true,
|
||||||
|
"useCustomFont": false,
|
||||||
|
"x": 20,
|
||||||
|
"y": 60
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "Weather",
|
||||||
|
"scale": 1,
|
||||||
|
"showBackground": true,
|
||||||
|
"x": 240,
|
||||||
|
"y": 60
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hideMode": "visible",
|
||||||
|
"id": "MediaPlayer",
|
||||||
|
"roundedCorners": true,
|
||||||
|
"scale": 1.1461354014452199,
|
||||||
|
"showAlbumArt": true,
|
||||||
|
"showBackground": true,
|
||||||
|
"showButtons": true,
|
||||||
|
"showVisualizer": true,
|
||||||
|
"visualizerType": "mirrored",
|
||||||
|
"x": 20,
|
||||||
|
"y": 160
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "eDP-1",
|
||||||
|
"widgets": [
|
||||||
|
{
|
||||||
|
"clockColor": "none",
|
||||||
|
"clockStyle": "minimal",
|
||||||
|
"customFont": "",
|
||||||
|
"format": "HH:mm\\nd MMMM yyyy",
|
||||||
|
"id": "Clock",
|
||||||
|
"roundedCorners": true,
|
||||||
|
"scale": 1.1461354014452199,
|
||||||
|
"showBackground": true,
|
||||||
|
"useCustomFont": false,
|
||||||
|
"x": 20,
|
||||||
|
"y": 60
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hideMode": "visible",
|
||||||
|
"id": "MediaPlayer",
|
||||||
|
"roundedCorners": true,
|
||||||
|
"scale": 1.15084944665313,
|
||||||
|
"showAlbumArt": true,
|
||||||
|
"showBackground": true,
|
||||||
|
"showButtons": true,
|
||||||
|
"showVisualizer": true,
|
||||||
|
"visualizerType": "mirrored",
|
||||||
|
"x": 20,
|
||||||
|
"y": 160
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "Weather",
|
||||||
|
"scale": 1,
|
||||||
|
"showBackground": true,
|
||||||
|
"x": 240,
|
||||||
|
"y": 60
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -403,19 +530,25 @@
|
|||||||
"backgroundOpacity": 1,
|
"backgroundOpacity": 1,
|
||||||
"colorizeIcons": true,
|
"colorizeIcons": true,
|
||||||
"deadOpacity": 0.6,
|
"deadOpacity": 0.6,
|
||||||
"displayMode": "exclusive",
|
"displayMode": "always_visible",
|
||||||
"enabled": false,
|
"dockType": "static",
|
||||||
|
"enabled": true,
|
||||||
"floatingRatio": 1,
|
"floatingRatio": 1,
|
||||||
"inactiveIndicators": false,
|
"inactiveIndicators": true,
|
||||||
"monitors": [
|
"monitors": [
|
||||||
"DP-5"
|
|
||||||
],
|
],
|
||||||
"onlySameOutput": false,
|
"onlySameOutput": false,
|
||||||
"pinnedApps": [
|
"pinnedApps": [
|
||||||
|
"firefox",
|
||||||
|
"com.discordapp.Discord",
|
||||||
|
"com.moonlight_stream.Moonlight",
|
||||||
|
"Element"
|
||||||
],
|
],
|
||||||
"pinnedStatic": true,
|
"pinnedStatic": true,
|
||||||
"position": "bottom",
|
"position": "top",
|
||||||
"size": 0.77
|
"showFrameIndicator": true,
|
||||||
|
"sitOnFrame": false,
|
||||||
|
"size": 1.2
|
||||||
},
|
},
|
||||||
"general": {
|
"general": {
|
||||||
"allowPanelsOnScreenWithoutBar": true,
|
"allowPanelsOnScreenWithoutBar": true,
|
||||||
@@ -446,6 +579,9 @@
|
|||||||
"keyLeft": [
|
"keyLeft": [
|
||||||
"Left"
|
"Left"
|
||||||
],
|
],
|
||||||
|
"keyRemove": [
|
||||||
|
"Del"
|
||||||
|
],
|
||||||
"keyRight": [
|
"keyRight": [
|
||||||
"Right"
|
"Right"
|
||||||
],
|
],
|
||||||
@@ -456,12 +592,13 @@
|
|||||||
"language": "",
|
"language": "",
|
||||||
"lockOnSuspend": true,
|
"lockOnSuspend": true,
|
||||||
"lockScreenAnimations": true,
|
"lockScreenAnimations": true,
|
||||||
"lockScreenBlur": 0.5,
|
"lockScreenBlur": 0.8,
|
||||||
"lockScreenCountdownDuration": 10000,
|
"lockScreenCountdownDuration": 10000,
|
||||||
"lockScreenMonitors": [
|
"lockScreenMonitors": [
|
||||||
],
|
],
|
||||||
"lockScreenTint": 0,
|
"lockScreenTint": 0,
|
||||||
"radiusRatio": 1,
|
"radiusRatio": 1,
|
||||||
|
"reverseScroll": false,
|
||||||
"scaleRatio": 1,
|
"scaleRatio": 1,
|
||||||
"screenRadiusRatio": 1,
|
"screenRadiusRatio": 1,
|
||||||
"shadowDirection": "bottom_right",
|
"shadowDirection": "bottom_right",
|
||||||
@@ -499,10 +636,12 @@
|
|||||||
"weatherShowEffects": true
|
"weatherShowEffects": true
|
||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
|
"airplaneModeEnabled": false,
|
||||||
"bluetoothDetailsViewMode": "grid",
|
"bluetoothDetailsViewMode": "grid",
|
||||||
"bluetoothHideUnnamedDevices": false,
|
"bluetoothHideUnnamedDevices": false,
|
||||||
"bluetoothRssiPollIntervalMs": 10000,
|
"bluetoothRssiPollIntervalMs": 10000,
|
||||||
"bluetoothRssiPollingEnabled": false,
|
"bluetoothRssiPollingEnabled": false,
|
||||||
|
"disableDiscoverability": false,
|
||||||
"wifiDetailsViewMode": "list",
|
"wifiDetailsViewMode": "list",
|
||||||
"wifiEnabled": true
|
"wifiEnabled": true
|
||||||
},
|
},
|
||||||
@@ -517,9 +656,12 @@
|
|||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
"backgroundOpacity": 1,
|
"backgroundOpacity": 1,
|
||||||
|
"clearDismissed": true,
|
||||||
"criticalUrgencyDuration": 15,
|
"criticalUrgencyDuration": 15,
|
||||||
|
"density": "default",
|
||||||
"enableBatteryToast": true,
|
"enableBatteryToast": true,
|
||||||
"enableKeyboardLayoutToast": true,
|
"enableKeyboardLayoutToast": true,
|
||||||
|
"enableMarkdown": true,
|
||||||
"enableMediaToast": false,
|
"enableMediaToast": false,
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"location": "top_right",
|
"location": "top_right",
|
||||||
@@ -552,7 +694,8 @@
|
|||||||
"enabledTypes": [
|
"enabledTypes": [
|
||||||
0,
|
0,
|
||||||
1,
|
1,
|
||||||
2
|
2,
|
||||||
|
3
|
||||||
],
|
],
|
||||||
"location": "top_right",
|
"location": "top_right",
|
||||||
"monitors": [
|
"monitors": [
|
||||||
@@ -574,70 +717,71 @@
|
|||||||
"command": "",
|
"command": "",
|
||||||
"countdownEnabled": false,
|
"countdownEnabled": false,
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"keybind": ""
|
"keybind": "1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"action": "suspend",
|
"action": "suspend",
|
||||||
"command": "",
|
"command": "",
|
||||||
"countdownEnabled": true,
|
"countdownEnabled": true,
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"keybind": ""
|
"keybind": "2"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"action": "hibernate",
|
"action": "hibernate",
|
||||||
"command": "",
|
"command": "",
|
||||||
"countdownEnabled": true,
|
"countdownEnabled": true,
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"keybind": ""
|
"keybind": "3"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"action": "reboot",
|
"action": "reboot",
|
||||||
"command": "",
|
"command": "",
|
||||||
"countdownEnabled": true,
|
"countdownEnabled": true,
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"keybind": ""
|
"keybind": "4"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"action": "logout",
|
"action": "logout",
|
||||||
"command": "",
|
"command": "",
|
||||||
"countdownEnabled": true,
|
"countdownEnabled": true,
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"keybind": ""
|
"keybind": "5"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"action": "shutdown",
|
"action": "shutdown",
|
||||||
"command": "",
|
"command": "",
|
||||||
"countdownEnabled": true,
|
"countdownEnabled": true,
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
|
"keybind": "6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"action": "rebootToUefi",
|
||||||
|
"command": "",
|
||||||
|
"countdownEnabled": true,
|
||||||
|
"enabled": true,
|
||||||
"keybind": ""
|
"keybind": ""
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"showHeader": true,
|
"showHeader": true,
|
||||||
"showNumberLabels": true
|
"showKeybinds": true
|
||||||
},
|
},
|
||||||
"settingsVersion": 51,
|
"settingsVersion": 53,
|
||||||
"systemMonitor": {
|
"systemMonitor": {
|
||||||
"batteryCriticalThreshold": 5,
|
"batteryCriticalThreshold": 5,
|
||||||
"batteryWarningThreshold": 20,
|
"batteryWarningThreshold": 20,
|
||||||
"cpuCriticalThreshold": 90,
|
"cpuCriticalThreshold": 90,
|
||||||
"cpuPollingInterval": 1000,
|
|
||||||
"cpuWarningThreshold": 80,
|
"cpuWarningThreshold": 80,
|
||||||
"criticalColor": "",
|
"criticalColor": "",
|
||||||
"diskAvailCriticalThreshold": 10,
|
"diskAvailCriticalThreshold": 10,
|
||||||
"diskAvailWarningThreshold": 20,
|
"diskAvailWarningThreshold": 20,
|
||||||
"diskCriticalThreshold": 90,
|
"diskCriticalThreshold": 90,
|
||||||
"diskPollingInterval": 3000,
|
|
||||||
"diskWarningThreshold": 80,
|
"diskWarningThreshold": 80,
|
||||||
"enableDgpuMonitoring": false,
|
"enableDgpuMonitoring": false,
|
||||||
"externalMonitor": "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor",
|
"externalMonitor": "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor",
|
||||||
"gpuCriticalThreshold": 90,
|
"gpuCriticalThreshold": 90,
|
||||||
"gpuPollingInterval": 3000,
|
|
||||||
"gpuWarningThreshold": 80,
|
"gpuWarningThreshold": 80,
|
||||||
"loadAvgPollingInterval": 3000,
|
|
||||||
"memCriticalThreshold": 90,
|
"memCriticalThreshold": 90,
|
||||||
"memPollingInterval": 1000,
|
|
||||||
"memWarningThreshold": 80,
|
"memWarningThreshold": 80,
|
||||||
"networkPollingInterval": 1000,
|
|
||||||
"swapCriticalThreshold": 90,
|
"swapCriticalThreshold": 90,
|
||||||
"swapWarningThreshold": 80,
|
"swapWarningThreshold": 80,
|
||||||
"tempCriticalThreshold": 90,
|
"tempCriticalThreshold": 90,
|
||||||
@@ -690,6 +834,8 @@
|
|||||||
"directory": "/home/aiden/Pictures/Wallpapers",
|
"directory": "/home/aiden/Pictures/Wallpapers",
|
||||||
"enableMultiMonitorDirectories": true,
|
"enableMultiMonitorDirectories": true,
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
|
"favorites": [
|
||||||
|
],
|
||||||
"fillColor": "#000000",
|
"fillColor": "#000000",
|
||||||
"fillMode": "crop",
|
"fillMode": "crop",
|
||||||
"hideWallpaperFilenames": false,
|
"hideWallpaperFilenames": false,
|
||||||
@@ -707,6 +853,7 @@
|
|||||||
"randomIntervalSec": 600,
|
"randomIntervalSec": 600,
|
||||||
"setWallpaperOnAllMonitors": false,
|
"setWallpaperOnAllMonitors": false,
|
||||||
"showHiddenFiles": false,
|
"showHiddenFiles": false,
|
||||||
|
"skipStartupTransition": false,
|
||||||
"solidColor": "#1a1a2e",
|
"solidColor": "#1a1a2e",
|
||||||
"sortOrder": "name",
|
"sortOrder": "name",
|
||||||
"transitionDuration": 1500,
|
"transitionDuration": 1500,
|
||||||
|
|||||||
Reference in New Issue
Block a user