unsigned int stringToEdgeMask(const char *edge) { unsigned int edgeMask = 0; char *needle; int i; for (i = 0; i < SCREEN_EDGE_NUM; i++) { needle = strstr(edge, edgeToString(i)); if (needle) { if (needle != edge && isalnum(*(needle - 1))) continue; needle += strlen(edgeToString(i)); if (*needle && isalnum(*needle)) continue; edgeMask |= 1 << i; } } return edgeMask; }
char *edgeMaskToString(unsigned int edgeMask) { char *edge = NULL; int i; for (i = 0; i < SCREEN_EDGE_NUM; i++) { if (edgeMask & (1 << i)) { if (edge) edge = stringAppend(edge, " | "); edge = stringAppend(edge, edgeToString(i)); } } if (!edge) return strdup(""); return edge; }
static void initEdgeValue (CompDisplay *d, CompOptionValue *v, CompActionState state, xmlDocPtr doc, xmlNodePtr node) { xmlNodePtr child; xmlChar *value; memset (&v->action, 0, sizeof (v->action)); v->action.state = state | CompActionStateInitEdge; if (!doc) return; for (child = node->xmlChildrenNode; child; child = child->next) { value = xmlGetProp (child, BAD_CAST "name"); if (value) { int i; for (i = 0; i < SCREEN_EDGE_NUM; i++) if (strcasecmp ((char *) value, edgeToString (i)) == 0) v->action.edgeMask |= (1 << i); xmlFree (value); } } if (state & CompActionStateAutoGrab) { CompScreen *s; for (s = d->screens; s; s = s->next) addScreenAction (s, &v->action); } }