|
|
- /* drag out an area using slop and resize the selected window to it. */
- int
- riodraw(Client *c, const char slopstyle[])
- {
- int i;
- char str[100];
- char strout[100];
- char tmpstring[30] = {0};
- char slopcmd[100] = "slop -f x%xx%yx%wx%hx ";
- int firstchar = 0;
- int counter = 0;
-
- strcat(slopcmd, slopstyle);
- FILE *fp = popen(slopcmd, "r");
-
- while (fgets(str, 100, fp) != NULL)
- strcat(strout, str);
-
- pclose(fp);
-
- if (strlen(strout) < 6)
- return 0;
-
- for (i = 0; i < strlen(strout); i++){
- if (!firstchar) {
- if (strout[i] == 'x')
- firstchar = 1;
- continue;
- }
-
- if (strout[i] != 'x')
- tmpstring[strlen(tmpstring)] = strout[i];
- else {
- riodimensions[counter] = atoi(tmpstring);
- counter++;
- memset(tmpstring,0,strlen(tmpstring));
- }
- }
-
- if (riodimensions[0] <= -40 || riodimensions[1] <= -40 || riodimensions[2] <= 50 || riodimensions[3] <= 50) {
- riodimensions[3] = -1;
- return 0;
- }
-
- if (c) {
- rioposition(c, riodimensions[0], riodimensions[1], riodimensions[2], riodimensions[3]);
- return 0;
- }
-
- return 1;
- }
-
- void
- rioposition(Client *c, int x, int y, int w, int h)
- {
- Monitor *m;
- if ((m = recttomon(x, y, w, h)) && m != c->mon) {
- detach(c);
- detachstack(c);
- c->mon = m;
- c->tags = m->tagset[m->seltags];
- attach(c);
- attachstack(c);
- selmon = m;
- focus(c);
- }
-
- c->isfloating = 1;
- if (riodraw_borders)
- resizeclient(c, x, y, w - (c->bw * 2), h - (c->bw * 2));
- else
- resizeclient(c, x - c->bw, y - c->bw, w, h);
- drawbar(c->mon);
- arrange(c->mon);
-
- riodimensions[3] = -1;
- riopid = 0;
- }
-
- /* drag out an area using slop and resize the selected window to it */
- void
- rioresize(const Arg *arg)
- {
- Client *c = (arg && arg->v ? (Client*)arg->v : selmon->sel);
- if (c)
- riodraw(c, slopresizestyle);
- }
-
- /* Spawn a new window and drag out an area using slop to position it while the window is
- * initialising in the background. */
- void
- riospawn(const Arg *arg)
- {
- riopid = spawncmd(arg);
- riodraw(NULL, slopspawnstyle);
- }
-
- void
- riospawnsync(const Arg *arg)
- {
- if (riodraw(NULL, slopspawnstyle))
- riopid = spawncmd(arg);
- }
|