LINUX.ORG.RU

[glade]Как правильно создать RadioMenu?

 


0

0

Создаю в glade менюшку-переключатель из двух элементов, каждый элемент включаю в группу другого, добавляю обработчики события «group-changed», сохраняю. Но как только конвертирую при помощи gtk-builder-convert, появляется ругань:

Unhandled signal GtkRadioMenuItem::group_changed
Unhandled signal GtkRadioMenuItem::group_changed
и в выходном файле нет никакого упоминания об обработчиках этих сигналов.

Если в .ui-файле вручную добавляю для пунктов меню обработчики, то при запуске программы появляется такая ругань:

Gtk-CRITICAL **: gtk_radio_action_set_group: assertion `!g_slist_find (group, action)' failed

Как же правильно обработать события выбора элемента меню-переключателя?

☆☆☆☆☆

Не нужно соединять их вкруговую. У всех, кроме первого устанавливаете группу первого.

«group-changed» вызывается когда элемент добавляется/удаляется с группы.

для обработки переключения нужен сигнал «toggled» из GtkCheckMenuItem.

А зачем gtk-builder-convert? Glade (точнее glade-3) давно уже научился с GtkBuilder работать.

ono
()
Ответ на: комментарий от ono

для обработки переключения нужен сигнал «toggled» из GtkCheckMenuItem.

У меня во вкладке «сигналы» для gtkRadioMenuItem есть только сигнал «group-changed». Остальные недоступны для редактирования.

А зачем gtk-builder-convert? Glade (точнее glade-3) давно уже научился с GtkBuilder работать.

Это я уже проходил. Если сохранять из glade-3 в формат GtkBuilder, то вообще никакие сигналы не обрабатываются.

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от ono

Спасибо, запустил glade-3 снова, появилась возможность и другие типы сигналов выбирать. Добавил действие на «toggled» из GtkCheckMenuItem, сигналы стали отсылаться. Похоже, просто глючил glade-3.

Eddy_Em ☆☆☆☆☆
() автор топика

Оказалось, еще не все. Когда я инициализирую переменные для пунктов меню (чтобы потом нужный пункт активировать при активации окна):

GtkRadioMenuItem *LinLogMenu[2];
...
	LinLogMenu[0] = GTK_RADIO_MENU_ITEM(gtk_builder_get_object(builder, "graphLinMenuItem"));
	LinLogMenu[1] = GTK_RADIO_MENU_ITEM(gtk_builder_get_object(builder, "graphLogMenuItem"));
, получаю при запуске ошибку:
GLib-GObject-WARNING **: invalid cast from `GtkRadioAction' to `GtkRadioMenuItem'
А как же ее инициализировать?

Eddy_Em ☆☆☆☆☆
() автор топика

Вроде бы разобрался. Почему-то действительно gtk_builder_get_object возвращает не GtkRadioMenuItem, а GtkRadioAction. Поэтому сделал так:

GtkRadioAction *LinLogMenu[2];
...
	LinLogMenu[0] = GTK_RADIO_ACTION(gtk_builder_get_object(builder, "graphLinMenuItem"));
	LinLogMenu[1] = GTK_RADIO_ACTION(gtk_builder_get_object(builder, "graphLogMenuItem"));
А переключение - так:
gtk_toggle_action_set_active(GTK_TOGGLE_ACTION(LinLogMenu[isYlog()]), TRUE);

Eddy_Em ☆☆☆☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.