/[classpath]/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
ViewVC logotype

Diff of /classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by mark, Tue Jan 22 22:27:02 2002 UTC revision 1.4 by tromey, Mon Mar 11 00:52:00 2002 UTC
# Line 1  Line 1 
1  /* gtkcheckboxpeer.c -- Native implementation of GtkCheckboxPeer  /* gtkcheckboxpeer.c -- Native implementation of GtkCheckboxPeer
2     Copyright (C) 1998, 1999 Free Software Foundation, Inc.     Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc.
3    
4  This file is part of GNU Classpath.  This file is part of GNU Classpath.
5    
# Line 44  static void connect_checkbox_item_select Line 44  static void connect_checkbox_item_select
44                                                     GtkToggleButton *item,                                                     GtkToggleButton *item,
45                                                     jobject item_obj);                                                     jobject item_obj);
46    
47  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
48  Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkRadioButtonSetGroup  Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeCreate
49    (JNIEnv *env, jobject obj, jobject group)    (JNIEnv *env, jobject obj, jobject group)
50  {  {
   GtkRadioButton *button;  
   void *native_group, *ptr;  
   
   native_group = NSA_GET_PTR (env, group);  
   ptr = NSA_GET_PTR (env, obj);  
   
   gdk_threads_enter ();  
   
   button=GTK_RADIO_BUTTON(ptr);  
   
   if (native_group==NULL)  
     gtk_radio_button_set_group (button, NULL);  
   else  
     gtk_radio_button_set_group (button,  
                                 gtk_radio_button_group  
                                 (GTK_RADIO_BUTTON (native_group)));  
                                   
   gdk_threads_leave ();  
   
   if (native_group==NULL)  
     NSA_SET_PTR (env, group, native_group);  
 }  
   
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkRadioButtonPeer_create  
   (JNIEnv *env, jobject obj)  
 {  
   gpointer widget;  
   
   gdk_threads_enter ();  
   widget = gtk_type_new (gtk_radio_button_get_type ());  
   gdk_threads_leave ();  
   
   NSA_SET_PTR (env, obj, widget);  
 }  
   
   
 JNIEXPORT void JNICALL  
 Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkRadioButtonNew  
   (JNIEnv *env, jobject obj, jobject parent_obj,  
    jobject group, jboolean checked, jstring label)  
 {  
51    GtkWidget *button;    GtkWidget *button;
   const char *str;  
   void *native_group;  
   void *parent;  
   
   str = (*env)->GetStringUTFChars (env, label, NULL);  
   native_group = NSA_GET_PTR (env, group);  
   parent = NSA_GET_PTR (env, parent_obj);  
52    
53    gdk_threads_enter ();    gdk_threads_enter ();
54    
55    /* All checkboxes get a label, even if it is blank. */      if (group == NULL)
56        button = gtk_check_button_new_with_label ("");
   if (native_group==NULL)  
     button=gtk_radio_button_new_with_label_from_widget (NULL, str);  
57    else    else
58      button=gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON      {
59                                                          (native_group), str);        void *native_group = NSA_GET_PTR (env, group);
60    set_parent (button, GTK_CONTAINER (parent));        button = gtk_radio_button_new_with_label_from_widget (native_group, "");
61    gtk_widget_realize (button);        if (native_group == NULL)
62    connect_awt_hook (env, obj, 1,          {
63                      GTK_TOGGLE_BUTTON (button)->event_window);            /* Set the native group so we can use the correct value the
64    connect_checkbox_item_selectable_hook (env, obj, GTK_TOGGLE_BUTTON (button),               next time around.  FIXME: this doesn't work!  */
65                                           label);            NSA_SET_PTR (env, group, button);
66            }
67    if (checked)      }
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);  
     
   gdk_threads_leave ();  
   (*env)->ReleaseStringUTFChars (env, label, str);  
   
   if (native_group==NULL)  
     NSA_SET_PTR (env, group, button);  
     
   NSA_SET_PTR (env, obj, button);  
 }  
   
 JNIEXPORT void JNICALL  
 Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkCheckButtonNew  
   (JNIEnv *env, jobject obj, jobject parent_obj,  
    jboolean checked, jstring label)  
 {  
   GtkWidget *button;  
   const char *str;  
   void *parent;  
   
   parent = NSA_GET_PTR (env, parent_obj);  
   str = (*env)->GetStringUTFChars (env, label, NULL);  
   
   gdk_threads_enter ();  
68    
   /* All checkboxes get a label, even if it is blank. */    
   button=gtk_check_button_new_with_label (str);  
   if (checked)  
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);  
     
   set_parent (button, GTK_CONTAINER (parent));  
   gtk_widget_realize (button);  
   connect_awt_hook (env, obj, 1,  
                     GTK_TOGGLE_BUTTON (button)->event_window);  
   connect_checkbox_item_selectable_hook (env, obj, GTK_TOGGLE_BUTTON (button),  
                                          label);  
69    gdk_threads_leave ();    gdk_threads_leave ();
70    
   (*env)->ReleaseStringUTFChars (env, label, str);  
   
71    NSA_SET_PTR (env, obj, button);    NSA_SET_PTR (env, obj, button);
72  }  }
73    
   
74  JNIEXPORT void JNICALL  JNIEXPORT void JNICALL
75  Java_gnu_java_awt_peer_gtk_GtkToggleButtonPeer_setState  Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeSetCheckboxGroup
76    (JNIEnv *env, jobject obj, jboolean checked)    (JNIEnv *env, jobject obj, jobject group, jobject old_group)
77  {  {
78    void *ptr;    GtkRadioButton *button;
79      void *native_group, *ptr;
80    
81    ptr = NSA_GET_PTR (env, obj);    ptr = NSA_GET_PTR (env, obj);
82    
83    gdk_threads_enter ();    gdk_threads_enter ();
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptr),  
                                (checked) ? TRUE : FALSE);  
   gdk_threads_leave ();  
 }  
84    
85  JNIEXPORT void JNICALL    /* FIXME: we can't yet switch between a checkbutton and a
86  Java_gnu_java_awt_peer_gtk_GtkToggleButtonPeer_setLabel       radiobutton.  However, AWT requires this.  For now we just
87    (JNIEnv *env, jobject obj, jstring label)       crash.  */
88  {  
89    void *ptr;    button = GTK_RADIO_BUTTON (ptr);
90    const char *str;  
91    GList *child;    if (old_group != NULL)
92        {
93          /* First, update our old group, if one exists, to point to some
94             other widget in the group.  We have to do this because Gtk
95             doesn't have a separate object to represent a radio button's
96             group.  */
97          GSList *list;
98          for (list = gtk_radio_button_group (button); list != NULL;
99               list = list->next)
100            {
101              if (list->data != button)
102                break;
103            }
104    
105    ptr = NSA_GET_PTR (env, obj);        NSA_SET_PTR (env, old_group, list ? list->data : NULL);
106          }
107    printf("labelset\n");  
108      native_group = NSA_GET_PTR (env, group);
109      if (native_group == NULL)
110        gtk_radio_button_set_group (button, NULL);
111      else
112        gtk_radio_button_set_group (button,
113                                    gtk_radio_button_group
114                                    (GTK_RADIO_BUTTON (native_group)));
115    
   str = (*env)->GetStringUTFChars (env, label, NULL);  
   gdk_threads_enter ();  
     
   /* We assume that the checkbutton has 1 child, a label. */  
     
   child=gtk_container_children (GTK_CONTAINER(ptr));  
   if (!child)  
     printf("No children in button!\n");  
   if(!GTK_IS_LABEL(child->data))  
     printf("Child is not label!\n");  
     
   gtk_label_set (GTK_LABEL(child->data),str);  
     
116    gdk_threads_leave ();    gdk_threads_leave ();
117    
118    g_list_free(child);    /* If the native group wasn't set on the new CheckboxGroup, then set
119    (*env)->ReleaseStringUTFChars (env, label, str);       it now so that the right thing will happen with the next
120         radiobutton.  */
121      if (native_group == NULL)
122        NSA_SET_PTR (env, group, native_group);
123  }  }
124    
125  static void  static void

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26