summaryrefslogtreecommitdiffstats
path: root/Gui/wm/ws.c
diff options
context:
space:
mode:
Diffstat (limited to 'Gui/wm/ws.c')
-rw-r--r--Gui/wm/ws.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/Gui/wm/ws.c b/Gui/wm/ws.c
index bb5a73cfee..46ed229f20 100644
--- a/Gui/wm/ws.c
+++ b/Gui/wm/ws.c
@@ -439,6 +439,7 @@ void wsCreateWindow( wsTWindow * win,int X,int Y,int wX,int hY,int bW,int cV,uns
win->Visible=0;
win->Focused=0;
+ win->OFocused=0;
win->Mapped=0;
win->Rolled=0;
if ( D & wsShowWindow ) XMapWindow( wsDisplay,win->WindowID );
@@ -481,6 +482,7 @@ void wsDestroyWindow( wsTWindow * win )
win->KeyHandler=NULL;
win->Visible=0;
win->Focused=0;
+ win->OFocused=0;
win->Mapped=0;
win->Rolled=0;
}
@@ -528,10 +530,16 @@ Bool wsEvents( Display * display,XEvent * Event,XPointer arg )
case UnmapNotify: i=wsWindowUnmapped; wsWindowList[l]->Mapped=wsNone; goto expose;
case FocusIn:
if ( wsWindowList[l]->Focused == wsFocused ) break;
- i=wsWindowFocusIn; wsWindowList[l]->Focused=wsFocused; goto expose;
+ i=wsWindowFocusIn;
+ wsWindowList[l]->OFocused=wsWindowList[l]->Focused;
+ wsWindowList[l]->Focused=wsFocused;
+ goto expose;
case FocusOut:
if ( wsWindowList[l]->Focused == wsNone ) break;
- i=wsWindowFocusOut; wsWindowList[l]->Focused=wsNone; goto expose;
+ i=wsWindowFocusOut;
+ wsWindowList[l]->OFocused=wsWindowList[l]->Focused;
+ wsWindowList[l]->Focused=wsNone;
+ goto expose;
case VisibilityNotify:
switch( Event->xvisibility.state )
{