X-Git-Url: https://code.delx.au/bg-scripts/blobdiff_plain/7d7e922b60e1f1885faf676651564c6c66d5dd91..0f801cc64ed6b30bc993b05d1c6af06ce3909c3c:/wallchanger.py diff --git a/wallchanger.py b/wallchanger.py index 8230f48..2bbd6f9 100755 --- a/wallchanger.py +++ b/wallchanger.py @@ -1,4 +1,5 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 + # Copyright 2008 Greg Darke # Copyright 2008 James Bunton # Licensed for distribution under the GPL version 2, check COPYING for details @@ -28,13 +29,15 @@ def check_cmd(cmd): def init(*args, **kwargs): """Desktop Changer factory""" + classes = [] + if sys.platform == "win32": - changers.append(WIN32Changer(*args, **kwargs)) + classes.append(WIN32Changer) return logging.debug("Testing for OSX (NonX11)") if check_cmd("ps ax -o command -c|grep -q WindowServer"): - changers.append(OSXChanger(*args, **kwargs)) + classes.append(OSXChanger) if 'DISPLAY' not in os.environ or os.environ['DISPLAY'].startswith('/tmp/launch'): # X11 is not running @@ -46,31 +49,33 @@ def init(*args, **kwargs): # X11 is not running for this display return - logging.debug("Testing for KDE") - if check_cmd("xwininfo -name 'KDE Desktop'"): - changers.append(KDEChanger(*args, **kwargs)) + logging.debug("Testing for XFCE4") + if check_cmd("xwininfo -name 'xfce4-session'"): + classes.append(Xfce4Changer) logging.debug("Testing for Gnome") if check_cmd("xwininfo -name 'gnome-settings-daemon'"): if check_cmd("gsettings get org.gnome.desktop.background picture-uri"): - changers.append(Gnome3Changer(*args, **kwargs)) + classes.append(Gnome3Changer) else: - changers.append(Gnome2Changer(*args, **kwargs)) + classes.append(Gnome2Changer) + + logging.debug("Testing for xloadimage") + if check_cmd("which xloadimage"): + classes.append(XLoadImageChanger) - logging.debug("Testing for WMaker") - if check_cmd("xlsclients | grep -qi wmaker"): - changers.append(WMakerChanger(*args, **kwargs)) - - if len(changers) == 0: + if len(classes) == 0: raise Exception("Unknown window manager") + for klass in classes: + changers.append(klass(*args, **kwargs)) + class BaseChanger(object): name = "undefined" - def __init__(self, background_color='black', permanent=False, convert=False): + def __init__(self, background_color='black', convert=False): logging.info('Determined the window manager is "%s"', self.name) self.background_color = background_color - self.permanent = permanent self.convert = convert try: @@ -108,9 +113,9 @@ class BaseChanger(object): return output_name, True -class WMakerChanger(BaseChanger): - name = "WindowMaker" - _ConvertedWallpaperLocation = '/tmp/wallpapers_wmaker/' +class XLoadImageChanger(BaseChanger): + name = "xloadimage" + _ConvertedWallpaperLocation = '/tmp/wallpapers_xloadimage/' def remove_old_image_cache(self): """Cleans up any old temp images""" if not os.path.isdir(self._ConvertedWallpaperLocation): @@ -125,7 +130,7 @@ class WMakerChanger(BaseChanger): """Convert the image to a png, and store it in a local place""" self.remove_old_image_cache() output_name = os.path.join(self._ConvertedWallpaperLocation, '%s.png' % time.time()) - cmd = ["convert", '-resize', '1280', '-gravity', 'Center', '-crop', '1280x800+0+0', filename, output_name] + cmd = ["convert", filename, output_name] logging.debug("""Convert command: '"%s"'""", '" "'.join(cmd)) return output_name, self._exec_cmd(cmd) @@ -134,17 +139,13 @@ class WMakerChanger(BaseChanger): filename, convert_status = self.convert_image_format(filename) if convert_status: logging.debug('Convert failed') - cmd = ["wmsetbg", - "-b", self.background_color, # Sets the background colour to be what the user specified - "-S", # 'Smooth' (WTF?) - "-e", # Center the image on the screen (only affects when the image in no the in the correct aspect ratio -### "-a", # scale the image, keeping the aspect ratio - "-u", # Force this to be the default background - "-d" # dither - ] - if self.permanent: - cmd += ["-u"] # update the wmaker database - cmd += [filename] + cmd = [ + "xloadimage", + "-onroot", + "-fullscreen", + "-border", "black", + filename, + ] logging.debug('''WMaker bgset command: "'%s'"''', "' '".join(cmd)) return not self._exec_cmd(cmd) @@ -262,25 +263,17 @@ class Gnome3Changer(BaseChanger): logging.debug(cmd) return not self._exec_cmd(cmd) -class KDEChanger(BaseChanger): - name = "KDE" +class Xfce4Changer(BaseChanger): + name = "XFCE4" def set_image(self, filename): - cmds = [] - for group in ('Desktop0', 'Desktop0Screen0'): - base = ['kwriteconfig', '--file', 'kdesktoprc', '--group', group, '--key'] - cmds.append(base + ['Wallpaper', filename]) - cmds.append(base + ['UseSHM', '--type', 'bool', 'true']) - cmds.append(base + ['WallpaperMode', 'ScaleAndCrop']) - cmds.append(base + ['MultiWallpaperMode', 'NoMulti']) - - cmds.append(['dcop', 'kdesktop', 'KBackgroundIface', 'configure']) - for cmd in cmds: - logging.debug(cmd) - if self._exec_cmd(cmd) != 0: - return False - - return True - + cmd = [ + "xfconf-query", + "-c", "xfce4-desktop", + "-p", "/backdrop/screen0/monitor0/image-path", + "-s", filename, + ] + logging.debug(cmd) + return not self._exec_cmd(cmd) def main(filename): logging.basicConfig(level=logging.DEBUG, format="%(levelname)s: %(message)s")