// center
- points[0].x = (darea.get_width()/2 - (triangle_size/2)) - 1;
+ points[0].x = (darea.get_width()/2 - triangle_size);
points[0].y = 0;
- points[1].x = (darea.get_width()/2 + (triangle_size/2)) - 1;
+ points[1].x = (darea.get_width()/2 + triangle_size) - 1;
points[1].y = 0;
points[2].x = darea.get_width()/2 - 1;
// right
- points[0].x = (darea.get_width() - triangle_size) - 1;
+ points[0].x = (darea.get_width() - triangle_size);
points[0].y = 0;
points[1].x = darea.get_width();
bool
PannerBar::button_release (GdkEventButton* ev)
{
+ drop_grab();
+
if (ev->button == 1 && ev->type == GDK_BUTTON_RELEASE && ev->y < 10) {
if (ev->x < triangle_size) {
adjustment.set_value (adjustment.get_lower());
darea.signal_expose_event().connect (mem_fun (*this, &BarController::expose));
darea.signal_motion_notify_event().connect (mem_fun (*this, &BarController::motion));
- darea.signal_button_press_event().connect (mem_fun (*this, &BarController::button_press));
- darea.signal_button_release_event().connect (mem_fun (*this, &BarController::button_release));
+ darea.signal_button_press_event().connect (mem_fun (*this, &BarController::button_press), false);
+ darea.signal_button_release_event().connect (mem_fun (*this, &BarController::button_release), false);
darea.signal_scroll_event().connect (mem_fun (*this, &BarController::scroll));
spinner.signal_activate().connect (mem_fun (*this, &BarController::entry_activated));
show_all ();
}
+void
+BarController::drop_grab ()
+{
+ if (grabbed) {
+ grabbed = false;
+ darea.remove_modal_grab();
+ StopGesture ();
+ }
+}
+
bool
BarController::button_press (GdkEventButton* ev)
{
case 1:
if (ev->type == GDK_2BUTTON_PRESS) {
switch_on_release = true;
- grabbed = false;
- darea.remove_modal_grab();
+ drop_grab ();
} else {
switch_on_release = false;
darea.add_modal_grab();
{
double fract;
+ drop_grab ();
+
switch (ev->button) {
case 1:
if (switch_on_release) {
mouse_control (ev->x, ev->window, scale);
}
- darea.remove_modal_grab();
- grabbed = false;
- StopGesture ();
- grabbed = false;
break;
case 2:
double scale;
if (!grabbed) {
- return TRUE;
+ return true;
}
if ((ev->state & (GDK_SHIFT_MASK|GDK_CONTROL_MASK)) == GDK_SHIFT_MASK) {
#ifndef __gtkmm2ext_bar_controller_h__
#define __gtkmm2ext_bar_controller_h__
-#include <gtkmm.h>
+#include <gtkmm/frame.h>
+#include <gtkmm/drawingarea.h>
#include <gtkmm2ext/binding_proxy.h>
namespace ARDOUR {
gint switch_to_spinner ();
void entry_activated ();
+ void drop_grab ();
};