src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.  Oracle designates this

@@ -22,11 +22,12 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
 package sun.awt.X11;
 
-import java.awt.FileDialog;
+import java.awt.*;
+import java.awt.event.ComponentEvent;
 import java.awt.peer.FileDialogPeer;
 import java.io.File;
 import java.io.FilenameFilter;
 import sun.awt.AWTAccessor;
 

@@ -50,12 +51,13 @@
     private static native void initIDs();
     static {
         initIDs();
     }
 
-    private native void run(String title, int mode, String dir, String file,
+    private native void run(long ownerWindow, String title, int mode, String dir, String file,
                             FilenameFilter filter, boolean isMultipleMode, int x, int y);
+
     private native void quit();
 
     @Override
     public native void toFront();
 

@@ -93,10 +95,42 @@
     }
 
     /**
      * Called exclusively by the native C code.
      */
+    private void notifyConfigure(long window, int x, int y, int width, int height) {
+        XToolkit.awtLock();
+        try {
+            Insets insets = XWM.getInsetsFromExtents(window);
+            if (insets == null) {
+                insets = new Insets(0,0,0,0);
+            }
+
+            int resX = x - insets.left;
+            int resY = y - insets.top;
+            int resWidth = width + insets.left + insets.right;
+            int resHeight = height + insets.top + insets.bottom;
+
+            Rectangle bounds = target.getBounds();
+
+            if (bounds.x != resX || bounds.y != resY) {
+                AWTAccessor.getComponentAccessor().setLocation(target, resX, resY);
+                postEvent(new ComponentEvent(target, ComponentEvent.COMPONENT_MOVED));
+            }
+
+            if (bounds.width != resWidth || bounds.height != resHeight) {
+                AWTAccessor.getComponentAccessor().setSize(target, resWidth, resHeight);
+                postEvent(new ComponentEvent(target, ComponentEvent.COMPONENT_RESIZED));
+            }
+        } finally {
+            XToolkit.awtUnlock();
+        }
+    }
+
+    /**
+     * Called exclusively by the native C code.
+     */
     private boolean filenameFilterCallback(String fullname) {
         if (fd.getFilenameFilter() == null) {
             // no filter, accept all.
             return true;
         }

@@ -150,10 +184,17 @@
         // We do not implement this method because we
         // have delegated to FileDialog#setFilenameFilter
     }
 
     private void showNativeDialog() {
+        long ownerWindow = 0L;
+
+        XWindowPeer ownerPeer = getOwnerPeer();
+        if (ownerPeer != null) {
+            ownerWindow = ownerPeer.getWindow();
+        }
+
         String dirname = fd.getDirectory();
         // File path has a priority against directory path.
         String filename = fd.getFile();
         if (filename != null) {
             final File file = new File(filename);

@@ -169,9 +210,10 @@
                 filename = file.getName();
                 // Directory path for gtk_file_chooser_set_current_folder.
                 dirname = file.getParent();
             }
         }
-        run(fd.getTitle(), fd.getMode(), dirname, filename,
+
+        run(ownerWindow, fd.getTitle(), fd.getMode(), dirname, filename,
             fd.getFilenameFilter(), fd.isMultipleMode(), fd.getX(), fd.getY());
     }
 }