- {"_NET_ACTIVE_WINDOW", None},
- {"_NET_MOVERESIZE_WINDOW", None},
- {"_NET_CLOSE_WINDOW", None},
- {"_NET_WM_WINDOW_TYPE", None},
- {"_NET_WM_WINDOW_TYPE_DOCK", None},
- {"_NET_WM_WINDOW_TYPE_TOOLBAR", None},
- {"_NET_WM_WINDOW_TYPE_UTILITY", None},
- {"_NET_WM_WINDOW_TYPE_SPLASH", None},
- {"_NET_WM_WINDOW_TYPE_DIALOG", None},
- {"_NET_WM_WINDOW_TYPE_NORMAL", None},
- {"_NET_WM_STATE", None},
- {"_NET_WM_STATE_MAXIMIZED_HORZ", None},
- {"_NET_WM_STATE_MAXIMIZED_VERT", None},
- {"_NET_WM_STATE_SKIP_TASKBAR", None},
- {"_NET_WM_STATE_SKIP_PAGER", None},
- {"_NET_WM_STATE_HIDDEN", None},
- {"_NET_WM_STATE_ABOVE", None},
- {"_SWM_WM_STATE_MANUAL", None},
- {"_NET_WM_STATE_FULLSCREEN", None},
- {"_NET_WM_ALLOWED_ACTIONS", None},
- {"_NET_WM_ACTION_MOVE", None},
- {"_NET_WM_ACTION_RESIZE", None},
- {"_NET_WM_ACTION_FULLSCREEN", None},
- {"_NET_WM_ACTION_CLOSE", None},
+ {"_NET_ACTIVE_WINDOW", XCB_ATOM_NONE},
+ {"_NET_CLOSE_WINDOW", XCB_ATOM_NONE},
+ {"_NET_MOVERESIZE_WINDOW", XCB_ATOM_NONE},
+ {"_NET_WM_ACTION_CLOSE", XCB_ATOM_NONE},
+ {"_NET_WM_ACTION_FULLSCREEN", XCB_ATOM_NONE},
+ {"_NET_WM_ACTION_MOVE", XCB_ATOM_NONE},
+ {"_NET_WM_ACTION_RESIZE", XCB_ATOM_NONE},
+ {"_NET_WM_ALLOWED_ACTIONS", XCB_ATOM_NONE},
+ {"_NET_WM_STATE", XCB_ATOM_NONE},
+ {"_NET_WM_STATE_ABOVE", XCB_ATOM_NONE},
+ {"_NET_WM_STATE_FULLSCREEN", XCB_ATOM_NONE},
+ {"_NET_WM_STATE_HIDDEN", XCB_ATOM_NONE},
+ {"_NET_WM_STATE_MAXIMIZED_HORZ", XCB_ATOM_NONE},
+ {"_NET_WM_STATE_MAXIMIZED_VERT", XCB_ATOM_NONE},
+ {"_NET_WM_STATE_SKIP_PAGER", XCB_ATOM_NONE},
+ {"_NET_WM_STATE_SKIP_TASKBAR", XCB_ATOM_NONE},
+ {"_NET_WM_WINDOW_TYPE", XCB_ATOM_NONE},
+ {"_NET_WM_WINDOW_TYPE_DIALOG", XCB_ATOM_NONE},
+ {"_NET_WM_WINDOW_TYPE_DOCK", XCB_ATOM_NONE},
+ {"_NET_WM_WINDOW_TYPE_NORMAL", XCB_ATOM_NONE},
+ {"_NET_WM_WINDOW_TYPE_SPLASH", XCB_ATOM_NONE},
+ {"_NET_WM_WINDOW_TYPE_TOOLBAR", XCB_ATOM_NONE},
+ {"_NET_WM_WINDOW_TYPE_UTILITY", XCB_ATOM_NONE},
+ {"_SWM_WM_STATE_MANUAL", XCB_ATOM_NONE},
+/* replaces the bar format character sequences (like in tmux(1)) */
+char *
+bar_replace_seq(char *fmt, char *fmtrep, struct swm_region *r, size_t *offrep,
+ size_t sz)
+{
+ char *ptr;
+ char tmp[SWM_BAR_MAX];
+ int limit, size;
+ size_t len;
+
+ /* reset strlcat(3) buffer */
+ *tmp = '\0';
+
+ /* get number, if any */
+ fmt++;
+ size = 0;
+ if (sscanf(fmt, "%d%n", &limit, &size) != 1)
+ limit = sizeof tmp - 1;
+ if (limit <= 0 || limit >= (int)sizeof tmp)
+ limit = sizeof tmp - 1;
+
+ /* there is nothing to replace (ie EOL) */
+ fmt += size;
+ if (*fmt == '\0')
+ return (fmt);
+
+ switch (*fmt) {
+ case '<':
+ bar_replace_pad(tmp, &limit, sizeof tmp);
+ break;
+ case 'A':
+ snprintf(tmp, sizeof tmp, "%s", bar_ext);
+ break;
+ case 'C':
+ bar_class_name(tmp, sizeof tmp, r);
+ break;
+ case 'D':
+ bar_workspace_name(tmp, sizeof tmp, r);
+ break;
+ case 'F':
+ bar_window_float(tmp, sizeof tmp, r);
+ break;
+ case 'I':
+ snprintf(tmp, sizeof tmp, "%d", r->ws->idx + 1);
+ break;
+ case 'N':
+ snprintf(tmp, sizeof tmp, "%d", r->s->idx + 1);
+ break;
+ case 'P':
+ bar_class_title_name(tmp, sizeof tmp, r);
+ break;
+ case 'S':
+ snprintf(tmp, sizeof tmp, "%s", r->ws->stacker);
+ break;
+ case 'T':
+ bar_title_name(tmp, sizeof tmp, r);
+ break;
+ case 'U':
+ bar_urgent(tmp, sizeof tmp);
+ break;
+ case 'V':
+ snprintf(tmp, sizeof tmp, "%s", bar_vertext);
+ break;
+ case 'W':
+ bar_window_name(tmp, sizeof tmp, r);
+ break;
+ default:
+ /* unknown character sequence; copy as-is */
+ snprintf(tmp, sizeof tmp, "+%c", *fmt);
+ break;
+ }
+
+ len = strlen(tmp);
+ ptr = tmp;
+ if ((int)len < limit)
+ limit = len;
+ while (limit-- > 0) {
+ if (*offrep >= sz - 1)
+ break;
+ fmtrep[(*offrep)++] = *ptr++;
+ }
+
+ fmt++;
+ return (fmt);
+}
+
+void
+bar_replace(char *fmt, char *fmtrep, struct swm_region *r, size_t sz)
+{
+ size_t off;
+
+ off = 0;
+ while (*fmt != '\0') {
+ if (*fmt != '+') {
+ /* skip ordinary characters */
+ if (off >= sz - 1)
+ break;
+ fmtrep[off++] = *fmt++;
+ continue;
+ }
+
+ /* character sequence found; replace it */
+ fmt = bar_replace_seq(fmt, fmtrep, r, &off, sz);
+ if (off >= sz - 1)
+ break;
+ }
+
+ fmtrep[off] = '\0';
+}
+
+void
+bar_fmt_expand(char *fmtexp, size_t sz)
+{
+ char *fmt = NULL;
+ size_t len;
+ struct tm tm;
+ time_t tmt;
+
+ /* start by grabbing the current time and date */
+ time(&tmt);
+ localtime_r(&tmt, &tm);
+
+ /* figure out what to expand */
+ if (bar_format != NULL)
+ fmt = bar_format;
+ else if (bar_format == NULL && clock_enabled)
+ fmt = clock_format;
+ /* if nothing to expand bail out */
+ if (fmt == NULL) {
+ *fmtexp = '\0';
+ return;
+ }
+
+ /* copy as-is, just in case the format shouldn't be expanded below */
+ strlcpy(fmtexp, fmt, sz);
+ /* finally pass the string through strftime(3) */
+#ifndef SWM_DENY_CLOCK_FORMAT
+ if ((len = strftime(fmtexp, sz, fmt, &tm)) == 0)
+ warnx("format too long");
+ fmtexp[len] = '\0';
+#endif
+}
+
+void
+bar_fmt_print(void)
+{
+ char fmtexp[SWM_BAR_MAX], fmtnew[SWM_BAR_MAX];
+ char fmtrep[SWM_BAR_MAX];
+ int i, num_screens;
+ struct swm_region *r;
+
+ /* expand the format by first passing it through strftime(3) */
+ bar_fmt_expand(fmtexp, sizeof fmtexp);
+
+ num_screens = xcb_setup_roots_length(xcb_get_setup(conn));
+ for (i = 0; i < num_screens; i++) {
+ TAILQ_FOREACH(r, &screens[i].rl, entry) {
+ if (r->bar == NULL)
+ continue;
+ bar_fmt(fmtexp, fmtnew, r, sizeof fmtnew);
+ bar_replace(fmtnew, fmtrep, r, sizeof fmtrep);
+ bar_print(r, fmtrep);
+ }
+ }
+}
+
+void
+bar_update(void)
+{
+ size_t len;
+ char *b;
+
+ if (bar_enabled == 0)
+ return;
+ if (bar_extra && bar_extra_running) {
+ /* ignore short reads; it'll correct itself */
+ while ((b = fgetln(stdin, &len)) != NULL)
+ if (b && b[len - 1] == '\n') {
+ b[len - 1] = '\0';
+ strlcpy((char *)bar_ext, b, sizeof bar_ext);
+ }
+ if (b == NULL && errno != EAGAIN) {
+ warn("bar_update: bar_extra failed");
+ bar_extra_stop();
+ }
+ } else
+ strlcpy((char *)bar_ext, "", sizeof bar_ext);
+
+ bar_fmt_print();
+ alarm(bar_delay);
+}
+
+void
- { "screen_next", cyclescr, {.id = SWM_ARG_ID_CYCLESC_UP} },
- { "screen_prev", cyclescr, {.id = SWM_ARG_ID_CYCLESC_DOWN} },
- { "mvws_1", send_to_ws, {.id = 0} },
- { "mvws_2", send_to_ws, {.id = 1} },
- { "mvws_3", send_to_ws, {.id = 2} },
- { "mvws_4", send_to_ws, {.id = 3} },
- { "mvws_5", send_to_ws, {.id = 4} },
- { "mvws_6", send_to_ws, {.id = 5} },
- { "mvws_7", send_to_ws, {.id = 6} },
- { "mvws_8", send_to_ws, {.id = 7} },
- { "mvws_9", send_to_ws, {.id = 8} },
- { "mvws_10", send_to_ws, {.id = 9} },
- { "mvws_11", send_to_ws, {.id = 10} },
- { "mvws_12", send_to_ws, {.id = 11} },
- { "mvws_13", send_to_ws, {.id = 12} },
- { "mvws_14", send_to_ws, {.id = 13} },
- { "mvws_15", send_to_ws, {.id = 14} },
- { "mvws_16", send_to_ws, {.id = 15} },
- { "mvws_17", send_to_ws, {.id = 16} },
- { "mvws_18", send_to_ws, {.id = 17} },
- { "mvws_19", send_to_ws, {.id = 18} },
- { "mvws_20", send_to_ws, {.id = 19} },
- { "mvws_21", send_to_ws, {.id = 20} },
- { "mvws_22", send_to_ws, {.id = 21} },
- { "bar_toggle", bar_toggle, {0} },
- { "wind_kill", wkill, {.id = SWM_ARG_ID_KILLWINDOW} },
- { "wind_del", wkill, {.id = SWM_ARG_ID_DELETEWINDOW} },
- { "screenshot_all", legacyfunc, {0} },
- { "screenshot_wind", legacyfunc, {0} },
- { "float_toggle", floating_toggle,{0} },
- { "version", version, {0} },
- { "spawn_lock", legacyfunc, {0} },
- { "spawn_initscr", legacyfunc, {0} },
- { "spawn_custom", dummykeyfunc, {0} },
- { "iconify", iconify, {0} },
- { "uniconify", uniconify, {0} },
- { "raise_toggle", raise_toggle, {0} },
- { "button2", pressbutton, {2} },
- { "width_shrink", resize_step, {.id = SWM_ARG_ID_WIDTHSHRINK} },
- { "width_grow", resize_step, {.id = SWM_ARG_ID_WIDTHGROW} },
- { "height_shrink", resize_step, {.id = SWM_ARG_ID_HEIGHTSHRINK} },
- { "height_grow", resize_step, {.id = SWM_ARG_ID_HEIGHTGROW} },
- { "move_left", move_step, {.id = SWM_ARG_ID_MOVELEFT} },
- { "move_right", move_step, {.id = SWM_ARG_ID_MOVERIGHT} },
- { "move_up", move_step, {.id = SWM_ARG_ID_MOVEUP} },
- { "move_down", move_step, {.id = SWM_ARG_ID_MOVEDOWN} },
- { "name_workspace", name_workspace, {0} },
- { "search_workspace", search_workspace, {0} },
- { "search_win", search_win, {0} },
- setkeybinding(MODKEY, XK_space, kf_cycle_layout,NULL);
- setkeybinding(MODKEY|ShiftMask, XK_backslash, kf_flip_layout, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_space, kf_stack_reset, NULL);
- setkeybinding(MODKEY, XK_h, kf_master_shrink,NULL);
- setkeybinding(MODKEY, XK_l, kf_master_grow, NULL);
- setkeybinding(MODKEY, XK_comma, kf_master_add, NULL);
- setkeybinding(MODKEY, XK_period, kf_master_del, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_comma, kf_stack_inc, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_period, kf_stack_dec, NULL);
- setkeybinding(MODKEY, XK_Return, kf_swap_main, NULL);
- setkeybinding(MODKEY, XK_j, kf_focus_next, NULL);
- setkeybinding(MODKEY, XK_k, kf_focus_prev, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_j, kf_swap_next, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_k, kf_swap_prev, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_Return, kf_spawn_term, NULL);
- setkeybinding(MODKEY, XK_p, kf_spawn_custom,"menu");
- setkeybinding(MODKEY|ShiftMask, XK_q, kf_quit, NULL);
- setkeybinding(MODKEY, XK_q, kf_restart, NULL);
- setkeybinding(MODKEY, XK_m, kf_focus_main, NULL);
- setkeybinding(MODKEY, XK_1, kf_ws_1, NULL);
- setkeybinding(MODKEY, XK_2, kf_ws_2, NULL);
- setkeybinding(MODKEY, XK_3, kf_ws_3, NULL);
- setkeybinding(MODKEY, XK_4, kf_ws_4, NULL);
- setkeybinding(MODKEY, XK_5, kf_ws_5, NULL);
- setkeybinding(MODKEY, XK_6, kf_ws_6, NULL);
- setkeybinding(MODKEY, XK_7, kf_ws_7, NULL);
- setkeybinding(MODKEY, XK_8, kf_ws_8, NULL);
- setkeybinding(MODKEY, XK_9, kf_ws_9, NULL);
- setkeybinding(MODKEY, XK_0, kf_ws_10, NULL);
- setkeybinding(MODKEY, XK_F1, kf_ws_11, NULL);
- setkeybinding(MODKEY, XK_F2, kf_ws_12, NULL);
- setkeybinding(MODKEY, XK_F3, kf_ws_13, NULL);
- setkeybinding(MODKEY, XK_F4, kf_ws_14, NULL);
- setkeybinding(MODKEY, XK_F5, kf_ws_15, NULL);
- setkeybinding(MODKEY, XK_F6, kf_ws_16, NULL);
- setkeybinding(MODKEY, XK_F7, kf_ws_17, NULL);
- setkeybinding(MODKEY, XK_F8, kf_ws_18, NULL);
- setkeybinding(MODKEY, XK_F9, kf_ws_19, NULL);
- setkeybinding(MODKEY, XK_F10, kf_ws_20, NULL);
- setkeybinding(MODKEY, XK_F11, kf_ws_21, NULL);
- setkeybinding(MODKEY, XK_F12, kf_ws_22, NULL);
- setkeybinding(MODKEY, XK_Right, kf_ws_next, NULL);
- setkeybinding(MODKEY, XK_Left, kf_ws_prev, NULL);
- setkeybinding(MODKEY, XK_Up, kf_ws_next_all, NULL);
- setkeybinding(MODKEY, XK_Down, kf_ws_prev_all, NULL);
- setkeybinding(MODKEY, XK_a, kf_ws_prior, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_Right, kf_screen_next, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_Left, kf_screen_prev, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_1, kf_mvws_1, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_2, kf_mvws_2, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_3, kf_mvws_3, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_4, kf_mvws_4, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_5, kf_mvws_5, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_6, kf_mvws_6, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_7, kf_mvws_7, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_8, kf_mvws_8, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_9, kf_mvws_9, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_0, kf_mvws_10, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_F1, kf_mvws_11, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_F2, kf_mvws_12, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_F3, kf_mvws_13, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_F4, kf_mvws_14, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_F5, kf_mvws_15, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_F6, kf_mvws_16, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_F7, kf_mvws_17, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_F8, kf_mvws_18, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_F9, kf_mvws_19, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_F10, kf_mvws_20, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_F11, kf_mvws_21, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_F12, kf_mvws_22, NULL);
- setkeybinding(MODKEY, XK_b, kf_bar_toggle, NULL);
- setkeybinding(MODKEY, XK_Tab, kf_focus_next, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_Tab, kf_focus_prev, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_x, kf_wind_kill, NULL);
- setkeybinding(MODKEY, XK_x, kf_wind_del, NULL);
- setkeybinding(MODKEY, XK_s, kf_spawn_custom,"screenshot_all");
- setkeybinding(MODKEY|ShiftMask, XK_s, kf_spawn_custom,"screenshot_wind");
- setkeybinding(MODKEY, XK_t, kf_float_toggle,NULL);
- setkeybinding(MODKEY|ShiftMask, XK_v, kf_version, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_Delete, kf_spawn_custom,"lock");
- setkeybinding(MODKEY|ShiftMask, XK_i, kf_spawn_custom,"initscr");
- setkeybinding(MODKEY, XK_w, kf_iconify, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_w, kf_uniconify, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_r, kf_raise_toggle,NULL);
- setkeybinding(MODKEY, XK_v, kf_button2, NULL);
- setkeybinding(MODKEY, XK_equal, kf_width_grow, NULL);
- setkeybinding(MODKEY, XK_minus, kf_width_shrink,NULL);
- setkeybinding(MODKEY|ShiftMask, XK_equal, kf_height_grow, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_minus, kf_height_shrink,NULL);
- setkeybinding(MODKEY, XK_bracketleft, kf_move_left, NULL);
- setkeybinding(MODKEY, XK_bracketright,kf_move_right, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_bracketleft, kf_move_up, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_bracketright,kf_move_down, NULL);
- setkeybinding(MODKEY|ShiftMask, XK_slash, kf_name_workspace,NULL);
- setkeybinding(MODKEY, XK_slash, kf_search_workspace,NULL);
- setkeybinding(MODKEY, XK_f, kf_search_win, NULL);
+ setkeybinding(MODKEY, XK_space, KF_CYCLE_LAYOUT,NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_backslash, KF_FLIP_LAYOUT, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_space, KF_STACK_RESET, NULL);
+ setkeybinding(MODKEY, XK_h, KF_MASTER_SHRINK, NULL);
+ setkeybinding(MODKEY, XK_l, KF_MASTER_GROW, NULL);
+ setkeybinding(MODKEY, XK_comma, KF_MASTER_ADD, NULL);
+ setkeybinding(MODKEY, XK_period, KF_MASTER_DEL, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_comma, KF_STACK_INC, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_period, KF_STACK_DEC, NULL);
+ setkeybinding(MODKEY, XK_Return, KF_SWAP_MAIN, NULL);
+ setkeybinding(MODKEY, XK_j, KF_FOCUS_NEXT, NULL);
+ setkeybinding(MODKEY, XK_k, KF_FOCUS_PREV, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_j, KF_SWAP_NEXT, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_k, KF_SWAP_PREV, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_Return, KF_SPAWN_CUSTOM,"term");
+ setkeybinding(MODKEY, XK_p, KF_SPAWN_CUSTOM,"menu");
+ setkeybinding(MODKEY|ShiftMask, XK_q, KF_QUIT, NULL);
+ setkeybinding(MODKEY, XK_q, KF_RESTART, NULL);
+ setkeybinding(MODKEY, XK_m, KF_FOCUS_MAIN, NULL);
+ setkeybinding(MODKEY, XK_1, KF_WS_1, NULL);
+ setkeybinding(MODKEY, XK_2, KF_WS_2, NULL);
+ setkeybinding(MODKEY, XK_3, KF_WS_3, NULL);
+ setkeybinding(MODKEY, XK_4, KF_WS_4, NULL);
+ setkeybinding(MODKEY, XK_5, KF_WS_5, NULL);
+ setkeybinding(MODKEY, XK_6, KF_WS_6, NULL);
+ setkeybinding(MODKEY, XK_7, KF_WS_7, NULL);
+ setkeybinding(MODKEY, XK_8, KF_WS_8, NULL);
+ setkeybinding(MODKEY, XK_9, KF_WS_9, NULL);
+ setkeybinding(MODKEY, XK_0, KF_WS_10, NULL);
+ setkeybinding(MODKEY, XK_F1, KF_WS_11, NULL);
+ setkeybinding(MODKEY, XK_F2, KF_WS_12, NULL);
+ setkeybinding(MODKEY, XK_F3, KF_WS_13, NULL);
+ setkeybinding(MODKEY, XK_F4, KF_WS_14, NULL);
+ setkeybinding(MODKEY, XK_F5, KF_WS_15, NULL);
+ setkeybinding(MODKEY, XK_F6, KF_WS_16, NULL);
+ setkeybinding(MODKEY, XK_F7, KF_WS_17, NULL);
+ setkeybinding(MODKEY, XK_F8, KF_WS_18, NULL);
+ setkeybinding(MODKEY, XK_F9, KF_WS_19, NULL);
+ setkeybinding(MODKEY, XK_F10, KF_WS_20, NULL);
+ setkeybinding(MODKEY, XK_F11, KF_WS_21, NULL);
+ setkeybinding(MODKEY, XK_F12, KF_WS_22, NULL);
+ setkeybinding(MODKEY, XK_Right, KF_WS_NEXT, NULL);
+ setkeybinding(MODKEY, XK_Left, KF_WS_PREV, NULL);
+ setkeybinding(MODKEY, XK_Up, KF_WS_NEXT_ALL, NULL);
+ setkeybinding(MODKEY, XK_Down, KF_WS_PREV_ALL, NULL);
+ setkeybinding(MODKEY, XK_a, KF_WS_PRIOR, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_Right, KF_SCREEN_NEXT, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_Left, KF_SCREEN_PREV, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_1, KF_MVWS_1, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_2, KF_MVWS_2, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_3, KF_MVWS_3, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_4, KF_MVWS_4, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_5, KF_MVWS_5, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_6, KF_MVWS_6, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_7, KF_MVWS_7, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_8, KF_MVWS_8, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_9, KF_MVWS_9, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_0, KF_MVWS_10, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_F1, KF_MVWS_11, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_F2, KF_MVWS_12, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_F3, KF_MVWS_13, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_F4, KF_MVWS_14, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_F5, KF_MVWS_15, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_F6, KF_MVWS_16, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_F7, KF_MVWS_17, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_F8, KF_MVWS_18, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_F9, KF_MVWS_19, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_F10, KF_MVWS_20, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_F11, KF_MVWS_21, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_F12, KF_MVWS_22, NULL);
+ setkeybinding(MODKEY, XK_b, KF_BAR_TOGGLE, NULL);
+ setkeybinding(MODKEY, XK_Tab, KF_FOCUS_NEXT, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_Tab, KF_FOCUS_PREV, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_x, KF_WIND_KILL, NULL);
+ setkeybinding(MODKEY, XK_x, KF_WIND_DEL, NULL);
+ setkeybinding(MODKEY, XK_s, KF_SPAWN_CUSTOM,"screenshot_all");
+ setkeybinding(MODKEY|ShiftMask, XK_s, KF_SPAWN_CUSTOM,"screenshot_wind");
+ setkeybinding(MODKEY, XK_t, KF_FLOAT_TOGGLE,NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_v, KF_VERSION, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_Delete, KF_SPAWN_CUSTOM,"lock");
+ setkeybinding(MODKEY|ShiftMask, XK_i, KF_SPAWN_CUSTOM,"initscr");
+ setkeybinding(MODKEY, XK_w, KF_ICONIFY, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_w, KF_UNICONIFY, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_r, KF_RAISE_TOGGLE,NULL);
+ setkeybinding(MODKEY, XK_v, KF_BUTTON2, NULL);
+ setkeybinding(MODKEY, XK_equal, KF_WIDTH_GROW, NULL);
+ setkeybinding(MODKEY, XK_minus, KF_WIDTH_SHRINK,NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_equal, KF_HEIGHT_GROW,NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_minus, KF_HEIGHT_SHRINK,NULL);
+ setkeybinding(MODKEY, XK_bracketleft, KF_MOVE_LEFT,NULL);
+ setkeybinding(MODKEY, XK_bracketright,KF_MOVE_RIGHT,NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_bracketleft, KF_MOVE_UP, NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_bracketright,KF_MOVE_DOWN,NULL);
+ setkeybinding(MODKEY|ShiftMask, XK_slash, KF_NAME_WORKSPACE,NULL);
+ setkeybinding(MODKEY, XK_slash, KF_SEARCH_WORKSPACE,NULL);
+ setkeybinding(MODKEY, XK_f, KF_SEARCH_WIN, NULL);
- XChangeProperty(display, root, netwmcheck, XA_WINDOW, 32,
- PropModeReplace, (unsigned char *)&win,1);
- XChangeProperty(display, win, netwmcheck, XA_WINDOW, 32,
- PropModeReplace, (unsigned char *)&win,1);
- XChangeProperty(display, win, netwmname, utf8_string, 8,
- PropModeReplace, (unsigned char*)"LG3D", strlen("LG3D"));
- }
+ win = xcb_generate_id(conn);
+ wa[0] = screens[i].c[SWM_S_COLOR_UNFOCUS].pixel;
+ wa[1] = screens[i].c[SWM_S_COLOR_UNFOCUS].pixel;
+ xcb_create_window(conn, XCB_COPY_FROM_PARENT, win, 0, 0, 0, 1,
+ 1, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, XCB_COPY_FROM_PARENT,
+ XCB_CW_BACK_PIXEL | XCB_CW_BORDER_PIXEL, wa);
+
+ xcb_change_property(conn, XCB_PROP_MODE_REPLACE, root,
+ netwmcheck, XCB_ATOM_WINDOW, 32, 1, &win);
+ xcb_change_property(conn, XCB_PROP_MODE_REPLACE, win,
+ netwmcheck, XCB_ATOM_WINDOW, 32, 1, &win);
+ xcb_change_property(conn, XCB_PROP_MODE_REPLACE, win,
+ a_netwmname, a_utf8_string, 8, strlen("LG3D"), "LG3D");
+ }
+}
+
+void
+event_error(xcb_generic_error_t *e)
+{
+ DNPRINTF(SWM_D_EVENT, "event_error: %s(%u) from %s(%u), sequence: %u, "
+ "resource_id: %u, minor_code: %u\n",
+ xcb_event_get_error_label(e->error_code), e->error_code,
+ xcb_event_get_request_label(e->major_code), e->major_code,
+ e->sequence, e->resource_id, e->minor_code);
+}
+
+void
+event_handle(xcb_generic_event_t *evt)
+{
+ uint8_t type = XCB_EVENT_RESPONSE_TYPE(evt);
+
+ DNPRINTF(SWM_D_EVENT, "XCB Event: %s(%d)\n",
+ xcb_event_get_label(XCB_EVENT_RESPONSE_TYPE(evt)),
+ XCB_EVENT_RESPONSE_TYPE(evt));
+
+ switch (type) {
+#define EVENT(type, callback) case type: callback((void *)evt); return
+ EVENT(0, event_error);
+ EVENT(XCB_BUTTON_PRESS, buttonpress);
+ /*EVENT(XCB_BUTTON_RELEASE, buttonpress);*/
+ /*EVENT(XCB_CIRCULATE_NOTIFY, );*/
+ /*EVENT(XCB_CIRCULATE_REQUEST, );*/
+ EVENT(XCB_CLIENT_MESSAGE, clientmessage);
+ /*EVENT(XCB_COLORMAP_NOTIFY, );*/
+ EVENT(XCB_CONFIGURE_NOTIFY, configurenotify);
+ EVENT(XCB_CONFIGURE_REQUEST, configurerequest);
+ /*EVENT(XCB_CREATE_NOTIFY, );*/
+ EVENT(XCB_DESTROY_NOTIFY, destroynotify);
+ EVENT(XCB_ENTER_NOTIFY, enternotify);
+ EVENT(XCB_EXPOSE, expose);
+ /*EVENT(XCB_FOCUS_IN, );*/
+ /*EVENT(XCB_FOCUS_OUT, );*/
+ /*EVENT(XCB_GRAPHICS_EXPOSURE, );*/
+ /*EVENT(XCB_GRAVITY_NOTIFY, );*/
+ EVENT(XCB_KEY_PRESS, keypress);
+ /*EVENT(XCB_KEY_RELEASE, keypress);*/
+ /*EVENT(XCB_KEYMAP_NOTIFY, );*/
+ /*EVENT(XCB_LEAVE_NOTIFY, );*/
+ EVENT(XCB_MAP_NOTIFY, mapnotify);
+ EVENT(XCB_MAP_REQUEST, maprequest);
+ EVENT(XCB_MAPPING_NOTIFY, mappingnotify);
+ /*EVENT(XCB_MOTION_NOTIFY, );*/
+ /*EVENT(XCB_NO_EXPOSURE, );*/
+ EVENT(XCB_PROPERTY_NOTIFY, propertynotify);
+ /*EVENT(XCB_REPARENT_NOTIFY, );*/
+ /*EVENT(XCB_RESIZE_REQUEST, );*/
+ /*EVENT(XCB_SELECTION_CLEAR, );*/
+ /*EVENT(XCB_SELECTION_NOTIFY, );*/
+ /*EVENT(XCB_SELECTION_REQUEST, );*/
+ EVENT(XCB_UNMAP_NOTIFY, unmapnotify);
+ /*EVENT(XCB_VISIBILITY_NOTIFY, visibilitynotify);*/
+#undef EVENT
+ }
+ if (type - xrandr_eventbase == XCB_RANDR_SCREEN_CHANGE_NOTIFY)
+ screenchange((void *)evt);