[maemo-commits] [maemo-commits] r13651 - in projects/haf/trunk/hildon-desktop: . src
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Thu Sep 6 19:19:11 EEST 2007
- Previous message: [maemo-commits] r13650 - in projects/haf/trunk/gtk+: . gtk
- Next message: [maemo-commits] r13652 - in projects/haf/trunk/hildon-desktop: . libhildondesktop
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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);
- Previous message: [maemo-commits] r13650 - in projects/haf/trunk/gtk+: . gtk
- Next message: [maemo-commits] r13652 - in projects/haf/trunk/hildon-desktop: . libhildondesktop
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]