]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/window.h
fix wxTextDataObject::GetDataHere and SetData functions (under wxMSW) so that they...
[wxWidgets.git] / include / wx / window.h
index 04b443a1a46bb4c71f39b116bc51d1aea6172c18..d956ab0d5c3624f1cc5b7b1e62ca94cbd708eb81 100644 (file)
@@ -374,12 +374,8 @@ public:
         // get the size best suited for the window (in fact, minimal
         // acceptable size using which it will still look "nice" in
         // most situations)
-    wxSize GetBestSize() const
-    {
-        if (m_bestSizeCache.IsFullySpecified())
-            return m_bestSizeCache;
-        return DoGetBestSize();
-    }
+    wxSize GetBestSize() const;
+    
     void GetBestSize(int *w, int *h) const
     {
         wxSize s = GetBestSize();
@@ -402,7 +398,7 @@ public:
         // This function will merge the window's best size into the window's
         // minimum size, giving priority to the min size components, and
         // returns the results.
-    wxSize GetEffectiveMinSize() const;
+    virtual wxSize GetEffectiveMinSize() const;
     wxDEPRECATED( wxSize GetBestFittingSize() const );  // replaced by GetEffectiveMinSize
     wxDEPRECATED( wxSize GetAdjustedMinSize() const );  // replaced by GetEffectiveMinSize
 
@@ -458,8 +454,8 @@ public:
         // Call these to override what GetBestSize() returns. This
         // method is only virtual because it is overriden in wxTLW
         // as a different API for SetSizeHints().
-    virtual void SetMinSize(const wxSize& minSize) { m_minWidth = minSize.x; m_minHeight = minSize.y; }
-    virtual void SetMaxSize(const wxSize& maxSize) { m_maxWidth = maxSize.x; m_maxHeight = maxSize.y; }
+    virtual void SetMinSize(const wxSize& minSize);
+    virtual void SetMaxSize(const wxSize& maxSize);
 
         // Like Set*Size, but for client, not window, size
     virtual void SetMinClientSize(const wxSize& size)
@@ -792,7 +788,7 @@ public:
 
         // replace the event handler (allows to completely subclass the
         // window)
-    void SetEventHandler( wxEvtHandler *handler ) { m_eventHandler = handler; }
+    void SetEventHandler( wxEvtHandler *handler );
 
         // push/pop event handler: allows to chain a custom event handler to
         // alreasy existing ones
@@ -806,13 +802,46 @@ public:
         // be there)
     bool RemoveEventHandler(wxEvtHandler *handler);
 
-    // Process an event by calling GetEventHandler()->ProcessEvent() and
-    // handling any exceptions thrown by event handlers. It's mostly useful
-    // when processing wx events when called from C code (e.g. in GTK+
-    // callback) when the exception wouldn't correctly propagate to
-    // wxEventLoop.
+        // Process an event by calling GetEventHandler()->ProcessEvent(): this
+        // is a straightforward replacement for ProcessEvent() itself which
+        // shouldn't be used directly with windows as it doesn't take into
+        // account any event handlers associated with the window
+    bool ProcessWindowEvent(wxEvent& event)
+        { return GetEventHandler()->ProcessEvent(event); }
+
+        // Process an event by calling GetEventHandler()->ProcessEvent() and
+        // handling any exceptions thrown by event handlers. It's mostly useful
+        // when processing wx events when called from C code (e.g. in GTK+
+        // callback) when the exception wouldn't correctly propagate to
+        // wxEventLoop.
     bool HandleWindowEvent(wxEvent& event) const;
 
+        // disable wxEvtHandler double-linked list mechanism:
+    virtual void SetNextHandler(wxEvtHandler *handler);
+    virtual void SetPreviousHandler(wxEvtHandler *handler);
+
+protected:
+
+    // NOTE: we change the access specifier of the following wxEvtHandler functions
+    //       so that the user won't be able to call them directly.
+    //       Calling wxWindow::ProcessEvent in fact only works when there are NO
+    //       event handlers pushed on the window.
+    //       To ensure correct operation, instead of wxWindow::ProcessEvent
+    //       you must always call wxWindow::GetEventHandler()->ProcessEvent()
+    //       or HandleWindowEvent().
+    //       The same holds for all other wxEvtHandler functions.
+
+    using wxEvtHandler::ProcessEvent;
+#if wxUSE_THREADS
+    using wxEvtHandler::ProcessThreadEvent;
+#endif
+    using wxEvtHandler::SafelyProcessEvent;
+    using wxEvtHandler::ProcessPendingEvents;
+    using wxEvtHandler::AddPendingEvent;
+    using wxEvtHandler::QueueEvent;
+
+public:
+
     // validators
     // ----------
 
@@ -1379,8 +1408,8 @@ public:
 
 protected:
     // event handling specific to wxWindow
-    virtual bool TryValidator(wxEvent& event);
-    virtual bool TryParent(wxEvent& event);
+    virtual bool TryBefore(wxEvent& event);
+    virtual bool TryAfter(wxEvent& event);
 
     enum WindowOrder
     {
@@ -1402,7 +1431,8 @@ protected:
     void SatisfyConstraints();
 #endif // wxUSE_CONSTRAINTS
 
-    // Send the wxWindowDestroyEvent
+    // Send the wxWindowDestroyEvent if not done yet and sets m_isBeingDeleted
+    // to true
     void SendDestroyEvent();
 
     // returns the main window of composite control; this is the window
@@ -1675,7 +1705,7 @@ private:
 
 
     DECLARE_ABSTRACT_CLASS(wxWindowBase)
-    DECLARE_NO_COPY_CLASS(wxWindowBase)
+    wxDECLARE_NO_COPY_CLASS(wxWindowBase);
     DECLARE_EVENT_TABLE()
 };