Merge branch 'main' into wlroots-next
This commit is contained in:
		
							
								
								
									
										56
									
								
								dwl.c
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								dwl.c
									
									
									
									
									
								
							@@ -21,7 +21,6 @@
 | 
			
		||||
#include <wlr/types/wlr_data_control_v1.h>
 | 
			
		||||
#include <wlr/types/wlr_data_device.h>
 | 
			
		||||
#include <wlr/types/wlr_drm.h>
 | 
			
		||||
#include <wlr/types/wlr_linux_dmabuf_v1.h>
 | 
			
		||||
#include <wlr/types/wlr_export_dmabuf_v1.h>
 | 
			
		||||
#include <wlr/types/wlr_fractional_scale_v1.h>
 | 
			
		||||
#include <wlr/types/wlr_gamma_control_v1.h>
 | 
			
		||||
@@ -30,6 +29,7 @@
 | 
			
		||||
#include <wlr/types/wlr_input_device.h>
 | 
			
		||||
#include <wlr/types/wlr_keyboard.h>
 | 
			
		||||
#include <wlr/types/wlr_layer_shell_v1.h>
 | 
			
		||||
#include <wlr/types/wlr_linux_dmabuf_v1.h>
 | 
			
		||||
#include <wlr/types/wlr_output.h>
 | 
			
		||||
#include <wlr/types/wlr_output_layout.h>
 | 
			
		||||
#include <wlr/types/wlr_output_management_v1.h>
 | 
			
		||||
@@ -188,7 +188,7 @@ struct Monitor {
 | 
			
		||||
	struct wlr_session_lock_surface_v1 *lock_surface;
 | 
			
		||||
	struct wlr_box m; /* monitor area, layout-relative */
 | 
			
		||||
	struct wlr_box w; /* window area, layout-relative */
 | 
			
		||||
	struct wl_list layers[4]; /* LayerSurface::link */
 | 
			
		||||
	struct wl_list layers[4]; /* LayerSurface.link */
 | 
			
		||||
	const Layout *lt[2];
 | 
			
		||||
	unsigned int seltags;
 | 
			
		||||
	unsigned int sellt;
 | 
			
		||||
@@ -826,9 +826,9 @@ createlayersurface(struct wl_listener *listener, void *data)
 | 
			
		||||
	l->mon = layer_surface->output->data;
 | 
			
		||||
	l->scene_layer = wlr_scene_layer_surface_v1_create(scene_layer, layer_surface);
 | 
			
		||||
	l->scene = l->scene_layer->tree;
 | 
			
		||||
	l->popups = surface->data = wlr_scene_tree_create(scene_layer);
 | 
			
		||||
	l->scene->node.data = l;
 | 
			
		||||
 | 
			
		||||
	l->popups = surface->data = wlr_scene_tree_create(layer_surface->current.layer
 | 
			
		||||
			< ZWLR_LAYER_SHELL_V1_LAYER_TOP ? layers[LyrTop] : scene_layer);
 | 
			
		||||
	l->scene->node.data = l->popups->node.data = l;
 | 
			
		||||
 | 
			
		||||
	wl_list_insert(&l->mon->layers[layer_surface->pending.layer],&l->link);
 | 
			
		||||
	wlr_surface_send_enter(surface, layer_surface->output);
 | 
			
		||||
@@ -878,13 +878,14 @@ createmon(struct wl_listener *listener, void *data)
 | 
			
		||||
	m->tagset[0] = m->tagset[1] = 1;
 | 
			
		||||
	for (r = monrules; r < END(monrules); r++) {
 | 
			
		||||
		if (!r->name || strstr(wlr_output->name, r->name)) {
 | 
			
		||||
			m->mfact = r->mfact;
 | 
			
		||||
			m->nmaster = r->nmaster;
 | 
			
		||||
			wlr_output_state_set_scale(&state, r->scale);
 | 
			
		||||
			m->lt[0] = m->lt[1] = r->lt;
 | 
			
		||||
			wlr_output_state_set_transform(&state, r->rr);
 | 
			
		||||
			m->m.x = r->x;
 | 
			
		||||
			m->m.y = r->y;
 | 
			
		||||
			m->mfact = r->mfact;
 | 
			
		||||
			m->nmaster = r->nmaster;
 | 
			
		||||
			m->lt[0] = m->lt[1] = r->lt;
 | 
			
		||||
			strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, LENGTH(m->ltsymbol));
 | 
			
		||||
			wlr_output_state_set_scale(&state, r->scale);
 | 
			
		||||
			wlr_output_state_set_transform(&state, r->rr);
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -930,7 +931,6 @@ createmon(struct wl_listener *listener, void *data)
 | 
			
		||||
		wlr_output_layout_add_auto(output_layout, wlr_output);
 | 
			
		||||
	else
 | 
			
		||||
		wlr_output_layout_add(output_layout, wlr_output, m->m.x, m->m.y);
 | 
			
		||||
	strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, LENGTH(m->ltsymbol));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -958,8 +958,7 @@ void
 | 
			
		||||
createpointer(struct wlr_pointer *pointer)
 | 
			
		||||
{
 | 
			
		||||
	if (wlr_input_device_is_libinput(&pointer->base)) {
 | 
			
		||||
		struct libinput_device *libinput_device = (struct libinput_device*)
 | 
			
		||||
			wlr_libinput_get_device_handle(&pointer->base);
 | 
			
		||||
		struct libinput_device *libinput_device = wlr_libinput_get_device_handle(&pointer->base);
 | 
			
		||||
 | 
			
		||||
		if (libinput_device_config_tap_get_finger_count(libinput_device)) {
 | 
			
		||||
			libinput_device_config_tap_set_enabled(libinput_device, tap_to_click);
 | 
			
		||||
@@ -1510,9 +1509,10 @@ mapnotify(struct wl_listener *listener, void *data)
 | 
			
		||||
			: wlr_scene_subsurface_tree_create(c->scene, client_surface(c));
 | 
			
		||||
	c->scene->node.data = c->scene_surface->node.data = c;
 | 
			
		||||
 | 
			
		||||
	client_get_geometry(c, &c->geom);
 | 
			
		||||
 | 
			
		||||
	/* Handle unmanaged clients first so we can return prior create borders */
 | 
			
		||||
	if (client_is_unmanaged(c)) {
 | 
			
		||||
		client_get_geometry(c, &c->geom);
 | 
			
		||||
		/* Unmanaged clients always are floating */
 | 
			
		||||
		wlr_scene_node_reparent(&c->scene->node, layers[LyrFloat]);
 | 
			
		||||
		wlr_scene_node_set_position(&c->scene->node, c->geom.x + borderpx,
 | 
			
		||||
@@ -1525,13 +1525,13 @@ mapnotify(struct wl_listener *listener, void *data)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < 4; i++) {
 | 
			
		||||
		c->border[i] = wlr_scene_rect_create(c->scene, 0, 0, bordercolor);
 | 
			
		||||
		c->border[i] = wlr_scene_rect_create(c->scene, 0, 0,
 | 
			
		||||
				c->isurgent ? urgentcolor : bordercolor);
 | 
			
		||||
		c->border[i]->node.data = c;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Initialize client geometry with room for border */
 | 
			
		||||
	client_set_tiled(c, WLR_EDGE_TOP | WLR_EDGE_BOTTOM | WLR_EDGE_LEFT | WLR_EDGE_RIGHT);
 | 
			
		||||
	client_get_geometry(c, &c->geom);
 | 
			
		||||
	c->geom.width += 2 * c->bw;
 | 
			
		||||
	c->geom.height += 2 * c->bw;
 | 
			
		||||
 | 
			
		||||
@@ -2553,14 +2553,14 @@ updatemons(struct wl_listener *listener, void *data)
 | 
			
		||||
		/* Remove this output from the layout to avoid cursor enter inside it */
 | 
			
		||||
		wlr_output_layout_remove(output_layout, m->wlr_output);
 | 
			
		||||
		closemon(m);
 | 
			
		||||
		memset(&m->m, 0, sizeof(m->m));
 | 
			
		||||
		memset(&m->w, 0, sizeof(m->w));
 | 
			
		||||
		m->m = m->w = (struct wlr_box){0};
 | 
			
		||||
	}
 | 
			
		||||
	/* Insert outputs that need to */
 | 
			
		||||
	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);
 | 
			
		||||
 | 
			
		||||
@@ -2584,8 +2584,7 @@ updatemons(struct wl_listener *listener, void *data)
 | 
			
		||||
		if (m->lock_surface) {
 | 
			
		||||
			struct wlr_scene_tree *scene_tree = m->lock_surface->surface->data;
 | 
			
		||||
			wlr_scene_node_set_position(&scene_tree->node, m->m.x, m->m.y);
 | 
			
		||||
			wlr_session_lock_surface_v1_configure(m->lock_surface, m->m.width,
 | 
			
		||||
					m->m.height);
 | 
			
		||||
			wlr_session_lock_surface_v1_configure(m->lock_surface, m->m.width, m->m.height);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* Calculate the effective monitor geometry to use for clients */
 | 
			
		||||
@@ -2596,9 +2595,10 @@ updatemons(struct wl_listener *listener, void *data)
 | 
			
		||||
		if ((c = focustop(m)) && c->isfullscreen)
 | 
			
		||||
			resize(c, m->m, 0);
 | 
			
		||||
 | 
			
		||||
		/* Try to re-set the gamma LUT when updating monitors,
 | 
			
		||||
		 * it's only really needed when enabling a disabled output, but meh. */
 | 
			
		||||
		m->gamma_lut_changed = 1;
 | 
			
		||||
		config_head->state.enabled = 1;
 | 
			
		||||
		config_head->state.mode = m->wlr_output->current_mode;
 | 
			
		||||
 | 
			
		||||
		config_head->state.x = m->m.x;
 | 
			
		||||
		config_head->state.y = m->m.y;
 | 
			
		||||
	}
 | 
			
		||||
@@ -2642,10 +2642,11 @@ urgent(struct wl_listener *listener, void *data)
 | 
			
		||||
	if (!c || c == focustop(selmon))
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	if (client_surface(c)->mapped)
 | 
			
		||||
		client_set_border_color(c, urgentcolor);
 | 
			
		||||
	c->isurgent = 1;
 | 
			
		||||
	printstatus();
 | 
			
		||||
 | 
			
		||||
	if (client_surface(c)->mapped)
 | 
			
		||||
		client_set_border_color(c, urgentcolor);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -2786,13 +2787,13 @@ createnotifyx11(struct wl_listener *listener, void *data)
 | 
			
		||||
 | 
			
		||||
	/* Listen to the various events it can emit */
 | 
			
		||||
	LISTEN(&xsurface->events.associate, &c->associate, associatex11);
 | 
			
		||||
	LISTEN(&xsurface->events.destroy, &c->destroy, destroynotify);
 | 
			
		||||
	LISTEN(&xsurface->events.dissociate, &c->dissociate, dissociatex11);
 | 
			
		||||
	LISTEN(&xsurface->events.request_activate, &c->activate, activatex11);
 | 
			
		||||
	LISTEN(&xsurface->events.request_configure, &c->configure, configurex11);
 | 
			
		||||
	LISTEN(&xsurface->events.request_fullscreen, &c->fullscreen, fullscreennotify);
 | 
			
		||||
	LISTEN(&xsurface->events.set_hints, &c->set_hints, sethints);
 | 
			
		||||
	LISTEN(&xsurface->events.set_title, &c->set_title, updatetitle);
 | 
			
		||||
	LISTEN(&xsurface->events.destroy, &c->destroy, destroynotify);
 | 
			
		||||
	LISTEN(&xsurface->events.request_fullscreen, &c->fullscreen, fullscreennotify);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@@ -2825,11 +2826,10 @@ sethints(struct wl_listener *listener, void *data)
 | 
			
		||||
		return;
 | 
			
		||||
 | 
			
		||||
	c->isurgent = xcb_icccm_wm_hints_get_urgency(c->surface.xwayland->hints);
 | 
			
		||||
	printstatus();
 | 
			
		||||
 | 
			
		||||
	if (c->isurgent && surface && surface->mapped)
 | 
			
		||||
		client_set_border_color(c, urgentcolor);
 | 
			
		||||
 | 
			
		||||
	printstatus();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user