static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n; Options *o; o = g_slice_new0(Options); o->x.pos = G_MININT; o->y.pos = G_MININT; o->w = G_MININT; o->h = G_MININT; o->monitor = CURRENT_MONITOR; if ((n = obt_xml_find_node(node, "x"))) config_parse_gravity_coord(n, &o->x); if ((n = obt_xml_find_node(node, "y"))) config_parse_gravity_coord(n, &o->y); if ((n = obt_xml_find_node(node, "width"))) { gchar *s = obt_xml_node_string(n); if (g_ascii_strcasecmp(s, "current") != 0) config_parse_relative_number(s, &o->w, &o->w_denom); g_free(s); } if ((n = obt_xml_find_node(node, "height"))) { gchar *s = obt_xml_node_string(n); if (g_ascii_strcasecmp(s, "current") != 0) config_parse_relative_number(s, &o->h, &o->h_denom); g_free(s); } if ((n = obt_xml_find_node(node, "monitor"))) { gchar *s = obt_xml_node_string(n); if (g_ascii_strcasecmp(s, "current") != 0) { if (!g_ascii_strcasecmp(s, "all")) o->monitor = ALL_MONITORS; else if(!g_ascii_strcasecmp(s, "next")) o->monitor = NEXT_MONITOR; else if(!g_ascii_strcasecmp(s, "prev")) o->monitor = PREV_MONITOR; else o->monitor = obt_xml_node_int(n) - 1; } g_free(s); } return o; }
static gpointer setup_func(xmlNodePtr node) { xmlNodePtr n, c; Options *o; gboolean x_pos_given = FALSE; o = g_slice_new0(Options); o->monitor = -1; if ((n = obt_xml_find_node(node, "menu"))) o->name = obt_xml_node_string(n); if ((n = obt_xml_find_node(node, "position"))) { if ((c = obt_xml_find_node(n->children, "x"))) { if (!obt_xml_node_contains(c, "default")) { config_parse_gravity_coord(c, &o->position.x); x_pos_given = TRUE; } } if (x_pos_given && (c = obt_xml_find_node(n->children, "y"))) { if (!obt_xml_node_contains(c, "default")) { config_parse_gravity_coord(c, &o->position.y); o->use_position = TRUE; } } /* unlike client placement, x/y is needed to specify a monitor, * either it's under the mouse or it's in an exact actual position */ if (o->use_position && (c = obt_xml_find_node(n->children, "monitor"))) { if (!obt_xml_node_contains(c, "default")) { gchar *s = obt_xml_node_string(c); if (!g_ascii_strcasecmp(s, "mouse")) o->monitor_type = OB_PLACE_MONITOR_MOUSE; else if (!g_ascii_strcasecmp(s, "active")) o->monitor_type = OB_PLACE_MONITOR_ACTIVE; else if (!g_ascii_strcasecmp(s, "primary")) o->monitor_type = OB_PLACE_MONITOR_PRIMARY; else if (!g_ascii_strcasecmp(s, "all")) o->monitor_type = OB_PLACE_MONITOR_ALL; else o->monitor = obt_xml_node_int(c) - 1; g_free(s); } } } return o; }