aboutsummaryrefslogtreecommitdiffstats
path: root/src/gtk-redshift
diff options
context:
space:
mode:
authorFrancesco Marella <francesco.marella@gmail.com>2010-07-21 16:30:08 +0200
committerFrancesco Marella <francesco.marella@gmail.com>2010-07-21 16:30:08 +0200
commit34a288486d1615a7afea5dc651d316b23def7ddb (patch)
treed361d474ed99e77387a9894b603fb2273d0ee671 /src/gtk-redshift
parentProvide feedback on what location provider/color adjustment method that (diff)
downloadredshift-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.am29
-rw-r--r--src/gtk-redshift/gtk-redshift (renamed from src/gtk-redshift/gtk-redshift.in)2
-rw-r--r--src/gtk-redshift/rsappindicator.py114
-rw-r--r--src/gtk-redshift/statusicon.py58
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)