Пользовательские значки приложений не видны в индикаторе приложения, но видны в старом системном трее

Недавно я заметил, что в Ubuntu Unity индикатор приложения (который заменяет системный трей) показывает не пользовательские значки, которые я добавил в набор gtk, а только базовые значки. Вместо правильных значков я вижу «gtk-missing-image». На панелях инструментов и меню приложений эти значки отображаются правильно, проблема только в верхнем индикаторе приложения. Я использую gtk ui manager после интеграции стандартных иконок таким образом:

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

, затем код приложения:

.....
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

. Иконки видны при использовании системного трея, а не с индикатором приложения. Если кто-нибудь решил эту проблему, пожалуйста, помогите.

0
задан 10 January 2012 в 21:48

1 ответ

Невозможно использовать стандартные иконки, созданные на лету, в аппендикаторах.

При использовании statusicons ваше приложение полностью отвечает за создание и отображение меню. Тем не менее, при использовании appindicators, то, что происходит внутри, это то, что ваше приложение просто делает запрос, а тот, кто действительно создает и отображает меню, является сервисом, работающим в фоновом режиме.

Эта услуга является независимой программой, полностью отделенной от вашей. Поэтому он не знает о таких вещах, как переменные среды и имена значков акций, которые вы создали на лету.

Лучший обходной путь - использовать set_icon_theme_path индикатора, чтобы сообщить ему, где находится значок. Вам даже не нужно менять акции в этом случае.

0
ответ дан 10 January 2012 в 21:48

Другие вопросы по тегам:

Похожие вопросы: