mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	Added in proper focus handling for floating windows
This commit is contained in:
		
							parent
							
								
									ef2f3d3115
								
							
						
					
					
						commit
						01c6caced6
					
				
					 1 changed files with 19 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -57,20 +57,25 @@ swayc_t *container_under_pointer(void) {
 | 
			
		|||
		}
 | 
			
		||||
		// if workspace, search floating
 | 
			
		||||
		if (lookup->type == C_WORKSPACE) {
 | 
			
		||||
			len = lookup->floating->length;
 | 
			
		||||
			for (i = 0; i < len; ++i) {
 | 
			
		||||
			i = len = lookup->floating->length;
 | 
			
		||||
			bool got_floating = false;
 | 
			
		||||
			while (--i > -1) {
 | 
			
		||||
				sway_log(L_DEBUG, "Checking index %d of floating items", i);
 | 
			
		||||
				if (pointer_test(lookup->floating->items[i], &mouse_origin)) {
 | 
			
		||||
					sway_log(L_DEBUG, "Got hit for floatin on %d", i);
 | 
			
		||||
					lookup = lookup->floating->items[i];
 | 
			
		||||
					got_floating = true;
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			if (i < len) {
 | 
			
		||||
			if (got_floating) {
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		// search children
 | 
			
		||||
		len = lookup->children->length;
 | 
			
		||||
		for (i = 0; i < len; ++i) {
 | 
			
		||||
			sway_log(L_DEBUG, "Checking index %d of standard children", i);
 | 
			
		||||
			if (pointer_test(lookup->children->items[i], &mouse_origin)) {
 | 
			
		||||
				lookup = lookup->children->items[i];
 | 
			
		||||
				break;
 | 
			
		||||
| 
						 | 
				
			
			@ -441,6 +446,17 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w
 | 
			
		|||
		}
 | 
			
		||||
		swayc_t *pointer = container_under_pointer();
 | 
			
		||||
		set_focused_container(pointer);
 | 
			
		||||
		if (pointer->is_floating) {
 | 
			
		||||
			int i;
 | 
			
		||||
			for (i = 0; i < pointer->parent->floating->length; i++) {
 | 
			
		||||
				if (pointer->parent->floating->items[i] == pointer) {
 | 
			
		||||
					list_del(pointer->parent->floating, i);
 | 
			
		||||
					list_add(pointer->parent->floating, pointer);
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			arrange_windows(pointer->parent, -1, -1);
 | 
			
		||||
		}
 | 
			
		||||
		return (pointer && pointer != focused);
 | 
			
		||||
	} else {
 | 
			
		||||
		sway_log(L_DEBUG, "Mouse button %u released", button);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue