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>
|
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,
|
* gnu/java/awt/peer/gtk/GtkButtonPeer.java,
|
||||||
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
|
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
|
||||||
(gtkSetFont): Handle BOLD and ITALIC style specifiers.
|
(gtkSetFont): Handle BOLD and ITALIC style specifiers.
|
||||||
|
|
|
@ -66,8 +66,7 @@ public class GtkButtonPeer extends GtkComponentPeer
|
||||||
|
|
||||||
public void handleEvent (AWTEvent e)
|
public void handleEvent (AWTEvent e)
|
||||||
{
|
{
|
||||||
if (e.getID () == MouseEvent.MOUSE_CLICKED && isEnabled ()
|
if (e.getID () == MouseEvent.MOUSE_CLICKED && isEnabled ())
|
||||||
&& !modalHasGrab ())
|
|
||||||
{
|
{
|
||||||
MouseEvent me = (MouseEvent) e;
|
MouseEvent me = (MouseEvent) e;
|
||||||
if (!me.isConsumed ()
|
if (!me.isConsumed ()
|
||||||
|
|
|
@ -54,11 +54,13 @@ public class GtkDialogPeer extends GtkWindowPeer
|
||||||
|
|
||||||
void initializeInsets ()
|
void initializeInsets ()
|
||||||
{
|
{
|
||||||
// Unfortunately, X does not provide a clean way to calculate the
|
synchronized (latestInsets)
|
||||||
// dimensions of a dialog's borders before it has been displayed.
|
{
|
||||||
// So we guess and then fix the dimensions upon receipt of the
|
insets = new Insets (latestInsets.top,
|
||||||
// first configure event.
|
latestInsets.left,
|
||||||
insets = new Insets (20, 6, 6, 6);
|
latestInsets.bottom,
|
||||||
|
latestInsets.right);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void create ()
|
void create ()
|
||||||
|
|
|
@ -76,7 +76,13 @@ public class GtkFramePeer extends GtkWindowPeer
|
||||||
// dimensions of a frame's borders before it has been displayed.
|
// dimensions of a frame's borders before it has been displayed.
|
||||||
// So we guess and then fix the dimensions upon receipt of the
|
// So we guess and then fix the dimensions upon receipt of the
|
||||||
// first configure event.
|
// 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 ()
|
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_DOCK = 6;
|
||||||
static protected final int GDK_WINDOW_TYPE_HINT_DESKTOP = 7;
|
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,
|
native void create (int type, boolean decorated,
|
||||||
int width, int height,
|
int width, int height,
|
||||||
GtkWindowPeer parent);
|
GtkWindowPeer parent);
|
||||||
|
@ -109,6 +118,8 @@ public class GtkWindowPeer extends GtkContainerPeer
|
||||||
set ("title", title);
|
set ("title", title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
native void setSize (int width, int height);
|
||||||
|
|
||||||
public void setResizable (boolean resizable)
|
public void setResizable (boolean resizable)
|
||||||
{
|
{
|
||||||
// Call setSize; otherwise when resizable is changed from true to
|
// Call setSize; otherwise when resizable is changed from true to
|
||||||
|
@ -120,7 +131,6 @@ public class GtkWindowPeer extends GtkContainerPeer
|
||||||
set ("allow_grow", resizable);
|
set ("allow_grow", resizable);
|
||||||
}
|
}
|
||||||
|
|
||||||
native void setSize (int width, int height);
|
|
||||||
native void setBoundsCallback (Window window,
|
native void setBoundsCallback (Window window,
|
||||||
int x, int y,
|
int x, int y,
|
||||||
int width, int height);
|
int width, int height);
|
||||||
|
@ -159,7 +169,13 @@ public class GtkWindowPeer extends GtkContainerPeer
|
||||||
insets.bottom = bottom;
|
insets.bottom = bottom;
|
||||||
insets.right = right;
|
insets.right = right;
|
||||||
|
|
||||||
awtComponent.validate();
|
synchronized (latestInsets)
|
||||||
|
{
|
||||||
|
latestInsets.top = top;
|
||||||
|
latestInsets.left = left;
|
||||||
|
latestInsets.bottom = bottom;
|
||||||
|
latestInsets.right = right;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -178,15 +194,21 @@ public class GtkWindowPeer extends GtkContainerPeer
|
||||||
frame_y,
|
frame_y,
|
||||||
frame_width,
|
frame_width,
|
||||||
frame_height);
|
frame_height);
|
||||||
|
}
|
||||||
if (frame_width != awtComponent.getWidth()
|
}
|
||||||
|| frame_height != awtComponent.getHeight())
|
|
||||||
setSize (width, height);
|
|
||||||
|
|
||||||
awtComponent.validate();
|
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()
|
public void show()
|
||||||
{
|
{
|
||||||
|
@ -218,13 +219,7 @@ public class Window extends Container implements Accessible
|
||||||
if (peer == null)
|
if (peer == null)
|
||||||
addNotify();
|
addNotify();
|
||||||
|
|
||||||
validate();
|
// Show visible owned windows.
|
||||||
super.show();
|
|
||||||
toFront();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void hide()
|
|
||||||
{
|
|
||||||
synchronized (ownedWindows)
|
synchronized (ownedWindows)
|
||||||
{
|
{
|
||||||
Iterator e = ownedWindows.iterator();
|
Iterator e = ownedWindows.iterator();
|
||||||
|
@ -232,7 +227,10 @@ public class Window extends Container implements Accessible
|
||||||
{
|
{
|
||||||
Window w = (Window)(((Reference) e.next()).get());
|
Window w = (Window)(((Reference) e.next()).get());
|
||||||
if (w != null)
|
if (w != null)
|
||||||
w.hide();
|
{
|
||||||
|
if (w.isVisible())
|
||||||
|
w.getPeer().setVisible(true);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
// Remove null weak reference from ownedWindows.
|
// Remove null weak reference from ownedWindows.
|
||||||
// Unfortunately this can't be done in the Window's
|
// Unfortunately this can't be done in the Window's
|
||||||
|
@ -241,7 +239,29 @@ public class Window extends Container implements Accessible
|
||||||
e.remove();
|
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();
|
super.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -813,7 +813,7 @@ generates_key_typed_event (GdkEvent *event, GtkWidget *source)
|
||||||
void
|
void
|
||||||
awt_event_handler (GdkEvent *event)
|
awt_event_handler (GdkEvent *event)
|
||||||
{
|
{
|
||||||
jobject *obj_ptr;
|
jobject *event_obj_ptr;
|
||||||
static guint32 button_click_time = 0;
|
static guint32 button_click_time = 0;
|
||||||
static GdkWindow *button_window = NULL;
|
static GdkWindow *button_window = NULL;
|
||||||
static guint button_number = -1;
|
static guint button_number = -1;
|
||||||
|
@ -865,12 +865,49 @@ awt_event_handler (GdkEvent *event)
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
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)
|
switch (event->type)
|
||||||
{
|
{
|
||||||
case GDK_BUTTON_PRESS:
|
case GDK_BUTTON_PRESS:
|
||||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID,
|
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID,
|
||||||
AWT_MOUSE_PRESSED,
|
AWT_MOUSE_PRESSED,
|
||||||
(jlong)event->button.time,
|
(jlong)event->button.time,
|
||||||
state_to_awt_mods (event->button.state) |
|
state_to_awt_mods (event->button.state) |
|
||||||
|
@ -902,7 +939,8 @@ awt_event_handler (GdkEvent *event)
|
||||||
/* if (--grab_counter == 0)
|
/* if (--grab_counter == 0)
|
||||||
gdk_pointer_ungrab (event->button.time);
|
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,
|
AWT_MOUSE_RELEASED,
|
||||||
(jlong)event->button.time,
|
(jlong)event->button.time,
|
||||||
state_to_awt_mods (event->button.state) |
|
state_to_awt_mods (event->button.state) |
|
||||||
|
@ -918,7 +956,8 @@ awt_event_handler (GdkEvent *event)
|
||||||
&& event->button.y >= 0
|
&& event->button.y >= 0
|
||||||
&& event->button.x <= width
|
&& event->button.x <= width
|
||||||
&& event->button.y <= height)
|
&& event->button.y <= height)
|
||||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID,
|
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||||
|
postMouseEventID,
|
||||||
AWT_MOUSE_CLICKED,
|
AWT_MOUSE_CLICKED,
|
||||||
(jlong)event->button.time,
|
(jlong)event->button.time,
|
||||||
state_to_awt_mods (event->button.state) |
|
state_to_awt_mods (event->button.state) |
|
||||||
|
@ -930,7 +969,7 @@ awt_event_handler (GdkEvent *event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GDK_MOTION_NOTIFY:
|
case GDK_MOTION_NOTIFY:
|
||||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID,
|
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID,
|
||||||
AWT_MOUSE_MOVED,
|
AWT_MOUSE_MOVED,
|
||||||
(jlong)event->motion.time,
|
(jlong)event->motion.time,
|
||||||
state_to_awt_mods (event->motion.state),
|
state_to_awt_mods (event->motion.state),
|
||||||
|
@ -944,7 +983,8 @@ awt_event_handler (GdkEvent *event)
|
||||||
| GDK_BUTTON4_MASK
|
| GDK_BUTTON4_MASK
|
||||||
| GDK_BUTTON5_MASK))
|
| GDK_BUTTON5_MASK))
|
||||||
{
|
{
|
||||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID,
|
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||||
|
postMouseEventID,
|
||||||
AWT_MOUSE_DRAGGED,
|
AWT_MOUSE_DRAGGED,
|
||||||
(jlong)event->motion.time,
|
(jlong)event->motion.time,
|
||||||
state_to_awt_mods (event->motion.state),
|
state_to_awt_mods (event->motion.state),
|
||||||
|
@ -954,7 +994,7 @@ awt_event_handler (GdkEvent *event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GDK_ENTER_NOTIFY:
|
case GDK_ENTER_NOTIFY:
|
||||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr, postMouseEventID,
|
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID,
|
||||||
AWT_MOUSE_ENTERED,
|
AWT_MOUSE_ENTERED,
|
||||||
(jlong)event->crossing.time,
|
(jlong)event->crossing.time,
|
||||||
state_to_awt_mods (event->crossing.state),
|
state_to_awt_mods (event->crossing.state),
|
||||||
|
@ -964,7 +1004,8 @@ awt_event_handler (GdkEvent *event)
|
||||||
break;
|
break;
|
||||||
case GDK_LEAVE_NOTIFY:
|
case GDK_LEAVE_NOTIFY:
|
||||||
if (event->crossing.mode == GDK_CROSSING_NORMAL)
|
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,
|
AWT_MOUSE_EXITED,
|
||||||
(jlong)event->crossing.time,
|
(jlong)event->crossing.time,
|
||||||
state_to_awt_mods (event->crossing.state),
|
state_to_awt_mods (event->crossing.state),
|
||||||
|
@ -1005,7 +1046,7 @@ awt_event_handler (GdkEvent *event)
|
||||||
bottom = r.height - h - y;
|
bottom = r.height - h - y;
|
||||||
right = r.width - w - x;
|
right = r.width - w - x;
|
||||||
|
|
||||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
|
(*gdk_env)->CallVoidMethod (gdk_env, *event_obj_ptr,
|
||||||
postConfigureEventID,
|
postConfigureEventID,
|
||||||
(jint) event->configure.x,
|
(jint) event->configure.x,
|
||||||
(jint) event->configure.y,
|
(jint) event->configure.y,
|
||||||
|
@ -1021,7 +1062,7 @@ awt_event_handler (GdkEvent *event)
|
||||||
break;
|
break;
|
||||||
case GDK_EXPOSE:
|
case GDK_EXPOSE:
|
||||||
{
|
{
|
||||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
|
(*gdk_env)->CallVoidMethod (gdk_env, *event_obj_ptr,
|
||||||
postExposeEventID,
|
postExposeEventID,
|
||||||
(jint)event->expose.area.x,
|
(jint)event->expose.area.x,
|
||||||
(jint)event->expose.area.y,
|
(jint)event->expose.area.y,
|
||||||
|
@ -1066,9 +1107,9 @@ awt_event_handler (GdkEvent *event)
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
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,
|
postKeyEventID,
|
||||||
(jint) AWT_KEY_PRESSED,
|
(jint) AWT_KEY_PRESSED,
|
||||||
(jlong) event->key.time,
|
(jlong) event->key.time,
|
||||||
|
@ -1078,7 +1119,7 @@ awt_event_handler (GdkEvent *event)
|
||||||
keysym_to_awt_keylocation (event));
|
keysym_to_awt_keylocation (event));
|
||||||
|
|
||||||
if (generates_key_typed_event (event, window->focus_widget))
|
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,
|
postKeyEventID,
|
||||||
(jint) AWT_KEY_TYPED,
|
(jint) AWT_KEY_TYPED,
|
||||||
(jlong) event->key.time,
|
(jlong) event->key.time,
|
||||||
|
@ -1121,9 +1162,9 @@ awt_event_handler (GdkEvent *event)
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
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,
|
postKeyEventID,
|
||||||
(jint) AWT_KEY_RELEASED,
|
(jint) AWT_KEY_RELEASED,
|
||||||
(jlong) event->key.time,
|
(jlong) event->key.time,
|
||||||
|
@ -1135,7 +1176,7 @@ awt_event_handler (GdkEvent *event)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GDK_FOCUS_CHANGE:
|
case GDK_FOCUS_CHANGE:
|
||||||
(*gdk_env)->CallVoidMethod (gdk_env, *obj_ptr,
|
(*gdk_env)->CallVoidMethod (gdk_env, *event_obj_ptr,
|
||||||
postFocusEventID,
|
postFocusEventID,
|
||||||
(jint) (event->focus_change.in) ?
|
(jint) (event->focus_change.in) ?
|
||||||
AWT_FOCUS_GAINED : AWT_FOCUS_LOST,
|
AWT_FOCUS_GAINED : AWT_FOCUS_LOST,
|
||||||
|
@ -1144,7 +1185,7 @@ awt_event_handler (GdkEvent *event)
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
g_free (obj_ptr);
|
g_free (event_obj_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_main_do_event (event);
|
gtk_main_do_event (event);
|
||||||
|
|
|
@ -63,6 +63,8 @@ JNIEnv *gdk_env;
|
||||||
JavaVM *gdk_vm;
|
JavaVM *gdk_vm;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
GtkWindowGroup *global_gtk_window_group;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Call gtk_init. It is very important that this happen before any other
|
* Call gtk_init. It is very important that this happen before any other
|
||||||
* gtk calls.
|
* gtk calls.
|
||||||
|
@ -179,6 +181,7 @@ Java_gnu_java_awt_peer_gtk_GtkMainThread_gtkInit (JNIEnv *env, jclass clazz)
|
||||||
postTextEventID = (*env)->GetMethodID (env, gtktextcomponentpeer,
|
postTextEventID = (*env)->GetMethodID (env, gtktextcomponentpeer,
|
||||||
"postTextEvent",
|
"postTextEvent",
|
||||||
"()V");
|
"()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_widget = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||||
window = GTK_WINDOW (window_widget);
|
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);
|
gtk_window_set_default_size (window, width, height);
|
||||||
|
|
||||||
/* We must set this window's size requisition. Otherwise when a
|
/* 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_set_type_hint (window, type);
|
||||||
|
|
||||||
|
gtk_window_group_add_window (global_gtk_window_group, window);
|
||||||
|
|
||||||
vbox = gtk_vbox_new (0, 0);
|
vbox = gtk_vbox_new (0, 0);
|
||||||
layout = gtk_layout_new (NULL, NULL);
|
layout = gtk_layout_new (NULL, NULL);
|
||||||
gtk_box_pack_end (GTK_BOX (vbox), layout, 1, 1, 0);
|
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);
|
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)
|
(JNIEnv *env, jobject obj, jboolean visible)
|
||||||
{
|
{
|
||||||
void *ptr;
|
void *ptr;
|
||||||
|
@ -149,32 +155,6 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectHooks
|
||||||
gdk_threads_leave ();
|
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
|
* Set a frame's title
|
||||||
*/
|
*/
|
||||||
|
@ -250,6 +230,10 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setSize
|
||||||
{
|
{
|
||||||
void *ptr = NSA_GET_PTR (env, obj);
|
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 ();
|
gdk_threads_enter ();
|
||||||
gtk_widget_set_size_request (GTK_WIDGET(ptr), width, height);
|
gtk_widget_set_size_request (GTK_WIDGET(ptr), width, height);
|
||||||
gdk_threads_leave ();
|
gdk_threads_leave ();
|
||||||
|
@ -261,6 +245,10 @@ Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds
|
||||||
{
|
{
|
||||||
void *ptr = NSA_GET_PTR (env, obj);
|
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 ();
|
gdk_threads_enter ();
|
||||||
gtk_window_move (GTK_WINDOW(ptr), x, y);
|
gtk_window_move (GTK_WINDOW(ptr), x, y);
|
||||||
/* Need to change the widget's request size. */
|
/* Need to change the widget's request size. */
|
||||||
|
@ -314,43 +302,3 @@ Java_gnu_java_awt_peer_gtk_GtkFramePeer_getMenuBarHeight
|
||||||
|
|
||||||
return height;
|
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 jmethodID gdkColorID;
|
||||||
extern JNIEnv *gdk_env;
|
extern JNIEnv *gdk_env;
|
||||||
|
|
||||||
void
|
extern GtkWindowGroup *global_gtk_window_group;
|
||||||
gdk_window_get_root_geometry (GdkWindow *window,
|
|
||||||
gint *x,
|
|
||||||
gint *y,
|
|
||||||
gint *width,
|
|
||||||
gint *height,
|
|
||||||
gint *border,
|
|
||||||
gint *depth);
|
|
||||||
|
|
||||||
void awt_event_handler (GdkEvent *event);
|
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_visible (GtkWidget *widget, jboolean visible);
|
||||||
void set_parent (GtkWidget *widget, GtkContainer *parent);
|
void set_parent (GtkWidget *widget, GtkContainer *parent);
|
||||||
GtkLayout *find_gtk_layout (GtkWidget *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);
|
jint keyevent_state_to_awt_mods (GdkEvent *event);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue