Кнопки с всплывающим меню (как их реализовать в GTK+?)

Модератор: Модераторы разделов

Аватара пользователя
Amnesiac1989
Сообщения: 26
ОС: Debian Etch, Fedora 8

Кнопки с всплывающим меню

Сообщение Amnesiac1989 »

Добрый вечер (день/утро) всем!

Я пишу одну небольшую программу на GTK+. На панель инструментов (GtkToolbar) надо вставить кнопку с всплывающим (popup) меню, но не такую, какую предлагают сделать с помощью gtk_menu_tool_button_new(), a особенную = кнопка должна быть монолитной, т.е. состоять не из 2х частей (кнопка+стрелка), а из одной (кнопка).
При нажатии на неё должно появляться popup-menu.

Примеры таких я видел в Tomboy (при создании новой заметки), и в Pidgin (окно чата)
Просмотр исходников Томбоя мне не помог - он на C#, исходники Pidgin'а качать по моему gprs каналу проблематично(

Кто знает как такие делать, напишите пожалуйста сюда или в личку))

P.S. GTK+ 2, язык C
"I'm not afraid of being taken by computers though... because they're totally defenseless.
All we need is more people with hammers."
- Thom Yorke
Спасибо сказали:
Аватара пользователя
halturin
Сообщения: 167
ОС: Linux

Re: Кнопки с всплывающим меню

Сообщение halturin »

Amnesiac1989 писал(а):
04.02.2008 18:50
Добрый вечер (день/утро) всем!

Я пишу одну небольшую программу на GTK+. На панель инструментов (GtkToolbar) надо вставить кнопку с всплывающим (popup) меню, но не такую, какую предлагают сделать с помощью gtk_menu_tool_button_new(), a особенную = кнопка должна быть монолитной, т.е. состоять не из 2х частей (кнопка+стрелка), а из одной (кнопка).
При нажатии на неё должно появляться popup-menu.

Примеры таких я видел в Tomboy (при создании новой заметки), и в Pidgin (окно чата)
Просмотр исходников Томбоя мне не помог - он на C#, исходники Pidgin'а качать по моему gprs каналу проблематично(

Кто знает как такие делать, напишите пожалуйста сюда или в личку))

P.S. GTK+ 2, язык C



сделай пару шотов,что за виджеты такие, а то чет я не особо представляю, что именно ты описал.
в принципе можешь сделать обычную кнопку и к ней привязать сигнал, в котором будешь показывать предварительно созданное меню. оно?
Спасибо сказали:
Аватара пользователя
Amnesiac1989
Сообщения: 26
ОС: Debian Etch, Fedora 8

Re: Кнопки с всплывающим меню

Сообщение Amnesiac1989 »

Скриншот в аттаче

можешь сделать обычную кнопку и к ней привязать сигнал, в котором будешь показывать предварительно созданное меню

Делали)) но получалось довольно "топорно" - при нажатии на кнопку меню выскакивало, но кнопка визуально оставалась "не нажатой"
Код был такой (он частично заимствован из Sylpheed):

Код: Выделить всё

...
GtkWidget *MainMenuBtn = gtk_button_new();

g_signal_connect (G_OBJECT(MainMenuBtn), "button-press-event",
            G_CALLBACK (mainmenu_button_pressed), NULL);
...

// слот
static void mainmenu_button_pressed(GtkWidget *widget, GdkEventButton *event,
                    gpointer data)
{
    if (!event) return;

    GtkWidget *menu = gtk_menu_new();
    GtkWidget *item = gtk_menu_item_new_with_label("About");
    gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
    gtk_widget_show(item);

    g_object_set_data(G_OBJECT(menu), "menu_button", widget);

    gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
               menu_button_position, widget,
               event->button, event->time);
}

Хочется сделать по-правильному :D
У вас нет необходимых прав для просмотра вложений в этом сообщении.
"I'm not afraid of being taken by computers though... because they're totally defenseless.
All we need is more people with hammers."
- Thom Yorke
Спасибо сказали: