GIO: Как включить GMenuItem? GMenu включить / отключить - PullRequest
0 голосов
/ 02 мая 2020

Проблема

Я создаю GMenuModel и устанавливаю как меню приложения. Тем не менее, элементы в приложении отключены.

Q: Как мне их включить?

Код

GMenuModel * createMenu(){

  GMenu * menu = g_menu_new();

  g_menu_append(menu, "Item1", "item1_action1");    
  return (GMenuModel*)menu;
}

...

GMenuModel * menu = createMenu(GTK_APPLICATION(app));

gtk_application_set_app_menu(GTK_APPLICATION(app), (GMenuModel*)menu);

g_object_unref (menu);


GActionEntry actions[] = {
  {"item1_action1", exampleAction, NULL, NULL, NULL}
};
g_action_map_add_action_entries(G_ACTION_MAP(app),actions, 1, NULL); 

1 Ответ

0 голосов
/ 02 мая 2020

Ваша проблема : пункты меню не связаны с существующими действиями.

Ваше решение : Установите правильное значение detailed_action при создании элемента меню. (отсутствует префикс app.).

Код

GMenuModel * createMenu(){      
  GMenu * menu = g_menu_new();

  g_menu_append(menu, "Item1", "app.item1_action1");    
  return (GMenuModel*)menu;
}

Как это выяснить?

  • Запустите приложение с помощью инспектора: GTK_DEBUG=interactive ./a.out
  • Дважды щелкните любой элемент, чтобы открыть его свойства.
  • Выберите Actions в поле со списком. То есть те, которые вы регистрируете с g_action_map_add_action_entries!
  • См. Столбец Prefix, показывающий app.
  • g_action_map_add_action_entries(G_ACTION_MAP(app),...), регистрирующий действия для приложения. Поэтому он добавляет префикс app к именам действий.
  • Таким образом, при создании меню вам необходимо использовать полное имя (ie app.item1_action1) в качестве detailed_action имени.

  • Будьте в курсе столбец префикса с надписью app

...