[maemo-commits] [maemo-commits] r11642 - in projects/haf/trunk/hildon-desktop: . libhildondesktop src
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Mon May 14 18:54:28 EEST 2007
- Previous message: [maemo-commits] r11641 - projects/haf/hafbuildbot
- Next message: [maemo-commits] r11643 - in projects/haf/trunk/gtk+: . gtk
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: moimart Date: 2007-05-14 18:54:25 +0300 (Mon, 14 May 2007) New Revision: 11642 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/libhildondesktop/hildon-desktop-toggle-button.h projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c Log: * src/hd-switcher-menu.c: - Fixed showing of menu button when notifications are added and there are no applications and the menu is closed afterwards. * libhildondesktop/hildon-desktop-popup-menu.[ch]: - Implemented basic scrolling support. To be improved, though. * libhildondesktop/hildon-desktop-toggle-button.h: - Fixed #define * ChangeLog updated. Modified: projects/haf/trunk/hildon-desktop/ChangeLog =================================================================== --- projects/haf/trunk/hildon-desktop/ChangeLog 2007-05-14 15:13:01 UTC (rev 11641) +++ projects/haf/trunk/hildon-desktop/ChangeLog 2007-05-14 15:54:25 UTC (rev 11642) @@ -1,3 +1,13 @@ +2007-05-13 Moises Martinez <moises.martinez at nokia.com> + + * src/hd-switcher-menu.c: + - Fixed showing of menu button when notifications are added and there + are no applications and the menu is closed afterwards. + * libhildondesktop/hildon-desktop-popup-menu.[ch]: + - Implemented basic scrolling support. To be improved, though. + * libhildondesktop/hildon-desktop-toggle-button.h: + - Fixed #define + 2007-05-11 Johan Bilien <johan.bilien at nokia.com> * configure.ac: 0.0.13 Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c =================================================================== --- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c 2007-05-14 15:13:01 UTC (rev 11641) +++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c 2007-05-14 15:54:25 UTC (rev 11642) @@ -198,8 +198,8 @@ menu->priv->box_buttons = gtk_hbox_new (TRUE,0); - menu->priv->scroll_down = gtk_button_new_with_label ("down"); - menu->priv->scroll_up = gtk_button_new_with_label ("up"); + menu->priv->scroll_down = gtk_button_new (); + menu->priv->scroll_up = gtk_button_new (); g_signal_connect (menu->priv->scroll_down, @@ -331,7 +331,7 @@ hildon_desktop_popup_menu_scroll_cb (GtkWidget *widget, HildonDesktopPopupMenu *menu) { gdouble position; - gint delta = menu->priv->item_height; + gint delta = menu->priv->item_height + 16; /*FIXME: Check items aside the menu item */ GtkAdjustment *adj = gtk_viewport_get_vadjustment (GTK_VIEWPORT (menu->priv->viewport)); @@ -356,7 +356,8 @@ else gtk_adjustment_set_value (adj, upper_hack); - g_debug ("min: %lf max: %lf current: %lf upper_hack: %lf", adj->lower,adj->upper, adj->value, upper_hack); + /* NOTE: Don't remove this + * g_debug ("min: %lf max: %lf current: %lf upper_hack: %lf", adj->lower,adj->upper, adj->value, upper_hack);*/ } } @@ -395,6 +396,35 @@ return TRUE; } +static void +hildon_desktop_menu_check_scroll_item (HildonDesktopPopupMenu *menu, + GtkScrollType type) +{ + GtkAdjustment *adj; + gint visible_y; + GtkWidget *view = GTK_WIDGET (menu->priv->selected_item); + gdouble upper_hack; + GtkRequisition req; + + GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (menu)); + + gtk_widget_size_request (parent, &req); + + adj = gtk_viewport_get_vadjustment (GTK_VIEWPORT (menu->priv->viewport)); + + if (parent && GTK_IS_WINDOW (parent)) + upper_hack = adj->upper - (req.height - menu->priv->item_height); + else + upper_hack = adj->upper; + + visible_y = view->allocation.y + menu->priv->item_height; + + if (visible_y < (req.height - menu->priv->item_height)) + hildon_desktop_popup_menu_scroll_cb (menu->priv->scroll_up, menu); + else + hildon_desktop_popup_menu_scroll_cb (menu->priv->scroll_down, menu); +} + static gboolean hildon_desktop_popup_menu_key_press_event (GtkWidget *widget, GdkEventKey *event) @@ -426,6 +456,9 @@ gtk_item_deselect (GTK_ITEM (l->data)); gtk_item_select (GTK_ITEM (item->data)); menu->priv->selected_item = GTK_MENU_ITEM (item->data); + + hildon_desktop_menu_check_scroll_item (menu, GTK_SCROLL_STEP_UP); + break; } @@ -446,6 +479,9 @@ gtk_item_deselect (GTK_ITEM (l->data)); gtk_item_select (GTK_ITEM (item->data)); menu->priv->selected_item = GTK_MENU_ITEM (item->data); + + hildon_desktop_menu_check_scroll_item (menu, GTK_SCROLL_STEP_DOWN); + break; } @@ -727,3 +763,16 @@ } } + +const GtkWidget * +hildon_desktop_popup_menu_get_scroll_button_up (HildonDesktopPopupMenu *menu) +{ + return menu->priv->scroll_up; +} + +const GtkWidget * +hildon_desktop_popup_menu_get_scroll_button_down (HildonDesktopPopupMenu *menu) +{ + return menu->priv->scroll_down; +} + Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.h =================================================================== --- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.h 2007-05-14 15:13:01 UTC (rev 11641) +++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.h 2007-05-14 15:54:25 UTC (rev 11642) @@ -81,6 +81,12 @@ void hildon_desktop_popup_menu_scroll_to_selected (HildonDesktopPopupMenu *menu); +const GtkWidget * +hildon_desktop_popup_menu_get_scroll_button_up (HildonDesktopPopupMenu *menu); + +const GtkWidget * +hildon_desktop_popup_menu_get_scroll_button_down (HildonDesktopPopupMenu *menu); + G_BEGIN_DECLS #endif/*__HILDON_DESKTOP_POPUP_MENU_H__*/ Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-toggle-button.h =================================================================== --- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-toggle-button.h 2007-05-14 15:13:01 UTC (rev 11641) +++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-toggle-button.h 2007-05-14 15:54:25 UTC (rev 11642) @@ -36,8 +36,8 @@ #define HILDON_DESKTOP_TYPE_TOGGLE_BUTTON (hildon_desktop_toggle_button_get_type ()) #define HILDON_DESKTOP_TOGGLE_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), HILDON_DESKTOP_TYPE_TOGGLE_BUTTON, HildonDesktopToggleButton)) #define HILDON_DESKTOP_TOGGLE_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), HILDON_DESKTOP_TYPE_TOGGLE_BUTTON, HildonDesktopToggleButtonClass)) -#define HD_IS_DESKTOP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HILDON_DESKTOP_TYPE_TOGGLE_BUTTON)) -#define HD_IS_DESKTOP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), HILDON_DESKTOP_TYPE_TOGGLE_BUTTON)) +#define HILDON_DESKTOP_IS_TOGGLE_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), HILDON_DESKTOP_TYPE_TOGGLE_BUTTON)) +#define HILDON_DESKTOP_IS_TOGGLE_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), HILDON_DESKTOP_TYPE_TOGGLE_BUTTON)) #define HILDON_DESKTOP_TOGGLE_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), HILDON_DESKTOP_TYPE_TOGGLE_BUTTON, HildonDesktopToggleButtonClass)) struct _HildonDesktopToggleButton Modified: projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c =================================================================== --- projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c 2007-05-14 15:13:01 UTC (rev 11641) +++ projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c 2007-05-14 15:54:25 UTC (rev 11642) @@ -58,6 +58,8 @@ #define AS_MENU_BUTTON_NAME "hildon-navigator-small-button4" +#define AS_MENU_BUTTON_HIGHLIGHTED "qgn_some_theme_to_be_defined" + /* Hardcoded pixel perfecting values */ #define AS_BUTTON_BORDER_WIDTH 0 #define AS_MENU_BORDER_WIDTH 20 @@ -71,6 +73,15 @@ #define AS_INTERNAL_PADDING 10 #define AS_SEPARATOR_HEIGHT 10 +#define SWITCHER_HIGHLIGHTING_FREQ 1000 +#define SWITCHER_HIGHLIGHTED_NAME "" + +#define SWITCHER_BUTTON_SIZE 32 +#define SWITCHER_BUTTON_UP "qgn_list_tasknavigator_appswitcher" +#define SWITCHER_BUTTON_DOWN "qgn_list_tasknavigator_appswitcher" + +#define SWITCHER_BUTTON_NAME "" + #define SWITCHER_TOGGLE_BUTTON GTK_BIN(switcher)->child enum @@ -99,6 +110,8 @@ gboolean is_open; gboolean fullscreen; + gint timeout; + GtkIconTheme *icon_theme; GtkWidget *icon; @@ -167,9 +180,11 @@ switcher->priv->active_menu_item = switcher->priv->clear_events_menu_item = NULL; - switcher->priv->is_open = - switcher->priv->fullscreen = FALSE; + switcher->priv->is_open = + switcher->priv->fullscreen = FALSE; + switcher->priv->timeout = 0; + switcher->priv->last_iter_added = NULL; switcher->priv->last_urgent_info = NULL; @@ -180,6 +195,8 @@ HILDON_DESKTOP_NOTIFICATION_MANAGER (hildon_desktop_notification_manager_get_singleton ()); + switcher->priv->icon_theme = gtk_icon_theme_get_default (); + g_object_ref (switcher->hdwm); } @@ -211,8 +228,7 @@ if (!icon_name) return NULL; - if (!switcher->priv->icon_theme) - switcher->priv->icon_theme = gtk_icon_theme_get_default (); + switcher->priv->icon_theme = gtk_icon_theme_get_default (); g_return_val_if_fail (switcher->priv->icon_theme, NULL); @@ -359,6 +375,8 @@ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), FALSE); + + g_list_free (children); } static GObject * @@ -370,8 +388,7 @@ HDSwitcherMenu *switcher; GtkWidget *button; HDWM *hdwm = hd_wm_get_singleton (); - GdkPixbuf *pixbuf; - + GdkPixbuf *pixbuf, *icon_up = NULL, *icon_down = NULL; object = G_OBJECT_CLASS (hd_switcher_menu_parent_class)->constructor (gtype, n_params, @@ -425,6 +442,54 @@ gtk_widget_show (GTK_WIDGET (switcher->priv->menu_applications)); gtk_widget_show (GTK_WIDGET (switcher->priv->menu_notifications)); + icon_up = + hd_switcher_menu_get_icon_from_theme (switcher, + SWITCHER_BUTTON_UP, + -1); + + icon_down = + hd_switcher_menu_get_icon_from_theme (switcher, + SWITCHER_BUTTON_DOWN, + -1); + + if (icon_up && icon_down) + { + const GtkWidget *button_up, *button_down; + GtkWidget *image_up, *image_down; + + button_up = + hildon_desktop_popup_menu_get_scroll_button_up (switcher->priv->menu_applications); + button_down = + hildon_desktop_popup_menu_get_scroll_button_down (switcher->priv->menu_applications); + + gtk_widget_set_name (GTK_WIDGET (button_up), SWITCHER_BUTTON_NAME); + gtk_widget_set_name (GTK_WIDGET (button_down), SWITCHER_BUTTON_NAME); + + image_up = gtk_image_new_from_pixbuf (icon_up); + image_down = gtk_image_new_from_pixbuf (icon_down); + + gtk_container_add (GTK_CONTAINER (button_up), image_up); + gtk_container_add (GTK_CONTAINER (button_down), image_down); + gtk_widget_show (image_up); + gtk_widget_show (image_down); + + button_up = + hildon_desktop_popup_menu_get_scroll_button_up (switcher->priv->menu_notifications); + button_down = + hildon_desktop_popup_menu_get_scroll_button_down (switcher->priv->menu_notifications); + + gtk_widget_set_name (GTK_WIDGET (button_up), SWITCHER_BUTTON_NAME); + gtk_widget_set_name (GTK_WIDGET (button_down), SWITCHER_BUTTON_NAME); + + image_up = gtk_image_new_from_pixbuf (icon_up); + image_down = gtk_image_new_from_pixbuf (icon_down); + + gtk_container_add (GTK_CONTAINER (button_up), image_up); + gtk_container_add (GTK_CONTAINER (button_down), image_down); + gtk_widget_show (image_up); + gtk_widget_show (image_down); + } + g_signal_connect (switcher->priv->popup_window, "key-press-event", G_CALLBACK (hd_switcher_menu_popup_window_keypress_cb), @@ -553,6 +618,8 @@ g_object_unref (switcher->hdwm); gtk_widget_destroy (GTK_WIDGET (switcher->priv->popup_window)); + + g_object_unref (switcher->priv->icon_theme); G_OBJECT_CLASS (hd_switcher_menu_parent_class)->finalize (object); } @@ -609,24 +676,52 @@ static void hd_switcher_menu_style_set (GtkWidget *widget, GtkStyle *style, gpointer data) { - - gtk_widget_set_name (widget, AS_MENU_BUTTON_NAME); - gtk_widget_set_name (GTK_BIN (widget)->child, AS_MENU_BUTTON_NAME); + static gboolean first_run = FALSE; /* FIXME: WTF????? Do it better. Highlighting the item will call this handler */ + + if (!first_run) + { + gtk_widget_set_name (widget, AS_MENU_BUTTON_NAME); + gtk_widget_set_name (GTK_BIN (widget)->child, AS_MENU_BUTTON_NAME); + first_run = TRUE; + } } +static void +hd_switcher_menu_update_highlighting (HDSwitcherMenu *switcher, gboolean state) +{ + if (state) + { + gtk_widget_set_name (GTK_WIDGET (switcher), SWITCHER_HIGHLIGHTED_NAME); + gtk_widget_set_name (GTK_BIN (switcher)->child, SWITCHER_HIGHLIGHTED_NAME); + } + else + { + gtk_widget_set_name (GTK_WIDGET (switcher), AS_MENU_BUTTON_NAME); + gtk_widget_set_name (GTK_BIN (switcher)->child, AS_MENU_BUTTON_NAME); + } +} + static void hd_switcher_menu_check_content (HDSwitcherMenu *switcher) { GList *children = NULL; - - if ((hd_wm_get_applications (switcher->hdwm) != NULL) || - (children = hildon_desktop_popup_menu_get_children - (switcher->priv->menu_notifications)) != NULL) + + children = + hildon_desktop_popup_menu_get_children (switcher->priv->menu_notifications); + + if ((hd_wm_get_applications (switcher->hdwm) != NULL) || children) { gtk_widget_show (GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child); + + if (children) + hd_switcher_menu_update_highlighting (switcher, TRUE); + else + hd_switcher_menu_update_highlighting (switcher, FALSE); } else { + hd_switcher_menu_update_highlighting (switcher, FALSE); + gtk_widget_hide (GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child); if (switcher->priv->is_open) @@ -805,6 +900,8 @@ switcher->priv->is_open = TRUE; hd_switcher_menu_reset_main_icon (switcher); + + hd_switcher_menu_check_content (switcher); } static void @@ -969,7 +1066,7 @@ } static GdkPixbuf * -hd_switcher_get_default_icon_from_entry_info (HDEntryInfo *info) +hd_switcher_get_default_icon_from_entry_info (HDSwitcherMenu *switcher, HDEntryInfo *info) { GdkPixbuf *app_pixbuf = hd_entry_info_get_icon (info); @@ -985,9 +1082,7 @@ g_error_free (error); error = NULL; - GtkIconTheme *icon_theme = gtk_icon_theme_get_default (); - - app_pixbuf = gtk_icon_theme_load_icon (icon_theme, + app_pixbuf = gtk_icon_theme_load_icon (switcher->priv->icon_theme, AS_MENU_DEFAULT_APP_ICON, AS_ICON_THUMB_SIZE, GTK_ICON_LOOKUP_NO_SVG, @@ -1000,8 +1095,6 @@ error->message); g_error_free (error); } - - g_object_unref (icon_theme); } } @@ -1128,7 +1221,7 @@ if (make_it_blink) { hd_switcher_menu_replace_blinking_icon - (switcher, hd_switcher_get_default_icon_from_entry_info (info)); + (switcher, hd_switcher_get_default_icon_from_entry_info (switcher,info)); switcher->priv->last_urgent_info = info; }
- Previous message: [maemo-commits] r11641 - projects/haf/hafbuildbot
- Next message: [maemo-commits] r11643 - in projects/haf/trunk/gtk+: . gtk
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]