Browse Source

event enternotify etc..

Martin Duquesnoy 13 years ago
parent
commit
861110c5a3
4 changed files with 48 additions and 11 deletions
  1. 26 6
      wmfs2/src/client.c
  2. 17 3
      wmfs2/src/event.c
  3. 4 1
      wmfs2/src/screen.c
  4. 1 1
      wmfs2/src/wmfs.c

+ 26 - 6
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);

+ 17 - 3
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;

+ 4 - 1
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

+ 1 - 1
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);