X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/de1359180540b5c5e11eddd4c3d08db4e38d59ea..ba681060f36767a2682b8547871af2c6f8159955:/src/gtk/dialog.cpp diff --git a/src/gtk/dialog.cpp b/src/gtk/dialog.cpp index 2e1f606c43..f370b07580 100644 --- a/src/gtk/dialog.cpp +++ b/src/gtk/dialog.cpp @@ -14,6 +14,9 @@ #include "wx/dialog.h" #include "wx/frame.h" #include "wx/app.h" + +#include "gdk/gdk.h" +#include "gtk/gtk.h" #include "wx/gtk/win_gtk.h" //----------------------------------------------------------------------------- @@ -56,6 +59,24 @@ static void gtk_dialog_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation win->GtkOnSize( alloc->x, alloc->y, alloc->width, alloc->height ); } +//----------------------------------------------------------------------------- +// "configure_event" +//----------------------------------------------------------------------------- + +static gint gtk_dialog_configure_callback( GtkWidget *WXUNUSED(widget), GdkEventConfigure *event, wxDialog *win ) +{ + if (!win->HasVMT()) return FALSE; + + win->m_x = event->x; + win->m_y = event->y; + + wxMoveEvent mevent( wxPoint(win->m_x,win->m_y), win->GetId() ); + mevent.SetEventObject( win ); + win->GetEventHandler()->ProcessEvent( mevent ); + + return FALSE; +} + //----------------------------------------------------------------------------- // wxDialog //----------------------------------------------------------------------------- @@ -104,9 +125,6 @@ bool wxDialog::Create( wxWindow *parent, gtk_signal_connect( GTK_OBJECT(m_widget), "delete_event", GTK_SIGNAL_FUNC(gtk_dialog_delete_callback), (gpointer)this ); - gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate", - GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this ); - m_wxwindow = gtk_myfixed_new(); gtk_widget_show( m_wxwindow ); GTK_WIDGET_UNSET_FLAGS( m_wxwindow, GTK_CAN_FOCUS ); @@ -120,9 +138,14 @@ bool wxDialog::Create( wxWindow *parent, gtk_widget_set_usize( m_widget, m_width, m_height ); + gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate", + GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this ); + + gtk_signal_connect( GTK_OBJECT(m_widget), "configure_event", + GTK_SIGNAL_FUNC(gtk_dialog_configure_callback), (gpointer)this ); + if (m_parent) m_parent->AddChild( this ); - PostCreation(); return TRUE; @@ -131,7 +154,16 @@ bool wxDialog::Create( wxWindow *parent, wxDialog::~wxDialog() { wxTopLevelWindows.DeleteObject( this ); - if (wxTopLevelWindows.Number() == 0) wxTheApp->ExitMainLoop(); + + if (wxTheApp->GetTopWindow() == this) + { + wxTheApp->SetTopWindow( (wxWindow*) NULL ); + } + + if (wxTopLevelWindows.Number() == 0) + { + wxTheApp->ExitMainLoop(); + } } void wxDialog::SetTitle( const wxString& title ) @@ -245,7 +277,7 @@ void wxDialog::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int heigh void wxDialog::OnSize( wxSizeEvent &WXUNUSED(event) ) { - wxASSERT_MSG( (m_widget != NULL), "invalid frame" ); + wxASSERT_MSG( (m_widget != NULL), "invalid dialog" ); if (GetAutoLayout()) {