Enlightenment CVS committal

Author  : kwo
Project : e16
Module  : e

Dir     : e16/e/src


Modified Files:
        borders.c focus.c iconify.c 


Log Message:
Focus fixes.
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/borders.c,v
retrieving revision 1.218
retrieving revision 1.219
diff -u -3 -r1.218 -r1.219
--- borders.c   15 Jul 2004 23:31:00 -0000      1.218
+++ borders.c   17 Jul 2004 08:55:32 -0000      1.219
@@ -1309,6 +1309,7 @@
        ewin->no_actions = 1;
        ewin->skipfocus = 1;
        ewin->skipwinlist = 1;
+       ewin->neverfocus = 1;
        break;
      case EWIN_TYPE_ICONBOX:
        ewin->sticky = 1;
@@ -1316,6 +1317,7 @@
        ewin->skip_ext_pager = 1;
        ewin->skipfocus = 1;
        ewin->skipwinlist = 1;
+       ewin->neverfocus = 1;
        break;
      case EWIN_TYPE_PAGER:
        ewin->sticky = 1;
@@ -1323,6 +1325,7 @@
        ewin->skip_ext_pager = 1;
        ewin->skipfocus = 1;
        ewin->skipwinlist = 1;
+       ewin->neverfocus = 1;
        break;
      }
 
@@ -1563,6 +1566,8 @@
    /* If first time we may want to focus it (unless during startup) */
    if (old_state == EWIN_STATE_NEW)
       FocusToEWin(ewin, FOCUS_EWIN_NEW);
+   else
+      FocusToEWin(ewin, FOCUS_SET);
 }
 
 void
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/focus.c,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -3 -r1.75 -r1.76
--- focus.c     15 Jul 2004 23:31:01 -0000      1.75
+++ focus.c     17 Jul 2004 08:55:34 -0000      1.76
@@ -26,17 +26,24 @@
 
 /*
  * Return !0 if it is OK to focus ewin.
+ * on_screen: Require window to be on-screen now
  */
 static int
-FocusEwinValid(EWin * ewin)
+FocusEwinValid(EWin * ewin, int on_screen)
 {
-   if (ewin->skipfocus || ewin->neverfocus || ewin->shaded || ewin->iconified)
+   if (!ewin)
+      return 0;
+
+   if (ewin->skipfocus || ewin->neverfocus || ewin->iconified)
+      return 0;
+
+   if (!ewin->client.need_input)
       return 0;
 
    if (!EwinIsMapped(ewin))
       return 0;
 
-   return EwinIsOnScreen(ewin);
+   return !on_screen || EwinIsOnScreen(ewin);
 }
 
 /*
@@ -52,14 +59,18 @@
      {
      default:
      case MODE_FOCUS_POINTER:
-     case MODE_FOCUS_SLOPPY:
        ewin = GetEwinPointerInClient();
        break;
+     case MODE_FOCUS_SLOPPY:
+       ewin = GetEwinPointerInClient();
+       if (ewin)
+          break;
+       /* If pointer not in window -  fall thru and select other */
      case MODE_FOCUS_CLICK:
        lst = EwinListGetFocus(&num);
        for (i = 0; i < num; i++)
          {
-            if (!FocusEwinValid(lst[i]))
+            if (!FocusEwinValid(lst[i], 1))
                continue;
             ewin = lst[i];
             break;
@@ -98,7 +109,7 @@
 {
    EWin               *const *lst0;
    EWin              **lst, *ewin;
-   int                 i, num0, num, ax, ay;
+   int                 i, num0, num;
 
    EDBUG(5, "FocusCycle");
 
@@ -106,8 +117,6 @@
    RemoveTimerEvent("REVERSE_FOCUS_TIMEOUT");
    DoIn("REVERSE_FOCUS_TIMEOUT", 1.0, ReverseTimeout, 0, NULL);
 
-   GetCurrentArea(&ax, &ay);
-
    lst0 = EwinListGetFocus(&num0);
    if (lst0 == NULL)
       EDBUG_RETURN_;
@@ -117,7 +126,7 @@
    for (i = 0; i < num0; i++)
      {
        ewin = lst0[i];
-       if (FocusEwinValid(ewin))
+       if (FocusEwinValid(ewin, 1))
          {
             num++;
             lst = Erealloc(lst, sizeof(EWin *) * num);
@@ -221,6 +230,28 @@
    switch (why)
      {
      default:
+     case FOCUS_SET:
+     case FOCUS_ENTER:
+     case FOCUS_LEAVE:         /* Unused */
+     case FOCUS_NEXT:
+     case FOCUS_CLICK:
+       if (ewin == Mode.focuswin)
+          EDBUG_RETURN_;
+       if (ewin == NULL)       /* Unfocus */
+          break;
+       if (!FocusEwinValid(ewin, 1))
+          EDBUG_RETURN_;
+       break;
+
+     case FOCUS_DESK_ENTER:
+       ewin = FocusEwinSelect();
+       if (!ewin)
+          EDBUG_RETURN_;
+       break;
+
+     case FOCUS_NONE:
+     case FOCUS_DESK_LEAVE:
+       ewin = NULL;
        if (ewin == Mode.focuswin)
           EDBUG_RETURN_;
        break;
@@ -228,10 +259,8 @@
      case FOCUS_EWIN_GONE:
        if (ewin != Mode.focuswin)
           EDBUG_RETURN_;
-       Mode.focuswin = NULL;
-       if (Conf.focus.mode == MODE_FOCUS_CLICK)
-          ewin = FocusEwinSelect();
-       else
+       ewin = FocusEwinSelect();
+       if (ewin == Mode.focuswin)
           ewin = NULL;
        break;
 
@@ -265,40 +294,33 @@
 
        if (!do_follow)
           EDBUG_RETURN_;
+       if (ewin == Mode.focuswin)
+          EDBUG_RETURN_;
+       if (!FocusEwinValid(ewin, 0))
+          EDBUG_RETURN_;
        break;
 
      case FOCUS_WARP_NEXT:
        why = FOCUS_NEXT;
-       break;
-
      case FOCUS_WARP_DONE:
+       if (!FocusEwinValid(ewin, 1))
+          EDBUG_RETURN_;
        break;
      }
 
-   if (!ewin)
-      goto done;
-
-   /* NB! ewin != NULL */
-
-   if (ewin->neverfocus)
+   if (ewin == Mode.focuswin)
       EDBUG_RETURN_;
 
-   if (ewin->iconified)
-      EDBUG_RETURN_;
+   /* Check if ewin is a valid focus window target */
 
-   if (!ewin->client.need_input)
-      EDBUG_RETURN_;
+   if (!ewin)
+      goto done;
 
-   /* Don't focus menus (use client.need_input?) */
-   if (ewin->menu)
-      EDBUG_RETURN_;
+   /* NB! ewin != NULL */
 
    if (do_follow)
       GotoDesktopByEwin(ewin);
 
-   if (!EwinIsOnScreen(ewin))
-      EDBUG_RETURN_;
-
    if (Conf.autoraise.enable)
      {
        RemoveTimerEvent("AUTORAISE_TIMEOUT");
@@ -372,9 +394,7 @@
    ewin = GetEwinByCurrentPointer();
    Mode.mouse_over_ewin = ewin;
 
-   ewin = FocusEwinSelect();
-   if (ewin)
-      FocusToEWin(ewin, FOCUS_DESK_ENTER);
+   FocusToEWin(NULL, FOCUS_DESK_ENTER);
 
    EDBUG_RETURN_;
 }
@@ -396,9 +416,7 @@
        (ev->xcrossing.mode == NotifyNormal &&
        ev->xcrossing.detail != NotifyInferior))
      {
-       ewin = FocusEwinSelect();
-       if (ewin)
-          FocusToEWin(ewin, FOCUS_DESK_ENTER);
+       FocusToEWin(NULL, FOCUS_DESK_ENTER);
        goto done;
      }
 
===================================================================
RCS file: /cvsroot/enlightenment/e16/e/src/iconify.c,v
retrieving revision 1.115
retrieving revision 1.116
diff -u -3 -r1.115 -r1.116
--- iconify.c   13 Jul 2004 19:58:58 -0000      1.115
+++ iconify.c   17 Jul 2004 08:55:34 -0000      1.116
@@ -332,7 +332,6 @@
    RaiseEwin(ewin);
    ShowEwin(ewin);
    ICCCM_DeIconify(ewin);
-   FocusToEWin(ewin, FOCUS_SET);
 
    lst = EwinListTransients(ewin, &num, 0);
    for (i = 0; i < num; i++)




-------------------------------------------------------
This SF.Net email is sponsored by BEA Weblogic Workshop
FREE Java Enterprise J2EE developer tools!
Get your free copy of BEA WebLogic Workshop 8.1 today.
http://ads.osdn.com/?ad_id=4721&alloc_id=10040&op=click
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to