Align switch statement with case labels to reduce indentation in EngineDialog
[ardour.git] / libs / gtkmm2ext / persistent_tooltip.cc
index 61eb4884f5b236a4c54fa59c580e8237b205c398..c7cb3f4df235b0d36f2be6b659927b4ad9cde4ff 100644 (file)
@@ -30,11 +30,13 @@ using namespace Gtk;
 using namespace Gtkmm2ext;
 
 /** @param target The widget to provide the tooltip for */
-PersistentTooltip::PersistentTooltip (Gtk::Widget* target, int margin_y)
+PersistentTooltip::PersistentTooltip (Gtk::Widget* target, bool  draggable, int margin_y)
        : _target (target)
        , _window (0)
        , _label (0)
+       , _draggable (draggable)
        , _maybe_dragging (false)
+       , _align_to_center (true)
        , _margin_y (margin_y)
 {
        target->signal_enter_notify_event().connect (sigc::mem_fun (*this, &PersistentTooltip::enter), false);
@@ -62,7 +64,7 @@ bool
 PersistentTooltip::timeout ()
 {
        show ();
-       return true;
+       return false;
 }
 
 bool
@@ -99,7 +101,7 @@ PersistentTooltip::release (GdkEventButton* ev)
 bool
 PersistentTooltip::dragging () const
 {
-       return _maybe_dragging;
+       return _maybe_dragging && _draggable;
 }
 
 void
@@ -124,6 +126,7 @@ PersistentTooltip::show ()
                _window->set_decorated (false);
 
                _label = manage (new Label);
+               _label->modify_font (_font);
                _label->set_use_markup (true);
 
                _window->set_border_width (6);
@@ -135,27 +138,36 @@ PersistentTooltip::show ()
                        _window->set_transient_for (*tlw);
                }
        }
-       
+
        set_tip (_tip);
 
        if (!_window->is_visible ()) {
                int rx, ry;
-               int sw = gdk_screen_width();
+               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
+                          the screen, so don't show it in the usual place.
+                       */
                        rx = sw - _window->get_width();
-                       _window->move (rx, ry + _target->get_height());
+                       _window->move (rx, ry + _target->get_height() + _margin_y);
                } else {
-                       _window->move (rx + (_target->get_width () - _window->get_width ()) / 2, ry + _target->get_height());
+                       if (_align_to_center) {
+                               _window->move (rx + (_target->get_width () - _window->get_width ()) / 2, ry + _target->get_height());
+                       } else {
+                               _window->move (rx, ry + _target->get_height());
+                       }
                }
+
+               _window->present ();
+
        }
 }
 
@@ -168,3 +180,19 @@ PersistentTooltip::set_tip (string t)
                _label->set_markup (t);
        }
 }
+
+void
+PersistentTooltip::set_font (Pango::FontDescription font)
+{
+       _font = font;
+
+       if (_label) {
+               _label->modify_font (_font);
+       }
+}
+
+void
+PersistentTooltip::set_center_alignment (bool align_to_center)
+{
+       _align_to_center = align_to_center;
+}