]> Dogcows Code - chaz/openbox/blobdiff - openbox/config.c
Some fixes for the submenu hide delay code
[chaz/openbox] / openbox / config.c
index 99aa57f4773b0012174aca396ee5e91fcef7efac..240606a43e591d3f3f7a1166bc809a162cbffadc 100644 (file)
@@ -40,6 +40,9 @@ ObPlacePolicy  config_place_policy;
 gboolean       config_place_center;
 ObPlaceMonitor config_place_monitor;
 
+guint          config_primary_monitor_index;
+ObPlaceMonitor config_primary_monitor;
+
 StrutPartial config_margins;
 
 gchar   *config_theme;
@@ -88,7 +91,9 @@ gint config_mouse_screenedgetime;
 guint    config_menu_hide_delay;
 gboolean config_menu_middle;
 guint    config_submenu_show_delay;
+guint    config_submenu_hide_delay;
 gboolean config_menu_client_list_icons;
+gboolean config_menu_manage_desktops;
 
 GSList *config_menu_files;
 
@@ -100,6 +105,7 @@ GSList *config_per_app_settings;
 ObAppSettings* config_create_app_settings(void)
 {
     ObAppSettings *settings = g_new0(ObAppSettings, 1);
+    settings->type = -1;
     settings->decor = -1;
     settings->shade = -1;
     settings->monitor = -1;
@@ -123,8 +129,10 @@ void config_app_settings_copy_non_defaults(const ObAppSettings *src,
     g_assert(src != NULL);
     g_assert(dst != NULL);
 
+    copy_if(type, (ObClientType)-1);
     copy_if(decor, -1);
     copy_if(shade, -1);
+    copy_if(monitor, -1);
     copy_if(focus, -1);
     copy_if(desktop, 0);
     copy_if(layer, -2);
@@ -192,15 +200,16 @@ 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;
-    gboolean name_set, class_set;
+    gchar *name = NULL, *class = NULL, *role = NULL, *type = NULL;
+    gboolean name_set, class_set, type_set;
     gboolean x_pos_given;
 
     while (app) {
-        name_set = class_set = x_pos_given = FALSE;
+        name_set = class_set = type_set = x_pos_given = FALSE;
 
         class_set = parse_attr_string("class", app, &class);
         name_set = parse_attr_string("name", app, &name);
+        type_set = parse_attr_string("type", app, &type);
         if (class_set || name_set) {
             xmlNodePtr n, c;
             ObAppSettings *settings = config_create_app_settings();;
@@ -211,6 +220,25 @@ static void parse_per_app_settings(ObParseInst *inst, xmlDocPtr doc,
             if (class_set)
                 settings->class = g_pattern_spec_new(class);
 
+            if (type_set) {
+                if (!g_ascii_strcasecmp(type, "normal"))
+                    settings->type = OB_CLIENT_TYPE_NORMAL;
+                else if (!g_ascii_strcasecmp(type, "dialog"))
+                    settings->type = OB_CLIENT_TYPE_DIALOG;
+                else if (!g_ascii_strcasecmp(type, "splash"))
+                    settings->type = OB_CLIENT_TYPE_SPLASH;
+                else if (!g_ascii_strcasecmp(type, "utility"))
+                    settings->type = OB_CLIENT_TYPE_UTILITY;
+                else if (!g_ascii_strcasecmp(type, "menu"))
+                    settings->type = OB_CLIENT_TYPE_MENU;
+                else if (!g_ascii_strcasecmp(type, "toolbar"))
+                    settings->type = OB_CLIENT_TYPE_TOOLBAR;
+                else if (!g_ascii_strcasecmp(type, "dock"))
+                    settings->type = OB_CLIENT_TYPE_DOCK;
+                else if (!g_ascii_strcasecmp(type, "desktop"))
+                    settings->type = OB_CLIENT_TYPE_DESKTOP;
+            }
+
             if (parse_attr_string("role", app, &role))
                 settings->role = g_pattern_spec_new(role);
 
@@ -244,7 +272,7 @@ static void parse_per_app_settings(ObParseInst *inst, xmlDocPtr doc,
                         if (!g_ascii_strcasecmp(s, "mouse"))
                             settings->monitor = 0;
                         else
-                            settings->monitor = parse_int(doc, c) + 1;
+                            settings->monitor = parse_int(doc, c);
                         g_free(s);
                     }
 
@@ -420,8 +448,13 @@ 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)))
+    if ((n = parse_find_node("screenEdgeWarpTime", node))) {
         config_mouse_screenedgetime = parse_int(doc, n);
+        /* minimum value of 25 for this property, when it is 1 and you hit the
+           edge it basically never stops */
+        if (config_mouse_screenedgetime && config_mouse_screenedgetime < 25)
+            config_mouse_screenedgetime = 25;
+    }
 
     n = parse_find_node("context", node);
     while (n) {
@@ -500,6 +533,13 @@ static void parse_placement(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
         else if (parse_contains("mouse", doc, n))
             config_place_monitor = OB_PLACE_MONITOR_MOUSE;
     }
+    if ((n = parse_find_node("primaryMonitor", node))) {
+        config_primary_monitor_index = parse_int(doc, n);
+        if (!config_primary_monitor_index) {
+            if (parse_contains("mouse", doc, n))
+                config_primary_monitor = OB_PLACE_MONITOR_MOUSE;
+        }
+    }
 }
 
 static void parse_margins(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
@@ -674,6 +714,11 @@ static void parse_resize(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
                 if ((n2 = parse_find_node("y", n->children)))
                     config_parse_gravity_coord(doc, n2,
                                                &config_resize_popup_fixed.y);
+
+                config_resize_popup_fixed.x.pos =
+                    MAX(config_resize_popup_fixed.x.pos, 0);
+                config_resize_popup_fixed.y.pos =
+                    MAX(config_resize_popup_fixed.y.pos, 0);
             }
         }
     }
@@ -750,7 +795,7 @@ static void parse_dock(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
             config_dock_app_move_button = b;
             config_dock_app_move_modifiers = s;
         } else {
-            g_message(_("Invalid button '%s' specified in config file"), str);
+            g_message(_("Invalid button \"%s\" specified in config file"), str);
         }
         g_free(str);
     }
@@ -760,23 +805,27 @@ static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
                        gpointer data)
 {
     xmlNodePtr n;
-    for (node = node->children; node; node = node->next) {
-        if (!xmlStrcasecmp(node->name, (const xmlChar*) "file")) {
-            gchar *c;
+    node = node->children;
 
-            c = parse_string(doc, node);
+    if ((n = parse_find_node("hideDelay", node)))
+        config_menu_hide_delay = parse_int(doc, n);
+    if ((n = parse_find_node("middle", node)))
+        config_menu_middle = parse_bool(doc, n);
+    if ((n = parse_find_node("submenuShowDelay", node)))
+        config_submenu_show_delay = parse_int(doc, n);
+    if ((n = parse_find_node("submenuHideDelay", node)))
+        config_submenu_hide_delay = parse_int(doc, n);
+    if ((n = parse_find_node("applicationIcons", node)))
+        config_menu_client_list_icons = parse_bool(doc, n);
+    if ((n = parse_find_node("manageDesktops", node)))
+        config_menu_manage_desktops = parse_bool(doc, n);
+
+    while ((node = parse_find_node("file", node))) {
+            gchar *c = parse_string(doc, node);
             config_menu_files = g_slist_append(config_menu_files,
                                                parse_expand_tilde(c));
             g_free(c);
-        }
-        if ((n = parse_find_node("hideDelay", node)))
-            config_menu_hide_delay = parse_int(doc, n);
-        if ((n = parse_find_node("middle", node)))
-            config_menu_middle = parse_bool(doc, n);
-        if ((n = parse_find_node("submenuShowDelay", node)))
-            config_submenu_show_delay = parse_int(doc, n);
-        if ((n = parse_find_node("applicationIcons", node)))
-            config_menu_client_list_icons = parse_bool(doc, n);
+            node = node->next;
     }
 }
 
@@ -895,6 +944,9 @@ void config_startup(ObParseInst *i)
     config_place_center = TRUE;
     config_place_monitor = OB_PLACE_MONITOR_ANY;
 
+    config_primary_monitor_index = 1;
+    config_primary_monitor = OB_PLACE_MONITOR_ACTIVE;
+
     parse_register(i, "placement", parse_placement, NULL);
 
     STRUT_PARTIAL_SET(config_margins, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
@@ -966,8 +1018,10 @@ void config_startup(ObParseInst *i)
 
     config_menu_hide_delay = 250;
     config_menu_middle = FALSE;
-    config_submenu_show_delay = 0;
+    config_submenu_show_delay = 200;
+    config_submenu_hide_delay = 400;
     config_menu_client_list_icons = TRUE;
+    config_menu_manage_desktops = TRUE;
     config_menu_files = NULL;
 
     parse_register(i, "menu", parse_menu, NULL);
This page took 0.026763 seconds and 4 git commands to generate.