| | 21 | import gconf |
| | 22 | import ConfigParser |
| | 23 | |
| | 24 | gconf_keys = { |
| | 25 | "GTK_THEME": "/desktop/gnome/interface/gtk_theme", |
| | 26 | "METACITY_THEME": "/apps/metacity/general/theme", |
| | 27 | "ICON_THEME": "/desktop/gnome/interface/icon_theme", |
| | 28 | "NOTIFICATION_THEME": "/apps/notification-daemon/theme", |
| | 29 | "COLOR_SCHEME": "/desktop/gnome/interface/gtk_color_scheme", |
| | 30 | "LOCKDOWN": "/desktop/gnome/lockdown/disable_theme_settings", |
| | 31 | "BACKGROUND": "/desktop/gnome/background/picture_filename", |
| | 32 | "APPLICATION_FONT": "/desktop/gnome/interface/font_name", |
| | 33 | "DOCUMENTS_FONT": "/desktop/gnome/interface/document_font_name", |
| | 34 | "DESKTOP_FONT": "/apps/nautilus/preferences/desktop_font", |
| | 35 | "WINDOWTITLE_FONT": "/apps/metacity/general/titlebar_font", |
| | 36 | "MONOSPACE_FONT": "/desktop/gnome/interface/monospace_font_name" |
| | 37 | } |
| | 63 | ### GCONF STUFF |
| | 64 | |
| | 65 | gconf_client = gconf.client_get_default() |
| | 66 | def set_gconf(key, value): |
| | 67 | m = None |
| | 68 | if isinstance(value, int): |
| | 69 | m = "set_int" |
| | 70 | if isinstance(value, float): |
| | 71 | m = "set_float" |
| | 72 | if isinstance(value, bool): |
| | 73 | m = "set_bool" |
| | 74 | if isinstance(value, list): |
| | 75 | m = "set_list" |
| | 76 | if isinstance(value, str) or isinstance(value, unicode): |
| | 77 | m = "set_string" |
| | 78 | if not m: |
| | 79 | return None |
| | 80 | method = getattr(gconf_client, m) |
| | 81 | try: |
| | 82 | return method(key, value) |
| | 83 | except: |
| | 84 | return None |
| | 85 | |
| | 86 | ## set theme by domain, see #483 |
| | 87 | def set_theme_by_domain(): |
| | 88 | p = os.popen("hostname --fqdn") |
| | 89 | fqdn = p.read().strip() |
| | 90 | p.close() |
| | 91 | fqdn = 'pippo.spr' |
| | 92 | s = fqdn.split(".") |
| | 93 | if len(s) < 2: |
| | 94 | return |
| | 95 | domain = s[1] |
| | 96 | # read config, discover mapping |
| | 97 | # between domains and themes, |
| | 98 | # then apply the theme. |
| | 99 | c = ConfigParser.ConfigParser() |
| | 100 | files = ['/etc/fuss-desktop-control.conf', |
| | 101 | 'fuss-desktop-control.conf'] |
| | 102 | file = None |
| | 103 | for f in files: |
| | 104 | if os.path.isfile(f): |
| | 105 | file = f |
| | 106 | break |
| | 107 | if not file: |
| | 108 | print "Conf file not found" |
| | 109 | return |
| | 110 | c.read(f) |
| | 111 | sections = [x.split()[1] for x in c.sections() if 'domain' in x] |
| | 112 | our_domain = None |
| | 113 | for s in sections: |
| | 114 | if domain in s: |
| | 115 | our_domain = 'domain %s' %s |
| | 116 | break |
| | 117 | |
| | 118 | if not our_domain: |
| | 119 | return |
| | 120 | |
| | 121 | print "Working on", our_domain |
| | 122 | options = c.items(our_domain) |
| | 123 | for o in options: |
| | 124 | if o[0].upper() in gconf_keys.keys(): |
| | 125 | k = gconf_keys[o[0].upper()] |
| | 126 | v = o[1] |
| | 127 | print "SETTING", k, "TO", v |
| | 128 | set_gconf(k, v) |
| | 129 | |
| | 130 | try: |
| | 131 | print set_theme_by_domain() |
| | 132 | except Exception, e: |
| | 133 | print "Can't set theme by domain:", e |
| | 134 | |