From: Hans-Dieter K. <fs...@us...> - 2006-10-29 04:22:39
|
Update of /cvsroot/xine/xine-ui/src/xitk In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv29541 Modified Files: actions.c Log Message: Insist a bit more on getting input focus. Cleaned up 'layer_above' setting: Adapting 'layer_above' to 'always_layer_above' is not necessary since 'always_layer_above' is handled with priority anyway. This also messed up the display of the Setup window's item list due to shifted item index upon selecting 'Apply' after selecting 'always_layer_above'. Index: actions.c =================================================================== RCS file: /cvsroot/xine/xine-ui/src/xitk/actions.c,v retrieving revision 1.269 retrieving revision 1.270 diff -u -r1.269 -r1.270 --- actions.c 5 Sep 2006 23:21:45 -0000 1.269 +++ actions.c 29 Oct 2006 04:22:36 -0000 1.270 @@ -1,5 +1,5 @@ /* - * Copyright (C) 2000-2004 the xine project + * Copyright (C) 2000-2006 the xine project * * This file is part of xine, a unix video player. * @@ -176,9 +176,24 @@ wait_for_window_visible(gGui->display, window); if(xitk_is_window_visible(gGui->display, window)) { - XLockDisplay (gGui->display); - XSetInputFocus(gGui->display, window, RevertToParent, CurrentTime); - XUnlockDisplay (gGui->display); + int retry = 0; + Window focused_win; + + do { + int revert; + + XLockDisplay (gGui->display); + XSetInputFocus(gGui->display, window, RevertToParent, CurrentTime); + XSync(gGui->display, False); + XUnlockDisplay (gGui->display); + + /* Retry until the WM was mercyful to give us the focus (but not indefinitely) */ + xine_usec_sleep(5000); + XLockDisplay (gGui->display); + XGetInputFocus(gGui->display, &focused_win, &revert); + XUnlockDisplay (gGui->display); + + } while((focused_win != window) && (retry++ < 30)); } } @@ -1814,13 +1829,7 @@ */ int is_layer_above(void) { - if(gGui->always_layer_above || gGui->layer_above) { - if(!gGui->layer_above) - config_update_num("gui.layer_above", 1); - return 1; - } - - return 0; + return (gGui->always_layer_above || gGui->layer_above) ? 1 : 0; } /* * set window layer property to something above GNOME (and KDE?) panel |