classpath-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[cp-patches] GTK button peer clicked


From: Thomas Fitzsimmons
Subject: [cp-patches] GTK button peer clicked
Date: Mon, 15 Aug 2005 00:18:00 -0400

Hi,

I committed this to mainline.  It changes how a button click is handled
by the GTK peers.  Now an ActionEvent is posted in response to a
GtkButton's "clicked" signal.

Tom

2005-08-15  Thomas Fitzsimmons  <address@hidden>

        * gnu/java/awt/peer/gtk/GtkButtonPeer.java (handleEvent): Remove
        method.
        (postActionEvent): New method.
        * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c:
        Rename state_to_awt_mods cp_gtk_state_to_awt_mods.
        * native/jni/gtk-peer/gtkpeer.h: Declare cp_gtk_state_to_awt_mods.
        * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
        (clicked_cb): New function.
        (connectSignals): Connect clicked_cb callback to "clicked" signal.

Index: gnu/java/awt/peer/gtk/GtkButtonPeer.java
===================================================================
RCS file: 
/cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GtkButtonPeer.java,v
retrieving revision 1.38
diff -u -u -r1.38 GtkButtonPeer.java
--- gnu/java/awt/peer/gtk/GtkButtonPeer.java    12 Aug 2005 22:49:41 -0000      
1.38
+++ gnu/java/awt/peer/gtk/GtkButtonPeer.java    15 Aug 2005 04:07:30 -0000
@@ -42,6 +42,7 @@
 import java.awt.Button;
 import java.awt.Component;
 import java.awt.Point;
+import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 import java.awt.event.MouseEvent;
 import java.awt.peer.ButtonPeer;
@@ -84,32 +85,11 @@
     gtkSetLabel(label);
   }
 
-  public void handleEvent (AWTEvent e)
+  void postActionEvent (int mods)
   {
-    if (e.getID () == MouseEvent.MOUSE_RELEASED && isEnabled ())
-      {
-       MouseEvent me = (MouseEvent) e;
-       Point p = me.getPoint();
-       p.translate(((Component) me.getSource()).getX(),
-                   ((Component) me.getSource()).getY());
-       if (!me.isConsumed ()
-           && (me.getModifiersEx () & MouseEvent.BUTTON1_DOWN_MASK) != 0
-           && awtComponent.getBounds().contains(p))
-          postActionEvent (((Button) awtComponent).getActionCommand (), 
-                           me.getModifiersEx ());
-      }
-
-    if (e.getID () == KeyEvent.KEY_PRESSED)
-      {
-       KeyEvent ke = (KeyEvent) e;
-       if (!ke.isConsumed () && ke.getKeyCode () == KeyEvent.VK_SPACE)
-          {
-            postActionEvent (((Button) awtComponent).getActionCommand (),
-                             ke.getModifiersEx ());
-            gtkActivate ();
-          }
-      }
-
-    super.handleEvent (e);
+    q().postEvent (new ActionEvent (awtWidget,
+                                   ActionEvent.ACTION_PERFORMED,
+                                   ((Button) awtComponent).getActionCommand (),
+                                   mods));
   }
 }
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
===================================================================
RCS file: 
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,v
retrieving revision 1.48
diff -u -u -r1.48 gnu_java_awt_peer_gtk_GtkComponentPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c        14 Jul 
2005 22:07:02 -0000      1.48
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c        15 Aug 
2005 04:07:30 -0000
@@ -145,8 +145,8 @@
   return 0;
 }
 
-static jint
-state_to_awt_mods (guint state)
+jint
+cp_gtk_state_to_awt_mods (guint state)
 {
   jint result = 0;
 
@@ -946,7 +946,7 @@
                                 postMouseEventID,
                                 AWT_MOUSE_PRESSED, 
                                 (jlong)event->time,
-                                state_to_awt_mods (event->state)
+                                cp_gtk_state_to_awt_mods (event->state)
                                 | button_to_awt_mods (event->button),
                                 (jint)event->x,
                                 (jint)event->y, 
@@ -974,7 +974,7 @@
                                 postMouseEventID,
                                 AWT_MOUSE_RELEASED, 
                                 (jlong)event->time,
-                                state_to_awt_mods (event->state)
+                                cp_gtk_state_to_awt_mods (event->state)
                                 | button_to_awt_mods (event->button),
                                 (jint)event->x,
                                 (jint)event->y, 
@@ -999,7 +999,7 @@
                                     postMouseEventID,
                                     AWT_MOUSE_CLICKED, 
                                     (jlong)event->time,
-                                    state_to_awt_mods (event->state)
+                                    cp_gtk_state_to_awt_mods (event->state)
                                     | button_to_awt_mods (event->button),
                                     (jint)event->x,
                                     (jint)event->y, 
@@ -1045,7 +1045,7 @@
       (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, 
postMouseEventID,
                                     AWT_MOUSE_MOVED,
                                     (jlong)event->time,
-                                    state_to_awt_mods (event->state),
+                                    cp_gtk_state_to_awt_mods (event->state),
                                     (jint)event->x,
                                     (jint)event->y,
                                     0,
Index: native/jni/gtk-peer/gtkpeer.h
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/gtk-peer/gtkpeer.h,v
retrieving revision 1.36
diff -u -u -r1.36 gtkpeer.h
--- native/jni/gtk-peer/gtkpeer.h       26 Jul 2005 20:25:13 -0000      1.36
+++ native/jni/gtk-peer/gtkpeer.h       15 Aug 2005 04:07:30 -0000
@@ -163,8 +163,9 @@
   GtkWidget **widget;
 };
 
-/* Keycode helpers */
+/* Constant conversion helpers */
 guint cp_gtk_awt_keycode_to_keysym (jint keyCode, jint keyLocation);
+jint cp_gtk_state_to_awt_mods (guint state);
 
 /* Image helpers */
 GdkPixbuf *cp_gtk_image_get_pixbuf (JNIEnv *env, jobject obj);
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
===================================================================
RCS file: 
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,v
retrieving revision 1.27
diff -u -u -r1.27 gnu_java_awt_peer_gtk_GtkButtonPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c   12 Aug 2005 
22:49:42 -0000      1.27
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c   15 Aug 2005 
04:07:30 -0000
@@ -41,7 +41,8 @@
 
 static jmethodID beginNativeRepaintID;
 static jmethodID endNativeRepaintID;
- 
+static jmethodID postActionEventID;
+
 void
 cp_gtk_button_init_jni (void)
 {
@@ -56,11 +57,18 @@
 
   endNativeRepaintID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), 
gtkbuttonpeer,
                                                   "endNativeRepaint", "()V");
+
+  postActionEventID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(),
+                                                       gtkbuttonpeer,
+                                                  "postActionEvent", "(I)V");
 }
 
 static void block_expose_event_cb (GtkWidget *widget,
                                    jobject peer);
 
+static void clicked_cb (GtkButton *button,
+                       jobject peer);
+
 JNIEXPORT void JNICALL
 Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create
   (JNIEnv *env, jobject obj, jstring label)
@@ -158,6 +166,9 @@
   g_signal_connect_after (G_OBJECT (button), "released",
                           G_CALLBACK (block_expose_event_cb), *gref);
 
+  g_signal_connect (G_OBJECT (button), "clicked",
+                   G_CALLBACK (clicked_cb), *gref);
+
   /* Component signals */
   cp_gtk_component_connect_signals (G_OBJECT (button), gref);
 
@@ -385,4 +396,20 @@
                               endNativeRepaintID);
 
   gdk_threads_enter ();
+}
+
+static void
+clicked_cb (GtkButton* button __attribute__((unused)),
+           jobject peer)
+{
+  GdkEventButton* event;
+
+  event = (GdkEventButton*) gtk_get_current_event ();
+  g_assert (event);
+
+  (*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer,
+                                      postActionEventID,
+                                      cp_gtk_state_to_awt_mods (event->state));
+
+  gdk_event_free ((GdkEvent*) event);
 }

reply via email to

[Prev in Thread] Current Thread [Next in Thread]