Ícones de ações personalizadas de aplicativos não visíveis no indicador de aplicativo, mas visíveis na bandeja antiga do sistema

0

Recentemente, notei que no ubuntu unity o indicador de aplicativo (que substitui a bandeja do sistema) não mostra os ícones personalizados que adicionei ao estoque gtk, mas apenas os ícones de ações básicas. No lugar dos ícones corretos, vejo "gtk-missing-image". Nas barras de ferramentas e menus de meus aplicativos, esses ícones são exibidos corretamente, o problema é apenas com o indicador de aplicativo superior. Eu uso o gerenciador gtk ui depois de integrar os ícones de ações desta maneira:

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

então o código do 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"))

para código completo:

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

Os ícones são visíveis ao usar a bandeja do sistema, não com o indicador de aplicativo Se alguém resolveu este problema, por favor ajude.

    
por giuspen 05.12.2011 / 23:09

1 resposta

1

Não é possível usar ícones de ações criados on-the-fly em appindicators.

Ao usar statusicons, seu aplicativo está totalmente encarregado de criar e exibir o menu. No entanto, ao usar appindicators, o que acontece sob o capô é que seu aplicativo apenas faz uma solicitação e quem realmente cria e exibe o menu é um serviço em execução em segundo plano.

Este serviço é um programa independente, completamente separado do seu. Portanto, ele não está ciente de coisas como variáveis de ambiente e nomes de ícones de ações que você criou on-the-fly.

A melhor solução é usar o set_icon_theme_path do indicador para informar onde está o ícone. Você nem precisa alterar o estoque neste caso.

    
por Marcelo Hashimoto 10.01.2012 / 20:43