From 861110c5a3f2d91dd3fa90c6ec9260c3b82cbe46 Mon Sep 17 00:00:00 2001 From: Martin Duquesnoy Date: Sun, 7 Aug 2011 03:22:16 +0200 Subject: [PATCH] event enternotify etc.. --- wmfs2/src/client.c | 32 ++++++++++++++++++++++++++------ wmfs2/src/event.c | 20 +++++++++++++++++--- wmfs2/src/screen.c | 5 ++++- wmfs2/src/wmfs.c | 2 +- 4 files changed, 48 insertions(+), 11 deletions(-) diff --git a/wmfs2/src/client.c b/wmfs2/src/client.c index 1dde094..9f0d513 100755 --- a/wmfs2/src/client.c +++ b/wmfs2/src/client.c @@ -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); diff --git a/wmfs2/src/event.c b/wmfs2/src/event.c index bc83b62..4ffa077 100755 --- a/wmfs2/src/event.c +++ b/wmfs2/src/event.c @@ -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; diff --git a/wmfs2/src/screen.c b/wmfs2/src/screen.c index c4b47fe..f8a124b 100755 --- a/wmfs2/src/screen.c +++ b/wmfs2/src/screen.c @@ -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 diff --git a/wmfs2/src/wmfs.c b/wmfs2/src/wmfs.c index 863153a..1bbcc21 100755 --- a/wmfs2/src/wmfs.c +++ b/wmfs2/src/wmfs.c @@ -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);