JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Add horizontal_flip and vertical_flip layout options.
[spectrwm.git] / spectrwm.c
index 436e84d..0569f9c 100644 (file)
@@ -1369,6 +1369,17 @@ bar_title_name(char *s, size_t sz, struct swm_region *r)
 }
 
 void
+bar_class_title_name(char *s, size_t sz, struct swm_region *r)
+{
+       if (r == NULL || r->ws == NULL || r->ws->focus == NULL)
+               return;
+
+       bar_class_name(s, sz, r);
+       strlcat(s, ":", sz);
+       bar_title_name(s, sz, r);
+}
+
+void
 bar_window_float(char *s, size_t sz, struct swm_region *r)
 {
        if (r == NULL || r ->ws == NULL || r->ws->focus == NULL)
@@ -1542,6 +1553,9 @@ bar_replace_seq(char *fmt, char *fmtrep, struct swm_region *r, size_t *offrep,
        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;
@@ -4380,7 +4394,6 @@ enum keyfuncid {
        kf_swap_next,
        kf_swap_prev,
        kf_spawn_term,
-       kf_spawn_menu,
        kf_quit,
        kf_restart,
        kf_focus_main,
@@ -4438,12 +4451,8 @@ enum keyfuncid {
        kf_bar_toggle,
        kf_wind_kill,
        kf_wind_del,
-       kf_screenshot_all,
-       kf_screenshot_wind,
        kf_float_toggle,
        kf_version,
-       kf_spawn_lock,
-       kf_spawn_initscr,
        kf_spawn_custom,
        kf_iconify,
        kf_uniconify,
@@ -4470,11 +4479,6 @@ dummykeyfunc(struct swm_region *r, union arg *args)
 {
 };
 
-void
-legacyfunc(struct swm_region *r, union arg *args)
-{
-};
-
 struct keyfunc {
        char                    name[SWM_FUNCNAME_LEN];
        void                    (*func)(struct swm_region *r, union arg *);
@@ -4496,7 +4500,6 @@ struct keyfunc {
        { "swap_next",          swapwin,        {.id = SWM_ARG_ID_SWAPNEXT} },
        { "swap_prev",          swapwin,        {.id = SWM_ARG_ID_SWAPPREV} },
        { "spawn_term",         spawnterm,      {.argv = spawn_term} },
-       { "spawn_menu",         legacyfunc,     {0} },
        { "quit",               quit,           {0} },
        { "restart",            restart,        {0} },
        { "focus_main",         focus,          {.id = SWM_ARG_ID_FOCUSMAIN} },
@@ -4554,12 +4557,8 @@ struct keyfunc {
        { "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} },
@@ -5757,7 +5756,7 @@ setautorun(char *selector, char *value, int flags)
 int
 setlayout(char *selector, char *value, int flags)
 {
-       int                     ws_id, i, x, mg, ma, si, raise;
+       int                     ws_id, i, x, mg, ma, si, raise, f = 0;
        int                     st = SWM_V_STACK;
        char                    s[1024];
        struct workspace        *ws;
@@ -5777,9 +5776,15 @@ setlayout(char *selector, char *value, int flags)
 
        if (!strcasecmp(s, "vertical"))
                st = SWM_V_STACK;
-       else if (!strcasecmp(s, "horizontal"))
+       else if (!strcasecmp(s, "vertical_flip")) {
+               st = SWM_V_STACK;
+               f = 1;
+       } else if (!strcasecmp(s, "horizontal"))
                st = SWM_H_STACK;
-       else if (!strcasecmp(s, "fullscreen"))
+       else if (!strcasecmp(s, "horizontal_flip")) {
+               st = SWM_H_STACK;
+               f = 1;
+       } else if (!strcasecmp(s, "fullscreen"))
                st = SWM_MAX_STACK;
        else
                errx(1, "invalid layout entry, should be 'ws[<idx>]:"
@@ -5815,6 +5820,12 @@ setlayout(char *selector, char *value, int flags)
                            SWM_ARG_ID_STACKDEC);
                        stack();
                }
+               /* Apply flip */
+               if (f) {
+                       ws[ws_id].cur_layout->l_config(&ws[ws_id],
+                           SWM_ARG_ID_FLIPLAYOUT);
+                       stack();
+               }
        }
 
        return (0);