From d40a3db96be2e524009c64e97c805653c359a45b Mon Sep 17 00:00:00 2001 From: Andrea Brancaleoni Date: Thu, 6 Apr 2017 11:36:28 +0200 Subject: [PATCH 01/10] indicator-doom-cpu: include plain GTK support --- indicator-doom-cpu | 82 +++++++++++++++++++++++++++++++++------------- 1 file changed, 59 insertions(+), 23 deletions(-) diff --git a/indicator-doom-cpu b/indicator-doom-cpu index 0022b2c..cda1b16 100755 --- a/indicator-doom-cpu +++ b/indicator-doom-cpu @@ -1,6 +1,7 @@ #!/usr/bin/env python APP_LICENCE = ''' Copyright (C) 2014 Edward G. Bruck +Copyright (C) 2017 Andrea Brancaleoni This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3, as published @@ -15,15 +16,23 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . ''' APP_NAME = 'DOOM CPU Indicator' -APP_AUTHOR = 'Edward G. Bruck ' APP_WEBSITE = 'https://github.com/ebruck/indicator-doom-cpu' APP_VERSION = '1.0.0' +APP_COPYRIGHT = '\n'.join([c for c in str.splitlines(APP_LICENCE) if c.startswith("Copyright")]) +APP_AUTHORS = [a[10:] for a in str.splitlines(APP_LICENCE) if a.startswith("Copyright")] + +print(APP_AUTHORS) import os import time from gi.repository import Gtk, GObject, GdkPixbuf -from gi.repository import AppIndicator3 as AppIndicator + +try: + from gi.repository import AppIndicator3 as AppIndicator + appindicator_imported = True +except ImportError: + appindicator_imported = False APP_IMAGES = [os.path.abspath(os.path.dirname(__file__)) + '/icons/1.png', os.path.abspath(os.path.dirname(__file__)) + '/icons/2.png', @@ -71,28 +80,23 @@ class CPUsage: class AboutDialog(Gtk.AboutDialog): def __init__(self): - global APP_NAME, APP_IMAGES, APP_VERSION, APP_LICENCE, APP_AUTHOR, APP_WEBSITE + global APP_NAME, APP_IMAGES, APP_VERSION, APP_LICENCE, APP_COPYRIGHT, APP_AUTHORS, APP_WEBSITE Gtk.AboutDialog.__init__(self) self.set_icon_from_file(APP_IMAGES[0]) self.set_logo(GdkPixbuf.Pixbuf.new_from_file(APP_IMAGES[0])) self.set_program_name(APP_NAME) self.set_version(APP_VERSION) - self.set_copyright('Copyright (c) 2014\n' + APP_AUTHOR) + self.set_copyright(APP_COPYRIGHT) self.set_license(APP_LICENCE.strip()) - self.set_authors([APP_AUTHOR]) + self.set_authors(APP_AUTHORS) self.set_artists(['id Software']) self.set_website(APP_WEBSITE) self.connect('response', lambda self, *args: self.destroy()) self.show_all() - -class DOOMCPUIndicator(object): +class AbstractDOOMCPUIndicator(object): def __init__(self): - global APP_IMAGES - self.app_indicator = AppIndicator.Indicator.new(APP_NAME, APP_IMAGES[0], - AppIndicator.IndicatorCategory.APPLICATION_STATUS) - - self.app_indicator.set_status(AppIndicator.IndicatorStatus.ACTIVE) + global APP_IMAGES GObject.timeout_add(1000, self.on_update_timer) self.menu_item = None @@ -103,25 +107,23 @@ class DOOMCPUIndicator(object): self.on_update_timer() def build_menu(self): - menu = Gtk.Menu() + self.menu = Gtk.Menu() self.menu_item = Gtk.MenuItem() - menu.append(self.menu_item) + self.menu.append(self.menu_item) self.cpu_load_menu_item = Gtk.MenuItem('CPU: 0%') self.cpu_load_menu_item.set_sensitive(False) - menu.append(self.cpu_load_menu_item) + self.menu.append(self.cpu_load_menu_item) - menu.append(Gtk.SeparatorMenuItem()) + self.menu.append(Gtk.SeparatorMenuItem()) menu_item = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_ABOUT, None) menu_item.connect('activate', self.on_about) - menu.append(menu_item) + self.menu.append(menu_item) menu_item = Gtk.ImageMenuItem.new_from_stock(Gtk.STOCK_QUIT, None) menu_item.connect('activate', self.on_quit) - menu.append(menu_item) - menu.show_all() - - self.app_indicator.set_menu(menu) + self.menu.append(menu_item) + self.menu.show_all() def on_update_timer(self): global APP_IMAGES, APP_NUM_IMAGES @@ -129,7 +131,7 @@ class DOOMCPUIndicator(object): image_idx = cpu_load / (100/(APP_NUM_IMAGES-1)) if image_idx != self.previous_image_idx: - self.app_indicator.set_icon(APP_IMAGES[image_idx]) + self.set_icon(APP_IMAGES[image_idx]) if cpu_load != self.previous_cpu_load: self.cpu_load_menu_item.set_label('CPU: %d%%' % int(cpu_load)) @@ -144,8 +146,42 @@ class DOOMCPUIndicator(object): def on_about(self, widget): AboutDialog() + def set_icon(self, icon): + pass + def run(self): Gtk.main() +class DOOMCPUIndicator(AbstractDOOMCPUIndicator): + def __init__(self): + AbstractDOOMCPUIndicator.__init__(self) + self.app_indicator = AppIndicator.Indicator.new(APP_NAME, APP_IMAGES[0], + AppIndicator.IndicatorCategory.APPLICATION_STATUS) + self.app_indicator.set_status(AppIndicator.IndicatorStatus.ACTIVE) + + def build_menu(self): + super(DOOMCPUIndicator, self).build_menu() + self.app_indicator.set_menu(menu) + + def set_icon(self, icon): + super(DOOMCPUIndicator, self).set_icon(icon) + self.app_indicator.set_icon(icon) + + +class DOOMCPUStatusIcon(AbstractDOOMCPUIndicator): + def __init__(self): + AbstractDOOMCPUIndicator.__init__(self) + self.icon_indicator = Gtk.StatusIcon() + self.icon_indicator.set_from_file(APP_IMAGES[0]) + self.icon_indicator.connect('popup-menu', lambda data, evt, time: + self.menu.popup(None, None, None, None, evt, time)) + + def set_icon(self, icon): + super(DOOMCPUStatusIcon, self).set_icon(icon) + self.icon_indicator.set_from_file(icon) + if __name__ == '__main__': - DOOMCPUIndicator().run() + if appindicator_imported: + DOOMCPUIndicator().run() + else: + DOOMCPUStatusIcon().run() \ No newline at end of file From 931eafee5350f229cad7d6167e804a6f74d71fb5 Mon Sep 17 00:00:00 2001 From: Andrea Brancaleoni Date: Thu, 6 Apr 2017 18:07:36 +0200 Subject: [PATCH 02/10] indicator-doom-cpu: invert __init__ superclass order --- indicator-doom-cpu | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/indicator-doom-cpu b/indicator-doom-cpu index cda1b16..bced1c8 100755 --- a/indicator-doom-cpu +++ b/indicator-doom-cpu @@ -96,7 +96,7 @@ class AboutDialog(Gtk.AboutDialog): class AbstractDOOMCPUIndicator(object): def __init__(self): - global APP_IMAGES + global APP_IMAGES GObject.timeout_add(1000, self.on_update_timer) self.menu_item = None @@ -154,15 +154,15 @@ class AbstractDOOMCPUIndicator(object): class DOOMCPUIndicator(AbstractDOOMCPUIndicator): def __init__(self): - AbstractDOOMCPUIndicator.__init__(self) self.app_indicator = AppIndicator.Indicator.new(APP_NAME, APP_IMAGES[0], AppIndicator.IndicatorCategory.APPLICATION_STATUS) + AbstractDOOMCPUIndicator.__init__(self) self.app_indicator.set_status(AppIndicator.IndicatorStatus.ACTIVE) def build_menu(self): super(DOOMCPUIndicator, self).build_menu() self.app_indicator.set_menu(menu) - + def set_icon(self, icon): super(DOOMCPUIndicator, self).set_icon(icon) self.app_indicator.set_icon(icon) @@ -173,9 +173,9 @@ class DOOMCPUStatusIcon(AbstractDOOMCPUIndicator): AbstractDOOMCPUIndicator.__init__(self) self.icon_indicator = Gtk.StatusIcon() self.icon_indicator.set_from_file(APP_IMAGES[0]) - self.icon_indicator.connect('popup-menu', lambda data, evt, time: + self.icon_indicator.connect('popup-menu', lambda data, evt, time: self.menu.popup(None, None, None, None, evt, time)) - + def set_icon(self, icon): super(DOOMCPUStatusIcon, self).set_icon(icon) self.icon_indicator.set_from_file(icon) @@ -184,4 +184,4 @@ if __name__ == '__main__': if appindicator_imported: DOOMCPUIndicator().run() else: - DOOMCPUStatusIcon().run() \ No newline at end of file + DOOMCPUStatusIcon().run() From e94f1c096aa1772f180a6f4b4c576a0a4945dfdf Mon Sep 17 00:00:00 2001 From: Andrea Brancaleoni Date: Thu, 6 Apr 2017 19:25:18 +0200 Subject: [PATCH 03/10] indicator-doom-cpu: include self. in menu (typo) --- indicator-doom-cpu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indicator-doom-cpu b/indicator-doom-cpu index bced1c8..90e3612 100755 --- a/indicator-doom-cpu +++ b/indicator-doom-cpu @@ -161,7 +161,7 @@ class DOOMCPUIndicator(AbstractDOOMCPUIndicator): def build_menu(self): super(DOOMCPUIndicator, self).build_menu() - self.app_indicator.set_menu(menu) + self.app_indicator.set_menu(self.menu) def set_icon(self, icon): super(DOOMCPUIndicator, self).set_icon(icon) From 6b5ef1865bde9323b72d51feb718b1221238f70f Mon Sep 17 00:00:00 2001 From: Andrew Rogers Date: Sun, 17 Nov 2019 17:49:14 -0500 Subject: [PATCH 04/10] ignore crud directory --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 41f7f34..40a5caf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea/ build/ +crud/ From 19ac86190fb406ed085ba94cddea230a2940947a Mon Sep 17 00:00:00 2001 From: Andrew Rogers Date: Sun, 17 Nov 2019 18:09:09 -0500 Subject: [PATCH 05/10] fix GTK/gi import version, remove tabs --- indicator-doom-cpu | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/indicator-doom-cpu b/indicator-doom-cpu index a1528e3..8f07abf 100755 --- a/indicator-doom-cpu +++ b/indicator-doom-cpu @@ -24,7 +24,10 @@ APP_AUTHORS = [a[10:] for a in str.splitlines(APP_LICENCE) if a.startswith("Copy import os import time -from gi.repository import Gtk, GObject, GdkPixbuf +from gi import require_version +require_version('Gtk', '3.0') + +from gi.repository import Gtk, GLib, GObject, GdkPixbuf try: from gi.repository import AppIndicator3 as AppIndicator @@ -129,7 +132,7 @@ class AbstractDOOMCPUIndicator(object): image_idx = cpu_load / (100/(APP_NUM_IMAGES-1)) if image_idx != self.previous_image_idx: - self.set_icon(APP_IMAGES[image_idx]) + self.set_icon(APP_IMAGES[image_idx]) if cpu_load != self.previous_cpu_load: self.cpu_load_menu_item.set_label('CPU: %d%%' % int(cpu_load)) @@ -145,7 +148,7 @@ class AbstractDOOMCPUIndicator(object): AboutDialog() def set_icon(self, icon): - pass + pass def run(self): Gtk.main() @@ -162,8 +165,8 @@ class DOOMCPUIndicator(AbstractDOOMCPUIndicator): self.app_indicator.set_menu(self.menu) def set_icon(self, icon): - super(DOOMCPUIndicator, self).set_icon(icon) - self.app_indicator.set_icon(icon) + super(DOOMCPUIndicator, self).set_icon(icon) + self.app_indicator.set_icon(icon) class DOOMCPUStatusIcon(AbstractDOOMCPUIndicator): From ca74b5280c945d21cd7de12aa346ce603da8ce3d Mon Sep 17 00:00:00 2001 From: Andrew Rogers Date: Sun, 17 Nov 2019 20:41:38 -0500 Subject: [PATCH 06/10] make sure we're using Python 3 --- indicator-doom-cpu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indicator-doom-cpu b/indicator-doom-cpu index efe81b2..0504062 100755 --- a/indicator-doom-cpu +++ b/indicator-doom-cpu @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 APP_LICENCE = ''' Copyright (C) 2014 Edward G. Bruck Copyright (C) 2017 Andrea Brancaleoni From 3822304f4514452264eb2a6756e5622b0e8512b1 Mon Sep 17 00:00:00 2001 From: Andrew Rogers Date: Sun, 17 Nov 2019 20:45:06 -0500 Subject: [PATCH 07/10] switch from file() to open() --- indicator-doom-cpu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indicator-doom-cpu b/indicator-doom-cpu index 0504062..0453fc4 100755 --- a/indicator-doom-cpu +++ b/indicator-doom-cpu @@ -53,7 +53,7 @@ class CPUsage: self.result = self.compute() def get_time(self): - stat_file = file('/proc/stat', 'r') + stat_file = open('/proc/stat', 'r') time_list = stat_file.readline().split(' ')[2:6] stat_file.close() for i in range(len(time_list)): From 8c2601a75bf955d04d96f34cb42dc2cad86c22f4 Mon Sep 17 00:00:00 2001 From: Andrew Rogers Date: Sun, 17 Nov 2019 21:10:42 -0500 Subject: [PATCH 08/10] fixed timeout_add() call --- indicator-doom-cpu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indicator-doom-cpu b/indicator-doom-cpu index 0453fc4..3453759 100755 --- a/indicator-doom-cpu +++ b/indicator-doom-cpu @@ -99,7 +99,7 @@ class AboutDialog(Gtk.AboutDialog): class AbstractDOOMCPUIndicator(object): def __init__(self): global APP_IMAGES - GObject.timeout_add(1000, self.on_update_timer) + GLib.timeout_add(1000, self.on_update_timer) self.menu_item = None self.cpu_load_menu_item = None From fd902c33a69cb9fa9cdb1f82eb502d6bbe875c37 Mon Sep 17 00:00:00 2001 From: Andrew Rogers Date: Sun, 17 Nov 2019 21:13:25 -0500 Subject: [PATCH 09/10] force image_idx to be an integer --- indicator-doom-cpu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/indicator-doom-cpu b/indicator-doom-cpu index 3453759..9cb80ef 100755 --- a/indicator-doom-cpu +++ b/indicator-doom-cpu @@ -130,7 +130,7 @@ class AbstractDOOMCPUIndicator(object): def on_update_timer(self): global APP_IMAGES, APP_NUM_IMAGES cpu_load = int(CPUsage(interval=0.2).result) - image_idx = cpu_load / (100/(APP_NUM_IMAGES-1)) + image_idx = int(cpu_load / (100/(APP_NUM_IMAGES-1))) if image_idx != self.previous_image_idx: self.set_icon(APP_IMAGES[image_idx]) From 4a1e62ae2b2e4850ca7151deeb98113fbe28500b Mon Sep 17 00:00:00 2001 From: Andrew Rogers Date: Sun, 17 Nov 2019 23:05:50 -0500 Subject: [PATCH 10/10] temp workaround for missing DOOMCPUStatusIcon attr --- indicator-doom-cpu | 1 + 1 file changed, 1 insertion(+) diff --git a/indicator-doom-cpu b/indicator-doom-cpu index 9cb80ef..59831a9 100755 --- a/indicator-doom-cpu +++ b/indicator-doom-cpu @@ -180,6 +180,7 @@ class DOOMCPUStatusIcon(AbstractDOOMCPUIndicator): def set_icon(self, icon): super(DOOMCPUStatusIcon, self).set_icon(icon) + self.icon_indicator = Gtk.StatusIcon() # Werks self.icon_indicator.set_from_file(icon) if __name__ == '__main__':