diff options
Diffstat (limited to 'Gui/wm/ws.c')
-rw-r--r-- | Gui/wm/ws.c | 12 |
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 ) { |