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] some peer fixes


Hi,

I committed this patch to java-gui-branch.  It simplifies the
GtkComponentPeer and GtkWindowPeer classes.

Tom

2004-06-22  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
	(GtkComponentPeer): Remove temporary try/catch block.
	(setVisible): Call show and hide.
	(show): Make native.
	(hide): Likewise.
	(getArgs): Don't add "visible" argument.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
	(property_notify_predicate): Return Bool instead of int.
	(find_layout): New function.
	(connectJObject): Call find_layout.
	(connectSignals): Likewise.
	(moveLayout): Likewise.
	(gtkLayoutSetVisible): Likewise.

Index: gnu/java/awt/peer/gtk/GtkComponentPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java,v
retrieving revision 1.16.2.11
diff -u -r1.16.2.11 GtkComponentPeer.java
--- gnu/java/awt/peer/gtk/GtkComponentPeer.java	27 May 2004 18:12:14 -0000	1.16.2.11
+++ gnu/java/awt/peer/gtk/GtkComponentPeer.java	23 Jun 2004 03:44:18 -0000
@@ -115,27 +115,25 @@
     this.awtComponent = awtComponent;
     insets = new Insets (0, 0, 0, 0);
 
-    /* temporary try/catch block until all peers use this creation method */
-    try {
-      create ();
+    create ();
       
-      GtkArgList args = new GtkArgList ();
-      getArgs (awtComponent, args);
-      args.setArgs (this);
-
-      connectJObject ();
-      connectSignals ();
-
-      if (awtComponent.getForeground () != null)
-	setForeground (awtComponent.getForeground ());
-      if (awtComponent.getBackground () != null)
-	setBackground (awtComponent.getBackground ());
-      if (awtComponent.getFont() != null)
-	setFont(awtComponent.getFont());
-
-      setCursor (awtComponent.getCursor ());
-      if (this instanceof GtkFileDialogPeer && awtComponent.getHeight() == 0
-          && awtComponent.getWidth() == 0)
+    GtkArgList args = new GtkArgList ();
+    getArgs (awtComponent, args);
+    args.setArgs (this);
+
+    connectJObject ();
+    connectSignals ();
+
+    if (awtComponent.getForeground () != null)
+      setForeground (awtComponent.getForeground ());
+    if (awtComponent.getBackground () != null)
+      setBackground (awtComponent.getBackground ());
+    if (awtComponent.getFont() != null)
+      setFont(awtComponent.getFont());
+
+    setCursor (awtComponent.getCursor ());
+    if (this instanceof GtkFileDialogPeer && awtComponent.getHeight() == 0
+        && awtComponent.getWidth() == 0)
       {
         int[] dims = new int[2];
         gtkWidgetGetDimensions(dims);
@@ -145,9 +143,8 @@
                                                      dims[0], dims[1]);
       }
 
-      Rectangle bounds = awtComponent.getBounds ();
-      setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
-    } catch (RuntimeException ex) { ; }
+    Rectangle bounds = awtComponent.getBounds ();
+    setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
   }
 
   public int checkImage (Image image, int width, int height, 
@@ -157,7 +154,7 @@
     return i.checkImage ();
   }
 
-  public Image createImage (ImageProducer producer) 
+  public Image createImage (ImageProducer producer)
   {
     return new GtkImage (producer, null);
   }
@@ -449,18 +446,14 @@
 
   public void setVisible (boolean b)
   {
-    set ("visible", b);
-  }
-  
-  public void hide () 
-  {
-    setVisible (false);
+    if (b)
+      show ();
+    else
+      hide ();
   }
 
-  public void show () 
-  {
-    setVisible (true);
-  }
+  public native void hide ();
+  public native void show ();
 
   protected void postMouseEvent(int id, long when, int mods, int x, int y, 
 				int clickCount, boolean popupTrigger) 
@@ -514,7 +507,6 @@
 
   public void getArgs (Component component, GtkArgList args)
   {
-    args.add ("visible", component.isVisible ());
     args.add ("sensitive", component.isEnabled ());
 
     ComponentPeer p;
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,v
retrieving revision 1.15.2.14
diff -u -r1.15.2.14 gnu_java_awt_peer_gtk_GtkComponentPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c	15 Jun 2004 03:43:36 -0000	1.15.2.14
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c	23 Jun 2004 03:44:19 -0000
@@ -885,13 +885,30 @@
   (*env)->ReleaseStringUTFChars (env, name, font_name);
 }
 
-void
-set_visible (GtkWidget *widget, jboolean visible)
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkComponentPeer_show
+  (JNIEnv *env, jobject obj)
 {
-  if (visible)
-    gtk_widget_show (widget);
-  else
-    gtk_widget_hide (widget);
+  void *ptr;
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  gdk_threads_enter();
+  gtk_widget_show (GTK_WIDGET (ptr));
+  gdk_threads_leave();
+}
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkComponentPeer_hide
+  (JNIEnv *env, jobject obj)
+{
+  void *ptr;
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  gdk_threads_enter();
+  gtk_widget_hide (GTK_WIDGET (ptr));
+  gdk_threads_leave();
 }
 
 GtkLayout *
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c,v
retrieving revision 1.24.2.5
diff -u -r1.24.2.5 gnu_java_awt_peer_gtk_GtkWindowPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c	26 May 2004 15:53:57 -0000	1.24.2.5
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c	23 Jun 2004 03:44:19 -0000
@@ -54,9 +54,11 @@
 
 static void request_frame_extents (GtkWidget *window);
 
-static int property_notify_predicate (Display *xdisplay,
-                                      XEvent  *event,
-                                      XPointer window_id);
+static Bool property_notify_predicate (Display *display,
+                                       XEvent  *xevent,
+                                       XPointer arg);
+
+static GtkLayout *find_layout (GtkWindow *window);
 
 static void window_delete_cb (GtkWidget *widget, GdkEvent *event,
 			      jobject peer);
@@ -74,10 +76,6 @@
 					    GdkEventProperty *event,
 					    jobject peer);
 
-/*
- * Make a new window.
- */
-
 JNIEXPORT void JNICALL 
 Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create 
   (JNIEnv *env, jobject obj, jint type, jboolean decorated,
@@ -180,29 +178,17 @@
   (JNIEnv *env, jobject obj)
 {
   void *ptr;
-  GtkWidget* vbox, *layout;
-  GList* children;
+  GtkLayout *layout;
 
   ptr = NSA_GET_PTR (env, obj);
 
   gdk_threads_enter ();
 
-  children = gtk_container_get_children(GTK_CONTAINER(ptr));
-  vbox = children->data;
-  g_assert (GTK_IS_VBOX(vbox));
-
-  children = gtk_container_get_children(GTK_CONTAINER(vbox));
-  do
-  {
-    layout = children->data;
-    children = children->next;
-  }
-  while (!GTK_IS_LAYOUT (layout) && children != NULL);
-  g_assert (GTK_IS_LAYOUT(layout));
+  layout = find_layout (GTK_WINDOW (ptr));
 
-  gtk_widget_realize (layout);
+  gtk_widget_realize (GTK_WIDGET (layout));
 
-  connect_awt_hook (env, obj, 1, GTK_LAYOUT (layout)->bin_window);
+  connect_awt_hook (env, obj, 1, layout->bin_window);
 
   gtk_widget_realize (ptr);
 
@@ -215,32 +201,23 @@
 Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals
   (JNIEnv *env, jobject obj)
 {
-  void *ptr = NSA_GET_PTR (env, obj);
-  jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
-  GtkWidget* vbox, *layout;
-  GList* children;
-  g_assert (gref);
+  void *ptr;
+  jobject *gref;
+  GtkLayout *layout;
+
+  ptr = NSA_GET_PTR (env, obj);
+
+  gref = NSA_GET_GLOBAL_REF (env, obj);
 
   gdk_threads_enter ();
 
   gtk_widget_realize (ptr);
 
   /* Receive events from the GtkLayout too */
-  children = gtk_container_get_children(GTK_CONTAINER(ptr));
-  vbox = children->data;  
-  g_assert (GTK_IS_VBOX (vbox));
+  layout = find_layout (GTK_WINDOW (ptr));
 
-  children = gtk_container_get_children(GTK_CONTAINER(vbox));
-  do
-  {
-    layout = children->data;
-    children = children->next;
-  }
-  while (!GTK_IS_LAYOUT (layout) && children != NULL);
-  g_assert (GTK_IS_LAYOUT (layout));
-
-  g_signal_connect (GTK_OBJECT (layout), "event", 
-		    G_CALLBACK (pre_event_handler), *gref);
+  g_signal_connect (G_OBJECT (layout), "event",
+                    G_CALLBACK (pre_event_handler), *gref);
 
   /* Connect signals for window event support. */
   g_signal_connect (G_OBJECT (ptr), "delete-event",
@@ -470,7 +447,6 @@
 {
   void* ptr;
   GList* children;
-  GtkBox* vbox;
   GtkLayout* layout;
   GtkWidget* widget;
 
@@ -478,18 +454,8 @@
 
   gdk_threads_enter ();
 
-  children = gtk_container_get_children (GTK_CONTAINER (ptr));
-  vbox = children->data;
-  g_assert (GTK_IS_VBOX (vbox));
+  layout = find_layout (GTK_WINDOW (ptr));
 
-  children = gtk_container_get_children (GTK_CONTAINER (vbox));
-  do
-  {
-    layout = children->data;
-    children = children->next;
-  }
-  while (!GTK_IS_LAYOUT (layout) && children != NULL);
-  g_assert (GTK_IS_LAYOUT (layout));  
   children = gtk_container_get_children (GTK_CONTAINER (layout));
   
   while (children != NULL)
@@ -505,36 +471,25 @@
   
 JNIEXPORT void JNICALL
 Java_gnu_java_awt_peer_gtk_GtkFramePeer_gtkLayoutSetVisible
-  (JNIEnv *env, jobject obj, jboolean vis)
+  (JNIEnv *env, jobject obj, jboolean visible)
 {
-  void* ptr;
-  GList* children;
-  GtkBox* vbox;
-  GtkLayout* layout;
+  void *ptr;
+  GtkLayout *layout;
 
   ptr = NSA_GET_PTR (env, obj);
 
   gdk_threads_enter ();
 
-  children = gtk_container_get_children (GTK_CONTAINER (ptr));
-  vbox = children->data;
-  g_assert (GTK_IS_VBOX (vbox));
+  layout = find_layout (GTK_WINDOW (ptr));
 
-  children = gtk_container_get_children (GTK_CONTAINER (vbox));
-  do
-  {
-    layout = children->data;
-    children = children->next;
-  }
-  while (!GTK_IS_LAYOUT (layout) && children != NULL);
-  g_assert (GTK_IS_LAYOUT (layout));  
-  
-  if (vis)
+  if (visible)
     gtk_widget_show (GTK_WIDGET (layout));
   else
     gtk_widget_hide (GTK_WIDGET (layout));
+
   gdk_threads_leave ();
 }
+
 static void
 window_get_frame_extents (GtkWidget *window,
                           int *top, int *left, int *bottom, int *right)
@@ -626,7 +581,7 @@
     }
 }
 
-static int
+static Bool
 property_notify_predicate (Display *xdisplay __attribute__((unused)),
                            XEvent  *event,
                            XPointer window_id)
@@ -636,9 +591,9 @@
   if (event->xany.type == PropertyNotify
       && event->xany.window == *window
       && event->xproperty.atom == extents_atom)
-        return True;
-
-  return False;
+    return True;
+  else
+    return False;
 }
 
 static void
@@ -830,3 +785,26 @@
 
   return FALSE;
 }
+
+static GtkLayout *
+find_layout (GtkWindow *window)
+{
+  GList* children;
+  GtkBox* vbox;
+  GtkLayout* layout;
+
+  children = gtk_container_get_children (GTK_CONTAINER (window));
+  vbox = children->data;
+  g_assert (GTK_IS_VBOX (vbox));
+
+  children = gtk_container_get_children (GTK_CONTAINER (vbox));
+  do
+  {
+    layout = children->data;
+    children = children->next;
+  }
+  while (!GTK_IS_LAYOUT (layout) && children != NULL);
+  g_assert (GTK_IS_LAYOUT (layout));
+
+  return layout;
+}

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