[Sugar-devel] How to have "CellRenderer.props" take effect, without a UI refresh?

Ajay Garg ajay at activitycentral.com
Mon Aug 6 05:45:33 EDT 2012


Hi all.

The issue has been solved !! :)

The patch link ::
http://git.sugarlabs.org/dextrose/mainline/commit/381e706de7e7309d27a44ed064794a44d50aad4a


Thanks for everyone's help.


Thanks and Regards,
Ajay


On Wed, Aug 1, 2012 at 1:33 PM, Ajay Garg <ajay at activitycentral.com> wrote:

> Thanks Sascha and Flavio.
>
>
> a)
> I modified the code to ::
>
>
>
> ####################################################################################
>     def __favorite_set_data_cb(self, column, cell, tree_model, tree_iter):
>         favorite = tree_model[tree_iter][ListModel.COLUMN_FAVORITE]
>
>         if favorite:
>             client = gconf.client_get_default()
>             color = XoColor(client.get_string('/desktop/sugar/user/color'))
>             cell.props.xo_color = color
>         else:
>             cell.props.xo_color = None
>
>
> <VAR>.get_property('window').invalidate_rect(<VAR>.get_allocation(), False)
>         <VAR>.get_property('window').process_updates(True)
>
> ####################################################################################
>
> where I tried with values of <VAR> to ::
>
>                           *  self
>                           *  self.tree_view
>
> However, it made no difference.
>
>
>
>
> b)
> I modified the code to ::
>
>
>
> ####################################################################################
>     def __favorite_set_data_cb(self, column, cell, tree_model, tree_iter):
>         favorite = tree_model[tree_iter][ListModel.COLUMN_FAVORITE]
>
>         if favorite:
>             client = gconf.client_get_default()
>             color = XoColor(client.get_string('/desktop/sugar/user/color'))
>             cell.props.xo_color = color
>         else:
>             cell.props.xo_color = None
>
>
> <VAR>.get_property('window').invalidate_rect(<VAR>.get_allocation(), True)
>         <VAR>.get_property('window').process_updates(True)
>
> ####################################################################################
>
> where I tried with values of <VAR> to ::
>
>                           *  self
>                           *  self.tree_view
>
> However, it caused an infinite recursive loop, and the journal never
> loaded.
>
>
>
>
> c)
> I modified the code to ::
>
>
>
> ####################################################################################
>     def __favorite_set_data_cb(self, column, cell, tree_model, tree_iter):
>         favorite = tree_model[tree_iter][ListModel.COLUMN_FAVORITE]
>
>         if favorite:
>             client = gconf.client_get_default()
>             color = XoColor(client.get_string('/desktop/sugar/user/color'))
>             cell.props.xo_color = color
>         else:
>             cell.props.xo_color = None
>
>
> <VAR>.get_property('window').invalidate_rect(<VAR>.get_allocation(), False)
>         <VAR>.get_property('window').process_updates(True)
>
> ####################################################################################
>
> where I tried with values of <VAR> to ::
>
>                           *  column
>                           *  cell
>
> However, it caused the following traceback ::
>
> Traceback (most recent call last):
>   File
> "/home/ajay/sugar-jhbuild-dx3/install/lib/python2.7/site-packages/jarabe/journal/listview.py",
> line 329, in __favorite_set_data_cb
>     column.get_property('window').invalidate_rect(column.get_allocation(),
> False)
> TypeError: object of type `GtkTreeViewColumn' does not have property
> `window'
>
>
>
>
> d)
> I modified the code to ::
>
>
>
> ####################################################################################
>     def __favorite_set_data_cb(self, column, cell, tree_model, tree_iter):
>         favorite = tree_model[tree_iter][ListModel.COLUMN_FAVORITE]
>
>         if favorite:
>             client = gconf.client_get_default()
>             color = XoColor(client.get_string('/desktop/sugar/user/color'))
>             cell.props.xo_color = color
>         else:
>             cell.props.xo_color = None
>
>
> <VAR>.get_property('window').invalidate_rect(<VAR>.get_allocation(), True)
>         <VAR>.get_property('window').process_updates(True)
>
> ####################################################################################
>
> where I tried with values of <VAR> to ::
>
>                           *  column
>                           *  cell
>
> Same as before - it caused the following traceback ::
>
> Traceback (most recent call last):
>   File
> "/home/ajay/sugar-jhbuild-dx3/install/lib/python2.7/site-packages/jarabe/journal/listview.py",
> line 329, in __favorite_set_data_cb
>     column.get_property('window').invalidate_rect(column.get_allocation(),
> False)
> TypeError: object of type `GtkTreeViewColumn' does not have property
> `window'
>
>
>
> :-\
>
>
>
> Regards,
> Ajay
>
>
>
>
>
> On Tue, Jul 31, 2012 at 7:07 AM, Flavio Danesse <fdanesse at gmail.com>wrote:
>
>> self.get_property('window').invalidate_rect(self.get_allocation(), True)
>> self.get_property('window').process_updates(True)
>>
>>
>>
>>
>> 2012/7/30 Sascha Silbe <silbe at activitycentral.com>
>>
>>>  Ajay Garg <ajay at activitycentral.com> writes:
>>>
>>> >> [adding short-circuit logic to
>>> >> jarabe.journal.listview.BaseListView.refresh()]
>>> [...]
>>> >> What we should do is enhancing the logic to
>>> >>
>>> >> a) just redraw instead of querying the back-end again for changes we
>>> >>    triggered ourselves and / or
>>> >> b) update our model based on the change notifications rather than
>>> >>    throwing away our state.
>>> >>
>>> >
>>> > Well, that's exactly what I did, via the patch
>>> >
>>> http://git.sugarlabs.org/dextrose/mainline/commit/ad3897946e013f1ff4020aeab35375ccb122758b
>>>
>>> Not really AFAICT. You're still inhibiting the refresh completely,
>>> without doing a redraw. You're also doing a gratuitous data store query
>>> for each favourite star. I'm expecting that to have considerable impact
>>> on performance.
>>>
>>>
>>> > I guess, if we could somehow cause the mouse to PROGRAMMATICALLY
>>> > hover-away/disappear-momentarily when the star/favorite-icon is
>>> clicked, we
>>> > could be done.
>>> > However, I am not able to find a way to do this via pygtk.
>>>
>>> Fortunately. :-P
>>>
>>> As discussed on IRC, the way to _trigger_ _a_ _redraw_ (not: move the
>>> pointer) is something like this:
>>>
>>>     x_, y_, width, height = self.allocation
>>>     area = (0, 0, width, height)
>>>     self.window.invalidate_rect(area, False)
>>>
>>>
>>> Sascha
>>> --
>>> http://sascha.silbe.org/
>>> http://www.infra-silbe.de/
>>>
>>> _______________________________________________
>>> Sugar-devel mailing list
>>> Sugar-devel at lists.sugarlabs.org
>>> http://lists.sugarlabs.org/listinfo/sugar-devel
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sugarlabs.org/archive/sugar-devel/attachments/20120806/8f3a7d10/attachment.html>


More information about the Sugar-devel mailing list