<AWT Dev> Bug 6913179, FileDialog uses native GTK under Linux: first patch

Anthony Petrov Anthony.Petrov at Sun.COM
Wed Jan 20 08:53:13 PST 2010


Hi Constantino,

Thank you very much for the patch! I've generated a webrev for it at:

http://cr.openjdk.java.net/~anthony/7-43-GTKFileDialog-6913179.0/

I'm also CC'ing Peter as he'll be a reviewer for the fix as well.

Some comments from my side follow:

src/solaris/classes/sun/awt/X11/GtkFileDialogPeer.java
> 15 class GtkFileDialogPeer extends XFileDialogPeer {

We don't really use much from the XFileDisalogPeer, do we need this 
class to be its descendant? Why not extend the XDialogPeer and implement 
the java.awt.peer.FileDialogPeer interface directly?

Some methods in that class (like start(),filenameFilterCallback, etc.) 
may safely be made private, I think. The less a class exports, the better.


>   55     public void setVisible(boolean b) {
>   56         if (b) {

And what if b == false? I can imagine calling that from another thread.


On 1/18/2010 1:14 AM Costantino Cerbo wrote:
> 1) The FileDialog isn't disposed. I cannot understand why, because in
> 'sun_awt_X11_GtkFileDialogPeer.c#handle_response' I call:
> 	fp_gtk_widget_hide(dialog);
> 	fp_gtk_widget_destroy(dialog);
> 	fp_gtk_main_quit();

That must be the result of inheriting from XFileDialog: see 
XFileDialog.setVisible() for some tips.


> 2) The shortcut "Search" on the left up side is missing because we
> should initialize the thread system in GLib by calling:
> 
>   if (!g_thread_supported ()) {
>   	g_thread_init (NULL);
>   }
> 
> but I wasn't able to find a way to dynamically load these functions
> (they are linked with gthread-2.0).

I haven't yet reviewed the native part of the code (will finish 
tomorrow), but it looks like we could just load this library along with 
the gtk-2.0, couldn't we?


> Last but not least, I've some problems with the incremental make.
> When I make a full build, the output goes to
>  	~/openjdk/jdk7/mytl/build/linux-i586
> while with and incremental make in a subfolder, the result is in
> 	~/openjdk/jdk7/mytl/jdk/build/linux-i586

[...]

> That means that I have to make each time a full build, and you can
> imagine how time consuming is this!

On linux? Mine takes about 10 minutes. However, even that is too much, 
that's why incremental building is a must. The secret is as follows:

I suppose that you're cloning the full forest with all the subtrees (tl, 
build, etc. etc.), but what you really need is just the jdk repository. 
Get it alone (remember to use clone instead of fclone when cloning a 
subtree), set the ALT_JDK_IMPORT_PATH as recommended in the README-build 
documents, and you're ready to build as quickly as possible. And the 
incremental builds will start working properly then.

--
best regards,
Anthony



More information about the awt-dev mailing list