#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"
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
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()
return IsEnabled() && IsShown() && m_acceptsFocus;
}
-bool wxWindow::OnClose()
-{
- return TRUE;
-}
-
void wxWindow::AddChild( wxWindow *child )
{
wxCHECK_RET( (m_widget != NULL), "invalid window" );
{
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 );
}
}
{
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
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())
SetInvokingWindow( menu, this );
+ menu->UpdateUI();
+
gs_pop_x = x;
gs_pop_y = y;