+ /* this window already has focus */
+ if (ev->mode == NotifyNormal && ev->detail == NotifyInferior) {
+ DNPRINTF(SWM_D_EVENT, "ignoring enternotify: win has focus\n");
+ return;
+ }
+
+ /* this window is being deleted or moved to another ws */
+ if (XCheckTypedWindowEvent(display, ev->window, ConfigureNotify,
+ &cne) == True) {
+ DNPRINTF(SWM_D_EVENT, "ignoring enternotify: configurenotify\n");
+ XPutBackEvent(display, &cne);
+ return;
+ }
+
+ if ((win = find_window(ev->window)) == NULL) {
+ DNPRINTF(SWM_D_EVENT, "ignoring enternotify: win == NULL\n");
+ return;
+ }
+
+ /*
+ * In fullstack kill all enters unless they come from a different ws
+ * (i.e. another region) or focus has been grabbed externally.
+ */
+ if (win->ws->cur_layout->flags & SWM_L_FOCUSPREV &&
+ last_focus_event != FocusOut) {
+ XGetInputFocus(display, &focus_return, &revert_to_return);
+ if ((w = find_window(focus_return)) == NULL ||
+ w->ws == win->ws) {
+ DNPRINTF(SWM_D_EVENT, "ignoring event: fullstack\n");
+ return;
+ }
+ }
+#endif
+ break;
+ }
+
+ if ((win = find_window(ev->window)) == NULL) {
+ DNPRINTF(SWM_D_EVENT, "ignoring enternotify: win == NULL\n");
+ return;
+ }
+
+ /*
+ * if we have more enternotifies let them handle it in due time
+ */
+ if (XCheckTypedEvent(display, EnterNotify, &cne) == True) {
+ DNPRINTF(SWM_D_EVENT,
+ "ignoring enternotify: got more enternotify\n");
+ XPutBackEvent(display, &cne);