summaryrefslogtreecommitdiff
path: root/libxklavier/xklavier_evt.c
diff options
context:
space:
mode:
authorSergey Udaltsov <svu@gnome.org>2004-08-09 22:24:58 +0000
committerSergey Udaltsov <svu@gnome.org>2004-08-09 22:24:58 +0000
commit6be58314e011e4a2747d3d1060b5461f84e21135 (patch)
treed3c828e99cd35410d3ca73bb34a23afc251ac05c /libxklavier/xklavier_evt.c
parent9a66d947c3262175e9fc0664625f1dfd13929843 (diff)
downloadlibxklavier-6be58314e011e4a2747d3d1060b5461f84e21135.tar.gz
syncing with b_1_00
Diffstat (limited to 'libxklavier/xklavier_evt.c')
-rw-r--r--libxklavier/xklavier_evt.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/libxklavier/xklavier_evt.c b/libxklavier/xklavier_evt.c
index 5fb02f5..c961a65 100644
--- a/libxklavier/xklavier_evt.c
+++ b/libxklavier/xklavier_evt.c
@@ -97,9 +97,17 @@ void _XklStdXkbHandler( int grp, XklStateChange changeType, unsigned inds,
if( focusedApp != _xklCurClient )
{
- _XklUpdateCurState( grp, inds );
-
- _XklAddAppWindow( focusedApp, ( Window ) NULL, False, &_xklCurState );
+ if ( !_XklGetAppState( focusedApp, &oldState ) )
+ {
+ _XklUpdateCurState( grp, inds,
+ "Updating the state from new focused window" );
+ _XklAddAppWindow( focusedApp, ( Window ) NULL, False, &_xklCurState );
+ }
+ else
+ {
+ grp = oldState.group;
+ inds = oldState.indicators;
+ }
_xklCurClient = focusedApp;
XklDebug( 160, "CurClient:changed to " WINID_FORMAT ", '%s'\n",
_xklCurClient, _XklGetDebugWindowTitle( _xklCurClient ) );
@@ -111,7 +119,8 @@ void _XklStdXkbHandler( int grp, XklStateChange changeType, unsigned inds,
if( setGroup || haveState )
{
_XklUpdateCurState( setGroup ? grp : oldState.group,
- setInds ? inds : oldState.indicators );
+ setInds ? inds : oldState.indicators,
+ "Restoring the state from the window" );
}
if( haveState )
@@ -245,6 +254,10 @@ void _XklFocusInEvHandler( XFocusChangeEvent * fev )
if( _xklCurClient != appWin )
{
Bool transparent;
+ XklState tmpState;
+
+ if ( XklGetState ( _xklCurClient, &tmpState ) )
+ _xklCurState = tmpState;
_xklCurClient = appWin;
XklDebug( 150, "CurClient:changed to " WINID_FORMAT ", '%s'\n",
@@ -282,7 +295,9 @@ void _XklFocusInEvHandler( XFocusChangeEvent * fev )
* (because of the group change notification being late).
* so we'll enforce the update. But this should only happen in GPA mode
*/
- _XklUpdateCurState( selectedWindowState.group, selectedWindowState.indicators );
+ _XklUpdateCurState( selectedWindowState.group,
+ selectedWindowState.indicators,
+ "Enforcing fast update of the current state" );
XklLockGroup( selectedWindowState.group );
} else
{