[maemo-commits] [maemo-commits] r11772 - in projects/haf/trunk/hildon-desktop: . libhildondesktop libhildonwm src
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Wed May 23 14:43:32 EEST 2007
- Previous message: [maemo-commits] r11771 - projects/haf/trunk/hildon-fm/debian
- Next message: [maemo-commits] r11773 - in projects/haf/trunk/gtk+: . gdk/x11
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: moimart Date: 2007-05-23 14:43:30 +0300 (Wed, 23 May 2007) New Revision: 11772 Modified: projects/haf/trunk/hildon-desktop/ChangeLog projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c projects/haf/trunk/hildon-desktop/libhildonwm/hd-keys.c projects/haf/trunk/hildon-desktop/src/hd-switcher-menu-item.c projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c Log: * src/hd-switcher-menu-item.c: - Inherits againg from GtkImageMenuItem. * src/hd-switcher-menu.c: - Implemented dettached menu button. * libhildondesktop/hildon-desktop-popup-menu.c: - Fixed two little memory leaks. * libhildonwm/hd-keys.c: - Changed applet name for search. * ChangeLog updated. Modified: projects/haf/trunk/hildon-desktop/ChangeLog =================================================================== --- projects/haf/trunk/hildon-desktop/ChangeLog 2007-05-23 11:34:46 UTC (rev 11771) +++ projects/haf/trunk/hildon-desktop/ChangeLog 2007-05-23 11:43:30 UTC (rev 11772) @@ -1,3 +1,14 @@ +2007-05-22 Moises Martinez <moises.martinez at nokia.com> + + * src/hd-switcher-menu-item.c: + - Inherits againg from GtkImageMenuItem. + * src/hd-switcher-menu.c: + - Implemented dettached menu button. + * libhildondesktop/hildon-desktop-popup-menu.c: + - Fixed two little memory leaks. + * libhildonwm/hd-keys.c: + - Changed applet name for search. + 2007-05-22 Lucas Rocha <lucas.rocha at nokia.com> * src/hn-app-button.c: don't show tooltip when tapping and holding on 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-23 11:34:46 UTC (rev 11771) +++ projects/haf/trunk/hildon-desktop/libhildondesktop/hildon-desktop-popup-menu.c 2007-05-23 11:43:30 UTC (rev 11772) @@ -253,20 +253,20 @@ HildonDesktopPopupMenuPrivate *priv; GtkRequisition child_requisition; GtkAllocation child_allocation; - GList *children; + GList *children, *iter; gint height = 0; menu = HILDON_DESKTOP_POPUP_MENU (widget); priv = menu->priv; - children = gtk_container_get_children (GTK_CONTAINER (priv->box_items)); + iter = children = gtk_container_get_children (GTK_CONTAINER (priv->box_items)); - while (children) + while (iter) { GtkWidget *child; - child = children->data; - children = children->next; + child = iter->data; + iter = iter->next; if (GTK_WIDGET_VISIBLE (child)) { @@ -288,6 +288,8 @@ } } + g_list_free (children); + GTK_WIDGET_CLASS (hildon_desktop_popup_menu_parent_class)->size_allocate (widget, allocation); } @@ -298,7 +300,7 @@ HildonDesktopPopupMenuPrivate *priv; GtkRequisition child_requisition; guint max_toggle_size; - GList *children; + GList *children, *iter; g_return_if_fail (HILDON_DESKTOP_IS_POPUP_MENU (widget)); g_return_if_fail (req != NULL); @@ -308,15 +310,15 @@ max_toggle_size = 0; - children = gtk_container_get_children (GTK_CONTAINER (priv->box_items)); + iter = children = gtk_container_get_children (GTK_CONTAINER (priv->box_items)); - while (children) + while (iter) { GtkMenuItem *child; gint toggle_size; - child = (GtkMenuItem *) children->data; - children = children->next; + child = (GtkMenuItem *) iter->data; + iter = iter->next; if (GTK_WIDGET_VISIBLE (child)) { @@ -330,6 +332,8 @@ priv->toggle_size = max_toggle_size; + g_list_free (children); + GTK_WIDGET_CLASS (hildon_desktop_popup_menu_parent_class)->size_request (widget, req); } Modified: projects/haf/trunk/hildon-desktop/libhildonwm/hd-keys.c =================================================================== --- projects/haf/trunk/hildon-desktop/libhildonwm/hd-keys.c 2007-05-23 11:34:46 UTC (rev 11771) +++ projects/haf/trunk/hildon-desktop/libhildonwm/hd-keys.c 2007-05-23 11:43:30 UTC (rev 11772) @@ -166,7 +166,7 @@ hd_keys_launch_application (HDKeysConfig *keys, gpointer *user_data) { - hd_wm_activate_service ("osso-global-search.desktop", NULL); + hd_wm_activate_service ("isearch-applet.desktop", NULL); } static void Modified: projects/haf/trunk/hildon-desktop/src/hd-switcher-menu-item.c =================================================================== --- projects/haf/trunk/hildon-desktop/src/hd-switcher-menu-item.c 2007-05-23 11:34:46 UTC (rev 11771) +++ projects/haf/trunk/hildon-desktop/src/hd-switcher-menu-item.c 2007-05-23 11:43:30 UTC (rev 11772) @@ -129,7 +129,7 @@ HildonDesktopNotificationManager *nm; }; -G_DEFINE_TYPE (HDSwitcherMenuItem, hd_switcher_menu_item, GTK_TYPE_MENU_ITEM); +G_DEFINE_TYPE (HDSwitcherMenuItem, hd_switcher_menu_item, GTK_TYPE_IMAGE_MENU_ITEM); static void hd_switcher_menu_item_finalize (GObject *gobject) @@ -298,7 +298,7 @@ gtk_widget_show (hbox); priv->icon = gtk_image_new (); - gtk_box_pack_start (GTK_BOX (hbox), priv->icon, FALSE, FALSE, 0); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), priv->icon); gtk_widget_show (priv->icon); vbox = gtk_vbox_new (FALSE, 0); Modified: projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c =================================================================== --- projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c 2007-05-23 11:34:46 UTC (rev 11771) +++ projects/haf/trunk/hildon-desktop/src/hd-switcher-menu.c 2007-05-23 11:43:30 UTC (rev 11772) @@ -42,6 +42,7 @@ #include <libhildondesktop/hildon-desktop-popup-window.h> #include <libhildondesktop/hildon-desktop-popup-menu.h> #include <libhildondesktop/hildon-desktop-toggle-button.h> +#include <libhildondesktop/hildon-desktop-panel-window-dialog.h> /* Menu item strings */ #define AS_HOME_ITEM _("tana_fi_home") @@ -84,6 +85,8 @@ #define SWITCHER_TOGGLE_BUTTON GTK_BIN(switcher)->child +#define SWITCHER_DETTACHED_TIMEOUT 5000 + enum { PROP_MENU_NITEMS=1, @@ -118,6 +121,9 @@ GtkTreeIter *last_iter_added; HDEntryInfo *last_urgent_info; + + GtkWidget *window_dialog; + GtkWidget *toggle_button; }; static GObject *hd_switcher_menu_constructor (GType gtype, @@ -167,6 +173,10 @@ static void hd_switcher_menu_item_activated (GtkMenuItem *menuitem, HDSwitcherMenu *switcher); +static void hd_switcher_menu_attach_button (HDSwitcherMenu *switcher); + +static void hd_switcher_menu_dettach_button (HDSwitcherMenu *switcher); + static void hd_switcher_menu_init (HDSwitcherMenu *switcher) { @@ -276,7 +286,7 @@ } else { - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), FALSE); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (switcher->priv->toggle_button), FALSE); GdkWindow *window = gtk_widget_get_parent_window (GTK_WIDGET (switcher)); gtk_widget_grab_focus (GTK_WIDGET (switcher)); @@ -347,9 +357,9 @@ event->keyval == GDK_KP_Right) { gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), TRUE); + (GTK_TOGGLE_BUTTON (switcher->priv->toggle_button), TRUE); - g_signal_emit_by_name (SWITCHER_TOGGLE_BUTTON, "toggled"); + g_signal_emit_by_name (switcher->priv->toggle_button, "toggled"); } return TRUE; @@ -374,7 +384,7 @@ } gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), FALSE); + (GTK_TOGGLE_BUTTON (switcher->priv->toggle_button), FALSE); g_list_free (children); } @@ -399,6 +409,8 @@ button = hildon_desktop_toggle_button_new (); + switcher->priv->toggle_button = button; + gtk_widget_set_name (button, AS_MENU_BUTTON_NAME); gtk_widget_set_size_request (button, -1, AS_MENU_BUTTON_HEIGHT); @@ -611,11 +623,61 @@ hd_switcher_menu_populate_notifications (switcher); hd_switcher_menu_check_content (switcher); + + switcher->priv->window_dialog = NULL; return object; } +static gboolean +hd_switcher_menu_force_move_window (GtkWidget *widget, HDSwitcherMenu *switcher) +{ + gint x,y; + + g_object_get (widget, "x", &x, "y", &y, NULL); + + gdk_window_move (widget->window, x, y); + + return FALSE; +} + static void +hd_switcher_create_external_window (HDSwitcherMenu *switcher) +{ + HildonDesktopPanelWindowOrientation orientation; + GtkWidget *top_level; + + if (switcher->priv->window_dialog) + return; + + top_level = gtk_widget_get_toplevel (GTK_WIDGET (switcher)); + + if (HILDON_DESKTOP_IS_PANEL_WINDOW (top_level)) + g_object_get (top_level, "orientation", &orientation, NULL); + else + orientation = HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_LEFT; + + switcher->priv->window_dialog = + GTK_WIDGET (g_object_new (HILDON_DESKTOP_TYPE_PANEL_WINDOW_DIALOG, + "x", 0, + "y", gdk_screen_height () - AS_BUTTON_HEIGHT*2, + "width", GTK_WIDGET (switcher)->allocation.width, + "height", AS_BUTTON_HEIGHT*2, + "move", TRUE, + "use-old-titlebar", FALSE, + "orientation", orientation, + NULL)); + + gtk_container_remove (GTK_CONTAINER (switcher->priv->window_dialog), + GTK_BIN (switcher->priv->window_dialog)->child); + + g_signal_connect (switcher->priv->window_dialog, + "map-event", + G_CALLBACK (hd_switcher_menu_force_move_window), + (gpointer)switcher); +} + +static void hd_switcher_menu_finalize (GObject *object) { HDSwitcherMenu *switcher = HD_SWITCHER_MENU (object); @@ -624,6 +686,9 @@ gtk_widget_destroy (GTK_WIDGET (switcher->priv->popup_window)); + if (switcher->priv->window_dialog) + gtk_widget_destroy (switcher->priv->window_dialog); + g_object_unref (switcher->priv->icon_theme); G_OBJECT_CLASS (hd_switcher_menu_parent_class)->finalize (object); @@ -653,16 +718,16 @@ if (image_blinking) { - if (GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child == switcher->priv->icon) + if (GTK_BIN (switcher->priv->toggle_button)->child == switcher->priv->icon) { g_object_ref (G_OBJECT (switcher->priv->icon)); - gtk_container_remove (GTK_CONTAINER (SWITCHER_TOGGLE_BUTTON), GTK_WIDGET (switcher->priv->icon)); + gtk_container_remove (GTK_CONTAINER (switcher->priv->toggle_button), GTK_WIDGET (switcher->priv->icon)); } else - gtk_container_remove (GTK_CONTAINER (SWITCHER_TOGGLE_BUTTON), GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child); + gtk_container_remove (GTK_CONTAINER (switcher->priv->toggle_button), GTK_BIN (switcher->priv->toggle_button)->child); } - gtk_container_add (GTK_CONTAINER (SWITCHER_TOGGLE_BUTTON), image_blinking); + gtk_container_add (GTK_CONTAINER (switcher->priv->toggle_button), image_blinking); gtk_widget_show (image_blinking); } } @@ -675,7 +740,7 @@ (switcher->priv->popup_window); gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), FALSE); + (GTK_TOGGLE_BUTTON (switcher->priv->toggle_button), FALSE); } static void @@ -697,12 +762,12 @@ if (state) { gtk_widget_set_name (GTK_WIDGET (switcher), SWITCHER_HIGHLIGHTED_NAME); - gtk_widget_set_name (GTK_BIN (switcher)->child, SWITCHER_HIGHLIGHTED_NAME); + gtk_widget_set_name (switcher->priv->toggle_button, 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); + gtk_widget_set_name (switcher->priv->toggle_button, AS_MENU_BUTTON_NAME); } } @@ -716,25 +781,40 @@ if ((hd_wm_get_applications (switcher->hdwm) != NULL) || children) { - gtk_widget_show (GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child); + gtk_widget_show (GTK_BIN (switcher->priv->toggle_button)->child); if (children) + { + if (GTK_BIN (switcher->priv->toggle_button)->child != switcher->priv->icon) + { + if (switcher->priv->fullscreen) + hd_switcher_menu_dettach_button (switcher); + else + hd_switcher_menu_attach_button (switcher); + } + hd_switcher_menu_update_highlighting (switcher, TRUE); + } else + { hd_switcher_menu_update_highlighting (switcher, FALSE); + } + + if (!switcher->priv->fullscreen) + hd_switcher_menu_attach_button (switcher); } else { hd_switcher_menu_update_highlighting (switcher, FALSE); - gtk_widget_hide (GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child); + gtk_widget_hide (GTK_BIN (switcher->priv->toggle_button)->child); if (switcher->priv->is_open) hildon_desktop_popup_window_popdown (switcher->priv->popup_window); gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), FALSE); + (GTK_TOGGLE_BUTTON (switcher->priv->toggle_button), FALSE); } g_list_free (children); @@ -812,7 +892,14 @@ HildonDesktopPanelWindowOrientation orientation = HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_LEFT; GtkWidget *button = GTK_BIN (switcher)->child; + gboolean dettached = FALSE; + if (!button) + { + button = GTK_BIN (switcher->priv->window_dialog)->child; + dettached = TRUE; + } + if (!GTK_WIDGET_REALIZED (GTK_WIDGET (data))) return; @@ -834,14 +921,19 @@ { case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_LEFT: if (switcher->priv->fullscreen) - *x = 0; + *x = 0; else - *x = workarea.x; - + *x = workarea.x; + if (main_height - button->allocation.y < menu_height) *y = MAX (0, (main_height - menu_height)); else - *y = button->allocation.y; + { + if (!dettached) + *y = button->allocation.y; + else + *y = main_height -menu_height;// button->requisition.height; + } break; case HILDON_DESKTOP_PANEL_WINDOW_ORIENTATION_RIGHT: @@ -882,10 +974,10 @@ static void hd_switcher_menu_toggled_cb (GtkWidget *button, HDSwitcherMenu *switcher) { - if (!GTK_WIDGET_VISIBLE (GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child)) + if (!GTK_WIDGET_VISIBLE (GTK_BIN (switcher->priv->toggle_button)->child)) return; - - if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON))) + + if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (switcher->priv->toggle_button))) { hildon_desktop_popup_window_popdown (switcher->priv->popup_window); return; @@ -907,6 +999,9 @@ hd_switcher_menu_reset_main_icon (switcher); hd_switcher_menu_check_content (switcher); + + if (GTK_BIN (switcher->priv->toggle_button)->child == switcher->priv->icon) + hd_switcher_menu_attach_button (switcher); } static void @@ -929,12 +1024,12 @@ static void hd_switcher_menu_reset_main_icon (HDSwitcherMenu *switcher) { - if (GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child != switcher->priv->icon) + if (GTK_BIN (switcher->priv->toggle_button)->child != switcher->priv->icon) { - gtk_container_remove (GTK_CONTAINER (SWITCHER_TOGGLE_BUTTON), - GTK_BIN (SWITCHER_TOGGLE_BUTTON)->child); + gtk_container_remove (GTK_CONTAINER (switcher->priv->toggle_button), + GTK_BIN (switcher->priv->toggle_button)->child); - gtk_container_add (GTK_CONTAINER (SWITCHER_TOGGLE_BUTTON), + gtk_container_add (GTK_CONTAINER (switcher->priv->toggle_button), GTK_WIDGET (switcher->priv->icon)); g_object_unref (G_OBJECT (switcher->priv->icon)); @@ -1266,21 +1361,76 @@ hd_switcher_menu_show_menu_cb (HDWM *hdwm, HDSwitcherMenu *switcher) { gtk_toggle_button_set_active - (GTK_TOGGLE_BUTTON (SWITCHER_TOGGLE_BUTTON), TRUE); + (GTK_TOGGLE_BUTTON (switcher->priv->toggle_button), TRUE); - g_signal_emit_by_name (SWITCHER_TOGGLE_BUTTON, "toggled"); + g_signal_emit_by_name (switcher->priv->toggle_button, "toggled"); } +static gboolean +hd_switcher_menu_auto_attach (HDSwitcherMenu *switcher) +{ + hd_switcher_menu_attach_button (switcher); + + return FALSE; +} + static void +hd_switcher_menu_dettach_button (HDSwitcherMenu *switcher) +{ + if (SWITCHER_TOGGLE_BUTTON != NULL) + { + gtk_widget_reparent (switcher->priv->toggle_button, switcher->priv->window_dialog); + gtk_widget_show (switcher->priv->toggle_button); + + gtk_widget_show (GTK_WIDGET (switcher->priv->window_dialog)); + + SWITCHER_TOGGLE_BUTTON = NULL; + + g_timeout_add (SWITCHER_DETTACHED_TIMEOUT, + (GSourceFunc)hd_switcher_menu_auto_attach, + (gpointer)switcher); + } +} + +static void +hd_switcher_menu_attach_button (HDSwitcherMenu *switcher) +{ + if (SWITCHER_TOGGLE_BUTTON == NULL) + { + gtk_widget_reparent (switcher->priv->toggle_button, GTK_WIDGET (switcher)); + gtk_widget_show (switcher->priv->toggle_button); + + gtk_widget_hide (switcher->priv->window_dialog); + } +} + +static void hd_switcher_menu_fullscreen_cb (HDWM *hdwm, gboolean fullscreen, HDSwitcherMenu *switcher) { switcher->priv->fullscreen = fullscreen; + + GList *children = + hildon_desktop_popup_menu_get_children (switcher->priv->menu_notifications); + + hd_switcher_create_external_window (switcher); + + if (children) + { + if (fullscreen && GTK_BIN (switcher->priv->toggle_button)->child != switcher->priv->icon) + hd_switcher_menu_dettach_button (switcher); + else + hd_switcher_menu_attach_button (switcher); + + g_list_free (children); + } + + if (!fullscreen) + hd_switcher_menu_attach_button (switcher); } static void hd_switcher_menu_long_press_cb (HDWM *hdwm, HDSwitcherMenu *switcher) { - g_debug ("Heeeeeeeereeee"); if (switcher->priv->is_open) { hildon_desktop_popup_menu_activate_item
- Previous message: [maemo-commits] r11771 - projects/haf/trunk/hildon-fm/debian
- Next message: [maemo-commits] r11773 - in projects/haf/trunk/gtk+: . gdk/x11
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]