I'm working on a simple GTK+ wrapper around the flash Pandora Radio player (Pandora.com).
It's very basic right now but I've got it almost working. I'm using gtkmozembed to fetch and use the player and dbus to detect multimedia keys. The only problem I'm having is that the mozembed widget doesn't seem to recognize the fake keypress event sent to it. CODE #!/usr/bin/env python import gtk import gtkmozembed import dbus from dbus.mainloop.glib import DBusGMainLoop class Wrapper: def __init__(self): # Set-up the wrapper for the player self.win = gtk.Window() # Create a new GTK window called 'win' self.win.set_title("Pandora Player") # Set the title of the window self.win.set_icon_from_file('favicon.ico') # Set the window icon to a web browser icon self.win.set_position(gtk.WIN_POS_CENTER) # Position the window in the centre of the screen self.win.connect("destroy", self.close_window) # Connect the 'destroy' event to the 'CloseWindow' function, so that the app will quit properly # Handle media keys under Gnome DBusGMainLoop(set_as_default=True) bus = dbus.Bus(dbus.Bus.TYPE_SESSION) settings = bus.get_object('org.gnome.SettingsDaemon', '/org/ gnome/SettingsDaemon') # Connect to gnome settings D-Bus settings.connect_to_signal("MediaPlayerKeyPressed", self.action) # Create the browser widget gtkmozembed.set_profile_path("/tmp", "simple_browser_user") # Set a temporary Mozilla profile (works around some bug) self.mozbrowser = gtkmozembed.MozEmbed() # Create the browser widget # Set-up the browser widget before we display it self.win.add(self.mozbrowser) # Add the 'mozbrowser' widget to the main window 'win' self.mozbrowser.load_url("https://www.pandora.com:443/radio/ tuner_8_2_0_2_pandora.swf") # Load Pandora self.mozbrowser.set_size_request(640,540) # Size arrived at after careful trial and error self.mozbrowser.show() # Needed for correct size self.win.show_all() # Show the window def PlayPause(self, ): event = gtk.gdk.Event(gtk.gdk.KEY_PRESS) event.keyval = gtk.keysyms.space event.time = 0 # assign current time self.mozbrowser.grab_focus() self.win.emit('key_press_event', event) def ThumbsDown(self): event = gtk.gdk.Event(gtk.gdk.KEY_PRESS) event.keyval = gtk.keysyms.minus event.time = 0 # assign current time self.mozbrowser.grabfocus() self.win.emit('key_press_event', event) def ThumbsUp(self): event = gtk.gdk.Event(gtk.gdk.KEY_PRESS) event.keyval = gtk.keysyms.plus event.time = 0 # assign current time self.mozbrowser.grabfocus() self.win.emit('key_press_event', event) def Skip(self): event = gtk.gdk.Event(gtk.gdk.KEY_PRESS) event.keyval = gtk.keysyms.Right event.time = 0 # assign current time self.mozbrowser.grabfocus() self.win.emit('key_press_event', event) # Handles key presses def action(self, *keys): for key in keys: if key == "Play": self.PlayPause() elif key == "Stop": self.ThumbsUp() elif key == "Previous": self.ThumbsDown() elif key == "Next": self.Skip() def close_window(self, caller_widget): """Close the window and exit the app""" gtk.main_quit() # Close the app fully if __name__ == "__main__": wrapper = Wrapper() gtk.main() -- http://mail.python.org/mailman/listinfo/python-list