GNOME面板小程序的上下文菜单中的单选项

时间:2010-07-02 00:46:32

标签: applet contextmenu gnome menuitem

有没有办法将广播菜单项放在GNOME面板小程序的上下文菜单中,然后控制哪些项目被标记为活动? The official documentation is less than helpful,我计算机上安装的所有小程序都使用普通菜单项,因此我无法查看其源代码以获取任何指导。

1 个答案:

答案 0 :(得分:0)

在定义上下文菜单的XML文件中,为每个无线电<menuitem>设置type="radio",将group属性设置为无线电项目组的名称,如下所示:

<Root>
  <popups>
    <popup name="button3">
      <menuitem name="Foo" verb="DoFoo" label="Foo is awesome" type="radio" group="mygroup"/>
      <menuitem name="Bar" verb="DoBar" label="Bar is cool" type="radio" group="mygroup"/>
      <menuitem name="Baz" verb="DoBaz" label="Baz rocks" type="radio" group="mygroup"/>
    </popup>
  </popups>
</Root>

您没有像处理普通菜单项那样设置处理程序来响应所选项目。相反,你在BonoboUIComponent上监听菜单上的“ui-event”信号:

BonoboUIComponent *component = panel_applet_get_popup_component (applet);
g_signal_connect (component, "ui-event", G_CALLBACK (popup_component_ui_event_cb), NULL);
/* ... */
static void
popup_component_ui_event_cb (BonoboUIComponent *component,
                             const gchar *path,
                             Bonobo_UIComponent_EventType type,
                             const gchar *state_string,
                             gpointer data)
{
}

path将是所点击项目的完整路径(见下文)。 state_string将是项目的新州值(见下文)。每次点击一个广播项目都会有两个事件:一个用于取消选择旧项目,另一个用于选择新项目。

要操作按钮的已检查状态,请使用bonobo_ui_component_set_prop将“state”属性设置为“0”(未选中)或“1”(已选中)。为安全起见,明确取消选中旧值;在一些极端情况下,您可以在同一组中检查多个无线电项目(特别是如果尚未实际绘制上下文菜单)。

BonoboUIComponent *component = panel_applet_get_popup_component (applet);
bonobo_ui_component_set_prop (component, "/commands/Foo", "state", "1", NULL);
bonobo_ui_component_set_prop (component, "/commands/Bar", "state", "0", NULL);
bonobo_ui_component_set_prop (component, "/commands/Baz", "state", "0", NULL);

请注意,您可以通过“/ commands / name”标识广播项目,其中name是您在XML文件中为该项目指定的名称。

可以同样使用bonobo_ui_component_get_prop来查找选中的广播项目,但最好还是使用事件处理程序来检测用户何时点击一个。

通常,documentation for BonoboUIComponent in libbonoboui应该提供有关操作菜单中项目的方法的更多信息。