+
+
+static gboolean focus_in_cb( GtkWidget *widget, GdkEventFocus *event,
+ gpointer data )
+{
+ // enable accelerometer hardware for portrait mode support
+ accelerometer_enable( );
+
+ return FALSE;
+}
+
+
+static gboolean focus_out_cb( GtkWidget *widget, GdkEventFocus *event,
+ gpointer data )
+{
+ // disable accelerometer for battery savings
+ accelerometer_disable( );
+
+ return FALSE;
+}
+
+
+static void accelerometer_enable( void )
+{
+ if ( osso_rpc_run_system( appdata.osso_context, MCE_SERVICE,
+ MCE_REQUEST_PATH, MCE_REQUEST_IF,
+ "req_accelerometer_enable", NULL,
+ DBUS_TYPE_INVALID ) != OSSO_OK ) {
+ g_printerr("WARN: Cannot enable accelerometers\n");
+ }
+}
+
+
+static void accelerometer_disable( void )
+{
+ if ( osso_rpc_run_system( appdata.osso_context, MCE_SERVICE,
+ MCE_REQUEST_PATH, MCE_REQUEST_IF,
+ "req_accelerometer_disable", NULL,
+ DBUS_TYPE_INVALID ) != OSSO_OK ) {
+ g_printerr("WARN: Cannot disable accelerometers\n");
+ }
+}
+
+
+static DBusHandlerResult mce_filter_func( DBusConnection * connection,
+ DBusMessage * message,
+ void *data )
+{
+ DBusMessageIter iter;
+ char *rotation = NULL;
+
+ if ( dbus_message_is_signal( message, MCE_SIGNAL_IF,
+ MCE_DEVICE_ORIENTATION_SIG ) ) {
+ // here if we received an orientation dbus signal
+ if ( dbus_message_iter_init( message, &iter ) ) {
+ dbus_message_iter_get_basic( &iter, &rotation );
+
+ // Rotate main window
+ if ( !strcmp( rotation, MCE_ORIENTATION_PORTRAIT ) )
+ hildon_gtk_window_set_portrait_flags( GTK_WINDOW( appdata.main_window ),
+ HILDON_PORTRAIT_MODE_REQUEST );
+ else
+ hildon_gtk_window_set_portrait_flags( GTK_WINDOW( appdata.main_window ),
+ ~HILDON_PORTRAIT_MODE_REQUEST );
+ }
+ else
+ g_printerr( "ERROR: dbus_message_iter_init() failed.\n" );
+ }
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}