Implement EVT_CHAR_HOOK for wxOSX/Cocoa.

Send wxEVT_CHAR_HOOK event from wxOSX/Cocoa code.

Also test for wxEVT_CHAR_HOOK in the keyboard sample and show the effect of
not skipping it.

Closes #12431.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69889 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2011-12-02 00:50:12 +00:00
parent 8270459a11
commit edf5822ace
4 changed files with 54 additions and 14 deletions

View File

@@ -41,18 +41,32 @@ private:
{ m_logText->AppendText("Test accelerator \"Esc\" used.\n"); }
void OnClear(wxCommandEvent& WXUNUSED(event)) { m_logText->Clear(); }
void OnSkip(wxCommandEvent& event) { m_skip = event.IsChecked(); }
void OnSkipDown(wxCommandEvent& event) { m_skipDown = event.IsChecked(); }
void OnSkipHook(wxCommandEvent& event) { m_skipHook = event.IsChecked(); }
void OnKeyDown(wxKeyEvent& event) { LogEvent("KeyDown", event); }
void OnKeyDown(wxKeyEvent& event)
{
LogEvent("KeyDown", event);
if ( m_skipDown )
event.Skip();
}
void OnKeyUp(wxKeyEvent& event) { LogEvent("KeyUp", event); }
void OnChar(wxKeyEvent& event) { LogEvent("Char", event); }
void OnCharHook(wxKeyEvent& event)
{
LogEvent("Hook", event);
if ( m_skipHook )
event.Skip();
}
void OnPaintInputWin(wxPaintEvent& event);
void LogEvent(const wxString& name, wxKeyEvent& event);
wxTextCtrl *m_logText;
wxWindow *m_inputWin;
bool m_skip;
bool m_skipHook,
m_skipDown;
};
@@ -87,7 +101,8 @@ IMPLEMENT_APP(MyApp)
MyFrame::MyFrame(const wxString& title)
: wxFrame(NULL, wxID_ANY, title),
m_inputWin(NULL),
m_skip(true)
m_skipHook(true),
m_skipDown(true)
{
SetIcon(wxICON(sample));
@@ -96,7 +111,8 @@ MyFrame::MyFrame(const wxString& title)
{
QuitID = wxID_EXIT,
ClearID = wxID_CLEAR,
SkipID = 100,
SkipHook = 100,
SkipDown,
TestAccelA,
TestAccelCtrlA,
TestAccelEsc
@@ -113,8 +129,14 @@ MyFrame::MyFrame(const wxString& title)
menuFile->Append(TestAccelEsc, "Test accelerator &3\tEsc");
menuFile->AppendSeparator();
menuFile->AppendCheckItem(SkipID, "Call event.&Skip()\tCtrl-S");
menuFile->Check(SkipID, true);
menuFile->AppendCheckItem(SkipHook, "Skip CHAR_HOOK event",
"Not skipping this event disables both KEY_DOWN and CHAR events"
);
menuFile->Check(SkipHook, true);
menuFile->AppendCheckItem(SkipDown, "Skip KEY_DOWN event",
"Not skipping this event disables CHAR event generation"
);
menuFile->Check(SkipDown, true);
menuFile->AppendSeparator();
menuFile->Append(QuitID, "E&xit\tAlt-X", "Quit this program");
@@ -175,8 +197,10 @@ MyFrame::MyFrame(const wxString& title)
Connect(ClearID, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(MyFrame::OnClear));
Connect(SkipID, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(MyFrame::OnSkip));
Connect(SkipHook, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(MyFrame::OnSkipHook));
Connect(SkipDown, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(MyFrame::OnSkipDown));
Connect(TestAccelA, wxEVT_COMMAND_MENU_SELECTED,
wxCommandEventHandler(MyFrame::OnTestAccelA));
@@ -198,6 +222,13 @@ MyFrame::MyFrame(const wxString& title)
wxPaintEventHandler(MyFrame::OnPaintInputWin),
NULL, this);
// notice that we don't connect OnCharHook() to the input window, unlike
// the usual key events this one is propagated upwards
Connect(wxEVT_CHAR_HOOK, wxKeyEventHandler(MyFrame::OnCharHook));
// status bar is useful for showing the menu items help strings
CreateStatusBar();
// and show itself (the frames, unlike simple controls, are not shown when
// created initially)
Show(true);
@@ -404,9 +435,6 @@ void MyFrame::LogEvent(const wxString& name, wxKeyEvent& event)
);
m_logText->AppendText(msg);
if ( m_skip )
event.Skip();
}