From bc67c73d4a212a1a0a58f1218907f88e4896adfb Mon Sep 17 00:00:00 2001 From: Kim Ho Date: Tue, 9 Dec 2003 03:47:32 +0000 Subject: Fix for Checkbox states. 2003-12-08 Kim Ho Fix for Checkbox states. * gnu/java/awt/peer/gtk/GtkCheckboxPeer.java: (currentState): New field. (nativeCreate): Add initial state parameter. (create): Changed to reflect new parameter. (setState): Fire only on changed states. (postItemEvent): Fire only on changed states. Also change the Java Checkbox to reflect new state. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c: (nativeCreate): Add parameter and set active state. From-SVN: r74459 --- libjava/ChangeLog | 13 +++++++++++ libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java | 27 ++++++++++++++++++---- .../gnu_java_awt_peer_gtk_GtkCheckboxPeer.c | 6 ++--- 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index e51933c..2b1d473 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,16 @@ +2003-12-08 Kim Ho + + Fix for Checkbox states. + * gnu/java/awt/peer/gtk/GtkCheckboxPeer.java: + (currentState): New field. + (nativeCreate): Add initial state parameter. + (create): Changed to reflect new parameter. + (setState): Fire only on changed states. + (postItemEvent): Fire only on changed states. Also change the + Java Checkbox to reflect new state. + * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c: + (nativeCreate): Add parameter and set active state. + 2003-12-08 Fernando Nasser * java/awt/datatransfer/StringSelection.java (getTransferData): Return diff --git a/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java index 67469c9..174a169 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java @@ -1,5 +1,5 @@ /* GtkCheckboxPeer.java -- Implements CheckboxPeer with GTK - Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -48,8 +48,11 @@ public class GtkCheckboxPeer extends GtkComponentPeer { // Group from last time it was set. public GtkCheckboxGroupPeer old_group; + // The current state of the GTK checkbox. + private boolean currentState; - public native void nativeCreate (GtkCheckboxGroupPeer group); + public native void nativeCreate (GtkCheckboxGroupPeer group, + boolean state); public native void nativeSetCheckboxGroup (GtkCheckboxGroupPeer group); public native void connectHooks (); @@ -66,12 +69,14 @@ public class GtkCheckboxPeer extends GtkComponentPeer { CheckboxGroup g = ((Checkbox) awtComponent).getCheckboxGroup (); old_group = GtkCheckboxGroupPeer.getCheckboxGroupPeer (g); - nativeCreate (old_group); + currentState = ((Checkbox)awtComponent).getState(); + nativeCreate (old_group, currentState); } public void setState (boolean state) { - set ("active", state); + if (currentState != state) + set ("active", state); } public void setLabel (String label) @@ -103,7 +108,19 @@ public class GtkCheckboxPeer extends GtkComponentPeer // need information that we have. public void postItemEvent (Object item, int stateChange) { - super.postItemEvent (awtComponent, stateChange); + Checkbox currentCheckBox = ((Checkbox)awtComponent); + // A firing of the event is only desired if the state has changed due to a + // button press. The currentCheckBox's state must be different from the + // one that the stateChange is changing to. + // stateChange = 1 if it goes from false -> true + // stateChange = 2 if it goes from true -> false + if (( !currentCheckBox.getState() && stateChange == 1) + || (currentCheckBox.getState() && stateChange == 2)) + { + super.postItemEvent (awtComponent, stateChange); + currentState = !currentCheckBox.getState(); + currentCheckBox.setState(currentState); + } } public void dispose () diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c index 09fa7ef..d0d95f9 100644 --- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c +++ b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c @@ -1,5 +1,5 @@ /* gtkcheckboxpeer.c -- Native implementation of GtkCheckboxPeer - Copyright (C) 1998, 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2002, 2003 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -78,7 +78,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxGroupPeer_remove JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeCreate - (JNIEnv *env, jobject obj, jobject group) + (JNIEnv *env, jobject obj, jobject group, jboolean state) { GtkWidget *button; @@ -97,7 +97,7 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeCreate NSA_SET_PTR (env, group, button); } } - + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), state); gdk_threads_leave (); NSA_SET_PTR (env, obj, button); -- cgit v1.1