strange dbus/python callback behavior
Chris Rebert
cvrebert at gmail.com
Sun Apr 30 09:17:24 PDT 2006
Well, if the the different call sequences are like you say they are,
then changing:
class GaimControl:
# Network device activated
def nm_device_active_cb(self,path):
self.start_gaim()
to
class GaimControl:
# Network device activated
def nm_device_active_cb(self, path, wireless=None):
self.start_gaim()
should work.
- Chris Rebert
Richard Ferguson wrote:
> A while back I wrote a small app that just sits and listens to
> NetworkManager's dbus signals. When a device would come up it would start
> Gaim, and when a device would go down it would close Gaim. Not very
> complex but handy when suspending all the time.
>
> After recently upgrading to Ubuntu Dapper, my app started showing some
> strange behavior with one of its call backs.
>
> I have attached my app, but here is my code that connects to dbus.
>
> ----
>
> bus = dbus.SystemBus()
> proxy_obj = bus.get_object('org.freedesktop.NetworkManager',
> '/org/freedesktop/NetworkManager')
> dbus_iface = dbus.Interface(proxy_obj, 'org.freedesktop.NetworkManager')
>
> # Listen for NetworkManager signals
> dbus_iface.connect_to_signal('DeviceNowActive', gc.nm_device_active_cb)
> dbus_iface.connect_to_signal('DeviceNoLongerActive',
> gc.nm_device_notactive_cb)
>
> ----
>
> The problem is, sometimes the 'DeviceNowActive' callback,
> gc.nm_device_active_cb, gets called with 2 arguments, and sometimes with 3
> arguments. I think its 2 for wireline and 3 for wireless.
>
> Any ideas on why this would happen? or how to handle it properly?
> Thanks for your help
>
> richard ferguson
>
>
> ------------------------------------------------------------------------
>
> #!/usr/bin/python
> #
> # nm-gaim-dbus.py - Watch for NetworkManager signals and
> # shutdown/startup gaim when appropriate.
> #
> # Author: Richard Ferguson <gnome at fergusnet.com>
> #
> # ChangeLog
> # -------- --- -------------------------------------------
> # 11/18/05 RJF Initial Release
> #
>
> import os
>
> import gtk
> import dbus
> import dbus.glib
>
> #######################################
>
> class GaimControl:
> def __init__(self):
> self.gaim_was_running = 0
>
> # Launch gaim
> def start_gaim(self):
> if self.gaim_was_running:
> pid = os.fork()
> if pid == 0:
> os.execlp('gaim', 'gaim')
>
> # Shutdown gaim
> def stop_gaim(self):
> res = os.system('gaim-remote quit')
> if res != 0:
> self.gaim_was_running = 0
> else:
> self.gaim_was_running = 1
>
> # Network device activated
> def nm_device_active_cb(self,path):
> self.start_gaim()
>
> # Network device deactivated
> def nm_device_notactive_cb(self,path):
> self.stop_gaim()
>
> #######################################
>
> gc = GaimControl()
>
> # Connect to DBUS
> bus = dbus.SystemBus()
> proxy_obj = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
> dbus_iface = dbus.Interface(proxy_obj, 'org.freedesktop.NetworkManager')
>
> # Listen for NetworkManager signals
> dbus_iface.connect_to_signal('DeviceNowActive', gc.nm_device_active_cb)
> dbus_iface.connect_to_signal('DeviceNoLongerActive', gc.nm_device_notactive_cb)
>
> # Loop
> gtk.main()
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> dbus mailing list
> dbus at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dbus
More information about the dbus
mailing list