X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fconfig.c;h=109b2150565019374ef40354e716e9364d55abe8;hb=198d98986bdf224ed29361541d19841339953088;hp=b2bfd8dbfb7cbd7bdee6c3a717acb1e46747afff;hpb=07d5674d3984d008de1ecc768a296afbed731e4e;p=chaz%2Fopenbox diff --git a/openbox/config.c b/openbox/config.c index b2bfd8db..109b2150 100644 --- a/openbox/config.c +++ b/openbox/config.c @@ -35,9 +35,9 @@ gboolean config_focus_raise; gboolean config_focus_last; gboolean config_focus_under_mouse; -ObPlacePolicy config_place_policy; -gboolean config_place_center; -gboolean config_place_active; +ObPlacePolicy config_place_policy; +gboolean config_place_center; +ObPlaceMonitor config_place_monitor; StrutPartial config_margins; @@ -54,7 +54,7 @@ RrFont *config_font_menuitem; RrFont *config_font_menutitle; RrFont *config_font_osd; -gint config_desktops_num; +guint config_desktops_num; GSList *config_desktops_names; guint config_screen_firstdesk; guint config_desktop_popup_time; @@ -88,6 +88,7 @@ guint config_menu_hide_delay; gboolean config_menu_middle; guint config_submenu_show_delay; gboolean config_menu_client_list_icons; +gboolean config_menu_manage_desktops; GSList *config_menu_files; @@ -99,6 +100,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; @@ -122,6 +124,7 @@ 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(focus, -1); @@ -136,6 +139,7 @@ void config_app_settings_copy_non_defaults(const ObAppSettings *src, if (src->pos_given) { dst->pos_given = TRUE; + dst->pos_force = src->pos_force; dst->position = src->position; dst->monitor = src->monitor; } @@ -188,15 +192,16 @@ static void config_parse_gravity_coord(xmlNodePtr node, GravityCoord *c) static void parse_per_app_settings(xmlNodePtr node, gpointer d) { xmlNodePtr app = obt_parse_find_node(node->children, "application"); - 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 = obt_parse_attr_string(app, "class", &class); name_set = obt_parse_attr_string(app, "name", &name); + type_set = obt_parse_attr_string(app, "type", &type); if (class_set || name_set) { xmlNodePtr n, c; ObAppSettings *settings = config_create_app_settings();; @@ -207,6 +212,25 @@ static void parse_per_app_settings(xmlNodePtr node, gpointer d) 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 (obt_parse_attr_string(app, "role", &role)) settings->role = g_pattern_spec_new(role); @@ -226,7 +250,7 @@ static void parse_per_app_settings(xmlNodePtr node, gpointer d) } if (x_pos_given && (c = obt_parse_find_node(n->children, "y"))) - if (!obt_parse_node_contains("default", doc, c)) { + if (!obt_parse_node_contains(c, "default")) { config_parse_gravity_coord(c, &settings->position.y); settings->pos_given = TRUE; } @@ -241,6 +265,8 @@ static void parse_per_app_settings(xmlNodePtr node, gpointer d) settings->monitor = obt_parse_node_int(c) + 1; g_free(s); } + + obt_parse_attr_bool(n, "force", &settings->pos_force); } if ((n = obt_parse_find_node(app->children, "focus"))) @@ -481,8 +507,12 @@ static void parse_placement(xmlNodePtr node, gpointer d) config_place_policy = OB_PLACE_POLICY_MOUSE; if ((n = obt_parse_find_node(node, "center"))) config_place_center = obt_parse_node_bool(n); - if ((n = obt_parse_find_node(node, "active"))) - config_place_active = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "monitor"))) { + if (obt_parse_node_contains(n, "active")) + config_place_monitor = OB_PLACE_MONITOR_ACTIVE; + else if (obt_parse_node_contains(n, "mouse")) + config_place_monitor = OB_PLACE_MONITOR_MOUSE; + } } static void parse_margins(xmlNodePtr node, gpointer d) @@ -592,7 +622,7 @@ static void parse_desktops(xmlNodePtr node, gpointer d) if ((n = obt_parse_find_node(node, "number"))) { gint d = obt_parse_node_int(n); if (d > 0) - config_desktops_num = d; + config_desktops_num = (unsigned) d; } if ((n = obt_parse_find_node(node, "firstdesk"))) { gint d = obt_parse_node_int(n); @@ -654,6 +684,11 @@ static void parse_resize(xmlNodePtr node, gpointer d) if ((n2 = obt_parse_find_node(n->children, "y"))) config_parse_gravity_coord(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); } } } @@ -729,7 +764,7 @@ static void parse_dock(xmlNodePtr node, gpointer d) 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); } @@ -755,6 +790,8 @@ static void parse_menu(xmlNodePtr node, gpointer d) config_submenu_show_delay = obt_parse_node_int(n); if ((n = obt_parse_find_node(node, "applicationIcons"))) config_menu_client_list_icons = obt_parse_node_bool(n); + if ((n = obt_parse_find_node(node, "manageDesktops"))) + config_menu_manage_desktops = obt_parse_node_bool(n); } } @@ -870,7 +907,7 @@ void config_startup(ObtParseInst *i) config_place_policy = OB_PLACE_POLICY_SMART; config_place_center = TRUE; - config_place_active = FALSE; + config_place_monitor = OB_PLACE_MONITOR_ANY; obt_parse_register(i, "placement", parse_placement, NULL); @@ -945,6 +982,7 @@ void config_startup(ObtParseInst *i) config_menu_middle = FALSE; config_submenu_show_delay = 0; config_menu_client_list_icons = TRUE; + config_menu_manage_desktops = TRUE; config_menu_files = NULL; obt_parse_register(i, "menu", parse_menu, NULL); @@ -966,6 +1004,7 @@ void config_shutdown(void) RrFontClose(config_font_inactivewindow); RrFontClose(config_font_menuitem); RrFontClose(config_font_menutitle); + RrFontClose(config_font_osd); for (it = config_desktops_names; it; it = g_slist_next(it)) g_free(it->data);