diff options
Diffstat (limited to 'libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java')
-rw-r--r-- | libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java b/libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java index c2cbc37dce9..f5ba3ad2c5e 100644 --- a/libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java +++ b/libjava/classpath/gnu/java/awt/peer/gtk/GtkDialogPeer.java @@ -44,6 +44,10 @@ import java.awt.Rectangle; import java.awt.event.PaintEvent; import java.awt.peer.DialogPeer; +import javax.swing.JDialog; +import javax.swing.JPopupMenu; +import javax.swing.JToolTip; + public class GtkDialogPeer extends GtkWindowPeer implements DialogPeer { @@ -82,10 +86,28 @@ public class GtkDialogPeer extends GtkWindowPeer void create () { - // Create a decorated dialog window. - create (GDK_WINDOW_TYPE_HINT_DIALOG, true); - Dialog dialog = (Dialog) awtComponent; + int type = GDK_WINDOW_TYPE_HINT_DIALOG; + + if (dialog instanceof JDialog) + { + Class heavyWeightClass; + try + { + heavyWeightClass = Class.forName("javax.swing.Popup$JWindowPopup"); + } + catch (ClassNotFoundException e) + { + throw new AssertionError(e); + } + + if (dialog.getClass() == heavyWeightClass + || ((JDialog) dialog).getContentPane() instanceof JToolTip) + type = GDK_WINDOW_TYPE_HINT_MENU; + } + + // Create a decorated dialog window. + create (type, !((Dialog) awtComponent).isUndecorated ()); gtkWindowSetModal (dialog.isModal ()); setTitle (dialog.getTitle ()); |