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;
+}
+

Reply via email to