X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fconfig.c;h=c094732ecb30924600d989f83efba4692f747049;hb=ff78d28f8bcdbbdd42fe9501ee81185f67a4166a;hp=1bf63e58134f77afb3b26fc7ea6e62c128f5147b;hpb=7f5347897754164c9688d7e3d882411283c13a55;p=chaz%2Fopenbox diff --git a/openbox/config.c b/openbox/config.c index 1bf63e58..c094732e 100644 --- a/openbox/config.c +++ b/openbox/config.c @@ -38,6 +38,7 @@ gboolean config_focus_under_mouse; ObPlacePolicy config_place_policy; gboolean config_place_center; +gboolean config_place_active; StrutPartial config_margins; @@ -59,10 +60,11 @@ GSList *config_desktops_names; 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; +gboolean config_resize_four_corners; +gint config_resize_popup_show; +ObResizePopupPos config_resize_popup_pos; +GravityPoint config_resize_popup_fixed; ObStackingLayer config_dock_layer; gboolean config_dock_floating; @@ -96,7 +98,7 @@ gint config_resist_edge; 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; @@ -136,16 +138,28 @@ void config_app_settings_copy_non_defaults(const ObAppSettings *src, 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); +} + /* @@ -174,8 +188,8 @@ void config_app_settings_copy_non_defaults(const ObAppSettings *src, the monitor, so center2 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; @@ -211,38 +225,16 @@ static void parse_per_app_settings(ObParseInst *i, xmlDocPtr doc, 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 && @@ -379,7 +371,7 @@ static void parse_key(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } static void parse_keyboard(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer d) + gpointer data) { xmlNodePtr n; gchar *key; @@ -411,7 +403,7 @@ static void parse_keyboard(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, */ static void parse_mouse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer d) + gpointer data) { xmlNodePtr n, nbut, nact; gchar *buttonstr; @@ -468,7 +460,7 @@ static void parse_mouse(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } static void parse_focus(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer d) + gpointer data) { xmlNodePtr n; @@ -489,7 +481,7 @@ static void parse_focus(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } static void parse_placement(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer d) + gpointer data) { xmlNodePtr n; @@ -500,10 +492,12 @@ static void parse_placement(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, 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; @@ -520,7 +514,7 @@ static void parse_margins(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer d) + gpointer data) { xmlNodePtr n; @@ -603,7 +597,7 @@ static void parse_theme(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer d) + gpointer data) { xmlNodePtr n; @@ -640,7 +634,7 @@ static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } static void parse_resize(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer d) + gpointer data) { xmlNodePtr n; @@ -658,16 +652,29 @@ static void parse_resize(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, 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; @@ -744,7 +751,7 @@ static void parse_dock(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer d) + gpointer data) { xmlNodePtr n; for (node = node->children; node; node = node->next) { @@ -768,7 +775,7 @@ static void parse_menu(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, } static void parse_resistance(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, - gpointer d) + gpointer data) { xmlNodePtr n; @@ -785,7 +792,7 @@ typedef struct const gchar *actname; } ObDefKeyBind; -static void bind_default_keyboard() +static void bind_default_keyboard(void) { ObDefKeyBind *it; ObDefKeyBind binds[] = { @@ -808,7 +815,7 @@ typedef struct const gchar *actname; } ObDefMouseBind; -static void bind_default_mouse() +static void bind_default_mouse(void) { ObDefMouseBind *it; ObDefMouseBind binds[] = { @@ -880,6 +887,7 @@ void config_startup(ObParseInst *i) config_place_policy = OB_PLACE_POLICY_SMART; config_place_center = TRUE; + config_place_active = FALSE; parse_register(i, "placement", parse_placement, NULL); @@ -910,7 +918,9 @@ void config_startup(ObParseInst *i) 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); @@ -962,7 +972,7 @@ void config_startup(ObParseInst *i) parse_register(i, "applications", parse_per_app_settings, NULL); } -void config_shutdown() +void config_shutdown(void) { GSList *it;