代码之家  ›  专栏  ›  技术社区  ›  Paul Kuliniewicz

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

  •  1
  • Paul Kuliniewicz  · 技术社区  · 16 年前

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

    1 回复  |  直到 16 年前
        1
  •  0
  •   Paul Kuliniewicz    16 年前

    在定义上下文菜单的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事件”信号:

    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);
    

    你呢 同样使用 bonobo_ui_component_get_prop 查找选中了哪个单选项,但最好使用事件处理程序来检测用户何时单击某个单选项。

    一般来说 documentation for BonoboUIComponent in libbonoboui 应该提供更多关于操作菜单项的方法的信息。