Codebase list xapp / ad85cb7 test-scripts / xapp-status-icon-variants / xapp-status-icon-all-menus
ad85cb7

Tree @ad85cb7 (Download .tar.gz)

xapp-status-icon-all-menus @ad85cb7raw · history · blame

#!/usr/bin/python3

import gi
gi.require_version('XApp', '1.0')
from gi.repository import XApp, Gtk, Gdk
from gi.repository import GLib, GObject
import sys

"""
This variant tests behavior of giving primary and secondary menus to the StatusIcon instance.
The instance handles all menu-related things internally.  There is no activation signal.
"""

class App(GObject.Object):

    def __init__(self):
        super(App, self).__init__()
        self.status_icon = XApp.StatusIcon()
        self.status_icon.connect("state-changed", self.on_icon_state_changed)

        self.status_icon.set_icon_name("folder-symbolic")
        self.status_icon.set_tooltip_text("Testing primary and secondary menus")
        self.status_icon.set_label("label 1")
        self.status_icon.set_visible(True)
        self.status_icon.set_metadata(' { "highlight-both-menus": true } ')

        self.status_icon.connect("scroll-event", self.handle_scroll_event)

        self.counter = 1

        self.label = None
        self.window = None

        menu = Gtk.Menu()
        menu.append(Gtk.MenuItem.new_with_label("Engage the hyperdrive"))
        menu.append(Gtk.SeparatorMenuItem())
        menu.append(Gtk.MenuItem.new_with_label("It's a trap!"))
        menu.show_all()

        self.status_icon.set_primary_menu(menu)

        menu = Gtk.Menu()
        menu.append(Gtk.MenuItem.new_with_label("Hi, secondary menu here!"))
        menu.append(Gtk.SeparatorMenuItem())
        menu.append(Gtk.MenuItem.new_with_label("Help me!"))
        menu.show_all()

        self.status_icon.set_secondary_menu(menu)

        GLib.timeout_add_seconds(2, self.on_timeout_cb)

    def on_icon_state_changed(self, icon, new_state):
        print("Icon state changed - the state is now: %s" % new_state)

    def on_timeout_cb(self):
        self.counter += 1
        self.status_icon.set_label("label %d" % self.counter)
        return True

    def make_window(self):
        w = Gtk.Window(default_width=300, default_height=130)
        b = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        w.add(b)
        self.label = Gtk.Label("How can I help you?")
        b.pack_start(self.label, True, True, 0)

        self.window = w
        w.show_all()

    def handle_scroll_event(self, icon, amount, orientation, time, data=None):
        if self.window == None:
            self.make_window()

        if orientation == XApp.ScrollDirection.UP:
            self.label.set_text("Scrolled Up !")
        elif orientation == XApp.ScrollDirection.DOWN:
            self.label.set_text("Scrolled Down!")
        elif orientation == XApp.ScrollDirection.LEFT:
            self.label.set_text("Scrolled Left!")
        else:
            self.label.set_text("Scrolled Right!")

if __name__ == '__main__':
    GLib.setenv ("G_MESSAGES_DEBUG", "all", True)
    app = App()
    try:
        GLib.MainLoop().run()
    except KeyboardInterrupt:
        pass
    sys.exit(0)