]> git.saurik.com Git - wxWidgets.git/commitdiff
Add wxActivateEvent::GetActivationReason().
authorVadim Zeitlin <vadim@wxwidgets.org>
Wed, 2 Oct 2013 16:25:04 +0000 (16:25 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Wed, 2 Oct 2013 16:25:04 +0000 (16:25 +0000)
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
include/wx/event.h
interface/wx/event.h
src/msw/window.cpp

index 699222a9aaf672683efcc9ce6767b06018724ec7..134f901bcad2efb00ee6ae970222179ac19394ce 100644 (file)
@@ -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:
 
index 1dcdf333dc5db6f92172b8088051c832c5c7b521..61ec19c5b38931476d065720727020453151114d 100644 (file)
@@ -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)
index 3f499ccd87431f39471e73f3a006e37c8d4e09d7..a71070392da4a2b29646cc496e255bc8c0c702ca 100644 (file)
@@ -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;
 };
 
 
index a08d1fa2ab3e6dd7e547e5e90b0dd42e126ac51a..479efcfc90d1fe8e29e33a6ec266a5af4ef22200 100644 (file)
@@ -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);