summaryrefslogtreecommitdiff
path: root/libs/gtkmm2ext
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-05-12 15:37:23 +0200
committerRobin Gareus <robin@gareus.org>2020-05-12 15:37:23 +0200
commitab6e274613d33506997ee4e4b91f3d6423417af7 (patch)
treed1db4fb0d0f0e6877283b22e084cbb6cba4030e6 /libs/gtkmm2ext
parent7b2b2401a30385ef80ac69d914e8a405804be7ed (diff)
Ignore idempotent set_name() calls
These calls are expensive, particularly for ArdourButton, that triggers a re-layout.
Diffstat (limited to 'libs/gtkmm2ext')
-rw-r--r--libs/gtkmm2ext/cairo_widget.cc14
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/cairo_widget.h3
2 files changed, 16 insertions, 1 deletions
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<void,Gtk::Widget*> 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<void,Gtk::Widget*> focus_handler;
private:
+ void on_widget_name_changed ();
+
Cairo::RefPtr<Cairo::Surface> 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;
};