#! /usr/bin/env python
# -*- coding: UTF-8 -*-

# setup GTK
try:
    import pygtk; pygtk.require("2.0")
except:
    print "You need a recent version of PyGTK to run this program."


import os
import sys
import gnome.ui

import NullObject


# running gdesklets as root is not allowed!
if (os.getuid() == 0):
    print "You mustn't run gDesklets as super user."
    sys.exit(1)


# set up i18n
from utils import i18n
import __builtin__
__builtin__._ = i18n.Translator("gdesklets")


#
# Redirects stdout and stderr to the given logfile and stdin to /dev/null.
#
def redirect_to_logfile(logfile):

    out_log = file(logfile, "w")
    err_log = file(logfile, "w", 0)
    dev_null = file("/dev/null", "r")
    
    os.dup2(out_log.fileno(), sys.stdout.fileno())
    os.dup2(err_log.fileno(), sys.stderr.fileno())
    os.dup2(dev_null.fileno(), sys.stdin.fileno())


#
# Performs the UNIX double fork to detach as a daemon process as described at
# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/278731 and
# http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66012
#
def detach_as_daemon():

    try:
        pid = os.fork()
        if (pid > 0): os._exit(0)
    except:
        print "Could not fork daemon."
        sys.exit(1)

    os.chdir("/")
    os.setsid()

    try:
        pid = os.fork()
        if (pid > 0): os._exit(0)
    except:
        print "Could not fork daemon."
        sys.exit(1)


# be a good daemon and detach yourself
from main import LOGFILE
redirect_to_logfile(LOGFILE)
detach_as_daemon()


# prepare gdesklets (locale, signals, program_init)
from main import init
init()


# build our sockets, trayicon and start them
from main.Starter import Starter
Starter()


# enter gtk's mainloop
import gtk
gtk.mainloop()
