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

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Wed May 9 18:24:37 EEST 2007
Author: moimart
Date: 2007-05-09 18:24:35 +0300 (Wed, 09 May 2007)
New Revision: 11552

Modified:
   projects/haf/trunk/hildon-desktop/ChangeLog
   projects/haf/trunk/hildon-desktop/src/hd-config.h
   projects/haf/trunk/hildon-desktop/src/hd-switcher-menu-item.c
   projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c
Log:

	* src/hd-config.h: Added thumb icon size.
        * src/hd-switcher-menu-item.c: Include hd-config.h
        * src/hd-switcher-menu.c:
        - Implemented blinking of applications in menu icon.
	* ChangeLog updated.



Modified: projects/haf/trunk/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-desktop/ChangeLog	2007-05-09 14:47:28 UTC (rev 11551)
+++ projects/haf/trunk/hildon-desktop/ChangeLog	2007-05-09 15:24:35 UTC (rev 11552)
@@ -1,6 +1,13 @@
 2007-05-09  Moises Martinez  <moises.martinez at nokia.com>
 
+	* src/hd-config.h: Added thumb icon size.
+	* src/hd-switcher-menu-item.c: Include hd-config.h
 	* src/hd-switcher-menu.c:
+	- Implemented blinking of applications in menu icon.
+
+2007-05-09  Moises Martinez  <moises.martinez at nokia.com>
+
+	* src/hd-switcher-menu.c:
 	- Populate notifications menu at start-up.
 
 2007-05-08  Johan Bilien  <johan.bilien at nokia.com>

Modified: projects/haf/trunk/hildon-desktop/src/hd-config.h
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-config.h	2007-05-09 14:47:28 UTC (rev 11551)
+++ projects/haf/trunk/hildon-desktop/src/hd-config.h	2007-05-09 15:24:35 UTC (rev 11552)
@@ -63,4 +63,6 @@
 
 #define HD_PLUGIN_CONFIG_KEY_SB             "X-status-bar-plugin"
 
+#define AS_ICON_THUMB_SIZE      64
+
 #endif /* __HD_CONFIG_FILES_H__ */

Modified: projects/haf/trunk/hildon-desktop/src/hd-switcher-menu-item.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-switcher-menu-item.c	2007-05-09 14:47:28 UTC (rev 11551)
+++ projects/haf/trunk/hildon-desktop/src/hd-switcher-menu-item.c	2007-05-09 15:24:35 UTC (rev 11552)
@@ -22,11 +22,10 @@
 /* Hildon includes */
 #include "hd-switcher-menu-item.h"
 #include "hn-app-pixbuf-anim-blinker.h"
+#include "hd-config.h"
 
 #include <libhildondesktop/hildon-desktop-notification-manager.h>
 
-#include <stdlib.h>
-#include <string.h>
 
 /* GLib include */
 #include <glib.h>
@@ -75,7 +74,6 @@
 #define AS_BUTTON_HEIGHT        38
 #define AS_ROW_HEIGHT 		30
 #define AS_ICON_SIZE            26
-#define AS_ICON_THUMB_SIZE      64
 #define AS_CLOSE_BUTTON_SIZE    16
 #define AS_CLOSE_BUTTON_THUMB_SIZE 40
 #define AS_TOOLTIP_WIDTH        360

Modified: projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c	2007-05-09 14:47:28 UTC (rev 11551)
+++ projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c	2007-05-09 15:24:35 UTC (rev 11552)
@@ -24,6 +24,8 @@
 #include <config.h>
 #endif
 
+#include "hd-config.h"
+
 /* Hildon includes */
 #include "hd-switcher-menu.h"
 #include "hd-switcher-menu-item.h"
@@ -100,6 +102,8 @@
   GtkWidget		   *icon;
 
   GtkTreeIter		   *last_iter_added;
+
+  HDEntryInfo		   *last_urgent_info;
 };
 
 static GObject *hd_switcher_menu_constructor (GType gtype,
@@ -139,6 +143,8 @@
 
 static void hd_switcher_menu_populate_notifications (HDSwitcherMenu *switcher);
 
+static void hd_switcher_menu_reset_main_icon (HDSwitcherMenu *switcher);
+
 static void 
 hd_switcher_menu_init (HDSwitcherMenu *switcher)
 {
@@ -156,6 +162,8 @@
 
   switcher->priv->last_iter_added = NULL;
 
+  switcher->priv->last_urgent_info = NULL;
+
   switcher->hdwm = hd_wm_get_singleton ();
 
   switcher->nm = 
@@ -663,7 +671,6 @@
     hildon_desktop_popup_window_popdown (switcher->priv->popup_window);
     return;
   }    
-
 	
   hildon_desktop_popup_window_popup 
    (switcher->priv->popup_window,
@@ -678,16 +685,7 @@
 
   switcher->priv->is_open = TRUE;
 
-  if (GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child != switcher->priv->icon)
-  {
-    gtk_container_remove (GTK_CONTAINER (SWITCHER_TOGGLE_BUTTON),
-		    	  GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child);
-
-    gtk_container_add (GTK_CONTAINER (SWITCHER_TOGGLE_BUTTON),
-	               GTK_WIDGET (switcher->priv->icon));
-    
-    g_object_unref (G_OBJECT (switcher->priv->icon)); 
-  }	  
+  hd_switcher_menu_reset_main_icon (switcher);
 }	
 
 static void 
@@ -708,6 +706,21 @@
 }
 
 static void 
+hd_switcher_menu_reset_main_icon (HDSwitcherMenu *switcher)
+{
+  if (GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child != switcher->priv->icon)
+  {
+    gtk_container_remove (GTK_CONTAINER (SWITCHER_TOGGLE_BUTTON),
+		    	  GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child);
+
+    gtk_container_add (GTK_CONTAINER (SWITCHER_TOGGLE_BUTTON),
+	               GTK_WIDGET (switcher->priv->icon));
+    
+    g_object_unref (G_OBJECT (switcher->priv->icon)); 
+  }
+}	
+
+static void 
 hd_switcher_menu_create_menu (HDSwitcherMenu *switcher, HDWM *hdwm)
 {
   GList *children = NULL, *l;
@@ -808,6 +821,12 @@
         if (l->prev && GTK_IS_SEPARATOR_MENU_ITEM (l->prev->data))
           hildon_desktop_popup_menu_remove_item (switcher->priv->menu_applications,
                                                  GTK_MENU_ITEM (l->prev->data));		
+
+	if (info == switcher->priv->last_urgent_info)
+        {
+          hd_switcher_menu_reset_main_icon (switcher);
+	  switcher->priv->last_urgent_info = NULL;
+        }		
       
         break;
       }
@@ -817,17 +836,117 @@
   g_list_free (children);  
 }
 
+static GdkPixbuf *
+hd_switcher_get_default_icon_from_entry_info (HDEntryInfo *info)
+{
+  GdkPixbuf *app_pixbuf = hd_entry_info_get_icon (info);
+ 
+  if (!app_pixbuf)
+  {
+    GError *error = NULL;
+
+    app_pixbuf = hd_entry_info_get_app_icon (info,
+                                             AS_ICON_THUMB_SIZE,
+                                             &error);
+    if (error)
+    {
+      g_error_free (error);
+      error = NULL;
+      
+      GtkIconTheme *icon_theme = gtk_icon_theme_get_default ();
+
+      app_pixbuf = gtk_icon_theme_load_icon (icon_theme,
+                                             AS_MENU_DEFAULT_APP_ICON,
+                                             AS_ICON_THUMB_SIZE,
+                                             GTK_ICON_LOOKUP_NO_SVG,
+                                             &error);
+
+      if (error)
+      {
+        g_warning ("Could not load icon %s from theme: %s.",
+                   AS_MENU_DEFAULT_APP_ICON,
+                   error->message);
+        g_error_free (error);
+      }
+
+      g_object_unref (icon_theme);
+    }
+  }
+
+  return app_pixbuf;
+}	
+
 static void 
 hd_switcher_menu_changed_info_cb (HDWM *hdwm,
 				  HDEntryInfo *info,
 				  HDSwitcherMenu *switcher)
 {
+#define N_SLOTS 3	
   GtkWidget *menu_item = NULL;
-  GList *children = NULL, *l;
+  GList *children = NULL, *apps = NULL, *l;
+  gint pos=0;
+  gboolean make_it_blink = FALSE;
 
+  if (!info)
+    return;	  
+
+  /* We have to guess whether it is in app switcher's slots or not*/
+  
+  if (info->type == HD_ENTRY_WATCHED_APP)
+  {	  
+     apps = hd_wm_get_applications (switcher->hdwm);
+
+     for (l = apps; l != NULL; l = g_list_next (l))
+     {
+        HDEntryInfo *iter_info = (HDEntryInfo *) l->data;
+
+	if (iter_info->type != HD_ENTRY_WATCHED_APP)
+          continue;
+ 	
+        if (iter_info->type == HD_ENTRY_WATCHED_APP)		
+        {
+	  pos++;
+
+	  if (iter_info == info)
+            break;		  
+        }		
+     }
+
+     if (pos >= N_SLOTS)
+       make_it_blink = TRUE;	    
+  }     
+  else
+  {
+     apps = hd_wm_get_applications (switcher->hdwm);
+
+     for (l = apps; l != NULL; l = g_list_next (l))
+     {
+       const GList *iter_children;	     
+       HDEntryInfo *iter_info = (HDEntryInfo *) l->data;
+       
+       if (iter_info->type == HD_ENTRY_WATCHED_APP)
+       {
+         pos++;	
+  	 
+         const GList *info_children = 
+  	   hd_entry_info_get_children (iter_info);
+	 
+	 for (iter_children = info_children; 
+ 	      iter_children != NULL; 
+	      iter_children = g_list_next (iter_children))
+         {
+           if (iter_children->data == info)
+	     break;	   
+         }		 
+       }	       
+     }	     
+
+     if (pos >= N_SLOTS)
+       make_it_blink = TRUE;	     
+  }	  
+	  
   children =
     hildon_desktop_popup_menu_get_children (switcher->priv->menu_applications);
-  /*TODO: Find the menu item */
 
   for (l = children; l != NULL; l = g_list_next (l))
   {
@@ -857,6 +976,13 @@
      hd_entry_info_set_ignore_urgent (info, FALSE);
      return;
   }
+  else
+  if (!hd_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);	  
+    switcher->priv->last_urgent_info = NULL;	  
+  }	  
 
   if (hd_entry_info_is_urgent (info) &&
       !hd_entry_info_get_ignore_urgent (info))
@@ -866,6 +992,14 @@
       /* child of one of the app buttons */
       if (!hd_switcher_menu_item_is_blinking (HD_SWITCHER_MENU_ITEM (menu_item)))
         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 (info));
+	
+	switcher->priv->last_urgent_info = info;
+      }
     }
   }
 }
@@ -970,6 +1104,7 @@
     (switcher->priv->menu_notifications, GTK_MENU_ITEM (menu_item));	  
   
   hd_switcher_menu_replace_blinking_icon (switcher, icon);
+  switcher->priv->last_urgent_info = NULL;
 
   hildon_desktop_popup_menu_add_item
     (switcher->priv->menu_notifications, 


More information about the maemo-commits mailing list