[maemo-commits] [maemo-commits] r13651 - in projects/haf/trunk/hildon-desktop: . src

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Thu Sep 6 19:19:11 EEST 2007
Author: lucasr
Date: 2007-09-06 19:19:10 +0300 (Thu, 06 Sep 2007)
New Revision: 13651

Modified:
   projects/haf/trunk/hildon-desktop/ChangeLog
   projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c
Log:
2007-09-06  Lucas Rocha  <lucas.rocha at nokia.com>

	* src/hd-switcher-menu.c (hd_switcher_menu_refresh_application_items,
	hd_switcher_menu_refresh_notification_items,
	hd_switcher_menu_constructor, hd_switcher_menu_hw_cb,
	hd_switcher_menu_osso_init,
	hd_switcher_menu_create_notifications_menu,
	hd_switcher_menu_changed_info_cb,
	hd_switcher_menu_notification_deleted_cb,
	hd_switcher_menu_notification_changed_cb): deactivate all blinking
	from switcher menu when hardware signal for system inactivity is 
	sent. Fixes: NB#60063.


Modified: projects/haf/trunk/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-desktop/ChangeLog	2007-09-06 15:12:09 UTC (rev 13650)
+++ projects/haf/trunk/hildon-desktop/ChangeLog	2007-09-06 16:19:10 UTC (rev 13651)
@@ -1,3 +1,16 @@
+2007-09-06  Lucas Rocha  <lucas.rocha at nokia.com>
+
+	* src/hd-switcher-menu.c (hd_switcher_menu_refresh_application_items,
+	hd_switcher_menu_refresh_notification_items,
+	hd_switcher_menu_constructor, hd_switcher_menu_hw_cb,
+	hd_switcher_menu_osso_init,
+	hd_switcher_menu_create_notifications_menu,
+	hd_switcher_menu_changed_info_cb,
+	hd_switcher_menu_notification_deleted_cb,
+	hd_switcher_menu_notification_changed_cb): deactivate all blinking
+	from switcher menu when hardware signal for system inactivity is 
+	sent. Fixes: NB#60063.
+
 2007-09-06 Johan Bilien  <johan.bilien at nokia.com>
 
 	* src/hd-panel-window-dialog.c:

Modified: projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c	2007-09-06 15:12:09 UTC (rev 13650)
+++ projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c	2007-09-06 16:19:10 UTC (rev 13651)
@@ -49,6 +49,10 @@
 #include <hildon-widgets/hildon-note.h>
 #endif
 
+#ifdef HAVE_LIBOSSO
+#include <libosso.h>
+#endif
+
 #ifdef HAVE_MCE
 #include <mce/dbus-names.h>
 #endif
@@ -159,7 +163,8 @@
 
   GtkIconTheme		   *icon_theme;
   GtkWidget		   *icon;
-
+  GdkPixbuf                *animation_icon;
+  
   GtkTreeIter		   *last_iter_added;
 
   guint                     blinking_notification;
@@ -170,6 +175,12 @@
   GtkWidget		   *toggle_button;
 
   GHashTable               *notification_groups;
+
+#ifdef HAVE_LIBOSSO
+  osso_context_t           *osso;
+#endif
+
+  gboolean                  system_inactivity;
   
   gint                      esd_socket;
 };
@@ -189,6 +200,11 @@
 
 static void hd_switcher_menu_add_clear_notifications_button (HDSwitcherMenu *switcher);
 
+static void hd_switcher_menu_refresh_application_items (HDSwitcherMenu *switcher);
+static void hd_switcher_menu_refresh_notification_items (HDSwitcherMenu *switcher);
+
+static void hd_switcher_menu_replace_blinking_icon (HDSwitcherMenu *switcher, GdkPixbuf *icon);
+
 static void hd_switcher_menu_add_info_cb (HDWM *hdwm, HDWMEntryInfo *info, HDSwitcherMenu *switcher);
 static void hd_switcher_menu_remove_info_cb (HDWM *hdwm, gboolean removed_app, HDWMEntryInfo *info, HDSwitcherMenu *switcher);
 static void hd_switcher_menu_changed_info_cb (HDWM *hdwm, HDWMEntryInfo *info, HDSwitcherMenu *switcher);
@@ -213,7 +229,7 @@
 
 static void hd_switcher_menu_create_notifications_menu (HDSwitcherMenu *switcher);
 
-static void hd_switcher_menu_reset_main_icon (HDSwitcherMenu *switcher);
+static void hd_switcher_menu_reset_main_icon (HDSwitcherMenu *switcher, gboolean destroy_animation);
 
 static void hd_switcher_menu_check_content (HDSwitcherMenu *switcher);
 
@@ -244,7 +260,10 @@
   switcher->priv->last_iter_added = NULL;
 
   switcher->priv->last_urgent_info = NULL;
-
+  switcher->priv->blinking_notification = -1;
+  
+  switcher->priv->system_inactivity = FALSE;
+  
   switcher->hdwm = hd_wm_get_singleton ();
 
   switcher->nm = 
@@ -598,7 +617,7 @@
 	      
         gtk_list_store_set (GTK_LIST_STORE (switcher->nm),
                             &iter,
-                            HD_NM_COL_ACK, FALSE,
+                            HD_NM_COL_ACK, TRUE,
                             -1);
 
         g_signal_handlers_unblock_by_func (switcher->nm,
@@ -805,7 +824,55 @@
   g_free (groups);
   g_key_file_free (keyfile);
 }
+
+#ifdef HAVE_LIBOSSO
+static
+void hd_switcher_menu_hw_cb (osso_hw_state_t *state, gpointer data)
+{
+  g_return_if_fail (state && data);
+
+  HDSwitcherMenu *switcher = HD_SWITCHER_MENU (data);
+  HDSwitcherMenuPrivate *priv = switcher->priv;
+
+  if (state->system_inactivity_ind != priv->system_inactivity)
+  {
+    priv->system_inactivity = state->system_inactivity_ind;
+
+    hd_switcher_menu_refresh_application_items (switcher);
+    hd_switcher_menu_refresh_notification_items (switcher);
+  
+    if (!priv->system_inactivity && priv->animation_icon)
+      hd_switcher_menu_replace_blinking_icon (switcher, priv->animation_icon);
+    else
+      hd_switcher_menu_reset_main_icon (switcher, FALSE);
+  }
+}
 	
+static void
+hd_switcher_menu_osso_init (HDSwitcherMenu *switcher)
+{
+  HDSwitcherMenuPrivate *priv = switcher->priv;
+  osso_hw_state_t hs = {0};
+  
+  priv->osso = osso_initialize ("SM_DIMMED_infoprint", "0.1", FALSE, NULL);
+
+  if (!priv->osso)
+  {
+    g_warning ("Failed to initialize libosso");
+      
+    return;
+  }
+
+  /* Register stystem inactivity handler */
+  hs.system_inactivity_ind = TRUE;
+
+  osso_hw_set_event_cb (priv->osso, 
+		        &hs,
+                        hd_switcher_menu_hw_cb, 
+		        switcher);
+}
+#endif
+
 static GObject *
 hd_switcher_menu_constructor (GType gtype,
 			      guint n_params,
@@ -1064,6 +1131,10 @@
 
   switcher->priv->window_dialog = NULL;
 
+#ifdef HAVE_LIBOSSO
+  hd_switcher_menu_osso_init (switcher);
+#endif
+
   return object;
 }
 
@@ -1254,7 +1325,14 @@
 static void
 hd_switcher_menu_replace_blinking_icon (HDSwitcherMenu *switcher, GdkPixbuf *icon)
 {
-  if (!switcher->priv->is_open && icon)
+  g_return_if_fail (icon != NULL);
+	
+  if (switcher->priv->animation_icon)
+    g_object_unref (switcher->priv->animation_icon);
+  
+  switcher->priv->animation_icon = g_object_ref (icon);
+    
+  if (!switcher->priv->is_open && !switcher->priv->system_inactivity)
   {
     GdkPixbufAnimation *icon_blinking;
     GtkWidget *image_blinking;
@@ -1375,7 +1453,7 @@
 
     if (n_apps <= SWITCHER_N_SLOTS && switcher->priv->last_urgent_info) 
     {	    
-      hd_switcher_menu_reset_main_icon (switcher);	    
+      hd_switcher_menu_reset_main_icon (switcher, TRUE);	    
       switcher->priv->last_urgent_info = NULL;
     }
   }
@@ -1529,7 +1607,7 @@
 
   switcher->priv->is_open = TRUE;
 
-  hd_switcher_menu_reset_main_icon (switcher);
+  hd_switcher_menu_reset_main_icon (switcher, TRUE);
 
   hd_switcher_menu_check_content (switcher);
 
@@ -1558,7 +1636,7 @@
 }
 
 static void 
-hd_switcher_menu_reset_main_icon (HDSwitcherMenu *switcher)
+hd_switcher_menu_reset_main_icon (HDSwitcherMenu *switcher, gboolean destroy_animation)
 {
   if (GTK_BIN (switcher->priv->toggle_button)->child != switcher->priv->icon)
   {
@@ -1568,7 +1646,13 @@
     gtk_container_add (GTK_CONTAINER (switcher->priv->toggle_button),
 	               GTK_WIDGET (switcher->priv->icon));
     
-    g_object_unref (G_OBJECT (switcher->priv->icon)); 
+    g_object_unref (G_OBJECT (switcher->priv->icon));
+
+    if (destroy_animation)
+    {
+      g_object_unref (switcher->priv->animation_icon);
+      switcher->priv->animation_icon = NULL;
+    }
   }
 }	
 
@@ -1685,7 +1769,8 @@
         gtk_widget_set_name (GTK_WIDGET (menu_item), 
       		             HD_SWITCHER_MENU_NOT_MENU_ITEM_NAME);
 
-        hd_switcher_menu_item_set_blinking (HD_SWITCHER_MENU_ITEM (menu_item), !ack);
+        hd_switcher_menu_item_set_blinking (HD_SWITCHER_MENU_ITEM (menu_item), 
+			                    !ack && !switcher->priv->system_inactivity);
 
         g_signal_connect_after (menu_item,
           	                "activate",
@@ -1698,7 +1783,9 @@
         if (!ack && !icon_is_set)
         {
 	  switcher->priv->blinking_notification = id;
+
           hd_switcher_menu_replace_blinking_icon (switcher, icon);
+
           icon_is_set = TRUE;
 	}
 	  
@@ -1856,7 +1943,7 @@
 
 	if (info == switcher->priv->last_urgent_info)
         {
-          hd_switcher_menu_reset_main_icon (switcher);
+          hd_switcher_menu_reset_main_icon (switcher, TRUE);
 	  switcher->priv->last_urgent_info = NULL;
         }		
       
@@ -1909,7 +1996,7 @@
 }	
 
 static void
-hd_switcher_menu_refresh_items (HDSwitcherMenu *switcher)
+hd_switcher_menu_refresh_application_items (HDSwitcherMenu *switcher)
 {
   GList *children = NULL, *l;
 
@@ -1924,10 +2011,49 @@
         hd_switcher_menu_item_get_entry_info (HD_SWITCHER_MENU_ITEM (l->data));
 
       hd_switcher_menu_item_set_entry_info (HD_SWITCHER_MENU_ITEM (l->data), info);
+
+      if (hd_wm_entry_info_is_urgent (info) &&
+          !hd_wm_entry_info_get_ignore_urgent (info) &&
+          !switcher->priv->system_inactivity)
+      {
+        hd_switcher_menu_item_set_blinking (HD_SWITCHER_MENU_ITEM (l->data), TRUE);
+      }
     }	    
-  }	  
+  } 
 }
-	
+
+static void
+hd_switcher_menu_refresh_notification_items (HDSwitcherMenu *switcher)
+{
+  GList *children = NULL, *l;
+  
+  children = hildon_desktop_popup_menu_get_children (switcher->priv->menu_notifications);
+
+  for (l = children; l != NULL; l = g_list_next (l))
+  {
+    GtkTreeIter iter;
+    gboolean ack = TRUE;
+
+    guint id = 
+      hd_switcher_menu_item_get_notification_id (HD_SWITCHER_MENU_ITEM (l->data));
+
+    if (hildon_desktop_notification_manager_find_by_id (switcher->nm, id, &iter))
+    {
+      g_debug ("ALOW ALOW ALOW");
+	    
+      gtk_tree_model_get (GTK_TREE_MODEL (switcher->nm),
+                          &iter,
+                          HD_NM_COL_ACK, &ack,
+                          -1);
+
+      g_debug ("ACK: %d", ack);
+    }
+
+    hd_switcher_menu_item_set_blinking (HD_SWITCHER_MENU_ITEM (l->data), 
+		    			!ack && !switcher->priv->system_inactivity);
+  }
+}
+
 static void 
 hd_switcher_menu_changed_info_cb (HDWM *hdwm,
 				  HDWMEntryInfo *info,
@@ -1940,7 +2066,7 @@
 
   if (!info)
   {
-    hd_switcher_menu_refresh_items (switcher);
+    hd_switcher_menu_refresh_application_items (switcher);
     return;
   }
     
@@ -2034,9 +2160,9 @@
   if (!hd_wm_entry_info_is_urgent (info) &&      /* We were told to change appswitcher icon with */
       switcher->priv->last_urgent_info == info)	 /* application's one. Now we've been told to change it back*/
   {
-    hd_switcher_menu_reset_main_icon (switcher);	  
+    hd_switcher_menu_reset_main_icon (switcher, TRUE);
     switcher->priv->last_urgent_info = NULL;
-  }	  
+  }
 
   if (hd_wm_entry_info_is_urgent (info) &&
       !hd_wm_entry_info_get_ignore_urgent (info))
@@ -2044,13 +2170,14 @@
     if (menu_item)
     {
       /* child of one of the app buttons */
-      if (!hd_switcher_menu_item_is_blinking (HD_SWITCHER_MENU_ITEM (menu_item)))
+      if (!hd_switcher_menu_item_is_blinking (HD_SWITCHER_MENU_ITEM (menu_item)) &&
+          !switcher->priv->system_inactivity)
       {
         hd_switcher_menu_item_set_blinking (HD_SWITCHER_MENU_ITEM (menu_item), TRUE);
       }
 	      
       if (make_it_blink)
-      {	      
+      {
         hd_switcher_menu_replace_blinking_icon
   	  (switcher, hd_switcher_get_default_icon_from_entry_info (switcher,info));
 
@@ -2297,7 +2424,10 @@
       if (menu_item)
       {
         if (switcher->priv->blinking_notification == id)
-	  hd_switcher_menu_reset_main_icon (switcher);
+        {
+	  hd_switcher_menu_reset_main_icon (switcher, TRUE);
+	  switcher->priv->blinking_notification = -1;
+	}
 	
         hildon_desktop_popup_menu_remove_item (switcher->priv->menu_notifications,
 	                                       menu_item);


More information about the maemo-commits mailing list