mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 15:11:08 +08:00
gnu_java_awt_peer_gtk_GtkEvents.c (awt_event_handler): Most coded moved to pre_event_handler, with the modifications mentioned below.
2003-12-08 Fernando Nasser <fnasser@redhat.com> * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (awt_event_handler): Most coded moved to pre_event_handler, with the modifications mentioned below. (pre_event_handler): New function. Called on the Gtk "event" signal. Do not retrieve the jobject from the window property as it is already available as user data in the signal. Do not try and find the grab widget as it is already done by Gtk at this point. Do not search for Window ancestor as Gtk already sends the signal to it. Do not meddle with the activation state of peer widgets on each key press or release. Add CList to the special handling when looking for the focused widget. * jni/gtk-peer/gtkpeer.h: Add declaration for pre_event_handler. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c (connectJObject): New function. (connectSignals): New function. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c (connectHooks): Rename to... (connectSignals): New name. Get rid of NewGlobalRef call. Use g_signal_connect instead of deprecated gtk_signal_connect. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c (connect_choice_item_selectable_hook): Use g_signal_connect instead of deprecated gtk_signal_connect. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c (Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState): Ditto. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove function. (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObject): New function. (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): New function. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove function. (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObject): New function. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove function. (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObject): New function. (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): New function. (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_old_create): Remove dead code. (item_select): Remove indirection. (item_unselect): Ditto. (connect_selectable_hook): Folded into connectSignals. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove function. (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObject): New function. (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): New function. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c: Ditto. * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove function. (Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): New function. * gnu/java/awt/peer/gtk/GtkComponentPeer.java: Declare and call connectJObject and connectSignals instead of connectHooks. * gnu/java/awt/peer/gtk/GtkButtonPeer.java: Declare connectJObject and connectSignals. * gnu/java/awt/peer/gtk/GtkCheckboxPeer.java: Declare connectSignals and not connectHooks. * gnu/java/awt/peer/gtk/GtkTextComponentPeer.java: Ditto. * gnu/java/awt/peer/gtk/GtkFileDialogPeer.java: Declare connectJObject and not connectHooks. * gnu/java/awt/peer/gtk/GtkListPeer.java: Declare connectJObject and connectSignals instead of connectHooks. * gnu/java/awt/peer/gtk/GtkPanelPeer.java: Ditto. * gnu/java/awt/peer/gtk/GtkScrollbarPeer.java: Ditto. * gnu/java/awt/peer/gtk/GtkWindowPeer.java: Ditto. From-SVN: r74536
This commit is contained in:
parent
90ff9ff39c
commit
834b120907
libjava
ChangeLog
gnu/java/awt/peer/gtk
GtkButtonPeer.javaGtkCheckboxPeer.javaGtkComponentPeer.javaGtkFileDialogPeer.javaGtkListPeer.javaGtkPanelPeer.javaGtkScrollbarPeer.javaGtkTextComponentPeer.javaGtkWindowPeer.java
jni/gtk-peer
gnu_java_awt_peer_gtk_GtkButtonPeer.cgnu_java_awt_peer_gtk_GtkCheckboxPeer.cgnu_java_awt_peer_gtk_GtkChoicePeer.cgnu_java_awt_peer_gtk_GtkClipboard.cgnu_java_awt_peer_gtk_GtkComponentPeer.cgnu_java_awt_peer_gtk_GtkEvents.cgnu_java_awt_peer_gtk_GtkFileDialogPeer.cgnu_java_awt_peer_gtk_GtkListPeer.cgnu_java_awt_peer_gtk_GtkMenuItemPeer.cgnu_java_awt_peer_gtk_GtkMenuPeer.cgnu_java_awt_peer_gtk_GtkPanelPeer.cgnu_java_awt_peer_gtk_GtkScrollBarPeer.cgnu_java_awt_peer_gtk_GtkTextComponentPeer.cgnu_java_awt_peer_gtk_GtkWindowPeer.cgtkpeer.h
@ -1,3 +1,85 @@
|
||||
2003-12-08 Fernando Nasser <fnasser@redhat.com>
|
||||
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c (awt_event_handler):
|
||||
Most coded moved to pre_event_handler, with the modifications
|
||||
mentioned below.
|
||||
(pre_event_handler): New function. Called on the Gtk "event" signal.
|
||||
Do not retrieve the jobject from the window property as it is already
|
||||
available as user data in the signal.
|
||||
Do not try and find the grab widget as it is already done by Gtk at
|
||||
this point.
|
||||
Do not search for Window ancestor as Gtk already sends the signal to it.
|
||||
Do not meddle with the activation state of peer widgets on each
|
||||
key press or release.
|
||||
Add CList to the special handling when looking for the focused widget.
|
||||
* jni/gtk-peer/gtkpeer.h: Add declaration for pre_event_handler.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c (connectJObject):
|
||||
New function.
|
||||
(connectSignals): New function.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c (connectHooks):
|
||||
Rename to...
|
||||
(connectSignals): New name. Get rid of NewGlobalRef call.
|
||||
Use g_signal_connect instead of deprecated gtk_signal_connect.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
|
||||
(connect_choice_item_selectable_hook): Use g_signal_connect instead of
|
||||
deprecated gtk_signal_connect.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState): Ditto.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove
|
||||
function.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObject): New
|
||||
function.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): New
|
||||
function.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove
|
||||
function.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObject): New
|
||||
function.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove
|
||||
function.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObject): New
|
||||
function.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): New
|
||||
function.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_old_create): Remove dead
|
||||
code.
|
||||
(item_select): Remove indirection.
|
||||
(item_unselect): Ditto.
|
||||
(connect_selectable_hook): Folded into connectSignals.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove
|
||||
function.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObject): New
|
||||
function.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): New
|
||||
function.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c: Ditto.
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c
|
||||
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks): Remove
|
||||
function.
|
||||
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals): New
|
||||
function.
|
||||
* gnu/java/awt/peer/gtk/GtkComponentPeer.java: Declare and call
|
||||
connectJObject and connectSignals instead of connectHooks.
|
||||
* gnu/java/awt/peer/gtk/GtkButtonPeer.java: Declare connectJObject and
|
||||
connectSignals.
|
||||
* gnu/java/awt/peer/gtk/GtkCheckboxPeer.java: Declare connectSignals
|
||||
and not connectHooks.
|
||||
* gnu/java/awt/peer/gtk/GtkTextComponentPeer.java: Ditto.
|
||||
* gnu/java/awt/peer/gtk/GtkFileDialogPeer.java: Declare connectJObject
|
||||
and not connectHooks.
|
||||
* gnu/java/awt/peer/gtk/GtkListPeer.java: Declare connectJObject and
|
||||
connectSignals instead of connectHooks.
|
||||
* gnu/java/awt/peer/gtk/GtkPanelPeer.java: Ditto.
|
||||
* gnu/java/awt/peer/gtk/GtkScrollbarPeer.java: Ditto.
|
||||
* gnu/java/awt/peer/gtk/GtkWindowPeer.java: Ditto.
|
||||
|
||||
2003-12-09 Michael Koch <konqueror@gmx.de>
|
||||
|
||||
* Makefile.am (nat_headers_install): New variable with header files to
|
||||
|
@ -50,6 +50,8 @@ public class GtkButtonPeer extends GtkComponentPeer
|
||||
implements ButtonPeer
|
||||
{
|
||||
native void create ();
|
||||
public native void connectJObject ();
|
||||
public native void connectSignals ();
|
||||
|
||||
native void gtkSetFont(String name, int style, int size);
|
||||
native void gtkWidgetSetForeground (int red, int green, int blue);
|
||||
|
@ -54,7 +54,7 @@ public class GtkCheckboxPeer extends GtkComponentPeer
|
||||
public native void nativeCreate (GtkCheckboxGroupPeer group,
|
||||
boolean state);
|
||||
public native void nativeSetCheckboxGroup (GtkCheckboxGroupPeer group);
|
||||
public native void connectHooks ();
|
||||
public native void connectSignals ();
|
||||
|
||||
public GtkCheckboxPeer (Checkbox c)
|
||||
{
|
||||
|
@ -99,7 +99,8 @@ public class GtkComponentPeer extends GtkGenericPeer
|
||||
insets = new Insets (0, 0, 0, 0);
|
||||
}
|
||||
|
||||
native void connectHooks ();
|
||||
native void connectJObject ();
|
||||
native void connectSignals ();
|
||||
|
||||
protected GtkComponentPeer (Component awtComponent)
|
||||
{
|
||||
@ -114,7 +115,8 @@ public class GtkComponentPeer extends GtkGenericPeer
|
||||
getArgs (awtComponent, args);
|
||||
args.setArgs (this);
|
||||
|
||||
connectHooks ();
|
||||
connectJObject ();
|
||||
connectSignals ();
|
||||
|
||||
if (awtComponent.getForeground () != null)
|
||||
setForeground (awtComponent.getForeground ());
|
||||
|
@ -58,7 +58,7 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
|
||||
}
|
||||
|
||||
public native void setFile (String file);
|
||||
public native void connectHooks ();
|
||||
public native void connectJObject ();
|
||||
|
||||
public void setFilenameFilter (FilenameFilter filter)
|
||||
{
|
||||
|
@ -51,7 +51,8 @@ public class GtkListPeer extends GtkComponentPeer
|
||||
// native void create (ComponentPeer parent, String [] items, boolean mode);
|
||||
|
||||
native void create ();
|
||||
native void connectHooks ();
|
||||
native void connectJObject ();
|
||||
native void connectSignals ();
|
||||
|
||||
native void getSize (int rows, int dims[]);
|
||||
|
||||
|
@ -45,7 +45,8 @@ public class GtkPanelPeer extends GtkContainerPeer
|
||||
implements PanelPeer
|
||||
{
|
||||
native void create ();
|
||||
native void connectHooks ();
|
||||
native void connectJObject ();
|
||||
native void connectSignals ();
|
||||
|
||||
public GtkPanelPeer (Panel p)
|
||||
{
|
||||
|
@ -60,7 +60,8 @@ public class GtkScrollbarPeer extends GtkComponentPeer
|
||||
int min, int max, int stepIncr, int pageIncr,
|
||||
int visibleAmount);
|
||||
|
||||
native void connectHooks ();
|
||||
native void connectJObject ();
|
||||
native void connectSignals ();
|
||||
|
||||
public GtkScrollbarPeer (Scrollbar s)
|
||||
{
|
||||
|
@ -56,7 +56,7 @@ public class GtkTextComponentPeer extends GtkComponentPeer
|
||||
setText (tc.getText ());
|
||||
}
|
||||
|
||||
public native void connectHooks ();
|
||||
public native void connectSignals ();
|
||||
|
||||
public native int getCaretPosition ();
|
||||
public native void setCaretPosition (int pos);
|
||||
|
@ -93,7 +93,8 @@ public class GtkWindowPeer extends GtkContainerPeer
|
||||
create (GDK_WINDOW_TYPE_HINT_NORMAL, false);
|
||||
}
|
||||
|
||||
native void connectHooks ();
|
||||
native void connectJObject ();
|
||||
native void connectSignals ();
|
||||
|
||||
public GtkWindowPeer (Window window)
|
||||
{
|
||||
|
@ -37,9 +37,11 @@ exception statement from your version. */
|
||||
|
||||
|
||||
#include "gtkpeer.h"
|
||||
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
|
||||
#include "gnu_java_awt_peer_gtk_GtkButtonPeer.h"
|
||||
|
||||
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
GtkWidget *button;
|
||||
@ -51,6 +53,33 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create
|
||||
NSA_SET_PTR (env, obj, button);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectJObject
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
ptr = NSA_GET_PTR (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
gtk_widget_realize (GTK_WIDGET (ptr));
|
||||
|
||||
connect_awt_hook (env, obj, 1, GTK_BUTTON(ptr)->event_window);
|
||||
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_connectSignals
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr = NSA_GET_PTR (env, obj);
|
||||
|
||||
/* Connect the superclass signals. */
|
||||
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkSetFont
|
||||
(JNIEnv *env, jobject obj, jstring name, jint style, jint size)
|
||||
|
@ -104,25 +104,20 @@ Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeCreate
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_connectHooks
|
||||
Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_connectSignals
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr = NSA_GET_PTR (env, obj);
|
||||
jobject peer;
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
peer = (*env)->NewGlobalRef (env, obj);
|
||||
|
||||
/* FIXME: when the widget goes away, we should get rid of the global
|
||||
reference. */
|
||||
gtk_signal_connect (GTK_OBJECT (ptr), "toggled",
|
||||
GTK_SIGNAL_FUNC (item_toggled), peer);
|
||||
g_signal_connect (G_OBJECT (ptr), "toggled",
|
||||
GTK_SIGNAL_FUNC (item_toggled), obj);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
/* Connect the superclass hooks. */
|
||||
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks (env, obj);
|
||||
/* Connect the superclass signals. */
|
||||
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
|
@ -200,6 +200,6 @@ connect_choice_item_selectable_hook (JNIEnv *env, jobject peer_obj,
|
||||
ie->peer_obj = (*env)->NewGlobalRef (env, peer_obj);
|
||||
ie->item_obj = (*env)->NewGlobalRef (env, item_obj);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (item), "activate",
|
||||
g_signal_connect (G_OBJECT (item), "activate",
|
||||
GTK_SIGNAL_FUNC (item_activate), ie);
|
||||
}
|
||||
|
@ -75,16 +75,16 @@ Java_gnu_java_awt_peer_gtk_GtkClipboard_initNativeState (JNIEnv *env,
|
||||
gdk_threads_enter ();
|
||||
clipboard = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT(clipboard), "selection_received",
|
||||
g_signal_connect (G_OBJECT(clipboard), "selection_received",
|
||||
GTK_SIGNAL_FUNC (selection_received), NULL);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT(clipboard), "selection_clear_event",
|
||||
g_signal_connect (G_OBJECT(clipboard), "selection_clear_event",
|
||||
GTK_SIGNAL_FUNC (selection_clear), NULL);
|
||||
|
||||
gtk_selection_add_target (clipboard, GDK_SELECTION_PRIMARY,
|
||||
GDK_TARGET_STRING, 0);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT(clipboard), "selection_get",
|
||||
g_signal_connect (G_OBJECT(clipboard), "selection_get",
|
||||
GTK_SIGNAL_FUNC (selection_get), NULL);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
@ -531,7 +531,7 @@ Java_gnu_java_awt_peer_gtk_GtkComponentPeer_set__Ljava_lang_String_2Ljava_lang_O
|
||||
(*env)->ReleaseStringUTFChars (env, jname, name);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks
|
||||
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectJObject
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
@ -539,12 +539,36 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks
|
||||
ptr = NSA_GET_PTR (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
gtk_widget_realize (GTK_WIDGET (ptr));
|
||||
|
||||
if(GTK_IS_BUTTON(ptr))
|
||||
connect_awt_hook (env, obj, 1, GTK_BUTTON(ptr)->event_window);
|
||||
else
|
||||
connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
|
||||
connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
|
||||
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals
|
||||
(JNIEnv *env, jobject peer_obj)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
ptr = NSA_GET_PTR (env, peer_obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
gtk_widget_realize (GTK_WIDGET (ptr));
|
||||
|
||||
/* FIXME: We could check here if this is a scrolled window with a
|
||||
single child that does not have an associated jobject. This
|
||||
means that it is one of our wrapped widgets like List or TextArea
|
||||
and thus we could connect the signal to the child without having
|
||||
to specialize this method. */
|
||||
|
||||
/* Connect EVENT signal, which happens _before_ any specific signal. */
|
||||
|
||||
g_signal_connect (GTK_OBJECT (ptr), "event",
|
||||
G_CALLBACK (pre_event_handler), peer_obj);
|
||||
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
||||
|
@ -813,21 +813,35 @@ generates_key_typed_event (GdkEvent *event, GtkWidget *source)
|
||||
void
|
||||
awt_event_handler (GdkEvent *event)
|
||||
{
|
||||
jobject *event_obj_ptr = NULL;
|
||||
/* keep synthetic AWT events from being processed recursively */
|
||||
if (event->type & SYNTHETIC_EVENT_MASK && event->type != GDK_NOTHING)
|
||||
{
|
||||
event->type ^= SYNTHETIC_EVENT_MASK;
|
||||
}
|
||||
|
||||
gtk_main_do_event (event);
|
||||
}
|
||||
|
||||
gboolean
|
||||
pre_event_handler (GtkWidget *widget, GdkEvent *event, jobject peer)
|
||||
{
|
||||
GtkWidget *event_widget;
|
||||
static guint32 button_click_time = 0;
|
||||
static GdkWindow *button_window = NULL;
|
||||
static guint button_number = -1;
|
||||
static jint click_count = 1;
|
||||
|
||||
/* keep synthetic AWT events from being processed recursively */
|
||||
if (event->type & SYNTHETIC_EVENT_MASK && event->type != GDK_NOTHING)
|
||||
{
|
||||
event->type ^= SYNTHETIC_EVENT_MASK;
|
||||
gtk_main_do_event (event);
|
||||
return;
|
||||
}
|
||||
/* If it is not a focus change event, the widget must be realized already.
|
||||
If not, ignore the event (Gtk+ will do the same). */
|
||||
if (!(event->type == GDK_FOCUS_CHANGE || GTK_WIDGET_REALIZED(widget)))
|
||||
return FALSE;
|
||||
|
||||
/* Do not handle propagated events. AWT has its own propagation rules */
|
||||
gdk_window_get_user_data (event->any.window, (void **) &event_widget);
|
||||
if (event_widget != widget)
|
||||
return FALSE;
|
||||
|
||||
/* If it is not an input event, let the main loop handle it */
|
||||
/* We only care about input events */
|
||||
if (!(event->type == GDK_BUTTON_PRESS
|
||||
|| event->type == GDK_BUTTON_RELEASE
|
||||
|| event->type == GDK_ENTER_NOTIFY
|
||||
@ -839,12 +853,18 @@ awt_event_handler (GdkEvent *event)
|
||||
|| event->type == GDK_FOCUS_CHANGE
|
||||
|| event->type == GDK_MOTION_NOTIFY))
|
||||
{
|
||||
gtk_main_do_event (event);
|
||||
return;
|
||||
return FALSE;
|
||||
}
|
||||
/* g_print("event %u widget %s peer %p\n",
|
||||
event->type, gtk_widget_get_name (widget), peer); */
|
||||
|
||||
/* If it has no jobject associated we can send no AWT event */
|
||||
if (!peer)
|
||||
return FALSE;
|
||||
|
||||
/* for all input events, which have a window with a jobject attached,
|
||||
send the AWT input event corresponding to the Gtk event off to Java */
|
||||
|
||||
/* Handle input events */
|
||||
|
||||
/* keep track of clickCount ourselves, since the AWT allows more
|
||||
than a triple click to occur */
|
||||
if (event->type == GDK_BUTTON_PRESS)
|
||||
@ -861,376 +881,247 @@ awt_event_handler (GdkEvent *event)
|
||||
button_number = event->button.button;
|
||||
}
|
||||
|
||||
/* for all input events, which have a window with a jobject attached,
|
||||
send the input event off to Java before GTK has a chance to process
|
||||
the event. Note that the jobject may be in the parent for widgets
|
||||
that are always inside a scrolled window, like List */
|
||||
if (!gdk_property_get (event->any.window,
|
||||
gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE),
|
||||
gdk_atom_intern ("CARDINAL", FALSE),
|
||||
0,
|
||||
sizeof (jobject),
|
||||
FALSE,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
(guchar **)&event_obj_ptr))
|
||||
switch (event->type)
|
||||
{
|
||||
/* See if is contained in a scrolled pane */
|
||||
GtkWidget *widget;
|
||||
gdk_window_get_user_data (event->any.window, (void **) &widget);
|
||||
|
||||
if ((gtk_widget_get_parent (widget) != NULL)
|
||||
&& (gtk_widget_get_parent (widget)->window != NULL))
|
||||
{
|
||||
GtkWidget *parent = gtk_widget_get_parent (widget);
|
||||
|
||||
if (GTK_IS_SCROLLED_WINDOW (parent))
|
||||
gdk_property_get (gtk_widget_get_parent (widget)->window,
|
||||
gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE),
|
||||
gdk_atom_intern ("CARDINAL", FALSE),
|
||||
0,
|
||||
sizeof (jobject),
|
||||
FALSE,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
(guchar **)&event_obj_ptr);
|
||||
}
|
||||
}
|
||||
|
||||
if (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);
|
||||
|
||||
ptr = NSA_GET_PTR (gdk_env, *event_obj_ptr);
|
||||
event_widget = GTK_WIDGET(ptr);
|
||||
|
||||
/* Don't need to do this if it is the same widget as we
|
||||
* already got the jobject above.
|
||||
* Also, don't do it for the BUTTON_PRESS as the focus may be
|
||||
* changing and the event widget is the one that must
|
||||
* receive it (again, we have the jobject already)
|
||||
*/
|
||||
if ((event_widget != grab_widget)
|
||||
&& (event->type != GDK_BUTTON_PRESS))
|
||||
{
|
||||
/* If the grab widget is an ancestor of the event widget
|
||||
* then we send the event to the original event widget.
|
||||
* This is the key to implementing modality.
|
||||
* Unless the widget is disabled, in this case the grab
|
||||
* widget still gets the event.
|
||||
* XXX: But the grab widget may not be an ancestor!!!
|
||||
*/
|
||||
if (!GTK_WIDGET_IS_SENSITIVE (event_widget)
|
||||
|| !gtk_widget_is_ancestor (event_widget, 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);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!grab_obj_ptr)
|
||||
grab_obj_ptr = event_obj_ptr;
|
||||
else
|
||||
g_free (event_obj_ptr);
|
||||
|
||||
switch (event->type)
|
||||
{
|
||||
case GDK_BUTTON_PRESS:
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID,
|
||||
AWT_MOUSE_PRESSED,
|
||||
(jlong)event->button.time,
|
||||
state_to_awt_mods (event->button.state) |
|
||||
button_to_awt_mods (event->button.button),
|
||||
(jint)event->button.x,
|
||||
(jint)event->button.y,
|
||||
click_count,
|
||||
(event->button.button == 3) ? JNI_TRUE :
|
||||
JNI_FALSE);
|
||||
|
||||
/* grab_counter++;
|
||||
gdk_pointer_grab (event->any.window,
|
||||
FALSE,
|
||||
GDK_POINTER_MOTION_MASK |
|
||||
GDK_BUTTON_MOTION_MASK |
|
||||
GDK_BUTTON_PRESS_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK |
|
||||
GDK_ENTER_NOTIFY_MASK |
|
||||
GDK_LEAVE_NOTIFY_MASK,
|
||||
NULL,
|
||||
NULL,
|
||||
event->button.time);*/
|
||||
break;
|
||||
case GDK_BUTTON_RELEASE:
|
||||
{
|
||||
int width, height;
|
||||
|
||||
/* only ungrab if no other buttons are pressed down */
|
||||
/* if (--grab_counter == 0)
|
||||
gdk_pointer_ungrab (event->button.time);
|
||||
*/
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postMouseEventID,
|
||||
AWT_MOUSE_RELEASED,
|
||||
(jlong)event->button.time,
|
||||
state_to_awt_mods (event->button.state) |
|
||||
button_to_awt_mods (event->button.button),
|
||||
(jint)event->button.x,
|
||||
(jint)event->button.y,
|
||||
click_count, JNI_FALSE);
|
||||
|
||||
/* check to see if the release occured in the window it was pressed
|
||||
in, and if so, generate an AWT click event */
|
||||
gdk_window_get_size (event->any.window, &width, &height);
|
||||
if (event->button.x >= 0
|
||||
&& event->button.y >= 0
|
||||
&& event->button.x <= width
|
||||
&& event->button.y <= height)
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postMouseEventID,
|
||||
AWT_MOUSE_CLICKED,
|
||||
(jlong)event->button.time,
|
||||
state_to_awt_mods (event->button.state) |
|
||||
case GDK_BUTTON_PRESS:
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer,
|
||||
postMouseEventID,
|
||||
AWT_MOUSE_PRESSED,
|
||||
(jlong)event->button.time,
|
||||
state_to_awt_mods (event->button.state) |
|
||||
button_to_awt_mods (event->button.button),
|
||||
(jint)event->button.x,
|
||||
(jint)event->button.y,
|
||||
click_count, JNI_FALSE);
|
||||
|
||||
}
|
||||
break;
|
||||
case GDK_MOTION_NOTIFY:
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID,
|
||||
AWT_MOUSE_MOVED,
|
||||
(jint)event->button.x,
|
||||
(jint)event->button.y,
|
||||
click_count,
|
||||
(event->button.button == 3) ? JNI_TRUE :
|
||||
JNI_FALSE);
|
||||
break;
|
||||
case GDK_BUTTON_RELEASE:
|
||||
{
|
||||
int width, height;
|
||||
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer,
|
||||
postMouseEventID,
|
||||
AWT_MOUSE_RELEASED,
|
||||
(jlong)event->button.time,
|
||||
state_to_awt_mods (event->button.state) |
|
||||
button_to_awt_mods (event->button.button),
|
||||
(jint)event->button.x,
|
||||
(jint)event->button.y,
|
||||
click_count,
|
||||
JNI_FALSE);
|
||||
|
||||
/* check to see if the release occured in the window it was pressed
|
||||
in, and if so, generate an AWT click event */
|
||||
gdk_window_get_size (event->any.window, &width, &height);
|
||||
if (event->button.x >= 0
|
||||
&& event->button.y >= 0
|
||||
&& event->button.x <= width
|
||||
&& event->button.y <= height)
|
||||
{
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer,
|
||||
postMouseEventID,
|
||||
AWT_MOUSE_CLICKED,
|
||||
(jlong)event->button.time,
|
||||
state_to_awt_mods (event->button.state) |
|
||||
button_to_awt_mods (event->button.button),
|
||||
(jint)event->button.x,
|
||||
(jint)event->button.y,
|
||||
click_count,
|
||||
JNI_FALSE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GDK_MOTION_NOTIFY:
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer, postMouseEventID,
|
||||
AWT_MOUSE_MOVED,
|
||||
(jlong)event->motion.time,
|
||||
state_to_awt_mods (event->motion.state),
|
||||
(jint)event->motion.x,
|
||||
(jint)event->motion.y,
|
||||
0,
|
||||
JNI_FALSE);
|
||||
|
||||
if (event->motion.state & (GDK_BUTTON1_MASK
|
||||
| GDK_BUTTON2_MASK
|
||||
| GDK_BUTTON3_MASK
|
||||
| GDK_BUTTON4_MASK
|
||||
| GDK_BUTTON5_MASK))
|
||||
{
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer,
|
||||
postMouseEventID,
|
||||
AWT_MOUSE_DRAGGED,
|
||||
(jlong)event->motion.time,
|
||||
state_to_awt_mods (event->motion.state),
|
||||
(jint)event->motion.x,
|
||||
(jint)event->motion.y,
|
||||
0, JNI_FALSE);
|
||||
|
||||
if (event->motion.state & (GDK_BUTTON1_MASK
|
||||
| GDK_BUTTON2_MASK
|
||||
| GDK_BUTTON3_MASK
|
||||
| GDK_BUTTON4_MASK
|
||||
| GDK_BUTTON5_MASK))
|
||||
{
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postMouseEventID,
|
||||
AWT_MOUSE_DRAGGED,
|
||||
(jlong)event->motion.time,
|
||||
state_to_awt_mods (event->motion.state),
|
||||
(jint)event->motion.x,
|
||||
(jint)event->motion.y,
|
||||
0, JNI_FALSE);
|
||||
}
|
||||
break;
|
||||
case GDK_ENTER_NOTIFY:
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr, postMouseEventID,
|
||||
AWT_MOUSE_ENTERED,
|
||||
(jlong)event->crossing.time,
|
||||
state_to_awt_mods (event->crossing.state),
|
||||
(jint)event->crossing.x,
|
||||
(jint)event->crossing.y,
|
||||
0, JNI_FALSE);
|
||||
break;
|
||||
case GDK_LEAVE_NOTIFY:
|
||||
if (event->crossing.mode == GDK_CROSSING_NORMAL)
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postMouseEventID,
|
||||
AWT_MOUSE_EXITED,
|
||||
(jlong)event->crossing.time,
|
||||
0,
|
||||
JNI_FALSE);
|
||||
}
|
||||
break;
|
||||
case GDK_ENTER_NOTIFY:
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer, postMouseEventID,
|
||||
AWT_MOUSE_ENTERED,
|
||||
(jlong)event->crossing.time,
|
||||
state_to_awt_mods (event->crossing.state),
|
||||
(jint)event->crossing.x,
|
||||
(jint)event->crossing.y,
|
||||
0,
|
||||
JNI_FALSE);
|
||||
break;
|
||||
case GDK_LEAVE_NOTIFY:
|
||||
if (event->crossing.mode == GDK_CROSSING_NORMAL)
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer,
|
||||
postMouseEventID,
|
||||
AWT_MOUSE_EXITED,
|
||||
(jlong)event->crossing.time,
|
||||
state_to_awt_mods (event->crossing.state),
|
||||
(jint)event->crossing.x,
|
||||
(jint)event->crossing.y,
|
||||
0, JNI_FALSE);
|
||||
break;
|
||||
case GDK_CONFIGURE:
|
||||
{
|
||||
GtkWidget *widget;
|
||||
(jint)event->crossing.x,
|
||||
(jint)event->crossing.y,
|
||||
0,
|
||||
JNI_FALSE);
|
||||
break;
|
||||
case GDK_CONFIGURE:
|
||||
{
|
||||
/* GtkWidget *widget;
|
||||
|
||||
gdk_window_get_user_data (event->any.window, (void **) &widget);
|
||||
gdk_window_get_user_data (event->any.window, (void **) &widget); */
|
||||
|
||||
if (widget && GTK_WIDGET_TOPLEVEL (widget))
|
||||
{
|
||||
gint top, left, right, bottom;
|
||||
|
||||
/* Configure events are not posted to the AWT event
|
||||
queue, and as such, the gdk/gtk peer functions will
|
||||
be called back before postConfigureEvent
|
||||
returns. */
|
||||
gdk_threads_leave ();
|
||||
|
||||
/* FIXME: hard-code these values for now. */
|
||||
top = 20;
|
||||
left = 6;
|
||||
bottom = 6;
|
||||
right = 6;
|
||||
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postConfigureEventID,
|
||||
(jint) event->configure.x,
|
||||
(jint) event->configure.y,
|
||||
(jint) event->configure.width,
|
||||
(jint) event->configure.height,
|
||||
(jint) top,
|
||||
(jint) left,
|
||||
(jint) bottom,
|
||||
(jint) right);
|
||||
gdk_threads_enter ();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GDK_EXPOSE:
|
||||
if (widget && GTK_WIDGET_TOPLEVEL (widget))
|
||||
{
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postExposeEventID,
|
||||
(jint)event->expose.area.x,
|
||||
(jint)event->expose.area.y,
|
||||
(jint)event->expose.area.width,
|
||||
(jint)event->expose.area.height);
|
||||
gint top, left, right, bottom;
|
||||
|
||||
/* Configure events are not posted to the AWT event
|
||||
queue, and as such, the gdk/gtk peer functions will
|
||||
be called back before postConfigureEvent
|
||||
returns. */
|
||||
gdk_threads_leave ();
|
||||
|
||||
/* FIXME: hard-code these values for now. */
|
||||
top = 20;
|
||||
left = 6;
|
||||
bottom = 6;
|
||||
right = 6;
|
||||
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer,
|
||||
postConfigureEventID,
|
||||
(jint) event->configure.x,
|
||||
(jint) event->configure.y,
|
||||
(jint) event->configure.width,
|
||||
(jint) event->configure.height,
|
||||
(jint) top,
|
||||
(jint) left,
|
||||
(jint) bottom,
|
||||
(jint) right);
|
||||
gdk_threads_enter ();
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case GDK_EXPOSE:
|
||||
{
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer,
|
||||
postExposeEventID,
|
||||
(jint)event->expose.area.x,
|
||||
(jint)event->expose.area.y,
|
||||
(jint)event->expose.area.width,
|
||||
(jint)event->expose.area.height);
|
||||
}
|
||||
break;
|
||||
case GDK_FOCUS_CHANGE:
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer,
|
||||
postFocusEventID,
|
||||
(jint) (event->focus_change.in) ?
|
||||
AWT_FOCUS_GAINED : AWT_FOCUS_LOST,
|
||||
JNI_FALSE);
|
||||
break;
|
||||
case GDK_KEY_PRESS:
|
||||
case GDK_KEY_RELEASE:
|
||||
{
|
||||
GtkWindow *window;
|
||||
GdkWindow *obj_window;
|
||||
jobject *focus_obj_ptr = NULL;
|
||||
|
||||
case GDK_KEY_PRESS:
|
||||
/* A widget with a grab will get key events */
|
||||
if (!GTK_IS_WINDOW (widget))
|
||||
*focus_obj_ptr = peer;
|
||||
else
|
||||
{
|
||||
GtkWidget *widget;
|
||||
GtkWindow *window;
|
||||
/* The window to which the Java peer is attached. */
|
||||
GdkWindow *obj_window;
|
||||
/* Check if we have an enabled focused widget in this window.
|
||||
If not don't handle the event. */
|
||||
window = GTK_WINDOW (widget);
|
||||
if (!window->focus_widget
|
||||
|| !GTK_WIDGET_IS_SENSITIVE (window->focus_widget)
|
||||
|| !window->focus_widget->window)
|
||||
return FALSE;
|
||||
|
||||
/* TextArea peers are attached to the scrolled window
|
||||
that contains the GtkTextView, not to the text view
|
||||
itself. Same for List. */
|
||||
if (GTK_IS_TEXT_VIEW (window->focus_widget)
|
||||
|| GTK_IS_CLIST (window->focus_widget))
|
||||
{
|
||||
obj_window = gtk_widget_get_parent (window->focus_widget)->window;
|
||||
}
|
||||
else
|
||||
obj_window = window->focus_widget->window;
|
||||
|
||||
gdk_window_get_user_data (event->any.window, (void **) &widget);
|
||||
gdk_property_get (obj_window,
|
||||
gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE),
|
||||
gdk_atom_intern ("CARDINAL", FALSE),
|
||||
0,
|
||||
sizeof (jobject),
|
||||
FALSE,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
(guchar **)&focus_obj_ptr);
|
||||
|
||||
window = GTK_WINDOW (gtk_widget_get_ancestor (widget,
|
||||
GTK_TYPE_WINDOW));
|
||||
if (window
|
||||
&& GTK_WIDGET_IS_SENSITIVE (window)
|
||||
&& window->focus_widget
|
||||
&& GTK_WIDGET_IS_SENSITIVE (window->focus_widget)
|
||||
&& window->focus_widget->window)
|
||||
{
|
||||
gtk_widget_activate (window->focus_widget);
|
||||
/* If the window has no jobject attached we can't send anything */
|
||||
if (!focus_obj_ptr)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* TextArea peers are attached to the scrolled window
|
||||
that contains the GtkTextView, not to the text view
|
||||
itself. */
|
||||
if (GTK_IS_TEXT_VIEW (window->focus_widget)
|
||||
|| GTK_IS_CLIST (window->focus_widget))
|
||||
obj_window = gtk_widget_get_parent (window->focus_widget)->window;
|
||||
else
|
||||
obj_window = window->focus_widget->window;
|
||||
|
||||
gdk_property_get (obj_window,
|
||||
gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE),
|
||||
gdk_atom_intern ("CARDINAL", FALSE),
|
||||
0,
|
||||
sizeof (jobject),
|
||||
FALSE,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
(guchar **)&grab_obj_ptr);
|
||||
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postKeyEventID,
|
||||
(jint) AWT_KEY_PRESSED,
|
||||
(jlong) event->key.time,
|
||||
keyevent_state_to_awt_mods (event),
|
||||
keysym_to_awt_keycode (event),
|
||||
keyevent_to_awt_keychar (event),
|
||||
keysym_to_awt_keylocation (event));
|
||||
|
||||
if (generates_key_typed_event (event, window->focus_widget))
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postKeyEventID,
|
||||
(jint) AWT_KEY_TYPED,
|
||||
(jlong) event->key.time,
|
||||
state_to_awt_mods (event->key.state),
|
||||
VK_UNDEFINED,
|
||||
keyevent_to_awt_keychar (event),
|
||||
AWT_KEY_LOCATION_UNKNOWN);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GDK_KEY_RELEASE:
|
||||
if (event->type == GDK_KEY_PRESS)
|
||||
{
|
||||
GtkWidget *widget;
|
||||
GtkWindow *window;
|
||||
GdkWindow *obj_window;
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *focus_obj_ptr,
|
||||
postKeyEventID,
|
||||
(jint) AWT_KEY_PRESSED,
|
||||
(jlong) event->key.time,
|
||||
keyevent_state_to_awt_mods (event),
|
||||
keysym_to_awt_keycode (event),
|
||||
keyevent_to_awt_keychar (event),
|
||||
keysym_to_awt_keylocation (event));
|
||||
|
||||
gdk_window_get_user_data (event->any.window, (void **) &widget);
|
||||
|
||||
window = GTK_WINDOW (gtk_widget_get_ancestor (widget,
|
||||
GTK_TYPE_WINDOW));
|
||||
if (window
|
||||
&& GTK_WIDGET_IS_SENSITIVE (window)
|
||||
&& window->focus_widget
|
||||
&& GTK_WIDGET_IS_SENSITIVE (window->focus_widget)
|
||||
&& window->focus_widget->window)
|
||||
{
|
||||
gtk_widget_activate (window->focus_widget);
|
||||
|
||||
if (GTK_IS_TEXT_VIEW (window->focus_widget)
|
||||
|| GTK_IS_CLIST (window->focus_widget))
|
||||
obj_window = gtk_widget_get_parent (window->focus_widget)->window;
|
||||
else
|
||||
obj_window = window->focus_widget->window;
|
||||
|
||||
gdk_property_get (obj_window,
|
||||
gdk_atom_intern ("_GNU_GTKAWT_ADDR", FALSE),
|
||||
gdk_atom_intern ("CARDINAL", FALSE),
|
||||
0,
|
||||
sizeof (jobject),
|
||||
FALSE,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
(guchar **)&grab_obj_ptr);
|
||||
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postKeyEventID,
|
||||
(jint) AWT_KEY_RELEASED,
|
||||
(jlong) event->key.time,
|
||||
keyevent_state_to_awt_mods (event),
|
||||
keysym_to_awt_keycode (event),
|
||||
keyevent_to_awt_keychar (event),
|
||||
keysym_to_awt_keylocation (event));
|
||||
if (generates_key_typed_event (event, window->focus_widget))
|
||||
{
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *focus_obj_ptr,
|
||||
postKeyEventID,
|
||||
(jint) AWT_KEY_TYPED,
|
||||
(jlong) event->key.time,
|
||||
state_to_awt_mods (event->key.state),
|
||||
VK_UNDEFINED,
|
||||
keyevent_to_awt_keychar (event),
|
||||
AWT_KEY_LOCATION_UNKNOWN);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case GDK_FOCUS_CHANGE:
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *grab_obj_ptr,
|
||||
postFocusEventID,
|
||||
(jint) (event->focus_change.in) ?
|
||||
AWT_FOCUS_GAINED : AWT_FOCUS_LOST,
|
||||
JNI_FALSE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
g_free (grab_obj_ptr);
|
||||
else /* GDK_KEY_RELEASE */
|
||||
{
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *focus_obj_ptr,
|
||||
postKeyEventID,
|
||||
(jint) AWT_KEY_RELEASED,
|
||||
(jlong) event->key.time,
|
||||
keyevent_state_to_awt_mods (event),
|
||||
keysym_to_awt_keycode (event),
|
||||
keyevent_to_awt_keychar (event),
|
||||
keysym_to_awt_keylocation (event));
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
gtk_main_do_event (event);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1285,3 +1176,4 @@ connect_awt_hook (JNIEnv *env, jobject peer_obj, int nwindows, ...)
|
||||
}
|
||||
va_end (ap);
|
||||
}
|
||||
|
||||
|
@ -57,15 +57,15 @@ Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_create
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_connectHooks
|
||||
Java_gnu_java_awt_peer_gtk_GtkFileDialogPeer_connectJObject
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr = NSA_GET_PTR (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
/* NOTE: we don't call the superclass connect method here. */
|
||||
gtk_widget_realize (GTK_WIDGET (ptr));
|
||||
|
||||
connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
@ -37,10 +37,18 @@ exception statement from your version. */
|
||||
|
||||
|
||||
#include "gtkpeer.h"
|
||||
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
|
||||
#include "gnu_java_awt_peer_gtk_GtkListPeer.h"
|
||||
|
||||
static void
|
||||
connect_selectable_hook (JNIEnv *env, jobject peer_obj, GtkCList *list);
|
||||
static void item_select (GtkCList *list __attribute__((unused)),
|
||||
int row, int col __attribute__((unused)),
|
||||
GdkEventButton *event __attribute__((unused)),
|
||||
jobject peer_obj);
|
||||
static void item_unselect (GtkCList *list __attribute__((unused)),
|
||||
int row,
|
||||
int col __attribute__((unused)),
|
||||
GdkEventButton *event __attribute__((unused)),
|
||||
jobject peer_obj);
|
||||
|
||||
#define CLIST_FROM_SW(obj) (GTK_CLIST(GTK_SCROLLED_WINDOW (obj)->container.child))
|
||||
|
||||
@ -64,7 +72,7 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_create
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkListPeer_connectHooks
|
||||
Java_gnu_java_awt_peer_gtk_GtkListPeer_connectJObject
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
@ -72,9 +80,44 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_connectHooks
|
||||
ptr = NSA_GET_PTR (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
gtk_widget_realize (GTK_WIDGET (ptr));
|
||||
connect_selectable_hook (env, obj, CLIST_FROM_SW (ptr));
|
||||
|
||||
connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
|
||||
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals
|
||||
(JNIEnv *env, jobject peer_obj)
|
||||
{
|
||||
GtkCList *list;
|
||||
void *ptr;
|
||||
|
||||
ptr = NSA_GET_PTR (env, peer_obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
gtk_widget_realize (GTK_WIDGET (ptr));
|
||||
|
||||
/* connect selectable hook */
|
||||
|
||||
list = CLIST_FROM_SW (ptr);
|
||||
|
||||
g_signal_connect (G_OBJECT (list), "select_row",
|
||||
GTK_SIGNAL_FUNC (item_select), peer_obj);
|
||||
|
||||
g_signal_connect (G_OBJECT (list), "unselect_row",
|
||||
GTK_SIGNAL_FUNC (item_unselect), peer_obj);
|
||||
|
||||
/* Connect the superclass signals. */
|
||||
/* FIXME: Cannot do that here or it will get the sw and not the list.
|
||||
We must a generic way of doing this. */
|
||||
/* Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, peer_obj); */
|
||||
g_signal_connect (GTK_OBJECT (list), "event",
|
||||
G_CALLBACK (pre_event_handler), peer_obj);
|
||||
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
||||
@ -108,58 +151,6 @@ Java_gnu_java_awt_peer_gtk_GtkListPeer_append
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkListPeer_old_create
|
||||
(JNIEnv *env, jobject obj, jobject parent_obj,
|
||||
jobjectArray items, jboolean mode)
|
||||
{
|
||||
GtkWidget *list, *sw, *parent;
|
||||
jsize count, i;
|
||||
|
||||
parent = NSA_GET_PTR (env, parent_obj);
|
||||
|
||||
count = (*env)->GetArrayLength (env, items);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
list = gtk_clist_new (1);
|
||||
gtk_widget_show (list);
|
||||
|
||||
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||
set_parent (sw, GTK_CONTAINER (parent));
|
||||
gtk_widget_realize (sw);
|
||||
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
gtk_container_add (GTK_CONTAINER (sw), list);
|
||||
|
||||
connect_selectable_hook (env, obj, GTK_CLIST (list));
|
||||
connect_awt_hook (env, obj, 1, list->window);
|
||||
|
||||
gtk_clist_set_selection_mode (GTK_CLIST (list),
|
||||
mode ? GTK_SELECTION_MULTIPLE :
|
||||
GTK_SELECTION_SINGLE);
|
||||
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
const char *text;
|
||||
jobject item;
|
||||
|
||||
item = (*env)->GetObjectArrayElement (env, items, i);
|
||||
|
||||
text = (*env)->GetStringUTFChars (env, item, NULL);
|
||||
gtk_clist_append (GTK_CLIST (list), (char **)&text);
|
||||
(*env)->ReleaseStringUTFChars (env, item, text);
|
||||
}
|
||||
|
||||
gtk_clist_columns_autosize (GTK_CLIST (list));
|
||||
gdk_threads_leave ();
|
||||
|
||||
NSA_SET_PTR (env, obj, sw);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkListPeer_add
|
||||
(JNIEnv *env, jobject obj, jstring text, jint index)
|
||||
@ -326,9 +317,9 @@ static void
|
||||
item_select (GtkCList *list __attribute__((unused)),
|
||||
int row, int col __attribute__((unused)),
|
||||
GdkEventButton *event __attribute__((unused)),
|
||||
jobject *peer_obj)
|
||||
jobject peer_obj)
|
||||
{
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *peer_obj,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer_obj,
|
||||
postListItemEventID,
|
||||
row,
|
||||
(jint) AWT_ITEM_SELECTED);
|
||||
@ -339,25 +330,11 @@ item_unselect (GtkCList *list __attribute__((unused)),
|
||||
int row,
|
||||
int col __attribute__((unused)),
|
||||
GdkEventButton *event __attribute__((unused)),
|
||||
jobject *peer_obj)
|
||||
jobject peer_obj)
|
||||
{
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, *peer_obj,
|
||||
(*gdk_env)->CallVoidMethod (gdk_env, peer_obj,
|
||||
postListItemEventID,
|
||||
row,
|
||||
(jint) AWT_ITEM_DESELECTED);
|
||||
}
|
||||
|
||||
static void
|
||||
connect_selectable_hook (JNIEnv *env, jobject peer_obj, GtkCList *list)
|
||||
{
|
||||
jobject *obj;
|
||||
|
||||
obj = (jobject *) malloc (sizeof (jobject));
|
||||
*obj = (*env)->NewGlobalRef (env, peer_obj);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (list), "select_row",
|
||||
GTK_SIGNAL_FUNC (item_select), obj);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (list), "unselect_row",
|
||||
GTK_SIGNAL_FUNC (item_unselect), obj);
|
||||
}
|
||||
|
@ -109,6 +109,6 @@ connect_activate_hook (JNIEnv *env, jobject peer_obj, GtkMenuItem *item)
|
||||
obj = (jobject *) malloc (sizeof (jobject));
|
||||
*obj = (*env)->NewGlobalRef (env, peer_obj);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (item), "activate",
|
||||
g_signal_connect (G_OBJECT (item), "activate",
|
||||
GTK_SIGNAL_FUNC (item_activate), obj);
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkMenuPeer_setupAccelGroup
|
||||
if (GTK_WIDGET_REALIZED (GTK_WIDGET (ptr1)))
|
||||
accel_attach (GTK_MENU_ITEM (ptr1), NULL);
|
||||
else
|
||||
gtk_signal_connect (GTK_OBJECT (ptr1),
|
||||
g_signal_connect (G_OBJECT (ptr1),
|
||||
"realize",
|
||||
GTK_SIGNAL_FUNC (accel_attach),
|
||||
NULL);
|
||||
|
@ -37,6 +37,7 @@ exception statement from your version. */
|
||||
|
||||
|
||||
#include "gtkpeer.h"
|
||||
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
|
||||
#include "gnu_java_awt_peer_gtk_GtkPanelPeer.h"
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
@ -61,7 +62,7 @@ struct _GtkLayoutChild {
|
||||
};
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectHooks
|
||||
Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectJObject
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
@ -72,9 +73,26 @@ Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectHooks
|
||||
gtk_widget_realize (GTK_WIDGET (ptr));
|
||||
connect_awt_hook (env, obj, 1, GTK_LAYOUT (ptr)->bin_window);
|
||||
|
||||
/* gtk_signal_connect (GTK_OBJECT (ptr), "size_request", GTK_SIGNAL_FUNC (sr), */
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkPanelPeer_connectSignals
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
ptr = NSA_GET_PTR (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
gtk_widget_realize (GTK_WIDGET (ptr));
|
||||
|
||||
/* g_signal_connect (G_OBJECT (ptr), "size_request", GTK_SIGNAL_FUNC (sr), */
|
||||
/* NULL); */
|
||||
gdk_threads_leave ();
|
||||
|
||||
/* Connect the superclass signals. */
|
||||
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -37,6 +37,7 @@ exception statement from your version. */
|
||||
|
||||
|
||||
#include "gtkpeer.h"
|
||||
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
|
||||
#include "gnu_java_awt_peer_gtk_GtkScrollbarPeer.h"
|
||||
|
||||
struct range_scrollbar
|
||||
@ -120,7 +121,24 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectHooks
|
||||
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectJObject
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
ptr = NSA_GET_PTR (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
gtk_widget_realize (GTK_WIDGET (ptr));
|
||||
|
||||
connect_awt_hook (env, obj, 1, GTK_SCROLLBAR (ptr)->range);
|
||||
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
@ -136,17 +154,19 @@ Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectHooks
|
||||
rs->range = GTK_RANGE (ptr);
|
||||
rs->scrollbar = (jobject *) malloc (sizeof (jobject));
|
||||
*(rs->scrollbar) = (*env)->NewGlobalRef (env, obj);
|
||||
gtk_signal_connect (GTK_OBJECT (GTK_RANGE (ptr)),
|
||||
|
||||
g_signal_connect (G_OBJECT (GTK_RANGE (ptr)),
|
||||
"move-slider",
|
||||
GTK_SIGNAL_FUNC (post_adjustment_event), rs);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (GTK_RANGE (ptr)),
|
||||
g_signal_connect (G_OBJECT (GTK_RANGE (ptr)),
|
||||
"value-changed",
|
||||
GTK_SIGNAL_FUNC (post_change_event), rs);
|
||||
|
||||
|
||||
connect_awt_hook (env, obj, 1, GTK_SCROLLBAR (ptr)->range);
|
||||
gdk_threads_leave ();
|
||||
|
||||
/* Connect the superclass signals. */
|
||||
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
|
||||
}
|
||||
|
||||
|
||||
|
@ -48,7 +48,7 @@ static void textcomponent_changed_cb (GtkEditable *editable,
|
||||
jobject peer);
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_connectHooks
|
||||
Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_connectSignals
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
@ -66,6 +66,11 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_connectHooks
|
||||
|
||||
g_signal_connect (GTK_EDITABLE (ptr), "changed",
|
||||
G_CALLBACK (textcomponent_changed_cb), obj);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
/* Connect the superclass signals. */
|
||||
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -87,13 +92,18 @@ Java_gnu_java_awt_peer_gtk_GtkTextComponentPeer_connectHooks
|
||||
if (buf)
|
||||
g_signal_connect (buf, "changed",
|
||||
G_CALLBACK (textcomponent_changed_cb), obj);
|
||||
|
||||
/* Connect the superclass signals. */
|
||||
/* FIXME: Cannot do that here or it will get the sw and not the list.
|
||||
We must a generic way of doing this. */
|
||||
/* Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env,
|
||||
peer_obj); */
|
||||
g_signal_connect (GTK_OBJECT (text), "event",
|
||||
G_CALLBACK (pre_event_handler), obj);
|
||||
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
}
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
/* Connect the superclass hooks. */
|
||||
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectHooks (env, obj);
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
|
@ -37,6 +37,7 @@ exception statement from your version. */
|
||||
|
||||
|
||||
#include "gtkpeer.h"
|
||||
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
|
||||
#include "gnu_java_awt_peer_gtk_GtkWindowPeer.h"
|
||||
#include "gnu_java_awt_peer_gtk_GtkFramePeer.h"
|
||||
#include <gdk/gdkprivate.h>
|
||||
@ -116,7 +117,8 @@ 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_nativeSetVisible
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible
|
||||
(JNIEnv *env, jobject obj, jboolean visible)
|
||||
{
|
||||
void *ptr;
|
||||
@ -135,7 +137,8 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectHooks
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectJObject
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
@ -169,6 +172,21 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectHooks
|
||||
|
||||
connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window);
|
||||
|
||||
gdk_threads_leave ();
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectSignals
|
||||
(JNIEnv *env, jobject obj)
|
||||
{
|
||||
void *ptr;
|
||||
|
||||
ptr = NSA_GET_PTR (env, obj);
|
||||
|
||||
gdk_threads_enter ();
|
||||
|
||||
gtk_widget_realize (ptr);
|
||||
|
||||
/* Connect signals for window event support. */
|
||||
g_signal_connect (G_OBJECT (ptr), "delete-event",
|
||||
G_CALLBACK (window_delete_cb), obj);
|
||||
@ -189,6 +207,9 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_connectHooks
|
||||
G_CALLBACK (window_window_state_cb), obj);
|
||||
|
||||
gdk_threads_leave ();
|
||||
|
||||
/* Connect the superclass signals. */
|
||||
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -392,6 +392,10 @@ extern GtkWindowGroup *global_gtk_window_group;
|
||||
|
||||
void awt_event_handler (GdkEvent *event);
|
||||
|
||||
gboolean pre_event_handler (GtkWidget *widget,
|
||||
GdkEvent *event,
|
||||
jobject peer);
|
||||
|
||||
void connect_awt_hook (JNIEnv *env, jobject peer_obj, int nwindows, ...);
|
||||
|
||||
void set_visible (GtkWidget *widget, jboolean visible);
|
||||
|
Loading…
x
Reference in New Issue
Block a user