[maemo-commits] [maemo-commits] r13472 - in projects/haf/trunk/hildon-desktop: . libhildondesktop
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Wed Aug 29 18:33:06 EEST 2007
- Previous message: [maemo-commits] r13471 - in projects/haf/trunk/hildon-desktop: . src
- Next message: [maemo-commits] r13473 - projects/haf/hafbuildbot
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: lucasr Date: 2007-08-29 18:33:04 +0300 (Wed, 29 Aug 2007) New Revision: 13472 Modified: projects/haf/trunk/hildon-desktop/ChangeLog projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c Log: 2007-08-29 Lucas Rocha <lucas.rocha at nokia.com> * libhildondesktop/hildon-desktop-popup-menu.c (hildon_desktop_popup_menu_scroll_start, hildon_desktop_popup_menu_scroll_stop, hildon_desktop_popup_menu_scroll_step, hildon_desktop_popup_menu_scroll_cb, hildon_desktop_popup_menu_scroll_constructor): scroll continuously on button press on scroll buttons. Button click scrolls on step down/up. Fixes NB#66827. Modified: projects/haf/trunk/hildon-desktop/ChangeLog =================================================================== --- projects/haf/trunk/hildon-desktop/ChangeLog 2007-08-29 14:35:03 UTC (rev 13471) +++ projects/haf/trunk/hildon-desktop/ChangeLog 2007-08-29 15:33:04 UTC (rev 13472) @@ -1,5 +1,16 @@ 2007-08-29 Lucas Rocha <lucas.rocha at nokia.com> + * libhildondesktop/hildon-desktop-popup-menu.c + (hildon_desktop_popup_menu_scroll_start, + hildon_desktop_popup_menu_scroll_stop, + hildon_desktop_popup_menu_scroll_step, + hildon_desktop_popup_menu_scroll_cb, + hildon_desktop_popup_menu_scroll_constructor): scroll continuously on + button press on scroll buttons. Button click scrolls on step down/up. + Fixes NB#66827. + +2007-08-29 Lucas Rocha <lucas.rocha at nokia.com> + * src/hd-switcher-menu.c (hd_switcher_menu_changed_info_cb): correctly calculate the position of an window in the stack in order to avoid blinking window icons both in switcher are and switcher menu. Modified: projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c =================================================================== --- projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c 2007-08-29 14:35:03 UTC (rev 13471) +++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c 2007-08-29 15:33:04 UTC (rev 13472) @@ -55,6 +55,8 @@ static gint signals[N_SIGNALS]; +#define MENU_SCROLL_TIMEOUT 40 + struct _HildonDesktopPopupMenuPrivate { GtkWidget *parent; @@ -78,6 +80,9 @@ guint toggle_size; gboolean rtl; + + gint scroll_id; + gint scroll_dir; }; static GObject *hildon_desktop_popup_menu_constructor (GType gtype, @@ -103,6 +108,8 @@ static gboolean hildon_desktop_popup_menu_release_event (GtkWidget *widget, GdkEventButton *event); static gboolean hildon_desktop_popup_menu_key_press_event (GtkWidget *widget, GdkEventKey *event); static void hildon_desktop_popup_menu_scroll_cb (GtkWidget *widget, HildonDesktopPopupMenu *menu); +static void hildon_desktop_popup_menu_scroll_start (GtkWidget *widget, HildonDesktopPopupMenu *menu); +static void hildon_desktop_popup_menu_scroll_stop (GtkWidget *widget, HildonDesktopPopupMenu *menu); static void hildon_desktop_popup_menu_adjustment_changed (GtkAdjustment *adj, HildonDesktopPopupMenu *menu); static void @@ -278,11 +285,31 @@ G_CALLBACK (hildon_desktop_popup_menu_scroll_cb), (gpointer)menu); + g_signal_connect (menu->priv->scroll_down, + "pressed", + G_CALLBACK (hildon_desktop_popup_menu_scroll_start), + (gpointer)menu); + + g_signal_connect (menu->priv->scroll_down, + "released", + G_CALLBACK (hildon_desktop_popup_menu_scroll_stop), + (gpointer)menu); + g_signal_connect (menu->priv->scroll_up, "clicked", G_CALLBACK (hildon_desktop_popup_menu_scroll_cb), (gpointer)menu); + g_signal_connect (menu->priv->scroll_up, + "pressed", + G_CALLBACK (hildon_desktop_popup_menu_scroll_start), + (gpointer)menu); + + g_signal_connect (menu->priv->scroll_up, + "released", + G_CALLBACK (hildon_desktop_popup_menu_scroll_stop), + (gpointer)menu); + gtk_box_pack_start (GTK_BOX (menu->priv->box_buttons), menu->priv->scroll_up, TRUE, TRUE, 0); @@ -535,32 +562,67 @@ hildon_desktop_popup_menu_update_scroll_buttons (menu); } -static void -hildon_desktop_popup_menu_scroll_cb (GtkWidget *widget, HildonDesktopPopupMenu *menu) +static gboolean +hildon_desktop_popup_menu_scroll_step (gpointer data) { - GtkRequisition req; + HildonDesktopPopupMenu *menu = HILDON_DESKTOP_POPUP_MENU (data); GtkAdjustment *adj; - gdouble position; gint delta = menu->priv->item_height + 1; adj = gtk_viewport_get_vadjustment (GTK_VIEWPORT (menu->priv->viewport)); - if (widget == menu->priv->scroll_up) - delta *= -1; + delta *= menu->priv->scroll_dir; - position = gtk_adjustment_get_value (adj); + if ((gint) (adj->value + (gdouble) delta) >= 0 && + (gint) (adj->value + (gdouble) delta) <= adj->upper - adj->page_size) + { + adj->value += (gdouble) delta; + gtk_adjustment_value_changed (adj); + } + else + { + if (delta > 0) + adj->value = adj->upper - adj->page_size; + else + adj->value = 0; - if (menu->priv->parent) - { - gtk_widget_size_request (menu->priv->parent, &req); - - if ((gint) (position + (gdouble) delta) <= adj->upper - adj->page_size) - gtk_adjustment_set_value (adj, position + (gdouble) delta); - else - gtk_adjustment_set_value (adj, adj->upper - adj->page_size); + gtk_adjustment_value_changed (adj); + return FALSE; } + + return TRUE; } +static void +hildon_desktop_popup_menu_scroll_start (GtkWidget *widget, HildonDesktopPopupMenu *menu) +{ + if (widget == menu->priv->scroll_up) + menu->priv->scroll_dir = -1; + else + menu->priv->scroll_dir = 1; + + menu->priv->scroll_id = + g_timeout_add (MENU_SCROLL_TIMEOUT, hildon_desktop_popup_menu_scroll_step, menu); +} + +static void +hildon_desktop_popup_menu_scroll_stop (GtkWidget *widget, HildonDesktopPopupMenu *menu) +{ + g_source_remove (menu->priv->scroll_id); + menu->priv->scroll_id = 0; +} + +static void +hildon_desktop_popup_menu_scroll_cb (GtkWidget *widget, HildonDesktopPopupMenu *menu) +{ + if (widget == menu->priv->scroll_up) + menu->priv->scroll_dir = -1; + else + menu->priv->scroll_dir = 1; + + hildon_desktop_popup_menu_scroll_step (menu); +} + static gboolean hildon_desktop_popup_menu_release_event (GtkWidget *widget, GdkEventButton *event)
- Previous message: [maemo-commits] r13471 - in projects/haf/trunk/hildon-desktop: . src
- Next message: [maemo-commits] r13473 - projects/haf/hafbuildbot
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]