]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/popupwin.cpp
Second part of #15224 fix: AddRows, AddColumns (dghart)
[wxWidgets.git] / src / gtk / popupwin.cpp
index 38ac3c14f41c9bfa58fa965360f63e38fdeb0424..08a85ea1a55d4203929fea767712840a72c67ddf 100644 (file)
@@ -2,7 +2,6 @@
 // Name:        src/gtk/popupwin.cpp
 // Purpose:
 // Author:      Robert Roebling
-// Id:          $Id$
 // Copyright:   (c) 1998 Robert Roebling
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
@@ -46,7 +45,7 @@ static gint gtk_popup_button_press (GtkWidget *widget, GdkEvent *gdk_event, wxPo
         {
             if (child == widget)
                 return FALSE;
-            child = child->parent;
+            child = gtk_widget_get_parent(child);
         }
     }
 
@@ -73,14 +72,6 @@ bool gtk_dialog_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED
 }
 }
 
-void wxPopupWindow::AddChildGTK(wxWindowGTK* child)
-{
-    gtk_widget_set_size_request(
-        child->m_widget, child->m_width, child->m_height);
-    gtk_fixed_put(
-        GTK_FIXED(m_wxwindow), child->m_widget, child->m_x, child->m_y);
-}
-
 //-----------------------------------------------------------------------------
 // wxPopupWindow
 //-----------------------------------------------------------------------------
@@ -114,21 +105,34 @@ bool wxPopupWindow::Create( wxWindow *parent, int style )
     g_object_ref( m_widget );
 
     gtk_widget_set_name( m_widget, "wxPopupWindow" );
-    gtk_window_set_type_hint( GTK_WINDOW(m_widget), GDK_WINDOW_TYPE_HINT_COMBO );
+    // wxPopupWindow is used for different windows as well
+    // gtk_window_set_type_hint( GTK_WINDOW(m_widget), GDK_WINDOW_TYPE_HINT_COMBO );
 
-    GtkWidget *toplevel = gtk_widget_get_toplevel( parent->m_widget );
-    if (GTK_IS_WINDOW (toplevel))
+    // Popup windows can be created without parent, so handle this correctly.
+    if (parent)
     {
-        gtk_window_group_add_window (gtk_window_get_group (GTK_WINDOW (toplevel)), GTK_WINDOW (m_widget));
-        gtk_window_set_transient_for (GTK_WINDOW (m_widget), GTK_WINDOW (toplevel));
+        GtkWidget *toplevel = gtk_widget_get_toplevel( parent->m_widget );
+        if (GTK_IS_WINDOW (toplevel))
+        {
+#if GTK_CHECK_VERSION(2,10,0)
+#ifndef __WXGTK3__
+            if (!gtk_check_version(2,10,0))
+#endif
+            {
+                gtk_window_group_add_window (gtk_window_get_group (GTK_WINDOW (toplevel)), GTK_WINDOW (m_widget));
+            }
+#endif
+            gtk_window_set_transient_for (GTK_WINDOW (m_widget), GTK_WINDOW (toplevel));
+        }
+        gtk_window_set_screen (GTK_WINDOW (m_widget), gtk_widget_get_screen (GTK_WIDGET (parent->m_widget)));
     }
+
     gtk_window_set_resizable (GTK_WINDOW (m_widget), FALSE);
-    gtk_window_set_screen (GTK_WINDOW (m_widget), gtk_widget_get_screen (GTK_WIDGET (parent->m_widget)));
 
     g_signal_connect (m_widget, "delete_event",
                       G_CALLBACK (gtk_dialog_delete_callback), this);
 
-    m_wxwindow = wxPizza::New(m_windowStyle);
+    m_wxwindow = wxPizza::New();
     gtk_widget_show( m_wxwindow );
 
     gtk_container_add( GTK_CONTAINER(m_widget), m_wxwindow );
@@ -205,7 +209,7 @@ void wxPopupWindow::SetFocus()
             return;
         }
     }
-    
+
     wxPopupWindowBase::SetFocus();
 }