[maemo-commits] [maemo-commits] r13951 - in projects/haf/trunk/hildon-desktop: . libhildondesktop src
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Thu Sep 20 17:04:42 EEST 2007
- Previous message: [maemo-commits] r13950 - projects/haf/hafbuildbot
- Next message: [maemo-commits] r13952 - projects/haf/trunk/pango1.0/debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: lucasr Date: 2007-09-20 17:04:40 +0300 (Thu, 20 Sep 2007) New Revision: 13951 Modified: projects/haf/trunk/hildon-desktop/ChangeLog projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.h projects/haf/trunk/hildon-desktop/src/hd-applications-menu.c projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c Log: 2007-09-20 Lucas Rocha <lucas.rocha at nokia.com> * src/hd-applications-menu.c (hd_applications_menu_activate_category): use new method for replacing items in popup menu. * src/hd-switcher-menu.c (hd_switcher_menu_create_clear_notifications_button, hd_switcher_menu_add_clear_notifications_button, hd_switcher_menu_get_icon_from_theme, hd_switcher_menu_add_notification_groups, hd_switcher_menu_create_notifications_menu): refactored the whole notification pane creation to use the new method for replacing items in popup menu. * libhildondesktop/hildon-desktop-popup-menu.c (hildon_desktop_popup_menu_add_items, hildon_desktop_popup_menu_remove_all, hildon_desktop_popup_menu_parent_size, hildon_desktop_popup_menu_replace_items): new method for replacing items in popup menu. Make sure the parent is resized before moving it to another position. Fixes: NB#65712. Modified: projects/haf/trunk/hildon-desktop/ChangeLog =================================================================== --- projects/haf/trunk/hildon-desktop/ChangeLog 2007-09-20 14:00:51 UTC (rev 13950) +++ projects/haf/trunk/hildon-desktop/ChangeLog 2007-09-20 14:04:40 UTC (rev 13951) @@ -1,3 +1,23 @@ +2007-09-20 Lucas Rocha <lucas.rocha at nokia.com> + + * src/hd-applications-menu.c (hd_applications_menu_activate_category): + use new method for replacing items in popup menu. + * src/hd-switcher-menu.c + (hd_switcher_menu_create_clear_notifications_button, + hd_switcher_menu_add_clear_notifications_button, + hd_switcher_menu_get_icon_from_theme, + hd_switcher_menu_add_notification_groups, + hd_switcher_menu_create_notifications_menu): refactored the whole + notification pane creation to use the new method for replacing + items in popup menu. + * libhildondesktop/hildon-desktop-popup-menu.c + (hildon_desktop_popup_menu_add_items, + hildon_desktop_popup_menu_remove_all, + hildon_desktop_popup_menu_parent_size, + hildon_desktop_popup_menu_replace_items): new method for replacing + items in popup menu. Make sure the parent is resized before moving + it to another position. Fixes: NB#65712. + 2007-09-20 Johan Bilien <johan.bilien at nokia.com> * src/hd-app-menu-settings-dialog.c: check for duplicate names Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c =================================================================== --- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c 2007-09-20 14:00:51 UTC (rev 13950) +++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c 2007-09-20 14:04:40 UTC (rev 13951) @@ -865,21 +865,6 @@ } } - if (show_scroll_controls) - { - hildon_desktop_popup_menu_show_controls (menu); - gtk_widget_set_size_request - (menu->priv->viewport, -1, max_height - menu->priv->item_height - 9); - } - else - { - hildon_desktop_popup_menu_hide_controls (menu); - gtk_widget_set_size_request - (menu->priv->viewport, -1, d_height); - } - - gtk_widget_queue_resize (menu->priv->viewport); - if (menu->priv->resize_parent && GTK_IS_WINDOW (menu->priv->parent)) { gint border_width; @@ -894,22 +879,37 @@ max_height : d_height + (2 * border_width)); - if (GTK_WIDGET_MAPPED (menu->priv->parent)) - { - g_signal_emit_by_name (menu, "popup-menu-resize"); - - gtk_widget_queue_resize (GTK_WIDGET (menu)); - gtk_widget_queue_resize (menu->priv->parent); - } - if (GTK_WIDGET_REALIZED (menu->priv->parent)) gdk_window_resize (menu->priv->parent->window, parent_req.width, show_scroll_controls ? max_height : d_height + (2 * border_width)); + + if (GTK_WIDGET_MAPPED (menu->priv->parent)) + { + g_signal_emit_by_name (menu, "popup-menu-resize"); + + gtk_widget_queue_resize (GTK_WIDGET (menu)); + gtk_widget_queue_resize (menu->priv->parent); + } } + if (show_scroll_controls) + { + hildon_desktop_popup_menu_show_controls (menu); + gtk_widget_set_size_request + (menu->priv->viewport, -1, max_height - menu->priv->item_height - 9); + } + else + { + hildon_desktop_popup_menu_hide_controls (menu); + gtk_widget_set_size_request + (menu->priv->viewport, -1, d_height); + } + + gtk_widget_queue_resize (menu->priv->viewport); + g_list_free (children); } @@ -986,6 +986,17 @@ menu->priv->n_items++; } +static void +hildon_desktop_popup_menu_real_remove_item (HildonDesktopPopupMenu *menu, GtkMenuItem *item) +{ + if (menu->priv->selected_item == item) + hildon_desktop_popup_menu_deselect_item (menu, item); + + gtk_container_remove (GTK_CONTAINER (menu->priv->box_items), GTK_WIDGET (item)); + + menu->priv->n_items--; +} + void hildon_desktop_popup_menu_add_item (HildonDesktopPopupMenu *menu, GtkMenuItem *item) { @@ -1011,24 +1022,33 @@ } void -hildon_desktop_popup_menu_add_items (HildonDesktopPopupMenu *menu, GList *items) +hildon_desktop_popup_menu_replace_items (HildonDesktopPopupMenu *menu, GList *items) { GtkRequisition req; - GList *l; + GList *children, *l; gint item_width = -1; - - g_return_if_fail (HILDON_DESKTOP_IS_POPUP_MENU (menu)); + g_assert (HILDON_DESKTOP_IS_POPUP_MENU (menu)); + if (GTK_IS_WINDOW (menu->priv->parent)) { gtk_widget_size_request (menu->priv->parent, &req); item_width = req.width; } + children = hildon_desktop_popup_menu_get_children (menu); + + for (l = children; l != NULL; l = l->next) + { + GtkWidget *item = GTK_WIDGET (l->data); + + hildon_desktop_popup_menu_real_remove_item (menu, GTK_MENU_ITEM (item)); + } + for (l = items; l != NULL; l = l->next) { GtkWidget *item = GTK_WIDGET (l->data); - + if (GTK_IS_MENU_ITEM (item)) hildon_desktop_popup_menu_real_add_item (menu, GTK_MENU_ITEM (item), @@ -1040,20 +1060,8 @@ menu->priv->item_height + 2); hildon_desktop_popup_menu_parent_size (menu); - } -static void -hildon_desktop_popup_menu_real_remove_item (HildonDesktopPopupMenu *menu, GtkMenuItem *item) -{ - if (menu->priv->selected_item == item) - hildon_desktop_popup_menu_deselect_item (menu, item); - - gtk_container_remove (GTK_CONTAINER (menu->priv->box_items), GTK_WIDGET (item)); - - menu->priv->n_items--; -} - void hildon_desktop_popup_menu_remove_item (HildonDesktopPopupMenu *menu, GtkMenuItem *item) { @@ -1066,32 +1074,13 @@ } -void -hildon_desktop_popup_menu_remove_all (HildonDesktopPopupMenu *menu) -{ - GList *children, *l; - - g_assert (HILDON_DESKTOP_IS_POPUP_MENU (menu)); - - children = hildon_desktop_popup_menu_get_children (menu); - - for (l = children; l != NULL; l = l->next) - { - GtkWidget *item = GTK_WIDGET (l->data); - - hildon_desktop_popup_menu_real_remove_item (menu, GTK_MENU_ITEM (item)); - } - - hildon_desktop_popup_menu_parent_size (menu); -} - GList * hildon_desktop_popup_menu_get_children (HildonDesktopPopupMenu *menu) { g_return_val_if_fail (HILDON_DESKTOP_IS_POPUP_MENU (menu), NULL); - + GList *list = gtk_container_get_children (GTK_CONTAINER (menu->priv->box_items)); - + return list; } Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.h =================================================================== --- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.h 2007-09-20 14:00:51 UTC (rev 13950) +++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.h 2007-09-20 14:04:40 UTC (rev 13951) @@ -62,16 +62,13 @@ hildon_desktop_popup_menu_add_item (HildonDesktopPopupMenu *menu, GtkMenuItem *item); -void -hildon_desktop_popup_menu_add_items (HildonDesktopPopupMenu *menu, - GList *items); - void hildon_desktop_popup_menu_remove_item (HildonDesktopPopupMenu *menu, GtkMenuItem *item); void -hildon_desktop_popup_menu_remove_all (HildonDesktopPopupMenu *menu); +hildon_desktop_popup_menu_replace_items (HildonDesktopPopupMenu *menu, + GList *items); GList * hildon_desktop_popup_menu_get_children (HildonDesktopPopupMenu *menu); Modified: projects/haf/trunk/hildon-desktop/src/hd-applications-menu.c =================================================================== --- projects/haf/trunk/hildon-desktop/src/hd-applications-menu.c 2007-09-20 14:00:51 UTC (rev 13950) +++ projects/haf/trunk/hildon-desktop/src/hd-applications-menu.c 2007-09-20 14:04:40 UTC (rev 13951) @@ -385,15 +385,13 @@ g_object_ref (child); } - hildon_desktop_popup_menu_remove_all (button->priv->menu_applications); - g_list_free (sub_items); sub_items = (GList *) g_object_get_data (G_OBJECT (item), CATEGORY_SUB_ITEMS); - hildon_desktop_popup_menu_add_items (button->priv->menu_applications, - sub_items); + hildon_desktop_popup_menu_replace_items (button->priv->menu_applications, + sub_items); } else { Modified: projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c =================================================================== --- projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c 2007-09-20 14:00:51 UTC (rev 13950) +++ projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c 2007-09-20 14:04:40 UTC (rev 13951) @@ -198,7 +198,7 @@ static void hd_switcher_menu_scroll_to (HildonDesktopPopupWindow *window, HDSwitcherMenu *switcher); -static void hd_switcher_menu_add_clear_notifications_button (HDSwitcherMenu *switcher); +static void hd_switcher_menu_create_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); @@ -314,29 +314,32 @@ } static GdkPixbuf * -hd_switcher_menu_get_icon_from_theme (HDSwitcherMenu *switcher, - const gchar *icon_name, - gint size) +hd_switcher_menu_get_icon_from_theme (const gchar *icon_name, + gint size) { + static GtkIconTheme *icon_theme = NULL; + GError *error; GdkPixbuf *retval; + if (!icon_theme) + icon_theme = gtk_icon_theme_get_default (); + if (!icon_name) return NULL; - switcher->priv->icon_theme = gtk_icon_theme_get_default (); + g_return_val_if_fail (icon_theme, NULL); - g_return_val_if_fail (switcher->priv->icon_theme, NULL); - if (!icon_name || icon_name[0] == '\0') return NULL; error = NULL; - retval = gtk_icon_theme_load_icon (switcher->priv->icon_theme, + retval = gtk_icon_theme_load_icon (icon_theme, icon_name, size == -1 ? AS_ICON_SIZE : size, 0, &error); + if (error) { g_warning ("Could not load icon '%s': %s\n", @@ -687,10 +690,10 @@ gpointer user_data) { HDSwitcherMenuNotificationGroup *ngroup; - HDSwitcherMenu *switcher; + GList **items; ngroup = (HDSwitcherMenuNotificationGroup *) value; - switcher = (HDSwitcherMenu *) user_data; + items = (GList **) user_data; if (ngroup->is_active) { @@ -701,29 +704,26 @@ summary = g_strdup_printf (_(ngroup->label), g_list_length (ngroup->notifications)); - icon = hd_switcher_menu_get_icon_from_theme (switcher, ngroup->icon, -1); - - hildon_desktop_popup_menu_add_item - (switcher->priv->menu_notifications, - GTK_MENU_ITEM (hd_switcher_menu_create_separator (FALSE))); + icon = hd_switcher_menu_get_icon_from_theme (ngroup->icon, -1); + *items = g_list_append (*items, hd_switcher_menu_create_separator (FALSE)); + menu_item = hd_switcher_menu_item_new_from_notification_group (ngroup->notifications, icon, summary, ngroup->dbus_callback, TRUE); gtk_widget_set_name (GTK_WIDGET (menu_item), HD_SWITCHER_MENU_NOT_MENU_ITEM_NAME); - hildon_desktop_popup_menu_add_item - (switcher->priv->menu_notifications, GTK_MENU_ITEM (menu_item)); + *items = g_list_append (*items, menu_item); } } static void -hd_switcher_menu_add_notification_groups (HDSwitcherMenu *switcher) +hd_switcher_menu_add_notification_groups (HDSwitcherMenu *switcher, GList **items) { g_hash_table_foreach (switcher->priv->notification_groups, hd_switcher_menu_add_notification_group, - switcher); + items); } static void @@ -926,7 +926,7 @@ /*gtk_widget_set_size_request (button, -1, AS_MENU_BUTTON_HEIGHT);*/ gtk_widget_set_size_request (GTK_WIDGET (switcher), -1, AS_MENU_BUTTON_HEIGHT); - pixbuf = hd_switcher_menu_get_icon_from_theme (switcher, AS_MENU_BUTTON_ICON, -1); + pixbuf = hd_switcher_menu_get_icon_from_theme (AS_MENU_BUTTON_ICON, -1); switcher->priv->icon = gtk_image_new_from_pixbuf (pixbuf); gtk_container_add (GTK_CONTAINER (button), switcher->priv->icon); gtk_widget_show (switcher->priv->icon); @@ -1302,7 +1302,7 @@ } static void -hd_switcher_menu_add_clear_notifications_button (HDSwitcherMenu *switcher) +hd_switcher_menu_create_clear_notifications_button (HDSwitcherMenu *switcher) { GtkWidget *hbox, *image, *label; GdkPixbuf *icon; @@ -1311,9 +1311,7 @@ hbox = gtk_hbox_new (FALSE, 0); - icon = hd_switcher_menu_get_icon_from_theme (switcher, - AS_CLEAR_ITEM_ICON, - -1); + icon = hd_switcher_menu_get_icon_from_theme (AS_CLEAR_ITEM_ICON, -1); image = gtk_image_new_from_pixbuf (icon); @@ -1343,9 +1341,8 @@ G_CALLBACK (hd_switcher_menu_clear_item_activated), switcher); - hildon_desktop_popup_menu_add_item - (switcher->priv->menu_notifications, - GTK_MENU_ITEM (switcher->priv->clear_events_menu_item)); + gtk_widget_set_name (GTK_WIDGET (switcher->priv->clear_events_menu_item), + HD_SWITCHER_MENU_NOT_MENU_ITEM_NAME); } static void @@ -1687,15 +1684,13 @@ { GtkWidget *menu_item = NULL, *first_item = NULL; GtkTreeModel *nm = GTK_TREE_MODEL (switcher->nm); - GList *children = NULL, *l; + GList *children = NULL; GtkTreeIter iter; - children = - hildon_desktop_popup_menu_get_children (switcher->priv->menu_notifications); - if (gtk_tree_model_iter_n_children (nm, NULL) >= AS_ITEMS_LIMIT) { - hd_switcher_menu_add_clear_notifications_button (switcher); + hd_switcher_menu_create_clear_notifications_button (switcher); + children = g_list_append (children, switcher->priv->clear_events_menu_item); first_item = switcher->priv->clear_events_menu_item; } else @@ -1707,14 +1702,6 @@ } } - for (l = children; l != NULL; l = g_list_next (l)) - { - if (l->data != switcher->priv->clear_events_menu_item) - gtk_widget_destroy (GTK_WIDGET (l->data)); - } - - g_list_free (children); - if (gtk_tree_model_get_iter_first (nm, &iter)) { GdkPixbuf *icon; @@ -1755,7 +1742,7 @@ } while (gtk_tree_model_iter_next (nm, &iter)); - hd_switcher_menu_add_notification_groups (switcher); + hd_switcher_menu_add_notification_groups (switcher, &children); gtk_tree_model_get_iter_first (nm, &iter); } @@ -1785,9 +1772,8 @@ if (ngroup == NULL || !ngroup->is_active) { if (first_item) - hildon_desktop_popup_menu_add_item - (switcher->priv->menu_notifications, - GTK_MENU_ITEM (hd_switcher_menu_create_separator (FALSE))); + children = g_list_append (children, + hd_switcher_menu_create_separator (FALSE)); menu_item = hd_switcher_menu_item_new_from_notification @@ -1804,21 +1790,19 @@ G_CALLBACK (hd_switcher_menu_item_activated), switcher); - hildon_desktop_popup_menu_add_item - (switcher->priv->menu_notifications, GTK_MENU_ITEM (menu_item)); + children = g_list_append (children, menu_item); if (!ack && !icon_is_set) { switcher->priv->blinking_notification = id; hd_switcher_menu_replace_blinking_icon (switcher, - hd_switcher_menu_get_icon_from_theme (switcher, - icon_name, + hd_switcher_menu_get_icon_from_theme (icon_name, AS_ICON_SIZE)); icon_is_set = TRUE; } - + if (!first_item) first_item = menu_item; } @@ -1829,6 +1813,10 @@ } while (gtk_tree_model_iter_next (nm, &iter)); + hildon_desktop_popup_menu_replace_items (switcher->priv->menu_notifications, children); + + g_list_free (children); + hd_switcher_menu_reset_notification_groups (switcher); hd_switcher_menu_scroll_to (NULL, switcher); @@ -2042,7 +2030,7 @@ { if (HD_IS_SWITCHER_MENU_ITEM (l->data)) { - HDWMEntryInfo *info = + HDWMEntryInfo *info = 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); @@ -2057,7 +2045,7 @@ { hd_switcher_menu_item_set_blinking (HD_SWITCHER_MENU_ITEM (l->data), FALSE); } - } + } } }
- Previous message: [maemo-commits] r13950 - projects/haf/hafbuildbot
- Next message: [maemo-commits] r13952 - projects/haf/trunk/pango1.0/debian
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]