Reset the rotation mode on expose event in case the MCE accelerometer monitoring...
[drlaunch] / src / portrait.py
index ea58c4b..c66b338 100644 (file)
@@ -19,6 +19,7 @@
 
 import dbus
 import dbus.glib
+from dbus.mainloop.glib import DBusGMainLoop
 
 import hildon
 import osso
@@ -80,7 +81,23 @@ class FremantleRotation(object):
         self._osso_context = osso.Context(app_id, version, False)
         program = hildon.Program.get_instance()
         program.connect('notify::is-topmost', self._on_topmost_changed)
-        system_bus = dbus.Bus.get_system()
+
+       # Hack for dbus. See:
+       # https://garage.maemo.org/pipermail/pymaemo-developers/2010-April/001445.html
+       # https://garage.maemo.org/pipermail/pymaemo-developers/2010-April/001454.html
+       # https://garage.maemo.org/pipermail/pymaemo-developers/2010-April/thread.html
+       # https://bugs.maemo.org/show_bug.cgi?id=8611
+       #
+       # If we use dbus.Bus.get_system() or dbus.SystemBus() then the
+       # program fails whenever bluezwitch is installed. This could
+       # also happen whenever another widget is using System Bus (sure?).
+       # 
+        #V13 system_bus = dbus.Bus.get_system()
+       dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
+       busaddress='unix:path=/var/run/dbus/system_bus_socket'
+       system_bus=dbus.bus.BusConnection(busaddress)
+       self.system_bus=system_bus
+
         system_bus.add_signal_receiver(self._on_orientation_signal, \
                 signal_name='sig_device_orientation_ind', \
                 dbus_interface='com.nokia.mce.signal', \
@@ -127,6 +144,12 @@ class FremantleRotation(object):
 
             self._mode = new_mode
 
+    def reset_mode(self):
+       if self._mode==self.AUTOMATIC:
+           self._send_mce_request(self._ENABLE_ACCEL)
+       else:
+           self._send_mce_request(self._DISABLE_ACCEL)
+
     def _send_mce_request(self, request):
         rpc = osso.Rpc(self._osso_context)
         rpc.rpc_run(self._MCE_SERVICE, \