From d7f66c09c1c3163bbcd312542e3ad7f7a46fb197 Mon Sep 17 00:00:00 2001 From: Francesco Marella Date: Fri, 4 Jun 2010 12:22:06 +0200 Subject: Implement the application panel indicator for redshift --- src/gtk-redshift/rsappindicator.py | 95 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 src/gtk-redshift/rsappindicator.py (limited to 'src/gtk-redshift/rsappindicator.py') diff --git a/src/gtk-redshift/rsappindicator.py b/src/gtk-redshift/rsappindicator.py new file mode 100644 index 0000000..c681d89 --- /dev/null +++ b/src/gtk-redshift/rsappindicator.py @@ -0,0 +1,95 @@ +#!/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 . + +# Copyright (c) 2010 Jon Lund Steffensen + + +import sys, os +import subprocess, signal +import gettext + +import pygtk +pygtk.require("2.0") + +import gtk, glib +import appindicator + +import defs + + +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 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) + + 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() -- cgit v1.2.3-70-g09d2 From 69d1996f6d40b23558e7edc5b8000726438344e8 Mon Sep 17 00:00:00 2001 From: Francesco Marella Date: Sat, 5 Jun 2010 08:47:02 +0200 Subject: Wrap in try...except only gtk.main. --- src/gtk-redshift/rsappindicator.py | 60 +++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 30 deletions(-) (limited to 'src/gtk-redshift/rsappindicator.py') diff --git a/src/gtk-redshift/rsappindicator.py b/src/gtk-redshift/rsappindicator.py index c681d89..0caebc1 100644 --- a/src/gtk-redshift/rsappindicator.py +++ b/src/gtk-redshift/rsappindicator.py @@ -42,46 +42,46 @@ def run(): 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) + # 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 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 destroy_cb(widget, data=None): - gtk.main_quit() - return False + def destroy_cb(widget, data=None): + gtk.main_quit() + return False - # Create popup menu - status_menu = gtk.Menu() + # Create popup menu + status_menu = gtk.Menu() - toggle_item = gtk.ImageMenuItem(_('Toggle')) - toggle_item.connect('activate', toggle_cb) - status_menu.append(toggle_item) + toggle_item = gtk.ImageMenuItem(_('Toggle')) + toggle_item.connect('activate', toggle_cb) + status_menu.append(toggle_item) - quit_item = gtk.ImageMenuItem(gtk.STOCK_QUIT) - quit_item.connect('activate', destroy_cb) - status_menu.append(quit_item) + quit_item = gtk.ImageMenuItem(gtk.STOCK_QUIT) + quit_item.connect('activate', destroy_cb) + status_menu.append(quit_item) - status_menu.show_all() + status_menu.show_all() - # Set the menu - indicator.set_menu(status_menu) + # Set the menu + indicator.set_menu(status_menu) - def child_cb(pid, cond, data=None): - sys.exit(-1) + def child_cb(pid, cond, data=None): + sys.exit(-1) - # Add watch on child process - glib.child_watch_add(process.pid, child_cb) + # Add watch on child process + glib.child_watch_add(process.pid, child_cb) + try: # Run main loop gtk.main() -- cgit v1.2.3-70-g09d2 From 57f88da335e64509a2710c7c85cbb9b246640a3c Mon Sep 17 00:00:00 2001 From: Francesco Marella Date: Sat, 5 Jun 2010 09:17:17 +0200 Subject: Add a check for appindicator's module import --- src/gtk-redshift/rsappindicator.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/gtk-redshift/rsappindicator.py') diff --git a/src/gtk-redshift/rsappindicator.py b/src/gtk-redshift/rsappindicator.py index 0caebc1..42514e4 100644 --- a/src/gtk-redshift/rsappindicator.py +++ b/src/gtk-redshift/rsappindicator.py @@ -26,7 +26,11 @@ import pygtk pygtk.require("2.0") import gtk, glib -import appindicator +try: + import appindicator +except ImportError as ie: + # No module named appindicator + sys.exit(str(ie)) import defs -- cgit v1.2.3-70-g09d2 From 84501af9338e2fb4a0252e8990981085b197ab46 Mon Sep 17 00:00:00 2001 From: Francesco Marella Date: Sun, 6 Jun 2010 14:39:50 +0200 Subject: rvert commit 103: Wrap in try...except only gtk.main. --- src/gtk-redshift/rsappindicator.py | 60 +++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 30 deletions(-) (limited to 'src/gtk-redshift/rsappindicator.py') diff --git a/src/gtk-redshift/rsappindicator.py b/src/gtk-redshift/rsappindicator.py index 42514e4..59fa725 100644 --- a/src/gtk-redshift/rsappindicator.py +++ b/src/gtk-redshift/rsappindicator.py @@ -46,46 +46,46 @@ def run(): args.insert(0, os.path.join(defs.BINDIR, 'redshift')) process = subprocess.Popen(args) - # Create status icon - indicator = appindicator.Indicator ("redshift", - "redshift", - appindicator.CATEGORY_APPLICATION_STATUS) - indicator.set_status (appindicator.STATUS_ACTIVE) + 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 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 destroy_cb(widget, data=None): - gtk.main_quit() - return False + def destroy_cb(widget, data=None): + gtk.main_quit() + return False - # Create popup menu - status_menu = gtk.Menu() + # Create popup menu + status_menu = gtk.Menu() - toggle_item = gtk.ImageMenuItem(_('Toggle')) - toggle_item.connect('activate', toggle_cb) - status_menu.append(toggle_item) + toggle_item = gtk.ImageMenuItem(_('Toggle')) + toggle_item.connect('activate', toggle_cb) + status_menu.append(toggle_item) - quit_item = gtk.ImageMenuItem(gtk.STOCK_QUIT) - quit_item.connect('activate', destroy_cb) - status_menu.append(quit_item) + quit_item = gtk.ImageMenuItem(gtk.STOCK_QUIT) + quit_item.connect('activate', destroy_cb) + status_menu.append(quit_item) - status_menu.show_all() + status_menu.show_all() - # Set the menu - indicator.set_menu(status_menu) + # Set the menu + indicator.set_menu(status_menu) - def child_cb(pid, cond, data=None): - sys.exit(-1) + def child_cb(pid, cond, data=None): + sys.exit(-1) - # Add watch on child process - glib.child_watch_add(process.pid, child_cb) + # Add watch on child process + glib.child_watch_add(process.pid, child_cb) - try: # Run main loop gtk.main() -- cgit v1.2.3-70-g09d2