From 0a8f62d8c7116be9e344f351df679599908fb29c Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Thu, 4 Jun 2020 19:10:07 -0700 Subject: refactored --- sys/cmd/dwm/func.c | 217 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 sys/cmd/dwm/func.c (limited to 'sys/cmd/dwm/func.c') diff --git a/sys/cmd/dwm/func.c b/sys/cmd/dwm/func.c new file mode 100644 index 0000000..5b0df24 --- /dev/null +++ b/sys/cmd/dwm/func.c @@ -0,0 +1,217 @@ +#include "dwm.h" + +void +chvt(const Arg *arg) +{ + struct wlr_session *s; + + s = wlr_backend_get_session(dwm.backend); + if (!s) + return; + + wlr_session_change_vt(s, arg->ui); +} + +void +incmaster(const Arg *arg) +{ + monitor->nmaster = MAX(monitor->nmaster + arg->i, 0); + arrange(monitor); +} + +void +focusmonitor(const Arg *arg) +{ + Monitor *m; + + m = getmonitor(arg->i); + + if (m == monitor) + return; + + monitor = m; + setfocus(lastfocus(), nil, 1); +} + +void +focusstack(const Arg *arg) +{ + Client *c, *sel; + + sel = getclient(); + if (!sel) + return; + + if (arg->i > 0) { + wl_list_for_each(c, &sel->link.tiles, link.tiles) { + if (&c->link.tiles == &dwm.tiles) + continue; + if (VISIBLEON(c, monitor)) + break; + } + } else { + wl_list_for_each_reverse(c, &sel->link.tiles, link.tiles) { + if (&c->link.tiles == &dwm.tiles) + continue; /* wrap past the sentinel node */ + if (VISIBLEON(c, monitor)) + break; /* found it */ + } + } + /* If only one client is visible on selmon, then c == sel */ + setfocus(c, nil, 1); +} + +void +moveresize(const Arg *arg) +{ + grab.c = clientat(mouse.cursor->x, mouse.cursor->y); + if (!grab.c) + return; + + /* Float the window and tell motionnotify to grab it */ + setfloating(grab.c, 1); + switch (mouse.mode = arg->ui) { + case MouseMove: + grab.x = mouse.cursor->x - grab.c->dim.x; + grab.y = mouse.cursor->y - grab.c->dim.y; + wlr_xcursor_manager_set_cursor_image(mouse.manager, "fleur", mouse.cursor); + break; + case MouseResize: + wlr_cursor_warp_closest(mouse.cursor, nil, + grab.c->dim.x + grab.c->dim.width, + grab.c->dim.y + grab.c->dim.height); + wlr_xcursor_manager_set_cursor_image(mouse.manager, "bottom_right_corner", mouse.cursor); + break; + } +} + +void +quit(const Arg *arg) +{ + wl_display_terminate(dwm.display); +} + +void +setlayout(const Arg *arg) +{ + if (!arg || !arg->v || arg->v != monitor->lt[monitor->sellt]) + monitor->sellt ^= 1; + if (arg && arg->v) + monitor->lt[monitor->sellt] = (Layout *)arg->v; + + arrange(monitor); +} + +void +setmfact(const Arg *arg) +{ + float f; + + if (!arg || !monitor->lt[monitor->sellt]->arrange) + return; + f = arg->f < 1.0 ? arg->f + monitor->mfact : arg->f - 1.0; + if (f < 0.1 || f > 0.9) + return; + monitor->mfact = f; + arrange(monitor); +} + +void +spawn(const Arg *arg) +{ + pid_t pid; + if ((pid=fork()) == 0) { + setsid(); + + printf("running %s\n", ((char**)arg->v)[0]); + execvp(((char **)arg->v)[0], (char **)arg->v); + + fprintf(stderr, "dwl: execvp %s", ((char **)arg->v)[0]); + perror(" failed"); + exit(EXIT_FAILURE); + } else if (pid < 0) + fatal("failed to fork"); +} + +void +tag(const Arg *arg) +{ + Client *c; + + c = getclient(); + if (c && arg->ui & TAGMASK) { + c->tags = arg->ui & TAGMASK; + setfocus(lastfocus(), nil, 1); + arrange(monitor); + } +} + +void +tagmonitor(const Arg *arg) +{ + Client *c; + + c = getclient(); + if (!c) + return; + setmonitor(c, getmonitor(arg->i), 0); +} + +void +togglefloating(const Arg *arg) +{ + Client *c; + + c = getclient(); + if (!c) + return; + + setfloating(c, !c->floating); +} + +void +toggletag(const Arg *arg) +{ + Client *c; + uint newtags; + + c = getclient(); + if (!c) + return; + newtags = c->tags ^ (arg->ui & TAGMASK); + if (newtags) { + c->tags = newtags; + setfocus(lastfocus(), nil, 1); + arrange(monitor); + } +} + +void +toggleview(const Arg *arg) +{ + uint newtagset; + + newtagset = monitor->tagset[monitor->seltags] ^ (arg->ui & TAGMASK); + + if (newtagset) { + monitor->tagset[monitor->seltags] = newtagset; + setfocus(lastfocus(), nil, 1); + arrange(monitor); + } +} + +void +view(const Arg *arg) +{ + if ((arg->ui & TAGMASK) == monitor->tagset[monitor->seltags]) + return; + + monitor->seltags ^= 1; /* toggle sel tagset */ + if (arg->ui & TAGMASK) + monitor->tagset[monitor->seltags] = arg->ui & TAGMASK; + setfocus(lastfocus(), nil, 1); + + arrange(monitor); +} + + -- cgit v1.2.1