diff options
Diffstat (limited to 'libs/gtkmm2ext/idle_adjustment.cc')
-rw-r--r-- | libs/gtkmm2ext/idle_adjustment.cc | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/libs/gtkmm2ext/idle_adjustment.cc b/libs/gtkmm2ext/idle_adjustment.cc new file mode 100644 index 0000000000..45118283c5 --- /dev/null +++ b/libs/gtkmm2ext/idle_adjustment.cc @@ -0,0 +1,54 @@ +#define _BSD_SOURCE +#include <gtkmm2ext/idle_adjustment.h> +#include <gtkmm/main.h> +#include <iostream> + +using namespace Gtk; +using namespace sigc; +using namespace Gtkmm2ext; + +IdleAdjustment::IdleAdjustment (Gtk::Adjustment& adj) +{ + adj.signal_value_changed().connect (mem_fun (*this, &IdleAdjustment::underlying_adjustment_value_changed)); + timeout_queued = 0; + gettimeofday (&last_vc, 0); +} + +IdleAdjustment::~IdleAdjustment () +{ +} + +void +IdleAdjustment::underlying_adjustment_value_changed () +{ + gettimeofday (&last_vc, 0); + + if (timeout_queued) { + return; + } + + Glib::signal_timeout().connect(mem_fun(*this, &IdleAdjustment::timeout_handler), 250); + timeout_queued = true; +} + +gint +IdleAdjustment::timeout_handler () +{ + struct timeval now; + struct timeval tdiff; + + gettimeofday (&now, 0); + + timersub (&now, &last_vc, &tdiff); + + std::cerr << "timer elapsed, diff = " << tdiff.tv_sec << " + " << tdiff.tv_usec << std::endl; + + if (tdiff.tv_sec > 0 || tdiff.tv_usec > 250000) { + std::cerr << "send signal\n"; + value_changed (); + timeout_queued = false; + return FALSE; + } else { + return TRUE; + } +} |