diff options
author | Robin Gareus <robin@gareus.org> | 2014-06-28 23:22:15 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2014-06-28 23:22:15 +0200 |
commit | 77216ac468d4ffe9ba044a9be377d7d2a7fa27b4 (patch) | |
tree | 34f76b0670a3fd60770c8b4d1c9cf6c3c605bcf4 /gtk2_ardour/public_editor.h | |
parent | fd7cddb847639b28bbeaf72d5b613833761efe6f (diff) |
add RAII DisplaySuspender
Diffstat (limited to 'gtk2_ardour/public_editor.h')
-rw-r--r-- | gtk2_ardour/public_editor.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index ff77387ce1..9eac1be2f7 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -84,6 +84,8 @@ class VerboseCursor; class XMLNode; struct SelectionRect; +class DisplaySuspender; + namespace ARDOUR_UI_UTILS { bool relay_key_press (GdkEventKey* ev, Gtk::Window* win); bool forward_key_press (GdkEventKey* ev); @@ -428,6 +430,25 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi (and protected) method here does not have a default value. */ virtual void _ensure_time_axis_view_is_visible (TimeAxisView const & tav, bool at_top) = 0; + + friend class DisplaySuspender; + virtual void suspend_route_redisplay () = 0; + virtual void resume_route_redisplay () = 0; + gint _suspend_route_redisplay_counter; +}; + +class DisplaySuspender { + public: + DisplaySuspender() { + if (g_atomic_int_add(&PublicEditor::instance()._suspend_route_redisplay_counter, 1) == 0) { + PublicEditor::instance().suspend_route_redisplay (); + } + } + ~DisplaySuspender () { + if (g_atomic_int_dec_and_test (&PublicEditor::instance()._suspend_route_redisplay_counter)) { + PublicEditor::instance().resume_route_redisplay (); + } + } }; #endif // __gtk_ardour_public_editor_h__ |