From ab6e274613d33506997ee4e4b91f3d6423417af7 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 12 May 2020 15:37:23 +0200 Subject: Ignore idempotent set_name() calls These calls are expensive, particularly for ArdourButton, that triggers a re-layout. --- libs/gtkmm2ext/cairo_widget.cc | 14 +++++++++++++- libs/gtkmm2ext/gtkmm2ext/cairo_widget.h | 3 +++ 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'libs') diff --git a/libs/gtkmm2ext/cairo_widget.cc b/libs/gtkmm2ext/cairo_widget.cc index b06e443ec0..c79bf8acfe 100644 --- a/libs/gtkmm2ext/cairo_widget.cc +++ b/libs/gtkmm2ext/cairo_widget.cc @@ -55,8 +55,9 @@ CairoWidget::CairoWidget () , _current_parent (0) , _canvas_widget (false) , _nsglview (0) + , _widget_name ("") { - _name_proxy.connect (sigc::mem_fun (*this, &CairoWidget::on_name_changed)); + _name_proxy.connect (sigc::mem_fun (*this, &CairoWidget::on_widget_name_changed)); #ifdef USE_CAIRO_IMAGE_SURFACE _use_image_surface = true; #else @@ -461,3 +462,14 @@ CairoWidget::set_focus_handler (sigc::slot s) { focus_handler = s; } + +void +CairoWidget::on_widget_name_changed () +{ + Glib::ustring name = get_name(); + if (_widget_name == name) { + return; + } + _widget_name = name; + on_name_changed (); +} diff --git a/libs/gtkmm2ext/gtkmm2ext/cairo_widget.h b/libs/gtkmm2ext/gtkmm2ext/cairo_widget.h index 0dbd8fe8a0..73db99a0d4 100644 --- a/libs/gtkmm2ext/gtkmm2ext/cairo_widget.h +++ b/libs/gtkmm2ext/gtkmm2ext/cairo_widget.h @@ -143,6 +143,8 @@ protected: static sigc::slot focus_handler; private: + void on_widget_name_changed (); + Cairo::RefPtr image_surface; Glib::SignalProxyProperty _name_proxy; sigc::connection _parent_style_change; @@ -151,6 +153,7 @@ private: void* _nsglview; bool _use_image_surface; Gdk::Rectangle _allocation; + Glib::ustring _widget_name; }; -- cgit v1.2.3