mirror of
				https://codeberg.org/dwl/dwl.git
				synced 2025-10-31 03:54:15 +00:00 
			
		
		
		
	merge toplevel_from_{wlr_layer_surface,popup} into client_from_wlr_surface
now it is a big function called toplevel_from_wlr_surface
This commit is contained in:
		
							parent
							
								
									c56bc42eb5
								
							
						
					
					
						commit
						38bd00351a
					
				
							
								
								
									
										108
									
								
								client.h
									
									
									
									
									
								
							
							
						
						
									
										108
									
								
								client.h
									
									
									
									
									
								
							| @ -16,27 +16,6 @@ client_is_x11(Client *c) | |||||||
| #endif | #endif | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static inline Client * |  | ||||||
| client_from_wlr_surface(struct wlr_surface *s) |  | ||||||
| { |  | ||||||
| 	struct wlr_xdg_surface *surface; |  | ||||||
| 
 |  | ||||||
| #ifdef XWAYLAND |  | ||||||
| 	struct wlr_xwayland_surface *xsurface; |  | ||||||
| 	if (s && wlr_surface_is_xwayland_surface(s) |  | ||||||
| 			&& (xsurface = wlr_xwayland_surface_from_wlr_surface(s))) |  | ||||||
| 		return xsurface->data; |  | ||||||
| #endif |  | ||||||
| 	if (s && wlr_surface_is_xdg_surface(s) |  | ||||||
| 			&& (surface = wlr_xdg_surface_from_wlr_surface(s)) |  | ||||||
| 			&& surface->role == WLR_XDG_SURFACE_ROLE_TOPLEVEL) |  | ||||||
| 		return surface->data; |  | ||||||
| 
 |  | ||||||
| 	if (s && wlr_surface_is_subsurface(s)) |  | ||||||
| 		return client_from_wlr_surface(wlr_surface_get_root_surface(s)); |  | ||||||
| 	return NULL; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static inline void | static inline void | ||||||
| client_get_size_hints(Client *c, struct wlr_box *max, struct wlr_box *min) | client_get_size_hints(Client *c, struct wlr_box *max, struct wlr_box *min) | ||||||
| { | { | ||||||
| @ -72,6 +51,53 @@ client_surface(Client *c) | |||||||
| 	return c->surface.xdg->surface; | 	return c->surface.xdg->surface; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static inline void * | ||||||
|  | toplevel_from_wlr_surface(struct wlr_surface *s) | ||||||
|  | { | ||||||
|  | 	struct wlr_xdg_surface *xdg_surface; | ||||||
|  | 	struct wlr_surface *root_surface; | ||||||
|  | 	struct wlr_layer_surface_v1 *layer_surface; | ||||||
|  | #ifdef XWAYLAND | ||||||
|  | 	struct wlr_xwayland_surface *xsurface; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | 	if (!s) | ||||||
|  | 		return NULL; | ||||||
|  | 	root_surface = wlr_surface_get_root_surface(s); | ||||||
|  | 
 | ||||||
|  | #ifdef XWAYLAND | ||||||
|  | 	if (wlr_surface_is_xwayland_surface(root_surface) | ||||||
|  | 			&& (xsurface = wlr_xwayland_surface_from_wlr_surface(root_surface))) | ||||||
|  | 		return xsurface->data; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | 	if (wlr_surface_is_layer_surface(root_surface) | ||||||
|  | 			&& (layer_surface = wlr_layer_surface_v1_from_wlr_surface(root_surface))) | ||||||
|  | 		return layer_surface->data; | ||||||
|  | 
 | ||||||
|  | 	if (wlr_surface_is_xdg_surface(root_surface) | ||||||
|  | 			&& (xdg_surface = wlr_xdg_surface_from_wlr_surface(root_surface))) { | ||||||
|  | 		while (1) { | ||||||
|  | 			switch (xdg_surface->role) { | ||||||
|  | 			case WLR_XDG_SURFACE_ROLE_POPUP: | ||||||
|  | 				if (!xdg_surface->popup->parent) | ||||||
|  | 					return NULL; | ||||||
|  | 				else if (!wlr_surface_is_xdg_surface(xdg_surface->popup->parent)) | ||||||
|  | 					return toplevel_from_wlr_surface(xdg_surface->popup->parent); | ||||||
|  | 
 | ||||||
|  | 				xdg_surface = wlr_xdg_surface_from_wlr_surface(xdg_surface->popup->parent); | ||||||
|  | 				break; | ||||||
|  | 			case WLR_XDG_SURFACE_ROLE_TOPLEVEL: | ||||||
|  | 					return xdg_surface->data; | ||||||
|  | 			case WLR_XDG_SURFACE_ROLE_NONE: | ||||||
|  | 				return NULL; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return NULL; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* The others */ | /* The others */ | ||||||
| static inline void | static inline void | ||||||
| client_activate_surface(struct wlr_surface *s, int activated) | client_activate_surface(struct wlr_surface *s, int activated) | ||||||
| @ -320,43 +346,3 @@ client_wants_fullscreen(Client *c) | |||||||
| #endif | #endif | ||||||
| 	return c->surface.xdg->toplevel->requested.fullscreen; | 	return c->surface.xdg->toplevel->requested.fullscreen; | ||||||
| } | } | ||||||
| 
 |  | ||||||
| static inline void * |  | ||||||
| toplevel_from_popup(struct wlr_xdg_popup *popup) |  | ||||||
| { |  | ||||||
| 	struct wlr_xdg_surface *surface = popup->base; |  | ||||||
| 
 |  | ||||||
| 	while (1) { |  | ||||||
| 		switch (surface->role) { |  | ||||||
| 		case WLR_XDG_SURFACE_ROLE_POPUP: |  | ||||||
| 			if (!surface->popup->parent) |  | ||||||
| 				return NULL; |  | ||||||
| 			else if (wlr_surface_is_layer_surface(surface->popup->parent)) |  | ||||||
| 				return wlr_layer_surface_v1_from_wlr_surface(surface->popup->parent)->data; |  | ||||||
| 			else if (!wlr_surface_is_xdg_surface(surface->popup->parent)) |  | ||||||
| 				return NULL; |  | ||||||
| 
 |  | ||||||
| 			surface = wlr_xdg_surface_from_wlr_surface(surface->popup->parent); |  | ||||||
| 			break; |  | ||||||
| 		case WLR_XDG_SURFACE_ROLE_TOPLEVEL: |  | ||||||
| 				return surface->data; |  | ||||||
| 		case WLR_XDG_SURFACE_ROLE_NONE: |  | ||||||
| 			return NULL; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| static inline void * |  | ||||||
| toplevel_from_wlr_layer_surface(struct wlr_surface *s) |  | ||||||
| { |  | ||||||
| 	Client *c; |  | ||||||
| 	struct wlr_layer_surface_v1 *wlr_layer_surface; |  | ||||||
| 
 |  | ||||||
| 	if ((c = client_from_wlr_surface(s))) |  | ||||||
| 		return c; |  | ||||||
| 	else if (s && wlr_surface_is_layer_surface(s) |  | ||||||
| 			&& (wlr_layer_surface = wlr_layer_surface_v1_from_wlr_surface(s))) |  | ||||||
| 		return wlr_layer_surface->data; |  | ||||||
| 
 |  | ||||||
| 	return NULL; |  | ||||||
| } |  | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								dwl.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								dwl.c
									
									
									
									
									
								
							| @ -908,7 +908,7 @@ createnotify(struct wl_listener *listener, void *data) | |||||||
| 
 | 
 | ||||||
| 	if (xdg_surface->role == WLR_XDG_SURFACE_ROLE_POPUP) { | 	if (xdg_surface->role == WLR_XDG_SURFACE_ROLE_POPUP) { | ||||||
| 		struct wlr_box box; | 		struct wlr_box box; | ||||||
| 		LayerSurface *l = toplevel_from_popup(xdg_surface->popup); | 		LayerSurface *l = toplevel_from_wlr_surface(xdg_surface->surface); | ||||||
| 		if (!xdg_surface->popup->parent) | 		if (!xdg_surface->popup->parent) | ||||||
| 			return; | 			return; | ||||||
| 		xdg_surface->surface->data = wlr_scene_xdg_surface_create( | 		xdg_surface->surface->data = wlr_scene_xdg_surface_create( | ||||||
| @ -1096,7 +1096,7 @@ focusclient(Client *c, int lift) | |||||||
| 		/* If an overlay is focused, don't focus or activate the client,
 | 		/* If an overlay is focused, don't focus or activate the client,
 | ||||||
| 		 * but only update its position in fstack to render its border with focuscolor | 		 * but only update its position in fstack to render its border with focuscolor | ||||||
| 		 * and focus it after the overlay is closed. */ | 		 * and focus it after the overlay is closed. */ | ||||||
| 		Client *w = client_from_wlr_surface(old); | 		Client *w = toplevel_from_wlr_surface(old); | ||||||
| 		if (wlr_surface_is_layer_surface(old)) { | 		if (wlr_surface_is_layer_surface(old)) { | ||||||
| 			struct wlr_layer_surface_v1 *wlr_layer_surface = | 			struct wlr_layer_surface_v1 *wlr_layer_surface = | ||||||
| 				wlr_layer_surface_v1_from_wlr_surface(old); | 				wlr_layer_surface_v1_from_wlr_surface(old); | ||||||
| @ -1472,7 +1472,7 @@ motionnotify(uint32_t time) | |||||||
| 	xytonode(cursor->x, cursor->y, &surface, &c, NULL, &sx, &sy); | 	xytonode(cursor->x, cursor->y, &surface, &c, NULL, &sx, &sy); | ||||||
| 
 | 
 | ||||||
| 	if (cursor_mode == CurPressed && !seat->drag) { | 	if (cursor_mode == CurPressed && !seat->drag) { | ||||||
| 		if ((l = toplevel_from_wlr_layer_surface( | 		if ((l = toplevel_from_wlr_surface( | ||||||
| 				 seat->pointer_state.focused_surface))) { | 				 seat->pointer_state.focused_surface))) { | ||||||
| 			surface = seat->pointer_state.focused_surface; | 			surface = seat->pointer_state.focused_surface; | ||||||
| 			sx = cursor->x - l->geom.x; | 			sx = cursor->x - l->geom.x; | ||||||
| @ -2357,8 +2357,8 @@ void | |||||||
| urgent(struct wl_listener *listener, void *data) | urgent(struct wl_listener *listener, void *data) | ||||||
| { | { | ||||||
| 	struct wlr_xdg_activation_v1_request_activate_event *event = data; | 	struct wlr_xdg_activation_v1_request_activate_event *event = data; | ||||||
| 	Client *c = client_from_wlr_surface(event->surface); | 	Client *c = toplevel_from_wlr_surface(event->surface); | ||||||
| 	if (c && c != selclient()) { | 	if (c && c->type != LayerShell && c != selclient()) { | ||||||
| 		c->isurgent = 1; | 		c->isurgent = 1; | ||||||
| 		printstatus(); | 		printstatus(); | ||||||
| 	} | 	} | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Leonardo Hernández Hernández
						Leonardo Hernández Hernández