gboolean config_unfocus_leave;
ObPlacePolicy config_place_policy;
-gboolean config_place_center;
ObPlaceMonitor config_place_monitor;
guint config_primary_monitor_index;
dst->position = src->position;
/* monitor is copied above */
}
+
+ if (src->size_given) {
+ dst->size_given = TRUE;
+ dst->width_num = src->width_num;
+ dst->width_denom = src->width_denom;
+ dst->height_num = src->height_num;
+ dst->height_denom = src->height_denom;
+ }
}
void config_parse_relative_number(gchar *s, gint *num, gint *denom)
{
xmlNodePtr app = obt_xml_find_node(node->children, "application");
gchar *name = NULL, *class = NULL, *role = NULL, *title = NULL,
- *type_str = NULL;
- gboolean name_set, class_set, type_set, role_set, title_set;
+ *type_str = NULL, *group_name = NULL, *group_class = NULL;
+ gboolean name_set, class_set, type_set, role_set, title_set,
+ group_name_set, group_class_set;
ObClientType type;
gboolean x_pos_given;
+ gboolean width_given;
while (app) {
- x_pos_given = FALSE;
+ x_pos_given = width_given = FALSE;
class_set = obt_xml_attr_string(app, "class", &class);
name_set = obt_xml_attr_string(app, "name", &name);
+ group_class_set = obt_xml_attr_string(app, "groupclass", &group_class);
+ group_name_set = obt_xml_attr_string(app, "groupname", &group_name);
type_set = obt_xml_attr_string(app, "type", &type_str);
role_set = obt_xml_attr_string(app, "role", &role);
title_set = obt_xml_attr_string(app, "title", &title);
type_set = FALSE; /* not valid! */
}
- if (class_set || name_set || role_set || title_set || type_set) {
+ if (class_set || name_set || role_set || title_set || type_set ||
+ group_class_set || group_name_set)
+ {
xmlNodePtr n, c;
ObAppSettings *settings = config_create_app_settings();
if (class_set)
settings->class = g_pattern_spec_new(class);
+ if (group_name_set)
+ settings->group_name = g_pattern_spec_new(group_name);
+
+ if (group_class_set)
+ settings->group_class = g_pattern_spec_new(group_class);
+
if (role_set)
settings->role = g_pattern_spec_new(role);
obt_xml_attr_bool(n, "force", &settings->pos_force);
}
+ if ((n = obt_xml_find_node(app->children, "size"))) {
+ if ((c = obt_xml_find_node(n->children, "width"))) {
+ if (!obt_xml_node_contains(c, "default")) {
+ gchar *s = obt_xml_node_string(c);
+ config_parse_relative_number(
+ s,
+ &settings->width_num,
+ &settings->width_denom);
+ if (settings->width_num > 0 &&
+ settings->width_denom >= 0)
+ {
+ width_given = TRUE;
+ }
+ g_free(s);
+ }
+ }
+
+ if (width_given &&
+ (c = obt_xml_find_node(n->children, "height")))
+ {
+ gchar *s = obt_xml_node_string(c);
+ config_parse_relative_number(
+ s,
+ &settings->height_num,
+ &settings->height_denom);
+ if (settings->height_num > 0 &&
+ settings->height_denom >= 0)
+ {
+ settings->size_given = TRUE;
+ }
+ g_free(s);
+ }
+ }
+
if ((n = obt_xml_find_node(app->children, "focus")))
if (!obt_xml_node_contains(n, "default"))
settings->focus = obt_xml_node_bool(n);
(gpointer) settings);
g_free(name);
g_free(class);
+ g_free(group_name);
+ g_free(group_class);
g_free(role);
g_free(title);
g_free(type_str);
- name = class = role = title = type_str = NULL;
+ name = class = group_name = group_class = role = title = type_str =
+ NULL;
}
app = obt_xml_find_node(app->next, "application");
node = node->children;
- if ((n = obt_xml_find_node(node, "policy"))) {
+ if ((n = obt_xml_find_node(node, "policy")))
if (obt_xml_node_contains(n, "UnderMouse"))
config_place_policy = OB_PLACE_POLICY_MOUSE;
- else if (obt_xml_node_contains(n, "LeastOverlap"))
- config_place_policy = OB_PLACE_POLICY_LEASTOVERLAP;
-
- }
- if ((n = obt_xml_find_node(node, "center")))
- config_place_center = obt_xml_node_bool(n);
if ((n = obt_xml_find_node(node, "monitor"))) {
if (obt_xml_node_contains(n, "active"))
config_place_monitor = OB_PLACE_MONITOR_ACTIVE;
obt_xml_register(i, "focus", parse_focus, NULL);
config_place_policy = OB_PLACE_POLICY_SMART;
- config_place_center = TRUE;
config_place_monitor = OB_PLACE_MONITOR_PRIMARY;
config_primary_monitor_index = 1;
for (it = config_per_app_settings; it; it = g_slist_next(it)) {
ObAppSettings *itd = (ObAppSettings *)it->data;
- if (itd->name) g_pattern_spec_free(itd->name);
- if (itd->role) g_pattern_spec_free(itd->role);
+ if (itd->name) g_pattern_spec_free(itd->name);
+ if (itd->role) g_pattern_spec_free(itd->role);
if (itd->title) g_pattern_spec_free(itd->title);
if (itd->class) g_pattern_spec_free(itd->class);
+ if (itd->group_name) g_pattern_spec_free(itd->group_name);
+ if (itd->group_class) g_pattern_spec_free(itd->group_class);
g_slice_free(ObAppSettings, it->data);
}
g_slist_free(config_per_app_settings);