summaryrefslogtreecommitdiff
path: root/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
diff options
context:
space:
mode:
authorThomas Fitzsimmons <fitzsim@redhat.com>2005-08-18 01:21:59 +0000
committerThomas Fitzsimmons <fitzsim@redhat.com>2005-08-18 01:21:59 +0000
commite9438334943449d2941b4da0f8a402ca73a27437 (patch)
tree2a53853f1908e5f444961fe865df2fbdc059702b /gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
parenta65d9284f44e5a09ff254a9b5af59d848a6b3b76 (diff)
downloadclasspath-e9438334943449d2941b4da0f8a402ca73a27437.tar.gz
2005-08-17 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkFramePeer.java, gnu_java_awt_peer_gtk_GtkFramePeer.c (postConfigureEvent): Prevent callback calling back into peers. (setBounds): Likewise. (setMenuBarWidthUnlocked): New method. * native/jni/gtk-peer/gtkpeer.h (cp_gtk_filedialog_init_jni): Declare function. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c (gtkInit): Call cp_gtk_filedialog_init_jni. (loadSystemColors): Work around deadlock. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c (textcomponent_changed_cb): Don't release GDK lock. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c (item_activate_cb): Don't release GDK lock. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (item_highlighted_cb): Don't release GDK lock. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c (component_button_press_cb): Don't release GDK lock. (component_button_release_cb): Likewise. (component_motion_notify_cb): Likewise. (component_enter_notify_cb): Likewise. (component_leave_notify_cb): Likewise. (component_expose_cb): Likewise. (component_focus_in_cb): Likewise. (component_focus_out_cb): Likewise. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c (block_expose_event_cb): Remove callback. * gnu/java/awt/peer/gtk/GtkWindowPeer.java, gnu_java_awt_peer_gtk_GtkWindowPeer.c (postConfigureEvent): Prevent callback calling back into peers. (setBounds): Likewise. (nativeSetBoundsUnlocked): New method. (setBoundsUnlocked): Likewise. (nativeSetVisibleUnlocked): Likewise. (setVisibleUnlocked): Likewise. (window_delete_cb): Don't release GDK lock. (window_destroy_cb): Likewise. (window_show_cb): Likewise. (window_active_state_change_cb): Likewise. (window_focus_state_change_cb): Likewise. (window_focus_in_cb): Likewise. (window_focus_out_cb): Likewise. (window_window_state_cb): Likewise. (window_property_changed_cb): Likewise. (realize_cb): Likewise. * gnu/java/awt/peer/gtk/GtkToolkit.java (mainThread): New variable. * gnu/java/awt/peer/gtk/GtkFileDialogPeer.java, gnu_java_awt_peer_gtk_GtkFileDialogPeer.c (setVisible): Prevent callback calling back into peers. (filename_filter_cb): Don't release GDK lock. (handle_response_cb): Likewise. (cp_gtk_filedialog_init_jni): New function. * gnu/java/awt/peer/gtk/GtkCheckboxPeer.java (setState): Prevent callback from calling back into peers. (item_toggled_cb): Don't release GDK lock. * gnu/java/awt/peer/gtk/GdkPixbufDecoder.java, gnu_java_awt_peer_gtk_GdkPixbufDecoder.c (area_prepared_cb): Don't release GDK lock. (area_updated_cb): Likewise. * gnu/java/awt/peer/gtk/GdkGraphics2D.java, gnu_java_awt_peer_gtk_GdkGraphics2D.c (initStateUnlocked): New method. (cairoSurfaceSetFilterUnlocked): Likewise. (initComponentGraphics2DUnlocked): Likewise. (setTexturePixelsUnlocked): Likewise. (setGradientUnlocked): Likewise. (cairoSetMatrixUnlocked): Likewise. (cairoSetRGBAColorUnlocked): Likewise. (cairoSetLineWidthUnlocked): Likewise. (cairoSetLineCapUnlocked): Likewise. (cairoSetLineJoinUnlocked): Likewise. (cairoSetDashUnlocked): Likewise. (cairoSetMiterLimitUnlocked): Likewise. (setPaintUnlocked): Likewise. (setTransformUnlocked): Likewise. (setStrokeUnlocked): Likewise. (setColorUnlocked): Likewise. (setBackgroundUnlocked): Likewise. (setRenderingHintsUnlocked): Likewise. (setFontUnlocked): Likewise. (realize_cb): Don't release GDK lock. Call initComponentGraphics2DUnlocked. * gnu/java/awt/peer/gtk/GdkGraphics.java, gnu_java_awt_peer_gtk_GdkGraphics.c (initStateUnlocked): New method. (initComponentGraphicsUnlocked): New method. (realize_cb): Don't release GDK lock. Call initComponentGraphicsUnlocked. * include/gnu_java_awt_peer_gtk_GdkGraphics.h: Regenerate. * include/gnu_java_awt_peer_gtk_GdkGraphics2D.h: Likewise. * include/gnu_java_awt_peer_gtk_GtkFramePeer.h: Likewise. * include/gnu_java_awt_peer_gtk_GtkWindowPeer.h: Likewise.
Diffstat (limited to 'gnu/java/awt/peer/gtk/GtkFileDialogPeer.java')
-rw-r--r--gnu/java/awt/peer/gtk/GtkFileDialogPeer.java27
1 files changed, 24 insertions, 3 deletions
diff --git a/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java b/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
index a2bd609d4..7a6b94d90 100644
--- a/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
@@ -62,6 +62,8 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
public native void nativeSetDirectory(String directory);
native void nativeSetFilenameFilter (FilenameFilter filter);
+ private boolean hiding = false;
+
public void create()
{
create((GtkContainerPeer) awtComponent.getParent().getPeer());
@@ -156,6 +158,7 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
GtkFileFilterInfo object and send it to this method, which will
in turn call the filter's accept() method and give back the return
value. */
+ // called back by native side: filename_filter_cb
boolean filenameFilterCallback (String fullname) {
String filename = fullname.substring(fullname.lastIndexOf(FS) + 1);
String dirname = fullname.substring(0, fullname.lastIndexOf(FS));
@@ -169,19 +172,37 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
return null;
}
+ public void setVisible (boolean b)
+ {
+ // prevent handle_response_cb -> postItemEvent -> awtComponent.setState -> this.setState
+ // -> gtkToggleButtonSetActive self-deadlock on the GDK lock.
+ if (hiding && Thread.currentThread() == GtkToolkit.mainThread)
+ {
+ setVisibleUnlocked (b);
+ hiding = false;
+ }
+ else
+ super.setVisible (b);
+ }
+
+ // called back by native side: handle_response_cb
void gtkHideFileDialog ()
{
+ // hide calls back the peer's setVisible method, so locking is a
+ // problem.
+ hiding = true;
((Dialog) awtComponent).hide();
}
+ // called back by native side: handle_response_cb
void gtkDisposeFileDialog ()
{
((Dialog) awtComponent).dispose();
}
- /* Callback to set the file and directory values when the user is finished
- * with the dialog.
- */
+ // Callback to set the file and directory values when the user is finished
+ // with the dialog.
+ // called back by native side: handle_response_cb
void gtkSetFilename (String fileName)
{
FileDialog fd = (FileDialog) awtWidget;