/*
- * zavai - simple interface to the OpenMoko (or to the FSO stack)
+ * zavai-calendar - simple calendar tool
*
* Copyright (C) 2009 Enrico Zini <enrico@enricozini.org>
*
//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) {
- Gtk.init (ref 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,
// Set up zavai
- // Core infrastructure
+ // Core infrastructure
zavai.config = new zavai.Config();
// User interface
var calendar = new zavai.widgets.Calendar();
- var win = new Gtk.Window(Gtk.WindowType.POPUP);
+ 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.show_all();
win.show();
- // # Shutdown the main loop on SIGINT
- // def on_kill(signum, frame):
- // gtk.main_quit()
- // signal.signal(signal.SIGINT, on_kill)
- // signal.signal(signal.SIGTERM, on_kill)
-
- // zavai.info("Starting")
- // app = registry.resource("app")
- // app.connect("destroy", gtk.main_quit)
- // app.run()
+ // Shutdown the main loop on SIGINT
+ Posix.signal(Posix.SIGINT, on_kill);
+ Posix.signal(Posix.SIGTERM, on_kill);
- //zavai.app.run();
Gtk.main();
- // zavai.info("Shutting down")
- //zavai.registry.shutdown();
+ calendar.flush();
return 0;
}