W dniu 12 marca 2012 16:55 użytkownik Krzesimir Nowak <[email protected]> napisał: > W dniu 12 marca 2012 16:14 użytkownik Łukasz Gąsiorek > <[email protected]> napisał: >> Hi! >> Code is here http://pastie.org/3578062 >> Look at the lines 80, 81, 82 and 93. >> When I swap lines 81 and 82 app works. What is wrong? > > I do wonder if declaring m_cols as 'const Columns' in ContactList is > not messing some things up. I mean - it probably should be non-const, > because referring to members of const instance makes the members also > const, that is - they are of type e.g. 'const > Gtk::TreeModelColumn<Glib::ustring>' instead of > 'Gtk::TreeModelColumn<Glib::ustring>'. And this probably doing > something weird in line with 'row[m_cols.contact] = contact;' where > operator[] of row is some kind of templated function. > > This is a wild guess I made after reading the code - I did not try to > compile it. I suppose that compiling with warning flags (like -Wall > and -Wextra) gives no clues, eh? >
Ok, do not read this obviously morose speculations above. The reason the code works in that way is because everytime you set a column, the model is sorted. So first invocation of add_contact succeeds, because there is nothing to be sorted. Then second call comes and you are setting alias first - that causes some signals to be emitted and in effect the model is sorted (sort function is already set). And that aborts, because the contact column in second row is not being set, so it holds an empty shared pointer. In short - the assertion here is wrong. Empty shared_ptr should be handled gracefully. When the contact column is set then it will be sorted again, this time correctly. Also, I would move 'm_tree_store->set_sort_column(m_cols.alias, Gtk::SORT_ASCENDING);' into ContactList constructor - you do not need to call it everytime. >> Thanks >> >> >> _______________________________________________ >> gtkmm-list mailing list >> [email protected] >> http://mail.gnome.org/mailman/listinfo/gtkmm-list >> _______________________________________________ gtkmm-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gtkmm-list
