Add wxKeyEvent::IsAutoRepeat()
The new method is currently supported in Qt, Cocoa, MSW ports (i.e. all major ones except for wxGTK). Keyboard example updated with a "Repeat" column. Closes https://github.com/wxWidgets/wxWidgets/pull/2414
This commit is contained in:
committed by
Vadim Zeitlin
parent
a37629b035
commit
a052557af3
@@ -2218,6 +2218,9 @@ public:
|
||||
// get the raw key flags (platform-dependent)
|
||||
wxUint32 GetRawKeyFlags() const { return m_rawFlags; }
|
||||
|
||||
// returns true if this is a key auto repeat event
|
||||
bool IsAutoRepeat() const { return m_isRepeat; }
|
||||
|
||||
// Find the position of the event
|
||||
void GetPosition(wxCoord *xpos, wxCoord *ypos) const
|
||||
{
|
||||
@@ -2279,6 +2282,9 @@ public:
|
||||
wxUint32 m_rawCode;
|
||||
wxUint32 m_rawFlags;
|
||||
|
||||
// Indicates whether the key event is a repeat
|
||||
bool m_isRepeat;
|
||||
|
||||
private:
|
||||
// Set the event to propagate if necessary, i.e. if it's of wxEVT_CHAR_HOOK
|
||||
// type. This is used by all ctors.
|
||||
@@ -2305,6 +2311,7 @@ private:
|
||||
#if wxUSE_UNICODE
|
||||
m_uniChar = evt.m_uniChar;
|
||||
#endif
|
||||
m_isRepeat = evt.m_isRepeat;
|
||||
}
|
||||
|
||||
// Initialize m_x and m_y using the current mouse cursor position if
|
||||
|
@@ -1547,6 +1547,15 @@ public:
|
||||
*/
|
||||
bool IsKeyInCategory(int category) const;
|
||||
|
||||
/**
|
||||
Returns true if this event is an auto-repeat of the key, false if this
|
||||
is the initial key press.
|
||||
|
||||
@since 3.1.6
|
||||
@onlyfor{wxosx,wxmsw,wxQt}
|
||||
*/
|
||||
bool IsAutoRepeat() const;
|
||||
|
||||
//@{
|
||||
/**
|
||||
Obtains the position (in client coordinates) at which the key was pressed.
|
||||
|
@@ -235,7 +235,7 @@ MyFrame::MyFrame(const wxString& title)
|
||||
wxTE_READONLY);
|
||||
headerText->SetValue(
|
||||
" event key KeyCode mod UnicodeKey "
|
||||
" RawKeyCode RawKeyFlags Position");
|
||||
" RawKeyCode RawKeyFlags Position Repeat");
|
||||
|
||||
|
||||
m_logText = new wxTextCtrl(this, wxID_ANY, "",
|
||||
@@ -538,6 +538,7 @@ void MyFrame::LogEvent(const wxString& name, wxKeyEvent& event)
|
||||
" not-set not-set"
|
||||
#endif
|
||||
" (%5d,%5d)"
|
||||
" %s"
|
||||
"\n",
|
||||
name,
|
||||
GetKeyName(event),
|
||||
@@ -556,6 +557,7 @@ void MyFrame::LogEvent(const wxString& name, wxKeyEvent& event)
|
||||
#endif
|
||||
, event.GetX()
|
||||
, event.GetY()
|
||||
, event.IsAutoRepeat() ? "Yes" : "No"
|
||||
);
|
||||
|
||||
m_logText->AppendText(msg);
|
||||
|
@@ -6303,6 +6303,8 @@ MSWInitAnyKeyEvent(wxKeyEvent& event,
|
||||
event.m_rawCode = (wxUint32) wParam;
|
||||
event.m_rawFlags = (wxUint32) lParam;
|
||||
event.SetTimestamp(::GetMessageTime());
|
||||
|
||||
event.m_isRepeat = (HIWORD(lParam) & KF_REPEAT) == KF_REPEAT;
|
||||
}
|
||||
|
||||
} // anonymous namespace
|
||||
|
@@ -452,6 +452,7 @@ void wxWidgetCocoaImpl::SetupKeyEvent(wxKeyEvent &wxevent , NSEvent * nsEvent, N
|
||||
wxevent.m_rawFlags = modifiers;
|
||||
|
||||
wxevent.SetTimestamp( (int)([nsEvent timestamp] * 1000) ) ;
|
||||
wxevent.m_isRepeat = (eventType == NSKeyDown) && [nsEvent isARepeat];
|
||||
|
||||
wxString chars;
|
||||
if ( eventType != NSFlagsChanged )
|
||||
|
@@ -1390,6 +1390,7 @@ bool wxWindowQt::QtHandleKeyEvent ( QWidget *WXUNUSED( handler ), QKeyEvent *eve
|
||||
|
||||
e.m_rawCode = event->nativeVirtualKey();
|
||||
e.m_rawFlags = event->nativeModifiers();
|
||||
e.m_isRepeat = event->isAutoRepeat();
|
||||
|
||||
// Modifiers
|
||||
wxQtFillKeyboardModifiers( event->modifiers(), &e );
|
||||
|
Reference in New Issue
Block a user