Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        E.h evhandlers.c focus.c 


Log Message:
More focus fixes.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/E.h,v
retrieving revision 1.212
retrieving revision 1.213
diff -u -3 -r1.212 -r1.213
--- E.h 22 Feb 2004 08:39:07 -0000      1.212
+++ E.h 26 Feb 2004 19:33:21 -0000      1.213
@@ -924,7 +924,8 @@
    int                 desktop;
    Group             **groups;
    int                 num_groups;
-   int                 docked;
+   char                mapped;
+   char                docked;
    char                sticky;
    char                visible;
    char                iconified;
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/evhandlers.c,v
retrieving revision 1.150
retrieving revision 1.151
diff -u -3 -r1.150 -r1.151
--- evhandlers.c        11 Feb 2004 16:22:48 -0000      1.150
+++ evhandlers.c        26 Feb 2004 19:33:21 -0000      1.151
@@ -609,7 +609,15 @@
 void
 HandleMap(XEvent * ev)
 {
+   Window              win = ev->xunmap.window;
+   EWin               *ewin;
+
    EDBUG(5, "HandleMap");
+   ewin = FindItem(NULL, win, LIST_FINDBY_ID, LIST_TYPE_EWIN);
+   if (ewin)
+     {
+       ewin->mapped = 1;
+     }
    EDBUG_RETURN_;
 }
 
@@ -623,6 +631,8 @@
    ewin = FindItem(NULL, win, LIST_FINDBY_ID, LIST_TYPE_EWIN);
    if (ewin)
      {
+       ewin->mapped = 0;
+
        if (ewin->pager)
           PagerEventUnmap(ewin->pager);
 
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/focus.c,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -3 -r1.50 -r1.51
--- focus.c     24 Feb 2004 23:19:03 -0000      1.50
+++ focus.c     26 Feb 2004 19:33:21 -0000      1.51
@@ -33,11 +33,14 @@
    if (ewin->skipfocus || ewin->neverfocus || ewin->shaded || ewin->iconified)
       return 0;
 
+   if (!ewin->mapped)
+      return 0;
+
    return EwinIsOnScreen(ewin);
 }
 
 /*
- * Return the ewin to focus after area/desk switch.
+ * Return the ewin to focus after entering area or losing focused window.
  */
 static EWin        *
 FocusEwinSelect(void)
@@ -45,17 +48,26 @@
    EWin              **lst, *ewin = NULL;
    int                 num, i;
 
-   lst = (EWin **) ListItemType(&num, LIST_TYPE_EWIN);
-   for (i = 0; i < num; i++)
+   switch (conf.focus.mode)
      {
-       if (!FocusEwinValid(lst[i]))
-          continue;
-
-       ewin = lst[i];
+     default:
+     case MODE_FOCUS_POINTER:
+     case MODE_FOCUS_SLOPPY:
+       ewin = GetEwinPointerInClient();
+       break;
+     case MODE_FOCUS_CLICK:
+       lst = (EWin **) ListItemType(&num, LIST_TYPE_EWIN);
+       for (i = 0; i < num; i++)
+         {
+            if (!FocusEwinValid(lst[i]))
+               continue;
+            ewin = lst[i];
+            break;
+         }
+       if (lst)
+          Efree(lst);
        break;
      }
-   if (lst)
-      Efree(lst);
 
    return ewin;
 }
@@ -212,8 +224,8 @@
      case FOCUS_EWIN_GONE:
        if (ewin != mode.focuswin)
           EDBUG_RETURN_;
-       ewin = NULL;
-       goto exit;
+       ewin = FocusEwinSelect();
+       break;
 
      case FOCUS_EWIN_NEW:
        if (conf.focus.all_new_windows_get_focus)
@@ -441,23 +453,9 @@
                   SubstructureRedirectMask | KeyPressMask | KeyReleaseMask |
                   PointerMotionMask);
 
-   switch (conf.focus.mode)
-     {
-     default:
-     case MODE_FOCUS_POINTER:
-     case MODE_FOCUS_SLOPPY:
-       ewin = GetEwinPointerInClient();
-       if (!ewin)
-          break;
-       FocusToEWin(ewin, FOCUS_DESK_ENTER);
-       break;
-     case MODE_FOCUS_CLICK:
-       ewin = FocusEwinSelect();
-       if (!ewin)
-          break;
-       FocusToEWin(ewin, FOCUS_DESK_ENTER);
-       break;
-     }
+   ewin = FocusEwinSelect();
+   if (ewin)
+      FocusToEWin(ewin, FOCUS_DESK_ENTER);
 
    EDBUG_RETURN_;
 }




-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to