1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-20 06:10:06 +02:00

Open popup menu under icon when using context menu key

This commit is contained in:
lllucius 2015-01-03 09:29:42 +00:00
parent c3c458e3fa
commit c9cde48f21
2 changed files with 40 additions and 8 deletions

View File

@ -190,6 +190,7 @@ enum {
BEGIN_EVENT_TABLE(Meter, wxPanel)
EVT_TIMER(OnMeterUpdateID, Meter::OnMeterUpdate)
EVT_MOUSE_EVENTS(Meter::OnMouse)
EVT_KEY_DOWN(Meter::OnKeyDown)
EVT_ERASE_BACKGROUND(Meter::OnErase)
EVT_PAINT(Meter::OnPaint)
EVT_SIZE(Meter::OnSize)
@ -665,10 +666,12 @@ void Meter::OnMouse(wxMouseEvent &evt)
menu->Append(OnPreferencesID, _("Preferences..."));
if (evt.RightDown())
PopupMenu(menu, evt.m_x, evt.m_y);
else
PopupMenu(menu, mIconRect.x + 1, mIconRect.y + mIconRect.height + 1);
if (evt.RightDown()) {
ShowMenu(evt.GetPosition());
}
else {
ShowMenu(wxPoint(mIconRect.x + 1, mIconRect.y + mIconRect.height + 1));
}
delete menu;
}
@ -687,7 +690,15 @@ void Meter::OnMouse(wxMouseEvent &evt)
}
}
void Meter::SetStyle(Meter::Style newStyle)
void Meter::OnKeyDown(wxKeyEvent &evt)
{
if (evt.GetKeyCode() == WXK_WINDOWS_MENU)
{
ShowMenu(wxPoint(mIconRect.x + 1, mIconRect.y + mIconRect.height + 1));
}
}
void Meter::SetStyle(Style newStyle)
{
if (mStyle != newStyle && mDesiredStyle == AutomaticStereo)
{
@ -1775,9 +1786,29 @@ void Meter::RestoreState(void *state)
}
//
// Pop-up menu handlers
// Pop-up menu
//
void Meter::ShowMenu(const wxPoint & pos)
{
wxMenu *menu = new wxMenu();
// Note: these should be kept in the same order as the enum
if (mIsInput) {
wxMenuItem *mi;
if (mMonitoring)
mi = menu->Append(OnMonitorID, _("Stop Monitoring"));
else
mi = menu->Append(OnMonitorID, _("Start Monitoring"));
mi->Enable(!mActive || mMonitoring);
}
menu->Append(OnPreferencesID, _("Preferences..."));
PopupMenu(menu, pos);
delete menu;
}
void Meter::OnMonitor(wxCommandEvent & WXUNUSED(event))
{
StartMonitoring();

View File

@ -183,6 +183,7 @@ class Meter : public wxPanel
void OnPaint(wxPaintEvent &evt);
void OnSize(wxSizeEvent &evt);
void OnMouse(wxMouseEvent &evt);
void OnKeyDown(wxKeyEvent &evt);
void OnAudioIOStatus(wxCommandEvent &evt);
@ -197,9 +198,9 @@ class Meter : public wxPanel
wxFont GetFont() const;
//
// Pop-up menu handlers
// Pop-up menu
//
void ShowMenu(const wxPoint & pos);
void OnMonitor(wxCommandEvent &evt);
void OnPreferences(wxCommandEvent &evt);
void OnMeterPrefsUpdated(wxCommandEvent &evt);