]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/window.cpp
added test for long long
[wxWidgets.git] / src / gtk1 / window.cpp
index 90bf2685d166583641f820a6b94e0cd802708273..d450141f21e07ccb5b655f923d3b4b2a363587b6 100644 (file)
@@ -24,7 +24,9 @@
 #if wxUSE_DRAG_AND_DROP
 #include "wx/dnd.h"
 #endif
+#if wxUSE_TOOLTIPS
 #include "wx/tooltip.h"
+#endif
 #include "wx/menu.h"
 #include "wx/statusbr.h"
 #include "wx/intl.h"
@@ -1508,6 +1510,14 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
 
 wxWindow::~wxWindow()
 {
+    // Remove potential dangling pointer
+    if (GetParent() && GetParent()->IsKindOf(CLASSINFO(wxPanel)))
+    {
+        wxPanel* panel = (wxPanel*) GetParent();
+        if (panel->GetLastFocus() == this)
+            panel->SetLastFocus((wxWindow*) NULL);
+    }
+
     m_hasVMT = FALSE;
 
 #if wxUSE_DRAG_AND_DROP
@@ -1716,9 +1726,11 @@ bool wxWindow::Close( bool force )
 
     wxCloseEvent event(wxEVT_CLOSE_WINDOW, m_windowId);
     event.SetEventObject(this);
-    event.SetForce(force);
+    event.SetCanVeto(!force);
 
-    return GetEventHandler()->ProcessEvent(event);
+    // return FALSE if window wasn't closed because the application vetoed the
+    // close event
+    return GetEventHandler()->ProcessEvent(event) && !event.GetVeto();
 }
 
 bool wxWindow::Destroy()
@@ -2235,11 +2247,6 @@ bool wxWindow::AcceptsFocus() const
     return IsEnabled() && IsShown() && m_acceptsFocus;
 }
 
-bool wxWindow::OnClose()
-{
-    return TRUE;
-}
-
 void wxWindow::AddChild( wxWindow *child )
 {
     wxCHECK_RET( (m_widget != NULL), "invalid window" );
@@ -2417,12 +2424,11 @@ void wxWindow::Refresh( bool eraseBackground, const wxRect *rect )
         {
             gdk_window_clear_area( m_wxwindow->window,
                                    rect->x, rect->y,
-                                   rect->width,
-                                   rect->height );
+                                   rect->width, rect->height );
         }
         else
         {
-            Clear();
+            gdk_window_clear( m_wxwindow->window );
         }
     }
 
@@ -2477,7 +2483,10 @@ void wxWindow::Clear()
 {
     wxCHECK_RET( m_widget != NULL, "invalid window" );
 
-    if (m_wxwindow && m_wxwindow->window) gdk_window_clear( m_wxwindow->window );
+    if (m_wxwindow && m_wxwindow->window)
+    {
+        gdk_window_clear( m_wxwindow->window );
+    }
 }
 
 #if wxUSE_TOOLTIPS
@@ -2530,15 +2539,18 @@ void wxWindow::SetBackgroundColour( const wxColour &colour )
     m_backgroundColour = colour;
     if (!m_backgroundColour.Ok()) return;
 
-    if (m_wxwindow)
+    if (m_wxwindow && m_wxwindow->window)
     {
-        GdkWindow *window = m_wxwindow->window;
-        m_backgroundColour.CalcPixel( gdk_window_get_colormap( window ) );
-        gdk_window_set_background( window, m_backgroundColour.GetColor() );
-        gdk_window_clear( window );
+       /* wxMSW doesn't clear the window here. I don't do that
+          either to provide compatibility. call Clear() to do 
+          the job. */
+          
+        m_backgroundColour.CalcPixel( gdk_window_get_colormap( m_wxwindow->window ) );
+        gdk_window_set_background( m_wxwindow->window, m_backgroundColour.GetColor() );
     }
 
     wxColour sysbg = wxSystemSettings::GetSystemColour( wxSYS_COLOUR_BTNFACE );
+    
     if (sysbg.Red() == colour.Red() &&
         sysbg.Green() == colour.Green() &&
         sysbg.Blue() == colour.Blue())
@@ -2731,6 +2743,8 @@ bool wxWindow::PopupMenu( wxMenu *menu, int x, int y )
 
     SetInvokingWindow( menu, this );
 
+    menu->UpdateUI();
+
     gs_pop_x = x;
     gs_pop_y = y;