Gtk, меню времени выполнения - PullRequest
0 голосов
/ 26 января 2012

У меня есть меню, созданное во время выполнения на основе слов в выбранной строке gtkTreeView.

gboolean
menu_RELEASE(GtkObject *object, GdkEvent *event, gpointer user_data)
{
    if (strlen(user_data) > 0)
    {
        gtk_entry_set_text(GTK_ENTRY(entry1), user_data);
        gtk_widget_grab_focus(entry1);
    }
    else
        main_art(get_sifra());

    return TRUE;
}

gboolean
treeview1_BUTTONRELEASE(GtkWidget *widget, GdkEventButton *event, gpointer *user_data)
{
    if (event->type == GDK_BUTTON_RELEASE && event->button == 3)
    {
        char *ntext;
        treesel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view));
        if (gtk_tree_selection_get_selected(treesel, &model ,&iter))
        {
            gtk_tree_model_get(model, &iter, cNaziv, &ntext, -1);
            GtkWidget *menu, *menu_item;
            menu = gtk_menu_new();

            char *sresult = NULL;
            sresult = strtok(ntext, " ");
            while(sresult != NULL)
            {
                if (strlen(sresult)>1)
                {
                    menu_item = gtk_menu_item_new_with_label(sresult);
                    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
                    g_signal_connect(G_OBJECT(menu_item), "button-release-event", G_CALLBACK(menu_RELEASE), (gpointer)sresult);
                }
                sresult = strtok(NULL, " ");
            }

            menu_item = gtk_separator_menu_item_new();
            gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
            //
            menu_item = gtk_image_menu_item_new_with_label("Uredi...");
            gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menu_item), GTK_WIDGET(gtk_image_new_from_stock(GTK_STOCK_EDIT, GTK_ICON_SIZE_MENU)));
            gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item);
            g_signal_connect(G_OBJECT(menu_item), "button-release-event", G_CALLBACK(menu_RELEASE), (gpointer)"");
            //
            gtk_widget_show_all(menu);
            gtk_menu_popup(GTK_MENU(menu), NULL, NULL,  NULL, NULL, 0, gtk_get_current_event_time());
            return TRUE;
        }
    }
    return FALSE;
}

Когда элемент меню был освобожден, должно появиться действие из «menu_RELEASE». Но что случилось? Меню не исчезает, остается видимым и активным.

Что не так с моим кодом?

1 Ответ

2 голосов
/ 26 января 2012

Вы не должны подключаться к сигналам кнопок мыши на предметах, это слишком низкий уровень.Ваш обработчик «глотает» сигнал кнопки мыши, не позволяя GTK + обработать его.

Используйте сигнал <a href="http://developer.gnome.org/gtk3/stable/GtkMenuItem.html#GtkMenuItem-activate" rel="nofollow">activate</a>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...