summaryrefslogtreecommitdiff
path: root/gnu/java/awt/peer
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/java/awt/peer')
-rw-r--r--gnu/java/awt/peer/gtk/GdkPixbufDecoder.java4
-rw-r--r--gnu/java/awt/peer/gtk/GtkComponentPeer.java21
-rw-r--r--gnu/java/awt/peer/gtk/GtkContainerPeer.java1
-rw-r--r--gnu/java/awt/peer/gtk/GtkFileDialogPeer.java72
-rw-r--r--gnu/java/awt/peer/gtk/GtkImage.java4
-rw-r--r--gnu/java/awt/peer/gtk/GtkImagePainter.java1
-rw-r--r--gnu/java/awt/peer/gtk/GtkPanelPeer.java15
-rw-r--r--gnu/java/awt/peer/gtk/GtkScrollPanePeer.java9
-rw-r--r--gnu/java/awt/peer/gtk/GtkToolkit.java106
9 files changed, 174 insertions, 59 deletions
diff --git a/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java b/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
index 32c698717..5c7fd9600 100644
--- a/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
+++ b/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
@@ -77,19 +77,16 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
public GdkPixbufDecoder (String filename)
{
super (filename);
- initState ();
}
public GdkPixbufDecoder (URL url)
{
super (url);
- initState ();
}
public GdkPixbufDecoder (byte[] imagedata, int imageoffset, int imagelength)
{
super (imagedata, imageoffset, imagelength);
- initState ();
}
// called back by native side
@@ -135,6 +132,7 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder
byte bytes[] = new byte[4096];
int len = 0;
+ initState();
while ((len = is.read (bytes)) != -1)
pumpBytes (bytes, len);
diff --git a/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/gnu/java/awt/peer/gtk/GtkComponentPeer.java
index 48e63f3d1..15e73d9c3 100644
--- a/gnu/java/awt/peer/gtk/GtkComponentPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkComponentPeer.java
@@ -115,8 +115,6 @@ public class GtkComponentPeer extends GtkGenericPeer
this.awtComponent = awtComponent;
insets = new Insets (0, 0, 0, 0);
- /* temporary try/catch block until all peers use this creation method */
- try {
create ();
GtkArgList args = new GtkArgList ();
@@ -147,7 +145,7 @@ public class GtkComponentPeer extends GtkGenericPeer
Rectangle bounds = awtComponent.getBounds ();
setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
- } catch (RuntimeException ex) { ; }
+ setVisible (awtComponent.isVisible ());
}
public int checkImage (Image image, int width, int height,
@@ -449,18 +447,14 @@ public class GtkComponentPeer extends GtkGenericPeer
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 +508,6 @@ public class GtkComponentPeer extends GtkGenericPeer
public void getArgs (Component component, GtkArgList args)
{
- args.add ("visible", component.isVisible ());
args.add ("sensitive", component.isEnabled ());
ComponentPeer p;
diff --git a/gnu/java/awt/peer/gtk/GtkContainerPeer.java b/gnu/java/awt/peer/gtk/GtkContainerPeer.java
index 8ac927cba..040499724 100644
--- a/gnu/java/awt/peer/gtk/GtkContainerPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkContainerPeer.java
@@ -90,7 +90,6 @@ public class GtkContainerPeer extends GtkComponentPeer
public void setBounds (int x, int y, int width, int height)
{
super.setBounds (x, y, width, height);
- awtComponent.validate ();
}
public void setFont(Font f)
diff --git a/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java b/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
index 0e36439d1..712247c4a 100644
--- a/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
@@ -45,6 +45,7 @@ import java.awt.Graphics;
import java.awt.event.WindowEvent;
import java.awt.peer.FileDialogPeer;
import java.io.FilenameFilter;
+import java.io.File;
public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
{
@@ -52,18 +53,34 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
private String currentFile = null;
private String currentDirectory = null;
+ private FilenameFilter filter;
- native void create ();
+ native void create (GtkContainerPeer parent);
+ native void connectJObject ();
+ native void connectSignals ();
+ native void nativeSetFile (String file);
+ native public String nativeGetDirectory();
+ native public void nativeSetDirectory(String directory);
+ native void nativeSetFilenameFilter (FilenameFilter filter);
+
+ public void create() {
+ create((GtkContainerPeer) awtComponent.getParent().getPeer());
+
+ FileDialog fd = (FileDialog) awtComponent;
+
+ setDirectory(fd.getDirectory());
+ setFile(fd.getFile());
+
+ FilenameFilter filter = fd.getFilenameFilter();
+ if (filter != null)
+ setFilenameFilter(filter);
+ }
public GtkFileDialogPeer (FileDialog fd)
{
super (fd);
}
- native void connectJObject ();
- native void connectSignals ();
- native void nativeSetFile (String file);
-
public void setFile (String fileName)
{
/* If nothing changed do nothing. This usually happens because
@@ -80,26 +97,16 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
return;
}
- // Remove any directory path from the filename
- int sepIndex = fileName.lastIndexOf (FS);
- if (sepIndex < 0)
- {
+ // GtkFileChooser requires absolute filenames. If the given filename
+ // is not absolute, let's construct it based on current directory.
currentFile = fileName;
+ if (fileName.indexOf(FS) == 0)
+ {
nativeSetFile (fileName);
}
else
{
- if (fileName.length() > (sepIndex + 1))
- {
- String fn = fileName.substring (sepIndex + 1);
- currentFile = fn;
- nativeSetFile (fn);
- }
- else
- {
- currentFile = "";
- nativeSetFile ("");
- }
+ nativeSetFile (nativeGetDirectory() + FS + fileName);
}
}
@@ -120,20 +127,25 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
}
currentDirectory = directory;
-
- // Gtk expects the directory to end with a file separator
- if (directory.substring (directory.length () - 1).equals (FS))
- nativeSetFile (directory);
- else
- nativeSetFile (directory + FS);
+ nativeSetDirectory (directory);
}
public void setFilenameFilter (FilenameFilter filter)
{
- /* GTK has no filter callbacks yet. It works by setting a pattern
- * (see gtk_file_selection_complete), which we can't convert
- * to the callback paradigm. With GTK-2.4 there will be a
- * gtk_file_filter_add_custom function that we can use. */
+ this.filter = filter;
+ nativeSetFilenameFilter(filter);
+ }
+
+ /* This method interacts with the native callback function of the
+ same name. The native function will extract the filename from the
+ GtkFileFilterInfo object and send it to this method, which will
+ in turn call the filter's accept() method and give back the return
+ value. */
+ boolean filenameFilterCallback (String fullname) {
+ String filename = fullname.substring(fullname.lastIndexOf(FS) + 1);
+ String dirname = fullname.substring(0, fullname.lastIndexOf(FS));
+ File dir = new File(dirname);
+ return filter.accept(dir, filename);
}
public Graphics getGraphics ()
diff --git a/gnu/java/awt/peer/gtk/GtkImage.java b/gnu/java/awt/peer/gtk/GtkImage.java
index 57c3d45c6..27d3d6a06 100644
--- a/gnu/java/awt/peer/gtk/GtkImage.java
+++ b/gnu/java/awt/peer/gtk/GtkImage.java
@@ -202,7 +202,7 @@ public class GtkImage extends Image implements ImageConsumer
public synchronized void
setColorModel (ColorModel model)
{
- if (this.model == null || this.model == model)
+ if (this.model == null || this.model.equals(model))
this.model = model;
else
isCacheable = false;
@@ -235,7 +235,7 @@ public class GtkImage extends Image implements ImageConsumer
if (!isCacheable)
return;
- if (cm != model || pixelCache == null)
+ if (!cm.equals(model) || pixelCache == null)
{
isCacheable = false;
return;
diff --git a/gnu/java/awt/peer/gtk/GtkImagePainter.java b/gnu/java/awt/peer/gtk/GtkImagePainter.java
index 16f36d303..d15cb4a4a 100644
--- a/gnu/java/awt/peer/gtk/GtkImagePainter.java
+++ b/gnu/java/awt/peer/gtk/GtkImagePainter.java
@@ -246,5 +246,6 @@ public class GtkImagePainter implements Runnable, ImageConsumer
public void
imageComplete (int status)
{
+ image.imageComplete(status);
}
}
diff --git a/gnu/java/awt/peer/gtk/GtkPanelPeer.java b/gnu/java/awt/peer/gtk/GtkPanelPeer.java
index 70aab2ca5..0b5d0af43 100644
--- a/gnu/java/awt/peer/gtk/GtkPanelPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkPanelPeer.java
@@ -38,7 +38,9 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
+import java.awt.AWTEvent;
import java.awt.Panel;
+import java.awt.event.MouseEvent;
import java.awt.peer.PanelPeer;
public class GtkPanelPeer extends GtkContainerPeer
@@ -51,4 +53,17 @@ public class GtkPanelPeer extends GtkContainerPeer
{
super (p);
}
+
+ public void handleEvent (AWTEvent event)
+ {
+ int id = event.getID();
+
+ switch (id)
+ {
+ case MouseEvent.MOUSE_PRESSED:
+ awtComponent.requestFocusInWindow ();
+ break;
+ }
+ super.handleEvent (event);
+ }
}
diff --git a/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java b/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
index e4f5e8f31..d0cbde034 100644
--- a/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
+++ b/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java
@@ -39,6 +39,7 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.Adjustable;
+import java.awt.Dimension;
import java.awt.ScrollPane;
import java.awt.peer.ComponentPeer;
import java.awt.peer.ScrollPanePeer;
@@ -87,10 +88,10 @@ public class GtkScrollPanePeer extends GtkContainerPeer
native public int getVScrollbarWidth ();
native public void setScrollPosition (int x, int y);
-// public Dimension getPreferredSize ()
-// {
-// return new Dimension (60, 60);
-// }
+ public Dimension getPreferredSize ()
+ {
+ return awtComponent.getSize();
+ }
public void setUnitIncrement (Adjustable adj, int u)
{
diff --git a/gnu/java/awt/peer/gtk/GtkToolkit.java b/gnu/java/awt/peer/gtk/GtkToolkit.java
index c55001591..9cc29b4b3 100644
--- a/gnu/java/awt/peer/gtk/GtkToolkit.java
+++ b/gnu/java/awt/peer/gtk/GtkToolkit.java
@@ -44,13 +44,17 @@ import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.peer.DragSourceContextPeer;
import java.awt.font.TextAttribute;
import java.awt.im.InputMethodHighlight;
+import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.ImageObserver;
+import java.awt.image.ImageConsumer;
import java.awt.image.ImageProducer;
import java.awt.GraphicsEnvironment;
import java.awt.peer.*;
import java.net.URL;
+import java.util.HashSet;
import java.util.Hashtable;
+import java.util.Iterator;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.Properties;
@@ -127,10 +131,102 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
return status;
}
+ /**
+ * A helper class to return to clients in cases where a BufferedImage is
+ * desired but its construction fails.
+ */
+ private class GtkErrorImage extends Image
+ {
+ public GtkErrorImage()
+ {
+ }
+
+ public int getWidth(ImageObserver observer)
+ {
+ return -1;
+ }
+
+ public int getHeight(ImageObserver observer)
+ {
+ return -1;
+ }
+
+ public ImageProducer getSource()
+ {
+
+ return new ImageProducer()
+ {
+ HashSet consumers = new HashSet();
+ public void addConsumer(ImageConsumer ic)
+ {
+ consumers.add(ic);
+ }
+
+ public boolean isConsumer(ImageConsumer ic)
+ {
+ return consumers.contains(ic);
+ }
+
+ public void removeConsumer(ImageConsumer ic)
+ {
+ consumers.remove(ic);
+ }
+
+ public void startProduction(ImageConsumer ic)
+ {
+ consumers.add(ic);
+ Iterator i = consumers.iterator();
+ while(i.hasNext())
+ {
+ ImageConsumer c = (ImageConsumer) i.next();
+ c.imageComplete(ImageConsumer.IMAGEERROR);
+ }
+ }
+ public void requestTopDownLeftRightResend(ImageConsumer ic)
+ {
+ startProduction(ic);
+ }
+ };
+ }
+
+ public Graphics getGraphics()
+ {
+ return null;
+ }
+
+ public Object getProperty(String name, ImageObserver observer)
+ {
+ return null;
+ }
+ public Image getScaledInstance(int width, int height, int flags)
+ {
+ return new GtkErrorImage();
+ }
+
+ public void flush()
+ {
+ }
+ }
+
+
+ /**
+ * Helper to return either a BufferedImage -- the argument -- or a
+ * GtkErrorImage if the argument is null.
+ */
+
+ private Image bufferedImageOrError(BufferedImage b)
+ {
+ if (b == null)
+ return new GtkErrorImage();
+ else
+ return b;
+ }
+
+
public Image createImage (String filename)
{
if (useGraphics2D())
- return GdkPixbufDecoder.createBufferedImage (filename);
+ return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (filename));
else
{
GdkPixbufDecoder d = new GdkPixbufDecoder (filename);
@@ -143,7 +239,7 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
public Image createImage (URL url)
{
if (useGraphics2D())
- return GdkPixbufDecoder.createBufferedImage (url);
+ return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (url));
else
{
GdkPixbufDecoder d = new GdkPixbufDecoder (url);
@@ -156,7 +252,7 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
public Image createImage (ImageProducer producer)
{
if (useGraphics2D())
- return GdkPixbufDecoder.createBufferedImage (producer);
+ return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (producer));
else
{
GtkImage image = new GtkImage (producer, null);
@@ -169,9 +265,9 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
int imagelength)
{
if (useGraphics2D())
- return GdkPixbufDecoder.createBufferedImage (imagedata,
+ return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (imagedata,
imageoffset,
- imagelength);
+ imagelength));
else
{
GdkPixbufDecoder d = new GdkPixbufDecoder (imagedata,