ObPlacePolicy config_place_policy;
gboolean config_place_center;
+gboolean config_place_active;
StrutPartial config_margins;
guint config_screen_firstdesk;
guint config_desktop_popup_time;
-gboolean config_resize_redraw;
-gboolean config_resize_four_corners;
-gint config_resize_popup_show;
-gint config_resize_popup_pos;
+gboolean config_resize_redraw;
+gint config_resize_popup_show;
+ObResizePopupPos config_resize_popup_pos;
+GravityPoint config_resize_popup_fixed;
ObStackingLayer config_dock_layer;
gboolean config_dock_floating;
GSList *config_per_app_settings;
-ObAppSettings* config_create_app_settings()
+ObAppSettings* config_create_app_settings(void)
{
ObAppSettings *settings = g_new0(ObAppSettings, 1);
settings->decor = -1;
if (src->pos_given) {
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->position = src->position;
dst->monitor = src->monitor;
}
}
+static void config_parse_gravity_coord(xmlDocPtr doc, xmlNodePtr node,
+ GravityCoord *c)
+{
+ gchar *s = parse_string(doc, node);
+ if (!g_ascii_strcasecmp(s, "center"))
+ c->center = TRUE;
+ else {
+ if (s[0] == '-')
+ c->opposite = TRUE;
+ if (s[0] == '-' || s[0] == '+')
+ c->pos = atoi(s+1);
+ else
+ c->pos = atoi(s);
+ }
+ g_free(s);
+}
+
/*
<applications>
<application name="aterm">
the monitor, so <position><x>center</x></position><monitor>2</monitor>
will center the window on the second monitor.
*/
-static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc,
- xmlNodePtr node, gpointer d)
+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;
if ((n = parse_find_node("position", app->children))) {
if ((c = parse_find_node("x", n->children)))
if (!parse_contains("default", doc, c)) {
- gchar *s = parse_string(doc, c);
- if (!g_ascii_strcasecmp(s, "center")) {
- settings->center_x = TRUE;
- x_pos_given = TRUE;
- } else {
- 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);
+ config_parse_gravity_coord(doc, c,
+ &settings->position.x);
+ x_pos_given = TRUE;
}
if (x_pos_given && (c = parse_find_node("y", n->children)))
if (!parse_contains("default", doc, c)) {
- gchar *s = parse_string(doc, c);
- if (!g_ascii_strcasecmp(s, "center")) {
- settings->center_y = TRUE;
- settings->pos_given = TRUE;
- } else {
- 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);
+ config_parse_gravity_coord(doc, c,
+ &settings->position.y);
+ settings->pos_given = TRUE;
}
if (settings->pos_given &&
}
static void parse_keyboard(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
gchar *key;
*/
static void parse_mouse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n, nbut, nact;
gchar *buttonstr;
}
static void parse_focus(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
}
static void parse_placement(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
config_place_policy = OB_PLACE_POLICY_MOUSE;
if ((n = parse_find_node("center", node)))
config_place_center = parse_bool(doc, n);
+ if ((n = parse_find_node("active", node)))
+ config_place_active = parse_bool(doc, n);
}
static void parse_margins(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
}
static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
}
static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
}
static void parse_resize(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
config_resize_popup_show = 1;
}
if ((n = parse_find_node("popupPosition", node))) {
- config_resize_popup_pos = parse_int(doc, n);
if (parse_contains("Top", doc, n))
- config_resize_popup_pos = 1;
+ config_resize_popup_pos = OB_RESIZE_POS_TOP;
else if (parse_contains("Center", doc, n))
- config_resize_popup_pos = 0;
+ config_resize_popup_pos = OB_RESIZE_POS_CENTER;
+ else if (parse_contains("Fixed", doc, n)) {
+ config_resize_popup_pos = OB_RESIZE_POS_FIXED;
+
+ if ((n = parse_find_node("popupFixedPosition", node))) {
+ xmlNodePtr n2;
+
+ if ((n2 = parse_find_node("x", n->children)))
+ config_parse_gravity_coord(doc, n2,
+ &config_resize_popup_fixed.x);
+ if ((n2 = parse_find_node("y", n->children)))
+ config_parse_gravity_coord(doc, n2,
+ &config_resize_popup_fixed.y);
+ }
+ }
}
}
static void parse_dock(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
}
static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
for (node = node->children; node; node = node->next) {
}
static void parse_resistance(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
- gpointer d)
+ gpointer data)
{
xmlNodePtr n;
const gchar *actname;
} ObDefKeyBind;
-static void bind_default_keyboard()
+static void bind_default_keyboard(void)
{
ObDefKeyBind *it;
ObDefKeyBind binds[] = {
const gchar *actname;
} ObDefMouseBind;
-static void bind_default_mouse()
+static void bind_default_mouse(void)
{
ObDefMouseBind *it;
ObDefMouseBind binds[] = {
config_place_policy = OB_PLACE_POLICY_SMART;
config_place_center = TRUE;
+ config_place_active = FALSE;
parse_register(i, "placement", parse_placement, NULL);
parse_register(i, "desktops", parse_desktops, NULL);
config_resize_redraw = TRUE;
- config_resize_four_corners = FALSE;
config_resize_popup_show = 1; /* nonpixel increments */
- config_resize_popup_pos = 0; /* center of client */
+ config_resize_popup_pos = OB_RESIZE_POS_CENTER;
+ GRAVITY_COORD_SET(config_resize_popup_fixed.x, 0, FALSE, FALSE);
+ GRAVITY_COORD_SET(config_resize_popup_fixed.y, 0, FALSE, FALSE);
parse_register(i, "resize", parse_resize, NULL);
parse_register(i, "applications", parse_per_app_settings, NULL);
}
-void config_shutdown()
+void config_shutdown(void)
{
GSList *it;