应用程序自定义库存图标在应用程序指示器中不可见,但在旧系统托盘中可见

应用程序自定义库存图标在应用程序指示器中不可见,但在旧系统托盘中可见

我最近注意到,在 ubuntu unity 中,应用程序指示器(替代系统托盘)不显示我添加到 gtk 库存中的自定义图标,而只显示基本的库存图标。在正确的图标位置,我看到的是“gtk-missing-image”。在我的应用程序工具栏和菜单上,这些图标显示正确,问题只出在顶部应用程序指示器上。我以这种方式集成库存图标后使用 gtk ui 管理器:

factory = gtk.IconFactory()
pixbuf = gtk.gdk.pixbuf_new_from_file(filepath)
iconset = gtk.IconSet(pixbuf)
factory.add(stock_name, iconset)
factory.add_default()

然后是 appindicator 代码:

.....
try:
    import appindicator
    HAS_APPINDICATOR = True
except: HAS_APPINDICATOR = False
....
   if HAS_APPINDICATOR:
        self.ind = appindicator.Indicator("x-tile", "indicator-messages", appindicator.CATEGORY_APPLICATION_STATUS)
        self.ind.set_status(appindicator.STATUS_ACTIVE)
        self.ind.set_attention_icon("indicator-messages-new")
        self.ind.set_icon("x-tile")
        self.ind.set_menu(self.ui.get_widget("/SysTrayMenu"))
    else:
        self.status_icon = gtk.StatusIcon()
        self.status_icon.set_from_stock("Tile Quad")
        self.status_icon.connect('button-press-event', self.on_mouse_button_clicked_systray)
        self.status_icon.set_tooltip(_("Tile the Windows Upon your X Desktop"))

完整代码:

hg clone https://giuspen-x-tile.googlecode.com/hg/ hg_x-tile
cd hg_x-tile
hg up x-tile2

使用系统托盘时图标可见,而不是应用程序指示器。如果有人解决了这个问题,请帮忙。

答案1

无法使用在 appindicators 中即时创建的库存图标。

使用 statusicons 时,您的应用程序将全权负责构建和显示菜单。但是,使用 appindicators 时,幕后情况是,您的应用程序只是发出请求,而真正构建和显示菜单的是后台运行的服务。

此服务是一个独立程序,与您的程序完全分离。因此,它无法感知您即时创建的环境变量和库存图标名称等信息。

最好的解决方法是使用指标的 set_icon_theme_path 来告诉它图标在哪里。在这种情况下,您甚至不需要更改库存。

相关内容