summaryrefslogtreecommitdiff
path: root/libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java')
-rw-r--r--libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java42
1 files changed, 24 insertions, 18 deletions
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java
index 69901102faf..0889d85f4bc 100644
--- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java
+++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkToolkit.java
@@ -88,9 +88,9 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
{
Hashtable containers = new Hashtable();
static EventQueue q;
- static Clipboard systemClipboard;
static boolean useGraphics2dSet;
static boolean useGraphics2d;
+ static Thread mainThread;
public static boolean useGraphics2D()
{
@@ -121,11 +121,19 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
portableNativeSync = 0; // false
gtkInit(portableNativeSync);
+
+ mainThread = new Thread ("GTK main thread")
+ {
+ public void run ()
+ {
+ gtkMain ();
+ }
+ };
+ mainThread.start ();
}
public GtkToolkit ()
{
- systemClipboard = new GtkClipboard ();
}
public native void beep();
@@ -244,6 +252,9 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
public Image createImage (String filename)
{
+ if (filename.length() == 0)
+ return new GtkImage ();
+
if (useGraphics2D())
return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (filename));
else
@@ -255,11 +266,7 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
if (useGraphics2D())
return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (url));
else
- {
- GdkPixbufDecoder d = new GdkPixbufDecoder (url);
- GtkImage image = new GtkImage (d);
- return image;
- }
+ return new GtkImage (url);
}
public Image createImage (ImageProducer producer)
@@ -279,11 +286,9 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
imagelength));
else
{
- GdkPixbufDecoder d = new GdkPixbufDecoder (imagedata,
- imageoffset,
- imagelength);
- GtkImage image = new GtkImage (d);
- return image;
+ byte[] datacopy = new byte[imagelength];
+ System.arraycopy (imagedata, imageoffset, datacopy, 0, imagelength);
+ return new GtkImage (datacopy);
}
}
@@ -395,7 +400,11 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
public Clipboard getSystemClipboard()
{
- return systemClipboard;
+ SecurityManager secman = System.getSecurityManager();
+ if (secman != null)
+ secman.checkSystemClipboardAccess();
+
+ return GtkClipboard.getInstance();
}
/**
@@ -628,7 +637,7 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
public GraphicsEnvironment getLocalGraphicsEnvironment()
{
- return new GdkGraphicsEnvironment(this);
+ return new GdkGraphicsEnvironment();
}
public Font createFont(int format, InputStream stream)
@@ -646,8 +655,5 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit
GdkPixbufDecoder.registerSpis(reg);
}
- public native boolean nativeQueueEmpty();
- public native void wakeNativeQueue();
- public native void iterateNativeQueue(EventQueue locked, boolean block);
-
+ public static native void gtkMain();
} // class GtkToolkit