[maemo-commits] [maemo-commits] r10663 - projects/haf/trunk/libosso/src

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Tue Mar 20 17:24:55 EET 2007
Author: kihamala
Date: 2007-03-20 17:24:55 +0200 (Tue, 20 Mar 2007)
New Revision: 10663

Modified:
   projects/haf/trunk/libosso/src/osso-display.c
Log:
added code to ask MCE about the current display state


Modified: projects/haf/trunk/libosso/src/osso-display.c
===================================================================
--- projects/haf/trunk/libosso/src/osso-display.c	2007-03-20 15:23:51 UTC (rev 10662)
+++ projects/haf/trunk/libosso/src/osso-display.c	2007-03-20 15:24:55 UTC (rev 10663)
@@ -31,6 +31,69 @@
   "type='signal',interface='" MCE_SIGNAL_IF "',"\
   "member='" MCE_DISPLAY_SIG "'"
 
+static osso_display_state_t get_display_state(osso_context_t *osso)
+{
+        DBusMessageIter iter;
+        DBusMessage* m = NULL, *r = NULL;
+        DBusError err;
+        dbus_bool_t ret = FALSE;
+        char *s = NULL;
+        assert(osso->sys_conn != NULL);
+        dbus_error_init(&err);
+        osso_display_state_t new_state;
+
+        ret = dbus_bus_name_has_owner(osso->sys_conn, MCE_SERVICE, &err);
+        if (!ret) {
+                if (dbus_error_is_set(&err)) {
+                        ULOG_ERR_F("error: %s", err.message);
+                        dbus_error_free(&err);
+                } else {
+                        ULOG_ERR_F("service %s does not exist",
+                                   MCE_SERVICE);
+                }
+                return OSSO_DISPLAY_ON; /* wild guess */
+        }
+        m = dbus_message_new_method_call(MCE_SERVICE, MCE_REQUEST_OP,
+                MCE_REQUEST_IF, MCE_DISPLAY_STATUS_GET);
+        if (m == NULL) {
+                ULOG_ERR_F("couldn't create message");
+                return OSSO_DISPLAY_ON;
+        }
+        dbus_error_init(&err);
+        r = dbus_connection_send_with_reply_and_block(osso->sys_conn,
+                m, -1, &err);
+        dbus_message_unref(m);
+        if (r == NULL) {
+                ULOG_ERR_F("sending failed: %s", err.message);
+                dbus_error_free(&err);
+                return OSSO_DISPLAY_ON;
+        }
+        dbus_message_iter_init(r, &iter);
+        dbus_message_iter_get_basic(&iter, &s);
+        if (s == NULL) {
+                ULOG_ERR_F("reply did not have string argument");
+                dbus_message_unref(r);
+                return OSSO_DISPLAY_ON;
+        }
+
+        if (strncmp(s, MCE_DISPLAY_ON_STRING,
+                    strlen(MCE_DISPLAY_ON_STRING)) == 0) {
+                new_state = OSSO_DISPLAY_ON;
+        } else if (strncmp(s, MCE_DISPLAY_DIM_STRING,
+                           strlen(MCE_DISPLAY_DIM_STRING)) == 0) {
+                new_state = OSSO_DISPLAY_DIMMED;
+        } else if (strncmp(s, MCE_DISPLAY_OFF_STRING,
+                           strlen(MCE_DISPLAY_OFF_STRING)) == 0) {
+                new_state = OSSO_DISPLAY_OFF;
+        } else {
+                ULOG_ERR_F("Unknown argument: %s", s);
+                new_state = OSSO_DISPLAY_ON;
+        }
+
+        dbus_message_unref(r);
+        return new_state;
+}
+
 static void _display_state_handler(osso_context_t *osso,
                                    DBusMessage *msg,
                                    _osso_callback_data_t *ot,
@@ -44,6 +107,7 @@
 {
   _osso_callback_data_t *ot;
   DBusError error;
+  osso_display_state_t state;
 
   if (osso == NULL || cb == NULL) {
       ULOG_ERR_F("invalid arguments");
@@ -77,6 +141,11 @@
                                   MCE_SIGNAL_PATH,
                                   MCE_SIGNAL_IF,
                                   _display_state_handler, ot, FALSE);
+
+  /* call the callback now so that the current state is known */
+  state = get_display_state(osso);
+  (*cb)(state, data);
+
   return OSSO_OK;
 }
 


More information about the maemo-commits mailing list