On Sun, 10 Aug 2008, Frank Niessink wrote:

> Hi,
>
> 2008/8/10 Frank Niessink <[EMAIL PROTECTED]>:
>
>> Yeah, I noticed it too. It's probably the EffortViewerColumnPopupMenu
>> that's reconstructed on every wx.EVT_UI_UPDATE (basically every time
>> you open a menu, hover over a button, etc.). From this comment (which
>> is yours I think?):
>>
>>    # Since the aggregation can change in the viewer's lifetime and
>>    # the UICommands depend on it, this is getColumnUICommands instead
>>    # of createColumnUICommands.
>>
>> I conclude we do need to cache the ColumnUICommands. I'm working on it.
>
> I was warm, but not exactly right. It was this code in menu.py that
> was executing too often:
>
> class DynamicMenuThatGetsUICommandsFromViewer(DynamicMenu):
>    ...
>    def updateMenuItems(self):
>        newCommands = self.getUICommands()
>        if newCommands != self._uiCommands:
>            self.clearMenu()
>            self.fillMenu(newCommands)
>            self._uiCommands = newCommands
>
> It turned out the newCommands was never equal to self._uiCommands,
> since EffortViewer.getUICommands would create a new list every time it
> was called. I added a __eq__ method to the UICommand class so that two
> UICommands compare equal if they have the same menuText attribute.

Seems much better. I guess the Compiz thing was just making the 
problem more visible (this thing uses too much resources, but I can't 
live without it any more)...

Cheers
Jérôme

Reply via email to