GtkButtonPeer.java (handleEvent): Remove modality check.
2003-10-08 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/awt/peer/gtk/GtkButtonPeer.java (handleEvent): Remove modality check. * gnu/java/awt/peer/gtk/GtkDialogPeer.java (initializeInsets): Initialize insets to use latest insets. * gnu/java/awt/peer/gtk/GtkFramePeer.java: Likewise. * gnu/java/awt/peer/gtk/GtkWindowPeer.java (latestInsets): New field. (postConfigureEvent): Update latestInsets field when insets change. Remove call to setSize. Move validate call outside of if blocks. (setVisible): Call setBounds before showing window. (nativeSetVisible): New native method. * java/awt/Window.java (show): Show visible owned windows. (hide): Hide visible owned windows. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (awt_event_handler): Implement modality using GTK grabs. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c (global_gtk_window_group): New global variable. (gtkInit): Initialize global_gtk_window_group. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (create): Clamp width and height values to at least 1. Add this window to the global GTK window group. (setVisible): Rename to nativeSetVisible. (setup_window): Remove function. (setSize): Clamp width and height values to at least 1. (nativeSetBounds): Likewise. (gdk_window_get_root_geometry): Remove function. * jni/gtk-peer/gtkpeer.h: Remove gdk_window_get_root_geometry and setup_window declarations. Declare global_gtk_window_group. From-SVN: r72252
This commit is contained in:
parent
ba401f2f1f
commit
23a555b077
10 changed files with 185 additions and 123 deletions
|
@ -1,5 +1,35 @@
|
|||
2003-10-08 Thomas Fitzsimmons <fitzsim@redhat.com>
|
||||
|
||||
* gnu/java/awt/peer/gtk/GtkButtonPeer.java (handleEvent): Remove
|
||||
modality check.
|
||||
* gnu/java/awt/peer/gtk/GtkDialogPeer.java (initializeInsets):
|
||||
Initialize insets to use latest insets.
|
||||
* gnu/java/awt/peer/gtk/GtkFramePeer.java: Likewise.
|
||||
* gnu/java/awt/peer/gtk/GtkWindowPeer.java (latestInsets): New
|
||||
field.
|
||||
(postConfigureEvent): Update latestInsets field when insets
|
||||
change. Remove call to setSize. Move validate call outside of
|
||||
if blocks.
|
||||
(setVisible): Call setBounds before showing window.
|
||||
(nativeSetVisible): New native method.
|
||||
* java/awt/Window.java (show): Show visible owned windows.
|
||||
(hide): Hide visible owned windows.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
|
||||
(awt_event_handler): Implement modality using GTK grabs.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c
|
||||
(global_gtk_window_group): New global variable.
|
||||
(gtkInit): Initialize global_gtk_window_group.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c (create):
|
||||
Clamp width and height values to at least 1. Add this window to
|
||||
the global GTK window group.
|
||||
(setVisible): Rename to nativeSetVisible.
|
||||
(setup_window): Remove function.
|
||||
(setSize): Clamp width and height values to at least 1.
|
||||
(nativeSetBounds): Likewise.
|
||||
(gdk_window_get_root_geometry): Remove function.
|
||||
* jni/gtk-peer/gtkpeer.h: Remove gdk_window_get_root_geometry
|
||||
and setup_window declarations. Declare global_gtk_window_group.
|
||||
|
||||
* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
|
||||
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
|
||||
(gtkSetFont): Handle BOLD and ITALIC style specifiers.
|
||||
|
|
|
@ -66,8 +66,7 @@ public class GtkButtonPeer extends GtkComponentPeer
|
|||
|
||||
public void handleEvent (AWTEvent e)
|
||||
{
|
||||
if (e.getID () == MouseEvent.MOUSE_CLICKED && isEnabled ()
|
||||
&& !modalHasGrab ())
|
||||
if (e.getID () == MouseEvent.MOUSE_CLICKED && isEnabled ())
|
||||
{
|
||||
MouseEvent me = (MouseEvent) e;
|
||||
if (!me.isConsumed ()
|
||||
|
|
|
@ -54,11 +54,13 @@ public class GtkDialogPeer extends GtkWindowPeer
|
|||
|
||||
void initializeInsets ()
|
||||
{
|
||||
// Unfortunately, X does not provide a clean way to calculate the
|
||||
// dimensions of a dialog's borders before it has been displayed.
|
||||
// So we guess and then fix the dimensions upon receipt of the
|
||||
// first configure event.
|
||||
insets = new Insets (20, 6, 6, 6);
|
||||
synchronized (latestInsets)
|
||||
{
|
||||
insets = new Insets (latestInsets.top,
|
||||
latestInsets.left,
|
||||
latestInsets.bottom,
|
||||
latestInsets.right);
|
||||
}
|
||||
}
|
||||
|
||||
void create ()
|
||||
|
|
|
@ -76,7 +76,13 @@ public class GtkFramePeer extends GtkWindowPeer
|
|||
// dimensions of a frame's borders before it has been displayed.
|
||||
// So we guess and then fix the dimensions upon receipt of the
|
||||
// first configure event.
|
||||
insets = new Insets (20, 6, 6, 6);
|
||||
synchronized (latestInsets)
|
||||
{
|
||||
insets = new Insets (latestInsets.top,
|
||||
latestInsets.left,
|
||||
latestInsets.bottom,
|
||||
latestInsets.right);
|
||||
}
|
||||
}
|
||||
|
||||
void create ()
|
||||
|
|
|
@ -56,6 +56,15 @@ public class GtkWindowPeer extends GtkContainerPeer
|
|||
static protected final int GDK_WINDOW_TYPE_HINT_DOCK = 6;
|
||||
static protected final int GDK_WINDOW_TYPE_HINT_DESKTOP = 7;
|
||||
|
||||
// Unfortunately, X does not provide a clean way to calculate the
|
||||
// dimensions of a window's borders before it has been displayed.
|
||||
// So when creating the application's first window we guess the
|
||||
// border dimensions. Then if need be for that window, we fix the
|
||||
// dimensions upon receipt of the first configure event. Windows
|
||||
// created after the first one will use the latest inset values
|
||||
// received in postConfigureEvent.
|
||||
static Insets latestInsets = new Insets (20, 6, 6, 6);
|
||||
|
||||
native void create (int type, boolean decorated,
|
||||
int width, int height,
|
||||
GtkWindowPeer parent);
|
||||
|
@ -109,6 +118,8 @@ public class GtkWindowPeer extends GtkContainerPeer
|
|||
set ("title", title);
|
||||
}
|
||||
|
||||
native void setSize (int width, int height);
|
||||
|
||||
public void setResizable (boolean resizable)
|
||||
{
|
||||
// Call setSize; otherwise when resizable is changed from true to
|
||||
|
@ -120,7 +131,6 @@ public class GtkWindowPeer extends GtkContainerPeer
|
|||
set ("allow_grow", resizable);
|
||||
}
|
||||
|
||||
native void setSize (int width, int height);
|
||||
native void setBoundsCallback (Window window,
|
||||
int x, int y,
|
||||
int width, int height);
|
||||
|
@ -159,7 +169,13 @@ public class GtkWindowPeer extends GtkContainerPeer
|
|||
insets.bottom = bottom;
|
||||
insets.right = right;
|
||||
|
||||
awtComponent.validate();
|
||||
synchronized (latestInsets)
|
||||
{
|
||||
latestInsets.top = top;
|
||||
latestInsets.left = left;
|
||||
latestInsets.bottom = bottom;
|
||||
latestInsets.right = right;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -178,15 +194,21 @@ public class GtkWindowPeer extends GtkContainerPeer
|
|||
frame_y,
|
||||
frame_width,
|
||||
frame_height);
|
||||
|
||||
if (frame_width != awtComponent.getWidth()
|
||||
|| frame_height != awtComponent.getHeight())
|
||||
setSize (width, height);
|
||||
|
||||
}
|
||||
}
|
||||
awtComponent.validate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
native public void setVisible (boolean b);
|
||||
native void nativeSetVisible (boolean b);
|
||||
public void setVisible (boolean b)
|
||||
{
|
||||
// Prevent the window manager from automatically placing this
|
||||
// window when it is shown.
|
||||
if (b)
|
||||
setBounds (awtComponent.getX(),
|
||||
awtComponent.getY(),
|
||||
awtComponent.getWidth(),
|
||||
awtComponent.getHeight());
|
||||
nativeSetVisible (b);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -209,7 +209,8 @@ public class Window extends Container implements Accessible
|
|||
}
|
||||
|
||||
/**
|
||||
* Makes this window visible and brings it to the front.
|
||||
* Shows on-screen this window and any of its owned windows for whom
|
||||
* isVisible returns true.
|
||||
*/
|
||||
public void show()
|
||||
{
|
||||
|
@ -218,13 +219,7 @@ public class Window extends Container implements Accessible
|
|||
if (peer == null)
|
||||
addNotify();
|
||||
|
||||
validate();
|
||||
super.show();
|
||||
toFront();
|
||||
}
|
||||
|
||||
public void hide()
|
||||
{
|
||||
// Show visible owned windows.
|
||||
synchronized (ownedWindows)
|
||||
{
|
||||
Iterator e = ownedWindows.iterator();
|
||||
|
@ -232,7 +227,10 @@ public class Window extends Container implements Accessible
|
|||
{
|
||||
Window w = (Window)(((Reference) e.next()).get());
|
||||
if (w != null)
|
||||
w.hide();
|
||||
{
|
||||
if (w.isVisible())
|
||||
w.getPeer().setVisible(true);
|
||||
}
|
||||
else
|
||||
// Remove null weak reference from ownedWindows.
|
||||
// Unfortunately this can't be done in the Window's
|
||||
|
@ -241,7 +239,29 @@ public class Window extends Container implements Accessible
|
|||
e.remove();
|
||||
}
|
||||
}
|
||||
validate();
|
||||
super.show();
|
||||
toFront();
|
||||
}
|
||||
|
||||
public void hide()
|
||||
{
|
||||
// Hide visible owned windows.
|
||||
synchronized (ownedWindows)
|
||||
{
|
||||
Iterator e = ownedWindows.iterator();
|
||||
while(e.hasNext())
|
||||
{
|
||||
Window w = (Window)(((Reference) e.next()).get());
|
||||
if (w != null)
|
||||
{
|
||||
if (w.isVisible() && w.getPeer() != null)
|
||||
w.getPeer().setVisible(false);
|
||||
}
|
||||
else
|
||||
e.remove();
|
||||
}
|
||||
}
|
||||
super.hide();
|
||||
}
|
||||
|
||||
|
|
|
@ -813,7 +813,7 @@ generates_key_typed_event (GdkEvent *event, GtkWidget *source)
|
|||
void
|
||||
awt_event_handler (GdkEvent *event)
|
||||
{
|
||||
jobject *obj_ptr;
|
||||
jobject *event_obj_ptr;
|
||||
static guint32 button_click_time = 0;
|
||||
static GdkWindow *button_window = NULL;
|
||||
static guint button_number = -1;
|
||||
|
@ -865,12 +865,49 @@ awt_event_handler (GdkEvent *event)
|
|||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
(guchar **)&obj_ptr))
|
||||
(guchar **)&event_obj_ptr))
|
||||
{
|
||||
GtkWidget *event_widget;
|
||||
GtkWidget *grab_widget;
|
||||
jobject *grab_obj_ptr = NULL;
|
||||
void *ptr;
|
||||
|
||||
/* Implement modality using GTK grabs. */
|
||||
g_assert (global_gtk_window_group);
|
||||
if (global_gtk_window_group->grabs)
|
||||
{
|
||||
grab_widget = global_gtk_window_group->grabs->data;
|
||||
g_assert (grab_widget);
|
||||
|
||||
gdk_property_get (grab_widget->window,
|
||||
gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE),
|
||||
gdk_atom_intern ("CARDINAL", FALSE),
|
||||
0,
|
||||
sizeof (jobject),
|
||||
FALSE,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
(guchar **)&grab_obj_ptr);
|
||||
|
||||
ptr = NSA_GET_PTR (gdk_env, *event_obj_ptr);
|
||||
event_widget = GTK_WIDGET(ptr);
|
||||
|
||||
if (GTK_WIDGET_IS_SENSITIVE (event_widget) &&
|
||||
gtk_widget_is_ancestor (event_widget, grab_widget))
|
||||
{
|
||||
g_free (grab_obj_ptr);
|
||||
|
||||
grab_obj_ptr = event_obj_ptr;
|
||||
}
|
||||
}
|
||||
else
|
||||
grab_obj_ptr = event_obj_ptr;
|
||||
|
||||
switch (event->type)
|
||||
{
|
||||
case GDK_BUTTON_PRESS:
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID,
|
||||
AWT_MOUSE_PRESSED,
|
||||
(jlong)event->button.time,
|
||||
state_to_awt_mods (event->button.state) |
|
||||
|
@ -902,7 +939,8 @@ awt_event_handler (GdkEvent *event)
|
|||
/* if (--grab_counter == 0)
|
||||
gdk_pointer_ungrab (event->button.time);
|
||||
*/
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postMouseEventID,
|
||||
AWT_MOUSE_RELEASED,
|
||||
(jlong)event->button.time,
|
||||
state_to_awt_mods (event->button.state) |
|
||||
|
@ -918,7 +956,8 @@ awt_event_handler (GdkEvent *event)
|
|||
&& event->button.y >= 0
|
||||
&& event->button.x <= width
|
||||
&& event->button.y <= height)
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postMouseEventID,
|
||||
AWT_MOUSE_CLICKED,
|
||||
(jlong)event->button.time,
|
||||
state_to_awt_mods (event->button.state) |
|
||||
|
@ -930,7 +969,7 @@ awt_event_handler (GdkEvent *event)
|
|||
}
|
||||
break;
|
||||
case GDK_MOTION_NOTIFY:
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID,
|
||||
AWT_MOUSE_MOVED,
|
||||
(jlong)event->motion.time,
|
||||
state_to_awt_mods (event->motion.state),
|
||||
|
@ -944,7 +983,8 @@ awt_event_handler (GdkEvent *event)
|
|||
| GDK_BUTTON4_MASK
|
||||
| GDK_BUTTON5_MASK))
|
||||
{
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postMouseEventID,
|
||||
AWT_MOUSE_DRAGGED,
|
||||
(jlong)event->motion.time,
|
||||
state_to_awt_mods (event->motion.state),
|
||||
|
@ -954,7 +994,7 @@ awt_event_handler (GdkEvent *event)
|
|||
}
|
||||
break;
|
||||
case GDK_ENTER_NOTIFY:
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID,
|
||||
AWT_MOUSE_ENTERED,
|
||||
(jlong)event->crossing.time,
|
||||
state_to_awt_mods (event->crossing.state),
|
||||
|
@ -964,7 +1004,8 @@ awt_event_handler (GdkEvent *event)
|
|||
break;
|
||||
case GDK_LEAVE_NOTIFY:
|
||||
if (event->crossing.mode == GDK_CROSSING_NORMAL)
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postMouseEventID,
|
||||
AWT_MOUSE_EXITED,
|
||||
(jlong)event->crossing.time,
|
||||
state_to_awt_mods (event->crossing.state),
|
||||
|
@ -1005,7 +1046,7 @@ awt_event_handler (GdkEvent *event)
|
|||
bottom = r.height - h - y;
|
||||
right = r.width - w - x;
|
||||
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *event_obj_ptr,
|
||||
postConfigureEventID,
|
||||
(jint) event->configure.x,
|
||||
(jint) event->configure.y,
|
||||
|
@ -1021,7 +1062,7 @@ awt_event_handler (GdkEvent *event)
|
|||
break;
|
||||
case GDK_EXPOSE:
|
||||
{
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *event_obj_ptr,
|
||||
postExposeEventID,
|
||||
(jint)event->expose.area.x,
|
||||
(jint)event->expose.area.y,
|
||||
|
@ -1066,9 +1107,9 @@ awt_event_handler (GdkEvent *event)
|
|||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
(guchar **)&obj_ptr);
|
||||
(guchar **)&grab_obj_ptr);
|
||||
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postKeyEventID,
|
||||
(jint) AWT_KEY_PRESSED,
|
||||
(jlong) event->key.time,
|
||||
|
@ -1078,7 +1119,7 @@ awt_event_handler (GdkEvent *event)
|
|||
keysym_to_awt_keylocation (event));
|
||||
|
||||
if (generates_key_typed_event (event, window->focus_widget))
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postKeyEventID,
|
||||
(jint) AWT_KEY_TYPED,
|
||||
(jlong) event->key.time,
|
||||
|
@ -1121,9 +1162,9 @@ awt_event_handler (GdkEvent *event)
|
|||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
(guchar **)&obj_ptr);
|
||||
(guchar **)&grab_obj_ptr);
|
||||
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postKeyEventID,
|
||||
(jint) AWT_KEY_RELEASED,
|
||||
(jlong) event->key.time,
|
||||
|
@ -1135,7 +1176,7 @@ awt_event_handler (GdkEvent *event)
|
|||
}
|
||||
break;
|
||||
case GDK_FOCUS_CHANGE:
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *event_obj_ptr,
|
||||
postFocusEventID,
|
||||
(jint) (event->focus_change.in) ?
|
||||
AWT_FOCUS_GAINED : AWT_FOCUS_LOST,
|
||||
|
@ -1144,7 +1185,7 @@ awt_event_handler (GdkEvent *event)
|
|||
default:
|
||||
break;
|
||||
}
|
||||
g_free (obj_ptr);
|
||||
g_free (event_obj_ptr);
|
||||
}
|
||||
|
||||
gtk_main_do_event (event);
|
||||
|
|
|
@ -63,6 +63,8 @@ JNIEnv *gdk_env;
|
|||
JavaVM *gdk_vm;
|
||||
#endif
|
||||
|
||||
GtkWindowGroup *global_gtk_window_group;
|
||||
|
||||
/*
|
||||
* Call gtk_init. It is very important that this happen before any other
|
||||
* gtk calls.
|
||||
|
@ -179,6 +181,7 @@ Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit (JNIEnv *env, jclass clazz)
|
|||
postTextEventID = (*env)->GetMethodID (env, gtktextcomponentpeer,
|
||||
"postTextEvent",
|
||||
"()V");
|
||||
global_gtk_window_group = gtk_window_group_new ();
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -60,6 +60,10 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create
|
|||
window_widget = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
window = GTK_WINDOW (window_widget);
|
||||
|
||||
// Avoid GTK runtime assertion failures.
|
||||
width = (width < 1) ? 1 : width;
|
||||
height = (height < 1) ? 1 : height;
|
||||
|
||||
gtk_window_set_default_size (window, width, height);
|
||||
|
||||
/* We must set this window's size requisition. Otherwise when a
|
||||
|
@ -80,6 +84,8 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create
|
|||
|
||||
gtk_window_set_type_hint (window, type);
|
||||
|
||||
gtk_window_group_add_window (global_gtk_window_group, window);
|
||||
|
||||
vbox = gtk_vbox_new (0, 0);
|
||||
layout = gtk_layout_new (NULL, NULL);
|
||||
gtk_box_pack_end (GTK_BOX (vbox), layout, 1, 1, 0);
|
||||
|
@ -93,7 +99,7 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create
|
|||
NSA_SET_PTR (env, obj, window_widget);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisible
|
||||
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible
|
||||
(JNIEnv *env, jobject obj, jboolean visible)
|
||||
{
|
||||
void *ptr;
|
||||
|
@ -149,32 +155,6 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectHooks
|
|||
gdk_threads_leave ();
|
||||
}
|
||||
|
||||
void
|
||||
setup_window (JNIEnv *env, jobject obj, GtkWidget *window, jint width,
|
||||
jint height, jboolean visible)
|
||||
{
|
||||
GtkWidget *layout, *vbox;
|
||||
|
||||
gdk_threads_enter();
|
||||
gtk_window_set_policy (GTK_WINDOW (window), 1, 1, 0);
|
||||
gtk_widget_set_usize (window, width, height);
|
||||
|
||||
vbox = gtk_vbox_new (0, 0);
|
||||
layout = gtk_layout_new (NULL, NULL);
|
||||
gtk_box_pack_end (GTK_BOX (vbox), layout, 1, 1, 0);
|
||||
gtk_container_add (GTK_CONTAINER (window), vbox);
|
||||
gtk_widget_realize (layout);
|
||||
connect_awt_hook (env, obj, 1, GTK_LAYOUT(layout)->bin_window);
|
||||
gtk_widget_show (layout);
|
||||
gtk_widget_show (vbox);
|
||||
|
||||
gtk_widget_realize (window);
|
||||
|
||||
connect_awt_hook (env, obj, 1, window->window);
|
||||
set_visible (window, visible);
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
||||
/*
|
||||
* Set a frame's title
|
||||
*/
|
||||
|
@ -250,6 +230,10 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setSize
|
|||
{
|
||||
void *ptr = NSA_GET_PTR (env, obj);
|
||||
|
||||
// Avoid GTK runtime assertion failures.
|
||||
width = (width < 1) ? 1 : width;
|
||||
height = (height < 1) ? 1 : height;
|
||||
|
||||
gdk_threads_enter ();
|
||||
gtk_widget_set_size_request (GTK_WIDGET(ptr), width, height);
|
||||
gdk_threads_leave ();
|
||||
|
@ -261,6 +245,10 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds
|
|||
{
|
||||
void *ptr = NSA_GET_PTR (env, obj);
|
||||
|
||||
// Avoid GTK runtime assertion failures.
|
||||
width = (width < 1) ? 1 : width;
|
||||
height = (height < 1) ? 1 : height;
|
||||
|
||||
gdk_threads_enter ();
|
||||
gtk_window_move (GTK_WINDOW(ptr), x, y);
|
||||
/* Need to change the widget's request size. */
|
||||
|
@ -314,43 +302,3 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_getMenuBarHeight
|
|||
|
||||
return height;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
gdk_window_get_root_geometry (GdkWindow *window,
|
||||
gint *x,
|
||||
gint *y,
|
||||
gint *width,
|
||||
gint *height,
|
||||
gint *border,
|
||||
gint *depth)
|
||||
{
|
||||
GdkWindow *private;
|
||||
|
||||
g_return_if_fail (window != NULL);
|
||||
|
||||
private = (GdkWindow*) window;
|
||||
if (x)
|
||||
*x = 0;
|
||||
if (y)
|
||||
*y = 0;
|
||||
if (width)
|
||||
*width = 0;
|
||||
if (height)
|
||||
*height = 0;
|
||||
if (border)
|
||||
*border = 0;
|
||||
if (depth)
|
||||
*depth = 0;
|
||||
|
||||
if (GDK_WINDOW_DESTROYED (private))
|
||||
return;
|
||||
|
||||
private = gdk_window_get_toplevel (private);
|
||||
if (GDK_WINDOW_DESTROYED(private))
|
||||
return;
|
||||
|
||||
gdk_window_get_geometry (private, x, y, width, height, depth);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -369,14 +369,7 @@ extern jclass gdkColor;
|
|||
extern jmethodID gdkColorID;
|
||||
extern JNIEnv *gdk_env;
|
||||
|
||||
void
|
||||
gdk_window_get_root_geometry (GdkWindow *window,
|
||||
gint *x,
|
||||
gint *y,
|
||||
gint *width,
|
||||
gint *height,
|
||||
gint *border,
|
||||
gint *depth);
|
||||
extern GtkWindowGroup *global_gtk_window_group;
|
||||
|
||||
void awt_event_handler (GdkEvent *event);
|
||||
|
||||
|
@ -385,8 +378,6 @@ void connect_awt_hook (JNIEnv *env, jobject peer_obj, int nwindows, ...);
|
|||
void set_visible (GtkWidget *widget, jboolean visible);
|
||||
void set_parent (GtkWidget *widget, GtkContainer *parent);
|
||||
GtkLayout *find_gtk_layout (GtkWidget *parent);
|
||||
void setup_window (JNIEnv *env, jobject obj, GtkWidget *window, jint width,
|
||||
jint height, jboolean visible);
|
||||
|
||||
jint keyevent_state_to_awt_mods (GdkEvent *event);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue