overview: add ipc handlers for clipboard history and emoji picker

This commit is contained in:
end-4
2025-07-21 20:44:37 +07:00
parent 349700d7fb
commit 8ff226fbad
@@ -44,11 +44,12 @@ Scope {
HyprlandFocusGrab { HyprlandFocusGrab {
id: grab id: grab
windows: [ root ] windows: [root]
property bool canBeActive: root.monitorIsFocused property bool canBeActive: root.monitorIsFocused
active: false active: false
onCleared: () => { onCleared: () => {
if (!active) GlobalStates.overviewOpen = false if (!active)
GlobalStates.overviewOpen = false;
} }
} }
@@ -56,13 +57,13 @@ Scope {
target: GlobalStates target: GlobalStates
function onOverviewOpenChanged() { function onOverviewOpenChanged() {
if (!GlobalStates.overviewOpen) { if (!GlobalStates.overviewOpen) {
searchWidget.disableExpandAnimation() searchWidget.disableExpandAnimation();
overviewScope.dontAutoCancelSearch = false; overviewScope.dontAutoCancelSearch = false;
} else { } else {
if (!overviewScope.dontAutoCancelSearch) { if (!overviewScope.dontAutoCancelSearch) {
searchWidget.cancelSearch() searchWidget.cancelSearch();
} }
delayedGrabTimer.start() delayedGrabTimer.start();
} }
} }
} }
@@ -72,8 +73,9 @@ Scope {
interval: Config.options.hacks.arbitraryRaceConditionDelay interval: Config.options.hacks.arbitraryRaceConditionDelay
repeat: false repeat: false
onTriggered: { onTriggered: {
if (!grab.canBeActive) return if (!grab.canBeActive)
grab.active = GlobalStates.overviewOpen return;
grab.active = GlobalStates.overviewOpen;
} }
} }
@@ -93,13 +95,15 @@ Scope {
top: parent.top top: parent.top
} }
Keys.onPressed: (event) => { Keys.onPressed: event => {
if (event.key === Qt.Key_Escape) { if (event.key === Qt.Key_Escape) {
GlobalStates.overviewOpen = false; GlobalStates.overviewOpen = false;
} else if (event.key === Qt.Key_Left) { } else if (event.key === Qt.Key_Left) {
if (!root.searchingText) Hyprland.dispatch("workspace r-1"); if (!root.searchingText)
Hyprland.dispatch("workspace r-1");
} else if (event.key === Qt.Key_Right) { } else if (event.key === Qt.Key_Right) {
if (!root.searchingText) Hyprland.dispatch("workspace r+1"); if (!root.searchingText)
Hyprland.dispatch("workspace r+1");
} }
} }
@@ -111,8 +115,8 @@ Scope {
SearchWidget { SearchWidget {
id: searchWidget id: searchWidget
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
onSearchingTextChanged: (text) => { onSearchingTextChanged: text => {
root.searchingText = searchingText root.searchingText = searchingText;
} }
} }
@@ -125,33 +129,67 @@ Scope {
} }
} }
} }
}
}
function toggleClipboard() {
if (GlobalStates.overviewOpen && overviewScope.dontAutoCancelSearch) {
GlobalStates.overviewOpen = false;
return;
}
for (let i = 0; i < overviewVariants.instances.length; i++) {
let panelWindow = overviewVariants.instances[i];
if (panelWindow.modelData.name == Hyprland.focusedMonitor.name) {
overviewScope.dontAutoCancelSearch = true;
panelWindow.setSearchingText(Config.options.search.prefix.clipboard);
GlobalStates.overviewOpen = true;
return;
}
}
}
function toggleEmojis() {
if (GlobalStates.overviewOpen && overviewScope.dontAutoCancelSearch) {
GlobalStates.overviewOpen = false;
return;
}
for (let i = 0; i < overviewVariants.instances.length; i++) {
let panelWindow = overviewVariants.instances[i];
if (panelWindow.modelData.name == Hyprland.focusedMonitor.name) {
overviewScope.dontAutoCancelSearch = true;
panelWindow.setSearchingText(Config.options.search.prefix.emojis);
GlobalStates.overviewOpen = true;
return;
}
} }
} }
IpcHandler { IpcHandler {
target: "overview" target: "overview"
function toggle() { function toggle() {
GlobalStates.overviewOpen = !GlobalStates.overviewOpen GlobalStates.overviewOpen = !GlobalStates.overviewOpen;
} }
function close() { function close() {
GlobalStates.overviewOpen = false GlobalStates.overviewOpen = false;
} }
function open() { function open() {
GlobalStates.overviewOpen = true GlobalStates.overviewOpen = true;
} }
function toggleReleaseInterrupt() { function toggleReleaseInterrupt() {
GlobalStates.superReleaseMightTrigger = false GlobalStates.superReleaseMightTrigger = false;
} }
} function clipboardToggle() {
overviewScope.toggleClipboard();
}
}
GlobalShortcut { GlobalShortcut {
name: "overviewToggle" name: "overviewToggle"
description: "Toggles overview on press" description: "Toggles overview on press"
onPressed: { onPressed: {
GlobalStates.overviewOpen = !GlobalStates.overviewOpen GlobalStates.overviewOpen = !GlobalStates.overviewOpen;
} }
} }
GlobalShortcut { GlobalShortcut {
@@ -159,7 +197,7 @@ Scope {
description: "Closes overview" description: "Closes overview"
onPressed: { onPressed: {
GlobalStates.overviewOpen = false GlobalStates.overviewOpen = false;
} }
} }
GlobalShortcut { GlobalShortcut {
@@ -167,25 +205,23 @@ Scope {
description: "Toggles overview on release" description: "Toggles overview on release"
onPressed: { onPressed: {
GlobalStates.superReleaseMightTrigger = true GlobalStates.superReleaseMightTrigger = true;
} }
onReleased: { onReleased: {
if (!GlobalStates.superReleaseMightTrigger) { if (!GlobalStates.superReleaseMightTrigger) {
GlobalStates.superReleaseMightTrigger = true GlobalStates.superReleaseMightTrigger = true;
return return;
} }
GlobalStates.overviewOpen = !GlobalStates.overviewOpen GlobalStates.overviewOpen = !GlobalStates.overviewOpen;
} }
} }
GlobalShortcut { GlobalShortcut {
name: "overviewToggleReleaseInterrupt" name: "overviewToggleReleaseInterrupt"
description: "Interrupts possibility of overview being toggled on release. " + description: "Interrupts possibility of overview being toggled on release. " + "This is necessary because GlobalShortcut.onReleased in quickshell triggers whether or not you press something else while holding the key. " + "To make sure this works consistently, use binditn = MODKEYS, catchall in an automatically triggered submap that includes everything."
"This is necessary because GlobalShortcut.onReleased in quickshell triggers whether or not you press something else while holding the key. " +
"To make sure this works consistently, use binditn = MODKEYS, catchall in an automatically triggered submap that includes everything."
onPressed: { onPressed: {
GlobalStates.superReleaseMightTrigger = false GlobalStates.superReleaseMightTrigger = false;
} }
} }
GlobalShortcut { GlobalShortcut {
@@ -193,21 +229,7 @@ Scope {
description: "Toggle clipboard query on overview widget" description: "Toggle clipboard query on overview widget"
onPressed: { onPressed: {
if (GlobalStates.overviewOpen && overviewScope.dontAutoCancelSearch) { overviewScope.toggleClipboard();
GlobalStates.overviewOpen = false;
return;
}
for (let i = 0; i < overviewVariants.instances.length; i++) {
let panelWindow = overviewVariants.instances[i];
if (panelWindow.modelData.name == Hyprland.focusedMonitor.name) {
overviewScope.dontAutoCancelSearch = true;
panelWindow.setSearchingText(
Config.options.search.prefix.clipboard
);
GlobalStates.overviewOpen = true;
return
}
}
} }
} }
@@ -216,22 +238,7 @@ Scope {
description: "Toggle emoji query on overview widget" description: "Toggle emoji query on overview widget"
onPressed: { onPressed: {
if (GlobalStates.overviewOpen && overviewScope.dontAutoCancelSearch) { overviewScope.toggleEmojis();
GlobalStates.overviewOpen = false;
return;
}
for (let i = 0; i < overviewVariants.instances.length; i++) {
let panelWindow = overviewVariants.instances[i];
if (panelWindow.modelData.name == Hyprland.focusedMonitor.name) {
overviewScope.dontAutoCancelSearch = true;
panelWindow.setSearchingText(
Config.options.search.prefix.emojis
);
GlobalStates.overviewOpen = true;
return
}
}
} }
} }
} }