mirror of
https://github.com/0intro/wmii
synced 2025-02-15 05:44:53 +03:00
added select to layout interface, now the layouts look pretty good from interface POV
This commit is contained in:
parent
0615c276f9
commit
62ba6045d0
@ -10,6 +10,13 @@
|
||||
#include "wm.h"
|
||||
|
||||
static void handle_after_write_area(IXPServer * s, File * f);
|
||||
static void select_frame(void *obj, char *cmd);
|
||||
|
||||
/* action table for /?/layout/?/ namespace */
|
||||
Action layout_acttbl[] = {
|
||||
{"select", select_frame},
|
||||
{0, 0}
|
||||
};
|
||||
|
||||
Area *alloc_area(Page *p, XRectangle * r, char *layout)
|
||||
{
|
||||
@ -121,7 +128,7 @@ static void iter_after_write_area(void *item, void *aux)
|
||||
Area *a = item;
|
||||
File *file = aux;
|
||||
if (file == a->file[A_CTL]) {
|
||||
/*run_action(file, f, frame_acttbl);*/
|
||||
run_action(file, a, layout_acttbl);
|
||||
return;
|
||||
}
|
||||
if (file == a->file[A_LAYOUT]) {
|
||||
@ -148,3 +155,10 @@ static void handle_after_write_area(IXPServer *s, File *f) {
|
||||
cext_list_iterate(&areas, f, iter_after_write_area);
|
||||
}
|
||||
|
||||
|
||||
static void select_frame(void *obj, char *cmd)
|
||||
{
|
||||
Area *a = obj;
|
||||
a->layout->select(a, cmd);
|
||||
}
|
||||
|
||||
|
@ -248,7 +248,7 @@ static void handle_enternotify(XEvent * e)
|
||||
if (c && c->frame && (ev->serial != ignore_enternotify_crap)) {
|
||||
Frame *old = get_sel_frame();
|
||||
if (old != c->frame) {
|
||||
sel_frame(c->frame, 1);
|
||||
sel_frame(c->frame, 0);
|
||||
draw_frame(old, nil);
|
||||
draw_frame(c->frame, nil);
|
||||
}
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
#include "wm.h"
|
||||
|
||||
static void select_client(void *obj, char *cmd);
|
||||
static void select_client(void *obj, char *arg);
|
||||
static void handle_after_write_frame(IXPServer * s, File * f);
|
||||
static void handle_before_read_frame(IXPServer * s, File * f);
|
||||
|
||||
@ -289,9 +289,10 @@ void handle_frame_buttonpress(XButtonEvent *e, Frame *f)
|
||||
{
|
||||
Align align;
|
||||
size_t size = cext_sizeof(&f->clients);
|
||||
int bindex, cindex = e->x / f->rect.width / size;
|
||||
Client *c = cext_list_get_item(&f->clients, cindex);
|
||||
cext_stack_top_item(&f->clients, c);
|
||||
int bindex, cindex = e->x / (f->rect.width / size);
|
||||
/*fprintf(stderr, "%d (x) / %d (w) / %d (size) = %d (#c)\n", e->x, f->rect.width, size, cindex);*/
|
||||
/*sel_client(cext_list_get_item(&f->clients, cindex));*/
|
||||
cext_stack_top_item(&f->clients, cext_list_get_item(&f->clients, cindex));
|
||||
sel_frame(f, cext_list_get_item_index(&f->area->page->areas, f->area) == 0);
|
||||
if (e->button == Button1) {
|
||||
align = cursor_to_align(f->cursor);
|
||||
@ -339,17 +340,21 @@ void detach_client_from_frame(Client *c)
|
||||
}
|
||||
}
|
||||
|
||||
static void select_client(void *obj, char *cmd)
|
||||
static void select_client(void *obj, char *arg)
|
||||
{
|
||||
Client *c;
|
||||
Frame *f = obj;
|
||||
size_t size = cext_sizeof(&f->clients);
|
||||
if (!f || !cmd || size == 1)
|
||||
if (!f || !arg || size == 1)
|
||||
return;
|
||||
if (!strncmp(cmd, "prev", 5))
|
||||
cext_stack_top_item(&f->clients, cext_stack_get_up_item(&f->clients, cext_stack_get_top_item(&f->clients)));
|
||||
else if (!strncmp(cmd, "next", 5))
|
||||
cext_stack_top_item(&f->clients, cext_stack_get_down_item(&f->clients, cext_stack_get_top_item(&f->clients)));
|
||||
sel_client(cext_stack_get_top_item(&f->clients));
|
||||
c = cext_stack_get_top_item(&f->clients);
|
||||
if (!strncmp(arg, "prev", 5))
|
||||
c = cext_list_get_prev_item(&f->clients, c);
|
||||
else if (!strncmp(arg, "next", 5))
|
||||
c = cext_list_get_next_item(&f->clients, c);
|
||||
else
|
||||
c = cext_list_get_item(&f->clients, _strtonum(arg, 0, cext_sizeof(&f->clients) - 1));
|
||||
sel_client(c);
|
||||
draw_frame(f, nil);
|
||||
}
|
||||
|
||||
|
@ -31,12 +31,13 @@ static void deinit_col(Area * a);
|
||||
static void arrange_col(Area * a);
|
||||
static Bool attach_col(Area * a, Client * c);
|
||||
static void detach_col(Area * a, Client * c);
|
||||
static void resize_col(Frame * f, XRectangle * new, XPoint * pt);
|
||||
static Container *get_frames_col(Area *a);
|
||||
static void resize_col(Frame *f, XRectangle * new, XPoint * pt);
|
||||
static void select_col(Area *a, char *arg);
|
||||
static void aux_col(Area *a, char *aux);
|
||||
static Container *get_frames_col(Area *a);
|
||||
|
||||
static Layout lcol = { "col", init_col, deinit_col, arrange_col, attach_col, detach_col,
|
||||
resize_col, get_frames_col, aux_col };
|
||||
resize_col, select_col, aux_col, get_frames_col };
|
||||
|
||||
void init_layout_column()
|
||||
{
|
||||
@ -375,12 +376,18 @@ static void resize_col(Frame *f, XRectangle *new, XPoint *pt)
|
||||
drop_resize(f, new);
|
||||
}
|
||||
|
||||
static void select_col(Area *a, char *arg)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static void aux_col(Area *a, char *aux)
|
||||
{
|
||||
}
|
||||
|
||||
static Container *get_frames_col(Area *a)
|
||||
{
|
||||
Acme *acme = a->aux;
|
||||
return &acme->frames;
|
||||
}
|
||||
|
||||
static void aux_col(Area *a, char *aux)
|
||||
{
|
||||
}
|
||||
|
@ -16,10 +16,12 @@ static void arrange_float(Area *a);
|
||||
static Bool attach_float(Area *a, Client *c);
|
||||
static void detach_float(Area *a, Client *c);
|
||||
static void resize_float(Frame *f, XRectangle *new, XPoint *pt);
|
||||
static void select_float(Area *a, char *arg);
|
||||
static void aux_float(Area *a, char *aux);
|
||||
static Container *get_frames_float(Area *a);
|
||||
|
||||
static Layout lfloat = { "float", init_float, deinit_float, arrange_float, attach_float,
|
||||
detach_float, resize_float, get_frames_float };
|
||||
detach_float, resize_float, select_float, aux_float, get_frames_float };
|
||||
|
||||
void init_layout_float()
|
||||
{
|
||||
@ -94,6 +96,34 @@ static void resize_float(Frame *f, XRectangle *new, XPoint *pt)
|
||||
f->rect = *new;
|
||||
}
|
||||
|
||||
static Container *get_frames_float(Area *a) {
|
||||
static void select_float(Area *a, char *arg)
|
||||
{
|
||||
Container *c = a->aux;
|
||||
Frame *f, *old;
|
||||
|
||||
f = old = cext_stack_get_top_item(c);
|
||||
if (!f || !arg)
|
||||
return;
|
||||
if (!strncmp(arg, "prev", 5))
|
||||
f = cext_list_get_prev_item(c, f);
|
||||
else if (!strncmp(arg, "next", 5))
|
||||
f = cext_list_get_next_item(c, f);
|
||||
else
|
||||
f = cext_list_get_item(c, _strtonum(arg, 0, cext_sizeof(c) - 1));
|
||||
if (old != f) {
|
||||
sel_frame(f, cext_list_get_item_index(&a->page->areas, a) == 0);
|
||||
center_pointer(f);
|
||||
draw_frame(old, nil);
|
||||
draw_frame(f, nil);
|
||||
}
|
||||
}
|
||||
|
||||
static void aux_float(Area *a, char *aux)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
static Container *get_frames_float(Area *a)
|
||||
{
|
||||
return a->aux;
|
||||
}
|
||||
|
@ -9,12 +9,10 @@
|
||||
|
||||
#include "wm.h"
|
||||
|
||||
static void select_frame(void *obj, char *cmd);
|
||||
static void handle_after_write_page(IXPServer * s, File * f);
|
||||
|
||||
/* action table for /?/ namespace */
|
||||
Action page_acttbl[] = {
|
||||
{"select", select_frame},
|
||||
{0, 0}
|
||||
};
|
||||
|
||||
@ -118,30 +116,6 @@ XRectangle *rectangles(unsigned int *num)
|
||||
return result;
|
||||
}
|
||||
|
||||
static void select_frame(void *obj, char *cmd)
|
||||
{
|
||||
Area *a;
|
||||
Frame *f, *old;
|
||||
f = old = get_sel_frame();
|
||||
if (!f || !cmd)
|
||||
return;
|
||||
a = f->area;
|
||||
if (!strncmp(cmd, "prev", 5)) {
|
||||
f = cext_stack_get_up_item(a->layout->get_frames(a), f);
|
||||
cext_stack_top_item(a->layout->get_frames(a), f);
|
||||
}
|
||||
else if (!strncmp(cmd, "next", 5)) {
|
||||
f = cext_stack_get_down_item(a->layout->get_frames(a), f);
|
||||
cext_stack_top_item(a->layout->get_frames(a), f);
|
||||
}
|
||||
if (old != f) {
|
||||
sel_frame(f, cext_list_get_item_index(&a->page->areas, a) == 0);
|
||||
center_pointer(f);
|
||||
draw_frame(old, nil);
|
||||
draw_frame(f, nil);
|
||||
}
|
||||
}
|
||||
|
||||
static void iter_hide_page(void *item, void *aux)
|
||||
{
|
||||
hide_area((Area *)item);
|
||||
|
@ -123,8 +123,9 @@ struct Layout {
|
||||
Bool (*attach) (Area *, Client *); /* called on attach */
|
||||
void (*detach) (Area *, Client *); /* called on detach */
|
||||
void (*resize) (Frame *, XRectangle *, XPoint *); /* called after resize */
|
||||
Container *(*get_frames) (Area *); /* called after resize */
|
||||
void (*select) (Area *, char *arg); /* called after resize */
|
||||
void (*aux) (Area *, char *aux); /* aux interface */
|
||||
Container *(*get_frames) (Area *); /* called after resize */
|
||||
};
|
||||
|
||||
struct Area {
|
||||
|
6
rc/wmirc
6
rc/wmirc
@ -137,9 +137,9 @@ kbind normal $MODKEY-u 'wmir write /wm/sel/layout/sel/frame/sel/locked 0'
|
||||
kbind normal $MODKEY-S-u 'wmir write /wm/sel/layout/sel/frame/sel/locked 1'
|
||||
kbind normal $MODKEY-$WESTKEY 'wmir write /wm/ctl ''select prev'''
|
||||
kbind normal $MODKEY-$EASTKEY 'wmir write /wm/ctl ''select next'''
|
||||
kbind normal $MODKEY-Tab 'wmir write /wm/sel/ctl ''select next'''
|
||||
kbind normal $MODKEY-$SOUTHKEY 'wmir write /wm/sel/ctl ''select next'''
|
||||
kbind normal $MODKEY-$NORTHKEY 'wmir write /wm/sel/ctl ''select prev'''
|
||||
kbind normal $MODKEY-Tab 'wmir write /wm/sel/layout/sel/ctl ''select next'''
|
||||
kbind normal $MODKEY-$SOUTHKEY 'wmir write /wm/sel/layout/sel/ctl ''select next'''
|
||||
kbind normal $MODKEY-$NORTHKEY 'wmir write /wm/sel/layout/sel/ctl ''select prev'''
|
||||
kbind normal $MODKEY-S-Tab 'wmir write /wm/sel/layout/sel/frame/sel/ctl ''select next'''
|
||||
kbind normal $MODKEY-S-$SOUTHKEY 'wmir write /wm/sel/layout/sel/frame/sel/ctl ''select next'''
|
||||
kbind normal $MODKEY-S-$NORTHKEY 'wmir write /wm/sel/layout/sel/frame/sel/ctl ''select prev'''
|
||||
|
Loading…
x
Reference in New Issue
Block a user