mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	labwc.h: remove "extern struct server server"
This commit is contained in:
		
							parent
							
								
									84ebd2dae5
								
							
						
					
					
						commit
						e99d0bb34e
					
				
					 11 changed files with 62 additions and 47 deletions
				
			
		| 
						 | 
					@ -83,8 +83,6 @@ struct server {
 | 
				
			||||||
	struct view *cycle_view;
 | 
						struct view *cycle_view;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern struct server server;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
struct output {
 | 
					struct output {
 | 
				
			||||||
	struct wl_list link;
 | 
						struct wl_list link;
 | 
				
			||||||
	struct server *server;
 | 
						struct server *server;
 | 
				
			||||||
| 
						 | 
					@ -142,6 +140,7 @@ struct view {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct xwayland_unmanaged {
 | 
					struct xwayland_unmanaged {
 | 
				
			||||||
 | 
						struct server *server;
 | 
				
			||||||
	struct wlr_xwayland_surface *xwayland_surface;
 | 
						struct wlr_xwayland_surface *xwayland_surface;
 | 
				
			||||||
	struct wl_list link;
 | 
						struct wl_list link;
 | 
				
			||||||
	int lx, ly;
 | 
						int lx, ly;
 | 
				
			||||||
| 
						 | 
					@ -166,7 +165,8 @@ void xdg_toplevel_decoration(struct wl_listener *listener, void *data);
 | 
				
			||||||
void xdg_surface_new(struct wl_listener *listener, void *data);
 | 
					void xdg_surface_new(struct wl_listener *listener, void *data);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void xwayland_surface_new(struct wl_listener *listener, void *data);
 | 
					void xwayland_surface_new(struct wl_listener *listener, void *data);
 | 
				
			||||||
void xwayland_unmanaged_create(struct wlr_xwayland_surface *xsurface);
 | 
					void xwayland_unmanaged_create(struct server *server,
 | 
				
			||||||
 | 
								       struct wlr_xwayland_surface *xsurface);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void view_init_position(struct view *view);
 | 
					void view_init_position(struct view *view);
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -179,13 +179,15 @@ struct wlr_box view_get_surface_geometry(struct view *view);
 | 
				
			||||||
struct wlr_box view_geometry(struct view *view);
 | 
					struct wlr_box view_geometry(struct view *view);
 | 
				
			||||||
void view_resize(struct view *view, struct wlr_box geo);
 | 
					void view_resize(struct view *view, struct wlr_box geo);
 | 
				
			||||||
void view_focus(struct view *view);
 | 
					void view_focus(struct view *view);
 | 
				
			||||||
struct view *view_next(struct view *current);
 | 
					struct view *view_next(struct server *server, struct view *current);
 | 
				
			||||||
bool view_hasfocus(struct view *view);
 | 
					bool view_hasfocus(struct view *view);
 | 
				
			||||||
struct view *view_at(struct server *server, double lx, double ly,
 | 
					struct view *view_at(struct server *server, double lx, double ly,
 | 
				
			||||||
		     struct wlr_surface **surface, double *sx, double *sy,
 | 
							     struct wlr_surface **surface, double *sx, double *sy,
 | 
				
			||||||
		     int *view_area);
 | 
							     int *view_area);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void seat_init(struct wlr_seat *seat);
 | 
				
			||||||
void seat_focus_surface(struct wlr_surface *surface);
 | 
					void seat_focus_surface(struct wlr_surface *surface);
 | 
				
			||||||
 | 
					struct wlr_surface *seat_focused_surface(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void interactive_begin(struct view *view, enum cursor_mode mode,
 | 
					void interactive_begin(struct view *view, enum cursor_mode mode,
 | 
				
			||||||
		       uint32_t edges);
 | 
							       uint32_t edges);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,7 +11,7 @@ void action(struct server *server, struct keybind *keybind)
 | 
				
			||||||
	if (!strcasecmp(keybind->action, "Exit")) {
 | 
						if (!strcasecmp(keybind->action, "Exit")) {
 | 
				
			||||||
		wl_display_terminate(server->wl_display);
 | 
							wl_display_terminate(server->wl_display);
 | 
				
			||||||
	} else if (!strcasecmp(keybind->action, "NextWindow")) {
 | 
						} else if (!strcasecmp(keybind->action, "NextWindow")) {
 | 
				
			||||||
		server->cycle_view = view_next(server->cycle_view);
 | 
							server->cycle_view = view_next(server, server->cycle_view);
 | 
				
			||||||
	} else if (!strcasecmp(keybind->action, "Execute")) {
 | 
						} else if (!strcasecmp(keybind->action, "Execute")) {
 | 
				
			||||||
		spawn_async_no_shell(keybind->command);
 | 
							spawn_async_no_shell(keybind->command);
 | 
				
			||||||
	} else if (!strcasecmp(keybind->action, "debug-views")) {
 | 
						} else if (!strcasecmp(keybind->action, "debug-views")) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,10 +35,8 @@ static void show_one_xdg_view(struct view *view)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	fprintf(stderr, "                   %p %s", (void *)view,
 | 
						fprintf(stderr, "                   %p %s", (void *)view,
 | 
				
			||||||
		view->xdg_surface->toplevel->app_id);
 | 
							view->xdg_surface->toplevel->app_id);
 | 
				
			||||||
	fprintf(stderr, "  {%d, %d, %d, %d}\n", view->xdg_surface->geometry.x,
 | 
						fprintf(stderr, "  {%d, %d, %d, %d}\n", view->x, view->y, view->w,
 | 
				
			||||||
		view->xdg_surface->geometry.y,
 | 
							view->h);
 | 
				
			||||||
		view->xdg_surface->geometry.height,
 | 
					 | 
				
			||||||
		view->xdg_surface->geometry.width);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void show_one_xwl_view(struct view *view)
 | 
					static void show_one_xwl_view(struct view *view)
 | 
				
			||||||
| 
						 | 
					@ -52,7 +50,7 @@ static void show_one_xwl_view(struct view *view)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		fprintf(stderr, "-");
 | 
							fprintf(stderr, "-");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	fprintf(stderr, "      %p %s {%d,%d,%d,%d}\n", (void *)view,
 | 
						fprintf(stderr, "      %p.4 %s {%d,%d,%d,%d}\n", (void *)view,
 | 
				
			||||||
		view->xwayland_surface->class, view->xwayland_surface->x,
 | 
							view->xwayland_surface->class, view->xwayland_surface->x,
 | 
				
			||||||
		view->xwayland_surface->y, view->xwayland_surface->width,
 | 
							view->xwayland_surface->y, view->xwayland_surface->width,
 | 
				
			||||||
		view->xwayland_surface->height);
 | 
							view->xwayland_surface->height);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,7 +65,8 @@ static void keyboard_handle_key(struct wl_listener *listener, void *data)
 | 
				
			||||||
			server->cycle_view = NULL;
 | 
								server->cycle_view = NULL;
 | 
				
			||||||
		} else if (event->state == WLR_KEY_PRESSED) {
 | 
							} else if (event->state == WLR_KEY_PRESSED) {
 | 
				
			||||||
			/* cycle to next */
 | 
								/* cycle to next */
 | 
				
			||||||
			server->cycle_view = view_next(server->cycle_view);
 | 
								server->cycle_view = view_next(server,
 | 
				
			||||||
 | 
											       server->cycle_view);
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										32
									
								
								src/output.c
									
										
									
									
									
								
							
							
						
						
									
										32
									
								
								src/output.c
									
										
									
									
									
								
							| 
						 | 
					@ -88,6 +88,7 @@ static void render_decorations(struct wlr_output *output, struct view *view)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct render_data {
 | 
					struct render_data {
 | 
				
			||||||
	struct wlr_output *output;
 | 
						struct wlr_output *output;
 | 
				
			||||||
 | 
						struct wlr_output_layout *output_layout;
 | 
				
			||||||
	struct wlr_renderer *renderer;
 | 
						struct wlr_renderer *renderer;
 | 
				
			||||||
	int lx, ly;
 | 
						int lx, ly;
 | 
				
			||||||
	struct timespec *when;
 | 
						struct timespec *when;
 | 
				
			||||||
| 
						 | 
					@ -96,37 +97,28 @@ struct render_data {
 | 
				
			||||||
static void render_surface(struct wlr_surface *surface, int sx, int sy,
 | 
					static void render_surface(struct wlr_surface *surface, int sx, int sy,
 | 
				
			||||||
			   void *data)
 | 
								   void *data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* This function is called for every surface that needs to be rendered.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	struct render_data *rdata = data;
 | 
						struct render_data *rdata = data;
 | 
				
			||||||
	struct wlr_output *output = rdata->output;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* We first obtain a wlr_texture, which is a GPU resource. wlroots
 | 
					 | 
				
			||||||
	 * automatically handles negotiating these with the client. The
 | 
					 | 
				
			||||||
	 * underlying resource could be an opaque handle passed from the client,
 | 
					 | 
				
			||||||
	 * or the client could have sent a pixel buffer which we copied to the
 | 
					 | 
				
			||||||
	 * GPU, or a few other means. You don't have to worry about this,
 | 
					 | 
				
			||||||
	 * wlroots takes care of it. */
 | 
					 | 
				
			||||||
	struct wlr_texture *texture = wlr_surface_get_texture(surface);
 | 
						struct wlr_texture *texture = wlr_surface_get_texture(surface);
 | 
				
			||||||
	if (texture == NULL) {
 | 
						if (!texture)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* The view has a position in layout coordinates. If you have two
 | 
						/* The view has a position in layout coordinates. If you have two
 | 
				
			||||||
	 * displays, one next to the other, both 1080p, a view on the rightmost
 | 
						 * displays, one next to the other, both 1080p, a view on the rightmost
 | 
				
			||||||
	 * display might have layout coordinates of 2000,100. We need to
 | 
						 * display might have layout coordinates of 2000,100. We need to
 | 
				
			||||||
	 * translate that to output-local coordinates, or (2000 - 1920). */
 | 
						 * translate that to output-local coordinates, or (2000 - 1920). */
 | 
				
			||||||
	double ox = 0, oy = 0;
 | 
						double ox = 0, oy = 0;
 | 
				
			||||||
	wlr_output_layout_output_coords(server.output_layout, output, &ox, &oy);
 | 
						wlr_output_layout_output_coords(rdata->output_layout, rdata->output,
 | 
				
			||||||
 | 
										&ox, &oy);
 | 
				
			||||||
	ox += rdata->lx + sx;
 | 
						ox += rdata->lx + sx;
 | 
				
			||||||
	oy += rdata->ly + sy;
 | 
						oy += rdata->ly + sy;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* TODO: Support HiDPI */
 | 
						/* TODO: Support HiDPI */
 | 
				
			||||||
	struct wlr_box box = {
 | 
						struct wlr_box box = {
 | 
				
			||||||
		.x = ox * output->scale,
 | 
							.x = ox * rdata->output->scale,
 | 
				
			||||||
		.y = oy * output->scale,
 | 
							.y = oy * rdata->output->scale,
 | 
				
			||||||
		.width = surface->current.width * output->scale,
 | 
							.width = surface->current.width * rdata->output->scale,
 | 
				
			||||||
		.height = surface->current.height * output->scale,
 | 
							.height = surface->current.height * rdata->output->scale,
 | 
				
			||||||
	};
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
| 
						 | 
					@ -145,7 +137,7 @@ static void render_surface(struct wlr_surface *surface, int sx, int sy,
 | 
				
			||||||
	enum wl_output_transform transform =
 | 
						enum wl_output_transform transform =
 | 
				
			||||||
		wlr_output_transform_invert(surface->current.transform);
 | 
							wlr_output_transform_invert(surface->current.transform);
 | 
				
			||||||
	wlr_matrix_project_box(matrix, &box, transform, 0,
 | 
						wlr_matrix_project_box(matrix, &box, transform, 0,
 | 
				
			||||||
			       output->transform_matrix);
 | 
								       rdata->output->transform_matrix);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * This takes our matrix, the texture, and an alpha, and performs the
 | 
						 * This takes our matrix, the texture, and an alpha, and performs the
 | 
				
			||||||
| 
						 | 
					@ -192,6 +184,7 @@ void output_frame(struct wl_listener *listener, void *data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		struct render_data rdata = {
 | 
							struct render_data rdata = {
 | 
				
			||||||
			.output = output->wlr_output,
 | 
								.output = output->wlr_output,
 | 
				
			||||||
 | 
								.output_layout = output->server->output_layout,
 | 
				
			||||||
			.lx = view->x,
 | 
								.lx = view->x,
 | 
				
			||||||
			.ly = view->y,
 | 
								.ly = view->y,
 | 
				
			||||||
			.renderer = renderer,
 | 
								.renderer = renderer,
 | 
				
			||||||
| 
						 | 
					@ -215,9 +208,12 @@ void output_frame(struct wl_listener *listener, void *data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Render xwayland override_redirect surfaces */
 | 
						/* Render xwayland override_redirect surfaces */
 | 
				
			||||||
	struct xwayland_unmanaged *unmanaged;
 | 
						struct xwayland_unmanaged *unmanaged;
 | 
				
			||||||
	wl_list_for_each_reverse (unmanaged, &server.unmanaged_surfaces, link) {
 | 
						wl_list_for_each_reverse (unmanaged,
 | 
				
			||||||
 | 
									  &output->server->unmanaged_surfaces,
 | 
				
			||||||
 | 
									  link) {
 | 
				
			||||||
		struct render_data rdata = {
 | 
							struct render_data rdata = {
 | 
				
			||||||
			.output = output->wlr_output,
 | 
								.output = output->wlr_output,
 | 
				
			||||||
 | 
								.output_layout = output->server->output_layout,
 | 
				
			||||||
			.lx = unmanaged->lx,
 | 
								.lx = unmanaged->lx,
 | 
				
			||||||
			.ly = unmanaged->ly,
 | 
								.ly = unmanaged->ly,
 | 
				
			||||||
			.renderer = renderer,
 | 
								.renderer = renderer,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										16
									
								
								src/seat.c
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								src/seat.c
									
										
									
									
									
								
							| 
						 | 
					@ -1,11 +1,23 @@
 | 
				
			||||||
#include "labwc.h"
 | 
					#include "labwc.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static struct wlr_seat *current_seat;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void seat_init(struct wlr_seat *seat)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						current_seat = seat;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void seat_focus_surface(struct wlr_surface *surface)
 | 
					void seat_focus_surface(struct wlr_surface *surface)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!surface) {
 | 
						if (!surface) {
 | 
				
			||||||
		wlr_seat_keyboard_notify_clear_focus(server.seat);
 | 
							wlr_seat_keyboard_notify_clear_focus(current_seat);
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	/* TODO: add keyboard stuff */
 | 
						/* TODO: add keyboard stuff */
 | 
				
			||||||
	wlr_seat_keyboard_notify_enter(server.seat, surface, NULL, 0, NULL);
 | 
						wlr_seat_keyboard_notify_enter(current_seat, surface, NULL, 0, NULL);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct wlr_surface *seat_focused_surface(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return current_seat->keyboard_state.focused_surface;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -158,6 +158,7 @@ void server_init(struct server *server)
 | 
				
			||||||
		wlr_log(WLR_ERROR, "cannot allocate seat0");
 | 
							wlr_log(WLR_ERROR, "cannot allocate seat0");
 | 
				
			||||||
		exit(EXIT_FAILURE);
 | 
							exit(EXIT_FAILURE);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						seat_init(server->seat);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	server->cursor = wlr_cursor_create();
 | 
						server->cursor = wlr_cursor_create();
 | 
				
			||||||
	if (!server->cursor) {
 | 
						if (!server->cursor) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										19
									
								
								src/view.c
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								src/view.c
									
										
									
									
									
								
							| 
						 | 
					@ -140,10 +140,10 @@ void view_focus(struct view *view)
 | 
				
			||||||
	/* TODO: move xwayland decendants to front */
 | 
						/* TODO: move xwayland decendants to front */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct view *first_view(void)
 | 
					static struct view *first_view(struct server *server)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct view *view;
 | 
						struct view *view;
 | 
				
			||||||
	view = wl_container_of(server.views.next, view, link);
 | 
						view = wl_container_of(server->views.next, view, link);
 | 
				
			||||||
	return view;
 | 
						return view;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -172,21 +172,22 @@ static int has_focusable_view(struct wl_list *wl_list)
 | 
				
			||||||
	return false;
 | 
						return false;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/**
 | 
				
			||||||
 * Return next view. If NULL provided, return second view from front.
 | 
					 * view_next - return next view
 | 
				
			||||||
 | 
					 * @current: view used as reference point for defining 'next'
 | 
				
			||||||
 | 
					 * Note: If @current=NULL, the list's second view is returned
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
/* TODO: rename function */
 | 
					struct view *view_next(struct server *server, struct view *current)
 | 
				
			||||||
struct view *view_next(struct view *current)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (!has_focusable_view(&server.views))
 | 
						if (!has_focusable_view(&server->views))
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	struct view *view = current ? current : first_view();
 | 
						struct view *view = current ? current : first_view(server);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Replacement for wl_list_for_each_from() */
 | 
						/* Replacement for wl_list_for_each_from() */
 | 
				
			||||||
	do {
 | 
						do {
 | 
				
			||||||
		view = wl_container_of(view->link.next, view, link);
 | 
							view = wl_container_of(view->link.next, view, link);
 | 
				
			||||||
	} while (&view->link == &server.views || !isfocusable(view));
 | 
						} while (&view->link == &server->views || !isfocusable(view));
 | 
				
			||||||
	return view;
 | 
						return view;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -148,7 +148,7 @@ static void xdg_toplevel_view_unmap(struct view *view)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	view->mapped = false;
 | 
						view->mapped = false;
 | 
				
			||||||
	wl_list_remove(&view->commit.link);
 | 
						wl_list_remove(&view->commit.link);
 | 
				
			||||||
	view_focus(view_next(view));
 | 
						view_focus(view_next(view->server, view));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct view_impl xdg_toplevel_view_impl = {
 | 
					static const struct view_impl xdg_toplevel_view_impl = {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,7 +26,8 @@ static void unmanaged_handle_map(struct wl_listener *listener, void *data)
 | 
				
			||||||
		wl_container_of(listener, unmanaged, map);
 | 
							wl_container_of(listener, unmanaged, map);
 | 
				
			||||||
	struct wlr_xwayland_surface *xsurface = unmanaged->xwayland_surface;
 | 
						struct wlr_xwayland_surface *xsurface = unmanaged->xwayland_surface;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wl_list_insert(server.unmanaged_surfaces.prev, &unmanaged->link);
 | 
						wl_list_insert(unmanaged->server->unmanaged_surfaces.prev,
 | 
				
			||||||
 | 
							       &unmanaged->link);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wl_signal_add(&xsurface->surface->events.commit, &unmanaged->commit);
 | 
						wl_signal_add(&xsurface->surface->events.commit, &unmanaged->commit);
 | 
				
			||||||
	unmanaged->commit.notify = unmanaged_handle_commit;
 | 
						unmanaged->commit.notify = unmanaged_handle_commit;
 | 
				
			||||||
| 
						 | 
					@ -46,9 +47,10 @@ static void unmanaged_handle_unmap(struct wl_listener *listener, void *data)
 | 
				
			||||||
	wl_list_remove(&unmanaged->link);
 | 
						wl_list_remove(&unmanaged->link);
 | 
				
			||||||
	wl_list_remove(&unmanaged->commit.link);
 | 
						wl_list_remove(&unmanaged->commit.link);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (server.seat->keyboard_state.focused_surface == xsurface->surface) {
 | 
						if (seat_focused_surface() == xsurface->surface) {
 | 
				
			||||||
		struct xwayland_unmanaged *u;
 | 
							struct xwayland_unmanaged *u;
 | 
				
			||||||
		wl_list_for_each (u, &server.unmanaged_surfaces, link) {
 | 
							struct wl_list *list = &unmanaged->server->unmanaged_surfaces;
 | 
				
			||||||
 | 
							wl_list_for_each (u, list, link) {
 | 
				
			||||||
			struct wlr_xwayland_surface *prev = u->xwayland_surface;
 | 
								struct wlr_xwayland_surface *prev = u->xwayland_surface;
 | 
				
			||||||
			if (!wlr_xwayland_or_surface_wants_focus(prev))
 | 
								if (!wlr_xwayland_or_surface_wants_focus(prev))
 | 
				
			||||||
				continue;
 | 
									continue;
 | 
				
			||||||
| 
						 | 
					@ -68,10 +70,12 @@ static void unmanaged_handle_destroy(struct wl_listener *listener, void *data)
 | 
				
			||||||
	free(unmanaged);
 | 
						free(unmanaged);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void xwayland_unmanaged_create(struct wlr_xwayland_surface *xsurface)
 | 
					void xwayland_unmanaged_create(struct server *server,
 | 
				
			||||||
 | 
								       struct wlr_xwayland_surface *xsurface)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct xwayland_unmanaged *unmanaged;
 | 
						struct xwayland_unmanaged *unmanaged;
 | 
				
			||||||
	unmanaged = calloc(1, sizeof(struct xwayland_unmanaged));
 | 
						unmanaged = calloc(1, sizeof(struct xwayland_unmanaged));
 | 
				
			||||||
 | 
						unmanaged->server = server;
 | 
				
			||||||
	unmanaged->xwayland_surface = xsurface;
 | 
						unmanaged->xwayland_surface = xsurface;
 | 
				
			||||||
	wl_signal_add(&xsurface->events.request_configure,
 | 
						wl_signal_add(&xsurface->events.request_configure,
 | 
				
			||||||
		      &unmanaged->request_configure);
 | 
							      &unmanaged->request_configure);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -87,7 +87,7 @@ static void unmap(struct view *view)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	view->mapped = false;
 | 
						view->mapped = false;
 | 
				
			||||||
	wl_list_remove(&view->commit.link);
 | 
						wl_list_remove(&view->commit.link);
 | 
				
			||||||
	view_focus(view_next(view));
 | 
						view_focus(view_next(view->server, view));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct view_impl xwl_view_impl = {
 | 
					static const struct view_impl xwl_view_impl = {
 | 
				
			||||||
| 
						 | 
					@ -109,7 +109,7 @@ void xwayland_surface_new(struct wl_listener *listener, void *data)
 | 
				
			||||||
	 * but add them to server.unmanaged_surfaces so that we can render them
 | 
						 * but add them to server.unmanaged_surfaces so that we can render them
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	if (xsurface->override_redirect) {
 | 
						if (xsurface->override_redirect) {
 | 
				
			||||||
		xwayland_unmanaged_create(xsurface);
 | 
							xwayland_unmanaged_create(server, xsurface);
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue