5

我正在尝试将 appindicator 与 gtk 菜单集成。我希望某些菜单项具有如下快捷方式:

在此处输入图像描述

不幸的是,在将加速器添加到第二个菜单项后,我仍然得到没有图标和快捷方式的项目。

在此处输入图像描述

我期望看到的是“item2”右侧的快捷方式。

int main (int argc, char **argv) {
  gtk_init(&argc, &argv);

  // main window
  GtkWidget* window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title(GTK_WINDOW(window), "menu-with-shortcuts-window");
  gtk_window_set_icon_name(GTK_WINDOW(window), "menu-with-shortcuts-icon");
  g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

  gtk_widget_show_all(window);

  // indicator
  AppIndicator* indicator = app_indicator_new("menu-with-shortcuts-appindicator", "transmission-tray-icon", APP_INDICATOR_CATEGORY_APPLICATION_STATUS);

  // menu
  GtkWidget*  indicator_menu = gtk_menu_new();

  GtkWidget* item1 = gtk_menu_item_new_with_label("item1");
  gtk_menu_shell_append(GTK_MENU_SHELL(indicator_menu), item1);
  g_signal_connect(item1, "activate", G_CALLBACK(Item1Clicked), NULL);
  gtk_widget_show(item1);

  GtkAccelGroup* accel_group = gtk_accel_group_new();
  gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);

  GtkWidget* item2 = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, accel_group);
  gtk_widget_add_accelerator(item2, "activate", accel_group, GDK_q, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); 
  gtk_menu_shell_append(GTK_MENU_SHELL(indicator_menu), item2);
  g_signal_connect(item2, "activate", G_CALLBACK(Item2Clicked), NULL);
  gtk_widget_show(item2);

  app_indicator_set_status(indicator, APP_INDICATOR_STATUS_ACTIVE);
  app_indicator_set_attention_icon(indicator, "menu-with-shortcuts-appindicator");

  app_indicator_set_menu(indicator, GTK_MENU(indicator_menu));

  gtk_widget_show_all(window);
  gtk_main();

  return 0;
}
4

0 回答 0