]> git.saurik.com Git - wxWidgets.git/commitdiff
more wxCloseEvent changes: now the behaviour should be conforming to the one
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 5 Feb 1999 16:12:43 +0000 (16:12 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 5 Feb 1999 16:12:43 +0000 (16:12 +0000)
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

include/wx/event.h
include/wx/gtk/dialog.h
include/wx/gtk/frame.h
include/wx/gtk1/dialog.h
include/wx/gtk1/frame.h
src/gtk/dialog.cpp
src/gtk/frame.cpp
src/gtk/window.cpp
src/gtk1/dialog.cpp
src/gtk1/frame.cpp
src/gtk1/window.cpp

index e934c0141940abd3a95b8b6ebddfb32bac31e9d1..009336ade783bffb3acfa7d205c3477dded211c6 100644 (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
index d896ea47dd97d500855ee630d0a91cfdf669bf99..be05cebb0fbc9e4320a98e0dc39184de10d0d050 100644 (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 );
index 7fcfc639e375c539d91800f21db2028ec86a819e..829a83fc5f1ed87f22bf0844042de978bdf1901a 100644 (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();
index d896ea47dd97d500855ee630d0a91cfdf669bf99..be05cebb0fbc9e4320a98e0dc39184de10d0d050 100644 (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 );
index 7fcfc639e375c539d91800f21db2028ec86a819e..829a83fc5f1ed87f22bf0844042de978bdf1901a 100644 (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();
index 16bd99d5039736d3295d5ae9fe786fea15101568..4a0e3abd26423e774fa8cdd116d1840b1dd6945b 100644 (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()
index b96f0a96b25653e79d5763b34cdd4e20bfbd7bee..25e187d39b229270153ed26274029e08fadc9164 100644 (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" );
index 4c95e23186057419e92d426b4986588ff58a1a78..ac31501f9b192c24df14ca48a3efa478b6fa7c53 100644 (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()
index 16bd99d5039736d3295d5ae9fe786fea15101568..4a0e3abd26423e774fa8cdd116d1840b1dd6945b 100644 (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()
index b96f0a96b25653e79d5763b34cdd4e20bfbd7bee..25e187d39b229270153ed26274029e08fadc9164 100644 (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" );
index 4c95e23186057419e92d426b4986588ff58a1a78..ac31501f9b192c24df14ca48a3efa478b6fa7c53 100644 (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()