[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 ]
