This fixes the painting of checkboxes.
2006-03-10 Lillian Angel <[EMAIL PROTECTED]>
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
(create): Put checkbox widget into an event box so it paints
properly.
(connectSignals): Fixed to use new function.
(nativeSetCheckboxGroup): Likewise.
(gtkToggleButtonSetActive): Likewise.
(gtkWidgetModifyFont): Likewise.
(gtkButtonSetLabel): Likewise.
(combobox_get_widget): New function.
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
===================================================================
RCS file: /sources/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c,v
retrieving revision 1.22
diff -u -r1.22 gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c 22 Feb 2006 14:47:50 -0000 1.22
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c 10 Mar 2006 15:24:12 -0000
@@ -42,6 +42,7 @@
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
static jmethodID postItemEventID;
+static GtkWidget *combobox_get_widget (GtkWidget *widget);
void
cp_gtk_checkbox_init_jni (void)
@@ -63,26 +64,35 @@
(JNIEnv *env, jobject obj, jobject group)
{
GtkWidget *button;
+ GtkWidget *eventbox;
gdk_threads_enter ();
NSA_SET_GLOBAL_REF (env, obj);
-
+ eventbox = gtk_event_box_new ();
+
if (group == NULL)
+ {
button = gtk_check_button_new_with_label ("");
+ gtk_container_add (GTK_CONTAINER (eventbox), button);
+ gtk_widget_show (button);
+ }
else
{
void *native_group = NSA_GET_PTR (env, group);
button = gtk_radio_button_new_with_label_from_widget (native_group, "");
+ gtk_container_add (GTK_CONTAINER (eventbox), button);
+ gtk_widget_show (button);
+
if (native_group == NULL)
- {
- /* Set the native group so we can use the correct value the
- next time around. FIXME: this doesn't work! */
- NSA_SET_PTR (env, group, button);
- }
+ {
+ /* Set the native group so we can use the correct value the
+ next time around. FIXME: this doesn't work! */
+ NSA_SET_PTR (env, group, button);
+ }
}
- NSA_SET_PTR (env, obj, button);
+ NSA_SET_PTR (env, obj, eventbox);
gdk_threads_leave ();
}
@@ -93,18 +103,20 @@
{
void *ptr = NULL;
jobject *gref = NULL;
+ GtkWidget *bin;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
gref = NSA_GET_GLOBAL_REF (env, obj);
+ bin = combobox_get_widget (GTK_WIDGET (ptr));
/* Checkbox signals */
- g_signal_connect (G_OBJECT (ptr), "toggled",
+ g_signal_connect (G_OBJECT (bin), "toggled",
G_CALLBACK (item_toggled_cb), *gref);
/* Component signals */
- cp_gtk_component_connect_signals (G_OBJECT (ptr), gref);
+ cp_gtk_component_connect_signals (G_OBJECT (bin), gref);
gdk_threads_leave ();
}
@@ -115,16 +127,18 @@
{
GtkRadioButton *button;
void *native_group, *ptr;
+ GtkWidget *bin;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
-
+ bin = combobox_get_widget (GTK_WIDGET (ptr));
+
/* FIXME: we can't yet switch between a checkbutton and a
radiobutton. However, AWT requires this. For now we just
crash. */
- button = GTK_RADIO_BUTTON (ptr);
+ button = GTK_RADIO_BUTTON (bin);
native_group = NSA_GET_PTR (env, group);
if (native_group == NULL)
@@ -152,12 +166,14 @@
(JNIEnv *env, jobject obj, jboolean is_active)
{
void *ptr;
+ GtkWidget *bin;
gdk_threads_enter ();
ptr = NSA_GET_PTR (env, obj);
-
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptr), is_active);
+ bin = combobox_get_widget (GTK_WIDGET (ptr));
+
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (bin), is_active);
gdk_threads_leave ();
}
@@ -176,7 +192,7 @@
ptr = NSA_GET_PTR (env, obj);
- button = GTK_WIDGET (ptr);
+ button = combobox_get_widget (GTK_WIDGET (ptr));
label = gtk_bin_get_child (GTK_BIN(button));
if (!label)
@@ -217,7 +233,7 @@
c_label = (*env)->GetStringUTFChars (env, label, NULL);
- label_widget = gtk_bin_get_child (GTK_BIN (ptr));
+ label_widget = gtk_bin_get_child (GTK_BIN (combobox_get_widget (GTK_WIDGET (ptr))));
gtk_label_set_text (GTK_LABEL (label_widget), c_label);
(*env)->ReleaseStringUTFChars (env, label, c_label);
@@ -233,3 +249,15 @@
peer,
item->active);
}
+
+static GtkWidget *
+combobox_get_widget (GtkWidget *widget)
+{
+ GtkWidget *wid;
+
+ g_assert (GTK_IS_EVENT_BOX (widget));
+ wid = gtk_bin_get_child (GTK_BIN(widget));
+
+ return wid;
+}
+