Merge branch 'oldman' of git://github.com/xorg62/wmfs

Conflicts:
	src/config.c
This commit is contained in:
Philippe Pepiot 2010-04-14 21:15:56 +02:00
commit 657dc33d63
9 changed files with 151 additions and 5 deletions

View File

@ -1176,4 +1176,82 @@ uicb_ignore_next_client_rules(uicb_t cmd)
return;
}
/** Show clientlist menu
*\param cmd uicb_t type
*/
void
uicb_clientlist(uicb_t cmd)
{
int i, d, u, x, y;
int n = 0;
Window w;
Client *c = NULL;
Bool is_sel;
for(c = clients; c; c = c->next)
if(c->tag == seltag[selscreen] && c->screen == selscreen)
++n;
if(n > 0)
{
if(clientlist.nitem)
menu_clear(&clientlist);
menu_init(&clientlist, "clientlist", n,
/* Colors */
conf.menu[0].colors.focus.bg,
conf.menu[0].colors.focus.fg,
conf.menu[0].colors.normal.bg,
conf.menu[0].colors.normal.fg);
for(i = 0, c = clients; c; c = c->next)
if(c->tag == seltag[selscreen] && c->screen == selscreen)
{
sprintf(clist_index[i].key, "%d", i);
clist_index[i].client = c;
menu_new_item(&clientlist.item[i], c->title,
uicb_client_select, clist_index[i].key);
if(c == sel)
clientlist.item[i].check = name_to_func("check_clist", func_list);
i++;
}
clist_index[i].client = NULL;
XQueryPointer(dpy, ROOT, &w, &w, &x, &y, &d, &d, (uint *)&u);
menu_draw(clientlist, x, y);
}
return;
}
/** Select client
*\param cmd uicb_t type clientlist index
*/
void
uicb_client_select(uicb_t cmd)
{
int i;
for(i = 0; i < MAXCLIST && clist_index[i].client; ++i)
if(!strcmp(cmd, clist_index[i].key))
{
client_focus(clist_index[i].client);
client_raise(clist_index[i].client);
}
return;
}
/** Check clientlist menu fake function
* \param cmd uicb_t type unused
*/
Bool
uicb_checkclist(uicb_t cmd)
{
return True;
}

View File

@ -79,7 +79,9 @@ func_name_list_t tmp_func_list[] =
{"ignore_next_client_rules", uicb_ignore_next_client_rules },
{"check_max", uicb_checkmax },
{"check_free", uicb_checkfree },
{"check_layout", uicb_checklayout }
{"check_layout", uicb_checklayout },
{"clientlist", uicb_clientlist },
{"check_clist", uicb_checkclist }
};
key_name_list_t key_list[] =
@ -166,7 +168,7 @@ conf_misc_section(void)
void
conf_bar_section(void)
{
struct conf_sec *bar, **mouse;
struct conf_sec *bar, **mouse, *selbar;
bar = fetch_section_first(NULL, "bar");
@ -186,6 +188,22 @@ conf_bar_section(void)
free(mouse);
selbar = fetch_section_first(bar, "selbar");
conf.bars.selbar = selbar ? True : False;
conf.selbar.bg = getcolor(fetch_opt_first(selbar, "#000000", "bg").str);
conf.selbar.fg = fetch_opt_first(selbar, "#ffffff", "fg").str;
mouse = fetch_section(selbar, "mouse");
if ((conf.selbar.nmouse = fetch_section_count(mouse)))
{
conf.selbar.mouse = emalloc(conf.selbar.nmouse, sizeof(MouseBinding));
mouse_section(conf.selbar.mouse, mouse);
}
free(mouse);
return;
}

View File

@ -98,6 +98,15 @@ buttonpress(XButtonEvent *ev)
if(conf.bars.mouse[j].func)
conf.bars.mouse[j].func(conf.bars.mouse[j].cmd);
/* Selbar */
if(ev->window == infobar[selscreen].selbar->win)
for(i = 0; i < conf.selbar.nmouse; ++i)
if(conf.selbar.mouse[i].tag == seltag[conf.selbar.mouse[i].screen]
|| conf.selbar.mouse[i].tag < 0)
if(ev->button == conf.selbar.mouse[i].button)
if(conf.selbar.mouse[i].func)
conf.selbar.mouse[i].func(conf.selbar.mouse[i].cmd);
/* Tags */
for(i = 1; i < conf.ntag[selscreen] + 1; ++i)
if(ev->window == infobar[selscreen].tags[i]->win)

View File

@ -108,7 +108,7 @@ infobar_init(void)
: infobar[sc].layout_button->geo.x + infobar[sc].layout_button->geo.width + PAD / 2), 1,
(sel) ? textw(sel->title) + PAD : 1,
infobar[sc].geo.height - 2,
conf.colors.bar, conf.colors.text, False, False, False);
conf.selbar.bg, conf.selbar.fg, False, False, False);
/* Map/Refresh all */
barwin_map(infobar[sc].bar);

View File

@ -315,3 +315,14 @@ uicb_menu(uicb_t cmd)
return;
}
void
menu_clear(Menu *menu)
{
/*menu->item = emalloc(sizeof(MenuItem), nitem);*/
IFREE(menu->item);
menu->nitem = 0;
return;
}

View File

@ -373,6 +373,13 @@ typedef struct
Bool selbar;
} bars;
struct
{
char *fg;
uint bg;
MouseBinding *mouse;
int nmouse;
} selbar;
struct
{
char *background_command;
MouseBinding *mouse;

View File

@ -118,6 +118,7 @@ quit(void)
IFREE(conf.launcher);
IFREE(conf.bars.mouse);
IFREE(conf.selbar.mouse);
IFREE(conf.titlebar.button);
IFREE(conf.client.mouse);
IFREE(conf.root.mouse);

View File

@ -108,6 +108,7 @@
#define CHECK(x) if(!(x)) return
#define IFREE(x) if(x) free(x)
#define LEN(x) (sizeof(x) / sizeof((x)[0]))
#define MAXCLIST (64)
/* barwin.c */
BarWindow *barwin_create(Window parent,
@ -192,7 +193,9 @@ void uicb_client_screen_prev(uicb_t);
void uicb_client_move(uicb_t cmd);
void uicb_client_resize(uicb_t cmd);
void uicb_ignore_next_client_rules(uicb_t cmd);
void uicb_clientlist(uicb_t cmd);
void uicb_client_select(uicb_t cmd);
Bool uicb_checkclist(uicb_t);
/* ewmh.c */
void ewmh_init_hints(void);
@ -241,6 +244,7 @@ void menu_focus_item(Menu *menu, int item, BarWindow *winitem[]);
void menu_draw_item_name(Menu *menu, int item, BarWindow *winitem[]);
int menu_get_longer_string(MenuItem *mi, int nitem);
void uicb_menu(uicb_t cmd);
void menu_clear(Menu *menu);
/* launcher.c */
void launcher_execute(Launcher *launcher);
@ -412,6 +416,13 @@ int *seltag;
int *prevseltag;
Menu menulayout;
/* ClientList */
Menu clientlist;
struct clndx {
char key[4];
Client *client;
} clist_index[MAXCLIST];
/* Important Client */
Client *clients;
Client *sel;

View File

@ -18,7 +18,18 @@
bg = "#191919"
fg = "#D4D4D4"
border = true
selbar = false
# selbar = false #not worked now, see section [selbar]
# Remove this section to disable the selbar.
[selbar]
bg = "#191919"
fg = "#D4D4ff"
[mouse] button = "3" func = "clientlist" [/mouse]
[mouse] button = "4" func = "client_next" [/mouse]
[mouse] button = "5" func = "client_prev" [/mouse]
[/selbar]
[/bar]
[layouts]