event enternotify etc..

This commit is contained in:
Martin Duquesnoy 2011-08-07 03:22:16 +02:00
parent 3da9117a8b
commit 861110c5a3
4 changed files with 48 additions and 11 deletions

View File

@ -61,6 +61,26 @@ client_unmap(Client *c)
void
client_focus(Client *c)
{
puts("foc");
/* Unfocus selected */
if(c->tag->sel && c->tag->sel != c)
{
XSetWindowBorder(W->dpy, c->win, 0xf0f0f0);
}
/* Focus c */
if((c->tag->sel = c))
{
XSetWindowBorder(W->dpy, c->win, 0xffffff);
XSetInputFocus(W->dpy, c->win, RevertToPointerRoot, CurrentTime);
XRaiseWindow(W->dpy, c->win);
}
/* Else, set input focus to root window */
else
XSetInputFocus(W->dpy, W->root, RevertToPointerRoot, CurrentTime);
}
@ -128,7 +148,6 @@ Client*
client_new(Window w, XWindowAttributes *wa)
{
Client *c;
XSetWindowAttributes at;
c = xcalloc(1, sizeof(Client));
@ -145,17 +164,20 @@ client_new(Window w, XWindowAttributes *wa)
c->geo.h = wa->height;
/* X window attributes */
at.event_mask = PropertyChangeMask;
XChangeWindowAttributes(W->dpy, c->win, CWEventMask, &at);
XSelectInput(W->dpy, w, EnterWindowMask | FocusChangeMask | PropertyChangeMask | StructureNotifyMask);
XSetWindowBorder(W->dpy, w, 0xffffff);
XSetWindowBorderWidth(W->dpy, w, 1);
/* Attach */
SLIST_INSERT_HEAD(&W->h.client, c, next);
client_map(c);
XMoveResizeWindow(W->dpy, c->win, c->geo.x, c->geo.y, c->geo.w, c->geo.h);
XMoveResizeWindow(W->dpy, w, c->geo.x, c->geo.y, c->geo.w, c->geo.h);
XRaiseWindow(W->dpy, w);
client_focus(c);
client_configure(c);
return c;
@ -167,8 +189,6 @@ client_remove(Client *c)
XGrabServer(W->dpy);
XSetErrorHandler(wmfs_error_handler_dummy);
XReparentWindow(W->dpy, c->win, W->root, c->geo.x, c->geo.y);
SLIST_REMOVE(&W->h.client, c, Client, next);
XUngrabServer(W->dpy);

View File

@ -10,12 +10,18 @@
#define EVDPY(e) (e)->xany.display
static void
event_buttonpress(XEvent *e)
{
XButtonEvent *ev = &e->xbutton;
}
static void
event_enternotify(XEvent *e)
{
XCrossingEvent *ev = &e->xcrossing;
Client *c;
int n;
if((ev->mode != NotifyNormal || ev->detail == NotifyInferior)
&& ev->window != W->root)
@ -25,6 +31,12 @@ event_enternotify(XEvent *e)
client_focus(c);
}
static void
event_clientmessageevent(XEvent *e)
{
XClientMessageEvent *ev = &e->xclient;
}
static void
event_configureevent(XEvent *e)
{
@ -44,6 +56,8 @@ event_configureevent(XEvent *e)
c->geo.h = ev->height;
client_configure(c);
XMoveResizeWindow(EVDPY(e), c->win, c->geo.x, c->geo.y, c->geo.w, c->geo.h);
}
else
{
@ -204,8 +218,8 @@ event_init(void)
while(i--)
event_handle[i] = event_dummy;
/*event_handle[ButtonPress] = event_buttonpress;*/
/*event_handle[ClientMessage] = event_clientmessageevent;*/
event_handle[ButtonPress] = event_buttonpress;
event_handle[ClientMessage] = event_clientmessageevent;
event_handle[ConfigureRequest] = event_configureevent;
event_handle[DestroyNotify] = event_destroynotify;
event_handle[EnterNotify] = event_enternotify;

View File

@ -18,6 +18,7 @@ screen_new(Geo *g)
SLIST_INSERT_HEAD(&W->h.screen, s, next);
/* Set as selected screen */
W->screen = s;
return s;
@ -26,6 +27,7 @@ screen_new(Geo *g)
void
screen_init(void)
{
Scr33n *s;
Geo g;
g.x = 0;
@ -35,7 +37,8 @@ screen_init(void)
SLIST_INIT(&W->h.screen);
screen_new(&g);
s = screen_new(&g);
tag_screen(s, tag_new(s, "tag"));
}
void

View File

@ -203,7 +203,7 @@ wmfs_loop(void)
W->running = true;
while(W->running)
while(W->running || XPending(W->dpy))
{
XNextEvent(W->dpy, &ev);
HANDLE_EVENT(&ev);