Hm, that's annoying. I wonder if you could cook up a small example of 
this that we could play around with? Perhaps we can work out what needs 
to change to get this working.

As a workaround in the meantime, I wonder whether prefetching one level 
deeper would work (though I perfectly understand that this could be a 
significant cost).

~d

On 2014-01-24 09:52, Donald Allen wrote:
> I've written a personal finance manager, having become dissatisfied
> with Gnucash after many years of use. My own system, Newcash, is
> written in C/GTK3/Sqlite3 (I will be making it available via github
> when the documentation is ready). In recent months, I've become
> interested in Haskell (I've written a lot of Lisp and Scheme code over
> the years) and I re-wrote the Newcash report generator (originally
> written in Python to process Gnucash's xml file and thus was pretty
> ugly and needed re-writing) in Haskell. Enthusiastic about the
> language and pleased with the performance of the report generator, I
> decided to experiment with re-writing Newcash itself in Haskell, for
> all the reasons that Haskell is to be preferred to C.
> 
> 
> But I've run into a show-stopper. Here's the situation: the Newcash
> initial window displays the tree of accounts. Not wanting to endure
> long startup times (a big issue with Gnucash), I initially want to
> populate the tree model with the root, its children, and its
> grandchildren. The root gets expanded, so the children are visible,
> but the grandchildren are present, so the children are expandable. A
> callback is set up to handle the TreeView's testExpandRow signal,
> indicating that the user has requested expansion of one of the nodes.
> I do this initial setup of the accounts window prior to calling
> mainGUI the first time. This all works fine.
> 
> 
> The trouble starts if I try to expand one of the root's children by
> clicking it. The root's grandchildren are already present, but
> callback attached to the testExpandRow needs to add the grandchildren
> of the clicked node, so that if it has children, it will appear
> expandable. The callback receives both an iter and a path to the
> clicked node. It uses the path in a loop that adds the grandchildren
> of the clicked node to the TreeStore. This succeeds, but when the
> callback returns, I get an error message:
> 
> 
> ** (Newcash:920): CRITICAL **: gtk2hs_store_iter_has_child: assertion
> 'iter->stamp == store->stamp' failed
> 
> and the display fails to refresh, with the clicked node expanded. If I
> click the same node again, it expands correctly (the grandchildren are
> already present, courtesy of the response to the previous click).
> 
> I'm guessing that the iter being passed to the callback (which I don't
> use; as mentioned before, the insertion of the grandchildren is done
> using the path derived from the path of the clicked node, using
> treeStoreInsert) has a time-stamp as of the time the first
> testExpandRow signal was issued. In response to that signal, I add
> some nodes to the store. I'm guessing that doing so updates the
> time-stamp on the store and that the two time-stamps are compared upon
> return from signal processing, and they are no longer equal. The
> second click does nothing to the store (my callback is smart enough to
> know that a node has already been processed and doesn't add its
> grandchildren twice), so the second time the node is clicked, the
> time-stamp comparison works.
> 
> ------------------------------------------------------------------------------
> CenturyLink Cloud: The Leader in Enterprise Cloud Services.
> Learn Why More Businesses Are Choosing CenturyLink Cloud For
> Critical Workloads, Development Environments & Everything In Between.
> Get a Quote or Start a Free Trial Today.
> http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
> _______________________________________________
> Gtk2hs-devel mailing list
> Gtk2hs-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel

------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
Gtk2hs-devel mailing list
Gtk2hs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gtk2hs-devel

Reply via email to