Merge branch 'mac-search-menu-check'
Fix check items state in wxSearchCtrl menu under macOS. See https://github.com/wxWidgets/wxWidgets/pull/2304
This commit is contained in:
@@ -44,8 +44,8 @@ public:
|
|||||||
// implementation only from now on
|
// implementation only from now on
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
|
|
||||||
bool HandleCommandUpdateStatus( wxMenuItem* menuItem, wxWindow* senderWindow = NULL);
|
bool HandleCommandUpdateStatus( wxMenuItem* menuItem );
|
||||||
bool HandleCommandProcess( wxMenuItem* menuItem, wxWindow* senderWindow = NULL);
|
bool HandleCommandProcess( wxMenuItem* menuItem );
|
||||||
void HandleMenuItemHighlighted( wxMenuItem* menuItem );
|
void HandleMenuItemHighlighted( wxMenuItem* menuItem );
|
||||||
void HandleMenuOpened();
|
void HandleMenuOpened();
|
||||||
void HandleMenuClosed();
|
void HandleMenuClosed();
|
||||||
|
@@ -62,6 +62,10 @@ public:
|
|||||||
|
|
||||||
wxSearchWidgetImpl * GetSearchPeer() const;
|
wxSearchWidgetImpl * GetSearchPeer() const;
|
||||||
|
|
||||||
|
#if wxUSE_MENUS
|
||||||
|
virtual void OSXAfterMenuEvent() wxOVERRIDE;
|
||||||
|
#endif // wxUSE_MENUS
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
wxSize DoGetBestSize() const wxOVERRIDE;
|
wxSize DoGetBestSize() const wxOVERRIDE;
|
||||||
|
@@ -299,6 +299,11 @@ public:
|
|||||||
// Return the DPI corresponding to the given scale factor.
|
// Return the DPI corresponding to the given scale factor.
|
||||||
static wxSize OSXMakeDPIFromScaleFactor(double scaleFactor);
|
static wxSize OSXMakeDPIFromScaleFactor(double scaleFactor);
|
||||||
|
|
||||||
|
#if wxUSE_MENUS
|
||||||
|
// Called on the invoking window after handling the menu event.
|
||||||
|
virtual void OSXAfterMenuEvent() { }
|
||||||
|
#endif // wxUSE_MENUS
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// For controls like radio buttons which are genuinely composite
|
// For controls like radio buttons which are genuinely composite
|
||||||
wxList m_subControls;
|
wxList m_subControls;
|
||||||
|
@@ -53,7 +53,8 @@ enum
|
|||||||
ID_CANCEL_CB,
|
ID_CANCEL_CB,
|
||||||
ID_MENU_CB,
|
ID_MENU_CB,
|
||||||
|
|
||||||
ID_SEARCHMENU
|
ID_SEARCHMENU,
|
||||||
|
ID_SEARCHMENU_LAST = ID_SEARCHMENU + 5
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -82,6 +83,8 @@ protected:
|
|||||||
void OnText(wxCommandEvent& event);
|
void OnText(wxCommandEvent& event);
|
||||||
void OnTextEnter(wxCommandEvent& event);
|
void OnTextEnter(wxCommandEvent& event);
|
||||||
|
|
||||||
|
void OnSearchMenu(wxCommandEvent& event);
|
||||||
|
|
||||||
void OnSearch(wxCommandEvent& event);
|
void OnSearch(wxCommandEvent& event);
|
||||||
void OnSearchCancel(wxCommandEvent& event);
|
void OnSearchCancel(wxCommandEvent& event);
|
||||||
|
|
||||||
@@ -113,6 +116,9 @@ wxBEGIN_EVENT_TABLE(SearchCtrlWidgetsPage, WidgetsPage)
|
|||||||
EVT_TEXT(wxID_ANY, SearchCtrlWidgetsPage::OnText)
|
EVT_TEXT(wxID_ANY, SearchCtrlWidgetsPage::OnText)
|
||||||
EVT_TEXT_ENTER(wxID_ANY, SearchCtrlWidgetsPage::OnTextEnter)
|
EVT_TEXT_ENTER(wxID_ANY, SearchCtrlWidgetsPage::OnTextEnter)
|
||||||
|
|
||||||
|
EVT_MENU_RANGE(ID_SEARCHMENU, ID_SEARCHMENU_LAST,
|
||||||
|
SearchCtrlWidgetsPage::OnSearchMenu)
|
||||||
|
|
||||||
EVT_SEARCH(wxID_ANY, SearchCtrlWidgetsPage::OnSearch)
|
EVT_SEARCH(wxID_ANY, SearchCtrlWidgetsPage::OnSearch)
|
||||||
EVT_SEARCH_CANCEL(wxID_ANY, SearchCtrlWidgetsPage::OnSearchCancel)
|
EVT_SEARCH_CANCEL(wxID_ANY, SearchCtrlWidgetsPage::OnSearchCancel)
|
||||||
wxEND_EVENT_TABLE()
|
wxEND_EVENT_TABLE()
|
||||||
@@ -187,14 +193,13 @@ void SearchCtrlWidgetsPage::RecreateWidget()
|
|||||||
wxMenu* SearchCtrlWidgetsPage::CreateTestMenu()
|
wxMenu* SearchCtrlWidgetsPage::CreateTestMenu()
|
||||||
{
|
{
|
||||||
wxMenu* menu = new wxMenu;
|
wxMenu* menu = new wxMenu;
|
||||||
const int SEARCH_MENU_SIZE = 5;
|
|
||||||
wxMenuItem* menuItem = menu->Append(wxID_ANY, "Recent Searches", "", wxITEM_NORMAL);
|
wxMenuItem* menuItem = menu->Append(wxID_ANY, "Recent Searches", "", wxITEM_NORMAL);
|
||||||
menuItem->Enable(false);
|
menuItem->Enable(false);
|
||||||
for ( int i = 0; i < SEARCH_MENU_SIZE; i++ )
|
for ( int i = 0; i < ID_SEARCHMENU_LAST - ID_SEARCHMENU; i++ )
|
||||||
{
|
{
|
||||||
wxString itemText = wxString::Format("item %i",i);
|
wxString itemText = wxString::Format("item %i",i);
|
||||||
wxString tipText = wxString::Format("tip %i",i);
|
wxString tipText = wxString::Format("tip %i",i);
|
||||||
menu->Append(ID_SEARCHMENU+i, itemText, tipText, wxITEM_NORMAL);
|
menu->Append(ID_SEARCHMENU+i, itemText, tipText, wxITEM_CHECK);
|
||||||
}
|
}
|
||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
@@ -235,6 +240,13 @@ void SearchCtrlWidgetsPage::OnTextEnter(wxCommandEvent& event)
|
|||||||
event.GetString());
|
event.GetString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SearchCtrlWidgetsPage::OnSearchMenu(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
int id = event.GetId() - ID_SEARCHMENU;
|
||||||
|
wxLogMessage("Search menu: \"item %i\" selected (%s).",
|
||||||
|
id, event.IsChecked() ? "checked" : "unchecked");
|
||||||
|
}
|
||||||
|
|
||||||
void SearchCtrlWidgetsPage::OnSearch(wxCommandEvent& event)
|
void SearchCtrlWidgetsPage::OnSearch(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
wxLogMessage("Search button: search for \"%s\".", event.GetString());
|
wxLogMessage("Search button: search for \"%s\".", event.GetString());
|
||||||
|
@@ -318,7 +318,7 @@ void wxMenu::DoRearrange()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool wxMenu::HandleCommandUpdateStatus( wxMenuItem* item, wxWindow* senderWindow )
|
bool wxMenu::HandleCommandUpdateStatus( wxMenuItem* item )
|
||||||
{
|
{
|
||||||
int menuid = item ? item->GetId() : 0;
|
int menuid = item ? item->GetId() : 0;
|
||||||
wxUpdateUIEvent event(menuid);
|
wxUpdateUIEvent event(menuid);
|
||||||
@@ -329,11 +329,6 @@ bool wxMenu::HandleCommandUpdateStatus( wxMenuItem* item, wxWindow* senderWindow
|
|||||||
|
|
||||||
bool processed = DoProcessEvent(this, event, GetWindow());
|
bool processed = DoProcessEvent(this, event, GetWindow());
|
||||||
|
|
||||||
if ( !processed && senderWindow != NULL)
|
|
||||||
{
|
|
||||||
processed = senderWindow->HandleWindowEvent(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( processed )
|
if ( processed )
|
||||||
{
|
{
|
||||||
// if anything changed, update the changed attribute
|
// if anything changed, update the changed attribute
|
||||||
@@ -348,7 +343,7 @@ bool wxMenu::HandleCommandUpdateStatus( wxMenuItem* item, wxWindow* senderWindow
|
|||||||
return processed;
|
return processed;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxMenu::HandleCommandProcess( wxMenuItem* item, wxWindow* senderWindow )
|
bool wxMenu::HandleCommandProcess( wxMenuItem* item )
|
||||||
{
|
{
|
||||||
int menuid = item ? item->GetId() : 0;
|
int menuid = item ? item->GetId() : 0;
|
||||||
bool processed = false;
|
bool processed = false;
|
||||||
@@ -357,24 +352,18 @@ bool wxMenu::HandleCommandProcess( wxMenuItem* item, wxWindow* senderWindow )
|
|||||||
|
|
||||||
if ( SendEvent( menuid , item->IsCheckable() ? item->IsChecked() : -1 ) )
|
if ( SendEvent( menuid , item->IsCheckable() ? item->IsChecked() : -1 ) )
|
||||||
processed = true ;
|
processed = true ;
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( senderWindow != NULL )
|
|
||||||
{
|
|
||||||
wxCommandEvent event(wxEVT_MENU , menuid);
|
|
||||||
event.SetEventObject(this);
|
|
||||||
event.SetInt(item->IsCheckable() ? item->IsChecked() : -1);
|
|
||||||
|
|
||||||
if ( senderWindow->HandleWindowEvent(event) )
|
|
||||||
processed = true ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!processed && item)
|
if(!processed && item)
|
||||||
{
|
{
|
||||||
processed = item->GetPeer()->DoDefault();
|
processed = item->GetPeer()->DoDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wxWindow* const w = GetInvokingWindow())
|
||||||
|
{
|
||||||
|
// Let the invoking window update itself if necessary.
|
||||||
|
w->OSXAfterMenuEvent();
|
||||||
|
}
|
||||||
|
|
||||||
return processed;
|
return processed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -119,6 +119,14 @@ wxMenu* wxSearchCtrl::GetMenu()
|
|||||||
return m_menu;
|
return m_menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxSearchCtrl::OSXAfterMenuEvent()
|
||||||
|
{
|
||||||
|
// The menu is used as a template for creating the actual menu shown by the
|
||||||
|
// control, so update this template with the latest menu state after a menu
|
||||||
|
// command as the state of check/radio items could have changed after it.
|
||||||
|
GetSearchPeer()->SetSearchMenu( m_menu );
|
||||||
|
}
|
||||||
|
|
||||||
#endif // wxUSE_MENUS
|
#endif // wxUSE_MENUS
|
||||||
|
|
||||||
void wxSearchCtrl::ShowSearchButton( bool show )
|
void wxSearchCtrl::ShowSearchButton( bool show )
|
||||||
|
Reference in New Issue
Block a user