mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-09 00:04:56 +01:00
fix thinko in handling of cue page context menus
Context menus should (unless there is a very strong reason otherwise) be popped up on button press, not button release. In addition Gtk::Menu::popup() should be given the button ID of the button used, so that it can manage both styles of menu interaction (press/drag/release and press/release/drag/press)
This commit is contained in:
parent
975b01060a
commit
fece4f0ca8
6 changed files with 84 additions and 94 deletions
|
|
@ -34,6 +34,7 @@
|
||||||
|
|
||||||
#include "gtkmm2ext/actions.h"
|
#include "gtkmm2ext/actions.h"
|
||||||
#include "gtkmm2ext/colors.h"
|
#include "gtkmm2ext/colors.h"
|
||||||
|
#include "gtkmm2ext/keyboard.h"
|
||||||
#include "gtkmm2ext/utils.h"
|
#include "gtkmm2ext/utils.h"
|
||||||
|
|
||||||
#include "ardour_ui.h"
|
#include "ardour_ui.h"
|
||||||
|
|
@ -226,7 +227,7 @@ CueBoxUI::~CueBoxUI ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CueBoxUI::context_menu (uint64_t idx)
|
CueBoxUI::context_menu (GdkEventButton* ev, uint64_t idx)
|
||||||
{
|
{
|
||||||
using namespace Gtk;
|
using namespace Gtk;
|
||||||
using namespace Gtk::Menu_Helpers;
|
using namespace Gtk::Menu_Helpers;
|
||||||
|
|
@ -298,7 +299,7 @@ CueBoxUI::context_menu (uint64_t idx)
|
||||||
items.push_back (SeparatorElem());
|
items.push_back (SeparatorElem());
|
||||||
items.push_back (MenuElem (_("Clear All..."), sigc::bind (sigc::mem_fun (*this, &CueBoxUI::clear_all_triggers), idx)));
|
items.push_back (MenuElem (_("Clear All..."), sigc::bind (sigc::mem_fun (*this, &CueBoxUI::clear_all_triggers), idx)));
|
||||||
|
|
||||||
_context_menu->popup (3, gtk_get_current_event_time ());
|
_context_menu->popup (ev->button, gtk_get_current_event_time ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -439,16 +440,10 @@ CueBoxUI::event (GdkEvent* ev, uint64_t n)
|
||||||
case GDK_BUTTON_PRESS:
|
case GDK_BUTTON_PRESS:
|
||||||
if (ev->button.button == 1) {
|
if (ev->button.button == 1) {
|
||||||
trigger_cue_row (n);
|
trigger_cue_row (n);
|
||||||
|
} else if (Gtkmm2ext::Keyboard::is_context_menu_event (&ev->button)) {
|
||||||
|
context_menu (&ev->button, n);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GDK_2BUTTON_PRESS:
|
|
||||||
break;
|
|
||||||
case GDK_BUTTON_RELEASE:
|
|
||||||
switch (ev->button.button) {
|
|
||||||
case 3:
|
|
||||||
context_menu (n);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ private:
|
||||||
bool text_event (GdkEvent*, uint64_t);
|
bool text_event (GdkEvent*, uint64_t);
|
||||||
void build ();
|
void build ();
|
||||||
|
|
||||||
void context_menu (uint64_t idx);
|
void context_menu (GdkEventButton*, uint64_t idx);
|
||||||
void get_slots (TriggerList &triggerlist, uint64_t idx);
|
void get_slots (TriggerList &triggerlist, uint64_t idx);
|
||||||
|
|
||||||
void clear_all_triggers(uint64_t idx);
|
void clear_all_triggers(uint64_t idx);
|
||||||
|
|
|
||||||
|
|
@ -267,6 +267,9 @@ TriggerMaster::event_handler (GdkEvent* ev)
|
||||||
} else {
|
} else {
|
||||||
_triggerbox->stop_all_quantized ();
|
_triggerbox->stop_all_quantized ();
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
} else if (Gtkmm2ext::Keyboard::is_context_menu_event (&ev->button)) {
|
||||||
|
context_menu (&ev->button);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GDK_ENTER_NOTIFY:
|
case GDK_ENTER_NOTIFY:
|
||||||
|
|
@ -281,11 +284,7 @@ TriggerMaster::event_handler (GdkEvent* ev)
|
||||||
}
|
}
|
||||||
redraw ();
|
redraw ();
|
||||||
break;
|
break;
|
||||||
case GDK_BUTTON_RELEASE:
|
|
||||||
switch (ev->button.button) {
|
|
||||||
case 3:
|
|
||||||
context_menu ();
|
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -294,7 +293,7 @@ TriggerMaster::event_handler (GdkEvent* ev)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
TriggerMaster::context_menu ()
|
TriggerMaster::context_menu (GdkEventButton* ev)
|
||||||
{
|
{
|
||||||
using namespace Gtk;
|
using namespace Gtk;
|
||||||
using namespace Gtk::Menu_Helpers;
|
using namespace Gtk::Menu_Helpers;
|
||||||
|
|
@ -358,7 +357,7 @@ TriggerMaster::context_menu ()
|
||||||
items.push_back (SeparatorElem());
|
items.push_back (SeparatorElem());
|
||||||
items.push_back (MenuElem (_("Clear All..."), sigc::mem_fun (*this, &TriggerMaster::clear_all_triggers)));
|
items.push_back (MenuElem (_("Clear All..."), sigc::mem_fun (*this, &TriggerMaster::clear_all_triggers)));
|
||||||
|
|
||||||
_context_menu->popup (1, gtk_get_current_event_time ());
|
_context_menu->popup (ev->button, gtk_get_current_event_time ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -584,13 +583,8 @@ CueMaster::event_handler (GdkEvent* ev)
|
||||||
_session->trigger_stop_all (false); //stop quantized (bar end)
|
_session->trigger_stop_all (false); //stop quantized (bar end)
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
} else if (Gtkmm2ext::Keyboard::is_context_menu_event (&ev->button)) {
|
||||||
break;
|
context_menu (&ev->button);
|
||||||
case GDK_BUTTON_RELEASE:
|
|
||||||
switch (ev->button.button) {
|
|
||||||
case 3:
|
|
||||||
context_menu ();
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GDK_ENTER_NOTIFY:
|
case GDK_ENTER_NOTIFY:
|
||||||
|
|
@ -604,6 +598,7 @@ CueMaster::event_handler (GdkEvent* ev)
|
||||||
set_default_colors ();
|
set_default_colors ();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -652,7 +647,7 @@ CueMaster::ui_parameter_changed (std::string const& p)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CueMaster::context_menu ()
|
CueMaster::context_menu (GdkEventButton* ev)
|
||||||
{
|
{
|
||||||
using namespace Gtk;
|
using namespace Gtk;
|
||||||
using namespace Gtk::Menu_Helpers;
|
using namespace Gtk::Menu_Helpers;
|
||||||
|
|
@ -721,7 +716,7 @@ CueMaster::context_menu ()
|
||||||
items.push_back (SeparatorElem());
|
items.push_back (SeparatorElem());
|
||||||
items.push_back (MenuElem (_("Clear All..."), sigc::mem_fun (*this, &CueMaster::clear_all_triggers)));
|
items.push_back (MenuElem (_("Clear All..."), sigc::mem_fun (*this, &CueMaster::clear_all_triggers)));
|
||||||
|
|
||||||
_context_menu->popup (3, gtk_get_current_event_time ());
|
_context_menu->popup (ev->button, gtk_get_current_event_time ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -79,7 +79,7 @@ public:
|
||||||
void selection_change ();
|
void selection_change ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void context_menu ();
|
void context_menu (GdkEventButton*);
|
||||||
|
|
||||||
void clear_all_triggers();
|
void clear_all_triggers();
|
||||||
void set_all_colors();
|
void set_all_colors();
|
||||||
|
|
@ -127,7 +127,7 @@ public:
|
||||||
bool event_handler (GdkEvent*);
|
bool event_handler (GdkEvent*);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void context_menu ();
|
void context_menu (GdkEventButton*);
|
||||||
|
|
||||||
void get_boxen (TriggerBoxList &boxlist);
|
void get_boxen (TriggerBoxList &boxlist);
|
||||||
void clear_all_triggers();
|
void clear_all_triggers();
|
||||||
|
|
|
||||||
|
|
@ -411,8 +411,7 @@ TriggerUI::context_menu ()
|
||||||
items.push_back (MenuElem (_("MIDI Learn"), sigc::mem_fun (*this, &TriggerUI::trigger_midi_learn)));
|
items.push_back (MenuElem (_("MIDI Learn"), sigc::mem_fun (*this, &TriggerUI::trigger_midi_learn)));
|
||||||
items.push_back (MenuElem (_("MIDI un-Learn"), sigc::mem_fun (*this, &TriggerUI::trigger_midi_unlearn)));
|
items.push_back (MenuElem (_("MIDI un-Learn"), sigc::mem_fun (*this, &TriggerUI::trigger_midi_unlearn)));
|
||||||
|
|
||||||
|
_context_menu->popup (1, gtk_get_current_event_time ());
|
||||||
_context_menu->popup (3, gtk_get_current_event_time ());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -547,7 +546,7 @@ TriggerUI::launch_context_menu ()
|
||||||
dynamic_cast<Gtk::CheckMenuItem*> (&items.back ())->set_active (true);
|
dynamic_cast<Gtk::CheckMenuItem*> (&items.back ())->set_active (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
_launch_context_menu->popup (3, gtk_get_current_event_time ());
|
_launch_context_menu->popup (1, gtk_get_current_event_time ());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -638,6 +638,11 @@ TriggerEntry::name_button_event (GdkEvent* ev)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GDK_BUTTON_PRESS:
|
case GDK_BUTTON_PRESS:
|
||||||
|
if (Gtkmm2ext::Keyboard::is_context_menu_event (&ev->button)) {
|
||||||
|
PublicEditor::instance ().get_selection ().set (this);
|
||||||
|
context_menu ();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case GDK_2BUTTON_PRESS:
|
case GDK_2BUTTON_PRESS:
|
||||||
#if SELECTION_PROPERTIES_BOX_TODO
|
#if SELECTION_PROPERTIES_BOX_TODO
|
||||||
|
|
@ -650,10 +655,6 @@ TriggerEntry::name_button_event (GdkEvent* ev)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
switch (ev->button.button) {
|
switch (ev->button.button) {
|
||||||
case 3:
|
|
||||||
PublicEditor::instance ().get_selection ().set (this);
|
|
||||||
context_menu ();
|
|
||||||
return true;
|
|
||||||
case 1:
|
case 1:
|
||||||
PublicEditor::instance ().get_selection ().set (this);
|
PublicEditor::instance ().get_selection ().set (this);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue