Beispiel #1
0
gint tree_get_int(const gchar *node, gint def)
{
    xmlNodePtr n;
    gchar *d;

    d = g_strdup_printf("%d", def);
    n = tree_get_node(node, d);
    g_free(d);
    return obt_xml_node_int(n);
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
}