/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
config.c for the Openbox window manager
- Copyright (c) 2004 Mikael Magnusson
+ Copyright (c) 2006 Mikael Magnusson
Copyright (c) 2003 Ben Jansens
This program is free software; you can redistribute it and/or modify
#include "prop.h"
#include "translate.h"
#include "client.h"
+#include "screen.h"
#include "parser/parse.h"
#include "openbox.h"
gboolean config_theme_keepborder;
gboolean config_theme_hidedisabled;
-gchar *config_title_layout;
+gchar *config_title_layout;
+gboolean config_title_number;
gint config_desktops_num;
GSList *config_desktops_names;
gboolean config_menu_warppointer;
gboolean config_menu_xorstyle;
guint config_menu_hide_delay;
+gboolean config_menu_middle;
guint config_submenu_show_delay;
gboolean config_menu_client_list_icons;
GSList *config_menu_files;
-gint config_resist_win;
-gint config_resist_edge;
-
+gint config_resist_win;
+gint config_resist_edge;
gboolean config_resist_layers_below;
GSList *config_per_app_settings;
Some notes: head is the screen number in a multi monitor
(Xinerama) setup (starting from 0) or mouse, meaning the
head the pointer is on. Default: mouse.
- If decor is false and shade is true, the decor will be
- set to true (otherwise we will have an invisible window).
Layer can be three values, above (Always on top), below
(Always on bottom) and everything else (normal behaviour).
Positions can be an integer value or center, which will
xmlNodePtr node, gpointer d)
{
xmlNodePtr app = parse_find_node("application", node->children);
- gchar *name;
+ gchar *name, *class;
+ gboolean name_set, class_set;
+ gboolean x_pos_given;
while (app) {
- gboolean x_pos_given = FALSE;
- if (parse_attr_string("name", app, &name)) {
+ name_set = class_set = x_pos_given = FALSE;
+
+ class_set = parse_attr_string("class", app, &class);
+ name_set = parse_attr_string("name", app, &name);
+ if (class_set || name_set) {
xmlNodePtr n, c;
ObAppSettings *settings = g_new0(ObAppSettings, 1);
- settings->name = name;
+
+ if (name_set)
+ settings->name = name;
+ else
+ settings->name = NULL;
+
+ if (class_set)
+ settings->class = class;
+ else
+ settings->class = NULL;
+
if (!parse_attr_string("role", app, &settings->role))
settings->role = NULL;
- settings->decor = TRUE;
+ settings->decor = -1;
if ((n = parse_find_node("decor", app->children)))
settings->decor = parse_bool(doc, n);
+ settings->shade = -1;
if ((n = parse_find_node("shade", app->children)))
settings->shade = parse_bool(doc, n);
settings->pos_given = FALSE;
if ((n = parse_find_node("position", app->children))) {
if ((c = parse_find_node("x", n->children))) {
- if (!strcmp(parse_string(doc, c), "center")) {
+ gchar *s = parse_string(doc, c);
+ if (!strcmp(s, "center")) {
settings->center_x = TRUE;
x_pos_given = TRUE;
} else {
settings->position.x = parse_int(doc, c);
x_pos_given = TRUE;
}
+ g_free(s);
}
if (x_pos_given && (c = parse_find_node("y", n->children))) {
- if (!strcmp(parse_string(doc, c), "center")) {
+ gchar *s = parse_string(doc, c);
+ if (!strcmp(s, "center")) {
settings->center_y = TRUE;
settings->pos_given = TRUE;
} else {
settings->position.y = parse_int(doc, c);
settings->pos_given = TRUE;
}
+ g_free(s);
}
}
+ settings->focus = -1;
if ((n = parse_find_node("focus", app->children)))
settings->focus = parse_bool(doc, n);
- if ((n = parse_find_node("desktop", app->children)))
- settings->desktop = parse_int(doc, n);
- else
- settings->desktop = -1;
+ if ((n = parse_find_node("desktop", app->children))) {
+ gchar *s = parse_string(doc, n);
+ if (!strcmp(s, "all"))
+ settings->desktop = DESKTOP_ALL;
+ else
+ settings->desktop = parse_int(doc, n);
+ g_free(s);
+ } else
+ settings->desktop = DESKTOP_ALL - 1; /* lets hope the user
+ * doesn't have 2^32
+ * desktops */
if ((n = parse_find_node("head", app->children))) {
- if (!strcmp(parse_string(doc, n), "mouse"))
+ gchar *s = parse_string(doc, n);
+ if (!strcmp(s, "mouse"))
settings->head = -1;
else
settings->head = parse_int(doc, n);
+ g_free(s);
}
+ settings->layer = -2;
if ((n = parse_find_node("layer", app->children))) {
- if (!strcmp(parse_string(doc, n), "above"))
+ gchar *s = parse_string(doc, n);
+ if (!strcmp(s, "above"))
settings->layer = 1;
- else if (!strcmp(parse_string(doc, n), "below"))
+ else if (!strcmp(s, "below"))
settings->layer = -1;
else
settings->layer = 0;
+ g_free(s);
+ }
+
+ settings->iconic = -1;
+ if ((n = parse_find_node("iconic", app->children)))
+ settings->iconic = parse_bool(doc, n);
+
+ settings->skip_pager = -1;
+ if ((n = parse_find_node("skip_pager", app->children)))
+ settings->skip_pager = parse_bool(doc, n);
+
+ settings->skip_taskbar = -1;
+ if ((n = parse_find_node("skip_taskbar", app->children)))
+ settings->skip_taskbar = parse_bool(doc, n);
+
+ settings->fullscreen = -1;
+ if ((n = parse_find_node("fullscreen", app->children)))
+ settings->fullscreen = parse_bool(doc, n);
+
+ settings->max_horz = -1;
+ settings->max_vert = -1;
+ if ((n = parse_find_node("maximized", app->children))) {
+ gchar *s = parse_string(doc, n);
+ if (!strcmp(s, "horizontal")) {
+ settings->max_horz = TRUE;
+ settings->max_vert = FALSE;
+ } else if (!strcmp(s, "vertical")) {
+ settings->max_horz = FALSE;
+ settings->max_vert = TRUE;
+ } else
+ settings->max_horz = settings->max_vert =
+ parse_bool(doc, n);
+ g_free(s);
}
config_per_app_settings = g_slist_append(config_per_app_settings,
g_free(config_title_layout);
config_title_layout = parse_string(doc, n);
}
+ if ((n = parse_find_node("titleNumber", node)))
+ config_title_number = parse_bool(doc, n);
if ((n = parse_find_node("keepBorder", node)))
config_theme_keepborder = parse_bool(doc, n);
if ((n = parse_find_node("hideDisabled", node)))
config_menu_xorstyle = parse_bool(doc, n);
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("desktopMenuIcons", node)))
config_theme = NULL;
config_title_layout = g_strdup("NLIMC");
+ config_title_number = TRUE;
config_theme_keepborder = TRUE;
config_theme_hidedisabled = FALSE;
config_menu_warppointer = TRUE;
config_menu_xorstyle = TRUE;
config_menu_hide_delay = 250;
+ config_menu_middle = FALSE;
config_submenu_show_delay = 0;
config_menu_client_list_icons = TRUE;
config_menu_files = NULL;
ObAppSettings *itd = (ObAppSettings *)it->data;
g_free(itd->name);
g_free(itd->role);
+ g_free(itd->class);
g_free(it->data);
}
g_slist_free(config_per_app_settings);