X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fconfig.c;h=ff4c542b13fb17b78b7883731efda36c3a61a257;hb=bf259be653b9c37c79f9cd8ababffe225857ce9f;hp=96f3ba8afdeedc6520554fa52145195e16a77ed3;hpb=97792a403a52c12c2601a7b2caebdea197f0b5f0;p=chaz%2Fopenbox
diff --git a/openbox/config.c b/openbox/config.c
index 96f3ba8a..ff4c542b 100644
--- a/openbox/config.c
+++ b/openbox/config.c
@@ -39,6 +39,8 @@ gboolean config_focus_under_mouse;
ObPlacePolicy config_place_policy;
gboolean config_place_center;
+StrutPartial config_margins;
+
gchar *config_theme;
gboolean config_theme_keepborder;
@@ -55,6 +57,7 @@ RrFont *config_font_osd;
gint config_desktops_num;
GSList *config_desktops_names;
guint config_screen_firstdesk;
+guint config_desktop_popup_time;
gboolean config_resize_redraw;
gboolean config_resize_four_corners;
@@ -93,7 +96,7 @@ gint config_resist_edge;
GSList *config_per_app_settings;
-ObAppSettings* config_create_app_settings()
+ObAppSettings* config_create_app_settings(void)
{
ObAppSettings *settings = g_new0(ObAppSettings, 1);
settings->decor = -1;
@@ -171,8 +174,8 @@ void config_app_settings_copy_non_defaults(const ObAppSettings *src,
the monitor, so center2
will center the window on the second monitor.
*/
-static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
- xmlNodePtr node, gpointer d)
+static void parse_per_app_settings(ObParseInst *inst, xmlDocPtr doc,
+ xmlNodePtr node, gpointer data)
{
xmlNodePtr app = parse_find_node("application", node->children);
gchar *name = NULL, *class = NULL, *role = NULL;
@@ -187,7 +190,7 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
if (class_set || name_set) {
xmlNodePtr n, c;
ObAppSettings *settings = config_create_app_settings();;
-
+
if (name_set)
settings->name = g_pattern_spec_new(name);
@@ -209,7 +212,7 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
if ((c = parse_find_node("x", n->children)))
if (!parse_contains("default", doc, c)) {
gchar *s = parse_string(doc, c);
- if (!strcmp(s, "center")) {
+ if (!g_ascii_strcasecmp(s, "center")) {
settings->center_x = TRUE;
x_pos_given = TRUE;
} else {
@@ -227,7 +230,7 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
if (x_pos_given && (c = parse_find_node("y", n->children)))
if (!parse_contains("default", doc, c)) {
gchar *s = parse_string(doc, c);
- if (!strcmp(s, "center")) {
+ if (!g_ascii_strcasecmp(s, "center")) {
settings->center_y = TRUE;
settings->pos_given = TRUE;
} else {
@@ -246,7 +249,7 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
(c = parse_find_node("monitor", n->children)))
if (!parse_contains("default", doc, c)) {
gchar *s = parse_string(doc, c);
- if (!strcmp(s, "mouse"))
+ if (!g_ascii_strcasecmp(s, "mouse"))
settings->monitor = 0;
else
settings->monitor = parse_int(doc, c) + 1;
@@ -261,7 +264,7 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
if ((n = parse_find_node("desktop", app->children))) {
if (!parse_contains("default", doc, n)) {
gchar *s = parse_string(doc, n);
- if (!strcmp(s, "all"))
+ if (!g_ascii_strcasecmp(s, "all"))
settings->desktop = DESKTOP_ALL;
else {
gint i = parse_int(doc, n);
@@ -275,9 +278,9 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
if ((n = parse_find_node("layer", app->children)))
if (!parse_contains("default", doc, n)) {
gchar *s = parse_string(doc, n);
- if (!strcmp(s, "above"))
+ if (!g_ascii_strcasecmp(s, "above"))
settings->layer = 1;
- else if (!strcmp(s, "below"))
+ else if (!g_ascii_strcasecmp(s, "below"))
settings->layer = -1;
else
settings->layer = 0;
@@ -303,10 +306,10 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
if ((n = parse_find_node("maximized", app->children)))
if (!parse_contains("default", doc, n)) {
gchar *s = parse_string(doc, n);
- if (!strcmp(s, "horizontal")) {
+ if (!g_ascii_strcasecmp(s, "horizontal")) {
settings->max_horz = TRUE;
settings->max_vert = FALSE;
- } else if (!strcmp(s, "vertical")) {
+ } else if (!g_ascii_strcasecmp(s, "vertical")) {
settings->max_horz = FALSE;
settings->max_vert = TRUE;
} else
@@ -317,14 +320,14 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
config_per_app_settings = g_slist_append(config_per_app_settings,
(gpointer) settings);
+ g_free(name);
+ g_free(class);
+ g_free(role);
+ name = class = role = NULL;
}
-
+
app = parse_find_node("application", app->next);
}
-
- g_free(name);
- g_free(class);
- g_free(role);
}
/*
@@ -360,7 +363,7 @@ static void parse_key(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
else if ((n = parse_find_node("action", node->children))) {
while (n) {
ObActionsAct *action;
-
+
action = actions_parse(i, doc, n);
if (action)
keyboard_bind(keylist, action);
@@ -376,7 +379,7 @@ static void parse_key(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
}
static void parse_keyboard(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
gchar *key;
@@ -399,7 +402,7 @@ static void parse_keyboard(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
/*
-
+
@@ -408,7 +411,7 @@ static void parse_keyboard(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
*/
static void parse_mouse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n, nbut, nact;
gchar *buttonstr;
@@ -418,7 +421,7 @@ static void parse_mouse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
mouse_unbind_all();
node = node->children;
-
+
if ((n = parse_find_node("dragThreshold", node)))
config_mouse_threshold = parse_int(doc, n);
if ((n = parse_find_node("doubleClickTime", node)))
@@ -465,18 +468,18 @@ static void parse_mouse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
}
static void parse_focus(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
node = node->children;
-
+
if ((n = parse_find_node("focusNew", node)))
config_focus_new = parse_bool(doc, n);
if ((n = parse_find_node("followMouse", node)))
config_focus_follow = parse_bool(doc, n);
if ((n = parse_find_node("focusDelay", node)))
- config_focus_delay = parse_int(doc, n) * 1000;
+ config_focus_delay = parse_int(doc, n);
if ((n = parse_find_node("raiseOnFocus", node)))
config_focus_raise = parse_bool(doc, n);
if ((n = parse_find_node("focusLast", node)))
@@ -486,12 +489,12 @@ static void parse_focus(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
}
static void parse_placement(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
node = node->children;
-
+
if ((n = parse_find_node("policy", node)))
if (parse_contains("UnderMouse", doc, n))
config_place_policy = OB_PLACE_POLICY_MOUSE;
@@ -499,8 +502,25 @@ static void parse_placement(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
config_place_center = parse_bool(doc, n);
}
+static void parse_margins(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
+ gpointer data)
+{
+ xmlNodePtr n;
+
+ node = node->children;
+
+ if ((n = parse_find_node("top", node)))
+ config_margins.top = MAX(0, parse_int(doc, n));
+ if ((n = parse_find_node("left", node)))
+ config_margins.left = MAX(0, parse_int(doc, n));
+ if ((n = parse_find_node("right", node)))
+ config_margins.right = MAX(0, parse_int(doc, n));
+ if ((n = parse_find_node("bottom", node)))
+ config_margins.bottom = MAX(0, parse_int(doc, n));
+}
+
static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
@@ -583,12 +603,12 @@ static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
}
static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
node = node->children;
-
+
if ((n = parse_find_node("number", node))) {
gint d = parse_int(doc, n);
if (d > 0)
@@ -615,15 +635,17 @@ static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
nname = parse_find_node("name", nname->next);
}
}
+ if ((n = parse_find_node("popupTime", node)))
+ config_desktop_popup_time = parse_int(doc, n);
}
static void parse_resize(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
node = node->children;
-
+
if ((n = parse_find_node("drawContents", node)))
config_resize_redraw = parse_bool(doc, n);
if ((n = parse_find_node("popupShow", node))) {
@@ -645,7 +667,7 @@ static void parse_resize(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
}
static void parse_dock(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
@@ -705,9 +727,9 @@ static void parse_dock(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
if ((n = parse_find_node("autoHide", node)))
config_dock_hide = parse_bool(doc, n);
if ((n = parse_find_node("hideDelay", node)))
- config_dock_hide_delay = parse_int(doc, n) * 1000;
+ config_dock_hide_delay = parse_int(doc, n);
if ((n = parse_find_node("showDelay", node)))
- config_dock_show_delay = parse_int(doc, n) * 1000;
+ config_dock_show_delay = parse_int(doc, n);
if ((n = parse_find_node("moveButton", node))) {
gchar *str = parse_string(doc, n);
guint b, s;
@@ -722,7 +744,7 @@ static void parse_dock(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
}
static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
for (node = node->children; node; node = node->next) {
@@ -744,9 +766,9 @@ static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
config_menu_client_list_icons = parse_bool(doc, n);
}
}
-
-static void parse_resistance(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+
+static void parse_resistance(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
+ gpointer data)
{
xmlNodePtr n;
@@ -763,6 +785,21 @@ typedef struct
const gchar *actname;
} ObDefKeyBind;
+static void bind_default_keyboard(void)
+{
+ ObDefKeyBind *it;
+ ObDefKeyBind binds[] = {
+ { "A-Tab", "NextWindow" },
+ { "S-A-Tab", "PreviousWindow" },
+ { "A-F4", "Close" },
+ { NULL, NULL }
+ };
+ for (it = binds; it->key; ++it) {
+ GList *l = g_list_append(NULL, g_strdup(it->key));
+ keyboard_bind(l, actions_parse_string(it->actname));
+ }
+}
+
typedef struct
{
const gchar *button;
@@ -771,7 +808,7 @@ typedef struct
const gchar *actname;
} ObDefMouseBind;
-static void bind_default_mouse()
+static void bind_default_mouse(void)
{
ObDefMouseBind *it;
ObDefMouseBind binds[] = {
@@ -807,14 +844,18 @@ static void bind_default_mouse()
{ "Left", "AllDesktops", OB_MOUSE_ACTION_CLICK, "Raise" },
{ "Left", "Shade", OB_MOUSE_ACTION_CLICK, "Raise" },
{ "Left", "Close", OB_MOUSE_ACTION_CLICK, "Close" },
- { "Left", "Maximize", OB_MOUSE_ACTION_CLICK, "Maximize" },
+ { "Left", "Maximize", OB_MOUSE_ACTION_CLICK, "ToggleMaximize" },
{ "Left", "Iconify", OB_MOUSE_ACTION_CLICK, "Iconify" },
- { "Left", "AllDesktops", OB_MOUSE_ACTION_CLICK, "Omnipresent" },
- { "Left", "Shade", OB_MOUSE_ACTION_CLICK, "Shade" },
+ { "Left", "AllDesktops", OB_MOUSE_ACTION_CLICK, "ToggleOmnipresent" },
+ { "Left", "Shade", OB_MOUSE_ACTION_CLICK, "ToggleShade" },
{ "Left", "TLCorner", OB_MOUSE_ACTION_MOTION, "Resize" },
{ "Left", "TRCorner", OB_MOUSE_ACTION_MOTION, "Resize" },
{ "Left", "BLCorner", OB_MOUSE_ACTION_MOTION, "Resize" },
{ "Left", "BRCorner", OB_MOUSE_ACTION_MOTION, "Resize" },
+ { "Left", "Top", OB_MOUSE_ACTION_MOTION, "Resize" },
+ { "Left", "Bottom", OB_MOUSE_ACTION_MOTION, "Resize" },
+ { "Left", "Left", OB_MOUSE_ACTION_MOTION, "Resize" },
+ { "Left", "Right", OB_MOUSE_ACTION_MOTION, "Resize" },
{ "Left", "Titlebar", OB_MOUSE_ACTION_MOTION, "Move" },
{ "A-Left", "Frame", OB_MOUSE_ACTION_MOTION, "Move" },
{ "A-Middle", "Frame", OB_MOUSE_ACTION_MOTION, "Resize" },
@@ -842,6 +883,10 @@ void config_startup(ObParseInst *i)
parse_register(i, "placement", parse_placement, NULL);
+ STRUT_PARTIAL_SET(config_margins, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+
+ parse_register(i, "margins", parse_margins, NULL);
+
config_theme = NULL;
config_animate_iconify = TRUE;
@@ -858,6 +903,7 @@ void config_startup(ObParseInst *i)
config_desktops_num = 4;
config_screen_firstdesk = 1;
config_desktops_names = NULL;
+ config_desktop_popup_time = 875;
parse_register(i, "desktops", parse_desktops, NULL);
@@ -886,6 +932,8 @@ void config_startup(ObParseInst *i)
translate_key("C-g", &config_keyboard_reset_state,
&config_keyboard_reset_keycode);
+ bind_default_keyboard();
+
parse_register(i, "keyboard", parse_keyboard, NULL);
config_mouse_threshold = 8;
@@ -914,7 +962,7 @@ void config_startup(ObParseInst *i)
parse_register(i, "applications", parse_per_app_settings, NULL);
}
-void config_shutdown()
+void config_shutdown(void)
{
GSList *it;