1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-28 23:42:51 -05:00

clipboard: introduce native clipboard, clip-persist, clip-storage functionality

This commit is contained in:
bbedward
2025-12-11 09:41:07 -05:00
parent 7c88865d67
commit 6d62229b5f
41 changed files with 4372 additions and 547 deletions

View File

@@ -1,5 +1,4 @@
import QtQuick
import qs.Common
QtObject {
id: keyboardController
@@ -7,125 +6,133 @@ QtObject {
required property var modal
function reset() {
modal.selectedIndex = 0
modal.keyboardNavigationActive = false
modal.showKeyboardHints = false
modal.selectedIndex = 0;
modal.keyboardNavigationActive = false;
modal.showKeyboardHints = false;
}
function selectNext() {
if (!modal.filteredClipboardModel || modal.filteredClipboardModel.count === 0) {
return
if (!modal.clipboardEntries || modal.clipboardEntries.length === 0) {
return;
}
modal.keyboardNavigationActive = true
modal.selectedIndex = Math.min(modal.selectedIndex + 1, modal.filteredClipboardModel.count - 1)
modal.keyboardNavigationActive = true;
modal.selectedIndex = Math.min(modal.selectedIndex + 1, modal.clipboardEntries.length - 1);
}
function selectPrevious() {
if (!modal.filteredClipboardModel || modal.filteredClipboardModel.count === 0) {
return
if (!modal.clipboardEntries || modal.clipboardEntries.length === 0) {
return;
}
modal.keyboardNavigationActive = true
modal.selectedIndex = Math.max(modal.selectedIndex - 1, 0)
modal.keyboardNavigationActive = true;
modal.selectedIndex = Math.max(modal.selectedIndex - 1, 0);
}
function copySelected() {
if (!modal.filteredClipboardModel || modal.filteredClipboardModel.count === 0 || modal.selectedIndex < 0 || modal.selectedIndex >= modal.filteredClipboardModel.count) {
return
if (!modal.clipboardEntries || modal.clipboardEntries.length === 0 || modal.selectedIndex < 0 || modal.selectedIndex >= modal.clipboardEntries.length) {
return;
}
const selectedEntry = modal.filteredClipboardModel.get(modal.selectedIndex).entry
modal.copyEntry(selectedEntry)
const selectedEntry = modal.clipboardEntries[modal.selectedIndex];
modal.copyEntry(selectedEntry);
}
function deleteSelected() {
if (!modal.filteredClipboardModel || modal.filteredClipboardModel.count === 0 || modal.selectedIndex < 0 || modal.selectedIndex >= modal.filteredClipboardModel.count) {
return
if (!modal.clipboardEntries || modal.clipboardEntries.length === 0 || modal.selectedIndex < 0 || modal.selectedIndex >= modal.clipboardEntries.length) {
return;
}
const selectedEntry = modal.filteredClipboardModel.get(modal.selectedIndex).entry
modal.deleteEntry(selectedEntry)
const selectedEntry = modal.clipboardEntries[modal.selectedIndex];
modal.deleteEntry(selectedEntry);
}
function handleKey(event) {
if (event.key === Qt.Key_Escape) {
switch (event.key) {
case Qt.Key_Escape:
if (modal.keyboardNavigationActive) {
modal.keyboardNavigationActive = false
event.accepted = true
modal.keyboardNavigationActive = false;
} else {
modal.hide()
event.accepted = true
modal.hide();
}
} else if (event.key === Qt.Key_Down || event.key === Qt.Key_Tab) {
event.accepted = true;
return;
case Qt.Key_Down:
case Qt.Key_Tab:
if (!modal.keyboardNavigationActive) {
modal.keyboardNavigationActive = true
modal.selectedIndex = 0
event.accepted = true
modal.keyboardNavigationActive = true;
modal.selectedIndex = 0;
} else {
selectNext()
event.accepted = true
selectNext();
}
} else if (event.key === Qt.Key_Up || event.key === Qt.Key_Backtab) {
event.accepted = true;
return;
case Qt.Key_Up:
case Qt.Key_Backtab:
if (!modal.keyboardNavigationActive) {
modal.keyboardNavigationActive = true
modal.selectedIndex = 0
event.accepted = true
modal.keyboardNavigationActive = true;
modal.selectedIndex = 0;
} else if (modal.selectedIndex === 0) {
modal.keyboardNavigationActive = false
event.accepted = true
modal.keyboardNavigationActive = false;
} else {
selectPrevious()
event.accepted = true
selectPrevious();
}
} else if (event.key === Qt.Key_N && event.modifiers & Qt.ControlModifier) {
if (!modal.keyboardNavigationActive) {
modal.keyboardNavigationActive = true
modal.selectedIndex = 0
} else {
selectNext()
}
event.accepted = true
} else if (event.key === Qt.Key_P && event.modifiers & Qt.ControlModifier) {
if (!modal.keyboardNavigationActive) {
modal.keyboardNavigationActive = true
modal.selectedIndex = 0
} else if (modal.selectedIndex === 0) {
modal.keyboardNavigationActive = false
} else {
selectPrevious()
}
event.accepted = true
} else if (event.key === Qt.Key_J && event.modifiers & Qt.ControlModifier) {
if (!modal.keyboardNavigationActive) {
modal.keyboardNavigationActive = true
modal.selectedIndex = 0
} else {
selectNext()
}
event.accepted = true
} else if (event.key === Qt.Key_K && event.modifiers & Qt.ControlModifier) {
if (!modal.keyboardNavigationActive) {
modal.keyboardNavigationActive = true
modal.selectedIndex = 0
} else if (modal.selectedIndex === 0) {
modal.keyboardNavigationActive = false
} else {
selectPrevious()
}
event.accepted = true
} else if (event.key === Qt.Key_Delete && (event.modifiers & Qt.ShiftModifier)) {
modal.clearAll()
modal.hide()
event.accepted = true
} else if (modal.keyboardNavigationActive) {
if ((event.key === Qt.Key_C && (event.modifiers & Qt.ControlModifier)) || event.key === Qt.Key_Return || event.key === Qt.Key_Enter) {
copySelected()
event.accepted = true
} else if (event.key === Qt.Key_Delete) {
deleteSelected()
event.accepted = true
event.accepted = true;
return;
case Qt.Key_F10:
modal.showKeyboardHints = !modal.showKeyboardHints;
event.accepted = true;
return;
}
if (event.modifiers & Qt.ControlModifier) {
switch (event.key) {
case Qt.Key_N:
case Qt.Key_J:
if (!modal.keyboardNavigationActive) {
modal.keyboardNavigationActive = true;
modal.selectedIndex = 0;
} else {
selectNext();
}
event.accepted = true;
return;
case Qt.Key_P:
case Qt.Key_K:
if (!modal.keyboardNavigationActive) {
modal.keyboardNavigationActive = true;
modal.selectedIndex = 0;
} else if (modal.selectedIndex === 0) {
modal.keyboardNavigationActive = false;
} else {
selectPrevious();
}
event.accepted = true;
return;
case Qt.Key_C:
if (modal.keyboardNavigationActive) {
copySelected();
event.accepted = true;
}
return;
}
}
if (event.key === Qt.Key_F10) {
modal.showKeyboardHints = !modal.showKeyboardHints
event.accepted = true
if (event.modifiers & Qt.ShiftModifier && event.key === Qt.Key_Delete) {
modal.clearAll();
modal.hide();
event.accepted = true;
return;
}
if (modal.keyboardNavigationActive) {
switch (event.key) {
case Qt.Key_Return:
case Qt.Key_Enter:
copySelected();
event.accepted = true;
return;
case Qt.Key_Delete:
deleteSelected();
event.accepted = true;
return;
}
}
}
}