mirror of https://github.com/0intro/wmii
Reapplied multihead patch that I backed out. No merge, unfortunately.
This commit is contained in:
parent
b5b00caa66
commit
0104091f56
|
@ -128,12 +128,19 @@ update_client_grab(Client *c, Bool is_sel)
|
||||||
void
|
void
|
||||||
focus_client(Client *c, Bool restack)
|
focus_client(Client *c, Bool restack)
|
||||||
{
|
{
|
||||||
Client *old = sel_client();
|
Client *old;
|
||||||
Frame *f = c->sel;
|
Frame *f;
|
||||||
Client *old_in_area = sel_client_of_area(f->area);
|
Client *old_in_area;
|
||||||
View *v = f->area->view;
|
View *v;
|
||||||
static char buf[256];
|
static char buf[256];
|
||||||
|
|
||||||
|
if(!sel_screen)
|
||||||
|
return;
|
||||||
|
|
||||||
|
old = sel_client();
|
||||||
|
f = c->sel;
|
||||||
|
old_in_area = sel_client_of_area(f->area);
|
||||||
|
v = f->area->view;
|
||||||
v->sel = f->area;
|
v->sel = f->area;
|
||||||
f->area->sel = f;
|
f->area->sel = f;
|
||||||
c->floating = (f->area == v->area);
|
c->floating = (f->area == v->area);
|
||||||
|
@ -286,7 +293,7 @@ draw_client(Client *c)
|
||||||
d.font = blitzfont;
|
d.font = blitzfont;
|
||||||
d.gc = c->gc;
|
d.gc = c->gc;
|
||||||
|
|
||||||
if(c == sel_client())
|
if(sel_screen && (c == sel_client()))
|
||||||
d.color = def.sel;
|
d.color = def.sel;
|
||||||
else
|
else
|
||||||
d.color = def.norm;
|
d.color = def.norm;
|
||||||
|
@ -323,7 +330,7 @@ draw_client(Client *c)
|
||||||
blitz_drawborder(&d);
|
blitz_drawborder(&d);
|
||||||
d.rect.x = 0;
|
d.rect.x = 0;
|
||||||
|
|
||||||
if(c == sel_client())
|
if(sel_screen && (c == sel_client()))
|
||||||
d.color = def.sel;
|
d.color = def.sel;
|
||||||
else
|
else
|
||||||
d.color = def.norm;
|
d.color = def.norm;
|
||||||
|
|
|
@ -16,6 +16,7 @@ static void handle_buttonrelease(XEvent * e);
|
||||||
static void handle_configurerequest(XEvent * e);
|
static void handle_configurerequest(XEvent * e);
|
||||||
static void handle_destroynotify(XEvent * e);
|
static void handle_destroynotify(XEvent * e);
|
||||||
static void handle_enternotify(XEvent * e);
|
static void handle_enternotify(XEvent * e);
|
||||||
|
static void handle_leavenotify(XEvent * e);
|
||||||
static void handle_expose(XEvent * e);
|
static void handle_expose(XEvent * e);
|
||||||
static void handle_keypress(XEvent * e);
|
static void handle_keypress(XEvent * e);
|
||||||
static void handle_keymapnotify(XEvent * e);
|
static void handle_keymapnotify(XEvent * e);
|
||||||
|
@ -35,6 +36,7 @@ init_x_event_handler()
|
||||||
handler[ConfigureRequest] = handle_configurerequest;
|
handler[ConfigureRequest] = handle_configurerequest;
|
||||||
handler[DestroyNotify] = handle_destroynotify;
|
handler[DestroyNotify] = handle_destroynotify;
|
||||||
handler[EnterNotify] = handle_enternotify;
|
handler[EnterNotify] = handle_enternotify;
|
||||||
|
handler[LeaveNotify] = handle_leavenotify;
|
||||||
handler[Expose] = handle_expose;
|
handler[Expose] = handle_expose;
|
||||||
handler[KeyPress] = handle_keypress;
|
handler[KeyPress] = handle_keypress;
|
||||||
handler[KeymapNotify] = handle_keymapnotify;
|
handler[KeymapNotify] = handle_keymapnotify;
|
||||||
|
@ -204,16 +206,27 @@ handle_enternotify(XEvent *e)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if((c = client_of_win(ev->window))) {
|
if((c = client_of_win(ev->window))) {
|
||||||
Client *old = selected_client();
|
|
||||||
Frame *f = c->sel;
|
Frame *f = c->sel;
|
||||||
Area *a = f->area;
|
Area *a = f->area;
|
||||||
if(a->mode == Colmax)
|
if(a->mode == Colmax)
|
||||||
c = a->sel->client;
|
c = a->sel->client;
|
||||||
if(c != old)
|
focus(c, False);
|
||||||
focus(c, False);
|
}
|
||||||
|
else if(ev->window == root) {
|
||||||
|
sel_screen = True;
|
||||||
|
draw_clients();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
handle_leavenotify(XEvent *e)
|
||||||
|
{
|
||||||
|
XCrossingEvent *ev = &e->xcrossing;
|
||||||
|
|
||||||
|
if((ev->window == root) && !ev->same_screen) {
|
||||||
|
sel_screen = True;
|
||||||
|
draw_clients();
|
||||||
}
|
}
|
||||||
else if(ev->window == root)
|
|
||||||
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -141,6 +141,9 @@ init_cursors()
|
||||||
static void
|
static void
|
||||||
init_screen()
|
init_screen()
|
||||||
{
|
{
|
||||||
|
Window w;
|
||||||
|
int ret;
|
||||||
|
unsigned mask;
|
||||||
XGCValues gcv;
|
XGCValues gcv;
|
||||||
|
|
||||||
gcv.subwindow_mode = IncludeInferiors;
|
gcv.subwindow_mode = IncludeInferiors;
|
||||||
|
@ -155,6 +158,8 @@ init_screen()
|
||||||
rect.width = DisplayWidth(dpy, screen);
|
rect.width = DisplayWidth(dpy, screen);
|
||||||
rect.height = DisplayHeight(dpy, screen);
|
rect.height = DisplayHeight(dpy, screen);
|
||||||
def.snap = rect.height / 63;
|
def.snap = rect.height / 63;
|
||||||
|
|
||||||
|
sel_screen = XQueryPointer(dpy, root, &w, &w, &ret, &ret, &ret, &ret, &mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -315,7 +320,7 @@ main(int argc, char *argv[])
|
||||||
init_lock_keys();
|
init_lock_keys();
|
||||||
init_screen();
|
init_screen();
|
||||||
|
|
||||||
wa.event_mask = SubstructureRedirectMask;
|
wa.event_mask = SubstructureRedirectMask | EnterWindowMask | LeaveWindowMask;
|
||||||
wa.cursor = cursor[CurNormal];
|
wa.cursor = cursor[CurNormal];
|
||||||
XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
|
XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
|
||||||
|
|
||||||
|
|
|
@ -237,6 +237,7 @@ Atom net_atom[NetLast];
|
||||||
Cursor cursor[CurLast];
|
Cursor cursor[CurLast];
|
||||||
unsigned int valid_mask;
|
unsigned int valid_mask;
|
||||||
unsigned int num_lock_mask;
|
unsigned int num_lock_mask;
|
||||||
|
Bool sel_screen;
|
||||||
void (*handler[LASTEvent]) (XEvent *);
|
void (*handler[LASTEvent]) (XEvent *);
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue