Prepare session-metadata export to external command
[ardour.git] / libs / gtkmm2ext / persistent_tooltip.cc
index 367175f3dc303f82d5ce3269dfa12f69979651e8..d45ef01408d2be966983920f461521b70ee0be02 100644 (file)
 
 #include <gtkmm/window.h>
 #include <gtkmm/label.h>
+#include <gtkmm/settings.h>
 #include "gtkmm2ext/persistent_tooltip.h"
 
 #include "pbd/stacktrace.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace std;
 using namespace Gtk;
 using namespace Gtkmm2ext;
 
+bool PersistentTooltip::_tooltips_enabled = true;
+unsigned int PersistentTooltip::_tooltip_timeout = 500;
+
 /** @param target The widget to provide the tooltip for */
 PersistentTooltip::PersistentTooltip (Gtk::Widget* target, bool  draggable, int margin_y)
        : _target (target)
@@ -43,6 +47,7 @@ PersistentTooltip::PersistentTooltip (Gtk::Widget* target, bool  draggable, int
        target->signal_leave_notify_event().connect (sigc::mem_fun (*this, &PersistentTooltip::leave), false);
        target->signal_button_press_event().connect (sigc::mem_fun (*this, &PersistentTooltip::press), false);
        target->signal_button_release_event().connect (sigc::mem_fun (*this, &PersistentTooltip::release), false);
+       _tooltip_timeout = Gtk::Settings::get_default()->property_gtk_tooltip_timeout ();
 }
 
 PersistentTooltip::~PersistentTooltip ()
@@ -56,7 +61,7 @@ PersistentTooltip::enter (GdkEventCrossing *)
        if (_timeout.connected()) {
                leave(NULL);
        }
-       _timeout = Glib::signal_timeout().connect (sigc::mem_fun (*this, &PersistentTooltip::timeout), 500);
+       _timeout = Glib::signal_timeout().connect (sigc::mem_fun (*this, &PersistentTooltip::timeout), _tooltip_timeout);
        return false;
 }
 
@@ -64,7 +69,7 @@ bool
 PersistentTooltip::timeout ()
 {
        show ();
-       return true;
+       return false;
 }
 
 bool
@@ -115,7 +120,7 @@ PersistentTooltip::hide ()
 void
 PersistentTooltip::show ()
 {
-       if (_tip.empty()) {
+       if (_tip.empty() || !_tooltips_enabled) {
                return;
        }
 
@@ -138,7 +143,7 @@ PersistentTooltip::show ()
                        _window->set_transient_for (*tlw);
                }
        }
-       
+
        set_tip (_tip);
 
        if (!_window->is_visible ()) {
@@ -146,12 +151,11 @@ PersistentTooltip::show ()
                int sw = gdk_screen_width ();
 
                _target->get_window()->get_origin (rx, ry);
-               
+
                /* the window needs to be realized first
                 * for _window->get_width() to be correct.
                 */
 
-               _window->present ();
 
                if (sw < rx + _window->get_width()) {
                        /* right edge of window would be off the right edge of
@@ -166,6 +170,9 @@ PersistentTooltip::show ()
                                _window->move (rx, ry + _target->get_height());
                        }
                }
+
+               _window->present ();
+
        }
 }