W dniu 12 marca 2012 17:58 użytkownik Krzesimir Nowak <[email protected]>napisał:
> 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. > > Thank you so much! Now everything works well. :)
_______________________________________________ gtkmm-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/gtkmm-list
