Merge branch 'oldman' of git://github.com/xorg62/wmfs
Conflicts: src/config.c
This commit is contained in:
commit
657dc33d63
78
src/client.c
78
src/client.c
@ -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;
|
||||
}
|
||||
|
||||
|
||||
22
src/config.c
22
src/config.c
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
|
||||
11
src/menu.c
11
src/menu.c
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
13
src/wmfs.h
13
src/wmfs.h
@ -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;
|
||||
|
||||
13
wmfsrc.in
13
wmfsrc.in
@ -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]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user