mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
bar: added override for display mode for other monitors
This commit is contained in:
@@ -870,6 +870,17 @@ Singleton {
|
||||
return data.bar.density || "default";
|
||||
}
|
||||
|
||||
// -----------------------------------------------------
|
||||
// Get effective bar display mode for a screen (with inheritance)
|
||||
// If the screen has a displayMode override and overrides are enabled, use it; otherwise use global default
|
||||
function getBarDisplayModeForScreen(screenName) {
|
||||
var override = _findScreenOverride(screenName);
|
||||
if (override && override.enabled !== false && override.displayMode !== undefined) {
|
||||
return override.displayMode;
|
||||
}
|
||||
return data.bar.displayMode || "always_visible";
|
||||
}
|
||||
|
||||
// -----------------------------------------------------
|
||||
// Check if a screen has any overrides, optionally for a specific property
|
||||
function hasScreenOverride(screenName, property) {
|
||||
|
||||
@@ -85,7 +85,7 @@ Variants {
|
||||
return false;
|
||||
if (!BarService.effectivelyVisible)
|
||||
return false;
|
||||
if (Settings.data.bar.displayMode !== "auto_hide")
|
||||
if (Settings.getBarDisplayModeForScreen(modelData?.name) !== "auto_hide")
|
||||
return false;
|
||||
|
||||
// Check if bar is configured for this screen
|
||||
|
||||
@@ -43,7 +43,7 @@ PanelWindow {
|
||||
readonly property real barHeight: Style.getBarHeightForScreen(barWindow.screen?.name)
|
||||
|
||||
// Auto-hide properties
|
||||
readonly property bool autoHide: Settings.data.bar.displayMode === "auto_hide"
|
||||
readonly property bool autoHide: Settings.getBarDisplayModeForScreen(barWindow.screen?.name) === "auto_hide"
|
||||
readonly property int hideDelay: Settings.data.bar.autoHideDelay || 500
|
||||
readonly property int showDelay: Settings.data.bar.autoShowDelay || 100
|
||||
property bool isHidden: autoHide
|
||||
|
||||
@@ -18,8 +18,8 @@ PanelWindow {
|
||||
property string edge: Settings.getBarPositionForScreen(screen?.name)
|
||||
property real thickness: (edge === Settings.getBarPositionForScreen(screen?.name)) ? Style.getBarHeightForScreen(screen?.name) : (Settings.data.bar.frameThickness ?? 12)
|
||||
|
||||
readonly property bool autoHide: Settings.data.bar.displayMode === "auto_hide"
|
||||
readonly property bool nonExclusive: Settings.data.bar.displayMode === "non_exclusive"
|
||||
readonly property bool autoHide: Settings.getBarDisplayModeForScreen(screen?.name) === "auto_hide"
|
||||
readonly property bool nonExclusive: Settings.getBarDisplayModeForScreen(screen?.name) === "non_exclusive"
|
||||
readonly property bool barFloating: Settings.data.bar.floating || false
|
||||
readonly property real barMarginH: (barFloating && edge === Settings.getBarPositionForScreen(screen?.name)) ? Math.ceil(Settings.data.bar.marginHorizontal) : 0
|
||||
readonly property real barMarginV: (barFloating && edge === Settings.getBarPositionForScreen(screen?.name)) ? Math.ceil(Settings.data.bar.marginVertical) : 0
|
||||
|
||||
@@ -383,7 +383,7 @@ PanelWindow {
|
||||
readonly property real barHeight: Style.getBarHeightForScreen(screen?.name)
|
||||
|
||||
// Auto-hide properties (read by AllBackgrounds for background fade)
|
||||
readonly property bool autoHide: Settings.data.bar.displayMode === "auto_hide"
|
||||
readonly property bool autoHide: Settings.getBarDisplayModeForScreen(screen?.name) === "auto_hide"
|
||||
property bool isHidden: autoHide
|
||||
|
||||
Connections {
|
||||
|
||||
@@ -191,6 +191,34 @@ ColumnLayout {
|
||||
}
|
||||
}
|
||||
|
||||
// DisplayMode override
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
spacing: Style.marginS
|
||||
|
||||
NComboBox {
|
||||
Layout.fillWidth: true
|
||||
label: I18n.tr("common.display-mode")
|
||||
description: I18n.tr("panels.bar.appearance-display-mode-description")
|
||||
model: [
|
||||
{
|
||||
"key": "always_visible",
|
||||
"name": I18n.tr("hide-modes.visible")
|
||||
},
|
||||
{
|
||||
"key": "non_exclusive",
|
||||
"name": I18n.tr("hide-modes.non-exclusive")
|
||||
},
|
||||
{
|
||||
"key": "auto_hide",
|
||||
"name": I18n.tr("hide-modes.auto-hide")
|
||||
}
|
||||
]
|
||||
currentKey: Settings.getBarDisplayModeForScreen(monitorCard.screenName)
|
||||
onSelected: key => Settings.setScreenOverride(monitorCard.screenName, "displayMode", key)
|
||||
}
|
||||
}
|
||||
|
||||
// Widgets configuration button and Reset all
|
||||
RowLayout {
|
||||
Layout.fillWidth: true
|
||||
|
||||
@@ -40,9 +40,13 @@ Singleton {
|
||||
function showBar() {
|
||||
BarService.show();
|
||||
}
|
||||
function setDisplayMode(mode: string) {
|
||||
function setDisplayMode(mode: string, screen: string) {
|
||||
if (mode === "always_visible" || mode === "non_exclusive" || mode === "auto_hide") {
|
||||
Settings.data.bar.displayMode = mode;
|
||||
if (!screen || screen === "all") {
|
||||
Settings.data.bar.displayMode = mode;
|
||||
} else {
|
||||
Settings.setScreenOverride(screen, "displayMode", mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
function setPosition(position: string, screen: string) {
|
||||
|
||||
+58
-30
@@ -48,7 +48,7 @@ Singleton {
|
||||
if (!screenAutoHideState[screenName]) {
|
||||
screenAutoHideState[screenName] = {
|
||||
"hovered": false,
|
||||
"hidden": Settings.data.bar.displayMode === "auto_hide"
|
||||
"hidden": Settings.getBarDisplayModeForScreen(screenName) === "auto_hide"
|
||||
};
|
||||
}
|
||||
return screenAutoHideState[screenName];
|
||||
@@ -87,46 +87,56 @@ Singleton {
|
||||
}
|
||||
|
||||
// Toggle bar visibility. In auto-hide mode, toggles the auto-hide state
|
||||
// on all screens instead of setting the global isVisible flag.
|
||||
// on screens with auto-hide enabled. For other screens, toggles global isVisible flag.
|
||||
function toggleVisibility() {
|
||||
if (Settings.data.bar.displayMode === "auto_hide") {
|
||||
// Check if any screen is currently visible (not hidden)
|
||||
var anyVisible = false;
|
||||
for (var screenName in screenAutoHideState) {
|
||||
// Check if any auto-hide screen is currently visible
|
||||
var anyAutoHideVisible = false;
|
||||
var hasAutoHideScreens = false;
|
||||
for (var screenName in screenAutoHideState) {
|
||||
if (Settings.getBarDisplayModeForScreen(screenName) === "auto_hide") {
|
||||
hasAutoHideScreens = true;
|
||||
if (!screenAutoHideState[screenName].hidden) {
|
||||
anyVisible = true;
|
||||
anyAutoHideVisible = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Toggle all screens
|
||||
for (var screenName in screenAutoHideState) {
|
||||
setScreenHidden(screenName, anyVisible);
|
||||
}
|
||||
} else {
|
||||
isVisible = !isVisible;
|
||||
}
|
||||
|
||||
// Toggle auto-hide screens
|
||||
if (hasAutoHideScreens) {
|
||||
for (var screenName in screenAutoHideState) {
|
||||
if (Settings.getBarDisplayModeForScreen(screenName) === "auto_hide") {
|
||||
setScreenHidden(screenName, anyAutoHideVisible);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Toggle global visibility (affects non-auto-hide screens)
|
||||
isVisible = !isVisible;
|
||||
}
|
||||
|
||||
// Show bar. In auto-hide mode, un-hides on all screens.
|
||||
// Show bar. In auto-hide mode, un-hides on screens with auto-hide enabled.
|
||||
function show() {
|
||||
if (Settings.data.bar.displayMode === "auto_hide") {
|
||||
for (var screenName in screenAutoHideState) {
|
||||
// Show auto-hide screens
|
||||
for (var screenName in screenAutoHideState) {
|
||||
if (Settings.getBarDisplayModeForScreen(screenName) === "auto_hide") {
|
||||
setScreenHidden(screenName, false);
|
||||
}
|
||||
} else {
|
||||
isVisible = true;
|
||||
}
|
||||
// Set global visibility (affects non-auto-hide screens)
|
||||
isVisible = true;
|
||||
}
|
||||
|
||||
// Hide bar. In auto-hide mode, hides on all screens.
|
||||
// Hide bar. In auto-hide mode, hides on screens with auto-hide enabled.
|
||||
function hide() {
|
||||
if (Settings.data.bar.displayMode === "auto_hide") {
|
||||
for (var screenName in screenAutoHideState) {
|
||||
// Hide auto-hide screens
|
||||
for (var screenName in screenAutoHideState) {
|
||||
if (Settings.getBarDisplayModeForScreen(screenName) === "auto_hide") {
|
||||
setScreenHidden(screenName, true);
|
||||
}
|
||||
} else {
|
||||
isVisible = false;
|
||||
}
|
||||
// Set global visibility (affects non-auto-hide screens)
|
||||
isVisible = false;
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
@@ -139,14 +149,32 @@ Singleton {
|
||||
function onDisplayModeChanged() {
|
||||
Logger.d("BarService", "Display mode changed to:", Settings.data.bar.displayMode);
|
||||
|
||||
if (Settings.data.bar.displayMode === "auto_hide") {
|
||||
// When switching to auto_hide mode, hide the bar on all screens
|
||||
for (let screenName in screenAutoHideState) {
|
||||
setScreenHidden(screenName, true);
|
||||
// Only affect screens without displayMode overrides
|
||||
for (let screenName in screenAutoHideState) {
|
||||
if (!Settings.hasScreenOverride(screenName, "displayMode")) {
|
||||
var displayMode = Settings.getBarDisplayModeForScreen(screenName);
|
||||
if (displayMode === "auto_hide") {
|
||||
setScreenHidden(screenName, true);
|
||||
} else {
|
||||
if (screenAutoHideState[screenName].hidden) {
|
||||
setScreenHidden(screenName, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// When switching out of auto_hide mode, show the bar on all screens
|
||||
for (let screenName in screenAutoHideState) {
|
||||
}
|
||||
}
|
||||
|
||||
function onScreenOverridesChanged() {
|
||||
Logger.d("BarService", "Screen overrides changed, re-evaluating auto-hide states");
|
||||
|
||||
// Re-evaluate auto-hide state for all screens
|
||||
for (let screenName in screenAutoHideState) {
|
||||
var displayMode = Settings.getBarDisplayModeForScreen(screenName);
|
||||
if (displayMode === "auto_hide") {
|
||||
if (!screenAutoHideState[screenName].hidden) {
|
||||
setScreenHidden(screenName, true);
|
||||
}
|
||||
} else {
|
||||
if (screenAutoHideState[screenName].hidden) {
|
||||
setScreenHidden(screenName, false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user