followpanel: add focus following panel example
This commit is contained in:
		
							parent
							
								
									9c83cc248c
								
							
						
					
					
						commit
						f76b43db25
					
				
					 2 changed files with 51 additions and 0 deletions
				
			
		
							
								
								
									
										6
									
								
								focus_following_panel/README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								focus_following_panel/README.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					# Focus following panel
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is a hyprland specific panel that follows monitor focus using the hyprland
 | 
				
			||||||
 | 
					unix socket for events. To run it you will need to be using hyprland.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can run the panel with `quickshell -p shell.qml`.
 | 
				
			||||||
							
								
								
									
										45
									
								
								focus_following_panel/shell.qml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								focus_following_panel/shell.qml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,45 @@
 | 
				
			||||||
 | 
					import QtQuick
 | 
				
			||||||
 | 
					import Quickshell
 | 
				
			||||||
 | 
					import Quickshell.Io
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ShellRoot {
 | 
				
			||||||
 | 
						Socket {
 | 
				
			||||||
 | 
							// Create and connect a Socket to the hyprland event socket.
 | 
				
			||||||
 | 
							// https://wiki.hyprland.org/IPC/
 | 
				
			||||||
 | 
							path: `/tmp/hypr/${Quickshell.env("HYPRLAND_INSTANCE_SIGNATURE")}/.socket2.sock`
 | 
				
			||||||
 | 
							connected: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							parser: SplitParser {
 | 
				
			||||||
 | 
								// Regex that will return the newly focused monitor when it changes.
 | 
				
			||||||
 | 
								property var regex: new RegExp("focusedmon>>(.+),.*");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// Sent for every line read from the socket
 | 
				
			||||||
 | 
								onRead: msg => {
 | 
				
			||||||
 | 
									const match = regex.exec(msg);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if (match != null) {
 | 
				
			||||||
 | 
										// Filter out the right screen from the list and update the panel.
 | 
				
			||||||
 | 
										// match[1] will always be the monitor name captured by the regex.
 | 
				
			||||||
 | 
										panel.screen = Quickshell.screens.filter(screen => screen.name == match[1])[0];
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// The default screen a panel will be created on under hyprland is the currently
 | 
				
			||||||
 | 
						// focused one. We use this since we don't get a focusedmon event on connect.
 | 
				
			||||||
 | 
						PanelWindow {
 | 
				
			||||||
 | 
							id: panel
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							anchors {
 | 
				
			||||||
 | 
								left: true
 | 
				
			||||||
 | 
								top: true
 | 
				
			||||||
 | 
								bottom: true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Text {
 | 
				
			||||||
 | 
								anchors.centerIn: parent
 | 
				
			||||||
 | 
								text: "todo"
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue