static int epoll_fd; static int dpy_fd; static Monitor *lastselmon; int handlexevent(struct epoll_event *ev) { if (ev->events & EPOLLIN) { XEvent ev; while (running && XPending(dpy)) { XNextEvent(dpy, &ev); if (handler[ev.type]) { handler[ev.type](&ev); /* call handler */ ipc_send_events(mons, &lastselmon, selmon); } } } else if (ev-> events & EPOLLHUP) return -1; return 0; } void setlayoutsafe(const Arg *arg) { const Layout *ltptr = (Layout *)arg->v; if (ltptr == 0) setlayout(arg); for (int i = 0; i < LENGTH(layouts); i++) { if (ltptr == &layouts[i]) setlayout(arg); } } void setupepoll(void) { epoll_fd = epoll_create1(0); dpy_fd = ConnectionNumber(dpy); struct epoll_event dpy_event; // Initialize struct to 0 memset(&dpy_event, 0, sizeof(dpy_event)); DEBUG("Display socket is fd %d\n", dpy_fd); if (epoll_fd == -1) fputs("Failed to create epoll file descriptor", stderr); dpy_event.events = EPOLLIN; dpy_event.data.fd = dpy_fd; if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, dpy_fd, &dpy_event)) { fputs("Failed to add display file descriptor to epoll", stderr); close(epoll_fd); exit(1); } if (ipc_init(ipcsockpath, epoll_fd, ipccommands, LENGTH(ipccommands)) < 0) fputs("Failed to initialize IPC\n", stderr); } void setstatus(const Arg *arg) { Monitor *m; #if BAR_EXTRASTATUS_PATCH if (arg->v == NULL) { strcpy(stext, "dwm-"VERSION); estext[0] = '\0'; } else { strcpy(rawstext, arg->v); char *e = strchr(rawstext, statussep); if (e) { *e = '\0'; e++; #if BAR_STATUSCMD_PATCH strncpy(rawestext, e, sizeof(estext) - 1); copyvalidchars(estext, rawestext); #else strncpy(estext, e, sizeof(estext) - 1); #endif // BAR_STATUSCMD_PATCH } else { estext[0] = '\0'; } #if BAR_STATUSCMD_PATCH copyvalidchars(stext, rawstext); #else strncpy(stext, rawstext, sizeof(stext) - 1); #endif // BAR_STATUSCMD_PATCH } #elif BAR_STATUSCMD_PATCH if (!gettextprop(root, XA_WM_NAME, rawstext, sizeof(rawstext))) strcpy(stext, "dwm-"VERSION); else copyvalidchars(stext, rawstext); #else if (!gettextprop(root, XA_WM_NAME, stext, sizeof(stext))) strcpy(stext, "dwm-"VERSION); #endif // BAR_EXTRASTATUS_PATCH | BAR_STATUSCMD_PATCH for (m = mons; m; m = m->next) drawbar(m); }