]> git.saurik.com Git - wxWidgets.git/commitdiff
Added size hints to dialog,
authorRobert Roebling <robert@roebling.de>
Tue, 19 Oct 1999 10:51:48 +0000 (10:51 +0000)
committerRobert Roebling <robert@roebling.de>
Tue, 19 Oct 1999 10:51:48 +0000 (10:51 +0000)
  Corrected client data "code" for wxChoice,

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4065 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/gtk/changes.txt
include/wx/gtk/choice.h
include/wx/gtk1/choice.h
src/gtk/choice.cpp
src/gtk/dialog.cpp
src/gtk1/choice.cpp
src/gtk1/dialog.cpp

index 0c3e95c6cf7406965e5a6953bb9ab2947f96e533..d82d9eba548cbec9399bf2cabf1b3a96d31c4aec 100644 (file)
@@ -17,14 +17,23 @@ Support for GTK 1.0 has been dropped. This version has
 been tested with GTK 1.2.3 and GTK 1.2.6 - it is known
 not work with some other versions.
 
 been tested with GTK 1.2.3 and GTK 1.2.6 - it is known
 not work with some other versions.
 
+wxChoice can now handle only either void client data
+(which it will not delete on destruction) or client
+data of the wxClientData type (which it will delete),
+instead of both at the same time. The same will happen
+to wxListBox and wxComboBox some time.
+
 Many build fixes for various platforms have been applied,
 try again, poor HP-UX and *BSD users, but don't reckon
 with immediate success. Actually, when using GNU compilers,
 your chances are quite good.
 
 Many build fixes for various platforms have been applied,
 try again, poor HP-UX and *BSD users, but don't reckon
 with immediate success. Actually, when using GNU compilers,
 your chances are quite good.
 
-My total rewrite of the wxWindows underlying GTK widget
+My rewrite of the wxWindows underlying GTK widget
 has turned scrolling including subwindows from barely
 has turned scrolling including subwindows from barely
-functional to pretty and fast.
+functional to pretty and fast. I also added scrolling
+of foreign windows to wxScrolledWindow.
+
+Setting size hints for the window manager might work now.
 
 wxSocket and Co. have been improved up to the point of
 calling it a rewrite. It works on wxMSW now too and
 
 wxSocket and Co. have been improved up to the point of
 calling it a rewrite. It works on wxMSW now too and
@@ -40,7 +49,7 @@ Several printing things fixed.
 
 HTML widget and the wxWindows' help system based upon
 it have been reorganized and improved for easier use
 
 HTML widget and the wxWindows' help system based upon
 it have been reorganized and improved for easier use
-from Python and C++.
+from Python and C++. Also HTML printing has been added.
 
 wxSpinCtrl added. Like a wxSpinButton and a wxTextCtrl.
 
 
 wxSpinCtrl added. Like a wxSpinButton and a wxTextCtrl.
 
index 6631f12bcc12d8a20cdc2d0c2b9b16e6bc9dacea..b7dd865d98a4151ca9086c2c0a37b275f81248d8 100644 (file)
@@ -53,8 +53,7 @@ public:
     wxString GetString( int n ) const;
 
     // implementation
     wxString GetString( int n ) const;
 
     // implementation
-    wxList   m_clientDataList;
-    wxList   m_clientObjectList;
+    wxList   m_clientList;
 
     void DisableEvents();
     void EnableEvents();
 
     void DisableEvents();
     void EnableEvents();
@@ -69,6 +68,16 @@ protected:
     virtual void DoSetClientObject( int n, wxClientData* clientData );
     virtual wxClientData* DoGetClientObject( int n ) const;
 
     virtual void DoSetClientObject( int n, wxClientData* clientData );
     virtual wxClientData* DoGetClientObject( int n ) const;
 
+    // the above virtuals hide these virtuals in wxChoiceBase
+    virtual void DoSetClientData(void* clientData )
+        { wxWindowBase::DoSetClientData(clientData); };
+    virtual void* DoGetClientData() const
+        { return(wxWindowBase::DoGetClientData()); };
+    virtual void DoSetClientObject( wxClientData* clientData )
+        { wxWindowBase::DoSetClientObject(clientData); };
+    virtual wxClientData* DoGetClientObject() const
+        { return(wxWindowBase::DoGetClientObject()); };
+
 private:
     DECLARE_DYNAMIC_CLASS(wxChoice)
 };
 private:
     DECLARE_DYNAMIC_CLASS(wxChoice)
 };
index 6631f12bcc12d8a20cdc2d0c2b9b16e6bc9dacea..b7dd865d98a4151ca9086c2c0a37b275f81248d8 100644 (file)
@@ -53,8 +53,7 @@ public:
     wxString GetString( int n ) const;
 
     // implementation
     wxString GetString( int n ) const;
 
     // implementation
-    wxList   m_clientDataList;
-    wxList   m_clientObjectList;
+    wxList   m_clientList;
 
     void DisableEvents();
     void EnableEvents();
 
     void DisableEvents();
     void EnableEvents();
@@ -69,6 +68,16 @@ protected:
     virtual void DoSetClientObject( int n, wxClientData* clientData );
     virtual wxClientData* DoGetClientObject( int n ) const;
 
     virtual void DoSetClientObject( int n, wxClientData* clientData );
     virtual wxClientData* DoGetClientObject( int n ) const;
 
+    // the above virtuals hide these virtuals in wxChoiceBase
+    virtual void DoSetClientData(void* clientData )
+        { wxWindowBase::DoSetClientData(clientData); };
+    virtual void* DoGetClientData() const
+        { return(wxWindowBase::DoGetClientData()); };
+    virtual void DoSetClientObject( wxClientData* clientData )
+        { wxWindowBase::DoSetClientObject(clientData); };
+    virtual wxClientData* DoGetClientObject() const
+        { return(wxWindowBase::DoGetClientObject()); };
+
 private:
     DECLARE_DYNAMIC_CLASS(wxChoice)
 };
 private:
     DECLARE_DYNAMIC_CLASS(wxChoice)
 };
index a166de98635fdd455433eef3e4dcd5321a0e0d97..81d2380a015c987ef026d3f4df0196a324d7452c 100644 (file)
@@ -92,8 +92,7 @@ bool wxChoice::Create( wxWindow *parent, wxWindowID id,
 
     for (int i = 0; i < n; i++)
     {
 
     for (int i = 0; i < n; i++)
     {
-        m_clientDataList.Append( (wxObject*) NULL );
-        m_clientObjectList.Append( (wxObject*) NULL );
+        m_clientList.Append( (wxObject*) NULL );
 
         GtkWidget *item = gtk_menu_item_new_with_label( choices[i].mbc_str() );
         gtk_menu_append( GTK_MENU(menu), item );
 
         GtkWidget *item = gtk_menu_item_new_with_label( choices[i].mbc_str() );
         gtk_menu_append( GTK_MENU(menu), item );
@@ -145,18 +144,17 @@ int wxChoice::DoAppend( const wxString &item )
 
     gtk_widget_show( menu_item );
 
 
     gtk_widget_show( menu_item );
 
-    m_clientDataList.Append( (wxObject*) NULL );
-    m_clientObjectList.Append( (wxObject*) NULL );
+    m_clientList.Append( (wxObject*) NULL );
 
     // return the index of the item in the control
 
     // return the index of the item in the control
-    return GetCount();
+    return GetCount() - 1;
 }
 
 void wxChoice::DoSetClientData( int n, void* clientData )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 
 }
 
 void wxChoice::DoSetClientData( int n, void* clientData )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 
-    wxNode *node = m_clientDataList.Nth( n );
+    wxNode *node = m_clientList.Nth( n );
     wxCHECK_RET( node, wxT("invalid index in wxChoice::DoSetClientData") );
 
     node->SetData( (wxObject*) clientData );
     wxCHECK_RET( node, wxT("invalid index in wxChoice::DoSetClientData") );
 
     node->SetData( (wxObject*) clientData );
@@ -166,7 +164,7 @@ void* wxChoice::DoGetClientData( int n ) const
 {
     wxCHECK_MSG( m_widget != NULL, NULL, wxT("invalid combobox") );
 
 {
     wxCHECK_MSG( m_widget != NULL, NULL, wxT("invalid combobox") );
 
-    wxNode *node = m_clientDataList.Nth( n );
+    wxNode *node = m_clientList.Nth( n );
     wxCHECK_MSG( node, NULL, wxT("invalid index in wxChoice::DoGetClientData") );
 
     return node->Data();
     wxCHECK_MSG( node, NULL, wxT("invalid index in wxChoice::DoGetClientData") );
 
     return node->Data();
@@ -176,7 +174,7 @@ void wxChoice::DoSetClientObject( int n, wxClientData* clientData )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 
-    wxNode *node = m_clientObjectList.Nth( n );
+    wxNode *node = m_clientList.Nth( n );
     wxCHECK_RET( node, wxT("invalid index in wxChoice::DoSetClientObject") );
 
     wxClientData *cd = (wxClientData*) node->Data();
     wxCHECK_RET( node, wxT("invalid index in wxChoice::DoSetClientObject") );
 
     wxClientData *cd = (wxClientData*) node->Data();
@@ -189,7 +187,7 @@ wxClientData* wxChoice::DoGetClientObject( int n ) const
 {
     wxCHECK_MSG( m_widget != NULL, (wxClientData*) NULL, wxT("invalid combobox") );
 
 {
     wxCHECK_MSG( m_widget != NULL, (wxClientData*) NULL, wxT("invalid combobox") );
 
-    wxNode *node = m_clientObjectList.Nth( n );
+    wxNode *node = m_clientList.Nth( n );
     wxCHECK_MSG( node, (wxClientData *)NULL,
                  wxT("invalid index in wxChoice::DoGetClientObject") );
 
     wxCHECK_MSG( node, (wxClientData *)NULL,
                  wxT("invalid index in wxChoice::DoGetClientObject") );
 
@@ -204,16 +202,17 @@ void wxChoice::Clear()
     GtkWidget *menu = gtk_menu_new();
     gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
 
     GtkWidget *menu = gtk_menu_new();
     gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
 
-    wxNode *node = m_clientObjectList.First();
-    while (node)
+    if (m_clientDataItemsType == ClientData_Object)
     {
     {
-        wxClientData *cd = (wxClientData*)node->Data();
-        if (cd) delete cd;
-        node = node->Next();
+        wxNode *node = m_clientList.First();   
+        while (node)
+        {
+            wxClientData *cd = (wxClientData*)node->Data();
+            if (cd) delete cd;
+            node = node->Next();
+       }
     }
     }
-    m_clientObjectList.Clear();
-
-    m_clientDataList.Clear();
+    m_clientList.Clear();
 }
 
 void wxChoice::Delete( int WXUNUSED(n) )
 }
 
 void wxChoice::Delete( int WXUNUSED(n) )
index 703e8320c67ad5145bec538e679f1fbcfeb82918..7cf4f752b5802972d2807c6d7b2ed7425bf13cb8 100644 (file)
@@ -118,50 +118,11 @@ gtk_dialog_realized_callback( GtkWidget *widget, wxDialog *win )
     if (g_isIdle) 
         wxapp_install_idle_handler();
 
     if (g_isIdle) 
         wxapp_install_idle_handler();
 
-    /* I haven''t been able to set the position of
+    /* I haven't been able to set the position of
        the dialog before it is shown, so I set the
        the dialog before it is shown, so I set the
-       position in "realize" and "map" */
+       position in "realize" */
     gtk_widget_set_uposition( widget, win->m_x, win->m_y );
 
     gtk_widget_set_uposition( widget, win->m_x, win->m_y );
 
-    /* set size hints */
-    gint flag =        GDK_HINT_POS;
-    if ((win->GetMinWidth() != -1) || (win->GetMinHeight() != -1)) flag |= GDK_HINT_MIN_SIZE;
-    if ((win->GetMaxWidth() != -1) || (win->GetMaxHeight() != -1)) flag |= GDK_HINT_MAX_SIZE;
-    if (flag)
-    {
-        gdk_window_set_hints( win->m_widget->window, 
-                             win->m_x, win->m_y,
-                             win->GetMinWidth(), win->GetMinHeight(),
-                             win->GetMaxWidth(), win->GetMaxHeight(),
-                             flag );
-    }
-
-    /* reset the icon */
-    if (win->m_icon != wxNullIcon)
-    {
-        wxIcon icon( win->m_icon );
-        win->m_icon = wxNullIcon;
-        win->SetIcon( icon );
-    }
-    
-    return FALSE;
-}
-    
-//-----------------------------------------------------------------------------
-// "map" from m_widget
-//-----------------------------------------------------------------------------
-
-static gint 
-gtk_dialog_map_callback( GtkWidget *widget, wxDialog *win )
-{
-    if (g_isIdle) 
-        wxapp_install_idle_handler();
-
-    /* I haven''t been able to set the position of
-       the dialog before it is shown, so I set the
-       position in "realize" and "map" */
-    gtk_widget_set_uposition( widget, win->m_x, win->m_y );
-    
     /* all this is for Motif Window Manager "hints" and is supposed to be
        recognized by other WM as well. not tested. */
     long decor = (long) GDK_DECOR_BORDER;
     /* all this is for Motif Window Manager "hints" and is supposed to be
        recognized by other WM as well. not tested. */
     long decor = (long) GDK_DECOR_BORDER;
@@ -198,6 +159,27 @@ gtk_dialog_map_callback( GtkWidget *widget, wxDialog *win )
     else
         gtk_window_set_policy(GTK_WINDOW(win->m_widget), 1, 1, 1);
     
     else
         gtk_window_set_policy(GTK_WINDOW(win->m_widget), 1, 1, 1);
     
+    /* set size hints */
+    gint flag =        GDK_HINT_POS;
+    if ((win->GetMinWidth() != -1) || (win->GetMinHeight() != -1)) flag |= GDK_HINT_MIN_SIZE;
+    if ((win->GetMaxWidth() != -1) || (win->GetMaxHeight() != -1)) flag |= GDK_HINT_MAX_SIZE;
+    if (flag)
+    {
+        gdk_window_set_hints( win->m_widget->window, 
+                             win->m_x, win->m_y,
+                             win->GetMinWidth(), win->GetMinHeight(),
+                             win->GetMaxWidth(), win->GetMaxHeight(),
+                             flag );
+    }
+
+    /* reset the icon */
+    if (win->m_icon != wxNullIcon)
+    {
+        wxIcon icon( win->m_icon );
+        win->m_icon = wxNullIcon;
+        win->SetIcon( icon );
+    }
+    
     return FALSE;
 }
     
     return FALSE;
 }
     
@@ -304,11 +286,6 @@ bool wxDialog::Create( wxWindow *parent,
     gtk_signal_connect( GTK_OBJECT(m_widget), "realize",
                         GTK_SIGNAL_FUNC(gtk_dialog_realized_callback), (gpointer) this );
 
     gtk_signal_connect( GTK_OBJECT(m_widget), "realize",
                         GTK_SIGNAL_FUNC(gtk_dialog_realized_callback), (gpointer) this );
 
-    /* we set the position of the window after the map event. setting it
-       before has no effect (with KWM) */
-    gtk_signal_connect( GTK_OBJECT(m_widget), "map",
-                        GTK_SIGNAL_FUNC(gtk_dialog_map_callback), (gpointer) this );
-
     /* the user resized the frame by dragging etc. */
     gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
         GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this );
     /* the user resized the frame by dragging etc. */
     gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
         GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this );
index a166de98635fdd455433eef3e4dcd5321a0e0d97..81d2380a015c987ef026d3f4df0196a324d7452c 100644 (file)
@@ -92,8 +92,7 @@ bool wxChoice::Create( wxWindow *parent, wxWindowID id,
 
     for (int i = 0; i < n; i++)
     {
 
     for (int i = 0; i < n; i++)
     {
-        m_clientDataList.Append( (wxObject*) NULL );
-        m_clientObjectList.Append( (wxObject*) NULL );
+        m_clientList.Append( (wxObject*) NULL );
 
         GtkWidget *item = gtk_menu_item_new_with_label( choices[i].mbc_str() );
         gtk_menu_append( GTK_MENU(menu), item );
 
         GtkWidget *item = gtk_menu_item_new_with_label( choices[i].mbc_str() );
         gtk_menu_append( GTK_MENU(menu), item );
@@ -145,18 +144,17 @@ int wxChoice::DoAppend( const wxString &item )
 
     gtk_widget_show( menu_item );
 
 
     gtk_widget_show( menu_item );
 
-    m_clientDataList.Append( (wxObject*) NULL );
-    m_clientObjectList.Append( (wxObject*) NULL );
+    m_clientList.Append( (wxObject*) NULL );
 
     // return the index of the item in the control
 
     // return the index of the item in the control
-    return GetCount();
+    return GetCount() - 1;
 }
 
 void wxChoice::DoSetClientData( int n, void* clientData )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 
 }
 
 void wxChoice::DoSetClientData( int n, void* clientData )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 
-    wxNode *node = m_clientDataList.Nth( n );
+    wxNode *node = m_clientList.Nth( n );
     wxCHECK_RET( node, wxT("invalid index in wxChoice::DoSetClientData") );
 
     node->SetData( (wxObject*) clientData );
     wxCHECK_RET( node, wxT("invalid index in wxChoice::DoSetClientData") );
 
     node->SetData( (wxObject*) clientData );
@@ -166,7 +164,7 @@ void* wxChoice::DoGetClientData( int n ) const
 {
     wxCHECK_MSG( m_widget != NULL, NULL, wxT("invalid combobox") );
 
 {
     wxCHECK_MSG( m_widget != NULL, NULL, wxT("invalid combobox") );
 
-    wxNode *node = m_clientDataList.Nth( n );
+    wxNode *node = m_clientList.Nth( n );
     wxCHECK_MSG( node, NULL, wxT("invalid index in wxChoice::DoGetClientData") );
 
     return node->Data();
     wxCHECK_MSG( node, NULL, wxT("invalid index in wxChoice::DoGetClientData") );
 
     return node->Data();
@@ -176,7 +174,7 @@ void wxChoice::DoSetClientObject( int n, wxClientData* clientData )
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 
 {
     wxCHECK_RET( m_widget != NULL, wxT("invalid combobox") );
 
-    wxNode *node = m_clientObjectList.Nth( n );
+    wxNode *node = m_clientList.Nth( n );
     wxCHECK_RET( node, wxT("invalid index in wxChoice::DoSetClientObject") );
 
     wxClientData *cd = (wxClientData*) node->Data();
     wxCHECK_RET( node, wxT("invalid index in wxChoice::DoSetClientObject") );
 
     wxClientData *cd = (wxClientData*) node->Data();
@@ -189,7 +187,7 @@ wxClientData* wxChoice::DoGetClientObject( int n ) const
 {
     wxCHECK_MSG( m_widget != NULL, (wxClientData*) NULL, wxT("invalid combobox") );
 
 {
     wxCHECK_MSG( m_widget != NULL, (wxClientData*) NULL, wxT("invalid combobox") );
 
-    wxNode *node = m_clientObjectList.Nth( n );
+    wxNode *node = m_clientList.Nth( n );
     wxCHECK_MSG( node, (wxClientData *)NULL,
                  wxT("invalid index in wxChoice::DoGetClientObject") );
 
     wxCHECK_MSG( node, (wxClientData *)NULL,
                  wxT("invalid index in wxChoice::DoGetClientObject") );
 
@@ -204,16 +202,17 @@ void wxChoice::Clear()
     GtkWidget *menu = gtk_menu_new();
     gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
 
     GtkWidget *menu = gtk_menu_new();
     gtk_option_menu_set_menu( GTK_OPTION_MENU(m_widget), menu );
 
-    wxNode *node = m_clientObjectList.First();
-    while (node)
+    if (m_clientDataItemsType == ClientData_Object)
     {
     {
-        wxClientData *cd = (wxClientData*)node->Data();
-        if (cd) delete cd;
-        node = node->Next();
+        wxNode *node = m_clientList.First();   
+        while (node)
+        {
+            wxClientData *cd = (wxClientData*)node->Data();
+            if (cd) delete cd;
+            node = node->Next();
+       }
     }
     }
-    m_clientObjectList.Clear();
-
-    m_clientDataList.Clear();
+    m_clientList.Clear();
 }
 
 void wxChoice::Delete( int WXUNUSED(n) )
 }
 
 void wxChoice::Delete( int WXUNUSED(n) )
index 703e8320c67ad5145bec538e679f1fbcfeb82918..7cf4f752b5802972d2807c6d7b2ed7425bf13cb8 100644 (file)
@@ -118,50 +118,11 @@ gtk_dialog_realized_callback( GtkWidget *widget, wxDialog *win )
     if (g_isIdle) 
         wxapp_install_idle_handler();
 
     if (g_isIdle) 
         wxapp_install_idle_handler();
 
-    /* I haven''t been able to set the position of
+    /* I haven't been able to set the position of
        the dialog before it is shown, so I set the
        the dialog before it is shown, so I set the
-       position in "realize" and "map" */
+       position in "realize" */
     gtk_widget_set_uposition( widget, win->m_x, win->m_y );
 
     gtk_widget_set_uposition( widget, win->m_x, win->m_y );
 
-    /* set size hints */
-    gint flag =        GDK_HINT_POS;
-    if ((win->GetMinWidth() != -1) || (win->GetMinHeight() != -1)) flag |= GDK_HINT_MIN_SIZE;
-    if ((win->GetMaxWidth() != -1) || (win->GetMaxHeight() != -1)) flag |= GDK_HINT_MAX_SIZE;
-    if (flag)
-    {
-        gdk_window_set_hints( win->m_widget->window, 
-                             win->m_x, win->m_y,
-                             win->GetMinWidth(), win->GetMinHeight(),
-                             win->GetMaxWidth(), win->GetMaxHeight(),
-                             flag );
-    }
-
-    /* reset the icon */
-    if (win->m_icon != wxNullIcon)
-    {
-        wxIcon icon( win->m_icon );
-        win->m_icon = wxNullIcon;
-        win->SetIcon( icon );
-    }
-    
-    return FALSE;
-}
-    
-//-----------------------------------------------------------------------------
-// "map" from m_widget
-//-----------------------------------------------------------------------------
-
-static gint 
-gtk_dialog_map_callback( GtkWidget *widget, wxDialog *win )
-{
-    if (g_isIdle) 
-        wxapp_install_idle_handler();
-
-    /* I haven''t been able to set the position of
-       the dialog before it is shown, so I set the
-       position in "realize" and "map" */
-    gtk_widget_set_uposition( widget, win->m_x, win->m_y );
-    
     /* all this is for Motif Window Manager "hints" and is supposed to be
        recognized by other WM as well. not tested. */
     long decor = (long) GDK_DECOR_BORDER;
     /* all this is for Motif Window Manager "hints" and is supposed to be
        recognized by other WM as well. not tested. */
     long decor = (long) GDK_DECOR_BORDER;
@@ -198,6 +159,27 @@ gtk_dialog_map_callback( GtkWidget *widget, wxDialog *win )
     else
         gtk_window_set_policy(GTK_WINDOW(win->m_widget), 1, 1, 1);
     
     else
         gtk_window_set_policy(GTK_WINDOW(win->m_widget), 1, 1, 1);
     
+    /* set size hints */
+    gint flag =        GDK_HINT_POS;
+    if ((win->GetMinWidth() != -1) || (win->GetMinHeight() != -1)) flag |= GDK_HINT_MIN_SIZE;
+    if ((win->GetMaxWidth() != -1) || (win->GetMaxHeight() != -1)) flag |= GDK_HINT_MAX_SIZE;
+    if (flag)
+    {
+        gdk_window_set_hints( win->m_widget->window, 
+                             win->m_x, win->m_y,
+                             win->GetMinWidth(), win->GetMinHeight(),
+                             win->GetMaxWidth(), win->GetMaxHeight(),
+                             flag );
+    }
+
+    /* reset the icon */
+    if (win->m_icon != wxNullIcon)
+    {
+        wxIcon icon( win->m_icon );
+        win->m_icon = wxNullIcon;
+        win->SetIcon( icon );
+    }
+    
     return FALSE;
 }
     
     return FALSE;
 }
     
@@ -304,11 +286,6 @@ bool wxDialog::Create( wxWindow *parent,
     gtk_signal_connect( GTK_OBJECT(m_widget), "realize",
                         GTK_SIGNAL_FUNC(gtk_dialog_realized_callback), (gpointer) this );
 
     gtk_signal_connect( GTK_OBJECT(m_widget), "realize",
                         GTK_SIGNAL_FUNC(gtk_dialog_realized_callback), (gpointer) this );
 
-    /* we set the position of the window after the map event. setting it
-       before has no effect (with KWM) */
-    gtk_signal_connect( GTK_OBJECT(m_widget), "map",
-                        GTK_SIGNAL_FUNC(gtk_dialog_map_callback), (gpointer) this );
-
     /* the user resized the frame by dragging etc. */
     gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
         GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this );
     /* the user resized the frame by dragging etc. */
     gtk_signal_connect( GTK_OBJECT(m_widget), "size_allocate",
         GTK_SIGNAL_FUNC(gtk_dialog_size_callback), (gpointer)this );