Ivan
Ivan

Reputation: 1085

Creating application specific stock icons in GTK3

I'm trying to create icons in python and GTK3 for AppIndicator3 , which is using stock items.
When using existing stock icons (like indicator-messages everything is fine.
But when I create my own stock icon it is not displayed (I used both svg and png image). What can be wrong?

I have this code to add icon factory:

from gi.repository import Gtk
from gi.repository import AppIndicator3 as appindicator
import os

_curr_dir=os.path.split(__file__)[0]

if __name__ == "__main__":

    icon_factory=Gtk.IconFactory()
    icon_source=Gtk.IconSource()
    f=os.path.join(_curr_dir, 'pics', 'test.svg')
    if not os.path.exists(f):
        raise Exception('Image %s missing'%f)
    icon_source.set_filename(f)
    icon_source.set_size_wildcarded(True)
    icon_set=Gtk.IconSet()
    icon_set.add_source(icon_source)
    icon_factory.add('myapp-icon', icon_set)
    icon_factory.add_default()

    ind = appindicator.Indicator.new (
                          "example-simple-client",
                          "myapp-icon",
                          appindicator.IndicatorCategory.APPLICATION_STATUS)
    ind.set_status (appindicator.IndicatorStatus.ACTIVE)
    ind.set_attention_icon ("indicator-messages-new")
    ind.set_label("test", "test")

Upvotes: 1

Views: 653

Answers (1)

DobbyTheElf
DobbyTheElf

Reputation: 789

This is an old question, but I assume that your problem lies with AppIndicator3, as you can use your own icons in things like toolbars as shown in this example:

import os
import gi

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

_curr_dir = os.path.split(__file__)[0]

if __name__ == "__main__":
    icon_factory = Gtk.IconFactory()
    icon_source = Gtk.IconSource()
    f = os.path.join(_curr_dir, "pics", "test.svg")
    if not os.path.exists(f):
        raise Exception("Image %s missing" % f)
    icon_source.set_filename(f)
    icon_source.set_size_wildcarded(True)
    icon_set = Gtk.IconSet()
    icon_set.add_source(icon_source)
    icon_factory.add("myapp-icon", icon_set)
    icon_factory.add_default()

    window = Gtk.Window()
    uimanager = Gtk.UIManager()
    accelgroup = uimanager.get_accel_group()
    window.add_accel_group(accelgroup)
    action_items = [
        # Fields for each action item:
        # [name, stock_id, value, label, accelerator, tooltip, callback]
        ["Quit", "myapp-icon", "_Quit", "<control>q", "Quit", Gtk.main_quit],
    ]
    ui = """<ui>
    <toolbar name='ToolBar'>
    <toolitem action='Quit'/>
    </toolbar>
    </ui>
    """

    # Create the basic Gtk.ActionGroup instance
    # and fill it with Gtk.Action instances
    actions_basic = Gtk.ActionGroup()
    actions_basic.add_actions(action_items, None)

    # Add the actiongroup to the uimanager
    uimanager.insert_action_group(actions_basic, 0)

    # add the basic XML description of the GUI
    uimanager.add_ui_from_string(ui)

    # extract the toolbar
    toolbar = uimanager.get_widget("/ToolBar")

    window.add(toolbar)
    window.connect("destroy", Gtk.main_quit)
    window.show_all()
    Gtk.main()

Upvotes: 0

Related Questions