@@ -2951,6 +2951,8 @@ var sessionUrl,
29512951 responsePending = null ,
29522952 pollTimer = null ,
29532953 keepAliveTimer = null ,
2954+ idleTimeout = _$_IDLE_TIMEOUT_$_ , /* idle timeout in seconds, null if disabled */
2955+ idleTimeoutTimer = null ,
29542956 commErrors = 0 ,
29552957 serverPush = false ,
29562958 updateTimeout = null ;
@@ -2962,6 +2964,10 @@ function quit(hasQuitMessage) {
29622964 clearInterval ( keepAliveTimer ) ;
29632965 keepAliveTimer = null ;
29642966 }
2967+ if ( idleTimeoutTimer ) {
2968+ clearTimeout ( idleTimeoutTimer ) ;
2969+ idleTimeoutTimer = null ;
2970+ }
29652971 if ( pollTimer ) {
29662972 clearTimeout ( pollTimer ) ;
29672973 pollTimer = null ;
@@ -2987,6 +2993,56 @@ function setTitle(title) {
29872993 document . title = title ;
29882994}
29892995
2996+ function doIdleTimeout ( ) {
2997+ self . emit ( self , 'Wt-idleTimeout' ) ;
2998+ idleTimeoutTimer = setTimeout ( doIdleTimeout , idleTimeout * 1000 ) ;
2999+ }
3000+
3001+ function delayIdleTimeout ( ) {
3002+ if ( idleTimeoutTimer !== null ) {
3003+ clearTimeout ( idleTimeoutTimer ) ;
3004+ idleTimeoutTimer = setTimeout ( doIdleTimeout , idleTimeout * 1000 ) ;
3005+ }
3006+ }
3007+
3008+ function initIdleTimeout ( ) {
3009+ var opts = true ;
3010+
3011+ if ( idleTimeout === null )
3012+ return ;
3013+
3014+ idleTimeoutTimer = setTimeout ( doIdleTimeout , idleTimeout * 1000 ) ;
3015+
3016+ try {
3017+ var options = Object . defineProperty ( { } , "passive" , {
3018+ get : function ( ) {
3019+ //passive supported
3020+ opts = {
3021+ capture : true ,
3022+ passive : true
3023+ } ;
3024+ }
3025+ } ) ;
3026+
3027+ window . addEventListener ( 'test' , options , options ) ;
3028+ window . removeEventListener ( 'test' , options , options ) ;
3029+ } catch ( err ) {
3030+ opts = true ; // passive not supported, only specify capture
3031+ }
3032+
3033+ if ( document . addEventListener ) {
3034+ document . addEventListener ( 'mousedown' , delayIdleTimeout , opts ) ;
3035+ document . addEventListener ( 'mouseup' , delayIdleTimeout , opts ) ;
3036+ document . addEventListener ( 'wheel' , delayIdleTimeout , opts ) ;
3037+ document . addEventListener ( 'keydown' , delayIdleTimeout , opts ) ;
3038+ document . addEventListener ( 'keyup' , delayIdleTimeout , opts ) ;
3039+ document . addEventListener ( 'touchstart' , delayIdleTimeout , opts ) ;
3040+ document . addEventListener ( 'touchend' , delayIdleTimeout , opts ) ;
3041+ document . addEventListener ( 'pointerdown' , delayIdleTimeout , opts ) ;
3042+ document . addEventListener ( 'pointerup' , delayIdleTimeout , opts ) ;
3043+ }
3044+ }
3045+
29903046function load ( fullapp ) {
29913047 if ( loaded )
29923048 return ;
@@ -3018,6 +3074,7 @@ function load(fullapp) {
30183074
30193075 WT . history . _initialize ( ) ;
30203076 initDragDrop ( ) ;
3077+ initIdleTimeout ( ) ;
30213078 loaded = true ;
30223079
30233080 if ( fullapp )
0 commit comments