abc
parent
1d2b0a7b35
commit
7056fbe101
88
dwl.c
88
dwl.c
|
@ -94,8 +94,8 @@ struct render_data {
|
||||||
static void axisnotify(struct wl_listener *listener, void *data);
|
static void axisnotify(struct wl_listener *listener, void *data);
|
||||||
static void buttonpress(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 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 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 createpointer(struct wlr_input_device *device);
|
||||||
static void cursorframe(struct wl_listener *listener, void *data);
|
static void cursorframe(struct wl_listener *listener, void *data);
|
||||||
static void destroynotify(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 setcursor(struct wl_listener *listener, void *data);
|
||||||
static void spawn(const Arg *arg);
|
static void spawn(const Arg *arg);
|
||||||
static void unmapnotify(struct wl_listener *listener, void *data);
|
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,
|
static Client * xytoclient(double lx, double ly,
|
||||||
struct wlr_surface **surface, double *sx, double *sy);
|
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 */
|
/* variables */
|
||||||
static struct wl_display *wl_display;
|
static struct wl_display *wl_display;
|
||||||
|
@ -230,32 +230,6 @@ createkeyboard(struct wlr_input_device *device)
|
||||||
wl_list_insert(&keyboards, &keyboard->link);
|
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
|
void
|
||||||
createmon(struct wl_listener *listener, void *data)
|
createmon(struct wl_listener *listener, void *data)
|
||||||
{
|
{
|
||||||
|
@ -297,6 +271,32 @@ createmon(struct wl_listener *listener, void *data)
|
||||||
wlr_output_create_global(wlr_output);
|
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
|
void
|
||||||
createpointer(struct wlr_input_device *device)
|
createpointer(struct wlr_input_device *device)
|
||||||
{
|
{
|
||||||
|
@ -804,6 +804,21 @@ unmapnotify(struct wl_listener *listener, void *data)
|
||||||
c->mapped = false;
|
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
|
bool
|
||||||
xytosurface(Client *c, double lx, double ly,
|
xytosurface(Client *c, double lx, double ly,
|
||||||
struct wlr_surface **surface, double *sx, double *sy)
|
struct wlr_surface **surface, double *sx, double *sy)
|
||||||
|
@ -835,21 +850,6 @@ xytosurface(Client *c, double lx, double ly,
|
||||||
return false;
|
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
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue