summaryrefslogtreecommitdiff
path: root/gtk2_ardour/public_editor.h
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-06-28 23:22:15 +0200
committerRobin Gareus <robin@gareus.org>2014-06-28 23:22:15 +0200
commit77216ac468d4ffe9ba044a9be377d7d2a7fa27b4 (patch)
tree34f76b0670a3fd60770c8b4d1c9cf6c3c605bcf4 /gtk2_ardour/public_editor.h
parentfd7cddb847639b28bbeaf72d5b613833761efe6f (diff)
add RAII DisplaySuspender
Diffstat (limited to 'gtk2_ardour/public_editor.h')
-rw-r--r--gtk2_ardour/public_editor.h21
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__