I investigated this another way: from near-zero. I tried the sample python applet in the docs of python-gnomeapplet. I also made a very small version of dockbarx, in the hope that it would give insight into why it does not work. Here is a dockbarx factory class that does not cause the error. #!/usr/bin/python # Copyright 2008, 2009, 2010 Aleksey Shaferov and Matias Sars # # DockBar is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # DockBar is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with dockbar. If not, see . import pygtk pygtk.require('2.0') import gtk import gobject import gnomeapplet import sys class DockBar(gobject.GObject): __gsignals__ = { "db-move": (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE,()), } def __init__(self,applet): gobject.GObject.__init__(self) print "Dockbarx init" self.applet = applet #--- Applet / Window container if self.applet != None: self.applet.set_applet_flags(gnomeapplet.HAS_HANDLE|gnomeapplet.EXPAND_MINOR) if self.applet.get_orient() == gnomeapplet.ORIENT_DOWN or applet.get_orient() == gnomeapplet.ORIENT_UP: self.orient = "h" self.container = gtk.HBox() else: self.orient = "v" self.container = gtk.VBox() self.applet.connect("change-orient",self.on_change_orient) self.applet.connect("delete-event",self.cleanup) self.applet.add(self.container) self.applet.connect("size-allocate",self.on_applet_size_alloc) self.applet.connect("change_background", self.on_change_background) self.pp_menu_xml = """ """ #self.pp_menu_verbs = [("About", self.on_ppm_about), #("Pref", self.on_ppm_pref), #("Reload", self.reload)] #self.applet.setup_menu(self.pp_menu_xml, self.pp_menu_verbs,None) self.applet_origin_x = -1000 # off screen. there is no 'window' prop self.applet_origin_y = -1000 # at this step self.applet.set_background_widget(applet) # background bug workaround self.applet.show_all() #gobject.idle_add(self.idle_init) else: self.container = gtk.HBox() self.orient = "h" #self.idle_init() def cleanup(self,event): del self.applet class DockBarWindow(): """DockBarWindow sets up the window if run-in-window is used.""" def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_default_size(200,40) self.window.show() self.window.set_property("skip-taskbar-hint",True) self.window.set_keep_above(True) self.window.connect ("delete_event",self.delete_event) self.window.connect ("destroy",self.destroy) self.dockbar = DockBar(None) hbox = gtk.HBox() button = gtk.Button('Pref') #button.connect('clicked', self.dockbar.on_ppm_pref) hbox.pack_start(button, False) hbox.pack_start(self.dockbar.container, False) eb = gtk.EventBox() ## eb.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#2E2E2E")) eb.add(hbox) self.window.add(eb) eb.show_all() ##self.window.add(self.dockbar.container) def delete_event (self,widget,event,data=None): return False def destroy (self,widget,data=None): gtk.main_quit() def main(self): gtk.main() def dockbar_factory(applet, iid): dockbar = DockBar(applet) applet.set_background_widget(applet) applet.show_all() return True ##gc.enable() if len(sys.argv) == 2 and sys.argv[1] == "run-in-window": dockbarwin = DockBarWindow() dockbarwin.main() else: gnomeapplet.bonobo_factory("OAFIID:GNOME_DockBarXApplet_Factory", gnomeapplet.Applet.__gtype__, "dockbar applet", "0", dockbar_factory)