[maemo-commits] [maemo-commits] r14079 - in projects/haf/trunk/hildon-desktop: . src
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Tue Sep 25 16:17:00 EEST 2007
- Previous message: [maemo-commits] r14078 - in projects/haf/trunk/hildon-1: . src
- Next message: [maemo-commits] r14080 - in projects/haf/trunk/hildon-desktop: . libhildondesktop
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: jobi Date: 2007-09-25 16:16:59 +0300 (Tue, 25 Sep 2007) New Revision: 14079 Modified: projects/haf/trunk/hildon-desktop/ChangeLog projects/haf/trunk/hildon-desktop/src/hd-app-menu-tree.c Log: 2007-09-25 Johan Bilien <johan.bilien at nokia.com> * src/hd-app-menu-tree.c (hd_app_menu_tree_navigation_row_deleted): - set the cursor in an idle loop rather than directly, to prevent accessing the deleted row's data. Fixes: NB#68961 Modified: projects/haf/trunk/hildon-desktop/ChangeLog =================================================================== --- projects/haf/trunk/hildon-desktop/ChangeLog 2007-09-25 13:16:27 UTC (rev 14078) +++ projects/haf/trunk/hildon-desktop/ChangeLog 2007-09-25 13:16:59 UTC (rev 14079) @@ -1,3 +1,9 @@ +2007-09-25 Johan Bilien <johan.bilien at nokia.com> + + * src/hd-app-menu-tree.c (hd_app_menu_tree_navigation_row_deleted): + - set the cursor in an idle loop rather than directly, to prevent + accessing the deleted row's data. Fixes: NB#68961 + 2007-09-25 Lucas Rocha <lucas.rocha at nokia.com> * src/hd-switcher-menu.c (hd_switcher_menu_clear_item_activated): Modified: projects/haf/trunk/hildon-desktop/src/hd-app-menu-tree.c =================================================================== --- projects/haf/trunk/hildon-desktop/src/hd-app-menu-tree.c 2007-09-25 13:16:27 UTC (rev 14078) +++ projects/haf/trunk/hildon-desktop/src/hd-app-menu-tree.c 2007-09-25 13:16:59 UTC (rev 14079) @@ -50,6 +50,9 @@ GObjectConstructParam *construct_params); static void +hd_app_menu_tree_finalize (GObject *object); + +static void hd_app_menu_tree_set_property (GObject *object, guint property_id, const GValue *value, @@ -112,6 +115,9 @@ GtkTreeSelection *navigation_selection; GtkTreeSelection *content_selection; + + GtkTreePath *cursor_path; + guint set_cursor_idle; }; G_DEFINE_TYPE (HDAppMenuTree, hd_app_menu_tree, GTK_TYPE_HPANED); @@ -136,6 +142,7 @@ object_class->constructor = hd_app_menu_tree_constructor; object_class->set_property = hd_app_menu_tree_set_property; object_class->get_property = hd_app_menu_tree_get_property; + object_class->finalize = hd_app_menu_tree_finalize; pspec = g_param_spec_object ("model", "model", @@ -328,6 +335,24 @@ } static void +hd_app_menu_tree_finalize (GObject *object) +{ + HDAppMenuTreePrivate *priv = HD_APP_MENU_TREE (object)->priv; + + if (priv->set_cursor_idle) + { + g_source_remove (priv->set_cursor_idle); + priv->set_cursor_idle = 0; + } + + if (priv->cursor_path) + { + gtk_tree_path_free (priv->cursor_path); + priv->cursor_path = NULL; + } +} + +static void hd_app_menu_tree_set_property (GObject *object, guint property_id, const GValue *value, @@ -854,19 +879,44 @@ return valid_location; } -static void -hd_app_menu_tree_navigation_row_deleted (HDAppMenuTree *tree, - GtkTreePath *path) +static gboolean +hd_app_menu_tree_navigation_set_cursor (HDAppMenuTree *tree) { + HDAppMenuTreePrivate *priv = tree->priv; - gtk_tree_path_prev (path); gtk_tree_view_set_cursor (GTK_TREE_VIEW (priv->navigation_pane), - path, + priv->cursor_path, NULL, FALSE); + + gtk_tree_path_free (priv->cursor_path); + priv->cursor_path = NULL; + priv->set_cursor_idle = 0; + + return FALSE; } +static void +hd_app_menu_tree_navigation_row_deleted (HDAppMenuTree *tree, + GtkTreePath *path) +{ + HDAppMenuTreePrivate *priv = tree->priv; + + if (priv->cursor_path) + gtk_tree_path_free (priv->cursor_path); + + if (priv->set_cursor_idle) + g_source_remove (priv->set_cursor_idle); + + tree->priv->cursor_path = gtk_tree_path_copy (path); + gtk_tree_path_prev (tree->priv->cursor_path); + + priv->set_cursor_idle = + g_idle_add ((GSourceFunc)hd_app_menu_tree_navigation_set_cursor, + tree); +} + void hd_app_menu_tree_set_model (HDAppMenuTree *tree, GtkTreeModel *model) {
- Previous message: [maemo-commits] r14078 - in projects/haf/trunk/hildon-1: . src
- Next message: [maemo-commits] r14080 - in projects/haf/trunk/hildon-desktop: . libhildondesktop
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]