[Dev] Re: Bug 4269 and detail view notifications, again
John Anderson
john at osafoundation.org
Tue Nov 1 15:00:18 PST 2005
Katie Capps Parlante wrote:
> I said: take the discussion to the list, because Bryan's writeup is
> informative and the ensuing conversation will help me get more
> information to make a good judement. ;)
>
> It sounds like per item notification is something we should do in the
> long term -- at least in 0.7.
>
> I'm taking Ted's comment seriously that tweaking this in 0.6 is a bit
> risky. Ted: is that just a guess at this point? Is it worth going down
> the path of implementing it to see if it really pans out as risky?
> Could we allocate real time to functional tests to mitigate the risk?
>
> I'm also interested in whether or not we know that the current monitor
> implementation is impacting performance as suspected. Is this showing
> up in any of our performance use cases?
My understanding is that monitors alone won't work because they won't
notify you of changes that come in as changes from other repository views.
>
> Cheers,
> Katie
>
> John Anderson wrote:
>
>> Hi Ted:
>>
>> When we talked about this awhile ago I suggested you ask Katie her
>> opinion on where to fit it in the schedule. Do you remember what she
>> said? I can think of a bunch of cases where it would be really handy
>> to get notifications on items.
>>
>> John
>>
>> Ted Leung wrote:
>>
>>>
>>> On Nov 1, 2005, at 12:59 PM, Bryan Stearns wrote:
>>>
>>>> (Ted & Katie suggested we move this discussion to the dev list...)
>>>>
>>>> Hi Ted,
>>>>
>>>> Sorry, I'd forgotten about this, and I'm not sure what to try to
>>>> do for 0.6. Here's the history (by typing this out, I'm hoping
>>>> I'll cover all the issues!):
>>>>
>>>> The detail view needs to get updated when something affecting its
>>>> current display changes elsewhere, including these use cases:
>>>> A. The user edits the item title in the summary view
>>>> B. The user drags the item to a different date/time in the
>>>> calendar view
>>>> C. The user drags the item and drops it onto a different sidebar
>>>> collection
>>>> D. The user dismisses a reminder on an item; the "alarm" popup
>>>> should change to "None".
>>>> E. While viewing an item that's shared, the user does Sync All,
>>>> and receives a new version of the item with some of the
>>>> attributes changed.
>>>> F. While viewing the second instance of a recurring event, the
>>>> user changes the "occurs" popup back to "once", whereupon the
>>>> viewed instance no longer exists.
>>>>
>>>> It used to use a private collection, into which it would put the
>>>> item being displayed. This was good in that the DV found out about
>>>> all the cases, but John didn't like the extra collection, and I
>>>> didn't like that the notification was pretty coarse (any change
>>>> resulted in one notification, which caused us walk the DV block
>>>> tree, reload all the attribute editors, and relayout the sizers in
>>>> case anyone's visibility changed). Also, these notifications were
>>>> asynchronous, meaning I couldn't ignore the notifications caused
>>>> by the DV's own changes to the attributes of the displayed item:
>>>> any change caused the DV to reload itself entirely.
>>>>
>>>> Earlier in 0.6, I switched to per-attribute repository Monitors,
>>>> and that's the way things are now: at Block.render time, each
>>>> attribute editor block queries the content model to find out what
>>>> 'real' attributes affect its presentation and/or visibility (for
>>>> instance, the end-time editor is affected by 'startTime',
>>>> 'duration', 'allDay', and 'anyTime'), and creates a monitor on
>>>> that attribute. at wxDestroyWindow time (the converse of render),
>>>> it discards the monitor.
>>>>
>>>> This gave me notifications that were (a) synchronous and (b)
>>>> attribute-specific. However (and I didn't realize this at the
>>>> time), monitors don't fire when a change is "refreshed" into this
>>>> repository view from another view -- this broke use case E. Also,
>>>> the monitor doesn't fire when the entire item is deleted, breaking
>>>> use case F. Also also, Andi doesn't like this use of monitors for
>>>> performance reasons (nor do I: they call me anytime an attribute
>>>> with the given name changes, and my handler needs to filter out
>>>> notifications on items other than mine, which seems wasteful).
>>>>
>>>> In the meantime, John developed a clever way to make asynchronous
>>>> notifications happen synchronously, by making attribute changes
>>>> this way (from a particular block that wants to ignore its own
>>>> notifications):
>>>> - Deliver all pending notifications
>>>> - Increment a counter that, if non-zero, will cause my block's
>>>> notification handler to do nothing when it gets called
>>>> - Make the attribute change
>>>> - Deliver all pending notifications (the counter will cause my
>>>> block's notifications to be ignored, but other blocks will get
>>>> theirs, which is good)
>>>> - Decrement the counter.
>>>>
>>>> Since cases E and F are currently broken, I'm faced with
>>>> revisiting this whole notification thing. I don't have a new
>>>> strategy that covers everything, though.
>>>> When I discuss it with John, he says you should make the
>>>> collection- notification mechanism work for individual items, but I
>>>> don't know how much work that is, and I'm not sure how to use it
>>>> to get per- attribute notifications (since we still don't want to
>>>> reload the entire detail view whenever a single attribute changes).
>>>
>>>
>>>
>>>
>>> In principle I'm not opposed to having notifications for individual
>>> items. It's not there because we never talked about this as a
>>> possible use case. I have some ideas about how to make this work,
>>> but I am concerned about trying to implement them for 0.6.
>>> Making this work is likely going to require rearranging the guts
>>> of notification, which may have impacts on other parts of the
>>> system. Since we are testing the UI by hand, it might be some
>>> time before we could find any subtle bugs introduced by changes at
>>> this late a date. I also believe that I know how to make the
>>> changes to allow notifications to tell what attribute(s) of an item
>>> have changed instead of just that the entire item has changed.
>>>
>>>>
>>>> Nor whether I'll get the notification on item deletion for use
>>>> case F... but another solution for that might be for the detail
>>>> view's trunk parent block -- the block above the DV in the block
>>>> hierarchy, which has the responsibility for deciding what detail
>>>> view tree-of-blocks to hang underneath itself -- to take on the
>>>> responsibility for handling the case where the displayed item is
>>>> deleted. It might be able to do this by monitoring the collection
>>>> of all items of the displayed item's Kind (does such a collection
>>>> exist?) - when a change notification on that fires, it could see
>>>> if the selected item was deleted, and if so, switch to the None
>>>> view. (It's possible, though, that Mimi would find this jarring;
>>>> I haven't asked what the desired behavior is here.)
>>>>
>>>> So, in summary: I don't know what I need, or whether item
>>>> notifications will solve all my problems. What do you think, after
>>>> reading all this?
>>>
>>>
>>>
>>>
>>> In my mind it all comes down to how much risk we are willing to
>>> take for 0.6. Trying a private collection, while ugly is likely to
>>> have fewer effects on the entire system. If that doesn't work,
>>> then we'd have to implement per item notification, and hope that we
>>> don't introduce any subtle bugs. In the long term, per item
>>> notification is something that we should probably do. Also long
>>> term, we really need to increase our functional/GUI test coverage
>>> so that we can have more confidence to make these kinds of
>>> changes. More on that in another post.
>>>
>>> ----
>>> Ted Leung Open Source Applications Foundation (OSAF)
>>> PGP Fingerprint: 1003 7870 251F FA71 A59A CEE3 BEBA 2B87 F5FC 4B42
>>>
>>>
>>> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>>>
>>> Open Source Applications Foundation "Dev" mailing list
>>> http://lists.osafoundation.org/mailman/listinfo/dev
>>
>>
>>
>> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>>
>> Open Source Applications Foundation "Dev" mailing list
>> http://lists.osafoundation.org/mailman/listinfo/dev
>
>
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> Open Source Applications Foundation "Dev" mailing list
> http://lists.osafoundation.org/mailman/listinfo/dev
More information about the Dev
mailing list