Merge remote-tracking branch 'upstream/main' into wlroots-next
This commit is contained in:
commit
733754bb06
2 changed files with 46 additions and 42 deletions
|
@ -2,14 +2,13 @@
|
||||||
static const int sloppyfocus = 1; /* focus follows mouse */
|
static const int sloppyfocus = 1; /* focus follows mouse */
|
||||||
static const int bypass_surface_visibility = 0; /* 1 means idle inhibitors will disable idle tracking even if it's surface isn't visible */
|
static const int bypass_surface_visibility = 0; /* 1 means idle inhibitors will disable idle tracking even if it's surface isn't visible */
|
||||||
static const unsigned int borderpx = 1; /* border pixel of windows */
|
static const unsigned int borderpx = 1; /* border pixel of windows */
|
||||||
static const float rootcolor[] = {0.3, 0.3, 0.3, 1.0};
|
|
||||||
static const float bordercolor[] = {0.5, 0.5, 0.5, 1.0};
|
static const float bordercolor[] = {0.5, 0.5, 0.5, 1.0};
|
||||||
static const float focuscolor[] = {1.0, 0.0, 0.0, 1.0};
|
static const float focuscolor[] = {1.0, 0.0, 0.0, 1.0};
|
||||||
/* To conform the xdg-protocol, set the alpha to zero to restore the old behavior */
|
/* To conform the xdg-protocol, set the alpha to zero to restore the old behavior */
|
||||||
static const float fullscreen_bg[] = {0.1, 0.1, 0.1, 1.0};
|
static const float fullscreen_bg[] = {0.1, 0.1, 0.1, 1.0};
|
||||||
|
|
||||||
/* tagging */
|
/* tagging - tagcount must be no greater than 31 */
|
||||||
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
|
static const int tagcount = 9;
|
||||||
|
|
||||||
static const Rule rules[] = {
|
static const Rule rules[] = {
|
||||||
/* app_id title tags mask isfloating monitor */
|
/* app_id title tags mask isfloating monitor */
|
||||||
|
@ -31,7 +30,7 @@ static const Layout layouts[] = {
|
||||||
static const MonitorRule monrules[] = {
|
static const MonitorRule monrules[] = {
|
||||||
/* name mfact nmaster scale layout rotate/reflect x y */
|
/* name mfact nmaster scale layout rotate/reflect x y */
|
||||||
/* example of a HiDPI laptop monitor:
|
/* example of a HiDPI laptop monitor:
|
||||||
{ "eDP-1", 0.5, 1, 2, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL -1, -1 },
|
{ "eDP-1", 0.5, 1, 2, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 },
|
||||||
*/
|
*/
|
||||||
/* defaults */
|
/* defaults */
|
||||||
{ NULL, 0.55, 1, 1, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 },
|
{ NULL, 0.55, 1, 1, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 },
|
||||||
|
|
81
dwl.c
81
dwl.c
|
@ -70,7 +70,7 @@
|
||||||
#define VISIBLEON(C, M) ((M) && (C)->mon == (M) && ((C)->tags & (M)->tagset[(M)->seltags]))
|
#define VISIBLEON(C, M) ((M) && (C)->mon == (M) && ((C)->tags & (M)->tagset[(M)->seltags]))
|
||||||
#define LENGTH(X) (sizeof X / sizeof X[0])
|
#define LENGTH(X) (sizeof X / sizeof X[0])
|
||||||
#define END(A) ((A) + LENGTH(A))
|
#define END(A) ((A) + LENGTH(A))
|
||||||
#define TAGMASK ((1 << LENGTH(tags)) - 1)
|
#define TAGMASK ((1u << tagcount) - 1)
|
||||||
#define LISTEN(E, L, H) wl_signal_add((E), ((L)->notify = (H), (L)))
|
#define LISTEN(E, L, H) wl_signal_add((E), ((L)->notify = (H), (L)))
|
||||||
#define IDLE_NOTIFY_ACTIVITY wlr_idle_notify_activity(idle, seat), wlr_idle_notifier_v1_notify_activity(idle_notifier, seat)
|
#define IDLE_NOTIFY_ACTIVITY wlr_idle_notify_activity(idle, seat), wlr_idle_notifier_v1_notify_activity(idle_notifier, seat)
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ enum { NetWMWindowTypeDialog, NetWMWindowTypeSplash, NetWMWindowTypeToolbar,
|
||||||
|
|
||||||
typedef union {
|
typedef union {
|
||||||
int i;
|
int i;
|
||||||
unsigned int ui;
|
uint32_t ui;
|
||||||
float f;
|
float f;
|
||||||
const void *v;
|
const void *v;
|
||||||
} Arg;
|
} Arg;
|
||||||
|
@ -101,7 +101,7 @@ typedef struct Monitor Monitor;
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/* Must keep these three elements in this order */
|
/* Must keep these three elements in this order */
|
||||||
unsigned int type; /* XDGShell or X11* */
|
unsigned int type; /* XDGShell or X11* */
|
||||||
struct wlr_box geom; /* layout-relative, includes border */
|
struct wlr_box geom; /* layout-relative, includes border */
|
||||||
Monitor *mon;
|
Monitor *mon;
|
||||||
struct wlr_scene_tree *scene;
|
struct wlr_scene_tree *scene;
|
||||||
struct wlr_scene_rect *border[4]; /* top, bottom, left, right */
|
struct wlr_scene_rect *border[4]; /* top, bottom, left, right */
|
||||||
|
@ -119,14 +119,14 @@ typedef struct {
|
||||||
struct wl_listener destroy;
|
struct wl_listener destroy;
|
||||||
struct wl_listener set_title;
|
struct wl_listener set_title;
|
||||||
struct wl_listener fullscreen;
|
struct wl_listener fullscreen;
|
||||||
struct wlr_box prev; /* layout-relative, includes border */
|
struct wlr_box prev; /* layout-relative, includes border */
|
||||||
#ifdef XWAYLAND
|
#ifdef XWAYLAND
|
||||||
struct wl_listener activate;
|
struct wl_listener activate;
|
||||||
struct wl_listener configure;
|
struct wl_listener configure;
|
||||||
struct wl_listener set_hints;
|
struct wl_listener set_hints;
|
||||||
#endif
|
#endif
|
||||||
unsigned int bw;
|
unsigned int bw;
|
||||||
unsigned int tags;
|
uint32_t tags;
|
||||||
int isfloating, isurgent, isfullscreen;
|
int isfloating, isurgent, isfullscreen;
|
||||||
uint32_t resize; /* configure serial of a pending resize */
|
uint32_t resize; /* configure serial of a pending resize */
|
||||||
} Client;
|
} Client;
|
||||||
|
@ -185,15 +185,16 @@ struct Monitor {
|
||||||
struct wl_listener request_state;
|
struct wl_listener request_state;
|
||||||
struct wl_listener destroy_lock_surface;
|
struct wl_listener destroy_lock_surface;
|
||||||
struct wlr_session_lock_surface_v1 *lock_surface;
|
struct wlr_session_lock_surface_v1 *lock_surface;
|
||||||
struct wlr_box m; /* monitor area, layout-relative */
|
struct wlr_box m; /* monitor area, layout-relative */
|
||||||
struct wlr_box w; /* window area, layout-relative */
|
struct wlr_box w; /* window area, layout-relative */
|
||||||
struct wl_list layers[4]; /* LayerSurface::link */
|
struct wl_list layers[4]; /* LayerSurface::link */
|
||||||
const Layout *lt[2];
|
const Layout *lt[2];
|
||||||
unsigned int seltags;
|
unsigned int seltags;
|
||||||
unsigned int sellt;
|
unsigned int sellt;
|
||||||
unsigned int tagset[2];
|
uint32_t tagset[2];
|
||||||
double mfact;
|
double mfact;
|
||||||
int nmaster;
|
int nmaster;
|
||||||
|
char ltsymbol[16];
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -209,7 +210,7 @@ typedef struct {
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char *id;
|
const char *id;
|
||||||
const char *title;
|
const char *title;
|
||||||
unsigned int tags;
|
uint32_t tags;
|
||||||
int isfloating;
|
int isfloating;
|
||||||
int monitor;
|
int monitor;
|
||||||
} Rule;
|
} Rule;
|
||||||
|
@ -297,7 +298,7 @@ static void setfloating(Client *c, int floating);
|
||||||
static void setfullscreen(Client *c, int fullscreen);
|
static void setfullscreen(Client *c, int fullscreen);
|
||||||
static void setlayout(const Arg *arg);
|
static void setlayout(const Arg *arg);
|
||||||
static void setmfact(const Arg *arg);
|
static void setmfact(const Arg *arg);
|
||||||
static void setmon(Client *c, Monitor *m, unsigned int newtags);
|
static void setmon(Client *c, Monitor *m, uint32_t newtags);
|
||||||
static void setpsel(struct wl_listener *listener, void *data);
|
static void setpsel(struct wl_listener *listener, void *data);
|
||||||
static void setsel(struct wl_listener *listener, void *data);
|
static void setsel(struct wl_listener *listener, void *data);
|
||||||
static void setup(void);
|
static void setup(void);
|
||||||
|
@ -416,9 +417,6 @@ static Atom netatom[NetLast];
|
||||||
/* attempt to encapsulate suck into one file */
|
/* attempt to encapsulate suck into one file */
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
|
|
||||||
/* compile-time check if all tags fit into an unsigned int bit array. */
|
|
||||||
struct NumTags { char limitexceeded[LENGTH(tags) > 31 ? -1 : 1]; };
|
|
||||||
|
|
||||||
/* function implementations */
|
/* function implementations */
|
||||||
void
|
void
|
||||||
applybounds(Client *c, struct wlr_box *bbox)
|
applybounds(Client *c, struct wlr_box *bbox)
|
||||||
|
@ -429,8 +427,8 @@ applybounds(Client *c, struct wlr_box *bbox)
|
||||||
/* try to set size hints */
|
/* try to set size hints */
|
||||||
c->geom.width = MAX(min.width + (2 * (int)c->bw), c->geom.width);
|
c->geom.width = MAX(min.width + (2 * (int)c->bw), c->geom.width);
|
||||||
c->geom.height = MAX(min.height + (2 * (int)c->bw), c->geom.height);
|
c->geom.height = MAX(min.height + (2 * (int)c->bw), c->geom.height);
|
||||||
/* Some clients set them max size to INT_MAX, which does not violates
|
/* Some clients set their max size to INT_MAX, which does not violate the
|
||||||
* the protocol but its innecesary, they can set them max size to zero. */
|
* protocol but it's unnecesary, as they can set their max size to zero. */
|
||||||
if (max.width > 0 && !(2 * c->bw > INT_MAX - max.width)) /* Checks for overflow */
|
if (max.width > 0 && !(2 * c->bw > INT_MAX - max.width)) /* Checks for overflow */
|
||||||
c->geom.width = MIN(max.width + (2 * c->bw), c->geom.width);
|
c->geom.width = MIN(max.width + (2 * c->bw), c->geom.width);
|
||||||
if (max.height > 0 && !(2 * c->bw > INT_MAX - max.height)) /* Checks for overflow */
|
if (max.height > 0 && !(2 * c->bw > INT_MAX - max.height)) /* Checks for overflow */
|
||||||
|
@ -452,7 +450,7 @@ applyrules(Client *c)
|
||||||
{
|
{
|
||||||
/* rule matching */
|
/* rule matching */
|
||||||
const char *appid, *title;
|
const char *appid, *title;
|
||||||
unsigned int i, newtags = 0;
|
uint32_t i, newtags = 0;
|
||||||
const Rule *r;
|
const Rule *r;
|
||||||
Monitor *mon = selmon, *m;
|
Monitor *mon = selmon, *m;
|
||||||
|
|
||||||
|
@ -488,7 +486,9 @@ arrange(Monitor *m)
|
||||||
wlr_scene_node_set_enabled(&m->fullscreen_bg->node,
|
wlr_scene_node_set_enabled(&m->fullscreen_bg->node,
|
||||||
(c = focustop(m)) && c->isfullscreen);
|
(c = focustop(m)) && c->isfullscreen);
|
||||||
|
|
||||||
if (m && m->lt[m->sellt]->arrange)
|
strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, LENGTH(m->ltsymbol));
|
||||||
|
|
||||||
|
if (m->lt[m->sellt]->arrange)
|
||||||
m->lt[m->sellt]->arrange(m);
|
m->lt[m->sellt]->arrange(m);
|
||||||
motionnotify(0);
|
motionnotify(0);
|
||||||
checkidleinhibitor(NULL);
|
checkidleinhibitor(NULL);
|
||||||
|
@ -638,13 +638,13 @@ chvt(const Arg *arg)
|
||||||
void
|
void
|
||||||
checkidleinhibitor(struct wlr_surface *exclude)
|
checkidleinhibitor(struct wlr_surface *exclude)
|
||||||
{
|
{
|
||||||
int inhibited = 0;
|
int inhibited = 0, unused_lx, unused_ly;
|
||||||
struct wlr_idle_inhibitor_v1 *inhibitor;
|
struct wlr_idle_inhibitor_v1 *inhibitor;
|
||||||
wl_list_for_each(inhibitor, &idle_inhibit_mgr->inhibitors, link) {
|
wl_list_for_each(inhibitor, &idle_inhibit_mgr->inhibitors, link) {
|
||||||
struct wlr_surface *surface = wlr_surface_get_root_surface(inhibitor->surface);
|
struct wlr_surface *surface = wlr_surface_get_root_surface(inhibitor->surface);
|
||||||
struct wlr_scene_tree *tree = surface->data;
|
struct wlr_scene_tree *tree = surface->data;
|
||||||
if (exclude != surface && (bypass_surface_visibility || (!tree
|
if (exclude != surface && (bypass_surface_visibility || (!tree
|
||||||
|| tree->node.enabled))) {
|
|| wlr_scene_node_coords(&tree->node, &unused_lx, &unused_ly)))) {
|
||||||
inhibited = 1;
|
inhibited = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -978,6 +978,7 @@ createmon(struct wl_listener *listener, void *data)
|
||||||
wlr_output_layout_add_auto(output_layout, wlr_output);
|
wlr_output_layout_add_auto(output_layout, wlr_output);
|
||||||
else
|
else
|
||||||
wlr_output_layout_add(output_layout, wlr_output, m->m.x, m->m.y);
|
wlr_output_layout_add(output_layout, wlr_output, m->m.x, m->m.y);
|
||||||
|
strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, LENGTH(m->ltsymbol));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1028,7 +1029,7 @@ void
|
||||||
createpointer(struct wlr_pointer *pointer)
|
createpointer(struct wlr_pointer *pointer)
|
||||||
{
|
{
|
||||||
if (wlr_input_device_is_libinput(&pointer->base)) {
|
if (wlr_input_device_is_libinput(&pointer->base)) {
|
||||||
struct libinput_device *libinput_device = (struct libinput_device*)
|
struct libinput_device *libinput_device = (struct libinput_device*)
|
||||||
wlr_libinput_get_device_handle(&pointer->base);
|
wlr_libinput_get_device_handle(&pointer->base);
|
||||||
|
|
||||||
if (libinput_device_config_tap_get_finger_count(libinput_device)) {
|
if (libinput_device_config_tap_get_finger_count(libinput_device)) {
|
||||||
|
@ -1206,7 +1207,7 @@ void
|
||||||
focusclient(Client *c, int lift)
|
focusclient(Client *c, int lift)
|
||||||
{
|
{
|
||||||
struct wlr_surface *old = seat->keyboard_state.focused_surface;
|
struct wlr_surface *old = seat->keyboard_state.focused_surface;
|
||||||
int i;
|
int i, unused_lx, unused_ly;
|
||||||
|
|
||||||
if (locked)
|
if (locked)
|
||||||
return;
|
return;
|
||||||
|
@ -1241,7 +1242,7 @@ focusclient(Client *c, int lift)
|
||||||
Client *w = NULL;
|
Client *w = NULL;
|
||||||
LayerSurface *l = NULL;
|
LayerSurface *l = NULL;
|
||||||
int type = toplevel_from_wlr_surface(old, &w, &l);
|
int type = toplevel_from_wlr_surface(old, &w, &l);
|
||||||
if (type == LayerShell && l->scene->node.enabled
|
if (type == LayerShell && wlr_scene_node_coords(&l->scene->node, &unused_lx, &unused_ly)
|
||||||
&& l->layer_surface->current.layer >= ZWLR_LAYER_SHELL_V1_LAYER_TOP) {
|
&& l->layer_surface->current.layer >= ZWLR_LAYER_SHELL_V1_LAYER_TOP) {
|
||||||
return;
|
return;
|
||||||
} else if (w && w == exclusive_focus && client_wants_focus(w)) {
|
} else if (w && w == exclusive_focus && client_wants_focus(w)) {
|
||||||
|
@ -1294,16 +1295,16 @@ focusstack(const Arg *arg)
|
||||||
if (arg->i > 0) {
|
if (arg->i > 0) {
|
||||||
wl_list_for_each(c, &sel->link, link) {
|
wl_list_for_each(c, &sel->link, link) {
|
||||||
if (&c->link == &clients)
|
if (&c->link == &clients)
|
||||||
continue; /* wrap past the sentinel node */
|
continue; /* wrap past the sentinel node */
|
||||||
if (VISIBLEON(c, selmon))
|
if (VISIBLEON(c, selmon))
|
||||||
break; /* found it */
|
break; /* found it */
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
wl_list_for_each_reverse(c, &sel->link, link) {
|
wl_list_for_each_reverse(c, &sel->link, link) {
|
||||||
if (&c->link == &clients)
|
if (&c->link == &clients)
|
||||||
continue; /* wrap past the sentinel node */
|
continue; /* wrap past the sentinel node */
|
||||||
if (VISIBLEON(c, selmon))
|
if (VISIBLEON(c, selmon))
|
||||||
break; /* found it */
|
break; /* found it */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* If only one client is visible on selmon, then c == sel */
|
/* If only one client is visible on selmon, then c == sel */
|
||||||
|
@ -1598,12 +1599,16 @@ void
|
||||||
monocle(Monitor *m)
|
monocle(Monitor *m)
|
||||||
{
|
{
|
||||||
Client *c;
|
Client *c;
|
||||||
|
int n = 0;
|
||||||
|
|
||||||
wl_list_for_each(c, &clients, link) {
|
wl_list_for_each(c, &clients, link) {
|
||||||
if (!VISIBLEON(c, m) || c->isfloating || c->isfullscreen)
|
if (!VISIBLEON(c, m) || c->isfloating || c->isfullscreen)
|
||||||
continue;
|
continue;
|
||||||
resize(c, m->w, 0);
|
resize(c, m->w, 0);
|
||||||
|
n++;
|
||||||
}
|
}
|
||||||
|
if (n)
|
||||||
|
snprintf(m->ltsymbol, LENGTH(m->ltsymbol), "[%d]", n);
|
||||||
if ((c = focustop(m)))
|
if ((c = focustop(m)))
|
||||||
wlr_scene_node_raise_to_top(&c->scene->node);
|
wlr_scene_node_raise_to_top(&c->scene->node);
|
||||||
}
|
}
|
||||||
|
@ -1735,7 +1740,7 @@ outputmgrapplyortest(struct wlr_output_configuration_v1 *config, int test)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Called when a client such as wlr-randr requests a change in output
|
* Called when a client such as wlr-randr requests a change in output
|
||||||
* configuration. This is only one way that the layout can be changed,
|
* configuration. This is only one way that the layout can be changed,
|
||||||
* so any Monitor information should be updated by updatemons() after an
|
* so any Monitor information should be updated by updatemons() after an
|
||||||
* output_layout.change event, not here.
|
* output_layout.change event, not here.
|
||||||
*/
|
*/
|
||||||
|
@ -1826,7 +1831,7 @@ printstatus(void)
|
||||||
{
|
{
|
||||||
Monitor *m = NULL;
|
Monitor *m = NULL;
|
||||||
Client *c;
|
Client *c;
|
||||||
unsigned int occ, urg, sel;
|
uint32_t occ, urg, sel;
|
||||||
const char *appid, *title;
|
const char *appid, *title;
|
||||||
|
|
||||||
wl_list_for_each(m, &mons, link) {
|
wl_list_for_each(m, &mons, link) {
|
||||||
|
@ -1857,7 +1862,7 @@ printstatus(void)
|
||||||
printf("%s selmon %u\n", m->wlr_output->name, m == selmon);
|
printf("%s selmon %u\n", m->wlr_output->name, m == selmon);
|
||||||
printf("%s tags %u %u %u %u\n", m->wlr_output->name, occ, m->tagset[m->seltags],
|
printf("%s tags %u %u %u %u\n", m->wlr_output->name, occ, m->tagset[m->seltags],
|
||||||
sel, urg);
|
sel, urg);
|
||||||
printf("%s layout %s\n", m->wlr_output->name, m->lt[m->sellt]->symbol);
|
printf("%s layout %s\n", m->wlr_output->name, m->ltsymbol);
|
||||||
}
|
}
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
@ -1983,7 +1988,7 @@ run(char *startup_cmd)
|
||||||
selmon = xytomon(cursor->x, cursor->y);
|
selmon = xytomon(cursor->x, cursor->y);
|
||||||
|
|
||||||
/* TODO hack to get cursor to display in its initial location (100, 100)
|
/* 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
|
* initialized, as the image/coordinates are not transformed for the
|
||||||
* monitor when displayed here */
|
* monitor when displayed here */
|
||||||
wlr_cursor_warp_closest(cursor, NULL, cursor->x, cursor->y);
|
wlr_cursor_warp_closest(cursor, NULL, cursor->x, cursor->y);
|
||||||
|
@ -2058,7 +2063,7 @@ setlayout(const Arg *arg)
|
||||||
selmon->sellt ^= 1;
|
selmon->sellt ^= 1;
|
||||||
if (arg && arg->v)
|
if (arg && arg->v)
|
||||||
selmon->lt[selmon->sellt] = (Layout *)arg->v;
|
selmon->lt[selmon->sellt] = (Layout *)arg->v;
|
||||||
/* TODO change layout symbol? */
|
strncpy(selmon->ltsymbol, selmon->lt[selmon->sellt]->symbol, LENGTH(selmon->ltsymbol));
|
||||||
arrange(selmon);
|
arrange(selmon);
|
||||||
printstatus();
|
printstatus();
|
||||||
}
|
}
|
||||||
|
@ -2079,7 +2084,7 @@ setmfact(const Arg *arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
setmon(Client *c, Monitor *m, unsigned int newtags)
|
setmon(Client *c, Monitor *m, uint32_t newtags)
|
||||||
{
|
{
|
||||||
Monitor *oldmon = c->mon;
|
Monitor *oldmon = c->mon;
|
||||||
|
|
||||||
|
@ -2431,7 +2436,7 @@ togglefullscreen(const Arg *arg)
|
||||||
void
|
void
|
||||||
toggletag(const Arg *arg)
|
toggletag(const Arg *arg)
|
||||||
{
|
{
|
||||||
unsigned int newtags;
|
uint32_t newtags;
|
||||||
Client *sel = focustop(selmon);
|
Client *sel = focustop(selmon);
|
||||||
if (!sel)
|
if (!sel)
|
||||||
return;
|
return;
|
||||||
|
@ -2447,7 +2452,7 @@ toggletag(const Arg *arg)
|
||||||
void
|
void
|
||||||
toggleview(const Arg *arg)
|
toggleview(const Arg *arg)
|
||||||
{
|
{
|
||||||
unsigned int newtagset = selmon ? selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK) : 0;
|
uint32_t newtagset = selmon ? selmon->tagset[selmon->seltags] ^ (arg->ui & TAGMASK) : 0;
|
||||||
|
|
||||||
if (newtagset) {
|
if (newtagset) {
|
||||||
selmon->tagset[selmon->seltags] = newtagset;
|
selmon->tagset[selmon->seltags] = newtagset;
|
||||||
|
@ -2514,7 +2519,7 @@ updatemons(struct wl_listener *listener, void *data)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Called whenever the output layout changes: adding or removing a
|
* Called whenever the output layout changes: adding or removing a
|
||||||
* monitor, changing an output's mode or position, etc. This is where
|
* monitor, changing an output's mode or position, etc. This is where
|
||||||
* the change officially happens and we update geometry, window
|
* the change officially happens and we update geometry, window
|
||||||
* positions, focus, and the stored configuration in wlroots'
|
* positions, focus, and the stored configuration in wlroots'
|
||||||
* output-manager implementation.
|
* output-manager implementation.
|
||||||
|
@ -2782,8 +2787,8 @@ sigchld(int unused)
|
||||||
{
|
{
|
||||||
siginfo_t in;
|
siginfo_t in;
|
||||||
/* We should be able to remove this function in favor of a simple
|
/* We should be able to remove this function in favor of a simple
|
||||||
* struct sigaction sa = {.sa_handler = SIG_IGN};
|
* struct sigaction sa = {.sa_handler = SIG_IGN};
|
||||||
* sigaction(SIGCHLD, &sa, NULL);
|
* sigaction(SIGCHLD, &sa, NULL);
|
||||||
* but the Xwayland implementation in wlroots currently prevents us from
|
* but the Xwayland implementation in wlroots currently prevents us from
|
||||||
* setting our own disposition for SIGCHLD.
|
* setting our own disposition for SIGCHLD.
|
||||||
*/
|
*/
|
||||||
|
@ -2806,7 +2811,7 @@ xwaylandready(struct wl_listener *listener, void *data)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Collect atoms we are interested in. If getatom returns 0, we will
|
/* Collect atoms we are interested in. If getatom returns 0, we will
|
||||||
* not detect that window type. */
|
* not detect that window type. */
|
||||||
netatom[NetWMWindowTypeDialog] = getatom(xc, "_NET_WM_WINDOW_TYPE_DIALOG");
|
netatom[NetWMWindowTypeDialog] = getatom(xc, "_NET_WM_WINDOW_TYPE_DIALOG");
|
||||||
netatom[NetWMWindowTypeSplash] = getatom(xc, "_NET_WM_WINDOW_TYPE_SPLASH");
|
netatom[NetWMWindowTypeSplash] = getatom(xc, "_NET_WM_WINDOW_TYPE_SPLASH");
|
||||||
|
|
Loading…
Reference in a new issue