Browse Source

add inactivity_timeout_event

David Rose 19 years ago
parent
commit
56f63aaff6

+ 3 - 0
panda/src/tform/config_tform.cxx

@@ -55,6 +55,9 @@ ConfigVariableDouble drive_horizontal_ramp_up_time
 ConfigVariableDouble drive_horizontal_ramp_down_time
 ConfigVariableDouble drive_horizontal_ramp_down_time
 ("drive-horizontal-ramp-down-time", 0.0);
 ("drive-horizontal-ramp-down-time", 0.0);
 
 
+ConfigVariableDouble inactivity_timeout
+("inactivity-timeout", 0.0);
+
 ConfigureFn(config_tform) {
 ConfigureFn(config_tform) {
   DriveInterface::init_type();
   DriveInterface::init_type();
   ButtonThrower::init_type();
   ButtonThrower::init_type();

+ 2 - 0
panda/src/tform/config_tform.h

@@ -38,4 +38,6 @@ extern EXPCL_PANDA ConfigVariableDouble drive_vertical_ramp_down_time;
 extern EXPCL_PANDA ConfigVariableDouble drive_horizontal_ramp_up_time;
 extern EXPCL_PANDA ConfigVariableDouble drive_horizontal_ramp_up_time;
 extern EXPCL_PANDA ConfigVariableDouble drive_horizontal_ramp_down_time;
 extern EXPCL_PANDA ConfigVariableDouble drive_horizontal_ramp_down_time;
 
 
+extern EXPCL_PANDA ConfigVariableDouble inactivity_timeout;
+
 #endif
 #endif

+ 28 - 1
panda/src/tform/mouseWatcher.I

@@ -511,12 +511,15 @@ has_display_region() const {
 //     Function: MouseWatcher::set_inactivity_timeout
 //     Function: MouseWatcher::set_inactivity_timeout
 //       Access: Published
 //       Access: Published
 //  Description: Sets an inactivity timeout on the mouse activity.
 //  Description: Sets an inactivity timeout on the mouse activity.
-//               When this timeout (in seconds) is exceed with no
+//               When this timeout (in seconds) is exceeded with no
 //               keyboard or mouse activity, all currently-held
 //               keyboard or mouse activity, all currently-held
 //               buttons are automatically released.  This is intended
 //               buttons are automatically released.  This is intended
 //               to help protect against people who inadvertently (or
 //               to help protect against people who inadvertently (or
 //               intentionally) leave a keyboard key stuck down and
 //               intentionally) leave a keyboard key stuck down and
 //               then wander away from the keyboard.
 //               then wander away from the keyboard.
+//
+//               Also, when this timeout expires, the event specified
+//               by set_inactivity_timeout() will be generated.
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 INLINE void MouseWatcher::
 INLINE void MouseWatcher::
 set_inactivity_timeout(double timeout) {
 set_inactivity_timeout(double timeout) {
@@ -563,6 +566,30 @@ clear_inactivity_timeout() {
   note_activity();
   note_activity();
 }
 }
 
 
+////////////////////////////////////////////////////////////////////
+//     Function: MouseWatcher::set_inactivity_timeout_event
+//       Access: Published
+//  Description: Specifies the event string that will be generated
+//               when the inactivity timeout counter expires.  See
+//               set_inactivity_timeout().
+////////////////////////////////////////////////////////////////////
+INLINE void MouseWatcher::
+set_inactivity_timeout_event(const string &event) {
+  _inactivity_timeout_event = event;
+}
+
+////////////////////////////////////////////////////////////////////
+//     Function: MouseWatcher::get_inactivity_timeout_event
+//       Access: Published
+//  Description: Returns the event string that will be generated
+//               when the inactivity timeout counter expires.  See
+//               set_inactivity_timeout().
+////////////////////////////////////////////////////////////////////
+INLINE const string &MouseWatcher::
+get_inactivity_timeout_event() const {
+  return _inactivity_timeout_event;
+}
+
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 //     Function: MouseWatcher::within_region
 //     Function: MouseWatcher::within_region
 //       Access: Protected
 //       Access: Protected

+ 7 - 2
panda/src/tform/mouseWatcher.cxx

@@ -32,6 +32,7 @@
 #include "dcast.h"
 #include "dcast.h"
 #include "indent.h"
 #include "indent.h"
 #include "mutexHolder.h"
 #include "mutexHolder.h"
+#include "nearly_zero.h"
 
 
 #include <algorithm>
 #include <algorithm>
 
 
@@ -67,8 +68,11 @@ MouseWatcher(const string &name) :
   _button_down = false;
   _button_down = false;
   _eh = (EventHandler *)NULL;
   _eh = (EventHandler *)NULL;
   _display_region = (DisplayRegion *)NULL;
   _display_region = (DisplayRegion *)NULL;
-  _has_inactivity_timeout = false;
-  _inactivity_timeout = 0.0;
+
+  _inactivity_timeout = inactivity_timeout;
+  _has_inactivity_timeout = !IS_NEARLY_ZERO(_inactivity_timeout);
+  
+  _inactivity_timeout_event = "inactivity_timeout";
   _last_activity = 0.0;
   _last_activity = 0.0;
   _inactivity_state = IS_active;
   _inactivity_state = IS_active;
 
 
@@ -1425,6 +1429,7 @@ do_transmit_data(DataGraphTraverser *trav, const DataNodeTransmit &input,
       }
       }
     }
     }
     _inactivity_state = IS_inactive;
     _inactivity_state = IS_inactive;
+    throw_event(_inactivity_timeout_event);
     break;
     break;
     
     
   case IS_inactive_to_active:
   case IS_inactive_to_active:

+ 5 - 0
panda/src/tform/mouseWatcher.h

@@ -126,6 +126,10 @@ PUBLISHED:
   INLINE bool has_inactivity_timeout() const;
   INLINE bool has_inactivity_timeout() const;
   INLINE double get_inactivity_timeout() const;
   INLINE double get_inactivity_timeout() const;
   INLINE void clear_inactivity_timeout();
   INLINE void clear_inactivity_timeout();
+
+  INLINE void set_inactivity_timeout_event(const string &event);
+  INLINE const string &get_inactivity_timeout_event() const;
+
   void note_activity();
   void note_activity();
 
 
 public:
 public:
@@ -217,6 +221,7 @@ private:
 
 
   bool _has_inactivity_timeout;
   bool _has_inactivity_timeout;
   double _inactivity_timeout;
   double _inactivity_timeout;
+  string _inactivity_timeout_event;
   double _last_activity;
   double _last_activity;
 
 
   enum InactivityState {
   enum InactivityState {