/* * zavai-calendar - simple calendar tool * * Copyright (C) 2009 Enrico Zini * * This program 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 2 of the License, or * (at your option) any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ using GLib; //string VERSION = "0.1"; static Posix.pid_t is_running() { string pidfile = zavai.config.homedir + "/calendar.pid"; string contents; try { if (!FileUtils.get_contents(pidfile, out contents)) return 0; } catch (FileError e) { return 0; } int val = contents.to_int(); string procdir = "/proc/%d".printf(val); if (FileUtils.test(procdir, FileTest.IS_DIR)) return (Posix.pid_t)val; else return 0; } static void make_pidfile() { string pidfile = zavai.config.homedir + "/calendar.pid"; FileUtils.set_contents(pidfile, "%d".printf(Posix.getpid())); } static void on_kill(int sig) { Gtk.main_quit(); } static int main (string[] args) { bool opt_popup = false; GLib.OptionEntry[] entries = new GLib.OptionEntry[] { OptionEntry() { long_name = "popup", short_name = 'p', flags = 0, arg = OptionArg.NONE, arg_data = &opt_popup, description = "run as a popup at the specified location on screen", arg_description = null }, OptionEntry() }; Gtk.init_with_args(ref args, "", entries, null); // parser = Parser(usage="usage: %prog [options]", // version="%prog "+ VERSION, // description="Simple interactive interface for the OpenMoko") // parser.add_option("-v", "--verbose", action="store_true", help="verbose mode") // // (opts, args) = parser.parse_args() // // if not opts.verbose: // zavai.set_quiet() // // # Read configuration // zavai.info("Loading configuration") // conf = zavai.Config() // Set up zavai // Core infrastructure zavai.config = new zavai.Config(); // User interface var calendar = new zavai.widgets.Calendar(); Gtk.Window win = new Gtk.Window(Gtk.WindowType.TOPLEVEL); if (opt_popup) { Posix.pid_t pid = is_running(); if (pid != 0) { // Kill a running calendar Posix.kill(pid, Posix.SIGINT); FileUtils.unlink(zavai.config.homedir + "/calendar.pid"); return 0; } make_pidfile(); win.set_decorated(false); //win.set_resizable(false); win.set_border_width(5); win.set_skip_taskbar_hint(true); win.set_skip_pager_hint(true); // gtk_window_set_type_hint(GTK_WINDOW(win), GDK_WINDOW_TYPE_HINT_DOCK); win.set_position(Gtk.WindowPosition.MOUSE); win.stick(); } win.title = "Zavai calendar"; win.destroy += Gtk.main_quit; win.add(calendar); win.set_size_request(300, 500); win.show_all(); win.show(); // Shutdown the main loop on SIGINT Posix.signal(Posix.SIGINT, on_kill); Posix.signal(Posix.SIGTERM, on_kill); Gtk.main(); calendar.flush(); return 0; }