diff options
| author | Leonardo Hernández Hernández <leohdz172@proton.me> | 2023-12-27 11:22:11 -0600 | 
|---|---|---|
| committer | Leonardo Hernández Hernández <leohdz172@proton.me> | 2023-12-27 11:22:11 -0600 | 
| commit | bf35e77811d1474fbd2dd4c9d2c269a65a4f1ba7 (patch) | |
| tree | cddcdc9e0a4f44079dd3304a6169e9c127b224aa | |
| parent | bf5a6be73cf94fd6e5d1c6edd8ce08a4928fee40 (diff) | |
| parent | 6cbf8e9b80d8be140bd4a71268b483ac1b5c9d5f (diff) | |
Merge remote-tracking branch 'upstream/main' into wlroots-next
Diffstat (limited to '')
| -rw-r--r-- | dwl.c | 35 | 
1 files changed, 20 insertions, 15 deletions
@@ -523,13 +523,13 @@ arrangelayers(Monitor *m)  	/* Find topmost keyboard interactive layer, if such a layer exists */  	for (i = 0; i < LENGTH(layers_above_shell); i++) {  		wl_list_for_each_reverse(l, &m->layers[layers_above_shell[i]], link) { -			if (!locked && l->layer_surface->current.keyboard_interactive && l->mapped) { -				/* Deactivate the focused client. */ -				focusclient(NULL, 0); -				exclusive_focus = l; -				client_notify_enter(l->layer_surface->surface, wlr_seat_get_keyboard(seat)); -				return; -			} +			if (locked || !l->layer_surface->current.keyboard_interactive || !l->mapped) +				continue; +			/* Deactivate the focused client. */ +			focusclient(NULL, 0); +			exclusive_focus = l; +			client_notify_enter(l->layer_surface->surface, wlr_seat_get_keyboard(seat)); +			return;  		}  	}  } @@ -1359,16 +1359,15 @@ keybinding(uint32_t mods, xkb_keysym_t sym)  	 * processing keys, rather than passing them on to the client for its own  	 * processing.  	 */ -	int handled = 0;  	const Key *k;  	for (k = keys; k < END(keys); k++) {  		if (CLEANMASK(mods) == CLEANMASK(k->mod)  				&& sym == k->keysym && k->func) {  			k->func(&k->arg); -			handled = 1; +			return 1;  		}  	} -	return handled; +	return 0;  }  void @@ -1393,9 +1392,10 @@ keypress(struct wl_listener *listener, void *data)  	/* On _press_ if there is no active screen locker,  	 * attempt to process a compositor keybinding. */ -	if (!locked && event->state == WL_KEYBOARD_KEY_STATE_PRESSED) +	if (!locked && event->state == WL_KEYBOARD_KEY_STATE_PRESSED) {  		for (i = 0; i < nsyms; i++)  			handled = keybinding(mods, syms[i]) || handled; +	}  	if (handled && group->wlr_group->keyboard.repeat_info.delay > 0) {  		group->mods = mods; @@ -2281,7 +2281,7 @@ setup(void)  	/* Use decoration protocols to negotiate server-side decorations */  	wlr_server_decoration_manager_set_default_mode(  			wlr_server_decoration_manager_create(dpy), -				WLR_SERVER_DECORATION_MANAGER_MODE_SERVER); +			WLR_SERVER_DECORATION_MANAGER_MODE_SERVER);  	xdg_decoration_mgr = wlr_xdg_decoration_manager_v1_create(dpy);  	LISTEN_STATIC(&xdg_decoration_mgr->events.new_toplevel_decoration, createdecoration); @@ -2387,6 +2387,10 @@ setup(void)  	wlr_scene_set_presentation(scene, wlr_presentation_create(dpy, backend)); +	/* Make sure XWayland clients don't connect to the parent X server, +	 * e.g when running in the x11 backend or the wayland backend and the +	 * compositor has Xwayland support */ +	unsetenv("DISPLAY");  #ifdef XWAYLAND  	/*  	 * Initialise the XWayland X server. @@ -2557,10 +2561,10 @@ unmapnotify(struct wl_listener *listener, void *data)  	}  	if (client_is_unmanaged(c)) { -		if (c == exclusive_focus) +		if (c == exclusive_focus) {  			exclusive_focus = NULL; -		if (client_surface(c) == seat->keyboard_state.focused_surface)  			focusclient(focustop(selmon), 1); +		}  	} else {  		wl_list_remove(&c->link);  		setmon(c, NULL, 0); @@ -2600,10 +2604,11 @@ updatemons(struct wl_listener *listener, void *data)  		m->m = m->w = (struct wlr_box){0};  	}  	/* Insert outputs that need to */ -	wl_list_for_each(m, &mons, link) +	wl_list_for_each(m, &mons, link) {  		if (m->wlr_output->enabled  				&& !wlr_output_layout_get(output_layout, m->wlr_output))  			wlr_output_layout_add_auto(output_layout, m->wlr_output); +	}  	/* Now that we update the output layout we can get its box */  	wlr_output_layout_get_box(output_layout, NULL, &sgeom);  | 
