使用 GMenu 的菜单中存在很大差距

Big gaps in Menu using GMenu

使用 GMenu (Gnome/Gtk) 创建菜单时,菜单项的标签 (-> Picture) 留下了巨大的空白。有什么想法可以解决这个问题吗?

#include <gio/gio.h>
#include <glib.h>
#include <glib-object.h>
#include <glib/gi18n.h>

//....
//....


if(title && (action || submenu))
{
   GMenuItem *item;

   if(submenu)
   {
      item = g_menu_item_new_submenu (title, G_MENU_MODEL(submenu));
   }
   else
   {
      item = g_menu_item_new(title, action);
      if (icon != NULL)
      {
         g_menu_item_set_attribute (item, "icon", "s", icon);
      }
   }

//.....
//....

Picture

不幸的是,事情就是这样 intended to be。 您可以坚持使用已弃用的 GtkImageMenuItem,这不是问题,直到您将应用程序移植到 GTK 4。如果您真的想避免弃用的组件,可以按照建议将图像 + 标签包装在 GtkBox 中通过文档,虽然它不是那么简单,但有一些需要的怪癖来获得一个像样的解决方案:

  1. 您需要在菜单上使用 gtk_menu_set_reserve_toggle_size 并将其设置为 FALSE
  2. 然后您需要为每个菜单项创建标签和图像,但是对于没有图标的项目,有必要创建一个图像作为填充,即 gtk_image_new_from_icon_name ("", GTK_ICON_SIZE_BUTTON)

您可以找到一个完全可用的示例 here

注意:不能保证这会在 GTK 4 上正常工作。