diff options
author | Francesco Marella <francesco.marella@gmail.com> | 2010-07-21 16:30:08 +0200 |
---|---|---|
committer | Francesco Marella <francesco.marella@gmail.com> | 2010-07-21 16:30:08 +0200 |
commit | 34a288486d1615a7afea5dc651d316b23def7ddb (patch) | |
tree | d361d474ed99e77387a9894b603fb2273d0ee671 /src/gtk-redshift | |
parent | Provide feedback on what location provider/color adjustment method that (diff) | |
download | redshift-ng-34a288486d1615a7afea5dc651d316b23def7ddb.tar.gz redshift-ng-34a288486d1615a7afea5dc651d316b23def7ddb.tar.bz2 redshift-ng-34a288486d1615a7afea5dc651d316b23def7ddb.tar.xz |
Optimize indicators code.
User, at configure time, chooses to enable or disable the gui. Determine
at runtime whether to use the appindicator or status icon as fallback.
Diffstat (limited to 'src/gtk-redshift')
-rw-r--r-- | src/gtk-redshift/Makefile.am | 29 | ||||
-rw-r--r-- | src/gtk-redshift/gtk-redshift (renamed from src/gtk-redshift/gtk-redshift.in) | 2 | ||||
-rw-r--r-- | src/gtk-redshift/rsappindicator.py | 114 | ||||
-rw-r--r-- | src/gtk-redshift/statusicon.py | 58 |
4 files changed, 46 insertions, 157 deletions
diff --git a/src/gtk-redshift/Makefile.am b/src/gtk-redshift/Makefile.am index 5896f1b..5101cef 100644 --- a/src/gtk-redshift/Makefile.am +++ b/src/gtk-redshift/Makefile.am @@ -1,6 +1,5 @@ -if ENABLE_STATUSICON -gui_module=statusicon +if ENABLE_GUI gtk_redshift_PYTHON = \ __init__.py \ utils.py \ @@ -9,32 +8,12 @@ nodist_gtk_redshift_PYTHON = \ defs.py gtk_redshiftdir = $(pythondir)/gtk_redshift -bin_SCRIPTS = gtk-redshift +dist_bin_SCRIPTS = gtk-redshift endif -if ENABLE_APPINDICATOR -gui_module=rsappindicator -gtk_redshift_PYTHON = \ - __init__.py \ - utils.py \ - rsappindicator.py -nodist_gtk_redshift_PYTHON = \ - defs.py -gtk_redshiftdir = $(pythondir)/gtk_redshift - -bin_SCRIPTS = gtk-redshift -endif - -EXTRA_DIST = gtk-redshift.in \ - defs.py.in - -CLEANFILES = defs.py \ - gtk-redshift - +EXTRA_DIST = defs.py.in -# Main GUI script -gtk-redshift: gtk-redshift.in - sed -e "s|\@gui_module\@|$(gui_module)|g" $< > $@ +CLEANFILES = defs.py # Local python definitions defs.py: defs.py.in diff --git a/src/gtk-redshift/gtk-redshift.in b/src/gtk-redshift/gtk-redshift index 120e05c..56d940e 100644 --- a/src/gtk-redshift/gtk-redshift.in +++ b/src/gtk-redshift/gtk-redshift @@ -19,5 +19,5 @@ if __name__ == '__main__': - from gtk_redshift.@gui_module@ import run + from gtk_redshift.statusicon import run run() diff --git a/src/gtk-redshift/rsappindicator.py b/src/gtk-redshift/rsappindicator.py deleted file mode 100644 index 23f1ac8..0000000 --- a/src/gtk-redshift/rsappindicator.py +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/env python -# rsappindicator.py -- Application Panel Indicator source -# This file is part of Redshift. - -# Redshift is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. - -# Redshift is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with Redshift. If not, see <http://www.gnu.org/licenses/>. - -# Copyright (c) 2010 Jon Lund Steffensen <jonlst@gmail.com> - - -import sys, os -import subprocess, signal -import gettext - -import pygtk -pygtk.require("2.0") - -import gtk, glib -try: - import appindicator -except ImportError as ie: - # No module named appindicator - sys.exit(str(ie)) - -import defs -import utils - - -def run(): - # Internationalisation - gettext.bindtextdomain('redshift', defs.LOCALEDIR) - gettext.textdomain('redshift') - _ = gettext.gettext - - # Start redshift with arguments from the command line - args = sys.argv[1:] - args.insert(0, os.path.join(defs.BINDIR, 'redshift')) - process = subprocess.Popen(args) - - try: - # Create status icon - indicator = appindicator.Indicator ("redshift", - "redshift", - appindicator.CATEGORY_APPLICATION_STATUS) - indicator.set_status (appindicator.STATUS_ACTIVE) - - def toggle_cb(widget, data=None): - if indicator.get_icon() == 'redshift': - indicator.set_icon('redshift-idle') - else: - indicator.set_icon('redshift') - process.send_signal(signal.SIGUSR1) - - def autostart_cb(widget, data=None): - utils.set_autostart(widget.get_active()) - - def destroy_cb(widget, data=None): - gtk.main_quit() - return False - - # Create popup menu - status_menu = gtk.Menu() - - toggle_item = gtk.ImageMenuItem(_('Toggle')) - toggle_item.connect('activate', toggle_cb) - status_menu.append(toggle_item) - - autostart_item = gtk.CheckMenuItem(_('Autostart')) - try: - autostart_item.set_active(utils.get_autostart()) - except IOError as strerror: - print strerror - autostart_item.set_property('sensitive', False) - else: - autostart_item.connect('activate', autostart_cb) - finally: - status_menu.append(autostart_item) - - quit_item = gtk.ImageMenuItem(gtk.STOCK_QUIT) - quit_item.connect('activate', destroy_cb) - status_menu.append(quit_item) - - status_menu.show_all() - - # Set the menu - indicator.set_menu(status_menu) - - def child_cb(pid, cond, data=None): - sys.exit(-1) - - # Add watch on child process - glib.child_watch_add(process.pid, child_cb) - - # Run main loop - gtk.main() - - except KeyboardInterrupt: - # Ignore user interruption - pass - - finally: - # Always terminate redshift - process.terminate() - process.wait() diff --git a/src/gtk-redshift/statusicon.py b/src/gtk-redshift/statusicon.py index 82b5cd6..8c084a8 100644 --- a/src/gtk-redshift/statusicon.py +++ b/src/gtk-redshift/statusicon.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -# statusicon.py -- GTK+ status icon source +# statusicon.py -- Application panel indicator / GTK+ status icon source # This file is part of Redshift. # Redshift is free software: you can redistribute it and/or modify @@ -26,6 +26,10 @@ import pygtk pygtk.require("2.0") import gtk, glib +try: + import appindicator +except ImportError: + appindicator = None import defs import utils @@ -43,23 +47,37 @@ def run(): process = subprocess.Popen(args) try: - # Create status icon - status_icon = gtk.StatusIcon() - status_icon.set_from_icon_name('redshift') - status_icon.set_tooltip('Redshift') + if appindicator: + # Create indicator + indicator = appindicator.Indicator ("redshift", + "redshift", + appindicator.CATEGORY_APPLICATION_STATUS) + indicator.set_status (appindicator.STATUS_ACTIVE) + else: + # Create status icon + status_icon = gtk.StatusIcon() + status_icon.set_from_icon_name('redshift') + status_icon.set_tooltip('Redshift') def toggle_cb(widget, data=None): process.send_signal(signal.SIGUSR1) - if status_icon.get_icon_name() == 'redshift': - status_icon.set_from_icon_name('redshift-idle') - else: - status_icon.set_from_icon_name('redshift') + if appindicator: + if indicator.get_icon() == 'redshift': + indicator.set_icon('redshift-idle') + else: + indicator.set_icon('redshift') + else: + if status_icon.get_icon_name() == 'redshift': + status_icon.set_from_icon_name('redshift-idle') + else: + status_icon.set_from_icon_name('redshift') def autostart_cb(widget, data=None): utils.set_autostart(widget.get_active()) def destroy_cb(widget, data=None): - status_icon.set_visible(False) + if not appindicator: + status_icon.set_visible(False) gtk.main_quit() return False @@ -85,15 +103,21 @@ def run(): quit_item.connect('activate', destroy_cb) status_menu.append(quit_item) - def popup_menu_cb(widget, button, time, data=None): + if appindicator: status_menu.show_all() - status_menu.popup(None, None, gtk.status_icon_position_menu, - button, time, status_icon) - # Connect signals for status icon and show - status_icon.connect('activate', toggle_cb) - status_icon.connect('popup-menu', popup_menu_cb) - status_icon.set_visible(True) + # Set the menu + indicator.set_menu(status_menu) + else: + def popup_menu_cb(widget, button, time, data=None): + status_menu.show_all() + status_menu.popup(None, None, gtk.status_icon_position_menu, + button, time, status_icon) + + # Connect signals for status icon and show + status_icon.connect('activate', toggle_cb) + status_icon.connect('popup-menu', popup_menu_cb) + status_icon.set_visible(True) def child_cb(pid, cond, data=None): sys.exit(-1) |