]> git.sur5r.net Git - i3/i3/commitdiff
Implement default border styles (thanks litemotiv).
authorFernando Tarlá Cardoso Lemos <fernandotcl@gmail.com>
Tue, 7 Dec 2010 23:32:04 +0000 (21:32 -0200)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 27 Dec 2010 12:10:45 +0000 (13:10 +0100)
include/config.h
include/data.h
src/cfgparse.l
src/cfgparse.y
src/con.c
src/config.c

index abbee5e716c88fed165723e7e3f2e36d9749321e..eaa14f6075b4369d5077cbcf462e5e157707d835 100644 (file)
@@ -107,7 +107,8 @@ struct Config {
          * comes with i3. Thus, you can turn it off entirely. */
         bool disable_workspace_bar;
 
-        const char *default_border;
+        /** The default border style for new windows. */
+        border_style_t default_border;
 
         /** The modifier which needs to be pressed in combination with your mouse
          * buttons to do things with floating windows (move, resize) */
index 06ceef0b51e010495d9c055ec9125a1c3bea6a53..6f4a47385c5f438de38f17c594369e0279f5a9a9 100644 (file)
@@ -42,6 +42,7 @@ typedef struct Window i3Window;
  *****************************************************************************/
 typedef enum { D_LEFT, D_RIGHT, D_UP, D_DOWN } direction_t;
 typedef enum { NO_ORIENTATION = 0, HORIZ, VERT } orientation_t;
+typedef enum { BS_NORMAL = 0, BS_NONE = 1, BS_1PIXEL = 3 } border_style_t;
 
 enum {
     BIND_NONE = 0,
@@ -331,7 +332,7 @@ struct Con {
 
     enum { CF_NONE = 0, CF_OUTPUT = 1, CF_GLOBAL = 2 } fullscreen_mode;
     enum { L_DEFAULT = 0, L_STACKED = 1, L_TABBED = 2 } layout;
-    enum { BS_NORMAL = 0, BS_NONE = 1, BS_1PIXEL = 3 } border_style;
+    border_style_t border_style;
     /** floating? (= not in tiling layout) This cannot be simply a bool
      * because we want to keep track of whether the status was set by the
      * application (by setting _NET_WM_WINDOW_TYPE appropriately) or by the
index 93ce916c258e26686ae1de78d45c1023292bd2a0..66afb14b9e5f60a810dea395918c8453d41b108a 100644 (file)
@@ -94,6 +94,9 @@ ipc_socket                      { BEGIN(BIND_AWS_COND); return TOKIPCSOCKET; }
 restart_state                   { BEGIN(BIND_AWS_COND); return TOKRESTARTSTATE; }
 new_container                   { return TOKNEWCONTAINER; }
 new_window                      { return TOKNEWWINDOW; }
+normal                          { return TOK_NORMAL; }
+none                            { return TOK_NONE; }
+1pixel                          { return TOK_1PIXEL; }
 focus_follows_mouse             { return TOKFOCUSFOLLOWSMOUSE; }
 workspace_bar                   { return TOKWORKSPACEBAR; }
 default                         { /* yylval.number = MODE_DEFAULT; */return TOKCONTAINERMODE; }
index eaed7c5d55727bfcafc0604ccf8acbfbb7b6ce9e..c93c33e6fff1e8f7001dc295131f6242e28c69e4 100644 (file)
@@ -225,6 +225,9 @@ void parse_file(const char *f) {
 %token TOKMODE "mode"
 %token TOKNEWCONTAINER "new_container"
 %token TOKNEWWINDOW "new_window"
+%token TOK_NORMAL "normal"
+%token TOK_NONE "none"
+%token TOK_1PIXEL "1pixel"
 %token TOKFOCUSFOLLOWSMOUSE "focus_follows_mouse"
 %token TOKWORKSPACEBAR "workspace_bar"
 %token TOKCONTAINERMODE "default/stacking/tabbed"
@@ -411,13 +414,19 @@ new_container:
         ;
 
 new_window:
-        TOKNEWWINDOW WHITESPACE WORD
+        TOKNEWWINDOW WHITESPACE border_style
         {
-                DLOG("new windows should start in mode %s\n", $<string>3);
-                config.default_border = sstrdup($<string>3);
+                DLOG("new windows should start with border style %d\n", $<number>3);
+                config.default_border = $<number>3;
         }
         ;
 
+border_style:
+        TOK_NORMAL      { $<number>$ = BS_NORMAL; }
+        | TOK_NONE      { $<number>$ = BS_NONE; }
+        | TOK_1PIXEL    { $<number>$ = BS_1PIXEL; }
+        ;
+
 bool:
         NUMBER
         {
index 57ed12e0e2cfdd8ba37444a4c1f8f7f9094a94fb..8e94c326d0188c6d157fb3f76c43f440375f14be 100644 (file)
--- a/src/con.c
+++ b/src/con.c
@@ -35,6 +35,7 @@ Con *con_new(Con *parent) {
     TAILQ_INSERT_TAIL(&all_cons, new, all_cons);
     new->type = CT_CON;
     new->name = strdup("");
+    new->border_style = config.default_border;
     static int cnt = 0;
     LOG("opening window %d\n", cnt);
 
@@ -554,6 +555,9 @@ int con_border_style(Con *con) {
     if (con->parent->layout == L_STACKED)
         return BS_NORMAL;
 
+    if (con->parent->layout == L_TABBED && con->border_style != BS_NORMAL)
+        return con_num_children(con->parent) == 1 ? con->border_style : BS_NORMAL;
+
     return con->border_style;
 }
 
index c02d1c2a97fce34aba43086d28e4e86bb021bbe0..e60fd9b059ce54f9799235015521d1e22f440bb0 100644 (file)
@@ -365,6 +365,7 @@ void load_configuration(xcb_connection_t *conn, const char *override_configpath,
         INIT_COLOR(config.bar.urgent, "#2f343a", "#900000", "#ffffff");
 
         config.restart_state_path = "~/.i3/_restart.json";
+        config.default_border = BS_NORMAL;
 
         parse_configuration(override_configpath);