This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gui][PATCH] Post item events from GtkListPeer
- From: Thomas Fitzsimmons <fitzsim at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: Thu, 27 May 2004 19:37:58 -0400
- Subject: [gui][PATCH] Post item events from GtkListPeer
Hi,
GtkListPeer hasn't posted item events since the update to GtkTreeView.
This patch, which I committed to java-gui-branch, re-implements item
events using GtkTreeView's API.
Tom
2004-05-27 Thomas Fitzsimmons <fitzsim@redhat.com>
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
(item_highlighted): New function.
(connectSignals): Set item_highlighted as list's select
function.
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c,v
retrieving revision 1.7.8.4
diff -u -r1.7.8.4 gnu_java_awt_peer_gtk_GtkListPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c 27 May 2004 18:40:20 -0000 1.7.8.4
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c 27 May 2004 23:31:21 -0000
@@ -44,6 +44,13 @@
N_COLUMNS
};
+gboolean item_highlighted (GtkTreeSelection *selection,
+ GtkTreeModel *model,
+ GtkTreePath *path,
+ gboolean path_currently_selected,
+ jobject peer);
+
+
#define TREE_VIEW_FROM_SW(obj) \
(GTK_TREE_VIEW (GTK_SCROLLED_WINDOW (obj)->container.child))
@@ -130,21 +137,28 @@
(JNIEnv *env, jobject obj)
{
void *ptr;
- GtkTreeView *list;
jobject *gref;
-
- gref = NSA_GET_GLOBAL_REF (env, obj);
- g_assert (gref);
+ GtkTreeView *list;
+ GtkTreeSelection *selection;
ptr = NSA_GET_PTR (env, obj);
+ gref = NSA_GET_GLOBAL_REF (env, obj);
gdk_threads_enter ();
+ g_assert (gref);
+
gtk_widget_realize (GTK_WIDGET (ptr));
+
list = TREE_VIEW_FROM_SW (ptr);
+
g_signal_connect (G_OBJECT (list), "event",
G_CALLBACK (pre_event_handler), *gref);
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
+ gtk_tree_selection_set_select_function (selection, item_highlighted,
+ *gref, NULL);
+
gdk_threads_leave ();
}
@@ -484,3 +498,34 @@
gdk_threads_leave ();
}
+
+gboolean
+item_highlighted (GtkTreeSelection *selection __attribute__((unused)),
+ GtkTreeModel *model,
+ GtkTreePath *path,
+ gboolean path_currently_selected,
+ jobject peer)
+{
+ GtkTreeIter iter;
+ jint row;
+ gint *indices;
+
+ if (gtk_tree_model_get_iter (model, &iter, path))
+ {
+ indices = gtk_tree_path_get_indices (path);
+ row = indices ? indices[0] : -1;
+
+ if (!path_currently_selected)
+ (*gdk_env)->CallVoidMethod (gdk_env, peer,
+ postListItemEventID,
+ row,
+ (jint) AWT_ITEM_SELECTED);
+ else
+ (*gdk_env)->CallVoidMethod (gdk_env, peer,
+ postListItemEventID,
+ row,
+ (jint) AWT_ITEM_DESELECTED);
+ }
+
+ return TRUE;
+}