X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fconfig.c;h=1bf63e58134f77afb3b26fc7ea6e62c128f5147b;hb=7f5347897754164c9688d7e3d882411283c13a55;hp=2eb8e13c4fe5623ae2459511f44453b92bc751af;hpb=e048751f914d16cb6346f7e7ca6532eaae44ce31;p=chaz%2Fopenbox diff --git a/openbox/config.c b/openbox/config.c index 2eb8e13c..1bf63e58 100644 --- a/openbox/config.c +++ b/openbox/config.c @@ -20,6 +20,7 @@ #include "config.h" #include "keyboard.h" #include "mouse.h" +#include "actions.h" #include "prop.h" #include "translate.h" #include "client.h" @@ -38,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; @@ -54,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; @@ -78,6 +82,7 @@ guint config_keyboard_reset_state; gint config_mouse_threshold; gint config_mouse_dclicktime; +gint config_mouse_screenedgetime; guint config_menu_hide_delay; gboolean config_menu_middle; @@ -185,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); @@ -207,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 { @@ -225,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 { @@ -244,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; @@ -259,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); @@ -273,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; @@ -301,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 @@ -315,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); } /* @@ -357,9 +362,9 @@ static void parse_key(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } else if ((n = parse_find_node("action", node->children))) { while (n) { - ObAction *action; - - action = action_parse(i, doc, n, OB_USER_ACTION_KEYBOARD_KEY); + ObActionsAct *action; + + action = actions_parse(i, doc, n); if (action) keyboard_bind(keylist, action); n = parse_find_node("action", n->next); @@ -397,7 +402,7 @@ static void parse_keyboard(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, /* - + @@ -411,18 +416,18 @@ static void parse_mouse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, xmlNodePtr n, nbut, nact; gchar *buttonstr; gchar *contextstr; - ObUserAction uact; ObMouseAction mact; - ObAction *action; 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))) config_mouse_dclicktime = parse_int(doc, n); + if ((n = parse_find_node("screenEdgeWarpTime", node))) + config_mouse_screenedgetime = parse_int(doc, n); n = parse_find_node("context", node); while (n) { @@ -433,25 +438,22 @@ static void parse_mouse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, if (!parse_attr_string("button", nbut, &buttonstr)) goto next_nbut; if (parse_attr_contains("press", nbut, "action")) { - uact = OB_USER_ACTION_MOUSE_PRESS; mact = OB_MOUSE_ACTION_PRESS; } else if (parse_attr_contains("release", nbut, "action")) { - uact = OB_USER_ACTION_MOUSE_RELEASE; mact = OB_MOUSE_ACTION_RELEASE; } else if (parse_attr_contains("click", nbut, "action")) { - uact = OB_USER_ACTION_MOUSE_CLICK; mact = OB_MOUSE_ACTION_CLICK; } else if (parse_attr_contains("doubleclick", nbut,"action")) { - uact = OB_USER_ACTION_MOUSE_DOUBLE_CLICK; mact = OB_MOUSE_ACTION_DOUBLE_CLICK; } else if (parse_attr_contains("drag", nbut, "action")) { - uact = OB_USER_ACTION_MOUSE_MOTION; mact = OB_MOUSE_ACTION_MOTION; } else goto next_nbut; nact = parse_find_node("action", nbut->children); while (nact) { - if ((action = action_parse(i, doc, nact, uact))) + ObActionsAct *action; + + if ((action = actions_parse(i, doc, nact))) mouse_bind(buttonstr, contextstr, mact, action); nact = parse_find_node("action", nact->next); } @@ -471,13 +473,13 @@ static void parse_focus(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, 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))) @@ -492,7 +494,7 @@ static void parse_placement(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, 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; @@ -500,6 +502,23 @@ 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 d) +{ + 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) { @@ -589,7 +608,7 @@ static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, xmlNodePtr n; node = node->children; - + if ((n = parse_find_node("number", node))) { gint d = parse_int(doc, n); if (d > 0) @@ -616,6 +635,8 @@ 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, @@ -624,7 +645,7 @@ static void parse_resize(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, 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))) { @@ -706,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; @@ -745,8 +766,8 @@ 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, + +static void parse_resistance(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, gpointer d) { xmlNodePtr n; @@ -773,11 +794,9 @@ static void bind_default_keyboard() { "A-F4", "Close" }, { NULL, NULL } }; - for (it = binds; it->key; ++it) { GList *l = g_list_append(NULL, g_strdup(it->key)); - keyboard_bind(l, action_from_string(it->actname, - OB_USER_ACTION_KEYBOARD_KEY)); + keyboard_bind(l, actions_parse_string(it->actname)); } } @@ -825,7 +844,7 @@ 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, "ToggleMaximizeFull" }, + { "Left", "Maximize", OB_MOUSE_ACTION_CLICK, "ToggleMaximize" }, { "Left", "Iconify", OB_MOUSE_ACTION_CLICK, "Iconify" }, { "Left", "AllDesktops", OB_MOUSE_ACTION_CLICK, "ToggleOmnipresent" }, { "Left", "Shade", OB_MOUSE_ACTION_CLICK, "ToggleShade" }, @@ -833,31 +852,19 @@ static void bind_default_mouse() { "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" }, { NULL, NULL, 0, NULL } }; - for (it = binds; it->button; ++it) { - ObUserAction uact; - switch (it->mact) { - case OB_MOUSE_ACTION_PRESS: - uact = OB_USER_ACTION_MOUSE_PRESS; break; - case OB_MOUSE_ACTION_RELEASE: - uact = OB_USER_ACTION_MOUSE_RELEASE; break; - case OB_MOUSE_ACTION_CLICK: - uact = OB_USER_ACTION_MOUSE_CLICK; break; - case OB_MOUSE_ACTION_DOUBLE_CLICK: - uact = OB_USER_ACTION_MOUSE_DOUBLE_CLICK; break; - case OB_MOUSE_ACTION_MOTION: - uact = OB_USER_ACTION_MOUSE_MOTION; break; - default: - g_assert_not_reached(); - } + for (it = binds; it->button; ++it) mouse_bind(it->button, it->context, it->mact, - action_from_string(it->actname, uact)); - } + actions_parse_string(it->actname)); } void config_startup(ObParseInst *i) @@ -876,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; @@ -892,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); @@ -926,6 +938,7 @@ void config_startup(ObParseInst *i) config_mouse_threshold = 8; config_mouse_dclicktime = 200; + config_mouse_screenedgetime = 400; bind_default_mouse();