aboutsummaryrefslogtreecommitdiff
path: root/dwl.c
diff options
context:
space:
mode:
Diffstat (limited to 'dwl.c')
-rw-r--r--dwl.c61
1 files changed, 34 insertions, 27 deletions
diff --git a/dwl.c b/dwl.c
index 749a0a4..69520df 100644
--- a/dwl.c
+++ b/dwl.c
@@ -499,7 +499,6 @@ applyrules(Client *c)
const Rule *r;
Monitor *mon = selmon, *m;
- c->isfloating = client_is_float_type(c);
appid = client_get_appid(c);
title = client_get_title(c);
@@ -519,6 +518,8 @@ applyrules(Client *c)
c->geom.x = (mon->w.width - c->geom.width) / 2 + mon->m.x;
c->geom.y = (mon->w.height - c->geom.height) / 2 + mon->m.y;
}
+
+ c->isfloating |= client_is_float_type(c);
setmon(c, mon, newtags);
}
@@ -571,6 +572,9 @@ arrangelayer(Monitor *m, struct wl_list *list, struct wlr_box *usable_area, int
wl_list_for_each(l, list, link) {
struct wlr_layer_surface_v1 *layer_surface = l->layer_surface;
+ if (!layer_surface->initialized)
+ continue;
+
if (exclusive != (layer_surface->current.exclusive_zone > 0))
continue;
@@ -647,8 +651,8 @@ axisnotify(struct wl_listener *listener, void *data)
* for example when you move the scroll wheel. */
struct wlr_pointer_axis_event *event = data;
wlr_idle_notifier_v1_notify_activity(idle_notifier, seat);
- /* TODO: allow usage of scroll whell for mousebindings, it can be implemented
- * checking the event's orientation and the delta of the event */
+ /* TODO: allow usage of scroll wheel for mousebindings, it can be implemented
+ * by checking the event's orientation and the delta of the event */
/* Notify the client with pointer focus of the axis event. */
wlr_seat_pointer_notify_axis(seat,
event->time_msec, event->orientation, event->delta,
@@ -760,8 +764,8 @@ cleanup(void)
destroykeyboardgroup(&kb_group->destroy, NULL);
- /* If it's not destroyed manually it will cause a use-after-free of wlr_seat.
- * Destroy it until it's fixed in the wlroots side */
+ /* If it's not destroyed manually, it will cause a use-after-free of wlr_seat.
+ * Destroy it until it's fixed on the wlroots side */
wlr_backend_destroy(backend);
wl_display_destroy(dpy);
@@ -787,6 +791,8 @@ cleanupmon(struct wl_listener *listener, void *data)
wl_list_remove(&m->frame.link);
wl_list_remove(&m->link);
wl_list_remove(&m->request_state.link);
+ if (m->lock_surface)
+ destroylocksurface(&m->destroy_lock_surface, NULL);
m->wlr_output->data = NULL;
wlr_output_layout_remove(output_layout, m->wlr_output);
wlr_scene_output_destroy(m->scene_output);
@@ -907,7 +913,7 @@ commitnotify(struct wl_listener *listener, void *data)
/*
* Get the monitor this client will be rendered on
* Note that if the user set a rule in which the client is placed on
- * a different monitor based on its title this will likely select
+ * a different monitor based on its title, this will likely select
* a wrong monitor.
*/
applyrules(c);
@@ -1274,7 +1280,7 @@ cursorconstrain(struct wlr_pointer_constraint_v1 *constraint)
void
cursorframe(struct wl_listener *listener, void *data)
{
- /* This event is forwarded by the cursor when a pointer emits an frame
+ /* This event is forwarded by the cursor when a pointer emits a frame
* event. Frame events are sent after regular pointer events to group
* multiple events together. For instance, two axis events may happen at the
* same time, in which case a frame event won't be sent in between. */
@@ -1570,7 +1576,7 @@ focusstack(const Arg *arg)
focusclient(c, 1);
}
-/* We probably should change the name of this, it sounds like
+/* We probably should change the name of this: it sounds like it
* will focus the topmost client of this mon, when actually will
* only return that client */
Client *
@@ -1847,8 +1853,8 @@ mapnotify(struct wl_listener *listener, void *data)
/* Set initial monitor, tags, floating status, and focus:
* we always consider floating, clients that have parent and thus
- * we set the same tags and monitor than its parent, if not
- * try to apply rules for them */
+ * we set the same tags and monitor as its parent.
+ * If there is no parent, apply rules */
if ((p = client_get_parent(c))) {
c->isfloating = 1;
if (p->mon) {
@@ -1912,8 +1918,7 @@ motionabsolute(struct wl_listener *listener, void *data)
* motion event, from 0..1 on each axis. This happens, for example, when
* wlroots is running under a Wayland window rather than KMS+DRM, and you
* move the mouse over the window. You could enter the window from any edge,
- * so we have to warp the mouse there. There is also some hardware which
- * emits these events. */
+ * so we have to warp the mouse there. Also, some hardware emits these events. */
struct wlr_pointer_motion_absolute_event *event = data;
double lx, ly, dx, dy;
@@ -2035,7 +2040,7 @@ moveresize(const Arg *arg)
case CurMove:
grabcx = (int)round(cursor->x) - grabc->geom.x;
grabcy = (int)round(cursor->y) - grabc->geom.y;
- wlr_cursor_set_xcursor(cursor, cursor_mgr, "fleur");
+ wlr_cursor_set_xcursor(cursor, cursor_mgr, "all-scroll");
break;
case CurResize:
/* Doesn't work for X11 output - the next absolute motion event
@@ -2098,9 +2103,9 @@ apply_or_test:
ok &= test ? wlr_output_test_state(wlr_output, &state)
: wlr_output_commit_state(wlr_output, &state);
- /* Don't move monitors if position wouldn't change, this to avoid
- * wlroots marking the output as manually configured.
- * wlr_output_layout_add does not like disabled outputs */
+ /* Don't move monitors if position wouldn't change. This avoids
+ * wlroots marking the output as manually configured.
+ * wlr_output_layout_add does not like disabled outputs */
if (!test && wlr_output->enabled && (m->m.x != config_head->state.x || m->m.y != config_head->state.y))
wlr_output_layout_add(output_layout, wlr_output,
config_head->state.x, config_head->state.y);
@@ -2338,8 +2343,10 @@ run(char *startup_cmd)
close(piperw[0]);
}
- /* Mark stdout as non-blocking to avoid people who does not close stdin
- * nor consumes it in their startup script getting dwl frozen */
+ /* Mark stdout as non-blocking to avoid the startup script
+ * causing dwl to freeze when a user neither closes stdin
+ * nor consumes standard input in his startup script */
+
if (fd_set_nonblock(STDOUT_FILENO) < 0)
close(STDOUT_FILENO);
@@ -2350,7 +2357,7 @@ run(char *startup_cmd)
selmon = xytomon(cursor->x, cursor->y);
/* TODO hack to get cursor to display in its initial location (100, 100)
- * instead of (0, 0) and then jumping. still may not be fully
+ * instead of (0, 0) and then jumping. Still may not be fully
* initialized, as the image/coordinates are not transformed for the
* monitor when displayed here */
wlr_cursor_warp_closest(cursor, NULL, cursor->x, cursor->y);
@@ -2373,7 +2380,7 @@ setcursor(struct wl_listener *listener, void *data)
* event, which will result in the client requesting set the cursor surface */
if (cursor_mode != CurNormal && cursor_mode != CurPressed)
return;
- /* This can be sent by any client, so we check to make sure this one is
+ /* This can be sent by any client, so we check to make sure this one
* actually has pointer focus first. If so, we can tell the cursor to
* use the provided surface as the cursor image. It will set the
* hardware cursor on the output that it's currently on and continue to
@@ -2389,7 +2396,7 @@ setcursorshape(struct wl_listener *listener, void *data)
struct wlr_cursor_shape_manager_v1_request_set_shape_event *event = data;
if (cursor_mode != CurNormal && cursor_mode != CurPressed)
return;
- /* This can be sent by any client, so we check to make sure this one is
+ /* This can be sent by any client, so we check to make sure this one
* actually has pointer focus first. If so, we can tell the cursor to
* use the provided cursor shape. */
if (event->seat_client == seat->pointer_state.focused_client)
@@ -2492,7 +2499,7 @@ setpsel(struct wl_listener *listener, void *data)
{
/* This event is raised by the seat when a client wants to set the selection,
* usually when the user copies something. wlroots allows compositors to
- * ignore such requests if they so choose, but in dwl we always honor
+ * ignore such requests if they so choose, but in dwl we always honor them
*/
struct wlr_seat_request_set_primary_selection_event *event = data;
wlr_seat_set_primary_selection(seat, event->source, event->serial);
@@ -2503,7 +2510,7 @@ setsel(struct wl_listener *listener, void *data)
{
/* This event is raised by the seat when a client wants to set the selection,
* usually when the user copies something. wlroots allows compositors to
- * ignore such requests if they so choose, but in dwl we always honor
+ * ignore such requests if they so choose, but in dwl we always honor them
*/
struct wlr_seat_request_set_selection_event *event = data;
wlr_seat_set_selection(seat, event->source, event->serial);
@@ -2550,9 +2557,9 @@ setup(void)
wl_signal_add(&drw->events.lost, &gpu_reset);
/* Create shm, drm and linux_dmabuf interfaces by ourselves.
- * The simplest way is call:
+ * The simplest way is to call:
* wlr_renderer_init_wl_display(drw);
- * but we need to create manually the linux_dmabuf interface to integrate it
+ * but we need to create the linux_dmabuf interface manually to integrate it
* with wlr_scene. */
wlr_renderer_init_wl_shm(drw, dpy);
@@ -2601,7 +2608,7 @@ setup(void)
power_mgr = wlr_output_power_manager_v1_create(dpy);
wl_signal_add(&power_mgr->events.set_mode, &output_power_mgr_set_mode);
- /* Creates an output layout, which a wlroots utility for working with an
+ /* Creates an output layout, which is a wlroots utility for working with an
* arrangement of screens in a physical layout. */
output_layout = wlr_output_layout_create(dpy);
wl_signal_add(&output_layout->events.change, &layout_change);
@@ -3279,7 +3286,7 @@ sethints(struct wl_listener *listener, void *data)
{
Client *c = wl_container_of(listener, c, set_hints);
struct wlr_surface *surface = client_surface(c);
- if (c == focustop(selmon))
+ if (c == focustop(selmon) || !c->surface.xwayland->hints)
return;
c->isurgent = xcb_icccm_wm_hints_get_urgency(c->surface.xwayland->hints);