diff options
| -rw-r--r-- | client.h | 10 | ||||
| -rw-r--r-- | dwl.c | 160 | 
2 files changed, 23 insertions, 147 deletions
| @@ -39,7 +39,7 @@ client_activate_surface(struct wlr_surface *s, int activated)  #endif  	if (wlr_surface_is_xdg_surface(s))  		wlr_xdg_toplevel_set_activated( -				wlr_xdg_surface_from_wlr_surface(s), activated); +				wlr_xdg_surface_from_wlr_surface(s)->toplevel, activated);  }  static inline void @@ -131,7 +131,7 @@ client_send_close(Client *c)  		return;  	}  #endif -	wlr_xdg_toplevel_send_close(c->surface.xdg); +	wlr_xdg_toplevel_send_close(c->surface.xdg->toplevel);  }  static inline void @@ -143,7 +143,7 @@ client_set_fullscreen(Client *c, int fullscreen)  		return;  	}  #endif -	wlr_xdg_toplevel_set_fullscreen(c->surface.xdg, fullscreen); +	wlr_xdg_toplevel_set_fullscreen(c->surface.xdg->toplevel, fullscreen);  }  static inline uint32_t @@ -156,7 +156,7 @@ client_set_size(Client *c, uint32_t width, uint32_t height)  		return 0;  	}  #endif -	return wlr_xdg_toplevel_set_size(c->surface.xdg, width, height); +	return wlr_xdg_toplevel_set_size(c->surface.xdg->toplevel, width, height);  }  static inline void @@ -166,7 +166,7 @@ client_set_tiled(Client *c, uint32_t edges)  	if (client_is_x11(c))  		return;  #endif -	wlr_xdg_toplevel_set_tiled(c->surface.xdg, edges); +	wlr_xdg_toplevel_set_tiled(c->surface.xdg->toplevel, edges);  }  static inline struct wlr_surface * @@ -37,6 +37,7 @@  #include <wlr/types/wlr_scene.h>  #include <wlr/types/wlr_server_decoration.h>  #include <wlr/types/wlr_seat.h> +#include <wlr/types/wlr_subcompositor.h>  #include <wlr/types/wlr_viewporter.h>  #include <wlr/types/wlr_virtual_keyboard_v1.h>  #include <wlr/types/wlr_xcursor_manager.h> @@ -139,6 +140,7 @@ typedef struct {  	/* Must be first */  	unsigned int type; /* LayerShell */  	struct wlr_scene_node *scene; +	struct wlr_scene_layer_surface_v1 *scene_layer;  	struct wl_list link;  	struct wlr_layer_surface_v1 *layer_surface; @@ -146,19 +148,9 @@ typedef struct {  	struct wl_listener map;  	struct wl_listener unmap;  	struct wl_listener surface_commit; - -	struct wlr_box geo;  } LayerSurface;  typedef struct { -	uint32_t singular_anchor; -	uint32_t anchor_triplet; -	int *positive_axis; -	int *negative_axis; -	int margin; -} Edge; - -typedef struct {  	const char *symbol;  	void (*arrange)(Monitor *);  } Layout; @@ -201,9 +193,6 @@ typedef struct {  /* function declarations */  static void applybounds(Client *c, struct wlr_box *bbox); -static void applyexclusive(struct wlr_box *usable_area, uint32_t anchor, -		int32_t exclusive, int32_t margin_top, int32_t margin_right, -		int32_t margin_bottom, int32_t margin_left);  static void applyrules(Client *c);  static void arrange(Monitor *m);  static void arrangelayer(Monitor *m, struct wl_list *list, @@ -381,61 +370,6 @@ applybounds(Client *c, struct wlr_box *bbox)  }  void -applyexclusive(struct wlr_box *usable_area, -		uint32_t anchor, int32_t exclusive, -		int32_t margin_top, int32_t margin_right, -		int32_t margin_bottom, int32_t margin_left) { -	Edge edges[] = { -		{ /* Top */ -			.singular_anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP, -			.anchor_triplet = ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | -				ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT | -				ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP, -			.positive_axis = &usable_area->y, -			.negative_axis = &usable_area->height, -			.margin = margin_top, -		}, -		{ /* Bottom */ -			.singular_anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM, -			.anchor_triplet = ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | -				ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT | -				ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM, -			.positive_axis = NULL, -			.negative_axis = &usable_area->height, -			.margin = margin_bottom, -		}, -		{ /* Left */ -			.singular_anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT, -			.anchor_triplet = ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT | -				ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | -				ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM, -			.positive_axis = &usable_area->x, -			.negative_axis = &usable_area->width, -			.margin = margin_left, -		}, -		{ /* Right */ -			.singular_anchor = ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT, -			.anchor_triplet = ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT | -				ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP | -				ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM, -			.positive_axis = NULL, -			.negative_axis = &usable_area->width, -			.margin = margin_right, -		} -	}; -	for (size_t i = 0; i < LENGTH(edges); i++) { -		if ((anchor == edges[i].singular_anchor || anchor == edges[i].anchor_triplet) -				&& exclusive + edges[i].margin > 0) { -			if (edges[i].positive_axis) -				*edges[i].positive_axis += exclusive + edges[i].margin; -			if (edges[i].negative_axis) -				*edges[i].negative_axis -= exclusive + edges[i].margin; -			break; -		} -	} -} - -void  applyrules(Client *c)  {  	/* rule matching */ @@ -486,72 +420,11 @@ arrangelayer(Monitor *m, struct wl_list *list, struct wlr_box *usable_area, int  	wl_list_for_each(layersurface, list, link) {  		struct wlr_layer_surface_v1 *wlr_layer_surface = layersurface->layer_surface;  		struct wlr_layer_surface_v1_state *state = &wlr_layer_surface->current; -		struct wlr_box bounds; -		struct wlr_box box = { -			.width = state->desired_width, -			.height = state->desired_height -		}; -		const uint32_t both_horiz = ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT -			| ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT; -		const uint32_t both_vert = ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP -			| ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM;  		if (exclusive != (state->exclusive_zone > 0))  			continue; -		bounds = state->exclusive_zone == -1 ? full_area : *usable_area; - -		/* Horizontal axis */ -		if ((state->anchor & both_horiz) && box.width == 0) { -			box.x = bounds.x; -			box.width = bounds.width; -		} else if ((state->anchor & ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT)) { -			box.x = bounds.x; -		} else if ((state->anchor & ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT)) { -			box.x = bounds.x + (bounds.width - box.width); -		} else { -			box.x = bounds.x + ((bounds.width / 2) - (box.width / 2)); -		} -		/* Vertical axis */ -		if ((state->anchor & both_vert) && box.height == 0) { -			box.y = bounds.y; -			box.height = bounds.height; -		} else if ((state->anchor & ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP)) { -			box.y = bounds.y; -		} else if ((state->anchor & ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM)) { -			box.y = bounds.y + (bounds.height - box.height); -		} else { -			box.y = bounds.y + ((bounds.height / 2) - (box.height / 2)); -		} -		/* Margin */ -		if ((state->anchor & both_horiz) == both_horiz) { -			box.x += state->margin.left; -			box.width -= state->margin.left + state->margin.right; -		} else if ((state->anchor & ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT)) { -			box.x += state->margin.left; -		} else if ((state->anchor & ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT)) { -			box.x -= state->margin.right; -		} -		if ((state->anchor & both_vert) == both_vert) { -			box.y += state->margin.top; -			box.height -= state->margin.top + state->margin.bottom; -		} else if ((state->anchor & ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP)) { -			box.y += state->margin.top; -		} else if ((state->anchor & ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM)) { -			box.y -= state->margin.bottom; -		} -		if (box.width < 0 || box.height < 0) { -			wlr_layer_surface_v1_destroy(wlr_layer_surface); -			continue; -		} -		layersurface->geo = box; - -		if (state->exclusive_zone > 0) -			applyexclusive(usable_area, state->anchor, state->exclusive_zone, -					state->margin.top, state->margin.right, -					state->margin.bottom, state->margin.left); -		wlr_scene_node_set_position(layersurface->scene, box.x, box.y); -		wlr_layer_surface_v1_configure(wlr_layer_surface, box.width, box.height); +		wlr_scene_layer_surface_v1_configure(layersurface->scene_layer, &full_area, usable_area);  	}  } @@ -601,7 +474,7 @@ axisnotify(struct wl_listener *listener, void *data)  {  	/* This event is forwarded by the cursor when a pointer emits an axis event,  	 * for example when you move the scroll wheel. */ -	struct wlr_event_pointer_axis *event = data; +	struct wlr_pointer_axis_event *event = data;  	wlr_idle_notify_activity(idle, seat);  	/* Notify the client with pointer focus of the axis event. */  	wlr_seat_pointer_notify_axis(seat, @@ -612,7 +485,7 @@ axisnotify(struct wl_listener *listener, void *data)  void  buttonpress(struct wl_listener *listener, void *data)  { -	struct wlr_event_pointer_button *event = data; +	struct wlr_pointer_button_event *event = data;  	struct wlr_keyboard *keyboard;  	uint32_t mods;  	Client *c; @@ -932,9 +805,10 @@ createlayersurface(struct wl_listener *listener, void *data)  	wlr_layer_surface->data = layersurface;  	m = wlr_layer_surface->output->data; +	layersurface->scene_layer = wlr_scene_layer_surface_v1_create( +			layers[wlr_layer_surface->pending.layer], wlr_layer_surface);  	layersurface->scene = wlr_layer_surface->surface->data = -			wlr_scene_subsurface_tree_create(layers[wlr_layer_surface->pending.layer], -			wlr_layer_surface->surface); +			layersurface->scene_layer->node;  	layersurface->scene->data = layersurface;  	wl_list_insert(&m->layers[wlr_layer_surface->pending.layer], @@ -1254,7 +1128,7 @@ keypress(struct wl_listener *listener, void *data)  	int i;  	/* This event is raised when a key is pressed or released. */  	Keyboard *kb = wl_container_of(listener, kb, key); -	struct wlr_event_keyboard_key *event = data; +	struct wlr_keyboard_key_event *event = data;  	/* Translate libinput keycode -> xkbcommon */  	uint32_t keycode = event->keycode + 8; @@ -1386,8 +1260,8 @@ motionabsolute(struct wl_listener *listener, void *data)  	 * move the mouse over the window. You could enter the window from any edge,  	 * so we have to warp the mouse there. There is also some hardware which  	 * emits these events. */ -	struct wlr_event_pointer_motion_absolute *event = data; -	wlr_cursor_warp_absolute(cursor, event->device, event->x, event->y); +	struct wlr_pointer_motion_absolute_event *event = data; +	wlr_cursor_warp_absolute(cursor, &event->pointer->base, event->x, event->y);  	motionnotify(event->time_msec);  } @@ -1437,13 +1311,13 @@ motionrelative(struct wl_listener *listener, void *data)  {  	/* This event is forwarded by the cursor when a pointer emits a _relative_  	 * pointer motion event (i.e. a delta) */ -	struct wlr_event_pointer_motion *event = data; +	struct wlr_pointer_motion_event *event = data;  	/* The cursor doesn't move unless we tell it to. The cursor automatically  	 * handles constraining the motion to the output layout, as well as any  	 * special configuration applied for the specific input device which  	 * generated the event. You can pass NULL for the device if you want to move  	 * the cursor around without any input. */ -	wlr_cursor_move(cursor, event->device, event->delta_x, event->delta_y); +	wlr_cursor_move(cursor, &event->pointer->base, event->delta_x, event->delta_y);  	motionnotify(event->time_msec);  } @@ -1889,6 +1763,7 @@ setup(void)  	wlr_gamma_control_manager_v1_create(dpy);  	wlr_primary_selection_v1_device_manager_create(dpy);  	wlr_viewporter_create(dpy); +	wlr_subcompositor_create(dpy);  	/* Initializes the interface used to implement urgency hints */  	activation = wlr_xdg_activation_v1_create(dpy); @@ -2168,7 +2043,7 @@ updatemons(struct wl_listener *listener, void *data)  	struct wlr_output_configuration_v1 *config =  		wlr_output_configuration_v1_create();  	Monitor *m; -	sgeom = *wlr_output_layout_get_box(output_layout, NULL); +	wlr_output_layout_get_box(output_layout, NULL, &sgeom);  	wl_list_for_each(m, &mons, link) {  		struct wlr_output_configuration_head_v1 *config_head =  			wlr_output_configuration_head_v1_create(config, m->wlr_output); @@ -2177,7 +2052,8 @@ updatemons(struct wl_listener *listener, void *data)  		/* TODO: move focus if selmon is disabled */  		/* Get the effective monitor geometry to use for surfaces */ -		m->m = m->w = *wlr_output_layout_get_box(output_layout, m->wlr_output); +		wlr_output_layout_get_box(output_layout, m->wlr_output, &(m->m)); +		wlr_output_layout_get_box(output_layout, m->wlr_output, &(m->w));  		wlr_scene_output_set_position(m->scene_output, m->m.x, m->m.y);  		/* Calculate the effective monitor geometry to use for clients */  		arrangelayers(m); @@ -2233,7 +2109,7 @@ void  virtualkeyboard(struct wl_listener *listener, void *data)  {  	struct wlr_virtual_keyboard_v1 *keyboard = data; -	struct wlr_input_device *device = &keyboard->input_device; +	struct wlr_input_device *device = &keyboard->keyboard.base;  	createkeyboard(device);  } | 
