[Sugar-devel] [DESIGN] Re: [PATCH] fix OLPC #10488 - Color chooser does not always work when giving color to selected text

Simon Schampijer simon at schampijer.de
Mon Dec 6 05:28:22 EST 2010

Hi Gonzalo,

so the issue is the following:

We do only set the color when the palette is popped down. This does 
break the following case:

- select text you want to change the color of
- open the color chooser and change the color
- do click anywhere in the canvas (not the selected text) and don't wait 
for the palette to popdown

---> The text is not selected anymore when the palette pops down, hence 
the new color will not be applied.

I think the reason why Benjamin decided to set the color when the 
palette is closed is that when you would emit a color change on each 
change in the selector using the sliders would end up in a lot of 
signaling. That is why color selectors either have a fixed set of colors 
the user can select from or the custom selector with sliders is a dialog 
(ok, cancel) and therefore it is known when the user has made his decision.

How to move forward now with this? We could make at list the selector 
field emit the change directly. For the "slidered color selector", I am 
not sure. All the ideas I had did have possible races. Maybe we can live 
with the overhead of signaling and just make send it updates? Other ideas?


On 12/02/2010 03:27 PM, Gonzalo Odiard wrote:
> Emit signal at color change
> ---
>   src/sugar/graphics/colorbutton.py |    4 ++--
>   1 files changed, 2 insertions(+), 2 deletions(-)
> diff --git a/src/sugar/graphics/colorbutton.py b/src/sugar/graphics/colorbutton.py
> index 1fed96d..c36320a 100644
> --- a/src/sugar/graphics/colorbutton.py
> +++ b/src/sugar/graphics/colorbutton.py
> @@ -125,7 +125,7 @@ class _ColorButton(gtk.Button):
>           self._preview.fill_color = get_svg_color_string(self._color)
>           if self._palette:
>               self._palette.props.color = self._color
> -        self.notify('color')
> +        self.emit('color-set')
>       def get_color(self):
>           return self._color
> @@ -379,7 +379,7 @@ class _ColorPalette(Palette):
>               self._scales[self._GREEN].set_value(self._color.green / 65535.0)
>               self._scales[self._BLUE].set_value(self._color.blue / 65535.0)
> -        self.notify('color')
> +        self.emit('color-set')
>       def get_color(self):
>           return self._color

More information about the Sugar-devel mailing list