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 void
client_focus(Client *c) 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_new(Window w, XWindowAttributes *wa)
{ {
Client *c; Client *c;
XSetWindowAttributes at;
c = xcalloc(1, sizeof(Client)); c = xcalloc(1, sizeof(Client));
@ -145,17 +164,20 @@ client_new(Window w, XWindowAttributes *wa)
c->geo.h = wa->height; c->geo.h = wa->height;
/* X window attributes */ /* X window attributes */
at.event_mask = PropertyChangeMask; XSelectInput(W->dpy, w, EnterWindowMask | FocusChangeMask | PropertyChangeMask | StructureNotifyMask);
XChangeWindowAttributes(W->dpy, c->win, CWEventMask, &at);
XSetWindowBorder(W->dpy, w, 0xffffff);
XSetWindowBorderWidth(W->dpy, w, 1);
/* Attach */ /* Attach */
SLIST_INSERT_HEAD(&W->h.client, c, next); SLIST_INSERT_HEAD(&W->h.client, c, next);
client_map(c); 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); XRaiseWindow(W->dpy, w);
client_focus(c);
client_configure(c); client_configure(c);
return c; return c;
@ -167,8 +189,6 @@ client_remove(Client *c)
XGrabServer(W->dpy); XGrabServer(W->dpy);
XSetErrorHandler(wmfs_error_handler_dummy); 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); SLIST_REMOVE(&W->h.client, c, Client, next);
XUngrabServer(W->dpy); XUngrabServer(W->dpy);

View File

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

View File

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

View File

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