gnu_java_awt_peer_gtk_GtkMenuPeer.c [plain text]
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkMenuPeer.h"
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkMenuPeer_setupAccelGroup
(JNIEnv *env, jobject obj, jobject parent)
{
void *ptr1, *ptr2;
ptr1 = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
if (!parent)
{
gtk_menu_set_accel_group (GTK_MENU (GTK_MENU_ITEM (ptr1)->submenu),
gtk_accel_group_new ());
}
else
{
GtkAccelGroup *parent_accel;
ptr2 = NSA_GET_PTR (env, parent);
parent_accel = gtk_menu_get_accel_group (GTK_MENU (GTK_MENU_ITEM (ptr2)->submenu));
gtk_menu_set_accel_group (GTK_MENU (GTK_MENU_ITEM (ptr1)->submenu),
parent_accel);
}
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create
(JNIEnv *env, jobject obj, jstring label)
{
GtkWidget *menu_title, *menu, *toplevel;
const char *str;
NSA_SET_GLOBAL_REF (env, obj);
str = (*env)->GetStringUTFChars (env, label, NULL);
gdk_threads_enter ();
menu = gtk_menu_new ();
if (str != NULL)
menu_title = gtk_menu_item_new_with_label (str);
else
menu_title = gtk_menu_item_new();
gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_title), menu);
toplevel = gtk_widget_get_toplevel (menu);
if (GTK_IS_WINDOW (toplevel))
{
gtk_window_group_add_window (global_gtk_window_group,
GTK_WINDOW(toplevel));
}
gtk_widget_show (menu_title);
NSA_SET_PTR (env, obj, menu_title);
gdk_threads_leave ();
(*env)->ReleaseStringUTFChars (env, label, str);
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addTearOff
(JNIEnv *env, jobject obj)
{
void *ptr1;
GtkWidget *menu, *item;
ptr1 = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (ptr1));
item = gtk_tearoff_menu_item_new ();
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
gtk_widget_show (item);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addItem
(JNIEnv *env, jobject obj, jobject menuitempeer, jint key, jboolean shift)
{
void *ptr1, *ptr2;
GtkWidget *menu;
ptr1 = NSA_GET_PTR (env, obj);
ptr2 = NSA_GET_PTR (env, menuitempeer);
gdk_threads_enter ();
menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(ptr1));
gtk_menu_shell_append (GTK_MENU_SHELL(menu), GTK_WIDGET (ptr2));
if (key)
{
gtk_widget_add_accelerator (GTK_WIDGET (ptr2), "activate",
gtk_menu_get_accel_group (GTK_MENU (menu)), key,
(GDK_CONTROL_MASK
| ((shift) ? GDK_SHIFT_MASK : 0)),
GTK_ACCEL_VISIBLE);
}
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkMenuPeer_delItem
(JNIEnv *env, jobject obj, jint index)
{
void *ptr;
GList *list;
ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
list = gtk_container_children (GTK_CONTAINER (ptr));
list = g_list_nth (list, index);
gtk_container_remove (GTK_CONTAINER (ptr), GTK_WIDGET (list->data));
gdk_threads_leave ();
}