aboutsummaryrefslogtreecommitdiff
path: root/sys/cmd/wm/xdg.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/cmd/wm/xdg.c')
-rw-r--r--sys/cmd/wm/xdg.c41
1 files changed, 33 insertions, 8 deletions
diff --git a/sys/cmd/wm/xdg.c b/sys/cmd/wm/xdg.c
index 3978cbf..0ff7c0a 100644
--- a/sys/cmd/wm/xdg.c
+++ b/sys/cmd/wm/xdg.c
@@ -5,7 +5,14 @@ void
map(struct wl_listener *l, void *data)
{
Client *client = wl_container_of(l, client, event.map);
- client->mapped = true;
+ client->ismapped = true;
+
+ wl_list_insert(&server.clients, &client->link);
+ wl_list_insert(&server.stack, &client->stack);
+
+ wlr_xdg_surface_get_geometry(client->xdg, &client->geo);
+ client->geo.width += 2 * client->border;
+ client->geo.height += 2 * client->border;
focus(client, client->xdg->surface);
}
@@ -15,7 +22,10 @@ void
unmap(struct wl_listener *l, void *data)
{
Client *client = wl_container_of(l, client, event.unmap);
- client->mapped = false;
+ client->ismapped = false;
+
+ wl_list_remove(&client->link);
+ wl_list_remove(&client->stack);
}
static
@@ -23,7 +33,6 @@ void
destroy(struct wl_listener *l, void *data)
{
Client *client = wl_container_of(l, client, event.destroy);
- wl_list_remove(&client->link);
free(client);
}
@@ -37,6 +46,13 @@ request_move(struct wl_listener *l, void *data)
static
void
+request_title(struct wl_listener *l, void *data)
+{
+ Client *client = wl_container_of(l, client, event.request_title);
+}
+
+static
+void
request_resize(struct wl_listener *l, void *data)
{
struct wlr_xdg_toplevel_resize_event *event = data;
@@ -44,6 +60,14 @@ request_resize(struct wl_listener *l, void *data)
setinteractive(client, CursorResize, event->edges);
}
+static
+void
+request_fullscreen(struct wl_listener *l, void *data)
+{
+ Client *client = wl_container_of(l, client, event.request_fullscreen);
+ client->isfullscreen = 1;
+}
+
void
make_xdg_surface(struct wl_listener *l, void *data)
{
@@ -54,8 +78,9 @@ make_xdg_surface(struct wl_listener *l, void *data)
if(xdg->role != WLR_XDG_SURFACE_ROLE_TOPLEVEL)
return;
- client = calloc(1, sizeof(*client));
+ client = xdg->surface->data = calloc(1, sizeof(*client));
client->xdg = xdg;
+ client->border = cfg·borderpixel;
client->event.map.notify = map;
wl_signal_add(&xdg->events.map, &client->event.map);
@@ -64,13 +89,13 @@ make_xdg_surface(struct wl_listener *l, void *data)
client->event.destroy.notify = destroy;
wl_signal_add(&xdg->events.destroy, &client->event.destroy);
- /* cotd */
toplevel = xdg->toplevel;
client->event.request_move.notify = request_move;
wl_signal_add(&toplevel->events.request_move, &client->event.request_move);
+ client->event.request_title.notify = request_title;
+ wl_signal_add(&toplevel->events.set_title, &client->event.request_title);
client->event.request_resize.notify = request_resize;
wl_signal_add(&toplevel->events.request_resize, &client->event.request_resize);
-
- /* Add it to the list of client. */
- wl_list_insert(&server.clients, &client->link);
+ client->event.request_fullscreen.notify = request_fullscreen;
+ wl_signal_add(&toplevel->events.request_fullscreen, &client->event.request_fullscreen);
}