From 4521f6c88cbefa7f13e3733d344776b795f981e4 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 2 Oct 2013 16:25:04 +0000 Subject: [PATCH] Add wxActivateEvent::GetActivationReason(). This method is implemented for wxMSW-only currently and allows to check whether the window is being activated by a mouse click or in some other way there. Closes #15516. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74915 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 1 + include/wx/event.h | 25 +++++++++++++++++++++---- interface/wx/event.h | 32 +++++++++++++++++++++++++++++++- src/msw/window.cpp | 5 ++++- 4 files changed, 57 insertions(+), 6 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 699222a9aa..134f901bca 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -581,6 +581,7 @@ All (GUI): - Fix alignment and transparency of bitmaps in wxDataViewCtrl (Eric Jensen). - Fix crash when auto-sizing a wxDataViewCtrl column (Spencer T. Parkin). - Add wxHtmlTag::GetParamAsString() convenience method. +- Add wxActivateEvent::GetActivationReason() (Trigve). wxGTK: diff --git a/include/wx/event.h b/include/wx/event.h index 1dcdf333dc..61ec19c5b3 100644 --- a/include/wx/event.h +++ b/include/wx/event.h @@ -2275,19 +2275,36 @@ private: class WXDLLIMPEXP_CORE wxActivateEvent : public wxEvent { public: - wxActivateEvent(wxEventType type = wxEVT_NULL, bool active = true, int Id = 0) - : wxEvent(Id, type) - { m_active = active; } + // Type of activation. For now we can only detect if it was by mouse or by + // some other method and even this is only available under wxMSW. + enum Reason + { + Reason_Mouse, + Reason_Unknown + }; + + wxActivateEvent(wxEventType type = wxEVT_NULL, bool active = true, + int Id = 0, Reason activationReason = Reason_Unknown) + : wxEvent(Id, type), + m_activationReason(activationReason) + { + m_active = active; + } wxActivateEvent(const wxActivateEvent& event) : wxEvent(event) - { m_active = event.m_active; } + { + m_active = event.m_active; + m_activationReason = event.m_activationReason; + } bool GetActive() const { return m_active; } + Reason GetActivationReason() const { return m_activationReason;} virtual wxEvent *Clone() const { return new wxActivateEvent(*this); } private: bool m_active; + Reason m_activationReason; private: DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxActivateEvent) diff --git a/interface/wx/event.h b/interface/wx/event.h index 3f499ccd87..a71070392d 100644 --- a/interface/wx/event.h +++ b/interface/wx/event.h @@ -2976,16 +2976,46 @@ public: class wxActivateEvent : public wxEvent { public: + /** + Specifies the reason for the generation of this event. + + See GetActivationReason(). + + @since 3.0 + */ + enum Reason + { + /// Window activated by mouse click. + Reason_Mouse, + /// Window was activated with some other method than mouse click. + Reason_Unknown + }; + /** Constructor. */ wxActivateEvent(wxEventType eventType = wxEVT_NULL, bool active = true, - int id = 0); + int id = 0, Reason ActivationReason = Reason_Unknown); /** Returns @true if the application or window is being activated, @false otherwise. */ bool GetActive() const; + + /** + Allows to check if the window was activated by clicking it with the + mouse or in some other way. + + This method is currently only implemented in wxMSW and returns @c + Reason_Mouse there if the window was activated by a mouse click and @c + Reason_Unknown if it was activated in any other way (e.g. from + keyboard or programmatically). + + Under all the other platforms, @c Reason_Unknown is always returned. + + @since 3.0 + */ + Reason GetActivationReason() const; }; diff --git a/src/msw/window.cpp b/src/msw/window.cpp index a08d1fa2ab..479efcfc90 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -4049,7 +4049,10 @@ bool wxWindowMSW::HandleActivate(int state, { wxActivateEvent event(wxEVT_ACTIVATE, (state == WA_ACTIVE) || (state == WA_CLICKACTIVE), - m_windowId); + m_windowId, + state == WA_CLICKACTIVE + ? wxActivateEvent::Reason_Mouse + : wxActivateEvent::Reason_Unknown); event.SetEventObject(this); return HandleWindowEvent(event); -- 2.45.2