~vcs-imports/mayanna/trunk

« back to all changes in this revision

Viewing changes to mayanna/mayanna.py

  • Committer: seiflotfy
  • Date: 2008-05-26 23:01:50 UTC
  • Revision ID: vcs-imports@canonical.com-20080526230150-37ccwtnb1ksqr3q1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
import gc
 
3
import os
 
4
import signal
 
5
from gettext import bindtextdomain, textdomain
 
6
 
 
7
import gtk
 
8
import gnome
 
9
 
 
10
import mayanna_globals
 
11
from mayanna_bar import MayannaBarDock
 
12
from mayanna_applications import ApplicationsTopic
 
13
from mayanna_computer import ComputerTopic
 
14
from mayanna_library import DocumentsTopic
 
15
from mayanna_people import PeopleTopic
 
16
from mayanna_util import gconf_bridge
 
17
 
 
18
 
 
19
#
 
20
# Globals
 
21
#
 
22
 
 
23
mayanna_bar = None
 
24
 
 
25
 
 
26
def _load_mayanna_bar(topics):
 
27
    '''Create a new GimmieBar, and destroy the existing one if it exists.'''
 
28
    
 
29
    
 
30
    global mayanna_bar
 
31
 
 
32
    swapbar = gconf_bridge.get("swapbar")
 
33
    autohide = gconf_bridge.get("autohide")
 
34
    vertical = gconf_bridge.get("vertical")
 
35
 
 
36
    # Use a single bottom bar by default.
 
37
    gravity = (vertical and gtk.gdk.GRAVITY_WEST) or gtk.gdk.GRAVITY_SOUTH
 
38
 
 
39
    if mayanna_bar:
 
40
        mayanna_bar.destroy()
 
41
    mayanna_bar = MayannaBarDock(topics)
 
42
    
 
43
    
 
44
    
 
45
 
 
46
def _setup_session_manager():
 
47
    '''Enables session manager auto-restart on login, and after a crash.'''
 
48
    session_mgr = gnome.ui.master_client()
 
49
    argv = [__file__]
 
50
    try:
 
51
        session_mgr.set_restart_command(argv)
 
52
    except TypeError:
 
53
        # Fedora systems have a broken gnome-python wrapper for this function.
 
54
        session_mgr.set_restart_command(len(argv), argv)
 
55
    session_mgr.set_restart_style(gnome.ui.RESTART_IF_RUNNING | gnome.ui.RESTART_IMMEDIATELY)
 
56
    session_mgr.connect("die", lambda x: gtk.main_quit())
 
57
 
 
58
 
 
59
def _cancel_session_manager():
 
60
    '''Resets session manager to avoid immediate restart.'''
 
61
    session_mgr = gnome.ui.master_client()
 
62
    session_mgr.set_restart_style(gnome.ui.RESTART_IF_RUNNING) 
 
63
    session_mgr.flush()
 
64
 
 
65
 
 
66
def main(args):
 
67
    bindtextdomain('mayanna', mayanna_globals.localedir)
 
68
    textdomain('mayanna')
 
69
 
 
70
    ### Uncomment to spew leak debug info
 
71
    #gc.set_debug(gc.DEBUG_LEAK)
 
72
 
 
73
    # Tell gobject/gtk we are threaded
 
74
    gtk.gdk.threads_init()
 
75
 
 
76
    gnome.program_init("mayanna", mayanna_globals.version)
 
77
 
 
78
    _setup_session_manager()
 
79
    signal.signal(signal.SIGTERM, lambda x: _cancel_session_manager()) # Don't restart after kill
 
80
 
 
81
    try:
 
82
        topics = [ApplicationsTopic(), DocumentsTopic(), PeopleTopic(), ComputerTopic()]
 
83
        load_it = lambda: _load_mayanna_bar(topics)
 
84
 
 
85
        gconf_bridge.connect("changed::swapbar", lambda gb: load_it())
 
86
        gconf_bridge.connect("changed::autohide", lambda gb: load_it())
 
87
        gconf_bridge.connect("changed::vertical", lambda gb: load_it())
 
88
        load_it()
 
89
 
 
90
        gtk.main()
 
91
    except (KeyboardInterrupt, SystemExit):
 
92
        # Don't restart if user pressed Ctrl-C, or sys.exit called
 
93
        _cancel_session_manager()
 
94
 
 
95
 
 
96
if __name__ == "__main__":
 
97
    main(None)