[Sugar-devel] [sugar-toolkit-gtk3] Solve errors in ColorToolButton to enable activities to use it
godiard at sugarlabs.org
godiard at sugarlabs.org
Wed Aug 8 09:24:14 EDT 2012
From: Gonzalo Odiard <godiard at gmail.com>
This patch solves the following problems:
* API changed in the drag and drop code in Gtk.
Drag and drop is not working yet (SL #3796)
but the code needed to enable drag and drop is ported.
* Changes in the way to get color information from the theme
this is because Gtk.Style was deprecated by Gtk.StyleContext.
* The internal button was not visible.
Signed-of-by: Gonzalo Odiard <gonzalo at laptop.org>
-----
v2: Fixed comment based on manuq feedback, and add a note
about the non working drag and drop.
---
src/sugar3/graphics/colorbutton.py | 30 ++++++++++++++++++------------
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/src/sugar3/graphics/colorbutton.py b/src/sugar3/graphics/colorbutton.py
index c21da47..3b847b3 100644
--- a/src/sugar3/graphics/colorbutton.py
+++ b/src/sugar3/graphics/colorbutton.py
@@ -64,20 +64,19 @@ class _ColorButton(Gtk.Button):
GObject.GObject.__init__(self, **kwargs)
if self._accept_drag:
- Gtk.drag_dest_set(self, Gtk.DEST_DEFAULT_MOTION |
- Gtk.DEST_DEFAULT_HIGHLIGHT |
- Gtk.DEST_DEFAULT_DROP,
- [('application/x-color', 0, 0)],
- Gdk.DragAction.COPY)
- self.drag_source_set(Gdk.EventMask.BUTTON1_MASK | Gdk.EventMask.BUTTON3_MASK,
- [('application/x-color', 0, 0)],
- Gdk.DragAction.COPY)
+ self.drag_dest_set(Gtk.DestDefaults.MOTION |
+ Gtk.DestDefaults.HIGHLIGHT | Gtk.DestDefaults.DROP,
+ [Gtk.TargetEntry.new('application/x-color', 0, 0)],
+ Gdk.DragAction.COPY)
+ self.drag_source_set(Gdk.ModifierType.BUTTON1_MASK | \
+ Gdk.ModifierType.BUTTON3_MASK,
+ [Gtk.TargetEntry.new('application/x-color', 0, 0)],
+ Gdk.DragAction.COPY)
self.connect('drag_data_received', self.__drag_data_received_cb)
self.connect('drag_data_get', self.__drag_data_get_cb)
self._preview.fill_color = get_svg_color_string(self._color)
- self._preview.stroke_color = \
- get_svg_color_string(self.style.fg[Gtk.StateType.NORMAL])
+ self._preview.stroke_color = self._get_fg_style_color_str()
self.set_image(self._preview)
if self._has_palette and self._has_invoker:
@@ -103,8 +102,14 @@ class _ColorButton(Gtk.Button):
self.color = self._palette.color
def do_style_set(self, previous_style):
- self._preview.stroke_color = \
- get_svg_color_string(self.style.fg[Gtk.StateType.NORMAL])
+ self._preview.stroke_color = self._get_fg_style_color_str()
+
+ def _get_fg_style_color_str(self):
+ context = self.get_style_context()
+ fg_color = context.get_color(Gtk.StateType.NORMAL)
+ # the color components are stored as float values between 0.0 and 1.0
+ return '#%.2X%.2X%.2X' % (fg_color.red * 255, fg_color.green * 255,
+ fg_color.blue * 255)
def do_clicked(self):
if self._palette:
@@ -438,6 +443,7 @@ class ColorToolButton(Gtk.ToolItem):
# Replace it with a ColorButton
color_button = _ColorButton(icon_name=icon_name, has_invoker=False)
self.add(color_button)
+ color_button.show()
# The following is so that the behaviour on the toolbar is correct.
color_button.set_relief(Gtk.ReliefStyle.NONE)
--
1.7.11.2
More information about the Sugar-devel
mailing list