static int resistance;
static gboolean resist_windows;
-static void parse_assign(char *name, ParseToken *value)
+static void parse_xml(xmlDocPtr doc, xmlNodePtr node, void *d)
{
- if (!g_ascii_strcasecmp(name, "strength")) {
- if (value->type != TOKEN_INTEGER)
- yyerror("invalid value");
- else {
- if (value->data.integer >= 0)
- resistance = value->data.integer;
- }
- } else if (!g_ascii_strcasecmp(name, "windows")) {
- if (value->type != TOKEN_BOOL)
- yyerror("invalid value");
- else
- resist_windows = value->data.bool;
- } else
- yyerror("invalid option");
- parse_free_token(value);
+ xmlNodePtr n;
+
+ if ((n = parse_find_node("strength", node)))
+ resistance = parse_int(doc, n);
+ if ((n = parse_find_node("windows", node)))
+ resist_windows = parse_bool(doc, n);
}
void plugin_setup_config()
resistance = 10;
resist_windows = TRUE;
- parse_reg_section("resistance", NULL, parse_assign);
+ parse_register("resistance", parse_xml, NULL);
}
static void resist_move(Client *c, int *x, int *y)
Client *target;
int tl, tt, tr, tb; /* 1 past the target's edges on each side */
+ if (!WINDOW_IS_CLIENT(it->data))
+ continue;
target = it->data;
/* don't snap to self or non-visibles */
if (!target->frame->visible || target == c) continue;
int al, at, ar, ab; /* screen boundaries */
Client *snapx = NULL, *snapy = NULL;
+ /* don't snap windows with size increments */
+ if (c->size_inc.width > 1 || c->size_inc.height > 1)
+ return;
+
l = c->frame->area.x;
r = l + c->frame->area.width - 1;
t = c->frame->area.y;
/* snap to other windows */
if (resist_windows) {
for (it = stacking_list; it != NULL; it = it->next) {
+ if (!WINDOW_IS_CLIENT(it->data))
+ continue;
target = it->data;
/* don't snap to invisibles or ourself */
*h = b - at + 1;
break;
}
-
- /* round down for size increments */
- *w -= c->frame->area.width + c->frame->size.left + c->frame->size.right;
- *w = *w / c->size_inc.width * c->size_inc.width;
- *w += c->frame->area.width + c->frame->size.left + c->frame->size.right;
-
- *h -= c->frame->area.height + c->frame->size.top + c->frame->size.bottom;
- *h = *h / c->size_inc.height * c->size_inc.height;
- *h += c->frame->area.height + c->frame->size.top + c->frame->size.bottom;
}
static void event(ObEvent *e, void *foo)