int bar_extra_running = 0;
int bar_verbose = 1;
int bar_height = 0;
+int stack_enabled = 1;
int clock_enabled = 1;
int title_name_enabled = 0;
int title_class_enabled = 0;
u_int32_t flags;
#define SWM_L_FOCUSPREV (1<<0)
#define SWM_L_MAPONFOCUS (1<<1)
+ char *name;
} layouts[] = {
/* stack, configure */
- { vertical_stack, vertical_config, 0},
- { horizontal_stack, horizontal_config, 0},
+ { vertical_stack, vertical_config, 0, "[|]" },
+ { horizontal_stack, horizontal_config, 0, "[-]" },
{ max_stack, NULL,
- SWM_L_FOCUSPREV | SWM_L_MAPONFOCUS},
+ SWM_L_FOCUSPREV | SWM_L_MAPONFOCUS, "[ ]"},
{ NULL, NULL, 0},
};
char s[SWM_BAR_MAX];
char loc[SWM_BAR_MAX];
char *b;
+ char *stack = "";
if (bar_enabled == 0)
return;
if (r && r->ws)
bar_class_name(s, sizeof s, r->ws->focus);
- snprintf(loc, sizeof loc, "%d:%d %s %s %s",
- x++, r->ws->idx + 1, s, bar_ext, bar_vertext);
+ if (stack_enabled)
+ stack = r->ws->cur_layout->name;
+
+ snprintf(loc, sizeof loc, "%d:%d %s %s %s %s",
+ x++, r->ws->idx + 1, stack, s, bar_ext,
+ bar_vertext);
bar_print(r, loc);
}
}
win->g.h = wc.height = gg.h;
mask = CWX | CWY | CWWidth | CWHeight | CWBorderWidth;
XConfigureWindow(display, win->id, mask, &wc);
+
+ /* unmap only if we don't have multi screen */
if (win != ws->focus)
- unmap_window(win);
+ if (!(ScreenCount(display) > 1 || outputs > 1))
+ unmap_window(win);
}
}
/* conf file stuff */
#define SWM_CONF_FILE "scrotwm.conf"
-enum { SWM_S_BAR_DELAY, SWM_S_BAR_ENABLED, SWM_S_CLOCK_ENABLED,
- SWM_S_CYCLE_EMPTY, SWM_S_CYCLE_VISIBLE, SWM_S_SS_ENABLED,
- SWM_S_TERM_WIDTH, SWM_S_TITLE_CLASS_ENABLED, SWM_S_TITLE_NAME_ENABLED,
- SWM_S_BAR_FONT, SWM_S_BAR_ACTION, SWM_S_SPAWN_TERM, SWM_S_SS_APP,
- SWM_S_DIALOG_RATIO };
+enum { SWM_S_BAR_DELAY, SWM_S_BAR_ENABLED, SWM_S_STACK_ENABLED,
+ SWM_S_CLOCK_ENABLED, SWM_S_CYCLE_EMPTY, SWM_S_CYCLE_VISIBLE,
+ SWM_S_SS_ENABLED, SWM_S_TERM_WIDTH, SWM_S_TITLE_CLASS_ENABLED,
+ SWM_S_TITLE_NAME_ENABLED, SWM_S_BAR_FONT, SWM_S_BAR_ACTION,
+ SWM_S_SPAWN_TERM, SWM_S_SS_APP, SWM_S_DIALOG_RATIO };
int
setconfvalue(char *selector, char *value, int flags)
case SWM_S_BAR_ENABLED:
bar_enabled = atoi(value);
break;
+ case SWM_S_STACK_ENABLED:
+ stack_enabled = atoi(value);
+ break;
case SWM_S_CLOCK_ENABLED:
clock_enabled = atoi(value);
break;
{ "bar_action", setconfvalue, SWM_S_BAR_ACTION },
{ "bar_delay", setconfvalue, SWM_S_BAR_DELAY },
{ "bind", setconfbinding, 0 },
+ { "stack_enabled", setconfvalue, SWM_S_STACK_ENABLED },
{ "clock_enabled", setconfvalue, SWM_S_CLOCK_ENABLED },
{ "color_focus", setconfcolor, SWM_S_COLOR_FOCUS },
{ "color_unfocus", setconfcolor, SWM_S_COLOR_UNFOCUS },
if (win->transient)
winfocus = find_window(win->transient);
else if (ws->focus == win) {
- if ((ws->cur_layout->flags & SWM_L_FOCUSPREV) &&
- ws->focus_prev)
- winfocus = ws->focus_prev;
- else if (TAILQ_FIRST(wl) == win)
- winfocus = TAILQ_NEXT(win, entry);
- else {
- winfocus = TAILQ_PREV(ws->focus, ws_win_list,
- entry);
- if (winfocus == NULL)
- winfocus = TAILQ_LAST(wl, ws_win_list);
+ /* if in max_stack try harder */
+ if (ws->cur_layout->flags & SWM_L_FOCUSPREV)
+ if (win != ws->focus && win != ws->focus_prev)
+ winfocus = ws->focus_prev;
+
+ /* fallback and normal handling */
+ if (winfocus == NULL) {
+ if (TAILQ_FIRST(wl) == win)
+ winfocus = TAILQ_NEXT(win, entry);
+ else {
+ winfocus = TAILQ_PREV(ws->focus,
+ ws_win_list, entry);
+ if (winfocus == NULL)
+ winfocus = TAILQ_LAST(wl,
+ ws_win_list);
+ }
}
}
void
unmapnotify(XEvent *e)
{
- struct ws_win *win, *winfocus;
+ struct ws_win *win, *winfocus = NULL;
struct workspace *ws;
DNPRINTF(SWM_D_EVENT, "unmapnotify: window: %lu\n", e->xunmap.window);
* longer visible due to the app unmapping it so unmanage it
*/
- /* find something to focus */
ws = win->ws;
- winfocus = TAILQ_PREV(win, ws_win_list, entry);
- if (TAILQ_FIRST(&ws->winlist) == win)
- winfocus = TAILQ_NEXT(win, entry);
- else {
- winfocus = TAILQ_PREV(ws->focus, ws_win_list, entry);
- if (winfocus == NULL)
- winfocus = TAILQ_LAST(&ws->winlist, ws_win_list);
+ /* if we are max_stack try harder to focus on something */
+ if (ws->cur_layout->flags & SWM_L_FOCUSPREV)
+ if (win != ws->focus && win != ws->focus_prev)
+ winfocus = ws->focus_prev;
+
+ /* normal and fallback if haven't found anything to focus on */
+ if (winfocus == NULL) {
+ winfocus = TAILQ_PREV(win, ws_win_list, entry);
+ if (TAILQ_FIRST(&ws->winlist) == win)
+ winfocus = TAILQ_NEXT(win, entry);
+ else {
+ winfocus = TAILQ_PREV(ws->focus, ws_win_list,
+ entry);
+ if (winfocus == NULL)
+ winfocus = TAILQ_LAST(&ws->winlist,
+ ws_win_list);
+ }
}
/* trash window and refocus */