Build the Panama Hyprland desktop
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
pragma Singleton
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// Shared UI state.
|
||||
//
|
||||
// Every overlay in the shell is mutually exclusive with the others -- opening
|
||||
// the overview should close the quick settings, and so on. Centralising that
|
||||
// here means no module needs a reference to any other module, and the IPC
|
||||
// handlers in shell.qml have exactly one thing to talk to.
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
import Quickshell
|
||||
import QtQuick
|
||||
import qs.config
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
|
||||
// Exactly one of these may be non-empty at a time.
|
||||
// "" | "overview" | "quicksettings" | "notifications" | "clipboard" | "capture" | "activity" | "powermenu"
|
||||
property string activeOverlay: ""
|
||||
|
||||
readonly property bool overviewOpen: activeOverlay === "overview"
|
||||
readonly property bool quickSettingsOpen: activeOverlay === "quicksettings"
|
||||
readonly property bool notificationsOpen: activeOverlay === "notifications"
|
||||
readonly property bool clipboardOpen: activeOverlay === "clipboard"
|
||||
readonly property bool captureOpen: activeOverlay === "capture"
|
||||
readonly property bool activityOpen: activeOverlay === "activity"
|
||||
readonly property bool powerMenuOpen: activeOverlay === "powermenu"
|
||||
|
||||
// Settings is a normal application window rather than a transient overlay.
|
||||
// It can stay open while Quick Settings or the notification center appears.
|
||||
property bool settingsOpen: false
|
||||
property string settingsPage: "home"
|
||||
|
||||
readonly property bool anyOverlayOpen: activeOverlay !== ""
|
||||
|
||||
// 0 means "use the currently focused workspace". A positive value lets a
|
||||
// contextual surface, such as Focus, open Mission Control at its target.
|
||||
property int overviewWorkspaceId: 0
|
||||
property string overviewQuery: ""
|
||||
|
||||
function toggle(name: string): void {
|
||||
root.activeOverlay = (root.activeOverlay === name) ? "" : name;
|
||||
}
|
||||
|
||||
function open(name: string): void {
|
||||
root.activeOverlay = name;
|
||||
}
|
||||
|
||||
function openOverview(workspaceId: int): void {
|
||||
root.overviewWorkspaceId = Math.max(0, workspaceId);
|
||||
root.overviewQuery = "";
|
||||
root.activeOverlay = "overview";
|
||||
}
|
||||
|
||||
function searchOverview(query: string): void {
|
||||
root.overviewWorkspaceId = 0;
|
||||
root.overviewQuery = query;
|
||||
root.activeOverlay = "overview";
|
||||
}
|
||||
|
||||
function close(): void {
|
||||
if (root.activeOverlay === "overview") {
|
||||
root.overviewWorkspaceId = 0;
|
||||
root.overviewQuery = "";
|
||||
}
|
||||
root.activeOverlay = "";
|
||||
}
|
||||
|
||||
function openSettings(page: string): void {
|
||||
const allowed = ["home", "appearance", "displays", "connectivity", "desktop", "sound", "notifications", "screen-intelligence", "shortcuts", "services", "about"];
|
||||
root.settingsPage = allowed.indexOf(page) >= 0 ? page : "home";
|
||||
DesktopPreferences.lastPage = root.settingsPage;
|
||||
root.settingsOpen = true;
|
||||
}
|
||||
|
||||
function toggleSettings(): void {
|
||||
if (root.settingsOpen) {
|
||||
root.closeSettings();
|
||||
return;
|
||||
}
|
||||
root.openSettings(DesktopPreferences.lastPage || "home");
|
||||
}
|
||||
|
||||
function closeSettings(): void {
|
||||
root.settingsOpen = false;
|
||||
}
|
||||
|
||||
// Set by Dock.qml so the bar can avoid fighting it for pointer grabs, and
|
||||
// read by the capture overlay so the dock isn't in the screenshot.
|
||||
property bool dockRevealed: false
|
||||
}
|
||||
Reference in New Issue
Block a user