mirror of
				https://github.com/swaywm/sway.git
				synced 2025-10-29 05:40:18 -04:00 
			
		
		
		
	Re-render bar on IPC updates
This commit is contained in:
		
							parent
							
								
									3a458cd7b5
								
							
						
					
					
						commit
						86ba0fc15d
					
				
					 3 changed files with 53 additions and 4 deletions
				
			
		|  | @ -3,6 +3,7 @@ | |||
| #include <string.h> | ||||
| #include <strings.h> | ||||
| #include <json-c/json.h> | ||||
| #include <wlr/util/log.h> | ||||
| #include "swaybar/config.h" | ||||
| #include "swaybar/ipc.h" | ||||
| #include "ipc-client.h" | ||||
|  | @ -288,10 +289,51 @@ void ipc_initialize(struct swaybar *bar, const char *bar_id) { | |||
| 	ipc_parse_config(bar->config, res); | ||||
| 	free(res); | ||||
| 	ipc_get_outputs(bar); | ||||
| 	// TODO: subscribe to stuff
 | ||||
| 
 | ||||
| 	const char *subscribe = "[ \"workspace\", \"mode\" ]"; | ||||
| 	len = strlen(subscribe); | ||||
| 	free(ipc_single_command(bar->ipc_event_socketfd, | ||||
| 			IPC_SUBSCRIBE, subscribe, &len)); | ||||
| } | ||||
| 
 | ||||
| void handle_ipc_event(struct swaybar *bar) { | ||||
| bool handle_ipc_event(struct swaybar *bar) { | ||||
| 	struct ipc_response *resp = ipc_recv_response(bar->ipc_event_socketfd); | ||||
| 	if (!resp) { | ||||
| 		return false; | ||||
| 	} | ||||
| 	switch (resp->type) { | ||||
| 	case IPC_EVENT_WORKSPACE: | ||||
| 		ipc_get_workspaces(bar); | ||||
| 		break; | ||||
| 	case IPC_EVENT_MODE: { | ||||
| 		json_object *result = json_tokener_parse(resp->payload); | ||||
| 		if (!result) { | ||||
| 			free_ipc_response(resp); | ||||
| 			wlr_log(L_ERROR, "failed to parse payload as json"); | ||||
| 			return false; | ||||
| 		} | ||||
| 		json_object *json_change; | ||||
| 		if (json_object_object_get_ex(result, "change", &json_change)) { | ||||
| 			const char *change = json_object_get_string(json_change); | ||||
| 			free(bar->config->mode); | ||||
| 			if (strcmp(change, "default") == 0) { | ||||
| 				bar->config->mode = NULL; | ||||
| 			} else { | ||||
| 				bar->config->mode = strdup(change); | ||||
| 			} | ||||
| 		} else { | ||||
| 			wlr_log(L_ERROR, "failed to parse response"); | ||||
| 			json_object_put(result); | ||||
| 			free_ipc_response(resp); | ||||
| 			return false; | ||||
| 		} | ||||
| 		json_object_put(result); | ||||
| 		break; | ||||
| 	} | ||||
| 	default: | ||||
| 		free_ipc_response(resp); | ||||
| 		return false; | ||||
| 	} | ||||
| 	free_ipc_response(resp); | ||||
| 	return true; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Drew DeVault
						Drew DeVault