This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]