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