static int win_resistance;
static int edge_resistance;
-static gboolean resist_windows;
-static void parse_xml(xmlDocPtr doc, xmlNodePtr node, void *d)
+static void parse_xml(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node, void *d)
{
xmlNodePtr n;
win_resistance = parse_int(doc, n);
if ((n = parse_find_node("screen_edge_strength", node)))
edge_resistance = parse_int(doc, n);
- if ((n = parse_find_node("windows", node)))
- resist_windows = parse_bool(doc, n);
}
-void plugin_setup_config()
+void plugin_setup_config(ObParseInst *i)
{
win_resistance = edge_resistance = DEFAULT_RESISTANCE;
- resist_windows = DEFAULT_RESIST_WINDOWS;
- parse_register("resistance", parse_xml, NULL);
+ parse_register(i, "resistance", parse_xml, NULL);
}
static void resist_move(ObClient *c, int *x, int *y)
cb = ct + c->frame->area.height - 1;
/* snap to other clients */
- if (resist_windows)
+ if (win_resistance)
for (it = stacking_list; it != NULL; it = it->next) {
ObClient *target;
int tl, tt, tr, tb; /* 1 past the target's edges on each side */
}
/* get the screen boundaries */
- for (i = 0; i < screen_num_monitors; ++i) {
- area = screen_area_monitor(c->desktop, i);
-
- if (!RECT_INTERSECTS_RECT(*area, c->frame->area))
- continue;
-
- al = area->x;
- at = area->y;
- ar = al + area->width - 1;
- ab = at + area->height - 1;
-
- /* snap to screen edges */
- if (cl >= al && l < al && l >= al - edge_resistance)
- *x = al;
- else if (cr <= ar && r > ar && r <= ar + edge_resistance)
- *x = ar - w + 1;
- if (ct >= at && t < at && t >= at - edge_resistance)
- *y = at;
- else if (cb <= ab && b > ab && b < ab + edge_resistance)
- *y = ab - h + 1;
+ if (edge_resistance) {
+ for (i = 0; i < screen_num_monitors; ++i) {
+ area = screen_area_monitor(c->desktop, i);
+
+ if (!RECT_INTERSECTS_RECT(*area, c->frame->area))
+ continue;
+
+ al = area->x;
+ at = area->y;
+ ar = al + area->width - 1;
+ ab = at + area->height - 1;
+
+ /* snap to screen edges */
+ if (cl >= al && l < al && l >= al - edge_resistance)
+ *x = al;
+ else if (cr <= ar && r > ar && r <= ar + edge_resistance)
+ *x = ar - w + 1;
+ if (ct >= at && t < at && t >= at - edge_resistance)
+ *y = at;
+ else if (cb <= ab && b > ab && b < ab + edge_resistance)
+ *y = ab - h + 1;
+ }
}
}
ab = at + area->height - 1;
/* snap to other windows */
- if (resist_windows) {
+ if (win_resistance) {
for (it = stacking_list; it != NULL; it = it->next) {
if (!WINDOW_IS_CLIENT(it->data))
continue;
}
/* snap to screen edges */
-
- /* horizontal snapping */
- switch (corn) {
- case OB_CORNER_TOPLEFT:
- case OB_CORNER_BOTTOMLEFT:
- dlt = l;
- drb = r + *w - c->frame->area.width;
- if (r <= ar && drb > ar && drb <= ar + edge_resistance)
- *w = ar - l + 1;
- break;
- case OB_CORNER_TOPRIGHT:
- case OB_CORNER_BOTTOMRIGHT:
- dlt = l - *w + c->frame->area.width;
- drb = r;
- if (l >= al && dlt < al && dlt >= al - edge_resistance)
- *w = r - al + 1;
- break;
- }
- /* vertical snapping */
- switch (corn) {
- case OB_CORNER_TOPLEFT:
- case OB_CORNER_TOPRIGHT:
- dlt = t;
- drb = b + *h - c->frame->area.height;
- if (b <= ab && drb > ab && drb <= ab + edge_resistance)
- *h = ab - t + 1;
- break;
- case OB_CORNER_BOTTOMLEFT:
- case OB_CORNER_BOTTOMRIGHT:
- dlt = t - *h + c->frame->area.height;
- drb = b;
- if (t >= at && dlt < at && dlt >= at - edge_resistance)
- *h = b - at + 1;
- break;
+ if (edge_resistance) {
+ /* horizontal snapping */
+ switch (corn) {
+ case OB_CORNER_TOPLEFT:
+ case OB_CORNER_BOTTOMLEFT:
+ dlt = l;
+ drb = r + *w - c->frame->area.width;
+ if (r <= ar && drb > ar && drb <= ar + edge_resistance)
+ *w = ar - l + 1;
+ break;
+ case OB_CORNER_TOPRIGHT:
+ case OB_CORNER_BOTTOMRIGHT:
+ dlt = l - *w + c->frame->area.width;
+ drb = r;
+ if (l >= al && dlt < al && dlt >= al - edge_resistance)
+ *w = r - al + 1;
+ break;
+ }
+
+ /* vertical snapping */
+ switch (corn) {
+ case OB_CORNER_TOPLEFT:
+ case OB_CORNER_TOPRIGHT:
+ dlt = t;
+ drb = b + *h - c->frame->area.height;
+ if (b <= ab && drb > ab && drb <= ab + edge_resistance)
+ *h = ab - t + 1;
+ break;
+ case OB_CORNER_BOTTOMLEFT:
+ case OB_CORNER_BOTTOMRIGHT:
+ dlt = t - *h + c->frame->area.height;
+ drb = b;
+ if (t >= at && dlt < at && dlt >= at - edge_resistance)
+ *h = b - at + 1;
+ break;
+ }
}
}