mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	Merge pull request #851 from emersion/xwayland-window-type-menu
xwayland: add _NET_WM_WINDOW_TYPE_MENU support
This commit is contained in:
		
						commit
						cedd151e17
					
				
					 3 changed files with 26 additions and 21 deletions
				
			
		| 
						 | 
				
			
			@ -53,12 +53,14 @@ enum atom_name {
 | 
			
		|||
	TEXT,
 | 
			
		||||
	TIMESTAMP,
 | 
			
		||||
	DELETE,
 | 
			
		||||
	NET_WM_WINDOW_TYPE_NORMAL,
 | 
			
		||||
	NET_WM_WINDOW_TYPE_UTILITY,
 | 
			
		||||
	NET_WM_WINDOW_TYPE_TOOLTIP,
 | 
			
		||||
	NET_WM_WINDOW_TYPE_DND,
 | 
			
		||||
	NET_WM_WINDOW_TYPE_DROPDOWN_MENU,
 | 
			
		||||
	NET_WM_WINDOW_TYPE_POPUP_MENU,
 | 
			
		||||
	NET_WM_WINDOW_TYPE_COMBO,
 | 
			
		||||
	NET_WM_WINDOW_TYPE_MENU,
 | 
			
		||||
	DND_SELECTION,
 | 
			
		||||
	DND_AWARE,
 | 
			
		||||
	DND_STATUS,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -405,24 +405,3 @@ void wlr_xwayland_set_seat(struct wlr_xwayland *xwayland,
 | 
			
		|||
	xwayland->seat_destroy.notify = wlr_xwayland_handle_seat_destroy;
 | 
			
		||||
	wl_signal_add(&seat->events.destroy, &xwayland->seat_destroy);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool wlr_xwayland_surface_is_unmanaged(const struct wlr_xwayland_surface *surface) {
 | 
			
		||||
	static enum atom_name needles[] = {
 | 
			
		||||
		NET_WM_WINDOW_TYPE_UTILITY,
 | 
			
		||||
		NET_WM_WINDOW_TYPE_TOOLTIP,
 | 
			
		||||
		NET_WM_WINDOW_TYPE_DND,
 | 
			
		||||
		NET_WM_WINDOW_TYPE_DROPDOWN_MENU,
 | 
			
		||||
		NET_WM_WINDOW_TYPE_POPUP_MENU,
 | 
			
		||||
		NET_WM_WINDOW_TYPE_COMBO,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	for (size_t i = 0; i < sizeof(needles) / sizeof(needles[0]); ++i) {
 | 
			
		||||
		if (xwm_atoms_contains(surface->xwm, surface->window_type,
 | 
			
		||||
				surface->window_type_len, needles[i])) {
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,12 +52,14 @@ const char *atom_map[ATOM_LAST] = {
 | 
			
		|||
	"TEXT",
 | 
			
		||||
	"TIMESTAMP",
 | 
			
		||||
	"DELETE",
 | 
			
		||||
	"_NET_WM_WINDOW_TYPE_NORMAL",
 | 
			
		||||
	"_NET_WM_WINDOW_TYPE_UTILITY",
 | 
			
		||||
	"_NET_WM_WINDOW_TYPE_TOOLTIP",
 | 
			
		||||
	"_NET_WM_WINDOW_TYPE_DND",
 | 
			
		||||
	"_NET_WM_WINDOW_TYPE_DROPDOWN_MENU",
 | 
			
		||||
	"_NET_WM_WINDOW_TYPE_POPUP_MENU",
 | 
			
		||||
	"_NET_WM_WINDOW_TYPE_COMBO",
 | 
			
		||||
	"_NET_WM_WINDOW_TYPE_MENU",
 | 
			
		||||
	"XdndSelection",
 | 
			
		||||
	"XdndAware",
 | 
			
		||||
	"XdndStatus",
 | 
			
		||||
| 
						 | 
				
			
			@ -1575,3 +1577,25 @@ bool xwm_atoms_contains(struct wlr_xwm *xwm, xcb_atom_t *atoms,
 | 
			
		|||
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool wlr_xwayland_surface_is_unmanaged(
 | 
			
		||||
		const struct wlr_xwayland_surface *surface) {
 | 
			
		||||
	static enum atom_name needles[] = {
 | 
			
		||||
		NET_WM_WINDOW_TYPE_COMBO,
 | 
			
		||||
		NET_WM_WINDOW_TYPE_DND,
 | 
			
		||||
		NET_WM_WINDOW_TYPE_DROPDOWN_MENU,
 | 
			
		||||
		NET_WM_WINDOW_TYPE_MENU,
 | 
			
		||||
		NET_WM_WINDOW_TYPE_POPUP_MENU,
 | 
			
		||||
		NET_WM_WINDOW_TYPE_TOOLTIP,
 | 
			
		||||
		NET_WM_WINDOW_TYPE_UTILITY,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	for (size_t i = 0; i < sizeof(needles) / sizeof(needles[0]); ++i) {
 | 
			
		||||
		if (xwm_atoms_contains(surface->xwm, surface->window_type,
 | 
			
		||||
				surface->window_type_len, needles[i])) {
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue