43 |
#include <gdk/gdkx.h> |
#include <gdk/gdkx.h> |
44 |
|
|
45 |
/* |
/* |
46 |
* Make a new window (any type) |
* Make a new window. |
47 |
*/ |
*/ |
48 |
|
|
49 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
50 |
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create |
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_create |
51 |
(JNIEnv *env, jobject obj, jint type, jint width, jint height) |
(JNIEnv *env, jobject obj, jint type, jboolean decorated, |
52 |
|
jint width, jint height, jobject parent) |
53 |
{ |
{ |
54 |
GtkWidget *window; |
GtkWidget *window_widget; |
55 |
|
GtkWindow *window; |
56 |
|
void *window_parent; |
57 |
GtkWidget *vbox, *layout; |
GtkWidget *vbox, *layout; |
58 |
|
|
59 |
gdk_threads_enter (); |
gdk_threads_enter (); |
60 |
window = gtk_window_new (type); |
window_widget = gtk_window_new (GTK_WINDOW_TOPLEVEL); |
61 |
|
window = GTK_WINDOW (window_widget); |
62 |
|
|
63 |
gtk_window_set_default_size (GTK_WINDOW(window), width, height); |
gtk_window_set_default_size (window, width, height); |
64 |
|
|
65 |
/* We must set this window's size requisition. Otherwise when a |
/* We must set this window's size requisition. Otherwise when a |
66 |
resize is queued (when gtk_widget_queue_resize is called) the |
resize is queued (when gtk_widget_queue_resize is called) the |
69 |
when their resizable property changes. */ |
when their resizable property changes. */ |
70 |
gtk_widget_set_size_request (window, width, height); |
gtk_widget_set_size_request (window, width, height); |
71 |
|
|
72 |
|
/* Keep this window in front of its parent, if it has one. */ |
73 |
|
if (parent) |
74 |
|
{ |
75 |
|
window_parent = NSA_GET_PTR (env, parent); |
76 |
|
gtk_window_set_transient_for (window, GTK_WINDOW(window_parent)); |
77 |
|
} |
78 |
|
|
79 |
|
gtk_window_set_decorated (window, decorated); |
80 |
|
|
81 |
|
gtk_window_set_type_hint (window, type); |
82 |
|
|
83 |
vbox = gtk_vbox_new (0, 0); |
vbox = gtk_vbox_new (0, 0); |
84 |
layout = gtk_layout_new (NULL, NULL); |
layout = gtk_layout_new (NULL, NULL); |
85 |
gtk_box_pack_end (GTK_BOX (vbox), layout, 1, 1, 0); |
gtk_box_pack_end (GTK_BOX (vbox), layout, 1, 1, 0); |
86 |
gtk_container_add (GTK_CONTAINER (window), vbox); |
gtk_container_add (GTK_CONTAINER (window_widget), vbox); |
87 |
|
|
88 |
gtk_widget_show (layout); |
gtk_widget_show (layout); |
89 |
gtk_widget_show (vbox); |
gtk_widget_show (vbox); |
90 |
|
|
91 |
gdk_threads_leave (); |
gdk_threads_leave (); |
92 |
|
|
93 |
NSA_SET_PTR (env, obj, window); |
NSA_SET_PTR (env, obj, window_widget); |
94 |
} |
} |
95 |
|
|
96 |
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisible |
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setVisible |
233 |
gdk_threads_leave (); |
gdk_threads_leave (); |
234 |
} |
} |
235 |
|
|
236 |
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setBounds |
JNIEXPORT void JNICALL |
237 |
(JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) |
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setBoundsCallback |
238 |
|
(JNIEnv *env, jobject obj, jobject window, |
239 |
|
jint x, jint y, jint width, jint height) |
240 |
{ |
{ |
241 |
void *ptr; |
/* Circumvent package-private access to call Window's |
242 |
GtkWidget *widget; |
setBoundsCallback method. */ |
243 |
|
(*gdk_env)->CallVoidMethod (gdk_env, window, setBoundsCallbackID, |
244 |
|
x, y, width, height); |
245 |
|
} |
246 |
|
|
247 |
ptr = NSA_GET_PTR (env, obj); |
JNIEXPORT void JNICALL |
248 |
|
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_setSize |
249 |
|
(JNIEnv *env, jobject obj, jint width, jint height) |
250 |
|
{ |
251 |
|
void *ptr = NSA_GET_PTR (env, obj); |
252 |
|
|
253 |
gdk_threads_enter (); |
gdk_threads_enter (); |
254 |
|
gtk_widget_set_size_request (GTK_WIDGET(ptr), width, height); |
255 |
|
gdk_threads_leave (); |
256 |
|
} |
257 |
|
|
258 |
widget = GTK_WIDGET (ptr); |
JNIEXPORT void JNICALL |
259 |
gtk_widget_set_size_request (widget, width, height); |
Java_gnu_java_awt_peer_gtk_GtkWindowPeer_nativeSetBounds |
260 |
gtk_window_resize (GTK_WINDOW(widget), width, height); |
(JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) |
261 |
|
{ |
262 |
|
void *ptr = NSA_GET_PTR (env, obj); |
263 |
|
|
264 |
|
gdk_threads_enter (); |
265 |
|
gtk_window_move (GTK_WINDOW(ptr), x, y); |
266 |
|
/* Need to change the widget's request size. */ |
267 |
|
gtk_widget_set_size_request (GTK_WIDGET(ptr), width, height); |
268 |
|
/* Also need to call gtk_window_resize. If the resize is requested |
269 |
|
by the program and the window's "resizable" property is true then |
270 |
|
the size request will not be honoured. */ |
271 |
|
gtk_window_resize (GTK_WINDOW (ptr), width, height); |
272 |
gdk_threads_leave (); |
gdk_threads_leave (); |
273 |
} |
} |
274 |
|
|