void EvalCcRqGETCLIPBOARDTEXT (CrossCallInfo *pcci)			/* no params; string result. */
{
	gchar *text = gtk_clipboard_wait_for_text(gtk_clipboard_get(GDK_NONE));
	char *result = g_strdup(text);
	g_free(text);

	MakeReturn1Cci (pcci, (int) result);
}
void EvalCcRqGETCLIPBOARDCOUNT (CrossCallInfo *pcci)
{
    gint* targets;
    printf("EvalCcRqGETCLIPBOARDTEXT\n");

    gtk_clipboard_wait_for_targets(gtk_clipboard_get(GDK_NONE), NULL, targets);

    MakeReturn1Cci (pcci, (int64_t) *targets);
}
void EvalCcRqCREATEPOPMENU (CrossCallInfo *pcci) /* no params; MENU result.   */
{
    /*
     * Establish a new meta-menu that will be used to hold the individual
     * menu entries later.
     *
     * This menu should be added to a menu bar.
     */
    printf("EvalCcRqCREATEPOPMENU\n");
    MakeReturn1Cci (pcci, (int64_t) gtk_menu_new());
}
void EvalCcRqINSERTSEPARATOR (CrossCallInfo *pcci)		/* hmenu, pos no result. */
{
    GtkWidget *menu, *menu_item;
    printf("EvalCcRqINSERTSEPARATOR\n");

    menu = GTK_WIDGET(pcci->p1);
    menu_item = gtk_menu_item_new();

    gtk_menu_insert(GTK_MENU(menu), menu_item, (gint) pcci->p2);
    gtk_widget_show_all(menu_item);

    MakeReturn1Cci (pcci, (int64_t) menu_item);
}
void EvalCcRqINSERTMENUITEM (CrossCallInfo *pcci)
{
    gchar *title;
    GtkWidget *menu, *menu_item, *label;
    GtkAccelGroup *accel_group;
    guint graystate, checkstate;

    printf("EvalCcRqINSERTMENUITEM\n");
    printf("Inserting item with position %d and name %s\n", pcci->p5, (char*)pcci->p3);

    printf("Checking graystate: ");
    if (pcci->p1)
    {
            graystate = 1; // MF_ENABLED
    } else {
            graystate = 0; // MF_GRAYED;
    }
    printf("%s\n", (graystate ? "enabled" : "grayed"));

    printf("Checking checkstate: ");
    if (pcci->p4)
    {
            checkstate = 1; // MF_CHECKED
    } else {
            checkstate = 0; // MF_UNCHECKED
    }
    printf("%s\n", (checkstate ? "checked" : "unchecked"));

    printf("Calling Make Mnemonic string with: %s\n", (gchar*)pcci->p3);
    title = createMnemonicString((gchar *) pcci->p3);
    printf("Got title: %s\n", title);

    menu = GTK_WIDGET(pcci->p2);

    printf("Creating new menu item\n");
    menu_item = gtk_menu_item_new_with_mnemonic(title);
    gtk_menu_shell_insert( GTK_MENU_SHELL (menu), menu_item, (gint) pcci->p5);

    gtk_signal_connect_object (GTK_OBJECT (menu_item), "activate",
        GTK_SIGNAL_FUNC (menuitem_activate_handler), menu_item);

    gtk_widget_show(menu_item);

    printf("About to free title: %s\n", title);
    rfree(title);
    printf("Freed title\n");

    printf("Creating return Cci\n");
    MakeReturn1Cci (pcci, (int64_t) menu_item);
}
/*	Track pop up menu. */
void EvalCcRqTRACKPOPMENU (CrossCallInfo *pcci)	/* popupmenu,framePtr; BOOL result. */
{
    printf("EvalCcRqTRACKPOPMENU\n");
    if (GTK_IS_MENU(pcci->p1))
    {
        GtkWidget *popup_menu = GTK_WIDGET(pcci->p1);
        GtkWidget *frame = GTK_WIDGET(pcci->p2);

        GdkEvent *event = gtk_get_current_event();
        gtk_menu_popup(GTK_MENU(popup_menu),NULL,NULL,NULL,NULL,
                        (event->type == GDK_BUTTON_PRESS) ?
                        ((GdkEventButton *) event)->button : 0,
                        gdk_event_get_time(event));
    }

    MakeReturn1Cci (pcci,(int64_t)gtk_true());
}
/*	Insert a menu into the menu bar. */
void EvalCcRqINSERTMENU (CrossCallInfo *pcci)
{
    gint i;
    gchar *title;
    GtkWidget *parent_menu, *root_menu, *sub_menu;
    GtkAccelGroup *accel_group;
    printf("EvalCcRqINSERTMENU\n");

    title = createMnemonicString((gchar *) pcci->p3);
    parent_menu = GTK_WIDGET(pcci->p2);
    sub_menu = GTK_WIDGET(pcci->p4);

    if (GTK_IS_MENU_BAR(parent_menu))
    {
        printf("Adding to a menu bar.\n");
        GtkWidget *frame = gtk_widget_get_parent(gtk_widget_get_parent(parent_menu));
        if (!G_IS_OBJECT(frame))
            frame = gtk_widget_get_parent(parent_menu);
        accel_group = ((GtkAccelGroup*)gtk_accel_groups_from_object (G_OBJECT(frame))->data);
    }
    else
    {
        printf("We're not adding to a menu bar!?!\n");
        accel_group = gtk_menu_get_accel_group (GTK_MENU(parent_menu));
    }

    gtk_menu_set_accel_group (GTK_MENU(sub_menu), accel_group);

    root_menu = gtk_menu_item_new_with_mnemonic(title);
    gtk_widget_set_sensitive(root_menu, (gboolean) pcci->p1);
    gtk_widget_show (root_menu);

    gtk_menu_item_set_submenu (GTK_MENU_ITEM (root_menu), sub_menu);

    if (GTK_IS_MENU_BAR(parent_menu))
    {
        gtk_menu_shell_insert(GTK_MENU_SHELL(parent_menu), root_menu, (gint) pcci->p5);
    } else {
        gtk_menu_insert(GTK_MENU(parent_menu), root_menu, (gint) pcci->p5);
    }

    rfree(title);

    MakeReturn1Cci (pcci, (int64_t) sub_menu);
}
void EvalCcRqCLIPBOARDHASTEXT (CrossCallInfo *pcci)		/* no arguments; bool result. */
{
	MakeReturn1Cci (pcci,(int) gtk_clipboard_wait_is_text_available(gtk_clipboard_get(GDK_NONE)));
}