【发布时间】:2018-09-21 16:29:55
【问题描述】:
如果从终端启动,但如果直接由 i3 窗口管理器启动(绑定到键时),则以下程序始终可以正常运行 - 显示带有一项的菜单。
在后一种情况下,大多数情况下它会打印“Entering gtk main loop.”,但随后根本不会关闭;虽然大约每 20 次按键会显示一次!
为什么?
#include <gtk/gtk.h>
#include <stdio.h>
static
void
deactivate_handler(GtkMenuShell *instance, gpointer user_data)
{
(void) instance; (void) user_data; // unused parameters
gtk_main_quit();
}
int
main(int argc, char **argv)
{
gtk_init(&argc, &argv);
GtkWidget *menu = gtk_menu_new();
GtkWidget *item = gtk_menu_item_new_with_label("Test");
gtk_menu_attach(GTK_MENU(menu), item, 0, 1, 0, 1);
g_signal_connect(menu, "deactivate", G_CALLBACK(deactivate_handler), NULL);
gtk_widget_show_all(menu);
gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time());
fprintf(stderr, "Entering gtk main loop.\n");
gtk_main();
return 0;
}
【问题讨论】:
-
无关,但有用:使用 GLib 中的 G_GNUC_UNUSED 宏将参数标记为未使用。