94 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {
 | |
|     exec
 | |
| } from 'astal';
 | |
| import {
 | |
|     Gtk
 | |
| } from 'astal/gtk4';
 | |
| 
 | |
| const PowerMenu = (): Gtk.Popover => {
 | |
|     const popover = new Gtk.Popover( {
 | |
|         'cssClasses': [ 'PowerMenu' ]
 | |
|     } );
 | |
| 
 | |
|     const powerMenuBox = () => {
 | |
|         return (
 | |
|             <box>
 | |
|                 <button
 | |
|                     cssClasses={[ 'power-button' ]}
 | |
|                     child={
 | |
|                         <image iconName={'system-shutdown-symbolic'}></image>
 | |
|                     }
 | |
|                     onClicked={() => exec( '/bin/sh -c \'shutdown now\'' )}
 | |
|                 ></button>
 | |
|                 <button
 | |
|                     cssClasses={[ 'power-button' ]}
 | |
|                     child={<image iconName={'system-reboot-symbolic'}></image>}
 | |
|                     onClicked={() => exec( '/bin/sh -c \'reboot\'' )}
 | |
|                 ></button>
 | |
|                 <button
 | |
|                     cssClasses={[ 'power-button' ]}
 | |
|                     child={<image iconName={'system-suspend-symbolic'}></image>}
 | |
|                     onClicked={() => exec( '/bin/sh -c \'systemctl suspend\'' )}
 | |
|                 ></button>
 | |
|             </box>
 | |
|         );
 | |
|     };
 | |
| 
 | |
|     popover.set_child( powerMenuBox() );
 | |
| 
 | |
|     return popover;
 | |
| };
 | |
| 
 | |
| const Power = () => {
 | |
|     const pm = PowerMenu();
 | |
| 
 | |
|     return (
 | |
|         <button
 | |
|             widthRequest={0}
 | |
|             hexpand={false}
 | |
|             vexpand={false}
 | |
|             cssClasses={[ 'power-menu-button' ]}
 | |
|             child={
 | |
|                 <box>
 | |
|                     <image iconName={'system-shutdown-symbolic'}></image>
 | |
|                     {pm}
 | |
|                 </box>
 | |
|             }
 | |
|             onClicked={() => pm.popup()}
 | |
|         />
 | |
|     );
 | |
| };
 | |
| 
 | |
| const UserMenu = (): Gtk.Popover => {
 | |
|     const popover = new Gtk.Popover();
 | |
| 
 | |
|     const powerMenuBox = () => {
 | |
|         return (
 | |
|             <box>
 | |
|                 <button
 | |
|                     cssClasses={[ 'power-button' ]}
 | |
|                     child={
 | |
|                         <image iconName={'system-lock-screen-symbolic'}></image>
 | |
|                     }
 | |
|                     onClicked={() => exec( '/bin/sh -c \'hyprlock\'' )}
 | |
|                 ></button>
 | |
|                 <button
 | |
|                     cssClasses={[ 'power-button' ]}
 | |
|                     child={<image iconName={'system-log-out-symbolic'}></image>}
 | |
|                     onClicked={() => exec( '/bin/sh -c \'hyprctl dispatch exit 0\'' )
 | |
|                     }
 | |
|                 ></button>
 | |
|             </box>
 | |
|         );
 | |
|     };
 | |
| 
 | |
|     popover.set_child( powerMenuBox() );
 | |
| 
 | |
|     return popover;
 | |
| };
 | |
| 
 | |
| export default {
 | |
|     Power,
 | |
|     UserMenu
 | |
| };
 |