This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gui][PATCH] Rework peer code
- From: Thomas Fitzsimmons <fitzsim at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: Thu, 02 Sep 2004 17:57:31 -0400
- Subject: [gui][PATCH] Rework peer code
Hi,
I just committed this large patch to java-gui-branch. It reworks some
sections of the peers:
- peers that were backed by a GtkLayout are now backed by GtkFixed.
This reduces the number of required X windows and allows us to remove
some special cases (e.g. find_gtk_layout).
- the GtkFramePeer.setMenuBar method is clearer now and it makes use of
the AWT's validation methods, which means that the awkward gtkFixedMove
method can be removed.
- native repaints caused by X expose events are now handled differently
than native repaints initiated by AWT paint events. This allows us to
remove all the awkward expose event filtering logic.
- the GdkGraphics.drawImage methods are now synchronous. This
eliminates the race condition that was causing images and graphics to be
drawn in the wrong order (e.g. images disappearing on Swing buttons).
- the native GtkFramePeer method implementations are now in a file of
their own where before they were interspersed throughout
gnu_java_awt_peer_gtk_GtkWindowPeer.c.
This patch causes some minor regressions, but I think it lays a good
foundation for fixing the remaining painting and image handling bugs.
Tom
2004-09-02 Thomas Fitzsimmons <fitzsim@redhat.com>
* Makefile.am (gtk_c_source_files): Add
gnu_java_awt_peer_gtk_GtkFramePeer.c.
* Makefile.in: Regenerate.
* gnu/java/awt/peer/gtk/GdkGraphics.java (getClipBounds): Remove
comment.
* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
(create): Pack GtkButton in GtkEventBox.
(connectJObject): Remove.
(focus_in_cb): New function.
(focus_out_cb): Likewise.
(connectSignals): Connect focus-in-event and focus-out-event
signals.
(gtkSetFont): Rename to ...
(gtkWidgetModifyFont): New method.
(gtkWidgetRequestFocus): New method.
* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
(gtkSetFont): Rename to ...
(gtkWidgetModifyFont): New method.
* gnu/java/awt/peer/gtk/GtkComponentPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(isInRepaint): New field.
(gtkSetFont): Remove method.
(addExposeFilter): Likewise.
(removeExposeFilter): Likewise.
(gtkWidgetQueueDrawArea): Rename to ...
(gtkWidgetRepaintArea): New method.
(beginNativeRepaint): New method.
(endNativeRepaint): New method.
(setComponentBounds): Move implementation here from
GtkComponentPeer.
(paint): Remove implementation.
(repaint): Wrap call to gtkWidgetRepaintArea with calls to
beginNativeRepaint and endNativeRepaint.
(setBounds): Use menu bar height in bounds calculation.
(postExposeEvent): Only post paint event if we're not doing a
native repaint.
(gtkWidgetSetParent): Replace gtk_layout_put with gtk_fixed_put.
(setNativeBounds): Replace gtk_layout_move with gtk_fixed_move.
(find_gtk_layout): Remove function.
(filter_expose_event_handler): Likewise.
* gnu/java/awt/peer/gtk/GtkDialogPeer.java (postExposeEvent):
Likewise.
* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
(setComponentBounds): Call GtkComponentPeer's
setComponentBounds.
* gnu/java/awt/peer/gtk/GtkFramePeer.java (getMenuBarHeight):
New method.
(moveLayout): Rename to ...
(gtkFixedMove): New method.
(gtkLayoutSetVisible): Rename to ...
(gtkFixedSetVisible): New method.
(setMenuBar): Rearrange, to make the three separate cases
clearer.
(postExposeEvent): Only post paint event if we're not doing a
native repaint.
* gnu/java/awt/peer/gtk/GtkGenericPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
(gtkWidgetModifyFont): New method.
* gnu/java/awt/peer/gtk/GtkImagePainter.java
(GtkImagePainter(GtkImage,GdkGraphics,int,int,int,int,Color)):
Call run directly, rather than spawning a new thread.
(GtkImagePainter(GtkImage,GdkGraphics,int,int,int,int,int,int,int,int,Color)):
Likewise.
* gnu/java/awt/peer/gtk/GtkLabelPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c (gtkSetFont):
Rename to ...
(gtkWidgetModifyFont): New method.
(create): Rename ebox to eventbox.
* gnu/java/awt/peer/gtk/GtkListPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (gtkSetFont):
Rename to ...
(gtkWidgetModifyFont): New method.
* gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
(GtkMenuComponentPeer): Set the default font.
* gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
(gtkSetFont): Rename to ...
(gtkWidgetModifyFont): New method.
* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c: Likewise.
* java/awt/Component.java (locale): Initialize to default
locale.
* java/awt/Container.java (invalidateTree): Make
package-private.
(paint): Paint self first.
(setMenuBar): Call invalidateTree.
* java/awt/Panel.java (dispatchEventImpl): Remove method.
* java/awt/Window.java (show): Call no-parameter variant of
requestFocusInWindow.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (initState):
Remove special case for window widget.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
(grab_current_drawable): Likewise.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
(create): Replace GtkLayout with GtkFixed.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
(pre_event_handler): Remove special cases for GDK_EXPOSE events.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c: New file.
Move all GtkFramePeer native method implementations here from
gnu_java_awt_peer_gtk_GtkWindowPeer.c.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (create):
Replace GtkLayout with GtkFixed.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
(find_layout): Remove function.
(create): Replace GtkLayout with GtkFixed.
(connectSignals): Remove find_layout call.
(toBack): Replace XFlush with gdk_flush.
(toFront): Replace XFlush with gdk_flush.
Move GtkFramePeer native method implementations to
gnu_java_awt_peer_gtk_GtkFramePeer.c.
* jni/gtk-peer/gtkpeer.h: Remove declaration of find_gtk_layout.
Index: Makefile.am
===================================================================
RCS file: /cvs/gcc/gcc/libjava/Makefile.am,v
retrieving revision 1.361.2.42
diff -u -r1.361.2.42 Makefile.am
--- Makefile.am 25 Aug 2004 21:49:42 -0000 1.361.2.42
+++ Makefile.am 2 Sep 2004 21:17:48 -0000
@@ -203,6 +203,7 @@
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c \
+jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFramePeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c \
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c \
Index: gnu/java/awt/peer/gtk/GdkGraphics.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GdkGraphics.java,v
retrieving revision 1.4.16.6
diff -u -r1.4.16.6 GdkGraphics.java
--- gnu/java/awt/peer/gtk/GdkGraphics.java 9 Aug 2004 22:35:23 -0000 1.4.16.6
+++ gnu/java/awt/peer/gtk/GdkGraphics.java 2 Sep 2004 21:17:48 -0000
@@ -116,7 +116,6 @@
// public Graphics create (int x, int y, int width, int height)
// {
// GdkGraphics g = new GdkGraphics (this);
-// System.out.println ("translating by: " + x +" " + y);
// g.translate (x, y);
// g.clipRect (0, 0, width, height);
@@ -350,7 +349,6 @@
public Rectangle getClipBounds ()
{
-// System.out.println ("returning CLIP: " + clip);
return new Rectangle (clip.x, clip.y, clip.width, clip.height);
}
Index: gnu/java/awt/peer/gtk/GtkButtonPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkButtonPeer.java,v
retrieving revision 1.8.2.5
diff -u -r1.8.2.5 GtkButtonPeer.java
--- gnu/java/awt/peer/gtk/GtkButtonPeer.java 30 Jul 2004 19:48:31 -0000 1.8.2.5
+++ gnu/java/awt/peer/gtk/GtkButtonPeer.java 2 Sep 2004 21:17:48 -0000
@@ -52,13 +52,13 @@
{
native void create (String label);
- public native void connectJObject ();
public native void connectSignals ();
- native void gtkSetFont (String name, int style, int size);
+ native void gtkWidgetSetFont (String name, int style, int size);
native void gtkSetLabel (String label);
native void gtkWidgetSetForeground (int red, int green, int blue);
native void gtkActivate ();
+ native void gtkWidgetRequestFocus ();
public GtkButtonPeer (Button b)
{
@@ -86,8 +86,8 @@
if (!me.isConsumed ()
&& (me.getModifiersEx () & MouseEvent.BUTTON1_DOWN_MASK) != 0
&& awtComponent.getBounds().contains(p))
- postActionEvent (((Button)awtComponent).getActionCommand (),
- me.getModifiersEx ());
+ postActionEvent (((Button) awtComponent).getActionCommand (),
+ me.getModifiersEx ());
}
if (e.getID () == KeyEvent.KEY_PRESSED)
Index: gnu/java/awt/peer/gtk/GtkCheckboxPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,v
retrieving revision 1.4.8.4
diff -u -r1.4.8.4 GtkCheckboxPeer.java
--- gnu/java/awt/peer/gtk/GtkCheckboxPeer.java 30 Jul 2004 09:47:57 -0000 1.4.8.4
+++ gnu/java/awt/peer/gtk/GtkCheckboxPeer.java 2 Sep 2004 21:17:48 -0000
@@ -55,7 +55,7 @@
public native void create (GtkCheckboxGroupPeer group);
public native void nativeSetCheckboxGroup (GtkCheckboxGroupPeer group);
public native void connectSignals ();
- native void gtkSetFont (String name, int style, int size);
+ native void gtkWidgetModifyFont (String name, int style, int size);
native void gtkButtonSetLabel (String label);
native void gtkToggleButtonSetActive (boolean is_active);
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.18
diff -u -r1.16.2.18 GtkComponentPeer.java
--- gnu/java/awt/peer/gtk/GtkComponentPeer.java 30 Jul 2004 19:48:31 -0000 1.16.2.18
+++ gnu/java/awt/peer/gtk/GtkComponentPeer.java 2 Sep 2004 21:17:48 -0000
@@ -77,6 +77,8 @@
Insets insets;
+ boolean isInRepaint;
+
/* this isEnabled differs from Component.isEnabled, in that it
knows if a parent is disabled. In that case Component.isEnabled
may return true, but our isEnabled will always return false */
@@ -97,10 +99,7 @@
native void gtkWidgetRequestFocus ();
native void gtkWidgetDispatchKeyEvent (int id, long when, int mods,
int keyCode, int keyLocation);
- native void gtkSetFont (String name, int style, int size);
- native void gtkWidgetQueueDrawArea(int x, int y, int width, int height);
- native void addExposeFilter();
- native void removeExposeFilter();
+ native void gtkWidgetRepaintArea(int x, int y, int width, int height);
void create ()
{
@@ -134,8 +133,6 @@
setComponentBounds ();
- Rectangle bounds = awtComponent.getBounds ();
- setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
setVisibleAndEnabled ();
}
@@ -154,15 +151,27 @@
gtkWidgetSetParent (p);
}
+ void beginNativeRepaint ()
+ {
+ isInRepaint = true;
+ }
+
+ void endNativeRepaint ()
+ {
+ isInRepaint = false;
+ }
+
/*
* Set the bounds of this peer's AWT Component based on dimensions
* returned by the native windowing system. Most Components impose
- * their dimensions on the peers so the default implementation does
- * nothing. However some peers, like GtkFileDialogPeer, need to
- * pass their size back to the AWT Component.
+ * their dimensions on the peers which is what the default
+ * implementation does. However some peers, like GtkFileDialogPeer,
+ * need to pass their size back to the AWT Component.
*/
void setComponentBounds ()
{
+ Rectangle bounds = awtComponent.getBounds ();
+ setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
}
void setVisibleAndEnabled ()
@@ -265,8 +274,8 @@
// Some peers like GtkFileDialogPeer are repainted by Gtk itself
if (g == null)
break;
-
- g.setClip (((PaintEvent)event).getUpdateRect());
+
+ g.setClip (((PaintEvent) event).getUpdateRect());
if (id == PaintEvent.PAINT)
awtComponent.paint (g);
@@ -310,21 +319,6 @@
public void paint (Graphics g)
{
- Component parent = awtComponent.getParent();
- GtkComponentPeer parentPeer = null;
- if ((parent instanceof Container) && !parent.isLightweight())
- parentPeer = (GtkComponentPeer) parent.getPeer();
-
- addExposeFilter();
- if (parentPeer != null)
- parentPeer.addExposeFilter();
-
- Rectangle clip = g.getClipBounds();
- gtkWidgetQueueDrawArea(clip.x, clip.y, clip.width, clip.height);
-
- removeExposeFilter();
- if (parentPeer != null)
- parentPeer.removeExposeFilter();
}
public Dimension preferredSize ()
@@ -371,8 +365,11 @@
public void repaint (long tm, int x, int y, int width, int height)
{
+ beginNativeRepaint ();
+ gtkWidgetRepaintArea (x, y, width, height);
+ endNativeRepaint ();
q.postEvent (new PaintEvent (awtComponent, PaintEvent.UPDATE,
- new Rectangle (x, y, width, height)));
+ new Rectangle (x, y, width, height)));
}
public void requestFocus ()
@@ -426,8 +423,14 @@
if (parent instanceof Window && !lightweightChild)
{
Insets insets = ((Window) parent).getInsets ();
- // Convert from Java coordinates to GTK coordinates.
- setNativeBounds (x - insets.left, y - insets.top, width, height);
+ GtkWindowPeer peer = (GtkWindowPeer) parent.getPeer ();
+ int menuBarHeight = 0;
+ if (peer instanceof GtkFramePeer)
+ menuBarHeight = ((GtkFramePeer) peer).getMenuBarHeight ();
+
+ // Convert from Java coordinates to GTK coordinates.
+ setNativeBounds (x - insets.left, y - insets.top + menuBarHeight,
+ width, height);
}
else
setNativeBounds (x, y, width, height);
@@ -448,7 +451,7 @@
// FIXME: This should really affect the widget tree below me.
// Currently this is only handled if the call is made directly on
// a text widget, which implements setFont() itself.
- gtkSetFont(f.getName(), f.getStyle(), f.getSize());
+ gtkWidgetModifyFont(f.getName(), f.getStyle(), f.getSize());
}
public void setForeground (Color c)
@@ -488,8 +491,9 @@
protected void postExposeEvent (int x, int y, int width, int height)
{
- q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
- new Rectangle (x, y, width, height)));
+ if (!isInRepaint)
+ q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+ new Rectangle (x, y, width, height)));
}
protected void postKeyEvent (int id, long when, int mods,
Index: gnu/java/awt/peer/gtk/GtkDialogPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkDialogPeer.java,v
retrieving revision 1.9.8.2
diff -u -r1.9.8.2 GtkDialogPeer.java
--- gnu/java/awt/peer/gtk/GtkDialogPeer.java 30 Jul 2004 09:47:57 -0000 1.9.8.2
+++ gnu/java/awt/peer/gtk/GtkDialogPeer.java 2 Sep 2004 21:17:48 -0000
@@ -75,11 +75,12 @@
protected void postExposeEvent (int x, int y, int width, int height)
{
- q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
- new Rectangle (x + insets.left,
- y + insets.top,
- width, height)));
- }
+ if (!isInRepaint)
+ q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+ new Rectangle (x + insets.left,
+ y + insets.top,
+ width, height)));
+ }
void create ()
{
Index: gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,v
retrieving revision 1.6.4.3
diff -u -r1.6.4.3 GtkFileDialogPeer.java
--- gnu/java/awt/peer/gtk/GtkFileDialogPeer.java 30 Jul 2004 09:47:57 -0000 1.6.4.3
+++ gnu/java/awt/peer/gtk/GtkFileDialogPeer.java 2 Sep 2004 21:17:48 -0000
@@ -94,6 +94,7 @@
awtComponent.getY (),
dims[0], dims[1]);
}
+ super.setComponentBounds ();
}
public void setFile (String fileName)
Index: gnu/java/awt/peer/gtk/GtkFramePeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkFramePeer.java,v
retrieving revision 1.17.2.5
diff -u -r1.17.2.5 GtkFramePeer.java
--- gnu/java/awt/peer/gtk/GtkFramePeer.java 5 Aug 2004 13:59:12 -0000 1.17.2.5
+++ gnu/java/awt/peer/gtk/GtkFramePeer.java 2 Sep 2004 21:17:48 -0000
@@ -39,6 +39,7 @@
package gnu.java.awt.peer.gtk;
import java.awt.Component;
+import java.awt.Container;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
@@ -58,46 +59,56 @@
private MenuBarPeer menuBar;
native int getMenuBarHeight (MenuBarPeer bar);
+ int getMenuBarHeight ()
+ {
+ return menuBar == null ? 0 : getMenuBarHeight (menuBar);
+ }
+
native void setMenuBarPeer (MenuBarPeer bar);
native void removeMenuBarPeer ();
- native void moveLayout (int offset);
- native void gtkLayoutSetVisible (boolean vis);
+ native void gtkFixedMove (int offset);
+ native void gtkFixedSetVisible (boolean visible);
public void setMenuBar (MenuBar bar)
{
- if (bar == null)
- {
- if (menuBar != null)
+ if (bar == null && menuBar != null)
{
- gtkLayoutSetVisible(false);
- removeMenuBarPeer();
+ // We're removing the menubar.
+ gtkFixedSetVisible (false);
menuBar = null;
- moveLayout(menuBarHeight);
+ removeMenuBarPeer ();
insets.top -= menuBarHeight;
- menuBarHeight = 0;
- awtComponent.doLayout();
- gtkLayoutSetVisible(true);
+ menuBarHeight = 0;
+ awtComponent.validate ();
+ gtkFixedSetVisible (true);
}
- }
- else
- {
- gtkLayoutSetVisible(false);
- int oldHeight = 0;
- if (menuBar != null)
+ else if (bar != null && menuBar == null)
{
+ // We're adding a menubar where there was no menubar before.
+ gtkFixedSetVisible (false);
+ menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer();
+ setMenuBarPeer (menuBar);
+ menuBarHeight = getMenuBarHeight ();
+ insets.top += menuBarHeight;
+ awtComponent.validate ();
+ gtkFixedSetVisible (true);
+ }
+ else if (bar != null && menuBar != null)
+ {
+ // We're swapping the menubar.
+ gtkFixedSetVisible (false);
removeMenuBarPeer();
- oldHeight = menuBarHeight;
- insets.top -= menuBarHeight;
+ int oldHeight = menuBarHeight;
+ menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer ();
+ setMenuBarPeer (menuBar);
+ menuBarHeight = getMenuBarHeight ();
+ if (oldHeight != menuBarHeight)
+ {
+ insets.top += (menuBarHeight - oldHeight);
+ awtComponent.validate ();
+ }
+ gtkFixedSetVisible (true);
}
- menuBar = (MenuBarPeer) ((MenuBar) bar).getPeer();
- setMenuBarPeer(menuBar);
- menuBarHeight = getMenuBarHeight (menuBar);
- if (oldHeight != menuBarHeight)
- moveLayout(oldHeight - menuBarHeight);
- insets.top += menuBarHeight;
- awtComponent.doLayout();
- gtkLayoutSetVisible(true);
- }
}
public void setBounds (int x, int y, int width, int height)
@@ -225,10 +236,11 @@
protected void postExposeEvent (int x, int y, int width, int height)
{
- q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
- new Rectangle (x + insets.left,
- y + insets.top,
- width, height)));
+ if (!isInRepaint)
+ q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+ new Rectangle (x + insets.left,
+ y + insets.top,
+ width, height)));
}
public int getState ()
Index: gnu/java/awt/peer/gtk/GtkGenericPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkGenericPeer.java,v
retrieving revision 1.2
diff -u -r1.2 GtkGenericPeer.java
--- gnu/java/awt/peer/gtk/GtkGenericPeer.java 13 Jul 2003 15:09:20 -0000 1.2
+++ gnu/java/awt/peer/gtk/GtkGenericPeer.java 2 Sep 2004 21:17:48 -0000
@@ -82,4 +82,6 @@
// Let's assume this will never wrap.
return next_native_state++;
}
+
+ native void gtkWidgetModifyFont (String name, int style, int size);
}
Index: gnu/java/awt/peer/gtk/GtkImagePainter.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkImagePainter.java,v
retrieving revision 1.2.18.4
diff -u -r1.2.18.4 GtkImagePainter.java
--- gnu/java/awt/peer/gtk/GtkImagePainter.java 12 Jul 2004 19:17:49 -0000 1.2.18.4
+++ gnu/java/awt/peer/gtk/GtkImagePainter.java 2 Sep 2004 21:17:48 -0000
@@ -75,7 +75,7 @@
s_width = s_height = 0;
clip = null;
- new Thread (this).start ();
+ run ();
}
public
@@ -105,7 +105,7 @@
s_height = Math.abs (sy2 - sy1);
clip = new Rectangle (sx1, sy1, s_width, s_height);
- new Thread (this).start ();
+ run ();
}
public void
Index: gnu/java/awt/peer/gtk/GtkLabelPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkLabelPeer.java,v
retrieving revision 1.3.10.2
diff -u -r1.3.10.2 GtkLabelPeer.java
--- gnu/java/awt/peer/gtk/GtkLabelPeer.java 18 May 2004 22:06:01 -0000 1.3.10.2
+++ gnu/java/awt/peer/gtk/GtkLabelPeer.java 2 Sep 2004 21:17:48 -0000
@@ -47,7 +47,7 @@
implements LabelPeer
{
native void create (String text, float alignment);
- native void gtkSetFont (String name, int style, int size);
+ native void gtkWidgetModifyFont (String name, int style, int size);
native void nativeSetAlignment (float alignment);
native public void setText (String text);
Index: gnu/java/awt/peer/gtk/GtkListPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkListPeer.java,v
retrieving revision 1.7.2.4
diff -u -r1.7.2.4 GtkListPeer.java
--- gnu/java/awt/peer/gtk/GtkListPeer.java 30 Jul 2004 19:48:31 -0000 1.7.2.4
+++ gnu/java/awt/peer/gtk/GtkListPeer.java 2 Sep 2004 21:17:48 -0000
@@ -60,7 +60,7 @@
native void create (int rows);
native void connectJObject ();
native void connectSignals ();
- native void gtkSetFont (String name, int style, int size);
+ native void gtkWidgetModifyFont (String name, int style, int size);
native void gtkWidgetRequestFocus ();
native void getSize (int rows, int visibleRows, int dims[]);
Index: gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java,v
retrieving revision 1.3
diff -u -r1.3 GtkMenuComponentPeer.java
--- gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java 27 Jan 2004 19:29:56 -0000 1.3
+++ gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java 2 Sep 2004 21:17:48 -0000
@@ -38,6 +38,8 @@
package gnu.java.awt.peer.gtk;
+import java.awt.Font;
+import java.awt.MenuComponent;
import java.awt.peer.MenuComponentPeer;
public class GtkMenuComponentPeer extends GtkGenericPeer
@@ -46,7 +48,16 @@
public GtkMenuComponentPeer (Object awtWidget)
{
super (awtWidget);
+ MenuComponent mc = ((MenuComponent) awtWidget);
+ Font f = mc.getFont ();
+ if (f == null)
+ {
+ mc.setFont (new Font ("Dialog", Font.PLAIN, 12));
+ gtkWidgetModifyFont("Dialog", Font.PLAIN, 12);
+ }
+ else
+ gtkWidgetModifyFont(f.getName(), f.getStyle(), f.getSize());
}
-
+
public native void dispose();
}
Index: gnu/java/awt/peer/gtk/GtkTextAreaPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,v
retrieving revision 1.7.8.5
diff -u -r1.7.8.5 GtkTextAreaPeer.java
--- gnu/java/awt/peer/gtk/GtkTextAreaPeer.java 24 Jun 2004 05:30:02 -0000 1.7.8.5
+++ gnu/java/awt/peer/gtk/GtkTextAreaPeer.java 2 Sep 2004 21:17:48 -0000
@@ -52,7 +52,7 @@
native void create (int width, int height, int scrollbarVisibility);
- native void gtkSetFont (String name, int style, int size);
+ native void gtkWidgetModifyFont (String name, int style, int size);
native void gtkWidgetRequestFocus ();
void create ()
Index: gnu/java/awt/peer/gtk/GtkTextFieldPeer.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,v
retrieving revision 1.9.4.5
diff -u -r1.9.4.5 GtkTextFieldPeer.java
--- gnu/java/awt/peer/gtk/GtkTextFieldPeer.java 30 Jul 2004 19:48:31 -0000 1.9.4.5
+++ gnu/java/awt/peer/gtk/GtkTextFieldPeer.java 2 Sep 2004 21:17:48 -0000
@@ -84,7 +84,7 @@
native int gtkEntryGetBorderWidth ();
- native void gtkSetFont (String name, int style, int size);
+ native void gtkWidgetModifyFont (String name, int style, int size);
public GtkTextFieldPeer (TextField tf)
{
Index: java/awt/Component.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/Component.java,v
retrieving revision 1.37.2.20
diff -u -r1.37.2.20 Component.java
--- java/awt/Component.java 24 Aug 2004 22:00:25 -0000 1.37.2.20
+++ java/awt/Component.java 2 Sep 2004 21:17:48 -0000
@@ -293,7 +293,7 @@
* @see #getLocale()
* @see #setLocale(Locale)
*/
- Locale locale;
+ Locale locale = Locale.getDefault ();
/**
* True if the object should ignore repaint events (usually because it is
Index: java/awt/Container.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/Container.java,v
retrieving revision 1.34.2.18
diff -u -r1.34.2.18 Container.java
--- java/awt/Container.java 24 Aug 2004 22:00:25 -0000 1.34.2.18
+++ java/awt/Container.java 2 Sep 2004 21:17:48 -0000
@@ -527,7 +527,7 @@
/**
* Recursively invalidates the container tree.
*/
- private void invalidateTree()
+ void invalidateTree()
{
for (int i = 0; i < ncomponents; i++)
{
@@ -704,6 +704,8 @@
{
if (!isShowing())
return;
+ // Paint self first.
+ super.paint(g);
// Visit heavyweights as well, in case they were
// erased when we cleared the background for this container.
visitChildren(g, GfxPaintVisitor.INSTANCE, false);
Index: java/awt/Frame.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/Frame.java,v
retrieving revision 1.20.2.1
diff -u -r1.20.2.1 Frame.java
--- java/awt/Frame.java 10 Jul 2004 05:15:41 -0000 1.20.2.1
+++ java/awt/Frame.java 2 Sep 2004 21:17:48 -0000
@@ -317,6 +317,7 @@
this.menuBar.removeNotify();
if (menuBar != null)
menuBar.addNotify();
+ invalidateTree ();
((FramePeer) peer).setMenuBar(menuBar);
}
this.menuBar = menuBar;
Index: java/awt/Panel.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/Panel.java,v
retrieving revision 1.8.20.2
diff -u -r1.8.20.2 Panel.java
--- java/awt/Panel.java 10 Jul 2004 05:15:41 -0000 1.8.20.2
+++ java/awt/Panel.java 2 Sep 2004 21:17:48 -0000
@@ -38,7 +38,6 @@
package java.awt;
-import java.awt.event.PaintEvent;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
@@ -98,36 +97,6 @@
}
/**
- * Consume initial application-requested paint event if it has not
- * already been consumed, and if the initial system-requested paint
- * event has not already been handled. Otherwise, call
- * super.dispatchEventImpl. These extra steps are required to
- * prevent a Panel from being painted twice when it is initially
- * shown.
- *
- * @param e the event to dispatch
- */
- void dispatchEventImpl (AWTEvent e)
- {
- if (e instanceof PaintEvent)
- {
- if (e.id == PaintEvent.UPDATE)
- {
- if (!initialUpdateConsumed
- && !initialSystemUpdateDone)
- {
- e.consume ();
- initialUpdateConsumed = true;
- }
- }
- else if (e.id == PaintEvent.PAINT)
- initialSystemUpdateDone = true;
- }
- else
- super.dispatchEventImpl (e);
- }
-
- /**
* Notifies this object to create its native peer.
*
* @see #isDisplayable()
Index: java/awt/Window.java
===================================================================
RCS file: /cvs/gcc/gcc/libjava/java/awt/Window.java,v
retrieving revision 1.32.12.10
diff -u -r1.32.12.10 Window.java
--- java/awt/Window.java 12 Jul 2004 03:26:59 -0000 1.32.12.10
+++ java/awt/Window.java 2 Sep 2004 21:17:48 -0000
@@ -291,7 +291,7 @@
initialFocusOwner = policy.getInitialComponent (this);
if (initialFocusOwner != null)
- initialFocusOwner.requestFocusInWindow (false);
+ initialFocusOwner.requestFocusInWindow ();
shown = true;
}
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c,v
retrieving revision 1.5.2.6
diff -u -r1.5.2.6 gnu_java_awt_peer_gtk_GdkGraphics.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c 9 Aug 2004 22:35:23 -0000 1.5.2.6
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c 2 Sep 2004 21:17:49 -0000
@@ -108,19 +108,7 @@
gdk_threads_enter ();
widget = GTK_WIDGET (ptr);
-
- if (GTK_IS_WINDOW (widget))
- {
- g->drawable = find_gtk_layout (widget)->bin_window;
- }
- else if (GTK_IS_LAYOUT (widget))
- {
- g->drawable = (GdkDrawable *) GTK_LAYOUT (widget)->bin_window;
- }
- else
- {
- g->drawable = (GdkDrawable *) widget->window;
- }
+ g->drawable = (GdkDrawable *) widget->window;
gdk_window_ref (g->drawable);
g->cm = gtk_widget_get_colormap (widget);
@@ -432,8 +420,8 @@
gdk_threads_enter ();
if (GDK_IS_WINDOW (g->drawable))
{
- gdk_window_clear_area ((GdkWindow *)g->drawable,
- x + g->x_offset, y + g->y_offset, width, height);
+ gdk_window_clear_area ((GdkWindow *) g->drawable,
+ x + g->x_offset, y + g->y_offset, width, height);
}
else
{
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c,v
retrieving revision 1.5.8.6
diff -u -r1.5.8.6 gnu_java_awt_peer_gtk_GdkGraphics2D.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c 14 Aug 2004 21:46:53 -0000 1.5.8.6
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c 2 Sep 2004 21:17:49 -0000
@@ -159,18 +159,7 @@
g_assert (draw != NULL);
g_assert (win != NULL);
- if (GTK_IS_WINDOW (widget))
- {
- *win = find_gtk_layout (widget)->bin_window;
- }
- else if (GTK_IS_LAYOUT (widget))
- {
- *win = GTK_LAYOUT (widget)->bin_window;
- }
- else
- {
- *win = widget->window;
- }
+ *win = widget->window;
*draw = *win;
gdk_window_get_internal_paint_info (*win, draw, 0, 0);
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,v
retrieving revision 1.8.2.4
diff -u -r1.8.2.4 gnu_java_awt_peer_gtk_GtkButtonPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c 30 Jul 2004 09:47:57 -0000 1.8.2.4
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c 2 Sep 2004 21:17:49 -0000
@@ -37,14 +37,21 @@
#include "gtkpeer.h"
-#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
#include "gnu_java_awt_peer_gtk_GtkButtonPeer.h"
+static gboolean focus_in_cb (GtkWidget *widget,
+ GdkEventFocus *event,
+ jobject peer);
+static gboolean focus_out_cb (GtkWidget *widget,
+ GdkEventFocus *event,
+ jobject peer);
+
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create
(JNIEnv *env, jobject obj, jstring label)
{
const char *c_label;
+ GtkWidget *eventbox;
GtkWidget *button;
NSA_SET_GLOBAL_REF (env, obj);
@@ -53,41 +60,46 @@
gdk_threads_enter ();
+ eventbox = gtk_event_box_new ();
button = gtk_button_new_with_label (c_label);
+ gtk_container_add (GTK_CONTAINER (eventbox), button);
gtk_widget_show (button);
gdk_threads_leave ();
(*env)->ReleaseStringUTFChars (env, label, c_label);
- NSA_SET_PTR (env, obj, button);
+ NSA_SET_PTR (env, obj, eventbox);
}
JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectJObject
+Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals
(JNIEnv *env, jobject obj)
{
void *ptr;
+ jobject *gref;
+ GtkWidget *button;
ptr = NSA_GET_PTR (env, obj);
+ gref = NSA_GET_GLOBAL_REF (env, obj);
gdk_threads_enter ();
gtk_widget_realize (GTK_WIDGET (ptr));
+ button = gtk_bin_get_child (GTK_BIN (ptr));
- connect_awt_hook (env, obj, 1, GTK_BUTTON(ptr)->event_window);
+ g_signal_connect (G_OBJECT (ptr), "event",
+ G_CALLBACK (pre_event_handler), *gref);
- gdk_threads_leave ();
-}
+ g_signal_connect (G_OBJECT (button), "event",
+ G_CALLBACK (pre_event_handler), *gref);
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals
- (JNIEnv *env, jobject obj)
-{
- /* FIXME: Do we need to connect any signals here? Otherwise just do not
- override parent method. */
+ g_signal_connect (G_OBJECT (button), "focus-in-event",
+ G_CALLBACK (focus_in_cb), *gref);
+
+ g_signal_connect (G_OBJECT (button), "focus-out-event",
+ G_CALLBACK (focus_out_cb), *gref);
- /* Connect the superclass signals. */
- Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
+ gdk_threads_leave ();
}
JNIEXPORT void JNICALL
@@ -113,7 +125,7 @@
}
JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetFont
+Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetModifyFont
(JNIEnv *env, jobject obj, jstring name, jint style, jint size)
{
const char *font_name;
@@ -186,3 +198,42 @@
gdk_threads_leave ();
}
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetRequestFocus
+ (JNIEnv *env, jobject obj)
+{
+ void *ptr;
+ GtkWidget *button;
+
+ ptr = NSA_GET_PTR (env, obj);
+
+ gdk_threads_enter ();
+ button = gtk_bin_get_child (GTK_BIN (ptr));
+ gtk_widget_grab_focus (button);
+ gdk_threads_leave ();
+}
+
+static gboolean
+focus_in_cb (GtkWidget *widget __attribute((unused)),
+ GdkEventFocus *event __attribute((unused)),
+ jobject peer)
+{
+ (*gdk_env)->CallVoidMethod (gdk_env, peer,
+ postFocusEventID,
+ AWT_FOCUS_GAINED,
+ JNI_FALSE);
+ return FALSE;
+}
+
+static gboolean
+focus_out_cb (GtkWidget *widget __attribute((unused)),
+ GdkEventFocus *event __attribute((unused)),
+ jobject peer)
+{
+ (*gdk_env)->CallVoidMethod (gdk_env, peer,
+ postFocusEventID,
+ AWT_FOCUS_LOST,
+ JNI_FALSE);
+ return FALSE;
+}
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c,v
retrieving revision 1.4.8.5
diff -u -r1.4.8.5 gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c 30 Jul 2004 09:47:58 -0000 1.4.8.5
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c 2 Sep 2004 21:17:49 -0000
@@ -144,7 +144,7 @@
}
JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkSetFont
+Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkWidgetModifyFont
(JNIEnv *env, jobject obj, jstring name, jint style, jint size)
{
const char *font_name;
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.22
diff -u -r1.15.2.22 gnu_java_awt_peer_gtk_GtkComponentPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c 31 Jul 2004 21:31:32 -0000 1.15.2.22
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c 2 Sep 2004 21:17:49 -0000
@@ -49,6 +49,7 @@
static gboolean focus_out_cb (GtkWidget *widget,
GdkEventFocus *event,
jobject peer);
+
/*
* This method returns a GDK keyval that corresponds to one of the
* keysyms in the X keymap table. The return value is only used to
@@ -492,12 +493,12 @@
if (GTK_IS_WINDOW (parent_widget))
{
GList *children = gtk_container_children
- (GTK_CONTAINER (GTK_BIN (parent_widget)->child));
+ (GTK_CONTAINER (parent_widget));
if (GTK_IS_MENU_BAR (children->data))
- gtk_layout_put (GTK_LAYOUT (children->next->data), widget, 0, 0);
+ gtk_fixed_put (GTK_FIXED (children->next->data), widget, 0, 0);
else
- gtk_layout_put (GTK_LAYOUT (children->data), widget, 0, 0);
+ gtk_fixed_put (GTK_FIXED (children->data), widget, 0, 0);
}
else
if (GTK_IS_SCROLLED_WINDOW (parent_widget))
@@ -509,7 +510,7 @@
}
else
- gtk_layout_put (GTK_LAYOUT (parent_widget), widget, 0, 0);
+ gtk_fixed_put (GTK_FIXED (parent_widget), widget, 0, 0);
gdk_threads_leave ();
}
@@ -792,7 +793,7 @@
else
{
gtk_widget_set_size_request (widget, width, height);
- gtk_layout_move (GTK_LAYOUT (widget->parent), widget, x, y);
+ gtk_fixed_move (GTK_FIXED (widget->parent), widget, x, y);
}
gdk_threads_leave ();
@@ -908,38 +909,6 @@
}
JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkSetFont
- (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
-{
- const char *font_name;
- void *ptr;
- PangoFontDescription *font_desc;
-
- ptr = NSA_GET_PTR (env, obj);
-
- font_name = (*env)->GetStringUTFChars (env, name, NULL);
-
- gdk_threads_enter();
-
- font_desc = pango_font_description_from_string (font_name);
- pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
-
- if (style & AWT_STYLE_BOLD)
- pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
-
- if (style & AWT_STYLE_ITALIC)
- pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
-
- gtk_widget_modify_font (GTK_WIDGET(ptr), font_desc);
-
- pango_font_description_free (font_desc);
-
- gdk_threads_leave();
-
- (*env)->ReleaseStringUTFChars (env, name, font_name);
-}
-
-JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_show
(JNIEnv *env, jobject obj)
{
@@ -965,23 +934,6 @@
gdk_threads_leave();
}
-GtkLayout *
-find_gtk_layout (GtkWidget *parent)
-{
- if (GTK_IS_WINDOW (parent))
- {
- GList *children = gtk_container_children
- (GTK_CONTAINER (GTK_BIN (parent)->child));
-
- if (GTK_IS_MENU_BAR (children->data))
- return GTK_LAYOUT (children->next->data);
- else /* GTK_IS_LAYOUT (children->data) */
- return GTK_LAYOUT (children->data);
- }
-
- return NULL;
-}
-
JNIEXPORT jboolean JNICALL
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_isEnabled
(JNIEnv *env, jobject obj)
@@ -1013,141 +965,7 @@
return retval;
}
-static gboolean
-filter_expose_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
-{
- /*
- * Prevent the default event handler from getting this signal if applicable
- * FIXME: I came up with these filters by looking for patterns in the unwanted
- * expose events that are fed back to us from gtk/X. Perhaps there is
- * a way to prevent them from occuring in the first place.
- */
- if (event->type == GDK_EXPOSE && (!GTK_IS_LAYOUT(widget)
- || event->any.window != widget->window))
- {
- g_signal_stop_emission_by_name(GTK_OBJECT(widget), "event");
- return FALSE;
- }
- else
- {
- /* There may be non-expose events that are triggered while we're
- painting a heavyweight peer. */
- return pre_event_handler(widget, event, peer);
- }
-}
-
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter
- (JNIEnv *env, jobject obj)
-{
- GtkObject *filterobj;
- GtkWidget *vbox, *layout;
- GList *children;
- void *ptr = NSA_GET_PTR (env, obj);
- jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
- gulong hid;
-
- g_assert (gref);
-
- gdk_threads_enter ();
-
- /* GtkFramePeer is built as a GtkLayout inside a GtkVBox inside a GtkWindow.
- Events go to the GtkLayout layer, so we filter them there. */
- if (GTK_IS_WINDOW(ptr))
- {
- 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));
-
- filterobj = GTK_OBJECT(layout);
- }
- else if (GTK_IS_SCROLLED_WINDOW(ptr))
- {
- /* The event will go to the parent GtkLayout. */
- filterobj = GTK_OBJECT(GTK_WIDGET(ptr)->parent);
- }
- else
- {
- filterobj = GTK_OBJECT(ptr);
- }
- hid = g_signal_handler_find(filterobj,
- G_SIGNAL_MATCH_FUNC,
- 0, 0, NULL, *pre_event_handler, NULL);
- if (hid > 0)
- {
- g_signal_handler_block(filterobj, hid);
- }
- g_signal_connect( filterobj, "event",
- G_CALLBACK(filter_expose_event_handler), *gref);
-
- gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter
- (JNIEnv *env, jobject obj)
-{
- GtkObject *filterobj;
- GtkWidget *vbox, *layout;
- GList *children;
- void *ptr = NSA_GET_PTR (env, obj);
- jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
- gulong hid;
-
- g_assert (gref);
-
- gdk_threads_enter ();
-
- /* GtkFramePeer is built as a GtkLayout inside a GtkVBox inside a GtkWindow.
- Events go to the GtkLayout layer, so we filter them there. */
- if (GTK_IS_WINDOW(ptr))
- {
- 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));
-
- filterobj = GTK_OBJECT(layout);
- }
- else if (GTK_IS_SCROLLED_WINDOW(ptr))
- {
- /* The event will go to the parent GtkLayout. */
- filterobj = GTK_OBJECT(GTK_WIDGET(ptr)->parent);
- }
- else
- {
- filterobj = GTK_OBJECT(ptr);
- }
-
- g_signal_handlers_disconnect_by_func (filterobj,
- *filter_expose_event_handler, *gref);
- hid = g_signal_handler_find(filterobj,
- G_SIGNAL_MATCH_FUNC,
- 0, 0, NULL, *pre_event_handler, NULL);
- if (hid > 0)
- {
- g_signal_handler_unblock(filterobj, hid);
- }
-
- gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetQueueDrawArea
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetRepaintArea
(JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height)
{
GdkRectangle rect;
@@ -1155,15 +973,15 @@
ptr = NSA_GET_PTR (env, obj);
- rect.x = x + GTK_WIDGET(ptr)->allocation.x;
- rect.y = y + GTK_WIDGET(ptr)->allocation.y;
+ gdk_threads_enter ();
+
+ rect.x = x;
+ rect.y = y;
rect.width = width;
rect.height = height;
- gdk_threads_enter ();
-
gdk_window_invalidate_rect (GTK_WIDGET (ptr)->window, &rect, 0);
- gdk_window_process_all_updates();
+ gdk_window_process_updates (GTK_WIDGET (ptr)->window, TRUE);
gdk_threads_leave ();
}
@@ -1187,23 +1005,19 @@
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals
(JNIEnv *env, jobject obj)
{
- void *ptr = NSA_GET_PTR (env, obj);
- jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
- g_assert (gref);
+ void *ptr;
+ jobject *gref;
+
+ ptr = NSA_GET_PTR (env, obj);
+ gref = NSA_GET_GLOBAL_REF (env, obj);
gdk_threads_enter ();
gtk_widget_realize (GTK_WIDGET (ptr));
-
- /* FIXME: We could check here if this is a scrolled window with a
- single child that does not have an associated jobject. This
- means that it is one of our wrapped widgets like List or TextArea
- and thus we could connect the signal to the child without having
- to specialize this method. */
/* Connect EVENT signal, which happens _before_ any specific signal. */
- g_signal_connect (GTK_OBJECT (ptr), "event",
+ g_signal_connect (GTK_OBJECT (ptr), "event",
G_CALLBACK (pre_event_handler), *gref);
g_signal_connect (G_OBJECT (ptr), "focus-in-event",
@@ -1235,19 +1049,7 @@
{
GtkWidget *bg_color_widget;
- if (GTK_IS_WINDOW (widget))
- {
- GtkWidget *vbox;
- GList* children;
-
- children = gtk_container_get_children(GTK_CONTAINER(widget));
- vbox = children->data;
-
- children = gtk_container_get_children(GTK_CONTAINER(vbox));
- bg_color_widget = children->data;
- }
- else
- bg_color_widget = widget;
+ bg_color_widget = widget;
return bg_color_widget;
}
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c,v
retrieving revision 1.5
diff -u -r1.5 gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c 5 Jan 2004 21:41:21 -0000 1.5
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEmbeddedWindowPeer.c 2 Sep 2004 21:17:49 -0000
@@ -45,22 +45,18 @@
(JNIEnv *env, jobject obj, jlong socket_id)
{
GtkWidget *window;
- GtkWidget *vbox, *layout;
+ GtkWidget *fixed;
- /* Create global reference and save it for future use */
NSA_SET_GLOBAL_REF (env, obj);
gdk_threads_enter ();
window = gtk_plug_new ((GdkNativeWindow) socket_id);
- vbox = gtk_vbox_new (0, 0);
- layout = gtk_layout_new (NULL, NULL);
- gtk_box_pack_end (GTK_BOX (vbox), layout, 1, 1, 0);
- gtk_container_add (GTK_CONTAINER (window), vbox);
+ fixed = gtk_fixed_new ();
+ gtk_container_add (GTK_CONTAINER (window), fixed);
- gtk_widget_show (layout);
- gtk_widget_show (vbox);
+ gtk_widget_show (fixed);
gdk_threads_leave ();
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c,v
retrieving revision 1.19.2.10
diff -u -r1.19.2.10 gnu_java_awt_peer_gtk_GtkEvents.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c 30 Jul 2004 19:48:35 -0000 1.19.2.10
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c 2 Sep 2004 21:17:49 -0000
@@ -1010,23 +1010,12 @@
}
break;
case GDK_EXPOSE:
- {
- /* This filters out unwanted feedback expose events from gtk/X
- when we explictly invalidate and update heavyweight components,
- thus avoiding an infinite loop.
- FIXME: I'm not quite sure why we're getting these expose events.
- Maybe there is a way to avoid them? */
- if((event->any.window == widget->window && event->any.send_event)
- || GTK_IS_LAYOUT(widget))
- {
- (*gdk_env)->CallVoidMethod (gdk_env, peer,
- postExposeEventID,
- (jint)event->expose.area.x,
- (jint)event->expose.area.y,
- (jint)event->expose.area.width,
- (jint)event->expose.area.height);
- }
- }
+ (*gdk_env)->CallVoidMethod (gdk_env, peer,
+ postExposeEventID,
+ (jint)event->expose.area.x,
+ (jint)event->expose.area.y,
+ (jint)event->expose.area.width,
+ (jint)event->expose.area.height);
break;
case GDK_FOCUS_CHANGE:
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c,v
retrieving revision 1.1.16.1
diff -u -r1.1.16.1 gnu_java_awt_peer_gtk_GtkGenericPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c 24 Jun 2004 05:31:41 -0000 1.1.16.1
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkGenericPeer.c 2 Sep 2004 21:17:49 -0000
@@ -57,3 +57,34 @@
gdk_threads_leave ();
}
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkGenericPeer_gtkWidgetModifyFont
+ (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
+{
+ const char *font_name;
+ void *ptr;
+ PangoFontDescription *font_desc;
+
+ ptr = NSA_GET_PTR (env, obj);
+
+ font_name = (*env)->GetStringUTFChars (env, name, NULL);
+
+ gdk_threads_enter();
+
+ font_desc = pango_font_description_from_string (font_name);
+ pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
+
+ if (style & AWT_STYLE_BOLD)
+ pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
+
+ if (style & AWT_STYLE_ITALIC)
+ pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
+
+ gtk_widget_modify_font (GTK_WIDGET(ptr), font_desc);
+
+ pango_font_description_free (font_desc);
+
+ gdk_threads_leave();
+
+ (*env)->ReleaseStringUTFChars (env, name, font_name);
+}
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c,v
retrieving revision 1.6.8.2
diff -u -r1.6.8.2 gnu_java_awt_peer_gtk_GtkLabelPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c 27 May 2004 18:40:20 -0000 1.6.8.2
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c 2 Sep 2004 21:17:49 -0000
@@ -44,33 +44,30 @@
(JNIEnv *env, jobject obj, jstring text, jfloat xalign)
{
GtkWidget *label;
- GtkWidget *ebox;
- GtkContainer *ebox_container;
+ GtkWidget *eventbox;
const char *str;
- /* Create global reference and save it for future use */
NSA_SET_GLOBAL_REF (env, obj);
str = (*env)->GetStringUTFChars (env, text, 0);
gdk_threads_enter ();
- ebox = gtk_event_box_new ();
- ebox_container = GTK_CONTAINER (ebox);
+ eventbox = gtk_event_box_new ();
label = gtk_label_new (str);
gtk_misc_set_alignment (GTK_MISC (label), xalign, 0.5);
- gtk_container_add (ebox_container, label);
+ gtk_container_add (GTK_CONTAINER (eventbox), label);
gtk_widget_show (label);
gdk_threads_leave ();
(*env)->ReleaseStringUTFChars (env, text, str);
- NSA_SET_PTR (env, obj, ebox);
+ NSA_SET_PTR (env, obj, eventbox);
}
JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkSetFont
+Java_gnu_java_awt_peer_gtk_GtkLabelPeer_gtkWidgetModifyFont
(JNIEnv *env, jobject obj, jstring name, jint style, jint size)
{
const char *font_name;
@@ -121,7 +118,7 @@
gdk_threads_enter ();
- label = gtk_bin_get_child (GTK_BIN(ptr));
+ label = gtk_bin_get_child (GTK_BIN (ptr));
gtk_label_set_label (GTK_LABEL (label), str);
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.5
diff -u -r1.7.8.5 gnu_java_awt_peer_gtk_GtkListPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c 27 May 2004 23:37:27 -0000 1.7.8.5
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c 2 Sep 2004 21:17:49 -0000
@@ -163,7 +163,7 @@
}
JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkSetFont
+Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkWidgetModifyFont
(JNIEnv *env, jobject obj, jstring name, jint style, jint size)
{
const char *font_name;
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c,v
retrieving revision 1.4.8.2
diff -u -r1.4.8.2 gnu_java_awt_peer_gtk_GtkPanelPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c 12 Jul 2004 05:38:32 -0000 1.4.8.2
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c 2 Sep 2004 21:17:49 -0000
@@ -44,14 +44,15 @@
Java_gnu_java_awt_peer_gtk_GtkPanelPeer_create
(JNIEnv *env, jobject obj)
{
- gpointer widget;
+ GtkWidget *widget;
- /* Create global reference and save it for future use */
NSA_SET_GLOBAL_REF (env, obj);
gdk_threads_enter ();
- widget = gtk_layout_new (NULL, NULL);
+ widget = gtk_fixed_new ();
+
+ gtk_fixed_set_has_window (GTK_FIXED (widget), TRUE);
GTK_WIDGET_SET_FLAGS (widget, GTK_CAN_FOCUS);
@@ -70,7 +71,7 @@
gdk_threads_enter ();
gtk_widget_realize (GTK_WIDGET (ptr));
- connect_awt_hook (env, obj, 1, GTK_LAYOUT (ptr)->bin_window);
+ connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
gdk_threads_leave ();
}
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c,v
retrieving revision 1.11.8.5
diff -u -r1.11.8.5 gnu_java_awt_peer_gtk_GtkTextAreaPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c 24 Jun 2004 05:31:41 -0000 1.11.8.5
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c 2 Sep 2004 21:17:49 -0000
@@ -141,7 +141,7 @@
}
JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkSetFont
+Java_gnu_java_awt_peer_gtk_GtkTextAreaPeer_gtkWidgetModifyFont
(JNIEnv *env, jobject obj, jstring name, jint style, jint size)
{
const char *font_name;
Index: jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c,v
retrieving revision 1.10.4.2
diff -u -r1.10.4.2 gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c 26 Jul 2004 05:52:03 -0000 1.10.4.2
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c 2 Sep 2004 21:17:49 -0000
@@ -175,7 +175,7 @@
}
JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkSetFont
+Java_gnu_java_awt_peer_gtk_GtkTextFieldPeer_gtkWidgetModifyFont
(JNIEnv *env, jobject obj, jstring name, jint style, jint size)
{
const char *font_name;
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.14
diff -u -r1.24.2.14 gnu_java_awt_peer_gtk_GtkWindowPeer.c
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c 8 Aug 2004 22:08:49 -0000 1.24.2.14
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c 2 Sep 2004 21:17:49 -0000
@@ -37,9 +37,7 @@
#include "gtkpeer.h"
-#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
#include "gnu_java_awt_peer_gtk_GtkWindowPeer.h"
-#include "gnu_java_awt_peer_gtk_GtkFramePeer.h"
#include <gdk/gdkprivate.h>
#include <gdk/gdkx.h>
#include <X11/Xatom.h>
@@ -58,8 +56,6 @@
XEvent *xevent,
XPointer arg);
-static GtkLayout *find_layout (GtkWindow *window);
-
static void window_delete_cb (GtkWidget *widget, GdkEvent *event,
jobject peer);
static void window_destroy_cb (GtkWidget *widget, GdkEvent *event,
@@ -93,8 +89,7 @@
GtkWidget *window_widget;
GtkWindow *window;
void *window_parent;
- GtkWidget *vbox;
- GtkWidget *layout;
+ GtkWidget *fixed;
int top = 0;
int left = 0;
int bottom = 0;
@@ -124,13 +119,10 @@
gtk_window_group_add_window (global_gtk_window_group, window);
- vbox = gtk_vbox_new (0, 0);
- layout = gtk_layout_new (NULL, NULL);
- gtk_box_pack_end (GTK_BOX (vbox), layout, 1, 1, 0);
- gtk_container_add (GTK_CONTAINER (window_widget), vbox);
+ fixed = gtk_fixed_new ();
+ gtk_container_add (GTK_CONTAINER (window_widget), fixed);
- gtk_widget_show (layout);
- gtk_widget_show (vbox);
+ gtk_widget_show (fixed);
gtk_widget_realize (window_widget);
if (decorated)
@@ -236,19 +228,12 @@
(JNIEnv *env, jobject obj)
{
void *ptr;
- GtkLayout *layout;
ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
- layout = find_layout (GTK_WINDOW (ptr));
-
- gtk_widget_realize (GTK_WIDGET (layout));
-
- connect_awt_hook (env, obj, 1, layout->bin_window);
-
- gtk_widget_realize (ptr);
+ gtk_widget_realize (GTK_WIDGET (ptr));
connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
@@ -261,23 +246,17 @@
{
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 */
- layout = find_layout (GTK_WINDOW (ptr));
+ gtk_widget_realize (GTK_WIDGET (ptr));
- g_signal_connect (G_OBJECT (layout), "event",
+ g_signal_connect (G_OBJECT (ptr), "event",
G_CALLBACK (pre_event_handler), *gref);
- /* Connect signals for window event support. */
g_signal_connect (G_OBJECT (ptr), "delete-event",
G_CALLBACK (window_delete_cb), *gref);
@@ -306,15 +285,8 @@
G_CALLBACK (window_property_changed_cb), *gref);
gdk_threads_leave ();
-
- /* Connect the superclass signals. */
- Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
}
-/*
- * Lower the z-level of a window.
- */
-
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toBack (JNIEnv *env,
jobject obj)
@@ -323,16 +295,13 @@
ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
+
gdk_window_lower (GTK_WIDGET (ptr)->window);
+ gdk_flush ();
- XFlush (GDK_DISPLAY ());
gdk_threads_leave ();
}
-/*
- * Raise the z-level of a window.
- */
-
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_toFront (JNIEnv *env,
jobject obj)
@@ -341,9 +310,10 @@
ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
+
gdk_window_raise (GTK_WIDGET (ptr)->window);
+ gdk_flush ();
- XFlush (GDK_DISPLAY ());
gdk_threads_leave ();
}
@@ -369,7 +339,9 @@
height = (height < 1) ? 1 : height;
gdk_threads_enter ();
+
gtk_widget_set_size_request (GTK_WIDGET(ptr), width, height);
+
gdk_threads_leave ();
}
@@ -408,199 +380,6 @@
gdk_threads_leave ();
}
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkFramePeer_removeMenuBarPeer
- (JNIEnv *env, jobject obj)
-{
- void *wptr;
- GtkWidget *box;
- GtkWidget *mptr;
- GList* children;
-
- wptr = NSA_GET_PTR (env, obj);
-
- gdk_threads_enter ();
-
- box = GTK_BIN (wptr)->child;
-
- children = gtk_container_get_children (GTK_CONTAINER (box));
-
- while (children != NULL && !GTK_IS_MENU_SHELL (children->data))
- {
- children = children->next;
- }
-
- /* If there isn't a MenuBar in this Frame's list of children
- then we can just return. */
- if (!GTK_IS_MENU_SHELL (children->data))
- return;
- else
- mptr = children->data;
-
- /* This will actually destroy the MenuBar. By removing it from
- its parent, the reference count for the MenuBar widget will
- decrement to 0. The widget will be automatically destroyed
- by Gtk. */
- gtk_container_remove (GTK_CONTAINER (box), GTK_WIDGET (mptr));
-
- gdk_threads_leave();
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarPeer
- (JNIEnv *env, jobject obj, jobject menubar)
-{
- void *wptr;
- GtkWidget *mptr;
- GtkWidget *box;
-
- wptr = NSA_GET_PTR (env, obj);
- mptr = NSA_GET_PTR (env, menubar);
-
- gdk_threads_enter ();
-
- box = GTK_BIN (wptr)->child;
- gtk_box_pack_start (GTK_BOX (box), mptr, 0, 0, 0);
-
- gtk_widget_show (mptr);
-
-
- gdk_threads_leave ();
-}
-
-JNIEXPORT jint JNICALL
-Java_gnu_java_awt_peer_gtk_GtkFramePeer_getMenuBarHeight
- (JNIEnv *env, jobject obj __attribute__((unused)), jobject menubar)
-{
- GtkWidget *ptr;
- jint height;
- GtkRequisition gtkreq;
-
- ptr = NSA_GET_PTR (env, menubar);
-
- gdk_threads_enter ();
- gtk_widget_size_request (ptr, >kreq);
-
- height = gtkreq.height;
- gdk_threads_leave ();
- return height;
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkFramePeer_moveLayout
- (JNIEnv *env, jobject obj, jint offset)
-{
- void* ptr;
- GList* children;
- GtkLayout* layout;
- GtkWidget* widget;
-
- ptr = NSA_GET_PTR (env, obj);
-
- gdk_threads_enter ();
-
- layout = find_layout (GTK_WINDOW (ptr));
-
- children = gtk_container_get_children (GTK_CONTAINER (layout));
-
- while (children != NULL)
- {
- widget = children->data;
- gtk_layout_move (layout, widget, widget->allocation.x,
- widget->allocation.y+offset);
- children = children->next;
- }
-
- gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkFramePeer_gtkLayoutSetVisible
- (JNIEnv *env, jobject obj, jboolean visible)
-{
- void *ptr;
- GtkLayout *layout;
-
- ptr = NSA_GET_PTR (env, obj);
-
- gdk_threads_enter ();
-
- layout = find_layout (GTK_WINDOW (ptr));
-
- if (visible)
- gtk_widget_show (GTK_WIDGET (layout));
- else
- gtk_widget_hide (GTK_WIDGET (layout));
-
- gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImageFromDecoder
- (JNIEnv *env, jobject obj, jobject decoder)
-{
- void *ptr;
- GdkPixbufLoader *loader = NULL;
- GdkPixbuf *pixbuf = NULL;
-
- ptr = NSA_GET_PTR (env, obj);
-
- loader = NSA_GET_PB_PTR (env, decoder);
- g_assert (loader != NULL);
-
- gdk_threads_enter ();
-
- pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
- g_assert (pixbuf != NULL);
-
- gtk_window_set_icon (GTK_WINDOW (ptr), pixbuf);
-
- gdk_threads_leave ();
-}
-
-void free_pixbuf_data (guchar *pixels, gpointer data __attribute__((unused)))
-{
- free(pixels);
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImageFromData
- (JNIEnv *env, jobject obj, jintArray pixelArray, jint width, jint height)
-{
- void *ptr;
- GdkPixbuf *pixbuf;
- jint *pixels;
- int pixels_length, i;
- guchar *data;
-
- ptr = NSA_GET_PTR (env, obj);
-
- pixels = (*env)->GetIntArrayElements (env, pixelArray, 0);
- pixels_length = (*env)->GetArrayLength (env, pixelArray);
-
- data = malloc (sizeof (guchar) * pixels_length);
- for (i = 0; i < pixels_length; i++)
- data[i] = (guchar) pixels[i];
-
- gdk_threads_enter ();
-
- pixbuf = gdk_pixbuf_new_from_data (data,
- GDK_COLORSPACE_RGB,
- TRUE,
- 8,
- width,
- height,
- width*4,
- free_pixbuf_data,
- NULL);
-
- gtk_window_set_icon (GTK_WINDOW (ptr), pixbuf);
-
- gdk_threads_leave ();
-
- (*env)->ReleaseIntArrayElements(env, pixelArray, pixels, 0);
-}
-
static void
window_get_frame_extents (GtkWidget *window,
int *top, int *left, int *bottom, int *right)
@@ -785,6 +564,8 @@
postWindowEventID,
(jint) AWT_WINDOW_GAINED_FOCUS,
(jobject) NULL, (jint) 0);
+ /* FIXME: somewhere after this is handled, the child window is
+ getting an expose event. */
return FALSE;
}
@@ -797,6 +578,8 @@
postWindowEventID,
(jint) AWT_WINDOW_LOST_FOCUS,
(jobject) NULL, (jint) 0);
+ /* FIXME: somewhere after this is handled, the child window is
+ getting an expose event. */
return FALSE;
}
@@ -924,26 +707,3 @@
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: jni/gtk-peer/gtkpeer.h
===================================================================
RCS file: /cvs/gcc/gcc/libjava/jni/gtk-peer/gtkpeer.h,v
retrieving revision 1.12.8.6
diff -u -r1.12.8.6 gtkpeer.h
--- jni/gtk-peer/gtkpeer.h 8 Aug 2004 22:08:49 -0000 1.12.8.6
+++ jni/gtk-peer/gtkpeer.h 2 Sep 2004 21:17:49 -0000
@@ -463,7 +463,6 @@
void set_visible (GtkWidget *widget, jboolean visible);
void set_parent (GtkWidget *widget, GtkContainer *parent);
-GtkLayout *find_gtk_layout (GtkWidget *parent);
jint keyevent_state_to_awt_mods (GdkEvent *event);