mirror of
				https://codeberg.org/dwl/dwl.git
				synced 2025-11-03 09:01:45 -05:00 
			
		
		
		
	Merge branch 'wlroots-next' into scenegraph-wlroots-next
This commit is contained in:
		
						commit
						3577802541
					
				
					 4 changed files with 21 additions and 16 deletions
				
			
		| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Join us on our [Discord server](https://discord.gg/jJxZnrGPWN)!
 | 
					Join us on our [Discord server](https://discord.gg/jJxZnrGPWN)!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dwl is a compact, hackable compositor for Wayland based on [wlroots](https://github.com/swaywm/wlroots). It is intended to fill the same space in the Wayland world that dwm does in X11, primarily in terms of philosophy, and secondarily in terms of functionality. Like dwm, dwl is:
 | 
					dwl is a compact, hackable compositor for Wayland based on [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots/). It is intended to fill the same space in the Wayland world that dwm does in X11, primarily in terms of philosophy, and secondarily in terms of functionality. Like dwm, dwl is:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Easy to understand, hack on, and extend with patches
 | 
					- Easy to understand, hack on, and extend with patches
 | 
				
			||||||
- One C source file (or a very small number) configurable via `config.h`
 | 
					- One C source file (or a very small number) configurable via `config.h`
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										11
									
								
								client.h
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								client.h
									
										
									
									
									
								
							| 
						 | 
					@ -39,7 +39,7 @@ client_activate_surface(struct wlr_surface *s, int activated)
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	if (wlr_surface_is_xdg_surface(s))
 | 
						if (wlr_surface_is_xdg_surface(s))
 | 
				
			||||||
		wlr_xdg_toplevel_set_activated(
 | 
							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
 | 
					static inline void
 | 
				
			||||||
| 
						 | 
					@ -121,7 +121,7 @@ client_send_close(Client *c)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	wlr_xdg_toplevel_send_close(c->surface.xdg);
 | 
						wlr_xdg_toplevel_send_close(c->surface.xdg->toplevel);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline void
 | 
					static inline void
 | 
				
			||||||
| 
						 | 
					@ -133,7 +133,7 @@ client_set_fullscreen(Client *c, int fullscreen)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	wlr_xdg_toplevel_set_fullscreen(c->surface.xdg, fullscreen);
 | 
						wlr_xdg_toplevel_set_fullscreen(c->surface.xdg->toplevel, fullscreen);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline uint32_t
 | 
					static inline uint32_t
 | 
				
			||||||
| 
						 | 
					@ -146,7 +146,7 @@ client_set_size(Client *c, uint32_t width, uint32_t height)
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#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
 | 
					static inline void
 | 
				
			||||||
| 
						 | 
					@ -156,8 +156,7 @@ client_set_tiled(Client *c, uint32_t edges)
 | 
				
			||||||
	if (client_is_x11(c))
 | 
						if (client_is_x11(c))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	wlr_xdg_toplevel_set_tiled(c->surface.xdg, WLR_EDGE_TOP |
 | 
						wlr_xdg_toplevel_set_tiled(c->surface.xdg->toplevel, edges);
 | 
				
			||||||
			WLR_EDGE_BOTTOM | WLR_EDGE_LEFT | WLR_EDGE_RIGHT);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static inline struct wlr_surface *
 | 
					static inline struct wlr_surface *
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -96,7 +96,7 @@ static const Key keys[] = {
 | 
				
			||||||
	TAGKEYS(          XKB_KEY_3, XKB_KEY_numbersign,                 2),
 | 
						TAGKEYS(          XKB_KEY_3, XKB_KEY_numbersign,                 2),
 | 
				
			||||||
	TAGKEYS(          XKB_KEY_4, XKB_KEY_dollar,                     3),
 | 
						TAGKEYS(          XKB_KEY_4, XKB_KEY_dollar,                     3),
 | 
				
			||||||
	TAGKEYS(          XKB_KEY_5, XKB_KEY_percent,                    4),
 | 
						TAGKEYS(          XKB_KEY_5, XKB_KEY_percent,                    4),
 | 
				
			||||||
	TAGKEYS(          XKB_KEY_6, XKB_KEY_caret,                      5),
 | 
						TAGKEYS(          XKB_KEY_6, XKB_KEY_asciicircum,                5),
 | 
				
			||||||
	TAGKEYS(          XKB_KEY_7, XKB_KEY_ampersand,                  6),
 | 
						TAGKEYS(          XKB_KEY_7, XKB_KEY_ampersand,                  6),
 | 
				
			||||||
	TAGKEYS(          XKB_KEY_8, XKB_KEY_asterisk,                   7),
 | 
						TAGKEYS(          XKB_KEY_8, XKB_KEY_asterisk,                   7),
 | 
				
			||||||
	TAGKEYS(          XKB_KEY_9, XKB_KEY_parenleft,                  8),
 | 
						TAGKEYS(          XKB_KEY_9, XKB_KEY_parenleft,                  8),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										22
									
								
								dwl.c
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								dwl.c
									
										
									
									
									
								
							| 
						 | 
					@ -37,6 +37,7 @@
 | 
				
			||||||
#include <wlr/types/wlr_scene.h>
 | 
					#include <wlr/types/wlr_scene.h>
 | 
				
			||||||
#include <wlr/types/wlr_server_decoration.h>
 | 
					#include <wlr/types/wlr_server_decoration.h>
 | 
				
			||||||
#include <wlr/types/wlr_seat.h>
 | 
					#include <wlr/types/wlr_seat.h>
 | 
				
			||||||
 | 
					#include <wlr/types/wlr_subcompositor.h>
 | 
				
			||||||
#include <wlr/types/wlr_viewporter.h>
 | 
					#include <wlr/types/wlr_viewporter.h>
 | 
				
			||||||
#include <wlr/types/wlr_virtual_keyboard_v1.h>
 | 
					#include <wlr/types/wlr_virtual_keyboard_v1.h>
 | 
				
			||||||
#include <wlr/types/wlr_xcursor_manager.h>
 | 
					#include <wlr/types/wlr_xcursor_manager.h>
 | 
				
			||||||
| 
						 | 
					@ -123,11 +124,6 @@ typedef struct {
 | 
				
			||||||
	int isfullscreen;
 | 
						int isfullscreen;
 | 
				
			||||||
} Client;
 | 
					} Client;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct {
 | 
					 | 
				
			||||||
	struct wl_listener request_mode;
 | 
					 | 
				
			||||||
	struct wl_listener destroy;
 | 
					 | 
				
			||||||
} Decoration;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typedef struct {
 | 
					typedef struct {
 | 
				
			||||||
	uint32_t mod;
 | 
						uint32_t mod;
 | 
				
			||||||
	xkb_keysym_t keysym;
 | 
						xkb_keysym_t keysym;
 | 
				
			||||||
| 
						 | 
					@ -1342,6 +1338,7 @@ mapnotify(struct wl_listener *listener, void *data)
 | 
				
			||||||
	/* Set initial monitor, tags, floating status, and focus */
 | 
						/* Set initial monitor, tags, floating status, and focus */
 | 
				
			||||||
	applyrules(c);
 | 
						applyrules(c);
 | 
				
			||||||
	resize(c, c->geom.x, c->geom.y, c->geom.width, c->geom.height, 0);
 | 
						resize(c, c->geom.x, c->geom.y, c->geom.width, c->geom.height, 0);
 | 
				
			||||||
 | 
						printstatus();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					@ -1669,11 +1666,13 @@ run(char *startup_cmd)
 | 
				
			||||||
			EBARF("startup: fork");
 | 
								EBARF("startup: fork");
 | 
				
			||||||
		if (startup_pid == 0) {
 | 
							if (startup_pid == 0) {
 | 
				
			||||||
			dup2(piperw[0], STDIN_FILENO);
 | 
								dup2(piperw[0], STDIN_FILENO);
 | 
				
			||||||
 | 
								close(piperw[0]);
 | 
				
			||||||
			close(piperw[1]);
 | 
								close(piperw[1]);
 | 
				
			||||||
			execl("/bin/sh", "/bin/sh", "-c", startup_cmd, NULL);
 | 
								execl("/bin/sh", "/bin/sh", "-c", startup_cmd, NULL);
 | 
				
			||||||
			EBARF("startup: execl");
 | 
								EBARF("startup: execl");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		dup2(piperw[1], STDOUT_FILENO);
 | 
							dup2(piperw[1], STDOUT_FILENO);
 | 
				
			||||||
 | 
							close(piperw[1]);
 | 
				
			||||||
		close(piperw[0]);
 | 
							close(piperw[0]);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	/* If nobody is reading the status output, don't terminate */
 | 
						/* If nobody is reading the status output, don't terminate */
 | 
				
			||||||
| 
						 | 
					@ -1872,6 +1871,7 @@ setup(void)
 | 
				
			||||||
	wlr_gamma_control_manager_v1_create(dpy);
 | 
						wlr_gamma_control_manager_v1_create(dpy);
 | 
				
			||||||
	wlr_primary_selection_v1_device_manager_create(dpy);
 | 
						wlr_primary_selection_v1_device_manager_create(dpy);
 | 
				
			||||||
	wlr_viewporter_create(dpy);
 | 
						wlr_viewporter_create(dpy);
 | 
				
			||||||
 | 
						wlr_subcompositor_create(dpy);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Initializes the interface used to implement urgency hints */
 | 
						/* Initializes the interface used to implement urgency hints */
 | 
				
			||||||
	activation = wlr_xdg_activation_v1_create(dpy);
 | 
						activation = wlr_xdg_activation_v1_create(dpy);
 | 
				
			||||||
| 
						 | 
					@ -2125,6 +2125,10 @@ unmapnotify(struct wl_listener *listener, void *data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* Called when the surface is unmapped, and should no longer be shown. */
 | 
						/* Called when the surface is unmapped, and should no longer be shown. */
 | 
				
			||||||
	Client *c = wl_container_of(listener, c, unmap);
 | 
						Client *c = wl_container_of(listener, c, unmap);
 | 
				
			||||||
 | 
						if (c == grabc) {
 | 
				
			||||||
 | 
							cursor_mode = CurNormal;
 | 
				
			||||||
 | 
							grabc = NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	wl_list_remove(&c->link);
 | 
						wl_list_remove(&c->link);
 | 
				
			||||||
	if (client_is_unmanaged(c))
 | 
						if (client_is_unmanaged(c))
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
| 
						 | 
					@ -2132,6 +2136,7 @@ unmapnotify(struct wl_listener *listener, void *data)
 | 
				
			||||||
	setmon(c, NULL, 0);
 | 
						setmon(c, NULL, 0);
 | 
				
			||||||
	wl_list_remove(&c->flink);
 | 
						wl_list_remove(&c->flink);
 | 
				
			||||||
	wlr_scene_node_destroy(c->scene);
 | 
						wlr_scene_node_destroy(c->scene);
 | 
				
			||||||
 | 
						printstatus();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					@ -2147,7 +2152,7 @@ updatemons(struct wl_listener *listener, void *data)
 | 
				
			||||||
	struct wlr_output_configuration_v1 *config =
 | 
						struct wlr_output_configuration_v1 *config =
 | 
				
			||||||
		wlr_output_configuration_v1_create();
 | 
							wlr_output_configuration_v1_create();
 | 
				
			||||||
	Monitor *m;
 | 
						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) {
 | 
						wl_list_for_each(m, &mons, link) {
 | 
				
			||||||
		struct wlr_output_configuration_head_v1 *config_head =
 | 
							struct wlr_output_configuration_head_v1 *config_head =
 | 
				
			||||||
			wlr_output_configuration_head_v1_create(config, m->wlr_output);
 | 
								wlr_output_configuration_head_v1_create(config, m->wlr_output);
 | 
				
			||||||
| 
						 | 
					@ -2156,7 +2161,8 @@ updatemons(struct wl_listener *listener, void *data)
 | 
				
			||||||
		/* TODO: move focus if selmon is disabled */
 | 
							/* TODO: move focus if selmon is disabled */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Get the effective monitor geometry to use for surfaces */
 | 
							/* 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);
 | 
							wlr_scene_output_set_position(m->scene_output, m->m.x, m->m.y);
 | 
				
			||||||
		/* Calculate the effective monitor geometry to use for clients */
 | 
							/* Calculate the effective monitor geometry to use for clients */
 | 
				
			||||||
		arrangelayers(m);
 | 
							arrangelayers(m);
 | 
				
			||||||
| 
						 | 
					@ -2212,7 +2218,7 @@ void
 | 
				
			||||||
virtualkeyboard(struct wl_listener *listener, void *data)
 | 
					virtualkeyboard(struct wl_listener *listener, void *data)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct wlr_virtual_keyboard_v1 *keyboard = 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);
 | 
						createkeyboard(device);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue