GTK 2 Ctrl-Z加速器不触发

时间:2018-10-01 04:01:19

标签: c keyboard-shortcuts gtk2

我正在用GTK + 2构建一个简单的应用程序,并且有一个带有项目的典型“编辑”菜单;撤消,重做,剪切,复制和粘贴。我这样创建我的“编辑”菜单(为冗长而道歉):

GtkWidget* get_editmenu(GtkWidget *window)
{
  GtkWidget
    *menu,
    *menuitem,
    *item
  ;
  GtkAccelGroup *group;

  menu = gtk_menu_new();
  group = gtk_accel_group_new();

  gtk_menu_set_accel_group(GTK_MENU(menu), group);
  gtk_window_add_accel_group(GTK_WINDOW(window), group);

  menuitem = gtk_menu_item_new_with_label("Edit");
  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu);

  item = gtk_image_menu_item_new_from_stock(GTK_STOCK_UNDO, group);
  g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(on_undo), NULL);
  gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);

  item = gtk_image_menu_item_new_from_stock(GTK_STOCK_REDO, group);
  g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(on_redo), NULL);
  gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);

  gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new());

  item = gtk_image_menu_item_new_from_stock(GTK_STOCK_COPY, group);
  g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(on_copy), NULL);
  gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);

  item = gtk_image_menu_item_new_from_stock(GTK_STOCK_CUT, group);
  g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(on_cut), NULL);
  gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);

  item = gtk_image_menu_item_new_from_stock(GTK_STOCK_PASTE, group);
  g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(on_paste), NULL);
  gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);

  return menuitem;
}

此功能仅返回顶层菜单项(即“编辑”项),然后将其添加到我的菜单栏中:

GtkWidget* get_menubar(GtkWidget *window)
{
  GtkWidget *menubar;

  menubar = gtk_menu_bar_new();

  gtk_menu_shell_append(GTK_MENU_SHELL(menubar), get_filemenu(window));
  gtk_menu_shell_append(GTK_MENU_SHELL(menubar), get_editmenu(window));
  gtk_menu_shell_append(GTK_MENU_SHELL(menubar), get_helpmenu(window));

  return menubar;
}

这很好。我的加速器适用于Ctrl + O(打开文件),Ctrl + Q(退出应用程序),Ctrl + C(复制)等。但是,执行Ctrl + Z不会触发撤消回调,Ctrl也不会+ Shift + Z重做。当我通过打开“编辑”菜单并通过单击选择它们来手动触发它们时,就可以很好地触发我的回调。

如何使用Ctrl + Z和Ctrl + Shift + Z激活撤消和重做项目?

0 个答案:

没有答案