X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fconfig.c;h=96f3ba8afdeedc6520554fa52145195e16a77ed3;hb=b41c3395313a97741f2f76b9133dc3b0b8eb5bbc;hp=133fb4a688d953814753d6d0a455b3ac8a6ef03f;hpb=097d02d9d3d4b2eeea11084c54812de9cd7d14c0;p=chaz%2Fopenbox diff --git a/openbox/config.c b/openbox/config.c index 133fb4a6..96f3ba8a 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" @@ -36,6 +37,7 @@ gboolean config_focus_last; gboolean config_focus_under_mouse; ObPlacePolicy config_place_policy; +gboolean config_place_center; gchar *config_theme; gboolean config_theme_keepborder; @@ -77,6 +79,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; @@ -132,6 +135,8 @@ void config_app_settings_copy_non_defaults(const ObAppSettings *src, dst->pos_given = TRUE; dst->center_x = src->center_x; dst->center_y = src->center_y; + dst->opposite_x = src->opposite_x; + dst->opposite_y = src->opposite_y; dst->position.x = src->position.x; dst->position.y = src->position.y; dst->monitor = src->monitor; @@ -208,7 +213,12 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc, settings->center_x = TRUE; x_pos_given = TRUE; } else { - settings->position.x = parse_int(doc, c); + if (s[0] == '-') + settings->opposite_x = TRUE; + if (s[0] == '-' || s[0] == '+') + settings->position.x = atoi(s+1); + else + settings->position.x = atoi(s); x_pos_given = TRUE; } g_free(s); @@ -221,7 +231,12 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc, settings->center_y = TRUE; settings->pos_given = TRUE; } else { - settings->position.y = parse_int(doc, c); + if (s[0] == '-') + settings->opposite_y = TRUE; + if (s[0] == '-' || s[0] == '+') + settings->position.y = atoi(s+1); + else + settings->position.y = atoi(s); settings->pos_given = TRUE; } g_free(s); @@ -344,9 +359,9 @@ static void parse_key(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } else if ((n = parse_find_node("action", node->children))) { while (n) { - ObAction *action; + ObActionsAct *action; - action = action_parse(i, doc, n, OB_USER_ACTION_KEYBOARD_KEY); + action = actions_parse(i, doc, n); if (action) keyboard_bind(keylist, action); n = parse_find_node("action", n->next); @@ -398,9 +413,7 @@ 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(); @@ -410,6 +423,8 @@ static void parse_mouse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr 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) { @@ -420,25 +435,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); } @@ -483,6 +495,8 @@ static void parse_placement(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, if ((n = parse_find_node("policy", node))) if (parse_contains("UnderMouse", doc, n)) config_place_policy = OB_PLACE_POLICY_MOUSE; + if ((n = parse_find_node("center", node))) + config_place_center = parse_bool(doc, n); } static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, @@ -749,23 +763,6 @@ typedef struct const gchar *actname; } ObDefKeyBind; -static void bind_default_keyboard() -{ - 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, action_from_string(it->actname, - OB_USER_ACTION_KEYBOARD_KEY)); - } -} - typedef struct { const gchar *button; @@ -810,10 +807,10 @@ 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, "Maximize" }, { "Left", "Iconify", OB_MOUSE_ACTION_CLICK, "Iconify" }, - { "Left", "AllDesktops", OB_MOUSE_ACTION_CLICK, "ToggleOmnipresent" }, - { "Left", "Shade", OB_MOUSE_ACTION_CLICK, "ToggleShade" }, + { "Left", "AllDesktops", OB_MOUSE_ACTION_CLICK, "Omnipresent" }, + { "Left", "Shade", OB_MOUSE_ACTION_CLICK, "Shade" }, { "Left", "TLCorner", OB_MOUSE_ACTION_MOTION, "Resize" }, { "Left", "TRCorner", OB_MOUSE_ACTION_MOTION, "Resize" }, { "Left", "BLCorner", OB_MOUSE_ACTION_MOTION, "Resize" }, @@ -824,25 +821,9 @@ static void bind_default_mouse() { 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) @@ -851,12 +832,13 @@ void config_startup(ObParseInst *i) config_focus_follow = FALSE; config_focus_delay = 0; config_focus_raise = FALSE; - config_focus_last = FALSE; + config_focus_last = TRUE; config_focus_under_mouse = FALSE; parse_register(i, "focus", parse_focus, NULL); config_place_policy = OB_PLACE_POLICY_SMART; + config_place_center = TRUE; parse_register(i, "placement", parse_placement, NULL); @@ -904,12 +886,11 @@ 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; config_mouse_dclicktime = 200; + config_mouse_screenedgetime = 400; bind_default_mouse();