[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