LINUX.ORG.RU

[glade][gtkBuilder]Не обрабатываются ускорители

 


0

0

Наклепал я в glade окошко, загружаю его gtkBuilder'ом, но ускорители почему-то не работают. Например, вот пункт меню «выход»:

                      <object class="GtkImageMenuItem" id="mainQuitMenuItem">
                        <property name="label">gtk-quit</property>
                        <property name="visible">True</property>
                        <property name="use_underline">True</property>
                        <property name="use_stock">True</property>
                        <accelerator key="q" signal="activate" modifiers="GDK_CONTROL_MASK"/>
                        <signal name="activate" handler="on_window_destroy" after="yes"/>
                      </object>
Сигналы перехватываются в моей программке обработчиками, но все они возвращают FALSE для возможности дальнейшей обработки. Обработчкик событий нажатия клавиш
gboolean press_key(GtkWidget * widget, GdkEventKey * event){
	DBG("Press key %d\n", event->keyval);
	if(widget == mainWindow) return press_main_key(event);
	else if(widget == subWindow) return press_sub_key(event);
	return FALSE;
}
Пишет «press_key (gtk.c, line 299): Press key 65507», «press_key (gtk.c, line 299): Press key 113», но ничего далее не происходит...

В чем может быть ошибка?

☆☆☆☆☆

В чем может быть ошибка?

Отсутствует код который вызывает gtk_widget_destroy? Так же не увидел этого в glade-файле.

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

Отсутствует код который вызывает gtk_widget_destroy?

Ясное дело - отсутствует. Зачем он мне нужен, если gtk_widget_destroy вызывается автоматически только при завершении работы приложения?

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

Ожидается, что когда я нажму прописанное сочетание клавиш (для данного случая - ctrl+C), будет вызван соответствующий обработчик (в данном случае - on_window_destroy). Но он не вызывается. А вызывается лишь при активации соответствующего пункта меню.

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

Вот и я не могу понять. В понедельник на работе проверю. Если будет работать, значит, у меня глюк в gtk'шных библиотеках. Если не будет - значит, глюк во мне.

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

Все оказалось довольно просто: файлы в Glade я сохранял как «формат gtk-builder», решил для пробы сохранить их в формате glade, а для gtk-builder'а конвертировать при помощи gtk-builder-convert. После этого все ускорители стали нормально работать.

Вывод: на glade надейся, да сам не плошай!

Теперь кусок makefile'а для подключения ui выглядит так:

UI.SRC = fitsview.glade
UI.UI = fitsview.ui

ui.h: $(UI.SRC)
	gtk-builder-convert $(UI.SRC) $(UI.UI)
	echo "const gchar *ui = `sed -r 's/^[[:space:]]*//;s/\"/\\\\\"/g;s/(^.*$$)/\"&\"/' $(UI.UI)` ;" > ui.h

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

После конвертации все создается нормально. Похоже, все-таки, формат «неправильный» был.

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

при конвертации они (accelgroups) добавляются автоматически. но кое-какие штуки могут теряться

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