Use global head for mousebind to free all at quit()

This commit is contained in:
Martin Duquesnoy 2012-01-20 19:56:15 +01:00
parent f5f574b6bd
commit dbac129bf9
6 changed files with 15 additions and 24 deletions

View File

@ -70,9 +70,6 @@ barwin_remove(struct barwin *b)
XDestroyWindow(W->dpy, b->win); XDestroyWindow(W->dpy, b->win);
XFreePixmap(W->dpy, b->dr); XFreePixmap(W->dpy, b->dr);
/* Free mousebinds */
FREE_LIST(mousebind, b->mousebinds);
free(b); free(b);
} }
@ -95,20 +92,6 @@ barwin_resize(struct barwin *b, int w, int h)
XResizeWindow(W->dpy, b->win, w, h); XResizeWindow(W->dpy, b->win, w, h);
} }
void
barwin_mousebind_new(struct barwin *b, unsigned int button, bool u, struct geo a, void (*func)(Uicb), Uicb cmd)
{
struct mousebind *m = (struct mousebind*)xcalloc(1, sizeof(struct mousebind));
m->button = button;
m->use_area = u;
m->area = a;
m->func = func;
m->cmd = cmd;
SLIST_INSERT_HEAD(&b->mousebinds, m, next);
}
/** Refresh the barwin Color /** Refresh the barwin Color
* \param bw barwin pointer * \param bw barwin pointer
*/ */

View File

@ -28,7 +28,6 @@
struct barwin* barwin_new(Window parent, int x, int y, int w, int h, Color fg, Color bg, bool entermask); struct barwin* barwin_new(Window parent, int x, int y, int w, int h, Color fg, Color bg, bool entermask);
void barwin_remove(struct barwin *b); void barwin_remove(struct barwin *b);
void barwin_resize(struct barwin *b, int w, int h); void barwin_resize(struct barwin *b, int w, int h);
void barwin_mousebind_new(struct barwin *b, unsigned int button, bool u, struct geo a, void (*func)(Uicb), Uicb cmd);
void barwin_refresh_color(struct barwin *b); void barwin_refresh_color(struct barwin *b);
#endif /* BARWIN_H */ #endif /* BARWIN_H */

View File

@ -25,10 +25,11 @@ config_mouse_section(struct mbhead *mousebinds, struct conf_sec **sec)
m->button = fetch_opt_first(sec[i], "1", "button").num; m->button = fetch_opt_first(sec[i], "1", "button").num;
m->func = uicb_name_func(fetch_opt_first(sec[i], "", "func").str); m->func = uicb_name_func(fetch_opt_first(sec[i], "", "func").str);
m->cmd = fetch_opt_first(sec[i], "", "cmd").str; m->cmd = xstrdup(fetch_opt_first(sec[i], "", "cmd").str);
m->use_area = false; m->use_area = false;
SLIST_INSERT_HEAD(mousebinds, m, next); SLIST_INSERT_HEAD(mousebinds, m, next);
SLIST_INSERT_HEAD(&W->h.mousebind, m, globnext);
} }
} }

View File

@ -133,14 +133,11 @@ mouse_move(struct client *c, void (*func)(struct client*, struct client*))
} while(ev.type != ButtonRelease); } while(ev.type != ButtonRelease);
if(c2) if(c2)
{
if(last == c2)
_REV_SBORDER(c2);
func(c, c2); func(c, c2);
}
else if(t && t != (struct tag*)c) else if(t && t != (struct tag*)c)
tag_client(t, c); tag_client(t, c);
else
_REV_SBORDER(c);
} }
void void

View File

@ -391,6 +391,7 @@ wmfs_quit(void)
struct rule *r; struct rule *r;
struct theme *t; struct theme *t;
struct client *c; struct client *c;
struct mousebind *m;
/* Will free: /* Will free:
* *
@ -439,6 +440,14 @@ wmfs_quit(void)
free(k); free(k);
} }
while(!SLIST_EMPTY(&W->h.mousebind))
{
m = SLIST_FIRST(&W->h.mousebind);
SLIST_REMOVE_HEAD(&W->h.mousebind, globnext);
free((void*)m->cmd);
free(m);
}
/* FIFO stuffs */ /* FIFO stuffs */
if(W->fifo.fd > 0) if(W->fifo.fd > 0)
{ {

View File

@ -214,6 +214,7 @@ struct mousebind
Uicb cmd; Uicb cmd;
SLIST_ENTRY(mousebind) next; SLIST_ENTRY(mousebind) next;
SLIST_ENTRY(mousebind) snext; SLIST_ENTRY(mousebind) snext;
SLIST_ENTRY(mousebind) globnext;
}; };
struct theme struct theme
@ -297,6 +298,7 @@ struct wmfs
SLIST_HEAD(, barwin) barwin; SLIST_HEAD(, barwin) barwin;
SLIST_HEAD(, theme) theme; SLIST_HEAD(, theme) theme;
SLIST_HEAD(, rule) rule; SLIST_HEAD(, rule) rule;
SLIST_HEAD(, mousebind) mousebind;
} h; } h;
/* /*