dragonfire/stray.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
.. module:: stray
:platform: Unix
:synopsis: the top-level submodule of Dragonfire that contains the classes and methods related to Dragonfire's system tray icon.
.. moduleauthor:: Mehmet Mert Yıldıran <mert.yildiran@bil.omu.edu.tr>
"""
import os # Miscellaneous operating system interfaces
TRAY_TOOLTIP = 'System Tray Icon'
TRAY_ICON = '/usr/share/icons/hicolor/48x48/apps/dragonfire_icon.png'
TRAY_ICON_ALT = 'debian/dragonfire_icon.png'
DEVELOPMENT_DIR = os.path.abspath(
os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir)) + '/'
global_event_holder = ''
class SystemTrayIcon:
"""Class to display a system tray icon.
"""
def __init__(self):
"""Initialization method of :class:`dragonfire.stray.SystemTrayIcon` class.
"""
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
self.Gtk = Gtk
self.icon = self.Gtk.StatusIcon()
self.icon.set_title("Dragonfire")
if os.path.isfile(TRAY_ICON):
self.icon.set_from_file(TRAY_ICON)
else:
self.icon.set_from_file(DEVELOPMENT_DIR + TRAY_ICON_ALT)
self.icon.connect('popup-menu', self.popup_menu)
self.Gtk.main()
def exit(self, data=None):
"""Method to exit the system tray icon.
Keyword Args:
data : *Unknown*
"""
self.Gtk.main_quit()
global global_event_holder
global_event_holder.set()
def popup_menu(self, icon, button, time):
"""Method to display a popup menu whenever user clicked to the system tray icon.
Args:
icon: Icon instance.
button: Button instance.
time: Timestamp.
"""
self.menu = self.Gtk.Menu()
menuitemDragonfire = self.Gtk.MenuItem(label="Dragonfire")
self.menu.append(menuitemDragonfire)
menuitemDragonfire.set_sensitive(False)
menuitemSeperator = self.Gtk.SeparatorMenuItem()
self.menu.append(menuitemSeperator)
menuitemExit = self.Gtk.MenuItem(label="Exit")
menuitemExit.connect_object("activate", self.exit, "Exit")
self.menu.append(menuitemExit)
self.menu.show_all()
self.menu.popup(None, None, None, None, button, time)
def SystemTrayExitListenerSet(e):
"""Method to set an event listener for system tray icon exit.
Args:
e: Event.
"""
global global_event_holder
global_event_holder = e
def SystemTrayInit():
"""Method to create a :class:`dragonfire.stray.SystemTrayIcon` instance with the purpose of displaying to system tray icon.
"""
SystemTrayIcon()