-#undef I3__FILE__
-#define I3__FILE__ "config_directives.c"
/*
* vim:ts=4:sw=4:expandtab
*
* config_directives.c: all config storing functions (see config_parser.c)
*
*/
+#include "all.h"
+
#include <float.h>
#include <stdarg.h>
-#include "all.h"
-
/*******************************************************************************
* Criteria functions.
******************************************************************************/
/* It might be better to use strtok() here, but the simpler strstr() should
* do for now. */
i3_event_state_mask_t result = 0;
- int group_bits_set = 0;
if (str == NULL)
- return (I3_XKB_GROUP_MASK_1 << 16);
+ return result;
if (strstr(str, "Mod1") != NULL)
result |= XCB_KEY_BUT_MASK_MOD_1;
if (strstr(str, "Mod2") != NULL)
if (strstr(str, "Shift") != NULL)
result |= XCB_KEY_BUT_MASK_SHIFT;
- if (strstr(str, "Group1") != NULL) {
+ if (strstr(str, "Group1") != NULL)
result |= (I3_XKB_GROUP_MASK_1 << 16);
- group_bits_set++;
- }
if (strstr(str, "Group2") != NULL ||
- strstr(str, "Mode_switch") != NULL) {
+ strstr(str, "Mode_switch") != NULL)
result |= (I3_XKB_GROUP_MASK_2 << 16);
- group_bits_set++;
- }
- if (strstr(str, "Group3") != NULL) {
+ if (strstr(str, "Group3") != NULL)
result |= (I3_XKB_GROUP_MASK_3 << 16);
- group_bits_set++;
- }
- if (strstr(str, "Group4") != NULL) {
+ if (strstr(str, "Group4") != NULL)
result |= (I3_XKB_GROUP_MASK_4 << 16);
- group_bits_set++;
- }
- if (group_bits_set == 0) {
- result |= (I3_XKB_GROUP_MASK_1 << 16);
- }
return result;
}
font_pattern = sstrdup(font);
}
-CFGFUN(binding, const char *bindtype, const char *modifiers, const char *key, const char *release, const char *border, const char *whole_window, const char *command) {
- configure_binding(bindtype, modifiers, key, release, border, whole_window, command, DEFAULT_BINDING_MODE, false);
+CFGFUN(binding, const char *bindtype, const char *modifiers, const char *key, const char *release, const char *border, const char *whole_window, const char *exclude_titlebar, const char *command) {
+ configure_binding(bindtype, modifiers, key, release, border, whole_window, exclude_titlebar, command, DEFAULT_BINDING_MODE, false);
}
/*******************************************************************************
static char *current_mode;
static bool current_mode_pango_markup;
-CFGFUN(mode_binding, const char *bindtype, const char *modifiers, const char *key, const char *release, const char *border, const char *whole_window, const char *command) {
- configure_binding(bindtype, modifiers, key, release, border, whole_window, command, current_mode, current_mode_pango_markup);
+CFGFUN(mode_binding, const char *bindtype, const char *modifiers, const char *key, const char *release, const char *border, const char *whole_window, const char *exclude_titlebar, const char *command) {
+ configure_binding(bindtype, modifiers, key, release, border, whole_window, exclude_titlebar, command, current_mode, current_mode_pango_markup);
}
CFGFUN(enter_mode, const char *pango_markup, const char *modename) {
if (strcasecmp(modename, DEFAULT_BINDING_MODE) == 0) {
ELOG("You cannot use the name %s for your mode\n", DEFAULT_BINDING_MODE);
- exit(1);
+ return;
+ }
+
+ struct Mode *mode;
+ SLIST_FOREACH(mode, &modes, modes) {
+ if (strcmp(mode->name, modename) == 0) {
+ ELOG("The binding mode with name \"%s\" is defined at least twice.\n", modename);
+ }
}
+
DLOG("\t now in mode %s\n", modename);
FREE(current_mode);
current_mode = sstrdup(modename);
}
CFGFUN(hide_edge_borders, const char *borders) {
- if (strcmp(borders, "vertical") == 0)
- config.hide_edge_borders = ADJ_LEFT_SCREEN_EDGE | ADJ_RIGHT_SCREEN_EDGE;
+ if (strcmp(borders, "smart") == 0)
+ config.hide_edge_borders = HEBM_SMART;
+ else if (strcmp(borders, "vertical") == 0)
+ config.hide_edge_borders = HEBM_VERTICAL;
else if (strcmp(borders, "horizontal") == 0)
- config.hide_edge_borders = ADJ_UPPER_SCREEN_EDGE | ADJ_LOWER_SCREEN_EDGE;
+ config.hide_edge_borders = HEBM_HORIZONTAL;
else if (strcmp(borders, "both") == 0)
- config.hide_edge_borders = ADJ_LEFT_SCREEN_EDGE | ADJ_RIGHT_SCREEN_EDGE | ADJ_UPPER_SCREEN_EDGE | ADJ_LOWER_SCREEN_EDGE;
+ config.hide_edge_borders = HEBM_BOTH;
else if (strcmp(borders, "none") == 0)
- config.hide_edge_borders = ADJ_NONE;
+ config.hide_edge_borders = HEBM_NONE;
else if (eval_boolstr(borders))
- config.hide_edge_borders = ADJ_LEFT_SCREEN_EDGE | ADJ_RIGHT_SCREEN_EDGE;
+ config.hide_edge_borders = HEBM_VERTICAL;
else
- config.hide_edge_borders = ADJ_NONE;
+ config.hide_edge_borders = HEBM_NONE;
}
CFGFUN(focus_follows_mouse, const char *value) {
config.force_xinerama = eval_boolstr(value);
}
+CFGFUN(disable_randr15, const char *value) {
+ config.disable_randr15 = eval_boolstr(value);
+}
+
CFGFUN(force_focus_wrapping, const char *value) {
config.force_focus_wrapping = eval_boolstr(value);
}
}
CFGFUN(fake_outputs, const char *outputs) {
+ free(config.fake_outputs);
config.fake_outputs = sstrdup(outputs);
}
}
CFGFUN(ipc_socket, const char *path) {
+ free(config.ipc_socket_path);
config.ipc_socket_path = sstrdup(path);
}
CFGFUN(restart_state, const char *path) {
+ free(config.restart_state_path);
config.restart_state_path = sstrdup(path);
}
CFGFUN(color_single, const char *colorclass, const char *color) {
/* used for client.background only currently */
- config.client.background = get_colorpixel(color);
-}
-
-CFGFUN(color, const char *colorclass, const char *border, const char *background, const char *text, const char *indicator) {
-#define APPLY_COLORS(classname) \
- do { \
- if (strcmp(colorclass, "client." #classname) == 0) { \
- config.client.classname.border = get_colorpixel(border); \
- config.client.classname.background = get_colorpixel(background); \
- config.client.classname.text = get_colorpixel(text); \
- if (indicator != NULL) { \
- config.client.classname.indicator = get_colorpixel(indicator); \
- } \
- } \
+ config.client.background = draw_util_hex_to_color(color);
+}
+
+CFGFUN(color, const char *colorclass, const char *border, const char *background, const char *text, const char *indicator, const char *child_border) {
+#define APPLY_COLORS(classname) \
+ do { \
+ if (strcmp(colorclass, "client." #classname) == 0) { \
+ config.client.classname.border = draw_util_hex_to_color(border); \
+ config.client.classname.background = draw_util_hex_to_color(background); \
+ config.client.classname.text = draw_util_hex_to_color(text); \
+ if (indicator != NULL) { \
+ config.client.classname.indicator = draw_util_hex_to_color(indicator); \
+ } \
+ if (child_border != NULL) { \
+ config.client.classname.child_border = draw_util_hex_to_color(child_border); \
+ } else { \
+ config.client.classname.child_border = config.client.classname.background; \
+ } \
+ } \
} while (0)
APPLY_COLORS(focused_inactive);
current_bar->modifier = M_CONTROL;
else if (strcmp(modifier, "Shift") == 0)
current_bar->modifier = M_SHIFT;
+ else if (strcmp(modifier, "none") == 0 ||
+ strcmp(modifier, "off") == 0)
+ current_bar->modifier = M_NONE;
}
static void bar_configure_binding(const char *button, const char *command) {
TAILQ_INIT(&(current_bar->bar_bindings));
TAILQ_INIT(&(current_bar->tray_outputs));
current_bar->tray_padding = 2;
+ current_bar->modifier = M_MOD4;
}
CFGFUN(bar_finish) {