JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
Some items were done
[spectrwm.git] / scrotwm.c
index 714224d..dfd3b72 100644 (file)
--- a/scrotwm.c
+++ b/scrotwm.c
@@ -89,7 +89,6 @@
 #endif
 #endif
 
-#define SWM_DEBUG
 /* #define SWM_DEBUG */
 #ifdef SWM_DEBUG
 #define DPRINTF(x...)          do { if (swm_debug) fprintf(stderr, x); } while(0)
@@ -250,7 +249,6 @@ struct swm_screen {
 };
 struct swm_screen      *screens;
 int                    num_screens;
-Window rootclick = 0;
 
 struct ws_win          *cur_focus = NULL;
 
@@ -655,23 +653,20 @@ root_to_region(Window root)
                if (screens[i].root == root)
                        break;
 
-       if (rootclick != root && /* if root was just clicked in, use cursor */
-           cur_focus && cur_focus->ws->r && cur_focus->s == &screens[i])
-               r = cur_focus->ws->r;
-       else {
-               if (XQueryPointer(display, screens[i].root, 
-                   &rr, &cr, &x, &y, &wx, &wy, &mask) == False) {
-                       r = TAILQ_FIRST(&screens[i].rl);
-               } else {
-                       TAILQ_FOREACH(r, &screens[i].rl, entry) {
-                               if (x > X(r) && x < X(r) + WIDTH(r) &&
-                                   y > Y(r) && y < Y(r) + HEIGHT(r))
-                                       break;
-                       }
-
-                       if (r == NULL)
-                               r = TAILQ_FIRST(&screens[i].rl);
+       if (XQueryPointer(display, screens[i].root, 
+           &rr, &cr, &x, &y, &wx, &wy, &mask) == False) {
+               /* if we can't query the pointer, grab the first region */
+               r = TAILQ_FIRST(&screens[i].rl);
+       } else {
+               /* otherwise, choose a region based on pointer location */
+               TAILQ_FOREACH(r, &screens[i].rl, entry) {
+                       if (x > X(r) && x < X(r) + WIDTH(r) &&
+                           y > Y(r) && y < Y(r) + HEIGHT(r))
+                               break;
                }
+
+               if (r == NULL)
+                       r = TAILQ_FIRST(&screens[i].rl);
        }
        return (r);
 }
@@ -741,7 +736,6 @@ focus_win(struct ws_win *win)
        if (win == NULL)
                return;
 
-       rootclick = 0;
        unfocus_all();
        win->ws->focus = win;
        if (win->ws->r != NULL) {
@@ -1354,6 +1348,21 @@ struct key {
        { MODKEY | ShiftMask,   XK_Tab,         focus,          {.id = SWM_ARG_ID_FOCUSPREV} },
 };
 
+#if 0
+/* mouse */
+enum { client_click, root_click };
+struct button {
+       unsigned int            click;
+       unsigned int            mask;
+       unsigned int            button;
+       void                    (*func)(struct swm_region *r, union arg *);
+       union arg               args;
+} buttons[] = {
+         /* action             key             mouse button    func            args */
+       { client_click,         MODKEY,         Button2,        NULL, {0} },
+};
+#endif
+
 void
 updatenumlockmask(void)
 {
@@ -1433,10 +1442,8 @@ buttonpress(XEvent *e)
 
        DNPRINTF(SWM_D_EVENT, "buttonpress: window: %lu\n", ev->window);
 
-       if (ev->window == ev->root) {
-               rootclick = ev->root;
+       if (ev->window == ev->root)
                return;
-       }
        if (ev->window == cur_focus->id)
                return;
 #ifdef SWM_CLICKTOFOCUS
@@ -1621,27 +1628,17 @@ enternotify(XEvent *e)
 {
        XCrossingEvent          *ev = &e->xcrossing;
        struct ws_win           *win;
-       int                     i, j;
 
        DNPRINTF(SWM_D_EVENT, "enternotify: window: %lu\n", ev->window);
 
-       if ((ev->mode != NotifyNormal || ev->detail == NotifyInferior) &&
-           ev->window != ev->root)
-               return;
        if (ignore_enter) {
                /* eat event(r) to prevent autofocus */
                ignore_enter--;
                return;
        }
-       /* brute force for now */
-       for (i = 0; i < ScreenCount(display); i++) {
-               for (j = 0; j < SWM_WS_MAX; j++) {
-                       TAILQ_FOREACH(win, &screens[i].ws[j].winlist , entry) {
-                               if (win->id == ev->window)
-                                       focus_win(win);
-                       }
-               }
-       }
+
+       if ((win = find_window(ev->window)) != NULL)
+               focus_win(win);
 }
 
 void
@@ -1841,9 +1838,6 @@ setup_screens(void)
                screens[i].idx = i;
                TAILQ_INIT(&screens[i].rl);
                screens[i].root = RootWindow(display, i);
-               XGetWindowAttributes(display, screens[i].root, &wa);
-               XSelectInput(display, screens[i].root,
-                   ButtonPressMask | wa.your_event_mask);
 
                /* set default colors */
                screens[i].color_focus = name_to_color("red");