feat: panel on focused monitor, wallpaper on all others
Panel without set_monitor so compositor places it on focused output. Wallpaper windows on TOP layer on all monitors (below OVERLAY panel). Transparent confirmation dialog background.
This commit is contained in:
parent
e6de12ea4b
commit
63bd7cfea9
@ -58,7 +58,6 @@ class MoonsetApp(Gtk.Application):
|
|||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
super().__init__(application_id="dev.moonarch.moonset")
|
super().__init__(application_id="dev.moonarch.moonset")
|
||||||
self._windows: list[PanelWindow] = []
|
|
||||||
|
|
||||||
def do_activate(self) -> None:
|
def do_activate(self) -> None:
|
||||||
"""Create and present power menu windows on all monitors."""
|
"""Create and present power menu windows on all monitors."""
|
||||||
@ -73,17 +72,24 @@ class MoonsetApp(Gtk.Application):
|
|||||||
config = load_config()
|
config = load_config()
|
||||||
bg_path = resolve_background_path(config)
|
bg_path = resolve_background_path(config)
|
||||||
|
|
||||||
# Panel window on every monitor — keyboard exclusive on all so
|
# Panel on focused output (no set_monitor → compositor picks focused)
|
||||||
# the focused monitor always captures input
|
|
||||||
monitors = display.get_monitors()
|
|
||||||
for i in range(monitors.get_n_items()):
|
|
||||||
monitor = monitors.get_item(i)
|
|
||||||
panel = PanelWindow(bg_path=bg_path, application=self)
|
panel = PanelWindow(bg_path=bg_path, application=self)
|
||||||
if HAS_LAYER_SHELL:
|
if HAS_LAYER_SHELL:
|
||||||
self._setup_layer_shell(panel, keyboard=True)
|
self._setup_layer_shell(panel, keyboard=True)
|
||||||
Gtk4LayerShell.set_monitor(panel, monitor)
|
|
||||||
panel.present()
|
panel.present()
|
||||||
self._windows.append(panel)
|
|
||||||
|
# Wallpaper on all other monitors
|
||||||
|
monitors = display.get_monitors()
|
||||||
|
for i in range(monitors.get_n_items()):
|
||||||
|
monitor = monitors.get_item(i)
|
||||||
|
wallpaper = WallpaperWindow(bg_path=bg_path, application=self)
|
||||||
|
if HAS_LAYER_SHELL:
|
||||||
|
self._setup_layer_shell(
|
||||||
|
wallpaper, keyboard=False,
|
||||||
|
layer=Gtk4LayerShell.Layer.TOP,
|
||||||
|
)
|
||||||
|
Gtk4LayerShell.set_monitor(wallpaper, monitor)
|
||||||
|
wallpaper.present()
|
||||||
|
|
||||||
def _load_css(self, display: Gdk.Display) -> None:
|
def _load_css(self, display: Gdk.Display) -> None:
|
||||||
"""Load the CSS stylesheet for the power menu."""
|
"""Load the CSS stylesheet for the power menu."""
|
||||||
@ -97,11 +103,14 @@ class MoonsetApp(Gtk.Application):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def _setup_layer_shell(
|
def _setup_layer_shell(
|
||||||
self, window: Gtk.Window, keyboard: bool = False
|
self, window: Gtk.Window, keyboard: bool = False,
|
||||||
|
layer: int | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Configure gtk4-layer-shell for fullscreen OVERLAY display."""
|
"""Configure gtk4-layer-shell for fullscreen display."""
|
||||||
Gtk4LayerShell.init_for_window(window)
|
Gtk4LayerShell.init_for_window(window)
|
||||||
Gtk4LayerShell.set_layer(window, Gtk4LayerShell.Layer.OVERLAY)
|
Gtk4LayerShell.set_layer(
|
||||||
|
window, layer if layer is not None else Gtk4LayerShell.Layer.OVERLAY
|
||||||
|
)
|
||||||
Gtk4LayerShell.set_exclusive_zone(window, -1)
|
Gtk4LayerShell.set_exclusive_zone(window, -1)
|
||||||
if keyboard:
|
if keyboard:
|
||||||
Gtk4LayerShell.set_keyboard_mode(
|
Gtk4LayerShell.set_keyboard_mode(
|
||||||
|
|||||||
@ -61,8 +61,7 @@ window.wallpaper {
|
|||||||
/* Confirmation box below action buttons */
|
/* Confirmation box below action buttons */
|
||||||
.confirm-box {
|
.confirm-box {
|
||||||
padding: 16px 24px;
|
padding: 16px 24px;
|
||||||
border-radius: 12px;
|
background-color: transparent;
|
||||||
background-color: @theme_base_color;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Confirmation prompt text */
|
/* Confirmation prompt text */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user