This patch fixes the problem along the lines proposed in the previous message. The patch was tested against version openjdk-6_6b18-1.8.3-2 +squeeze1.
As the actual jdk source is extracted during the build, the patch must be applied afterwards, and libmawt must be rebuilt. I have sniped the relevant gcc invocations from a build log to get a fast turnaround for tests - They are attached, however they are specific to amd64. The patch itself is just a normal source patch for gtk_interface.c and its header. I still do not know how it can be added to the debian patches, but you will probably know, how to do it. Finally, there is a screenshot of the result.
=== modified file 'build/openjdk/jdk/src/solaris/native/sun/awt/gtk2_interface.c'
--- build/openjdk/jdk/src/solaris/native/sun/awt/gtk2_interface.c 2011-03-12 18:54:29 +0000
+++ build/openjdk/jdk/src/solaris/native/sun/awt/gtk2_interface.c 2011-03-12 19:24:20 +0000
@@ -1899,8 +1899,7 @@
init_containers();
gtk2_widget = gtk2_get_widget(widget_type);
- GtkStyle* style = gtk2_widget->style;
- return style->xthickness;
+ return gtk2_widget->style->xthickness;
}
gint gtk2_get_ythickness(JNIEnv *env, WidgetType widget_type)
@@ -1908,8 +1907,22 @@
init_containers();
gtk2_widget = gtk2_get_widget(widget_type);
- GtkStyle* style = gtk2_widget->style;
- return style->ythickness;
+ gint thickness = gtk2_widget->style->ythickness;
+
+ if (widget_type == POPUP_MENU_SEPARATOR)
+ {
+ gboolean wide_separators = gtk2_get_widget_style_property_boolean(
+ gtk2_widget, "wide-separators");
+
+ if (wide_separators)
+ {
+ gint separator_height = gtk2_get_widget_style_property_int(
+ gtk2_widget, "separator-height");
+ return separator_height / 2;
+ }
+ }
+
+ return thickness;
}
/*************************************************/
@@ -1970,6 +1983,23 @@
}
/*************************************************/
+gboolean gtk2_get_widget_style_property_boolean(GtkWidget* widget, const char* property_name) {
+ GValue value;
+ value.g_type = 0;
+ (*fp_g_value_init)(&value, G_TYPE_BOOLEAN);
+ (*fp_gtk_widget_style_get_property)(widget, property_name, &value);
+ return (*fp_g_value_get_boolean)(&value);
+}
+
+gint gtk2_get_widget_style_property_int(GtkWidget* widget, const char* property_name) {
+ GValue value;
+ value.g_type = 0;
+ (*fp_g_value_init)(&value, G_TYPE_INT);
+ (*fp_gtk_widget_style_get_property)(widget, property_name, &value);
+ return (*fp_g_value_get_int)(&value);
+}
+
+/*************************************************/
jobject create_Boolean(JNIEnv *env, jboolean boolean_value);
jobject create_Integer(JNIEnv *env, jint int_value);
jobject create_Long(JNIEnv *env, jlong long_value);
=== modified file 'build/openjdk/jdk/src/solaris/native/sun/awt/gtk2_interface.h'
--- build/openjdk/jdk/src/solaris/native/sun/awt/gtk2_interface.h 2011-03-12 18:54:29 +0000
+++ build/openjdk/jdk/src/solaris/native/sun/awt/gtk2_interface.h 2011-03-12 19:24:20 +0000
@@ -637,6 +637,10 @@
gint gtk2_get_ythickness(JNIEnv *env, WidgetType widget_type);
gint gtk2_get_color_for_state(JNIEnv *env, WidgetType widget_type,
GtkStateType state_type, ColorType color_type);
+gboolean gtk2_get_widget_style_property_boolean(GtkWidget* widget,
+ const char* property_name);
+gint gtk2_get_widget_style_property_int(GtkWidget* widget,
+ const char* property_name);
jobject gtk2_get_class_value(JNIEnv *env, WidgetType widget_type, jstring key);
GdkPixbuf *gtk2_get_stock_icon(gint widget_type, const gchar *stock_id,
compile.sh
Description: application/shellscript
link.sh
Description: application/shellscript
<<attachment: Fixed.png>>
signature.asc
Description: This is a digitally signed message part

