gnu_java_awt_peer_gtk_GtkFramePeer.c [plain text]
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkFramePeer.h"
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkFramePeer_removeMenuBarPeer
(JNIEnv *env, jobject obj)
{
void *ptr;
void *mptr;
void *fixed;
GList* children;
ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
fixed = gtk_container_get_children (GTK_CONTAINER (ptr))->data;
children = gtk_container_get_children (GTK_CONTAINER (fixed));
while (children != NULL && !GTK_IS_MENU_SHELL (children->data))
{
children = children->next;
}
if (children != NULL)
{
mptr = children->data;
gtk_container_remove (GTK_CONTAINER (fixed), GTK_WIDGET (mptr));
}
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarPeer
(JNIEnv *env, jobject obj, jobject menubar)
{
void *ptr;
void *mptr;
void *fixed;
ptr = NSA_GET_PTR (env, obj);
mptr = NSA_GET_PTR (env, menubar);
gdk_threads_enter ();
fixed = gtk_container_get_children (GTK_CONTAINER (ptr))->data;
gtk_fixed_put (GTK_FIXED (fixed), mptr, 0, 0);
gtk_widget_show (mptr);
gdk_threads_leave ();
}
JNIEXPORT jint JNICALL
Java_gnu_java_awt_peer_gtk_GtkFramePeer_getMenuBarHeight
(JNIEnv *env, jobject obj __attribute__((unused)), jobject menubar)
{
GtkWidget *ptr;
GtkRequisition requisition;
ptr = NSA_GET_PTR (env, menubar);
gdk_threads_enter ();
gtk_widget_size_request (ptr, &requisition);
gdk_threads_leave ();
return requisition.height;
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkFramePeer_setMenuBarWidth
(JNIEnv *env, jobject obj __attribute__((unused)), jobject menubar, jint width)
{
GtkWidget *ptr;
GtkRequisition natural_req;
ptr = NSA_GET_PTR (env, menubar);
gdk_threads_enter ();
gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1);
gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req);
gtk_widget_set_size_request (GTK_WIDGET (ptr),
width, natural_req.height);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkFramePeer_gtkFixedSetVisible
(JNIEnv *env, jobject obj, jboolean visible)
{
void *ptr;
void *fixed;
ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
fixed = gtk_container_get_children (GTK_CONTAINER (ptr))->data;
if (visible)
gtk_widget_show (GTK_WIDGET (fixed));
else
gtk_widget_hide (GTK_WIDGET (fixed));
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImageFromDecoder
(JNIEnv *env, jobject obj, jobject decoder)
{
void *ptr;
GdkPixbufLoader *loader = NULL;
GdkPixbuf *pixbuf = NULL;
ptr = NSA_GET_PTR (env, obj);
loader = NSA_GET_PB_PTR (env, decoder);
g_assert (loader != NULL);
gdk_threads_enter ();
pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
g_assert (pixbuf != NULL);
gtk_window_set_icon (GTK_WINDOW (ptr), pixbuf);
gdk_threads_leave ();
}
static void
free_pixbuf_data (guchar *pixels, gpointer data __attribute__((unused)))
{
free(pixels);
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkFramePeer_nativeSetIconImageFromData
(JNIEnv *env, jobject obj, jintArray pixelArray, jint width, jint height)
{
void *ptr;
GdkPixbuf *pixbuf;
jint *pixels;
int pixels_length, i;
guchar *data;
ptr = NSA_GET_PTR (env, obj);
pixels = (*env)->GetIntArrayElements (env, pixelArray, 0);
pixels_length = (*env)->GetArrayLength (env, pixelArray);
data = malloc (sizeof (guchar) * pixels_length);
for (i = 0; i < pixels_length; i++)
data[i] = (guchar) pixels[i];
gdk_threads_enter ();
pixbuf = gdk_pixbuf_new_from_data (data,
GDK_COLORSPACE_RGB,
TRUE,
8,
width,
height,
width*4,
free_pixbuf_data,
NULL);
gtk_window_set_icon (GTK_WINDOW (ptr), pixbuf);
gdk_threads_leave ();
(*env)->ReleaseIntArrayElements(env, pixelArray, pixels, 0);
}