diff options
| author | Leonardo Hernández Hernández <leohdz172@protonmail.com> | 2022-12-18 11:39:50 -0600 | 
|---|---|---|
| committer | Leonardo Hernández Hernández <leohdz172@protonmail.com> | 2022-12-20 21:27:14 -0600 | 
| commit | dd9d8d543cc511df44035c0e3fe32a5f17a31c29 (patch) | |
| tree | 5f46b37d7e0abff62bda9a73fa6cdb9dc702f42b /dwl.c | |
| parent | 686958a4cc599fe212d8e1111999cd59a54e9ed6 (diff) | |
remove selclient()
selclient() does not work well when dealing newly mapped
clients (specifically those mapped on invisible tags).
This fixes various bugs related to things not working because selclient() would
return NULL.
References: 94c8bd604870365bc201524b63158623e6f32a8f
Diffstat (limited to 'dwl.c')
| -rw-r--r-- | dwl.c | 34 | 
1 files changed, 12 insertions, 22 deletions
| @@ -280,7 +280,6 @@ static void rendermon(struct wl_listener *listener, void *data);  static void requeststartdrag(struct wl_listener *listener, void *data);  static void resize(Client *c, struct wlr_box geo, int interact);  static void run(char *startup_cmd); -static Client *selclient(void);  static void setcursor(struct wl_listener *listener, void *data);  static void setfloating(Client *c, int floating);  static void setfullscreen(Client *c, int fullscreen); @@ -1055,7 +1054,7 @@ destroydragicon(struct wl_listener *listener, void *data)  	struct wlr_drag_icon *icon = data;  	wlr_scene_node_destroy(icon->data);  	/* Focus enter isn't sent during drag, so refocus the focused node. */ -	focusclient(selclient(), 1); +	focusclient(focustop(selmon), 1);  	motionnotify(0);  } @@ -1417,7 +1416,7 @@ keypressmod(struct wl_listener *listener, void *data)  void  killclient(const Arg *arg)  { -	Client *sel = selclient(); +	Client *sel = focustop(selmon);  	if (sel)  		client_send_close(sel);  } @@ -1940,15 +1939,6 @@ run(char *startup_cmd)  	wl_display_run(dpy);  } -Client * -selclient(void) -{ -	Client *c = wl_container_of(fstack.next, c, flink); -	if (wl_list_empty(&fstack) || !VISIBLEON(c, selmon)) -		return NULL; -	return c; -} -  void  setcursor(struct wl_listener *listener, void *data)  { @@ -2292,7 +2282,7 @@ startdrag(struct wl_listener *listener, void *data)  void  tag(const Arg *arg)  { -	Client *sel = selclient(); +	Client *sel = focustop(selmon);  	if (sel && arg->ui & TAGMASK) {  		sel->tags = arg->ui & TAGMASK;  		focusclient(focustop(selmon), 1); @@ -2304,7 +2294,7 @@ tag(const Arg *arg)  void  tagmon(const Arg *arg)  { -	Client *sel = selclient(); +	Client *sel = focustop(selmon);  	if (sel)  		setmon(sel, dirtomon(arg->i), 0);  } @@ -2345,7 +2335,7 @@ tile(Monitor *m)  void  togglefloating(const Arg *arg)  { -	Client *sel = selclient(); +	Client *sel = focustop(selmon);  	/* return if fullscreen */  	if (sel && !sel->isfullscreen)  		setfloating(sel, !sel->isfloating); @@ -2354,7 +2344,7 @@ togglefloating(const Arg *arg)  void  togglefullscreen(const Arg *arg)  { -	Client *sel = selclient(); +	Client *sel = focustop(selmon);  	if (sel)  		setfullscreen(sel, !sel->isfullscreen);  } @@ -2363,7 +2353,7 @@ void  toggletag(const Arg *arg)  {  	unsigned int newtags; -	Client *sel = selclient(); +	Client *sel = focustop(selmon);  	if (!sel)  		return;  	newtags = sel->tags ^ (arg->ui & TAGMASK); @@ -2409,7 +2399,7 @@ unmaplayersurfacenotify(struct wl_listener *listener, void *data)  		arrangelayers(layersurface->mon);  	if (layersurface->layer_surface->surface ==  			seat->keyboard_state.focused_surface) -		focusclient(selclient(), 1); +		focusclient(focustop(selmon), 1);  	motionnotify(0);  } @@ -2430,7 +2420,7 @@ unmapnotify(struct wl_listener *listener, void *data)  		if (c == exclusive_focus)  			exclusive_focus = NULL;  		if (client_surface(c) == seat->keyboard_state.focused_surface) -			focusclient(selclient(), 1); +			focusclient(focustop(selmon), 1);  	} else {  		wl_list_remove(&c->link);  		setmon(c, NULL, 0); @@ -2535,7 +2525,7 @@ urgent(struct wl_listener *listener, void *data)  	struct wlr_xdg_activation_v1_request_activate_event *event = data;  	Client *c = NULL;  	int type = toplevel_from_wlr_surface(event->surface, &c, NULL); -	if (type >= 0 && type != LayerShell && c != selclient()) { +	if (type >= 0 && type != LayerShell && c != focustop(selmon)) {  		c->isurgent = 1;  		printstatus();  	} @@ -2605,7 +2595,7 @@ xytonode(double x, double y, struct wlr_surface **psurface,  void  zoom(const Arg *arg)  { -	Client *c, *sel = selclient(); +	Client *c, *sel = focustop(selmon);  	if (!sel || !selmon || !selmon->lt[selmon->sellt]->arrange || sel->isfloating)  		return; @@ -2699,7 +2689,7 @@ void  sethints(struct wl_listener *listener, void *data)  {  	Client *c = wl_container_of(listener, c, set_hints); -	if (c != selclient()) { +	if (c != focustop(selmon)) {  		c->isurgent = xcb_icccm_wm_hints_get_urgency(c->surface.xwayland->hints);  		printstatus();  	} | 
