6624717: Corrupted combo box, GTK L&F, Ubuntu 7.10
authorstayer
Fri, 11 Apr 2008 16:25:17 +0400
changeset 411 f903e1d5a11f
parent 410 4bc25999f850
child 412 002786c2e5bb
6624717: Corrupted combo box, GTK L&F, Ubuntu 7.10 Reviewed-by: peterz
jdk/src/solaris/native/sun/awt/gtk2_interface.c
--- a/jdk/src/solaris/native/sun/awt/gtk2_interface.c	Mon Apr 07 13:07:04 2008 +0400
+++ b/jdk/src/solaris/native/sun/awt/gtk2_interface.c	Fri Apr 11 16:25:17 2008 +0400
@@ -333,6 +333,7 @@
 static GdkPixbuf* (*fp_gtk_widget_render_icon)(GtkWidget *widget,
         const gchar *stock_id, GtkIconSize size, const gchar *detail);
 static void (*fp_gtk_widget_set_name)(GtkWidget *widget, const gchar *name);
+static void (*fp_gtk_widget_set_parent)(GtkWidget *widget, GtkWidget *parent);
 static void (*fp_gtk_widget_set_direction)(GtkWidget *widget,
         GtkTextDirection direction);
 static void (*fp_gtk_widget_style_get)(GtkWidget *widget,
@@ -570,6 +571,8 @@
             dl_symbol("gtk_widget_render_icon");
         fp_gtk_widget_set_name =
             dl_symbol("gtk_widget_set_name");
+        fp_gtk_widget_set_parent =
+            dl_symbol("gtk_widget_set_parent");
         fp_gtk_widget_set_direction =
             dl_symbol("gtk_widget_set_direction");
         fp_gtk_widget_style_get =
@@ -1040,7 +1043,7 @@
                     (NULL == gtk2_widgets[_GTK_COMBO_BOX_ARROW_BUTTON_TYPE]))
             {
                 gtk2_widgets[_GTK_COMBO_BOX_ARROW_BUTTON_TYPE] =
-                     (*fp_gtk_button_new)();
+                     (*fp_gtk_toggle_button_new)();
             }
             result = gtk2_widgets[_GTK_COMBO_BOX_ARROW_BUTTON_TYPE];
             break;
@@ -1414,12 +1417,20 @@
                  widget_type == COMBO_BOX_TEXT_FIELD)
         {
             /*
-             * We add a regular GtkButton/GtkEntry to a GtkComboBoxEntry
-             * in order to trick engines into thinking it's a real combobox
-             * arrow button/text field.
-             */
+            * We add a regular GtkButton/GtkEntry to a GtkComboBoxEntry
+            * in order to trick engines into thinking it's a real combobox
+            * arrow button/text field.
+            */
             GtkWidget *combo = (*fp_gtk_combo_box_entry_new)();
-            (*fp_gtk_container_add)((GtkContainer *)combo, result);
+
+            if (widget_type == COMBO_BOX_TEXT_FIELD)
+                (*fp_gtk_container_add)((GtkContainer *)combo, result);
+            else
+            {
+                (*fp_gtk_widget_set_parent)(result, combo);
+                ((GtkBin*)combo)->child = result;
+            }
+
             (*fp_gtk_container_add)((GtkContainer *)gtk2_fixed, combo);
             (*fp_gtk_widget_realize)(result);
             return result;