Login
[x]
Log in using an account from:
Fedora Account System
Red Hat Associate
Red Hat Customer
Or login using a Red Hat Bugzilla account
Forgot Password
Login:
Hide Forgot
Create an Account
Red Hat Bugzilla – Attachment 881391 Details for
Bug 1082543
[abrt] rhythmbox: gtk_menu_tracker_model_changed(): rhythmbox killed by SIGSEGV
[?]
New
Simple Search
Advanced Search
My Links
Browse
Requests
Reports
Current State
Search
Tabular reports
Graphical reports
Duplicates
Other Reports
User Changes
Plotly Reports
Bug Status
Bug Severity
Non-Defaults
|
Product Dashboard
Help
Page Help!
Bug Writing Guidelines
What's new
Browser Support Policy
5.0.4.rh83 Release notes
FAQ
Guides index
User guide
Web Services
Contact
Legal
This site requires JavaScript to be enabled to function correctly, please enable it.
[patch]
Patch to reverse offending commit
reverse_git_commit_2b7b0535bc638c109d88fe3bbaa5cfeed4a459dc.patch (text/plain), 11.30 KB, created by
Phil Wyett
on 2014-04-01 15:28:51 UTC
(
hide
)
Description:
Patch to reverse offending commit
Filename:
MIME Type:
Creator:
Phil Wyett
Created:
2014-04-01 15:28:51 UTC
Size:
11.30 KB
patch
obsolete
>diff -ur ../rhythmbox-3.0.2.orig/sources/rb-display-page-menu.c ./sources/rb-display-page-menu.c >--- ../rhythmbox-3.0.2.orig/sources/rb-display-page-menu.c 2014-03-12 13:16:25.000000000 +0000 >+++ ./sources/rb-display-page-menu.c 2014-04-01 14:53:22.749104000 +0100 >@@ -38,7 +38,6 @@ > struct _RBDisplayPageMenuPrivate > { > RBDisplayPageModel *model; >- GtkTreeModel *real_model; > RBDisplayPage *root_page; > GType page_type; > char *action; >@@ -69,27 +68,16 @@ > { > GtkTreeIter parent; > >- if (rb_display_page_model_find_page_full (menu->priv->model, menu->priv->root_page, &parent) == FALSE) >+ if (rb_display_page_model_find_page (menu->priv->model, menu->priv->root_page, &parent) == FALSE) > return FALSE; > >- if (gtk_tree_model_iter_children (menu->priv->real_model, iter, &parent) == FALSE) { >+ if (gtk_tree_model_iter_children (GTK_TREE_MODEL (menu->priv->model), iter, &parent) == FALSE) { > return FALSE; > } > > return TRUE; > } > >-static GtkTreePath * >-get_root_path (RBDisplayPageMenu *menu) >-{ >- GtkTreeIter iter; >- >- if (rb_display_page_model_find_page_full (menu->priv->model, menu->priv->root_page, &iter) == FALSE) >- return NULL; >- >- return gtk_tree_model_get_path (menu->priv->real_model, &iter); >-} >- > static gboolean > consider_page (RBDisplayPageMenu *menu, RBDisplayPage *page) > { >@@ -115,7 +103,7 @@ > RBDisplayPage *page; > gboolean counted; > >- gtk_tree_model_get (menu->priv->real_model, >+ gtk_tree_model_get (GTK_TREE_MODEL (menu->priv->model), > iter, > RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page, > -1); >@@ -128,37 +116,35 @@ > } > > g_object_unref (page); >- } while (gtk_tree_model_iter_next (menu->priv->real_model, iter)); >+ } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (menu->priv->model), iter)); > > return NULL; > } > > static int >-count_items (RBDisplayPageMenu *menu, int upto) >+count_items (RBDisplayPageMenu *menu) > { > GtkTreeIter iter; > int i; >- int c; > >- if (get_page_iter (menu, &iter) == FALSE) { >+ if (get_page_iter (menu, &iter) == FALSE) > return 0; >- } > > i = 0; >- c = 0; > do { > RBDisplayPage *page; >- gtk_tree_model_get (menu->priv->real_model, >+ gboolean counted; >+ >+ gtk_tree_model_get (GTK_TREE_MODEL (menu->priv->model), > &iter, > RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page, > -1); > >- if (consider_page (menu, page)) { >- i++; >- } >+ counted = consider_page (menu, page); > g_object_unref (page); >- c++; >- } while ((c < upto) && gtk_tree_model_iter_next (menu->priv->real_model, &iter)); >+ if (counted) >+ i++; >+ } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (menu->priv->model), &iter)); > > return i; > } >@@ -189,7 +175,7 @@ > page = get_page_at_index (menu, item_index, &iter); > if (page != NULL) { > char *name; >- char *ptr; >+ char *path; > GVariant *v; > > g_object_get (page, "name", &name, NULL); >@@ -199,12 +185,11 @@ > > g_hash_table_insert (*attrs, g_strdup ("action"), g_variant_new_string (menu->priv->action)); > >- ptr = g_strdup_printf ("%p", page); >- v = g_variant_new_string (ptr); >+ path = gtk_tree_model_get_string_from_iter (GTK_TREE_MODEL (menu->priv->model), &iter); >+ /* this is a bit awkward.. */ >+ v = g_variant_new_string (path); > g_hash_table_insert (*attrs, g_strdup ("target"), g_variant_ref_sink (v)); >- g_free (ptr); >- >- g_object_unref (page); >+ g_free (path); > } else { > rb_debug ("no page at %d", item_index); > } >@@ -217,127 +202,38 @@ > *links = g_hash_table_new (g_str_hash, g_str_equal); > } > >-static int >-path_menu_index (RBDisplayPageMenu *menu, GtkTreePath *path) >-{ >- GtkTreePath *root; >- GtkTreePath *compare; >- int depth; >- int *indices; >- int index; >- >- compare = gtk_tree_path_copy (path); >- if (gtk_tree_path_up (compare) == FALSE) { >- gtk_tree_path_free (compare); >- return -1; >- } >- >- if (gtk_tree_path_get_depth (compare) == 0) { >- gtk_tree_path_free (compare); >- return -1; >- } >- >- root = get_root_path (menu); >- if (root == NULL) { >- gtk_tree_path_free (compare); >- return -1; >- } >- >- if (gtk_tree_path_compare (compare, root) != 0) { >- gtk_tree_path_free (root); >- gtk_tree_path_free (compare); >- return -1; >- } >- >- indices = gtk_tree_path_get_indices_with_depth (path, &depth); >- index = count_items (menu, indices[depth-1]); >- gtk_tree_path_free (root); >- gtk_tree_path_free (compare); >- return index; >-} >- > static void > rebuild_menu (RBDisplayPageMenu *menu) > { > int oldnum; > oldnum = menu->priv->item_count; >- menu->priv->item_count = count_items (menu, G_MAXINT); >+ menu->priv->item_count = count_items (menu); > rb_debug ("building menu, %d => %d items", oldnum, menu->priv->item_count); > g_menu_model_items_changed (G_MENU_MODEL (menu), 0, oldnum, menu->priv->item_count); > } > >-static gboolean >-consider_page_iter (RBDisplayPageMenu *menu, GtkTreeIter *iter) >-{ >- RBDisplayPage *page; >- gboolean result; >- >- gtk_tree_model_get (menu->priv->real_model, >- iter, >- RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page, >- -1); >- if (page == NULL) >- return FALSE; >- >- result = consider_page (menu, page); >- g_object_unref (page); >- return result; >-} >- > static void > row_changed_cb (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, RBDisplayPageMenu *menu) > { >- int index; >- >- if (consider_page_iter (menu, iter) == FALSE) { >- return; >- } >- >- index = path_menu_index (menu, path); >- if (index != -1) { >- g_menu_model_items_changed (G_MENU_MODEL (menu), index, 1, 1); >- } >+ rebuild_menu (menu); > } > > static void > row_inserted_cb (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, RBDisplayPageMenu *menu) > { >- int index; >- >- if (consider_page_iter (menu, iter) == FALSE) { >- return; >- } >- >- index = path_menu_index (menu, path); >- if (index != -1) { >- menu->priv->item_count++; >- g_menu_model_items_changed (G_MENU_MODEL (menu), index, 0, 1); >- } >+ rebuild_menu (menu); > } > > static void > row_deleted_cb (GtkTreeModel *model, GtkTreePath *path, RBDisplayPageMenu *menu) > { >- int index = path_menu_index (menu, path); >- if (index != -1) { >- if (count_items (menu, G_MAXINT) != menu->priv->item_count) { >- menu->priv->item_count--; >- g_menu_model_items_changed (G_MENU_MODEL (menu), index, 1, 0); >- } >- } >+ rebuild_menu (menu); > } > > static void > rows_reordered_cb (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer new_order, RBDisplayPageMenu *menu) > { >- GtkTreePath *root; >- root = get_root_path (menu); >- if (root != NULL) { >- if (gtk_tree_path_compare (path, root) == 0) >- rebuild_menu (menu); >- >- gtk_tree_path_free (root); >- } >+ rebuild_menu (menu); > } > > >@@ -358,13 +254,11 @@ > RBDisplayPageMenu *menu; > > menu = RB_DISPLAY_PAGE_MENU (object); >- >- if (menu->priv->real_model) { >- g_signal_handlers_disconnect_by_data (menu->priv->real_model, menu); >- menu->priv->real_model = NULL; >+ if (menu->priv->model) { >+ g_signal_handlers_disconnect_by_data (menu->priv->model, menu); >+ g_clear_object (&menu->priv->model); > } > >- g_clear_object (&menu->priv->model); > g_clear_object (&menu->priv->root_page); > > G_OBJECT_CLASS (rb_display_page_menu_parent_class)->dispose (object); >@@ -374,15 +268,17 @@ > impl_constructed (GObject *object) > { > RBDisplayPageMenu *menu; >+ GtkTreeModel *real_model; > > RB_CHAIN_GOBJECT_METHOD (rb_display_page_menu_parent_class, constructed, object); > > menu = RB_DISPLAY_PAGE_MENU (object); > >- g_signal_connect (menu->priv->real_model, "row-inserted", G_CALLBACK (row_inserted_cb), menu); >- g_signal_connect (menu->priv->real_model, "row-deleted", G_CALLBACK (row_deleted_cb), menu); >- g_signal_connect (menu->priv->real_model, "row-changed", G_CALLBACK (row_changed_cb), menu); >- g_signal_connect (menu->priv->real_model, "rows-reordered", G_CALLBACK (rows_reordered_cb), menu); >+ real_model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (menu->priv->model)); >+ g_signal_connect (real_model, "row-inserted", G_CALLBACK (row_inserted_cb), menu); >+ g_signal_connect (real_model, "row-deleted", G_CALLBACK (row_deleted_cb), menu); >+ g_signal_connect (real_model, "row-changed", G_CALLBACK (row_changed_cb), menu); >+ g_signal_connect (real_model, "rows-reordered", G_CALLBACK (rows_reordered_cb), menu); > > rebuild_menu (menu); > } >@@ -419,7 +315,6 @@ > switch (prop_id) { > case PROP_MODEL: > menu->priv->model = g_value_get_object (value); >- menu->priv->real_model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (menu->priv->model)); > break; > case PROP_ROOT_PAGE: > menu->priv->root_page = g_value_get_object (value); >@@ -541,7 +436,7 @@ > rb_display_page_menu_get_page (RBDisplayPageModel *model, GVariant *parameters) > { > GtkTreeIter iter; >- void *ptr; >+ RBDisplayPage *page; > > if (g_variant_is_of_type (parameters, G_VARIANT_TYPE_STRING) == FALSE) { > rb_debug ("can't find page, variant type is %s", g_variant_get_type_string (parameters)); >@@ -550,15 +445,15 @@ > > rb_debug ("trying to find page for %s", g_variant_get_string (parameters, NULL)); > >- if (sscanf (g_variant_get_string (parameters, NULL), "%p", &ptr) != 1) { >- rb_debug ("can't parse parameter"); >+ if (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (model), >+ &iter, >+ g_variant_get_string (parameters, NULL)) == FALSE) { > return NULL; > } > >- if (rb_display_page_model_find_page_full (model, ptr, &iter) == FALSE) { >- rb_debug ("can't find page matching %p", ptr); >- return NULL; >- } >- >- return RB_DISPLAY_PAGE (ptr); >+ gtk_tree_model_get (GTK_TREE_MODEL (model), >+ &iter, >+ RB_DISPLAY_PAGE_MODEL_COLUMN_PAGE, &page, >+ -1); >+ return page; > } >diff -ur ../rhythmbox-3.0.2.orig/sources/rb-display-page-model.c ./sources/rb-display-page-model.c >--- ../rhythmbox-3.0.2.orig/sources/rb-display-page-model.c 2014-03-12 13:16:25.000000000 +0000 >+++ ./sources/rb-display-page-model.c 2014-04-01 14:53:40.039876000 +0100 >@@ -750,37 +750,6 @@ > } > } > >-/** >- * rb_display_page_model_find_page_full: >- * @page_model: the #RBDisplayPageModel >- * @page: the #RBDisplayPage to find >- * @iter: returns a #GtkTreeIter for the page >- * >- * Finds a #GtkTreeIter for a specified page in the model. This function >- * searches the full page model, so it will find pages that are not currently >- * visible, and the returned iterator can only be used with the child model >- * (see #gtk_tree_model_filter_get_model). >- * >- * Return value: %TRUE if the page was found >- */ >-gboolean >-rb_display_page_model_find_page_full (RBDisplayPageModel *page_model, RBDisplayPage *page, GtkTreeIter *iter) >-{ >- GtkTreeModel *model; >- DisplayPageIter dpi = {0, }; >- dpi.page = page; >- >- model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (page_model)); >- >- gtk_tree_model_foreach (model, (GtkTreeModelForeachFunc) match_page_to_iter, &dpi); >- if (dpi.found) { >- *iter = dpi.iter; >- return TRUE; >- } else { >- return FALSE; >- } >-} >- > static gboolean > set_playing_flag (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, RBDisplayPage *source) > { >diff -ur ../rhythmbox-3.0.2.orig/sources/rb-display-page-model.h ./sources/rb-display-page-model.h >--- ../rhythmbox-3.0.2.orig/sources/rb-display-page-model.h 2014-03-12 13:16:25.000000000 +0000 >+++ ./sources/rb-display-page-model.h 2014-04-01 14:53:33.045968000 +0100 >@@ -87,9 +87,6 @@ > gboolean rb_display_page_model_find_page (RBDisplayPageModel *page_model, > RBDisplayPage *page, > GtkTreeIter *iter); >-gboolean rb_display_page_model_find_page_full (RBDisplayPageModel *page_model, >- RBDisplayPage *page, >- GtkTreeIter *iter); > > void rb_display_page_model_set_dnd_targets (RBDisplayPageModel *page_model, > GtkTreeView *treeview);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 1082543
:
880640
|
880641
|
880642
|
880643
|
880644
|
880645
|
880646
|
880647
|
880648
|
880649
|
880650
| 881391 |
882396