mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	Fix dangling pointer on focus swap/describe WS
This commit is contained in:
		
							parent
							
								
									93ac7d43a8
								
							
						
					
					
						commit
						64a183b23d
					
				
					 2 changed files with 11 additions and 1 deletions
				
			
		| 
						 | 
					@ -96,6 +96,7 @@ bool set_focused_container(swayc_t *c) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	swayc_t *active_ws = swayc_active_workspace();
 | 
						swayc_t *active_ws = swayc_active_workspace();
 | 
				
			||||||
 | 
						int active_ws_child_count = active_ws->children->length + active_ws->floating->length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	swayc_log(L_DEBUG, c, "Setting focus to %p:%ld", c, c->handle);
 | 
						swayc_log(L_DEBUG, c, "Setting focus to %p:%ld", c, c->handle);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -118,6 +119,11 @@ bool set_focused_container(swayc_t *c) {
 | 
				
			||||||
		p = p->parent;
 | 
							p = p->parent;
 | 
				
			||||||
		p->is_focused = false;
 | 
							p->is_focused = false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						// active_ws might have been destroyed by now
 | 
				
			||||||
 | 
						// (focus swap away from empty ws = destroy ws)
 | 
				
			||||||
 | 
						if (active_ws_child_count == 0) {
 | 
				
			||||||
 | 
							active_ws = NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// get new focused view and set focus to it.
 | 
						// get new focused view and set focus to it.
 | 
				
			||||||
	p = get_focused_view(c);
 | 
						p = get_focused_view(c);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -455,7 +455,11 @@ void ipc_get_outputs_callback(swayc_t *container, void *data) {
 | 
				
			||||||
void ipc_event_workspace(swayc_t *old, swayc_t *new) {
 | 
					void ipc_event_workspace(swayc_t *old, swayc_t *new) {
 | 
				
			||||||
	json_object *obj = json_object_new_object();
 | 
						json_object *obj = json_object_new_object();
 | 
				
			||||||
	json_object_object_add(obj, "change", json_object_new_string("focus"));
 | 
						json_object_object_add(obj, "change", json_object_new_string("focus"));
 | 
				
			||||||
 | 
						if (old) {
 | 
				
			||||||
		json_object_object_add(obj, "old", ipc_json_describe_workspace(old));
 | 
							json_object_object_add(obj, "old", ipc_json_describe_workspace(old));
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							json_object_object_add(obj, "old", NULL);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	json_object_object_add(obj, "current", ipc_json_describe_workspace(new));
 | 
						json_object_object_add(obj, "current", ipc_json_describe_workspace(new));
 | 
				
			||||||
	const char *json_string = json_object_to_json_string(obj);
 | 
						const char *json_string = json_object_to_json_string(obj);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue