[AGS] Fixes for bar
This commit is contained in:
parent
19d59347b6
commit
54e216b5ec
@ -2,18 +2,44 @@ import { App } from "astal/gtk4"
|
|||||||
import style from "./style.scss"
|
import style from "./style.scss"
|
||||||
import Bar from "./components/bar/Bar";
|
import Bar from "./components/bar/Bar";
|
||||||
import AstalHyprland from "gi://AstalHyprland?version=0.1";
|
import AstalHyprland from "gi://AstalHyprland?version=0.1";
|
||||||
|
import { hyprToGdk } from "./util/hyprland";
|
||||||
|
|
||||||
App.start({
|
App.start({
|
||||||
instanceName: "runner",
|
instanceName: "runner",
|
||||||
css: style,
|
css: style,
|
||||||
main() {
|
main() {
|
||||||
const hypr = AstalHyprland.get_default();
|
const hypr = AstalHyprland.get_default();
|
||||||
const monitors = App.get_monitors();
|
const bars = new Map<number, string>();
|
||||||
for (let index = 0; index < monitors.length; index++) {
|
|
||||||
Bar.Bar( monitors[ index ] );
|
const barCreator = ( monitor: AstalHyprland.Monitor ) => {
|
||||||
|
const gdkMonitor = hyprToGdk( monitor );
|
||||||
|
if ( gdkMonitor ) {
|
||||||
|
print( 'Bar added for screen ' + monitor.get_id() );
|
||||||
|
bars.set( monitor.get_id(), Bar.BarLauncher( gdkMonitor ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Handle monitor add
|
for (const monitor of hypr.monitors) {
|
||||||
|
barCreator( monitor );
|
||||||
|
}
|
||||||
|
|
||||||
|
hypr.connect( 'monitor-added', ( _, monitor ) => {
|
||||||
|
barCreator( monitor );
|
||||||
|
} );
|
||||||
|
|
||||||
|
hypr.connect( 'monitor-removed', ( _, monitor ) => {
|
||||||
|
const windowName = bars.get( monitor );
|
||||||
|
if ( windowName ) {
|
||||||
|
const win = App.get_window( windowName );
|
||||||
|
if ( win ) {
|
||||||
|
App.toggle_window( windowName );
|
||||||
|
win.set_child( null );
|
||||||
|
App.remove_window( win );
|
||||||
|
print( 'Bar removed for screen', monitor );
|
||||||
|
}
|
||||||
|
bars.delete( monitor );
|
||||||
|
}
|
||||||
|
} );
|
||||||
},
|
},
|
||||||
requestHandler(request, res) {
|
requestHandler(request, res) {
|
||||||
const args = request.trimStart().split( ' ' );
|
const args = request.trimStart().split( ' ' );
|
||||||
@ -26,3 +52,4 @@ App.start({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -5,13 +5,15 @@ import QuickView from "./modules/QuickView";
|
|||||||
import SystemInfo from "./modules/SystemInfo";
|
import SystemInfo from "./modules/SystemInfo";
|
||||||
import { CenterBox } from "astal/gtk4/widget";
|
import { CenterBox } from "astal/gtk4/widget";
|
||||||
|
|
||||||
const Bar = (gdkmonitor: Gdk.Monitor) => {
|
const Bar = ( { gdkmonitor, name }: { gdkmonitor: Gdk.Monitor, name: string } ) => {
|
||||||
const { TOP, LEFT, RIGHT } = Astal.WindowAnchor;
|
const { TOP, LEFT, RIGHT } = Astal.WindowAnchor;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<window
|
<window
|
||||||
gdkmonitor={gdkmonitor}
|
gdkmonitor={gdkmonitor}
|
||||||
cssClasses={["Bar"]}
|
cssClasses={["Bar"]}
|
||||||
|
name={name}
|
||||||
|
namespace={"bar"}
|
||||||
exclusivity={Astal.Exclusivity.EXCLUSIVE}
|
exclusivity={Astal.Exclusivity.EXCLUSIVE}
|
||||||
anchor={TOP | LEFT | RIGHT}
|
anchor={TOP | LEFT | RIGHT}
|
||||||
visible
|
visible
|
||||||
@ -50,7 +52,19 @@ const cliHandler = (args: string[]): string => {
|
|||||||
return "Not implemented";
|
return "Not implemented";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const BarLauncher = ( monitor: Gdk.Monitor ) => {
|
||||||
|
const windowName = `bar-${monitor.get_connector()}`
|
||||||
|
const createBar = () => {
|
||||||
|
return <Bar gdkmonitor={monitor} name={windowName}></Bar>
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actually start the bar
|
||||||
|
createBar();
|
||||||
|
|
||||||
|
return windowName;
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
Bar,
|
BarLauncher,
|
||||||
cliHandler,
|
cliHandler,
|
||||||
};
|
};
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
$fg-color: #E6E6E6;
|
$fg-color: #E6E6E6;
|
||||||
$bg-color: #141414;
|
$bg-color: #141414;
|
||||||
$accent-color: #154881;
|
$accent-color: #B27BD1;
|
||||||
$accent-color-2: #ABADCD;
|
$accent-color-2: #5F50A6;
|
||||||
|
28
config/astal/util/hyprland.ts
Normal file
28
config/astal/util/hyprland.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// ┌ ┐
|
||||||
|
// │ From https://github.com/Neurarian/matshell │
|
||||||
|
// └ ┘
|
||||||
|
import { App, Gdk } from "astal/gtk4";
|
||||||
|
import Hyprland from "gi://AstalHyprland";
|
||||||
|
|
||||||
|
/* Match Hyprland monitor to GDK monitor
|
||||||
|
THIS MAY NOT WORK AS INTENDED IF YOU HAVE MONITORS OF THE SAME MODEL
|
||||||
|
I did not find a more elegant solution to this.
|
||||||
|
On my setup GDK coordinates and hyprland coordinates are flipped,
|
||||||
|
so I cant match by coordinates. */
|
||||||
|
|
||||||
|
export function hyprToGdk(monitor: Hyprland.Monitor): Gdk.Monitor | null {
|
||||||
|
const monitors = App.get_monitors();
|
||||||
|
if (!monitors || monitors.length === 0) return null;
|
||||||
|
|
||||||
|
for (let gdkmonitor of monitors) {
|
||||||
|
if (
|
||||||
|
monitor &&
|
||||||
|
gdkmonitor &&
|
||||||
|
monitor.get_name() === gdkmonitor.get_connector()
|
||||||
|
)
|
||||||
|
return gdkmonitor;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Default monitor with null safety
|
||||||
|
return monitors.length > 0 ? monitors[0] : null;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user