]> Dogcows Code - chaz/openbox/blobdiff - openbox/config.c
remove focusLast and focusLastOnDesktop
[chaz/openbox] / openbox / config.c
index a3c236fc2cbd96415c3122d72efb48ff69845eb3..4251390c9fcd031fc9d60595e80fcb0e1133d180 100644 (file)
@@ -4,13 +4,11 @@
 #include "prop.h"
 #include "translate.h"
 #include "parser/parse.h"
+#include "openbox.h"
 
 gboolean config_focus_new;
 gboolean config_focus_follow;
-gboolean config_focus_last;
-gboolean config_focus_last_on_desktop;
-gboolean config_focus_popup;
-gboolean config_desktop_popup;
+guint    config_focus_delay;
 
 char *config_theme;
 
@@ -36,17 +34,10 @@ guint config_keyboard_reset_state;
 gint config_mouse_threshold;
 gint config_mouse_dclicktime;
 
-gchar *config_menu_path;
+GSList *config_menu_files;
 
-gchar *expand_tilde(const gchar *f)
-{
-    if (!f)
-        return NULL;
-    else if (f[0] != '~')
-        return g_strdup(f);
-    else
-        return g_strconcat(g_get_home_dir(), f+1, NULL);
-}
+gint config_resist_win;
+gint config_resist_edge;
 
 /*
 
@@ -78,7 +69,7 @@ static void parse_key(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
         if (parse_attr_string("key", n, &key)) {
             keylist = g_list_append(keylist, key);
 
-            parse_key(i, doc, n->xmlChildrenNode, keylist);
+            parse_key(i, doc, n->children, keylist);
 
             it = g_list_last(keylist);
             g_free(it->data);
@@ -89,20 +80,9 @@ static void parse_key(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
     if (keylist) {
         nact = parse_find_node("action", node);
         while (nact) {
-            if ((action = action_parse(doc, nact))) {
-                /* validate that its okay for a key binding */
-                if (action->func == action_moveresize &&
-                    action->data.moveresize.corner !=
-                    prop_atoms.net_wm_moveresize_move_keyboard &&
-                    action->data.moveresize.corner !=
-                    prop_atoms.net_wm_moveresize_size_keyboard) {
-                    action_free(action);
-                    action = NULL;
-                }
-
-                if (action)
-                    keyboard_bind(keylist, action);
-            }
+            if ((action = action_parse(i, doc, nact,
+                                       OB_USER_ACTION_KEYBOARD_KEY)))
+                keyboard_bind(keylist, action);
             nact = parse_find_node("action", nact->next);
         }
     }
@@ -111,7 +91,7 @@ static void parse_key(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
 static void parse_keyboard(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
                            void *d)
 {
-    parse_key(i, doc, node->xmlChildrenNode, NULL);
+    parse_key(i, doc, node->children, NULL);
 }
 
 /*
@@ -130,10 +110,11 @@ static void parse_mouse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
     xmlNodePtr n, nbut, nact;
     char *buttonstr;
     char *contextstr;
+    ObUserAction uact;
     ObMouseAction mact;
     ObAction *action;
 
-    node = node->xmlChildrenNode;
+    node = node->children;
     
     if ((n = parse_find_node("dragThreshold", node)))
         config_mouse_threshold = parse_int(doc, n);
@@ -144,48 +125,31 @@ static void parse_mouse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
     while (n) {
         if (!parse_attr_string("name", n, &contextstr))
             goto next_n;
-        nbut = parse_find_node("mousebind", n->xmlChildrenNode);
+        nbut = parse_find_node("mousebind", n->children);
         while (nbut) {
             if (!parse_attr_string("button", nbut, &buttonstr))
                 goto next_nbut;
-            if (parse_attr_contains("press", nbut, "action"))
+            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"))
+            } 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"))
+            } 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"))
+            } 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"))
+            } else if (parse_attr_contains("drag", nbut, "action")) {
+                uact = OB_USER_ACTION_MOUSE_MOTION;
                 mact = OB_MOUSE_ACTION_MOTION;
-            else
+            else
                 goto next_nbut;
-            nact = parse_find_node("action", nbut->xmlChildrenNode);
+            nact = parse_find_node("action", nbut->children);
             while (nact) {
-                if ((action = action_parse(doc, nact))) {
-                    /* validate that its okay for a mouse binding*/
-                    if (mact == OB_MOUSE_ACTION_MOTION) {
-                        if (action->func != action_moveresize ||
-                            action->data.moveresize.corner ==
-                            prop_atoms.net_wm_moveresize_move_keyboard ||
-                            action->data.moveresize.corner ==
-                            prop_atoms.net_wm_moveresize_size_keyboard) {
-                            action_free(action);
-                            action = NULL;
-                        }
-                    } else {
-                        if (action->func == action_moveresize &&
-                            action->data.moveresize.corner !=
-                            prop_atoms.net_wm_moveresize_move_keyboard &&
-                            action->data.moveresize.corner !=
-                            prop_atoms.net_wm_moveresize_size_keyboard) {
-                            action_free(action);
-                            action = NULL;
-                        }
-                    }
-                    if (action)
-                        mouse_bind(buttonstr, contextstr, mact, action);
-                }
+                if ((action = action_parse(i, doc, nact, uact)))
+                    mouse_bind(buttonstr, contextstr, mact, action);
                 nact = parse_find_node("action", nact->next);
             }
             g_free(buttonstr);
@@ -203,18 +167,14 @@ static void parse_focus(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
 {
     xmlNodePtr n;
 
-    node = node->xmlChildrenNode;
+    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("focusLast", node)))
-        config_focus_last = parse_bool(doc, n);
-    if ((n = parse_find_node("focusLastOnDesktop", node)))
-        config_focus_last_on_desktop = parse_bool(doc, n);
-    if ((n = parse_find_node("cyclingDialog", node)))
-        config_focus_popup = parse_bool(doc, n);
+    if ((n = parse_find_node("focusDelay", node)))
+        config_focus_delay = parse_int(doc, n) * 1000;
 }
 
 static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
@@ -222,13 +182,17 @@ static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
 {
     xmlNodePtr n;
 
-    node = node->xmlChildrenNode;
+    node = node->children;
+
+    if ((n = parse_find_node("name", node))) {
+        gchar *c;
 
-    if ((n = parse_find_node("theme", node))) {
         g_free(config_theme);
-        config_theme = parse_string(doc, n);
+        c = parse_string(doc, n);
+        config_theme = ob_expand_tilde(c);
+        g_free(c);
     }
-    if ((n = parse_find_node("titlelayout", node))) {
+    if ((n = parse_find_node("titleLayout", node))) {
         g_free(config_title_layout);
         config_title_layout = parse_string(doc, n);
     }
@@ -239,7 +203,7 @@ static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
 {
     xmlNodePtr n;
 
-    node = node->xmlChildrenNode;
+    node = node->children;
     
     if ((n = parse_find_node("number", node)))
         config_desktops_num = parse_int(doc, n);
@@ -252,15 +216,13 @@ static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
         g_slist_free(config_desktops_names);
         config_desktops_names = NULL;
 
-        nname = parse_find_node("name", n->xmlChildrenNode);
+        nname = parse_find_node("name", n->children);
         while (nname) {
             config_desktops_names = g_slist_append(config_desktops_names,
                                                    parse_string(doc, nname));
             nname = parse_find_node("name", nname->next);
         }
     }
-    if ((n = parse_find_node("cyclingDialog", node)))
-        config_desktop_popup = parse_bool(doc, n);
 }
 
 static void parse_resize(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
@@ -268,7 +230,7 @@ static void parse_resize(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
 {
     xmlNodePtr n;
 
-    node = node->xmlChildrenNode;
+    node = node->children;
     
     if ((n = parse_find_node("drawContents", node)))
         config_redraw_resize = parse_bool(doc, n);
@@ -278,7 +240,7 @@ static void parse_dock(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, void *d)
 {
     xmlNodePtr n;
 
-    node = node->xmlChildrenNode;
+    node = node->children;
 
     if ((n = parse_find_node("position", node))) {
         if (parse_contains("TopLeft", doc, n))
@@ -331,30 +293,40 @@ static void parse_dock(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, void *d)
     if ((n = parse_find_node("autoHide", node)))
         config_dock_hide = parse_bool(doc, n);
     if ((n = parse_find_node("hideTimeout", node)))
-        config_dock_hide_timeout = parse_int(doc, n);
+        config_dock_hide_timeout = parse_int(doc, n) * 1000;
 }
 
 static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, void *d)
 {
-    xmlNodePtr n;
-
-    node = node->xmlChildrenNode;
-    if ((n = parse_find_node("location", node))) {
-        gchar *c;
-
-        c = parse_string(doc, n);
-        config_menu_path = expand_tilde(c);
-        g_free(c);
+    for (node = node->children; node; node = node->next) {
+        if (!xmlStrcasecmp(node->name, (const xmlChar*) "file")) {
+            gchar *c;
+
+            c = parse_string(doc, node);
+            config_menu_files = g_slist_append(config_menu_files,
+                                               ob_expand_tilde(c));
+            g_free(c);
+        }
     }
 }
    
+static void parse_resistance(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, 
+                             void *d)
+{
+    xmlNodePtr n;
+
+    node = node->children;
+    if ((n = parse_find_node("strength", node)))
+        config_resist_win = parse_int(doc, n);
+    if ((n = parse_find_node("screen_edge_strength", node)))
+        config_resist_edge = parse_int(doc, n);
+}
+
 void config_startup(ObParseInst *i)
 {
     config_focus_new = TRUE;
     config_focus_follow = FALSE;
-    config_focus_last = TRUE;
-    config_focus_last_on_desktop = TRUE;
-    config_focus_popup = TRUE;
+    config_focus_delay = 0;
 
     parse_register(i, "focus", parse_focus, NULL);
 
@@ -366,7 +338,6 @@ void config_startup(ObParseInst *i)
 
     config_desktops_num = 4;
     config_desktops_names = NULL;
-    config_desktop_popup = TRUE;
 
     parse_register(i, "desktops", parse_desktops, NULL);
 
@@ -381,7 +352,7 @@ void config_startup(ObParseInst *i)
     config_dock_y = 0;
     config_dock_orient = OB_ORIENTATION_VERT;
     config_dock_hide = FALSE;
-    config_dock_hide_timeout = 3000;
+    config_dock_hide_timeout = 300;
 
     parse_register(i, "dock", parse_dock, NULL);
 
@@ -395,7 +366,12 @@ void config_startup(ObParseInst *i)
 
     parse_register(i, "mouse", parse_mouse, NULL);
 
-    config_menu_path = NULL;
+    config_resist_win = 10;
+    config_resist_edge = 20;
+
+    parse_register(i, "resistance", parse_resistance, NULL);
+
+    config_menu_files = NULL;
 
     parse_register(i, "menu", parse_menu, NULL);
 }
@@ -406,7 +382,13 @@ void config_shutdown()
 
     g_free(config_theme);
 
-    for (it = config_desktops_names; it; it = it->next)
+    g_free(config_title_layout);
+
+    for (it = config_desktops_names; it; it = g_slist_next(it))
         g_free(it->data);
     g_slist_free(config_desktops_names);
+
+    for (it = config_menu_files; it; it = g_slist_next(it))
+        g_free(it->data);
+    g_slist_free(config_menu_files);
 }
This page took 0.03287 seconds and 4 git commands to generate.