forked from Shinonome/dots-hyprland
overview: add ipc handlers for clipboard history and emoji picker
This commit is contained in:
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user