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

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Fri Sep 21 15:34:29 EEST 2007
Author: lucasr
Date: 2007-09-21 15:34:27 +0300 (Fri, 21 Sep 2007)
New Revision: 13990

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

	* src/hd-switcher-menu.c (hd_switcher_menu_create_applications_menu,
	hd_switcher_menu_constructor): refactor applications pane to use
	optimized method for replacing all items in popup menu.


Modified: projects/haf/trunk/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-desktop/ChangeLog	2007-09-21 11:51:28 UTC (rev 13989)
+++ projects/haf/trunk/hildon-desktop/ChangeLog	2007-09-21 12:34:27 UTC (rev 13990)
@@ -1,3 +1,9 @@
+2007-09-21  Lucas Rocha  <lucas.rocha at nokia.com>
+
+	* src/hd-switcher-menu.c (hd_switcher_menu_create_applications_menu,
+	hd_switcher_menu_constructor): refactor applications pane to use
+	optimized method for replacing all items in popup menu.
+
 2007-09-21 Johan Bilien  <johan.bilien at nokia.com>
 
 	* configure.ac: 0.0.37

Modified: projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c
===================================================================
--- projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c	2007-09-21 11:51:28 UTC (rev 13989)
+++ projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c	2007-09-21 12:34:27 UTC (rev 13990)
@@ -153,6 +153,8 @@
 
   GtkImage		   *image_button;
 
+  GtkWidget                *home_item;
+  
   GtkWidget 		   *active_menu_item;
   GtkWidget		   *clear_events_menu_item;
 
@@ -200,6 +202,7 @@
 
 static void hd_switcher_menu_create_clear_notifications_button (HDSwitcherMenu *switcher);
 
+static void hd_switcher_menu_create_applications_menu (HDSwitcherMenu *switcher, HDWM *hdwm);
 static void hd_switcher_menu_refresh_application_items (HDSwitcherMenu *switcher);
 static void hd_switcher_menu_refresh_notification_items (HDSwitcherMenu *switcher);
 
@@ -1128,21 +1131,20 @@
   
   gtk_widget_pop_composite_child ();
 
-  GtkWidget *menu_item = 
+  switcher->priv->home_item =
     hd_switcher_menu_item_new_from_entry_info 
       (hd_wm_get_home_info (hdwm), FALSE);
-
-  gtk_widget_set_name (GTK_WIDGET (menu_item), 
+  
+  gtk_widget_set_name (GTK_WIDGET (switcher->priv->home_item), 
       		       HD_SWITCHER_MENU_APP_MENU_ITEM_NAME);
 
-  hildon_desktop_popup_menu_add_item
-   (switcher->priv->menu_applications, GTK_MENU_ITEM (menu_item));
-
-  g_signal_connect_after (menu_item,
+  g_signal_connect_after (switcher->priv->home_item,
                           "activate",
                           G_CALLBACK (hd_switcher_menu_item_activated),
-                          switcher); 
+                          switcher);
 
+  hd_switcher_menu_create_applications_menu (switcher, hdwm);
+  
   switcher->priv->notification_groups = 
           g_hash_table_new_full (g_str_hash, 
 	  		         g_str_equal,
@@ -1224,6 +1226,12 @@
   if (switcher->priv->window_dialog)
     gtk_widget_destroy (switcher->priv->window_dialog);	  
 
+  if (switcher->priv->home_item)
+  {
+    g_object_unref (switcher->priv->home_item);
+    switcher->priv->home_item = NULL;
+  }
+     
   g_object_unref (switcher->priv->icon_theme);
 
   hn_as_sound_deinit (switcher->priv->esd_socket); 
@@ -1828,30 +1836,13 @@
 static void 
 hd_switcher_menu_create_applications_menu (HDSwitcherMenu *switcher, HDWM *hdwm)
 {
-  GList *children = NULL, *apps = NULL, *l;
+  GList *items = NULL, *apps = NULL, *l;
   GtkWidget *separator = NULL;
 
-  children =
-    hildon_desktop_popup_menu_get_children (switcher->priv->menu_applications);
-
-  for (l = children; l != NULL; l = g_list_next (l))
-  {
-    HDWMEntryInfo *info;
-
-    if (GTK_IS_SEPARATOR_MENU_ITEM (l->data))
-      info = NULL;
-    else 
-      info = 
-        hd_switcher_menu_item_get_entry_info 
-	  (HD_SWITCHER_MENU_ITEM (l->data));
+  g_object_ref (switcher->priv->home_item);
  
-    if (info != hd_wm_get_home_info (switcher->hdwm))
-      hildon_desktop_popup_menu_remove_item (switcher->priv->menu_applications,
-                                             l->data);
-  }
+  items = g_list_append (items, switcher->priv->home_item);
 
-  g_list_free (children);
-
   apps = g_list_reverse (g_list_copy (hd_wm_get_applications (hdwm)));
 
   for (l = apps; l != NULL; l = l->next)
@@ -1866,8 +1857,7 @@
     {
       separator = hd_switcher_menu_create_separator (TRUE);
 
-      hildon_desktop_popup_menu_add_item
-       (switcher->priv->menu_applications, GTK_MENU_ITEM (separator));
+      items = g_list_append (items, separator);
     }
 
     for (child = children; child != NULL; child = child->next)
@@ -1884,8 +1874,7 @@
 			      G_CALLBACK (hd_switcher_menu_item_activated),
 			      (gpointer)switcher);
 
-      hildon_desktop_popup_menu_add_item
-       (switcher->priv->menu_applications, GTK_MENU_ITEM (menu_item));
+      items = g_list_append (items, menu_item);
 
       if (hd_wm_entry_info_is_active (entry))
         hildon_desktop_popup_menu_select_item 
@@ -1899,13 +1888,16 @@
     {
       separator = hd_switcher_menu_create_separator (TRUE);
 
-      hildon_desktop_popup_menu_add_item
-        (switcher->priv->menu_applications, GTK_MENU_ITEM (separator));
+      items = g_list_append (items, separator);
     }
 
     g_list_free (children);
   }
 
+  hildon_desktop_popup_menu_replace_items (switcher->priv->menu_applications, 
+		                           items);
+ 
+  g_list_free (items);
   g_list_free (apps);
 
   hd_switcher_menu_check_content (switcher); 
@@ -2171,7 +2163,7 @@
   if (menu_item)
   {
     hd_switcher_menu_item_set_entry_info (HD_SWITCHER_MENU_ITEM (menu_item), info);
-  }   
+  }
   
   if (!hd_wm_entry_info_is_urgent (info) &&
        hd_wm_entry_info_get_ignore_urgent (info))


More information about the maemo-commits mailing list