display blanking detection via dbus
authormaemo <maemo@maemo-desktop.(none)>
Sun, 27 Sep 2009 04:16:16 +0000 (05:16 +0100)
committermaemo <maemo@maemo-desktop.(none)>
Sun, 27 Sep 2009 04:16:16 +0000 (05:16 +0100)
src/eyes.c
src/eyes.h

index 9156cdc..db848fd 100644 (file)
@@ -35,6 +35,8 @@
 #include <string.h>
 
 #include <libhildondesktop/libhildondesktop.h>
+#include <mce/dbus-names.h>
+#include <mce/mode-names.h>
 
 #include "eyes.h"
 #include "themes.h"
@@ -51,6 +53,8 @@
 
 HD_DEFINE_PLUGIN_MODULE (EyesPlugin, eyes_plugin,      HD_TYPE_HOME_PLUGIN_ITEM)
 
+static void eyes_check_display(DBusGProxy *object, const char *status, EyesPluginContent *eyes);
+
 /*****************************
  *** Eyes Plugin Functions ***
  *****************************/
@@ -280,6 +284,9 @@ eyes_free_data(EyesPluginContent      *eyes)
   if (eyes->pupil_filename != NULL)
     g_free(eyes->pupil_filename);
 
+  if (eyes->proxy != NULL)
+    dbus_g_proxy_disconnect_signal (eyes->proxy, MCE_DISPLAY_SIG, G_CALLBACK(eyes_check_display), eyes);
+  
   g_free(eyes);
 }
 
@@ -309,11 +316,14 @@ eyes_plugin_new ()
   setup_eyes(eyes);
   eyes_applet_fill(eyes);
 
+  eyes->visible = TRUE;
+
   return eyes;
 }
 
 static void
 eyes_check_desktop (GObject *gobject, GParamSpec *pspec, EyesPluginContent *eyes)
+
 {
   g_warning ("eyes_check_desktop");
   gchar *name = pspec->name;
@@ -321,13 +331,37 @@ eyes_check_desktop (GObject *gobject, GParamSpec *pspec, EyesPluginContent *eyes
   g_object_get (gobject, name, &status, NULL);
   if (status) {
     eyes_applet_fill(eyes);
+    eyes->visible = TRUE;
   } else if (eyes->timeout_id != 0) {
     g_source_remove (eyes->timeout_id);
     eyes->timeout_id = 0;
+    eyes->visible = FALSE;
   }
 }
 
 static void
+eyes_check_display(DBusGProxy *object, const char *status, EyesPluginContent *eyes)
+{
+  if (strncmp(status, MCE_DISPLAY_ON_STRING,
+             strlen(MCE_DISPLAY_ON_STRING) + 1) == 0
+      && eyes-> visible)
+    {
+      hildon_banner_show_information(NULL, NULL, eyes->theme_name);
+      eyes_applet_fill(eyes);
+    }
+  else if (strncmp(status, MCE_DISPLAY_OFF_STRING,
+                  strlen(MCE_DISPLAY_OFF_STRING) + 1) == 0)
+    {
+      if (eyes->timeout_id != 0)
+       {
+         g_source_remove (eyes->timeout_id);
+         eyes->timeout_id = 0;
+       }
+    }
+  
+}
+
+static void
 eyes_plugin_dispose (GObject *object)
 {
   g_warning ("eyes_plugin_dispose");
@@ -387,6 +421,17 @@ eyes_plugin_init (EyesPlugin *desktop_plugin)
   g_signal_connect (desktop_plugin, "notify::is-on-current-desktop",
                    G_CALLBACK (eyes_check_desktop), eyes);
 
+  eyes->dbus_conn = NULL;
+  eyes->proxy = NULL;
+
+  eyes->dbus_conn = hd_home_plugin_item_get_dbus_g_connection ( &desktop_plugin->hitem, DBUS_BUS_SYSTEM, NULL );
+  if (eyes->dbus_conn != NULL)
+    {
+      eyes->proxy = dbus_g_proxy_new_for_name(eyes->dbus_conn, MCE_SERVICE, MCE_SIGNAL_PATH, MCE_SIGNAL_IF);
+      dbus_g_proxy_add_signal (eyes->proxy, MCE_DISPLAY_SIG, G_TYPE_STRING, G_TYPE_INVALID );
+      dbus_g_proxy_connect_signal(eyes->proxy, MCE_DISPLAY_SIG, G_CALLBACK(eyes_check_display),eyes,NULL);
+    }
+  
   gtk_container_add (GTK_CONTAINER (desktop_plugin), eyes->align);
 } 
 
index 5e54814..aea3db2 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <libhildondesktop/libhildondesktop.h>
 
+
 G_BEGIN_DECLS
 
 typedef struct _EyesPlugin EyesPlugin;
@@ -50,9 +51,12 @@ typedef struct _EyesPluginClass EyesPluginClass;
 typedef struct
 {
   GtkWidget       *ebox;
+  DBusGConnection *dbus_conn;
+  DBusGProxy *proxy;
 
   /* Properties */
   gchar *active_theme;
+  gboolean visible;
 
   /* Plugin */
   GtkWidget   *align;