more wxCloseEvent changes: now the behaviour should be conforming to the one

described in the docs (i.e. like Julian wants it)


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1611 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 1999-02-05 16:12:43 +00:00
parent 818e52c201
commit fe4e9e6c14
11 changed files with 51 additions and 36 deletions

View File

@ -762,10 +762,17 @@ public:
void SetLoggingOff(bool logOff) { m_loggingOff = logOff; }
bool GetLoggingOff() const { return m_loggingOff; }
void Veto(bool veto = TRUE) { wxASSERT( m_canVeto ); m_veto = veto; }
void Veto(bool veto = TRUE)
{
// GetVeto() will return FALSE anyhow...
wxCHECK_RET( m_canVeto,
"call to Veto() ignored (can't veto this event)" );
m_veto = veto;
}
void SetCanVeto(bool canVeto) { m_canVeto = canVeto; }
bool CanVeto() const { return m_canVeto; }
bool GetVeto() const { wxASSERT( m_canVeto ); return m_veto; }
bool GetVeto() const { return m_canVeto && m_veto; }
#if WXWIN_COMPATIBILITY
// This is probably obsolete now, since we use CanVeto instead, in

View File

@ -63,12 +63,12 @@ public:
void OnOK( wxCommandEvent &event );
void OnPaint( wxPaintEvent& event );
void OnSize( wxSizeEvent &event );
void OnCloseWindow( wxCloseEvent& event );
/*
void OnCharHook( wxKeyEvent& event );
*/
bool Destroy();
void OnCloseWindow( wxCloseEvent& event );
virtual void SetSize( int x, int y, int width, int height,
int sizeFlags = wxSIZE_AUTO );

View File

@ -64,13 +64,13 @@ public:
virtual void GetClientSize( int *width, int *height ) const;
wxSize GetClientSize() const { int w, h; GetClientSize(& w, & h); return wxSize(w, h); }
virtual void SetClientSize( int const width, int const height );
virtual void SetSize( int x, int y, int width, int height,
int sizeFlags = wxSIZE_AUTO );
virtual void SetSize( int width, int height );
virtual wxStatusBar* CreateStatusBar(int number=1, long style = wxST_SIZEGRIP, wxWindowID id = 0,
const wxString& name = "statusBar");
virtual wxStatusBar *OnCreateStatusBar( int number, long style, wxWindowID id,
@ -99,14 +99,14 @@ public:
virtual void Maximize(bool WXUNUSED(maximize)) {}
virtual void Restore() {}
void OnCloseWindow( wxCloseEvent& event );
void OnActivate( wxActivateEvent &WXUNUSED(event) ) { } // called from docview.cpp
void OnSize( wxSizeEvent &event );
void OnCloseWindow( wxCloseEvent& event );
void OnMenuHighlight( wxMenuEvent& event );
// implementation
virtual void GtkOnSize( int x, int y, int width, int height );
virtual wxPoint GetClientAreaOrigin() const;
void DoMenuUpdates();

View File

@ -63,12 +63,12 @@ public:
void OnOK( wxCommandEvent &event );
void OnPaint( wxPaintEvent& event );
void OnSize( wxSizeEvent &event );
void OnCloseWindow( wxCloseEvent& event );
/*
void OnCharHook( wxKeyEvent& event );
*/
bool Destroy();
void OnCloseWindow( wxCloseEvent& event );
virtual void SetSize( int x, int y, int width, int height,
int sizeFlags = wxSIZE_AUTO );

View File

@ -64,13 +64,13 @@ public:
virtual void GetClientSize( int *width, int *height ) const;
wxSize GetClientSize() const { int w, h; GetClientSize(& w, & h); return wxSize(w, h); }
virtual void SetClientSize( int const width, int const height );
virtual void SetSize( int x, int y, int width, int height,
int sizeFlags = wxSIZE_AUTO );
virtual void SetSize( int width, int height );
virtual wxStatusBar* CreateStatusBar(int number=1, long style = wxST_SIZEGRIP, wxWindowID id = 0,
const wxString& name = "statusBar");
virtual wxStatusBar *OnCreateStatusBar( int number, long style, wxWindowID id,
@ -99,14 +99,14 @@ public:
virtual void Maximize(bool WXUNUSED(maximize)) {}
virtual void Restore() {}
void OnCloseWindow( wxCloseEvent& event );
void OnActivate( wxActivateEvent &WXUNUSED(event) ) { } // called from docview.cpp
void OnSize( wxSizeEvent &event );
void OnCloseWindow( wxCloseEvent& event );
void OnMenuHighlight( wxMenuEvent& event );
// implementation
virtual void GtkOnSize( int x, int y, int width, int height );
virtual wxPoint GetClientAreaOrigin() const;
void DoMenuUpdates();

View File

@ -224,15 +224,15 @@ void wxDialog::OnCloseWindow(wxCloseEvent& event)
if (closing.Member(this))
return; // no loops
if ( event.GetVeto() )
return;
closing.Append(this);
wxCommandEvent cancelEvent(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
cancelEvent.SetEventObject( this );
GetEventHandler()->ProcessEvent(cancelEvent);
closing.DeleteObject(this);
if ( event.CanVeto() )
event.Veto();
}
bool wxDialog::Destroy()

View File

@ -8,7 +8,7 @@
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation "frame.h"
#pragma implementation "frame.h"
#endif
#include "wx/frame.h"
@ -104,6 +104,7 @@ static gint gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventC
BEGIN_EVENT_TABLE(wxFrame, wxWindow)
EVT_SIZE(wxFrame::OnSize)
EVT_CLOSE(wxFrame::OnCloseWindow)
EVT_MENU_HIGHLIGHT_ALL(wxFrame::OnMenuHighlight)
END_EVENT_TABLE()
@ -474,6 +475,13 @@ void wxFrame::OnInternalIdle()
DoMenuUpdates();
}
void wxFrame::OnCloseWindow( wxCloseEvent& event )
{
// close the window if it wasn't vetoed by the application
if ( !event.GetVeto() )
Destroy();
}
void wxFrame::OnSize( wxSizeEvent &WXUNUSED(event) )
{
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );

View File

@ -1718,13 +1718,9 @@ bool wxWindow::Close( bool force )
event.SetEventObject(this);
event.SetCanVeto(!force);
(void)GetEventHandler()->ProcessEvent(event);
// when we're forced to close we do it anyhow, otherwise only if the
// application didn't forbid it (if the event wasn't processed, GetVeto()
// will return FALSE too)
if ( force || !event.GetVeto() )
Destroy();
// return FALSE if window wasn't closed because the application vetoed the
// close event
return GetEventHandler()->ProcessEvent(event) && !event.GetVeto();
}
bool wxWindow::Destroy()

View File

@ -224,15 +224,15 @@ void wxDialog::OnCloseWindow(wxCloseEvent& event)
if (closing.Member(this))
return; // no loops
if ( event.GetVeto() )
return;
closing.Append(this);
wxCommandEvent cancelEvent(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
cancelEvent.SetEventObject( this );
GetEventHandler()->ProcessEvent(cancelEvent);
closing.DeleteObject(this);
if ( event.CanVeto() )
event.Veto();
}
bool wxDialog::Destroy()

View File

@ -8,7 +8,7 @@
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#pragma implementation "frame.h"
#pragma implementation "frame.h"
#endif
#include "wx/frame.h"
@ -104,6 +104,7 @@ static gint gtk_frame_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventC
BEGIN_EVENT_TABLE(wxFrame, wxWindow)
EVT_SIZE(wxFrame::OnSize)
EVT_CLOSE(wxFrame::OnCloseWindow)
EVT_MENU_HIGHLIGHT_ALL(wxFrame::OnMenuHighlight)
END_EVENT_TABLE()
@ -474,6 +475,13 @@ void wxFrame::OnInternalIdle()
DoMenuUpdates();
}
void wxFrame::OnCloseWindow( wxCloseEvent& event )
{
// close the window if it wasn't vetoed by the application
if ( !event.GetVeto() )
Destroy();
}
void wxFrame::OnSize( wxSizeEvent &WXUNUSED(event) )
{
wxASSERT_MSG( (m_widget != NULL), "invalid frame" );

View File

@ -1718,13 +1718,9 @@ bool wxWindow::Close( bool force )
event.SetEventObject(this);
event.SetCanVeto(!force);
(void)GetEventHandler()->ProcessEvent(event);
// when we're forced to close we do it anyhow, otherwise only if the
// application didn't forbid it (if the event wasn't processed, GetVeto()
// will return FALSE too)
if ( force || !event.GetVeto() )
Destroy();
// return FALSE if window wasn't closed because the application vetoed the
// close event
return GetEventHandler()->ProcessEvent(event) && !event.GetVeto();
}
bool wxWindow::Destroy()