260 |
static jmethodID postInsetsChangedEventID; |
static jmethodID postInsetsChangedEventID; |
261 |
static jmethodID windowGetWidthID; |
static jmethodID windowGetWidthID; |
262 |
static jmethodID windowGetHeightID; |
static jmethodID windowGetHeightID; |
|
static jmethodID setBoundsCallbackID; |
|
263 |
|
|
264 |
void |
void |
265 |
cp_gtk_window_init_jni (void) |
cp_gtk_window_init_jni (void) |
266 |
{ |
{ |
|
jclass window; |
|
267 |
jclass gtkwindowpeer; |
jclass gtkwindowpeer; |
268 |
|
|
|
window = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(), "java/awt/Window"); |
|
|
|
|
|
setBoundsCallbackID = (*cp_gtk_gdk_env())->GetMethodID (cp_gtk_gdk_env(), window, |
|
|
"setBoundsCallback", |
|
|
"(IIII)V"); |
|
|
|
|
269 |
gtkwindowpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(), |
gtkwindowpeer = (*cp_gtk_gdk_env())->FindClass (cp_gtk_gdk_env(), |
270 |
"gnu/java/awt/peer/gtk/GtkWindowPeer"); |
"gnu/java/awt/peer/gtk/GtkWindowPeer"); |
271 |
|
|
294 |
} |
} |
295 |
|
|
296 |
/* Get the first keyval in the keymap for this event's keycode. The |
/* Get the first keyval in the keymap for this event's keycode. The |
297 |
first keyval corresponds roughly to Java's notion of a virtual |
first keyval corresponds roughly to Java's notion of a virtual key. |
298 |
key. Returns the uppercase version of the first keyval. */ |
Returns the uppercase version of the first keyval or -1 if no |
299 |
static guint |
keyval was found for the given hardware keycode. */ |
300 |
|
static gint |
301 |
get_first_keyval_from_keymap (GdkEventKey *event) |
get_first_keyval_from_keymap (GdkEventKey *event) |
302 |
{ |
{ |
303 |
guint keyval; |
guint keyval; |
310 |
&keyvals, |
&keyvals, |
311 |
&n_entries)) |
&n_entries)) |
312 |
{ |
{ |
313 |
g_warning ("No keyval found for hardware keycode %d\n", |
/* No keyval found for hardware keycode */ |
314 |
event->hardware_keycode); |
return -1; |
|
/* Try to recover by using the keyval in the event structure. */ |
|
|
keyvals = &(event->keyval); |
|
315 |
} |
} |
316 |
keyval = keyvals[0]; |
keyval = keyvals[0]; |
317 |
g_free (keyvals); |
g_free (keyvals); |
319 |
return gdk_keyval_to_upper (keyval); |
return gdk_keyval_to_upper (keyval); |
320 |
} |
} |
321 |
|
|
322 |
|
/* Return the AWT key code for the given keysym or -1 if no keyval was |
323 |
|
found for the given hardware keycode. */ |
324 |
#ifdef __GNUC__ |
#ifdef __GNUC__ |
325 |
__inline |
__inline |
326 |
#endif |
#endif |
327 |
static jint |
static jint |
328 |
keysym_to_awt_keycode (GdkEventKey *event) |
keysym_to_awt_keycode (GdkEventKey *event) |
329 |
{ |
{ |
330 |
guint ukeyval; |
gint ukeyval; |
331 |
guint state; |
guint state; |
332 |
|
|
333 |
ukeyval = get_first_keyval_from_keymap (event); |
ukeyval = get_first_keyval_from_keymap (event); |
334 |
|
|
335 |
|
if (ukeyval < 0) |
336 |
|
return -1; |
337 |
|
|
338 |
state = event->state; |
state = event->state; |
339 |
|
|
340 |
/* VK_A through VK_Z */ |
/* VK_A through VK_Z */ |
733 |
} |
} |
734 |
} |
} |
735 |
|
|
736 |
|
/* Return the AWT key location code for the given keysym or -1 if no |
737 |
|
keyval was found for the given hardware keycode. */ |
738 |
static jint |
static jint |
739 |
keysym_to_awt_keylocation (GdkEventKey *event) |
keysym_to_awt_keylocation (GdkEventKey *event) |
740 |
{ |
{ |
741 |
guint ukeyval; |
gint ukeyval; |
742 |
|
|
743 |
ukeyval = get_first_keyval_from_keymap (event); |
ukeyval = get_first_keyval_from_keymap (event); |
744 |
|
|
745 |
|
if (ukeyval < 0) |
746 |
|
return -1; |
747 |
|
|
748 |
/* VK_A through VK_Z */ |
/* VK_A through VK_Z */ |
749 |
if (ukeyval >= GDK_A && ukeyval <= GDK_Z) |
if (ukeyval >= GDK_A && ukeyval <= GDK_Z) |
750 |
return AWT_KEY_LOCATION_STANDARD; |
return AWT_KEY_LOCATION_STANDARD; |
1054 |
GdkEventConfigure *event, |
GdkEventConfigure *event, |
1055 |
jobject peer) |
jobject peer) |
1056 |
{ |
{ |
|
gdk_threads_leave (); |
|
|
|
|
1057 |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
1058 |
postConfigureEventID, |
postConfigureEventID, |
1059 |
(jint) event->x, |
(jint) event->x, |
1061 |
(jint) event->width, |
(jint) event->width, |
1062 |
(jint) event->height); |
(jint) event->height); |
1063 |
|
|
|
gdk_threads_enter (); |
|
|
|
|
1064 |
return FALSE; |
return FALSE; |
1065 |
} |
} |
1066 |
|
|
1069 |
GdkEventKey *event, |
GdkEventKey *event, |
1070 |
jobject peer) |
jobject peer) |
1071 |
{ |
{ |
1072 |
gdk_threads_leave (); |
jint keycode; |
1073 |
|
jint keylocation; |
1074 |
|
|
1075 |
|
keycode = keysym_to_awt_keycode (event); |
1076 |
|
keylocation = keysym_to_awt_keylocation (event); |
1077 |
|
|
1078 |
|
/* Return immediately if an error occurs translating a hardware |
1079 |
|
keycode to a keyval. */ |
1080 |
|
if (keycode < 0 || keylocation < 0) |
1081 |
|
return TRUE; |
1082 |
|
|
1083 |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
1084 |
postKeyEventID, |
postKeyEventID, |
1085 |
(jint) AWT_KEY_PRESSED, |
(jint) AWT_KEY_PRESSED, |
1086 |
(jlong) event->time, |
(jlong) event->time, |
1087 |
keyevent_state_to_awt_mods (event), |
keyevent_state_to_awt_mods (event), |
1088 |
keysym_to_awt_keycode (event), |
keycode, |
1089 |
keyevent_to_awt_keychar (event), |
keyevent_to_awt_keychar (event), |
1090 |
keysym_to_awt_keylocation (event)); |
keylocation); |
|
|
|
|
gdk_threads_enter (); |
|
1091 |
|
|
1092 |
/* FIXME: generation of key typed events needs to be moved |
/* FIXME: generation of key typed events needs to be moved |
1093 |
to GtkComponentPeer.postKeyEvent. If the key in a key |
to GtkComponentPeer.postKeyEvent. If the key in a key |
1103 |
GdkEventKey *event, |
GdkEventKey *event, |
1104 |
jobject peer) |
jobject peer) |
1105 |
{ |
{ |
1106 |
gdk_threads_leave (); |
jint keycode; |
1107 |
|
jint keylocation; |
1108 |
|
|
1109 |
|
keycode = keysym_to_awt_keycode (event); |
1110 |
|
keylocation = keysym_to_awt_keylocation (event); |
1111 |
|
|
1112 |
|
/* Return immediately if an error occurs translating a hardware |
1113 |
|
keycode to a keyval. */ |
1114 |
|
if (keycode < 0 || keylocation < 0) |
1115 |
|
return TRUE; |
1116 |
|
|
1117 |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
1118 |
postKeyEventID, |
postKeyEventID, |
1119 |
(jint) AWT_KEY_RELEASED, |
(jint) AWT_KEY_RELEASED, |
1120 |
(jlong) event->time, |
(jlong) event->time, |
1121 |
keyevent_state_to_awt_mods (event), |
keyevent_state_to_awt_mods (event), |
1122 |
keysym_to_awt_keycode (event), |
keycode, |
1123 |
keyevent_to_awt_keychar (event), |
keyevent_to_awt_keychar (event), |
1124 |
keysym_to_awt_keylocation (event)); |
keylocation); |
|
|
|
|
gdk_threads_enter (); |
|
1125 |
|
|
1126 |
return TRUE; |
return TRUE; |
1127 |
} |
} |
1230 |
} |
} |
1231 |
|
|
1232 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
1233 |
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetVisible |
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNative |
1234 |
(JNIEnv *env, jobject obj, jboolean visible) |
(JNIEnv *env, jobject obj, jboolean visible) |
1235 |
{ |
{ |
|
void *ptr; |
|
|
|
|
1236 |
gdk_threads_enter (); |
gdk_threads_enter (); |
1237 |
|
|
1238 |
|
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNativeUnlocked |
1239 |
|
(env, obj, visible); |
1240 |
|
|
1241 |
|
gdk_flush (); |
1242 |
|
|
1243 |
|
gdk_threads_leave (); |
1244 |
|
} |
1245 |
|
|
1246 |
|
JNIEXPORT void JNICALL |
1247 |
|
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisibleNativeUnlocked |
1248 |
|
(JNIEnv *env, jobject obj, jboolean visible) |
1249 |
|
{ |
1250 |
|
void *ptr; |
1251 |
|
|
1252 |
ptr = NSA_GET_PTR (env, obj); |
ptr = NSA_GET_PTR (env, obj); |
1253 |
|
|
1254 |
if (visible) |
if (visible) |
1255 |
gtk_widget_show (GTK_WIDGET (ptr)); |
gtk_widget_show (GTK_WIDGET (ptr)); |
1256 |
else |
else |
1257 |
gtk_widget_hide (GTK_WIDGET (ptr)); |
gtk_widget_hide (GTK_WIDGET (ptr)); |
|
|
|
|
XFlush (GDK_DISPLAY ()); |
|
|
|
|
|
gdk_threads_leave (); |
|
1258 |
} |
} |
1259 |
|
|
1260 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
1369 |
} |
} |
1370 |
|
|
1371 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
|
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setBoundsCallback |
|
|
(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), |
|
|
jobject window, jint x, jint y, jint width, jint height) |
|
|
{ |
|
|
/* Circumvent package-private access to call Window's |
|
|
setBoundsCallback method. */ |
|
|
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), window, setBoundsCallbackID, |
|
|
x, y, width, height); |
|
|
} |
|
|
|
|
|
JNIEXPORT void JNICALL |
|
1372 |
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setSize |
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setSize |
1373 |
(JNIEnv *env, jobject obj, jint width, jint height) |
(JNIEnv *env, jobject obj, jint width, jint height) |
1374 |
{ |
{ |
1391 |
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds |
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds |
1392 |
(JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) |
(JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) |
1393 |
{ |
{ |
|
void *ptr; |
|
|
|
|
1394 |
gdk_threads_enter (); |
gdk_threads_enter (); |
1395 |
|
|
1396 |
|
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBoundsUnlocked |
1397 |
|
(env, obj, x, y, width, height); |
1398 |
|
|
1399 |
|
gdk_threads_leave (); |
1400 |
|
} |
1401 |
|
|
1402 |
|
JNIEXPORT void JNICALL |
1403 |
|
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBoundsUnlocked |
1404 |
|
(JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) |
1405 |
|
{ |
1406 |
|
void *ptr; |
1407 |
|
|
1408 |
ptr = NSA_GET_PTR (env, obj); |
ptr = NSA_GET_PTR (env, obj); |
1409 |
|
|
1410 |
/* Avoid GTK runtime assertion failures. */ |
/* Avoid GTK runtime assertion failures. */ |
1433 |
by the program and the window's "resizable" property is true then |
by the program and the window's "resizable" property is true then |
1434 |
the size request will not be honoured. */ |
the size request will not be honoured. */ |
1435 |
gtk_window_resize (GTK_WINDOW (ptr), width, height); |
gtk_window_resize (GTK_WINDOW (ptr), width, height); |
|
|
|
|
gdk_threads_leave (); |
|
1436 |
} |
} |
1437 |
|
|
1438 |
static void |
static void |
1444 |
|
|
1445 |
/* Guess frame extents in case _NET_FRAME_EXTENTS is not |
/* Guess frame extents in case _NET_FRAME_EXTENTS is not |
1446 |
supported. */ |
supported. */ |
1447 |
*top = 23; |
if (gtk_window_get_decorated (GTK_WINDOW (window))) |
1448 |
*left = 6; |
{ |
1449 |
*bottom = 6; |
*top = 23; |
1450 |
*right = 6; |
*left = 6; |
1451 |
|
*bottom = 6; |
1452 |
|
*right = 6; |
1453 |
|
} |
1454 |
|
else |
1455 |
|
{ |
1456 |
|
*top = 0; |
1457 |
|
*left = 0; |
1458 |
|
*bottom = 0; |
1459 |
|
*right = 0; |
1460 |
|
} |
1461 |
|
|
1462 |
/* Request that the window manager set window's |
/* Request that the window manager set window's |
1463 |
_NET_FRAME_EXTENTS property. */ |
_NET_FRAME_EXTENTS property. */ |
1558 |
GdkEvent *event __attribute__((unused)), |
GdkEvent *event __attribute__((unused)), |
1559 |
jobject peer) |
jobject peer) |
1560 |
{ |
{ |
|
gdk_threads_leave (); |
|
|
|
|
1561 |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
1562 |
postWindowEventID, |
postWindowEventID, |
1563 |
(jint) AWT_WINDOW_CLOSING, |
(jint) AWT_WINDOW_CLOSING, |
1564 |
(jobject) NULL, (jint) 0); |
(jobject) NULL, (jint) 0); |
1565 |
|
|
|
gdk_threads_enter (); |
|
|
|
|
1566 |
/* Prevents that the Window dissappears ("destroy" |
/* Prevents that the Window dissappears ("destroy" |
1567 |
not being signalled). This is necessary because it |
not being signalled). This is necessary because it |
1568 |
should be up to a WindowListener implementation |
should be up to a WindowListener implementation |
1575 |
GdkEvent *event __attribute__((unused)), |
GdkEvent *event __attribute__((unused)), |
1576 |
jobject peer) |
jobject peer) |
1577 |
{ |
{ |
|
gdk_threads_leave (); |
|
|
|
|
1578 |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
1579 |
postWindowEventID, |
postWindowEventID, |
1580 |
(jint) AWT_WINDOW_CLOSED, |
(jint) AWT_WINDOW_CLOSED, |
1581 |
(jobject) NULL, (jint) 0); |
(jobject) NULL, (jint) 0); |
|
|
|
|
gdk_threads_enter (); |
|
1582 |
} |
} |
1583 |
|
|
1584 |
static void |
static void |
1585 |
window_show_cb (GtkWidget *widget __attribute__((unused)), |
window_show_cb (GtkWidget *widget __attribute__((unused)), |
1586 |
jobject peer) |
jobject peer) |
1587 |
{ |
{ |
|
gdk_threads_leave (); |
|
|
|
|
1588 |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
1589 |
postWindowEventID, |
postWindowEventID, |
1590 |
(jint) AWT_WINDOW_OPENED, |
(jint) AWT_WINDOW_OPENED, |
1591 |
(jobject) NULL, (jint) 0); |
(jobject) NULL, (jint) 0); |
|
|
|
|
gdk_threads_enter (); |
|
1592 |
} |
} |
1593 |
|
|
1594 |
static void |
static void |
1621 |
GParamSpec *pspec __attribute__((unused)), |
GParamSpec *pspec __attribute__((unused)), |
1622 |
jobject peer) |
jobject peer) |
1623 |
{ |
{ |
|
gdk_threads_leave (); |
|
|
|
|
1624 |
if (GTK_WINDOW (widget)->has_toplevel_focus) |
if (GTK_WINDOW (widget)->has_toplevel_focus) |
1625 |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
1626 |
postWindowEventID, |
postWindowEventID, |
1631 |
postWindowEventID, |
postWindowEventID, |
1632 |
(jint) AWT_WINDOW_DEACTIVATED, |
(jint) AWT_WINDOW_DEACTIVATED, |
1633 |
(jobject) NULL, (jint) 0); |
(jobject) NULL, (jint) 0); |
|
|
|
|
gdk_threads_enter (); |
|
1634 |
} |
} |
1635 |
|
|
1636 |
static gboolean |
static gboolean |
1638 |
GdkEventFocus *event __attribute__((unused)), |
GdkEventFocus *event __attribute__((unused)), |
1639 |
jobject peer) |
jobject peer) |
1640 |
{ |
{ |
|
gdk_threads_leave (); |
|
|
|
|
1641 |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
1642 |
postWindowEventID, |
postWindowEventID, |
1643 |
(jint) AWT_WINDOW_GAINED_FOCUS, |
(jint) AWT_WINDOW_GAINED_FOCUS, |
1644 |
(jobject) NULL, (jint) 0); |
(jobject) NULL, (jint) 0); |
1645 |
|
|
|
gdk_threads_enter (); |
|
|
|
|
1646 |
return FALSE; |
return FALSE; |
1647 |
} |
} |
1648 |
|
|
1651 |
GdkEventFocus *event __attribute__((unused)), |
GdkEventFocus *event __attribute__((unused)), |
1652 |
jobject peer) |
jobject peer) |
1653 |
{ |
{ |
|
gdk_threads_leave (); |
|
|
|
|
1654 |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
1655 |
postWindowEventID, |
postWindowEventID, |
1656 |
(jint) AWT_WINDOW_LOST_FOCUS, |
(jint) AWT_WINDOW_LOST_FOCUS, |
1657 |
(jobject) NULL, (jint) 0); |
(jobject) NULL, (jint) 0); |
1658 |
|
|
|
gdk_threads_enter (); |
|
|
|
|
1659 |
return FALSE; |
return FALSE; |
1660 |
} |
} |
1661 |
|
|
1673 |
if (event->window_state.new_window_state & GDK_WINDOW_STATE_ICONIFIED) |
if (event->window_state.new_window_state & GDK_WINDOW_STATE_ICONIFIED) |
1674 |
{ |
{ |
1675 |
/* We've been iconified. */ |
/* We've been iconified. */ |
|
gdk_threads_leave (); |
|
|
|
|
1676 |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
1677 |
postWindowEventID, |
postWindowEventID, |
1678 |
(jint) AWT_WINDOW_ICONIFIED, |
(jint) AWT_WINDOW_ICONIFIED, |
1679 |
(jobject) NULL, (jint) 0); |
(jobject) NULL, (jint) 0); |
|
|
|
|
gdk_threads_enter (); |
|
1680 |
} |
} |
1681 |
else |
else |
1682 |
{ |
{ |
1683 |
/* We've been deiconified. */ |
/* We've been deiconified. */ |
|
gdk_threads_leave (); |
|
|
|
|
1684 |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
1685 |
postWindowEventID, |
postWindowEventID, |
1686 |
(jint) AWT_WINDOW_DEICONIFIED, |
(jint) AWT_WINDOW_DEICONIFIED, |
1687 |
(jobject) NULL, (jint) 0); |
(jobject) NULL, (jint) 0); |
|
|
|
|
gdk_threads_enter (); |
|
1688 |
} |
} |
1689 |
} |
} |
1690 |
|
|
1697 |
|
|
1698 |
new_state |= window_get_new_state (widget); |
new_state |= window_get_new_state (widget); |
1699 |
|
|
|
gdk_threads_leave (); |
|
|
|
|
1700 |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
1701 |
postWindowEventID, |
postWindowEventID, |
1702 |
(jint) AWT_WINDOW_STATE_CHANGED, |
(jint) AWT_WINDOW_STATE_CHANGED, |
1703 |
(jobject) NULL, new_state); |
(jobject) NULL, new_state); |
1704 |
|
|
|
gdk_threads_enter (); |
|
|
|
|
1705 |
return TRUE; |
return TRUE; |
1706 |
} |
} |
1707 |
|
|
1767 |
NULL, |
NULL, |
1768 |
gu_ex.gu_extents)) |
gu_ex.gu_extents)) |
1769 |
{ |
{ |
|
gdk_threads_leave (); |
|
|
|
|
1770 |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
(*cp_gtk_gdk_env())->CallVoidMethod (cp_gtk_gdk_env(), peer, |
1771 |
postInsetsChangedEventID, |
postInsetsChangedEventID, |
1772 |
(jint) extents[2], /* top */ |
(jint) extents[2], /* top */ |
1773 |
(jint) extents[0], /* left */ |
(jint) extents[0], /* left */ |
1774 |
(jint) extents[3], /* bottom */ |
(jint) extents[3], /* bottom */ |
1775 |
(jint) extents[1]); /* right */ |
(jint) extents[1]); /* right */ |
|
|
|
|
gdk_threads_enter (); |
|
1776 |
} |
} |
1777 |
|
|
1778 |
|
|