[Astal] Finish modes, move tray into quickactions menu
This commit is contained in:
@@ -1,62 +1,15 @@
|
||||
import {
|
||||
GObject, bind,
|
||||
bind,
|
||||
exec,
|
||||
readFile
|
||||
} from 'astal';
|
||||
import AstalHyprland from 'gi://AstalHyprland';
|
||||
import AstalTray from 'gi://AstalTray';
|
||||
import {
|
||||
Gtk
|
||||
} from 'astal/gtk4';
|
||||
import Pango from 'gi://Pango?version=1.0';
|
||||
|
||||
const hypr = AstalHyprland.get_default();
|
||||
const SYNC = GObject.BindingFlags.SYNC_CREATE;
|
||||
|
||||
const SysTray = () => {
|
||||
const trayBox = new Gtk.Box( {
|
||||
'cssClasses': [ 'bar-button' ]
|
||||
} );
|
||||
const tray = AstalTray.get_default();
|
||||
const trayItems = new Map<string, Gtk.MenuButton>();
|
||||
const trayAddedHandler = tray.connect( 'item-added', ( _, id ) => {
|
||||
const item = tray.get_item( id );
|
||||
const popover = Gtk.PopoverMenu.new_from_model( item.menu_model );
|
||||
const icon = new Gtk.Image();
|
||||
const button = new Gtk.MenuButton( {
|
||||
popover,
|
||||
'child': icon,
|
||||
'cssClasses': [ 'tray-item' ],
|
||||
} );
|
||||
|
||||
item.bind_property(
|
||||
'gicon', icon, 'gicon', SYNC
|
||||
);
|
||||
popover.insert_action_group( 'dbusmenu', item.action_group );
|
||||
item.connect( 'notify::action-group', () => {
|
||||
popover.insert_action_group( 'dbusmenu', item.action_group );
|
||||
} );
|
||||
|
||||
trayItems.set( id, button );
|
||||
trayBox.append( button );
|
||||
} );
|
||||
const trayRemovedHandler = tray.connect( 'item-removed', ( _, id ) => {
|
||||
const button = trayItems.get( id );
|
||||
|
||||
if ( button ) {
|
||||
trayBox.remove( button );
|
||||
button.run_dispose();
|
||||
trayItems.delete( id );
|
||||
}
|
||||
} );
|
||||
|
||||
trayBox.connect( 'destroy', () => {
|
||||
tray.disconnect( trayAddedHandler );
|
||||
tray.disconnect( trayRemovedHandler );
|
||||
} );
|
||||
|
||||
return trayBox;
|
||||
};
|
||||
|
||||
const Workspace = () => {
|
||||
return (
|
||||
@@ -123,33 +76,33 @@ const ActiveWindow = () => {
|
||||
type submaps = 'device' | 'launch' | 'workspace' | 'windowing' | 'screenshotting' | 'notifications' | '';
|
||||
|
||||
const ModeStatus = () => {
|
||||
let isUsingHyprmode = false;
|
||||
let isUsingHyprvim = false;
|
||||
|
||||
try {
|
||||
const path = exec( 'bash -c "cd ~ && pwd"' ) + '/.config/hyprmode';
|
||||
const path = exec( 'bash -c "cd ~ && pwd"' ) + '/.config/hyprvim';
|
||||
|
||||
isUsingHyprmode = readFile( path ).trim() === 'y';
|
||||
isUsingHyprvim = readFile( path ).trim() === 'y';
|
||||
} catch ( e ) {
|
||||
printerr( 'Failed to read hyprmode config', e );
|
||||
printerr( 'Failed to read hyprvim config', e );
|
||||
}
|
||||
|
||||
const label = new Gtk.Label();
|
||||
|
||||
if ( !isUsingHyprmode ) return label;
|
||||
if ( !isUsingHyprvim ) return label;
|
||||
|
||||
print( '==> Using hyprmode config' );
|
||||
print( '==> Using hyprvim config' );
|
||||
|
||||
const map = {
|
||||
'device': 'D',
|
||||
'launch': 'L',
|
||||
'workspace': 'W',
|
||||
'windowing': 'M',
|
||||
'screenshotting': 'S',
|
||||
'notifications': 'N',
|
||||
'': 'N'
|
||||
'device': 'DEV',
|
||||
'launch': 'LNC',
|
||||
'workspace': 'WSP',
|
||||
'windowing': 'WIN',
|
||||
'screenshotting': 'SCS',
|
||||
'notifications': 'NOT',
|
||||
'': 'NRM'
|
||||
};
|
||||
|
||||
label.label = 'N';
|
||||
label.label = map[''];
|
||||
label.cssClasses = [ 'mode-status' ];
|
||||
|
||||
// TODO: Possibly add popover to it that lists binds
|
||||
@@ -189,6 +142,5 @@ const WindowPopoverBox = () => {
|
||||
export default {
|
||||
Workspace,
|
||||
ActiveWindow,
|
||||
SysTray,
|
||||
ModeStatus
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user