abc
This commit is contained in:
		
							
								
								
									
										88
									
								
								dwl.c
									
									
									
									
									
								
							
							
						
						
									
										88
									
								
								dwl.c
									
									
									
									
									
								
							@@ -94,8 +94,8 @@ struct render_data {
 | 
			
		||||
static void axisnotify(struct wl_listener *listener, void *data);
 | 
			
		||||
static void buttonpress(struct wl_listener *listener, void *data);
 | 
			
		||||
static void createkeyboard(struct wlr_input_device *device);
 | 
			
		||||
static void createnotify(struct wl_listener *listener, void *data);
 | 
			
		||||
static void createmon(struct wl_listener *listener, void *data);
 | 
			
		||||
static void createnotify(struct wl_listener *listener, void *data);
 | 
			
		||||
static void createpointer(struct wlr_input_device *device);
 | 
			
		||||
static void cursorframe(struct wl_listener *listener, void *data);
 | 
			
		||||
static void destroynotify(struct wl_listener *listener, void *data);
 | 
			
		||||
@@ -120,10 +120,10 @@ static void resizemouse(const Arg *arg);
 | 
			
		||||
static void setcursor(struct wl_listener *listener, void *data);
 | 
			
		||||
static void spawn(const Arg *arg);
 | 
			
		||||
static void unmapnotify(struct wl_listener *listener, void *data);
 | 
			
		||||
static bool xytosurface(Client *c, double lx, double ly,
 | 
			
		||||
		struct wlr_surface **surface, double *sx, double *sy);
 | 
			
		||||
static Client * xytoclient(double lx, double ly,
 | 
			
		||||
		struct wlr_surface **surface, double *sx, double *sy);
 | 
			
		||||
static bool xytosurface(Client *c, double lx, double ly,
 | 
			
		||||
		struct wlr_surface **surface, double *sx, double *sy);
 | 
			
		||||
 | 
			
		||||
/* variables */
 | 
			
		||||
static struct wl_display *wl_display;
 | 
			
		||||
@@ -230,32 +230,6 @@ createkeyboard(struct wlr_input_device *device)
 | 
			
		||||
	wl_list_insert(&keyboards, &keyboard->link);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
createnotify(struct wl_listener *listener, void *data)
 | 
			
		||||
{
 | 
			
		||||
	/* This event is raised when wlr_xdg_shell receives a new xdg surface from a
 | 
			
		||||
	 * client, either a toplevel (application window) or popup. */
 | 
			
		||||
	struct wlr_xdg_surface *xdg_surface = data;
 | 
			
		||||
	if (xdg_surface->role != WLR_XDG_SURFACE_ROLE_TOPLEVEL) {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Allocate a Client for this surface */
 | 
			
		||||
	Client *c = calloc(1, sizeof(*c));
 | 
			
		||||
	c->xdg_surface = xdg_surface;
 | 
			
		||||
 | 
			
		||||
	/* Listen to the various events it can emit */
 | 
			
		||||
	c->map.notify = maprequest;
 | 
			
		||||
	wl_signal_add(&xdg_surface->events.map, &c->map);
 | 
			
		||||
	c->unmap.notify = unmapnotify;
 | 
			
		||||
	wl_signal_add(&xdg_surface->events.unmap, &c->unmap);
 | 
			
		||||
	c->destroy.notify = destroynotify;
 | 
			
		||||
	wl_signal_add(&xdg_surface->events.destroy, &c->destroy);
 | 
			
		||||
 | 
			
		||||
	/* Add it to the list of clients. */
 | 
			
		||||
	wl_list_insert(&clients, &c->link);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
createmon(struct wl_listener *listener, void *data)
 | 
			
		||||
{
 | 
			
		||||
@@ -297,6 +271,32 @@ createmon(struct wl_listener *listener, void *data)
 | 
			
		||||
	wlr_output_create_global(wlr_output);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
createnotify(struct wl_listener *listener, void *data)
 | 
			
		||||
{
 | 
			
		||||
	/* This event is raised when wlr_xdg_shell receives a new xdg surface from a
 | 
			
		||||
	 * client, either a toplevel (application window) or popup. */
 | 
			
		||||
	struct wlr_xdg_surface *xdg_surface = data;
 | 
			
		||||
	if (xdg_surface->role != WLR_XDG_SURFACE_ROLE_TOPLEVEL) {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Allocate a Client for this surface */
 | 
			
		||||
	Client *c = calloc(1, sizeof(*c));
 | 
			
		||||
	c->xdg_surface = xdg_surface;
 | 
			
		||||
 | 
			
		||||
	/* Listen to the various events it can emit */
 | 
			
		||||
	c->map.notify = maprequest;
 | 
			
		||||
	wl_signal_add(&xdg_surface->events.map, &c->map);
 | 
			
		||||
	c->unmap.notify = unmapnotify;
 | 
			
		||||
	wl_signal_add(&xdg_surface->events.unmap, &c->unmap);
 | 
			
		||||
	c->destroy.notify = destroynotify;
 | 
			
		||||
	wl_signal_add(&xdg_surface->events.destroy, &c->destroy);
 | 
			
		||||
 | 
			
		||||
	/* Add it to the list of clients. */
 | 
			
		||||
	wl_list_insert(&clients, &c->link);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
createpointer(struct wlr_input_device *device)
 | 
			
		||||
{
 | 
			
		||||
@@ -804,6 +804,21 @@ unmapnotify(struct wl_listener *listener, void *data)
 | 
			
		||||
	c->mapped = false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Client *
 | 
			
		||||
xytoclient(double lx, double ly,
 | 
			
		||||
		struct wlr_surface **surface, double *sx, double *sy)
 | 
			
		||||
{
 | 
			
		||||
	/* This iterates over all of our surfaces and attempts to find one under the
 | 
			
		||||
	 * cursor. This relies on clients being ordered from top-to-bottom. */
 | 
			
		||||
	Client *c;
 | 
			
		||||
	wl_list_for_each(c, &clients, link) {
 | 
			
		||||
		if (xytosurface(c, lx, ly, surface, sx, sy)) {
 | 
			
		||||
			return c;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool
 | 
			
		||||
xytosurface(Client *c, double lx, double ly,
 | 
			
		||||
		struct wlr_surface **surface, double *sx, double *sy)
 | 
			
		||||
@@ -835,21 +850,6 @@ xytosurface(Client *c, double lx, double ly,
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Client *
 | 
			
		||||
xytoclient(double lx, double ly,
 | 
			
		||||
		struct wlr_surface **surface, double *sx, double *sy)
 | 
			
		||||
{
 | 
			
		||||
	/* This iterates over all of our surfaces and attempts to find one under the
 | 
			
		||||
	 * cursor. This relies on clients being ordered from top-to-bottom. */
 | 
			
		||||
	Client *c;
 | 
			
		||||
	wl_list_for_each(c, &clients, link) {
 | 
			
		||||
		if (xytosurface(c, lx, ly, surface, sx, sy)) {
 | 
			
		||||
			return c;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
main(int argc, char *argv[])
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user