]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/scrlwing.cpp
workaround for MGL's weirdness: won't render rectangles of w=1 or h=1
[wxWidgets.git] / src / generic / scrlwing.cpp
index 25fcf9048a52f4fb7ee3a10952accc0138f2b2b9..cf4792b5fc5a76a6cbc465aa55b43b13706b3369 100644 (file)
@@ -389,10 +389,17 @@ void wxScrollHelper::SetScrollbars(int pixelsPerUnitX,
 
 void wxScrollHelper::DeleteEvtHandler()
 {
 
 void wxScrollHelper::DeleteEvtHandler()
 {
-    // FIXME: we should search for m_handler in the handler list
-    if ( m_win )
+    // search for m_handler in the handler list
+    if ( m_win && m_handler )
     {
     {
-        m_win->PopEventHandler(TRUE /* Delete old event handler*/);
+        if ( m_win->RemoveEventHandler(m_handler) )
+        {
+            delete m_handler;
+        }
+        //else: something is very wrong, so better [maybe] leak memory than
+        //      risk a crash because of double deletion
+
+        m_handler = NULL;
     }
 }
 
     }
 }
 
@@ -415,6 +422,9 @@ void wxScrollHelper::DoSetTargetWindow(wxWindow *target)
     // which we scroll - we don't need to hijack its events)
     if ( m_targetWindow == m_win )
     {
     // which we scroll - we don't need to hijack its events)
     if ( m_targetWindow == m_win )
     {
+        // if we already have a handler, delete it first
+        DeleteEvtHandler();
+
         m_handler = new wxScrollHelperEvtHandler(this);
         m_targetWindow->PushEventHandler(m_handler);
     }
         m_handler = new wxScrollHelperEvtHandler(this);
         m_targetWindow->PushEventHandler(m_handler);
     }