diff options
Diffstat (limited to 'dwl.c')
| -rw-r--r-- | dwl.c | 38 | 
1 files changed, 28 insertions, 10 deletions
| @@ -475,8 +475,11 @@ arrangelayers(Monitor *m)  					layersurface->layer_surface->mapped) {  				/* Deactivate the focused client. */  				focusclient(NULL, 0); -				wlr_seat_keyboard_notify_enter(seat, layersurface->layer_surface->surface, -						kb->keycodes, kb->num_keycodes, &kb->modifiers); +				if (kb) +					wlr_seat_keyboard_notify_enter(seat, layersurface->layer_surface->surface, +							kb->keycodes, kb->num_keycodes, &kb->modifiers); +				else +					wlr_seat_keyboard_notify_enter(seat, layersurface->layer_surface->surface, NULL, 0, NULL);  				return;  			}  		} @@ -516,7 +519,7 @@ buttonpress(struct wl_listener *listener, void *data)  			focusclient(c, 1);  		keyboard = wlr_seat_get_keyboard(seat); -		mods = wlr_keyboard_get_modifiers(keyboard); +		mods = keyboard ? wlr_keyboard_get_modifiers(keyboard) : 0;  		for (b = buttons; b < END(buttons); b++) {  			if (CLEANMASK(mods) == CLEANMASK(b->mod) &&  					event->button == b->button && b->func) { @@ -615,6 +618,7 @@ closemon(Monitor *m)  		if (c->mon == m)  			setmon(c, selmon, c->tags);  	} +	printstatus();  }  void @@ -1013,10 +1017,22 @@ focusclient(Client *c, int lift)  		return;  	} +#ifdef XWAYLAND +	/* This resolves an issue where the last spawned xwayland client +	 * receives all pointer activity. +	 */ +	if (c->type == X11Managed) +		wlr_xwayland_surface_restack(c->surface.xwayland, NULL, +				XCB_STACK_MODE_ABOVE); +#endif +  	/* Have a client, so focus its top-level wlr_surface */  	kb = wlr_seat_get_keyboard(seat); -	wlr_seat_keyboard_notify_enter(seat, client_surface(c), -			kb->keycodes, kb->num_keycodes, &kb->modifiers); +	if (kb) +		wlr_seat_keyboard_notify_enter(seat, client_surface(c), +				kb->keycodes, kb->num_keycodes, &kb->modifiers); +	else +		wlr_seat_keyboard_notify_enter(seat, client_surface(c), NULL, 0, NULL);  	/* Activate the new client */  	client_activate_surface(client_surface(c), 1); @@ -2227,11 +2243,11 @@ xytonode(double x, double y, struct wlr_surface **psurface,  	struct wlr_surface *surface = NULL;  	Client *c = NULL;  	LayerSurface *l = NULL; -	int i; +	const int *layer;  	int focus_order[] = { LyrOverlay, LyrTop, LyrFloat, LyrTile, LyrBottom, LyrBg }; -	for (i = 0; i < LENGTH(focus_order); i++) { -		if ((node = wlr_scene_node_at(layers[focus_order[i]], x, y, nx, ny))) { +	for (layer = focus_order; layer < END(focus_order); layer++) { +		if ((node = wlr_scene_node_at(layers[*layer], x, y, nx, ny))) {  			if (node->type == WLR_SCENE_NODE_SURFACE)  				surface = wlr_scene_surface_from_node(node)->surface;  			/* Walk the tree to find a node that knows the client */ @@ -2402,9 +2418,11 @@ main(int argc, char *argv[])  	char *startup_cmd = NULL;  	int c; -	while ((c = getopt(argc, argv, "s:h")) != -1) { +	while ((c = getopt(argc, argv, "s:hv")) != -1) {  		if (c == 's')  			startup_cmd = optarg; +		else if (c == 'v') +			die("dwl " VERSION);  		else  			goto usage;  	} @@ -2420,5 +2438,5 @@ main(int argc, char *argv[])  	return EXIT_SUCCESS;  usage: -	die("Usage: %s [-s startup command]", argv[0]); +	die("Usage: %s [-v] [-s startup command]", argv[0]);  } | 
