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