如何替换已弃用的gtk3 GtkImageMenuItem

时间:2018-01-25 22:10:42

标签: c gtk3 deprecation-warning

替换的official gtk3 documentation是一个糟糕的笑话:

  

改为使用gtk_menu_item_new()。

经过一番搜索后,几乎感觉gtk团队想要惩罚gtk包用户。 Ofc,gtk_menu_item没有图像的原生支持。我发现this peace of code似乎是推荐的方法..但是它会生成带有丑陋左边填充的菜单项:

ugly left padding

图片上的第一项使用推荐的替代品。所有其他项目使用已弃用的GtkImageMenuItem。这里是创建第一个项目的相关代码:

  mi = gtk_menu_item_new();
  box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
  icon = gtk_image_new_from_icon_name ("document-open", GTK_ICON_SIZE_MENU);
  label = gtk_label_new (_("Open"));
  gtk_container_add (GTK_CONTAINER (box), icon);
  gtk_container_add (GTK_CONTAINER (box), label);
  gtk_container_add (GTK_CONTAINER (mi), box);
  gtk_widget_show_all(mi);
  gtk_widget_set_sensitive(mi, TRUE);
  gtk_menu_shell_append (GTK_MENU_SHELL (menu), mi);

我尝试了一些东西,但我不知道如何摆脱那个丑陋的左边填充物。如果填充消失,我可以采用这种方法。

替换GtkImageMenuItem的另一个选择似乎是编写自己的GtkMenuItem子类。这将是很多工作。也许有一些实现?

另一种选择似乎是使用GMenu而不是gtkMenu。 GMenu提供g_menu_item_set_icon ..但是更换整个菜单是一个激烈的步骤(到目前为止我没有检查它的样子) 顺便说一句:为什么glib / gtk中有两种不同的菜单方法,它们彼此不能分开?

任何暗示哪种方式对我来说是最好的方法?

1 个答案:

答案 0 :(得分:1)

GTK无意支持未来的图像菜单项。 (有些人认为它们在现代用户界面中被认为是不好的做法。)但是,你没有来替换它只是因为它被弃用了;它将继续在GTK 3.x中运行。如果您想继续在GTK 4及更高版本中使用它,您可以创建自己的子类,但阻力最小的路径可能只是顺应流程并避免在菜单中混合图像。

至于上面的屏幕截图,如果您删除其他图像菜单项并将其替换为替换代码,我预计左边的填充可能会消失。在这种情况下,您可以使用CSS在您没有添加图像的菜单项上添加额外的左边填充。