Add client.focused_float color
Patch status: rejected
Patch by oblique
To apply this patch, use:
curl http://cr.i3wm.org/patch/56/raw.patch | git am
b/docs/userguide
| 19 |
@@ -718,6 +718,8 @@ Where colorclass can be one of: |
| 20 |
|
| 21 |
client.focused:: |
| 22 |
A client which currently has the focus. |
| 23 |
+client.focused_float:: |
| 24 |
+ A client which currently has the focus, but is a floating window. |
| 25 |
client.focused_inactive:: |
| 26 |
A client which is the focused one of its container, but it does not have |
| 27 |
the focus at the moment. |
b/include/config.h
| 32 |
@@ -177,6 +177,7 @@ struct Config {
|
| 33 |
struct config_client {
|
| 34 |
uint32_t background; |
| 35 |
struct Colortriple focused; |
| 36 |
+ struct Colortriple focused_float; |
| 37 |
struct Colortriple focused_inactive; |
| 38 |
struct Colortriple unfocused; |
| 39 |
struct Colortriple urgent; |
b/parser-specs/config.spec
| 44 |
@@ -44,7 +44,7 @@ state INITIAL: |
| 45 |
exectype = 'exec_always', 'exec' -> EXEC |
| 46 |
colorclass = 'client.background' |
| 47 |
-> COLOR_SINGLE |
| 48 |
- colorclass = 'client.focused_inactive', 'client.focused', 'client.unfocused', 'client.urgent' |
| 49 |
+ colorclass = 'client.focused_inactive', 'client.focused_float', 'client.focused', 'client.unfocused', 'client.urgent' |
| 50 |
-> COLOR_BORDER |
| 51 |
|
| 52 |
# We ignore comments and 'set' lines (variables). |
b/src/config.c
| 57 |
@@ -409,6 +409,7 @@ void load_configuration(xcb_connection_t *conn, const char *override_configpath, |
| 58 |
|
| 59 |
config.client.background = get_colorpixel("#000000");
|
| 60 |
INIT_COLOR(config.client.focused, "#4c7899", "#285577", "#ffffff", "#2e9ef4"); |
| 61 |
+ INIT_COLOR(config.client.focused_float, "#4c7899", "#285577", "#ffffff", "#2e9ef4"); |
| 62 |
INIT_COLOR(config.client.focused_inactive, "#333333", "#5f676a", "#ffffff", "#484e50"); |
| 63 |
INIT_COLOR(config.client.unfocused, "#333333", "#222222", "#888888", "#292d2e"); |
| 64 |
INIT_COLOR(config.client.urgent, "#2f343a", "#900000", "#ffffff", "#900000"); |
b/src/config_directives.c
| 69 |
@@ -415,6 +415,7 @@ CFGFUN(color, const char *colorclass, const char *border, const char *background |
| 70 |
} while (0) |
| 71 |
|
| 72 |
APPLY_COLORS(focused_inactive); |
| 73 |
+ APPLY_COLORS(focused_float); |
| 74 |
APPLY_COLORS(focused); |
| 75 |
APPLY_COLORS(unfocused); |
| 76 |
APPLY_COLORS(urgent); |
b/src/x.c
| 81 |
@@ -334,9 +334,12 @@ void x_draw_decoration(Con *con) {
|
| 82 |
/* find out which colors to use */ |
| 83 |
if (con->urgent) |
| 84 |
p->color = &config.client.urgent; |
| 85 |
- else if (con == focused || con_inside_focused(con)) |
| 86 |
- p->color = &config.client.focused; |
| 87 |
- else if (con == TAILQ_FIRST(&(parent->focus_head))) |
| 88 |
+ else if (con == focused || con_inside_focused(con)) {
|
| 89 |
+ if (con_is_floating(con)) |
| 90 |
+ p->color = &config.client.focused_float; |
| 91 |
+ else |
| 92 |
+ p->color = &config.client.focused; |
| 93 |
+ } else if (con == TAILQ_FIRST(&(parent->focus_head))) |
| 94 |
p->color = &config.client.focused_inactive; |
| 95 |
else |
| 96 |
p->color = &config.client.unfocused; |
b/testcases/t/201-config-parser.t
| 101 |
@@ -366,6 +366,7 @@ is(parser_calls($config), |
| 102 |
|
| 103 |
$config = <<'EOT'; |
| 104 |
client.focused #4c7899 #285577 #ffffff #2e9ef4 |
| 105 |
+client.focused_float #4c7899 #285577 #ffffff #2e9ef4 |
| 106 |
client.focused_inactive #333333 #5f676a #ffffff #484e50 |
| 107 |
client.unfocused #333333 #222222 #888888 #292d2e |
| 108 |
client.urgent #2f343a #900000 #ffffff #900000 |
| 109 |
@@ -373,6 +374,7 @@ EOT |
| 110 |
|
| 111 |
$expected = <<'EOT'; |
| 112 |
cfg_color(client.focused, #4c7899, #285577, #ffffff, #2e9ef4) |
| 113 |
+cfg_color(client.focused_float, #4c7899, #285577, #ffffff, #2e9ef4) |
| 114 |
cfg_color(client.focused_inactive, #333333, #5f676a, #ffffff, #484e50) |
| 115 |
cfg_color(client.unfocused, #333333, #222222, #888888, #292d2e) |
| 116 |
cfg_color(client.urgent, #2f343a, #900000, #ffffff, #900000) |
| 117 |
@@ -392,7 +394,7 @@ client.focused #4c7899 #285577 #ffffff #2e9ef4 |
| 118 |
EOT |
| 119 |
|
| 120 |
my $expected_all_tokens = <<'EOT'; |
| 121 |
-ERROR: CONFIG: Expected one of these tokens: <end>, '#', 'set', 'bindsym', 'bindcode', 'bind', 'bar', 'font', 'mode', 'floating_minimum_size', 'floating_maximum_size', 'floating_modifier', 'default_orientation', 'workspace_layout', 'new_window', 'new_float', 'hide_edge_borders', 'for_window', 'assign', 'focus_follows_mouse', 'force_focus_wrapping', 'force_xinerama', 'force-xinerama', 'workspace_auto_back_and_forth', 'fake_outputs', 'fake-outputs', 'force_display_urgency_hint', 'workspace', 'ipc_socket', 'ipc-socket', 'restart_state', 'popup_during_fullscreen', 'exec_always', 'exec', 'client.background', 'client.focused_inactive', 'client.focused', 'client.unfocused', 'client.urgent' |
| 122 |
+ERROR: CONFIG: Expected one of these tokens: <end>, '#', 'set', 'bindsym', 'bindcode', 'bind', 'bar', 'font', 'mode', 'floating_minimum_size', 'floating_maximum_size', 'floating_modifier', 'default_orientation', 'workspace_layout', 'new_window', 'new_float', 'hide_edge_borders', 'for_window', 'assign', 'focus_follows_mouse', 'force_focus_wrapping', 'force_xinerama', 'force-xinerama', 'workspace_auto_back_and_forth', 'fake_outputs', 'fake-outputs', 'force_display_urgency_hint', 'workspace', 'ipc_socket', 'ipc-socket', 'restart_state', 'popup_during_fullscreen', 'exec_always', 'exec', 'client.background', 'client.focused_inactive', 'client.focused_float', 'client.focused', 'client.unfocused', 'client.urgent' |
| 123 |
EOT |
| 124 |
|
| 125 |
my $expected_end = <<'EOT'; |