Merge branch 'msw-dismiss-unfocused-popup'

Allow wxPopupTransientWindow to work without wxPU_CONTAINS_CONTROLS too
in wxMSW and don't use wxPU_CONTAINS_CONTROLS by default, notably
allowing wxTipWindow to be shown without stealing focus.

See https://github.com/wxWidgets/wxWidgets/pull/1942

Closes #18636.
This commit is contained in:
Vadim Zeitlin
2020-07-11 19:56:32 +02:00
8 changed files with 119 additions and 13 deletions

View File

@@ -58,6 +58,10 @@
#include "wx/tipdlg.h"
#endif // wxUSE_STARTUP_TIPS
#if wxUSE_TIPWINDOW
#include "wx/tipwin.h"
#endif // wxUSE_TIPWINDOW
#if wxUSE_PROGRESSDLG
#if wxUSE_STOPWATCH && wxUSE_LONGLONG
#include "wx/datetime.h" // wxDateTime
@@ -280,6 +284,10 @@ wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(DIALOGS_NOTIFY_MSG, MyFrame::OnNotifMsg)
#endif // wxUSE_NOTIFICATION_MESSAGE
#if wxUSE_TIPWINDOW
EVT_MENU(DIALOGS_SHOW_TIP, MyFrame::OnShowTip)
EVT_UPDATE_UI(DIALOGS_SHOW_TIP, MyFrame::OnUpdateShowTipUI)
#endif // wxUSE_TIPWINDOW
#if wxUSE_RICHTOOLTIP
EVT_MENU(DIALOGS_RICHTIP_DIALOG, MyFrame::OnRichTipDialog)
#endif // wxUSE_RICHTOOLTIP
@@ -590,6 +598,10 @@ bool MyApp::OnInit()
#endif // wxUSE_NOTIFICATION_MESSAGE
menuDlg->AppendSubMenu(menuNotif, "&User notifications");
#if wxUSE_TIPWINDOW
menuDlg->AppendCheckItem(DIALOGS_SHOW_TIP, "Show &tip window\tShift-Ctrl-H");
#endif // wxUSE_TIPWINDOW
#if wxUSE_RICHTOOLTIP
menuDlg->Append(DIALOGS_RICHTIP_DIALOG, "Rich &tooltip dialog...\tCtrl-H");
menuDlg->AppendSeparator();
@@ -713,6 +725,10 @@ MyFrame::MyFrame(const wxString& title)
SetOwnBackgroundColour(m_canvas->GetBackgroundColour());
#endif // wxUSE_INFOBAR
#if wxUSE_TIPWINDOW
m_tipWindow = NULL;
#endif // wxUSE_TIPWINDOW
#ifdef __WXMSW__
// Test MSW-specific function allowing to access the "system" menu.
wxMenu * const menu = MSWGetSystemMenu();
@@ -2389,6 +2405,35 @@ void MyFrame::OnNotifMsg(wxCommandEvent& WXUNUSED(event))
#endif // wxUSE_NOTIFICATION_MESSAGE
#if wxUSE_TIPWINDOW
void MyFrame::OnShowTip(wxCommandEvent& WXUNUSED(event))
{
if ( m_tipWindow )
{
m_tipWindow->Close();
}
else
{
m_tipWindow = new wxTipWindow
(
this,
"This is just some text to be shown in the tip "
"window, broken into multiple lines, each less "
"than 60 logical pixels wide.",
FromDIP(60),
&m_tipWindow
);
}
}
void MyFrame::OnUpdateShowTipUI(wxUpdateUIEvent& event)
{
event.Check(m_tipWindow != NULL);
}
#endif // wxUSE_TIPWINDOW
#if wxUSE_RICHTOOLTIP
#include "wx/richtooltip.h"

View File

@@ -544,6 +544,13 @@ private:
SettingsData m_settingsData;
#endif // USE_SETTINGS_DIALOG
#if wxUSE_TIPWINDOW
void OnShowTip(wxCommandEvent& event);
void OnUpdateShowTipUI(wxUpdateUIEvent& event);
wxTipWindow *m_tipWindow;
#endif // wxUSE_TIPWINDOW
wxDECLARE_EVENT_TABLE();
};
@@ -623,6 +630,7 @@ enum
DIALOGS_REPLACE,
DIALOGS_REQUEST,
DIALOGS_NOTIFY_MSG,
DIALOGS_SHOW_TIP,
DIALOGS_RICHTIP_DIALOG,
DIALOGS_PROPERTY_SHEET,
DIALOGS_PROPERTY_SHEET_TOOLBOOK,