[PATCH] move free form tool

Gonzalo Odiard godiard at gmail.com
Sat May 22 09:16:52 EDT 2010


---
 toolbox.py |   97
++++++++++++++++++++++++++----------------------------------
 1 files changed, 42 insertions(+), 55 deletions(-)

diff --git a/toolbox.py b/toolbox.py
index 6a01a72..c3bcc01 100644
--- a/toolbox.py
+++ b/toolbox.py
@@ -216,15 +216,6 @@ class ToolsToolbar(gtk.Toolbar):
         'vertices'      : None
     }

-    _TOOL_POLYGON = {
-        'name'          : 'polygon',
-        'line size'     : 2,
-        'fill color'    : None,
-        'stroke color'  : None,
-        'line shape'    : 'circle',
-        'fill'          : True,
-        'vertices'      : None
-    }

     _TOOL_BUCKET = {
         'name'          : 'bucket',
@@ -319,13 +310,6 @@ class ToolsToolbar(gtk.Toolbar):
         except:
             logging.debug('Could not create palette for tool Eraser')

-        self._tool_polygon = ToolButton('tool-polygon')
-        self.insert(self._tool_polygon, -1)
-        self._tool_polygon.set_tooltip(_('Polygon'))
-        try:
-            self._configure_palette(self._tool_polygon, self._TOOL_POLYGON)
-        except:
-            logging.debug('Could not create palette for tool Polygon')

         self._tool_bucket = ToolButton('tool-bucket')
         self.insert(self._tool_bucket, -1)
@@ -365,7 +349,6 @@ class ToolsToolbar(gtk.Toolbar):

         # New connect method
         # Using dictionnaries to control tool's properties
-        self._tool_polygon.connect('clicked', self.set_tool,
self._TOOL_POLYGON)
         self._tool_pencil.connect('clicked', self.set_tool,
self._TOOL_PENCIL)
         self._tool_brush.connect('clicked', self.set_tool,
self._TOOL_BRUSH)
         self._tool_eraser.connect('clicked', self.set_tool,
self._TOOL_ERASER)
@@ -397,7 +380,6 @@ class ToolsToolbar(gtk.Toolbar):

         # We can set size when using either Pencil, Free Polygon, Brush or
Eraser
         if tool['name'] is self._TOOL_PENCIL['name'] or \
-             tool['name'] is self._TOOL_POLYGON['name'] or \
              tool['name'] is self._TOOL_BRUSH['name'] or \
              tool['name'] is self._TOOL_ERASER['name']:

@@ -468,36 +450,6 @@ class ToolsToolbar(gtk.Toolbar):
             #vbox.pack_end(separator)
             #separator.show()

-        # User is able to fill or not a polygon, and choose its fill color
-        if tool['name'] is self._TOOL_POLYGON['name']:
-            # Creating a CheckButton named "Fill".
-            fill_checkbutton = gtk.CheckButton(_('Fill'))
-            fill_checkbutton.show()
-            fill_checkbutton.set_active(self._TOOL_POLYGON['fill'])
-
-            fill_checkbutton.connect('toggled',
self._on_fill_checkbutton_toggled, widget, self._TOOL_POLYGON)
-
-            #palette.set_content(fill_checkbutton)
-            palette.action_bar.pack_start(fill_checkbutton)
-
-            # Creating Fill Color Button
-            hbox = gtk.HBox()
-            hbox.show()
-
-            label = gtk.Label(_('Fill Color: '))
-            label.show()
-
-            colorbutton = ButtonFillColor(self._activity)
-            colorbutton.show_all()
-
-            hbox.pack_start(label)
-            hbox.pack_start(colorbutton)
-
-            #palette.action_bar.pack_start(label)
-            #palette.action_bar.pack_start(colorbutton)
-            content_box.pack_start(hbox)
-
-            colorbutton.connect_after('color-set', self._on_color_set,
self._TOOL_POLYGON)
         if tool['name'] is self._TOOL_MARQUEE_RECTANGULAR['name']:
             # Creating a CheckButton named "Fill".
             keep_aspect_checkbutton = gtk.CheckButton(_('Keep aspect'))
@@ -545,13 +497,6 @@ class ToolsToolbar(gtk.Toolbar):
         #setting cursor: Moved to Area


-    def _on_fill_checkbutton_toggled(self, checkbutton, button=None,
tool=None):
-        logging.debug('Checkbutton is Active: %s', checkbutton.get_active()
)
-
-        # New method for setting tools
-        #self._activity.area.fill = checkbutton.get_active()
-        tool['fill'] = checkbutton.get_active()
-        self.set_tool(tool=tool)

 #     def _on_fill_checkbutton_map(self, checkbutton, data=None):
 #         """
@@ -734,6 +679,17 @@ class ShapesToolbar(gtk.Toolbar):
         'fill'          : True,
         'vertices'      : None
     }
+
+    _TOOL_POLYGON = {
+        'name'          : 'polygon',
+        'line size'     : 2,
+        'fill color'    : None,
+        'stroke color'  : None,
+        'line shape'    : 'circle',
+        'fill'          : True,
+        'vertices'      : None
+    }
+

     ##The Constructor
     def __init__(self, activity):
@@ -782,6 +738,14 @@ class ShapesToolbar(gtk.Toolbar):
             self._configure_palette_shape_line()
         except:
             logging.debug('Could not create palette for Shape Line')
+
+        self._tool_polygon = ToolButton('tool-polygon')
+        self.insert(self._tool_polygon, -1)
+        self._tool_polygon.set_tooltip(_('Free form'))
+        try:
+            self._create_simple_palette(self._tool_polygon,
self._TOOL_POLYGON)
+        except:
+            logging.debug('Could not create palette for tool Polygon')

         self._shape_polygon = ToolButton('tool-shape-polygon')
         self.insert(self._shape_polygon, -1)
@@ -853,6 +817,7 @@ class ShapesToolbar(gtk.Toolbar):
         self._shape_arrow.connect('clicked', self.set_tool,
self._SHAPE_ARROW)
         self._shape_ellipse.connect('clicked', self.set_tool,
self._SHAPE_ELLIPSE)
         #self._shape_freeform.connect('clicked', self.set_tool,
self._SHAPE_FREEFORM)
+        self._tool_polygon.connect('clicked', self.set_tool,
self._TOOL_POLYGON)
         self._shape_heart.connect('clicked', self.set_tool,
self._SHAPE_HEART)
         self._shape_line.connect('clicked', self.set_tool,
self._SHAPE_LINE)
         self._shape_parallelogram.connect('clicked', self.set_tool,
self._SHAPE_PARALLELOGRAM)
@@ -934,6 +899,13 @@ class ShapesToolbar(gtk.Toolbar):

         spin.connect('value-changed', self._on_vertices_value_changed,
self._SHAPE_POLYGON)

+    def _on_fill_checkbutton_toggled(self, checkbutton, button=None,
tool=None):
+        logging.debug('Checkbutton is Active: %s', checkbutton.get_active()
)
+
+        # New method for setting tools
+        #self._activity.area.fill = checkbutton.get_active()
+        tool['fill'] = checkbutton.get_active()
+        self.set_tool(tool=tool)

     def _configure_palette_shape_heart(self):
         logging.debug('Creating palette to shape heart')
@@ -980,6 +952,9 @@ class ShapesToolbar(gtk.Toolbar):
         palette.content_box.pack_start(hbox)

         spin.connect('value-changed', self._on_vertices_value_changed,
self._SHAPE_STAR)
+
+
+

     def _configure_palette_shape_trapezoid(self):
         logging.debug('Creating palette to shape trapezoid')
@@ -1039,6 +1014,18 @@ class ShapesToolbar(gtk.Toolbar):
         palette.content_box.pack_start(hbox)

         size_spinbutton.connect('value-changed',
self._on_line_size_value_changed, tool)
+
+        # User is able to fill or not a polygon, and choose its fill color
+        if tool['name'] is self._TOOL_POLYGON['name']:
+            # Creating a CheckButton named "Fill".
+            fill_checkbutton = gtk.CheckButton(_('Fill'))
+            fill_checkbutton.show()
+            fill_checkbutton.set_active(self._TOOL_POLYGON['fill'])
+
+            fill_checkbutton.connect('toggled',
self._on_fill_checkbutton_toggled, widget, self._TOOL_POLYGON)
+
+            #palette.set_content(fill_checkbutton)
+            palette.action_bar.pack_start(fill_checkbutton)


     def _configure_palette_shape_line(self):
-- 
1.6.6.1


-- 
Gonzalo Odiard
SugarLabs Argentina

--000e0cdf19b499cc6104873a7c7f
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<a href=3D"http://dev.laptop.org/ticket/3696">http://dev.laptop.org/ticket/=
3696</a><br><br>I want to work with the cursors (there are many bugs about =
this) and selection of fonts in the texts, but didn&#39;t have any response=
 from the maintainer of this activity.<br clear=3D"all">
<br>From 0f99bd0b5d6d03dfe6673d944764a9346427dee1 Mon Sep 17 00:00:00 2001<=
br>From: Gonzalo Odiard &lt;<a href=3D"mailto:godiard at gmail.com">godiard at gm=
ail.com</a>&gt;<br>Date: Sat, 22 May 2010 10:16:52 -0300<br>Subject: [PATCH=
] move free form tool<br>
<br>---<br>=A0toolbox.py |=A0=A0 97 ++++++++++++++++++++++++++-------------=
---------------------<br>=A01 files changed, 42 insertions(+), 55 deletions=
(-)<br><br>diff --git a/toolbox.py b/toolbox.py<br>index 6a01a72..c3bcc01 1=
00644<br>
--- a/toolbox.py<br>+++ b/toolbox.py<br>@@ -216,15 +216,6 @@ class ToolsToo=
lbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=A0=A0 &#39;vertices&#39;=A0=A0=A0=
=A0=A0 : None<br>=A0=A0=A0=A0 }<br>=A0=A0=A0=A0 <br>-=A0=A0=A0 _TOOL_POLYGO=
N =3D {<br>-=A0=A0=A0=A0=A0=A0=A0 &#39;name&#39;=A0=A0=A0=A0=A0=A0=A0=A0=A0=
 : &#39;polygon&#39;,<br>
-=A0=A0=A0=A0=A0=A0=A0 &#39;line size&#39;=A0=A0=A0=A0 : 2,<br>-=A0=A0=A0=
=A0=A0=A0=A0 &#39;fill color&#39;=A0=A0=A0 : None,<br>-=A0=A0=A0=A0=A0=A0=
=A0 &#39;stroke color&#39;=A0 : None,<br>-=A0=A0=A0=A0=A0=A0=A0 &#39;line s=
hape&#39;=A0=A0=A0 : &#39;circle&#39;,<br>-=A0=A0=A0=A0=A0=A0=A0 &#39;fill&=
#39;=A0=A0=A0=A0=A0=A0=A0=A0=A0 : True,<br>
-=A0=A0=A0=A0=A0=A0=A0 &#39;vertices&#39;=A0=A0=A0=A0=A0 : None<br>-=A0=A0=
=A0 }<br>=A0=A0=A0=A0 <br>=A0=A0=A0=A0 _TOOL_BUCKET =3D {<br>=A0=A0=A0=A0=
=A0=A0=A0=A0 &#39;name&#39;=A0=A0=A0=A0=A0=A0=A0=A0=A0 : &#39;bucket&#39;,<=
br>@@ -319,13 +310,6 @@ class ToolsToolbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=
=A0=A0=A0 except:<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 logging.debug(&#3=
9;Could not create palette for tool Eraser&#39;)<br>
=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=A0=A0=A0=A0 self._tool_polygon =3D =
ToolButton(&#39;tool-polygon&#39;)<br>-=A0=A0=A0=A0=A0=A0=A0 self.insert(se=
lf._tool_polygon, -1)<br>-=A0=A0=A0=A0=A0=A0=A0 self._tool_polygon.set_tool=
tip(_(&#39;Polygon&#39;))<br>-=A0=A0=A0=A0=A0=A0=A0 try:<br>-=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0 self._configure_palette(self._tool_polygon, self._TOO=
L_POLYGON)<br>
-=A0=A0=A0=A0=A0=A0=A0 except:<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 loggin=
g.debug(&#39;Could not create palette for tool Polygon&#39;)<br>=A0=A0=A0=
=A0=A0=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 self._tool_bucket =3D ToolButt=
on(&#39;tool-bucket&#39;)<br>=A0=A0=A0=A0=A0=A0=A0=A0 self.insert(self._too=
l_bucket, -1)<br>
@@ -365,7 +349,6 @@ class ToolsToolbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 # New connect m=
ethod<br>=A0=A0=A0=A0=A0=A0=A0=A0 # Using dictionnaries to control tool&#39=
;s properties<br>-=A0=A0=A0=A0=A0=A0=A0 self._tool_polygon.connect(&#39;cli=
cked&#39;, self.set_tool, self._TOOL_POLYGON)<br>
=A0=A0=A0=A0=A0=A0=A0=A0 self._tool_pencil.connect(&#39;clicked&#39;, self.=
set_tool, self._TOOL_PENCIL)<br>=A0=A0=A0=A0=A0=A0=A0=A0 self._tool_brush.c=
onnect(&#39;clicked&#39;, self.set_tool, self._TOOL_BRUSH)<br>=A0=A0=A0=A0=
=A0=A0=A0=A0 self._tool_eraser.connect(&#39;clicked&#39;, self.set_tool, se=
lf._TOOL_ERASER)<br>
@@ -397,7 +380,6 @@ class ToolsToolbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 # We can set size when usin=
g either Pencil, Free Polygon, Brush or Eraser<br>=A0=A0=A0=A0=A0=A0=A0=A0 =
if tool[&#39;name&#39;] is self._TOOL_PENCIL[&#39;name&#39;] or \<br>
-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 tool[&#39;name&#39;] is self._TOOL_PO=
LYGON[&#39;name&#39;] or \<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 tool[=
&#39;name&#39;] is self._TOOL_BRUSH[&#39;name&#39;] or \<br>=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0 tool[&#39;name&#39;] is self._TOOL_ERASER[&#39;nam=
e&#39;]:<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>@@ -468,36 +450,6 @@ class ToolsTo=
olbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 #vbox.pack_end(=
separator)<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 #separator.show()<br>=A0=
<br>-=A0=A0=A0=A0=A0=A0=A0 # User is able to fill or not a polygon, and cho=
ose its fill color<br>
-=A0=A0=A0=A0=A0=A0=A0 if tool[&#39;name&#39;] is self._TOOL_POLYGON[&#39;n=
ame&#39;]:<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 # Creating a CheckButton n=
amed &quot;Fill&quot;.<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 fill_checkbutt=
on =3D gtk.CheckButton(_(&#39;Fill&#39;))<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0 fill_checkbutton.show()<br>
-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 fill_checkbutton.set_active(self._TOOL_P=
OLYGON[&#39;fill&#39;])<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0 fill_checkbutton.connect(&#39;toggled&#39;, sel=
f._on_fill_checkbutton_toggled, widget, self._TOOL_POLYGON)<br>-=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0 <br>
-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 #palette.set_content(fill_checkbutton)<b=
r>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 palette.action_bar.pack_start(fill_che=
ckbutton)<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0 # Creating Fill Color Button<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0 hbox =3D gtk.HBox()<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 hbox.show(=
)<br>
-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 l=
abel =3D gtk.Label(_(&#39;Fill Color: &#39;))<br>-=A0=A0=A0=A0=A0=A0=A0=A0=
=A0=A0=A0 label.show()<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0 colorbutton =3D ButtonFillColor(self._activity)<br=
>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 colorbutton.show_all()<br>
-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 h=
box.pack_start(label)<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 hbox.pack_start=
(colorbutton)<br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0 #palette.action_bar.pack_start(label)<br>-=A0=A0=A0=A0=A0=
=A0=A0=A0=A0=A0=A0 #palette.action_bar.pack_start(colorbutton)<br>
-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 content_box.pack_start(hbox)<br>-=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 colorbut=
ton.connect_after(&#39;color-set&#39;, self._on_color_set, self._TOOL_POLYG=
ON)<br>=A0=A0=A0=A0=A0=A0=A0=A0 if tool[&#39;name&#39;] is self._TOOL_MARQU=
EE_RECTANGULAR[&#39;name&#39;]:<br>
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 # Creating a CheckButton named &quot;F=
ill&quot;.<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 keep_aspect_checkbutton =
=3D gtk.CheckButton(_(&#39;Keep aspect&#39;))<br>@@ -545,13 +497,6 @@ class=
 ToolsToolbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=A0=A0 #setting cursor: Mo=
ved to Area<br>
=A0=A0=A0=A0=A0=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0 def _o=
n_fill_checkbutton_toggled(self, checkbutton, button=3DNone, tool=3DNone):<=
br>-=A0=A0=A0=A0=A0=A0=A0 logging.debug(&#39;Checkbutton is Active: %s&#39;=
, checkbutton.get_active() )<br>-=A0=A0=A0=A0=A0=A0=A0 <br>-=A0=A0=A0=A0=A0=
=A0=A0 # New method for setting tools<br>
-=A0=A0=A0=A0=A0=A0=A0 #self._activity.area.fill =3D checkbutton.get_active=
()<br>-=A0=A0=A0=A0=A0=A0=A0 tool[&#39;fill&#39;] =3D checkbutton.get_activ=
e()<br>-=A0=A0=A0=A0=A0=A0=A0 self.set_tool(tool=3Dtool)<br>=A0=A0=A0=A0=A0=
=A0=A0=A0 <br>=A0#=A0=A0=A0=A0 def _on_fill_checkbutton_map(self, checkbutt=
on, data=3DNone):<br>
=A0#=A0=A0=A0=A0=A0=A0=A0=A0 &quot;&quot;&quot;<br>@@ -734,6 +679,17 @@ cla=
ss ShapesToolbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=A0=A0 &#39;fill&#39;=
=A0=A0=A0=A0=A0=A0=A0=A0=A0 : True,<br>=A0=A0=A0=A0=A0=A0=A0=A0 &#39;vertic=
es&#39;=A0=A0=A0=A0=A0 : None<br>=A0=A0=A0=A0 }<br>+<br>+=A0=A0=A0 _TOOL_PO=
LYGON =3D {<br>+=A0=A0=A0=A0=A0=A0=A0 &#39;name&#39;=A0=A0=A0=A0=A0=A0=A0=
=A0=A0 : &#39;polygon&#39;,<br>
+=A0=A0=A0=A0=A0=A0=A0 &#39;line size&#39;=A0=A0=A0=A0 : 2,<br>+=A0=A0=A0=
=A0=A0=A0=A0 &#39;fill color&#39;=A0=A0=A0 : None,<br>+=A0=A0=A0=A0=A0=A0=
=A0 &#39;stroke color&#39;=A0 : None,<br>+=A0=A0=A0=A0=A0=A0=A0 &#39;line s=
hape&#39;=A0=A0=A0 : &#39;circle&#39;,<br>+=A0=A0=A0=A0=A0=A0=A0 &#39;fill&=
#39;=A0=A0=A0=A0=A0=A0=A0=A0=A0 : True,<br>
+=A0=A0=A0=A0=A0=A0=A0 &#39;vertices&#39;=A0=A0=A0=A0=A0 : None<br>+=A0=A0=
=A0 }<br>+<br>=A0=A0=A0=A0 <br>=A0=A0=A0=A0 ##The Constructor<br>=A0=A0=A0=
=A0 def __init__(self, activity):<br>@@ -782,6 +738,14 @@ class ShapesToolb=
ar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 self._configure_pa=
lette_shape_line()<br>
=A0=A0=A0=A0=A0=A0=A0=A0 except:<br>=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 lo=
gging.debug(&#39;Could not create palette for Shape Line&#39;)<br>+<br>+=A0=
=A0=A0=A0=A0=A0=A0 self._tool_polygon =3D ToolButton(&#39;tool-polygon&#39;=
)<br>+=A0=A0=A0=A0=A0=A0=A0 self.insert(self._tool_polygon, -1)<br>
+=A0=A0=A0=A0=A0=A0=A0 self._tool_polygon.set_tooltip(_(&#39;Free form&#39;=
))<br>+=A0=A0=A0=A0=A0=A0=A0 try:<br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 sel=
f._create_simple_palette(self._tool_polygon, self._TOOL_POLYGON)<br>+=A0=A0=
=A0=A0=A0=A0=A0 except:<br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 logging.debug=
(&#39;Could not create palette for tool Polygon&#39;)<br>
=A0=A0=A0=A0=A0=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 self._shape_polygon =
=3D ToolButton(&#39;tool-shape-polygon&#39;)<br>=A0=A0=A0=A0=A0=A0=A0=A0 se=
lf.insert(self._shape_polygon, -1)<br>@@ -853,6 +817,7 @@ class ShapesToolb=
ar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=A0=A0=A0 self._shape_arrow.connect(&#39=
;clicked&#39;, self.set_tool, self._SHAPE_ARROW)<br>
=A0=A0=A0=A0=A0=A0=A0=A0 self._shape_ellipse.connect(&#39;clicked&#39;, sel=
f.set_tool, self._SHAPE_ELLIPSE)<br>=A0=A0=A0=A0=A0=A0=A0=A0 #self._shape_f=
reeform.connect(&#39;clicked&#39;, self.set_tool, self._SHAPE_FREEFORM)<br>=
+=A0=A0=A0=A0=A0=A0=A0 self._tool_polygon.connect(&#39;clicked&#39;, self.s=
et_tool, self._TOOL_POLYGON)<br>
=A0=A0=A0=A0=A0=A0=A0=A0 self._shape_heart.connect(&#39;clicked&#39;, self.=
set_tool, self._SHAPE_HEART)<br>=A0=A0=A0=A0=A0=A0=A0=A0 self._shape_line.c=
onnect(&#39;clicked&#39;, self.set_tool, self._SHAPE_LINE)<br>=A0=A0=A0=A0=
=A0=A0=A0=A0 self._shape_parallelogram.connect(&#39;clicked&#39;, self.set_=
tool, self._SHAPE_PARALLELOGRAM)<br>
@@ -934,6 +899,13 @@ class ShapesToolbar(gtk.Toolbar):<br>=A0=A0=A0=A0=A0=
=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 spin.connect(&#39;value-changed&#39;=
, self._on_vertices_value_changed, self._SHAPE_POLYGON)<br>=A0=A0=A0=A0=A0=
=A0=A0=A0 <br>+=A0=A0=A0 def _on_fill_checkbutton_toggled(self, checkbutton=
, button=3DNone, tool=3DNone):<br>
+=A0=A0=A0=A0=A0=A0=A0 logging.debug(&#39;Checkbutton is Active: %s&#39;, c=
heckbutton.get_active() )<br>+=A0=A0=A0=A0=A0=A0=A0 <br>+=A0=A0=A0=A0=A0=A0=
=A0 # New method for setting tools<br>+=A0=A0=A0=A0=A0=A0=A0 #self._activit=
y.area.fill =3D checkbutton.get_active()<br>+=A0=A0=A0=A0=A0=A0=A0 tool[&#3=
9;fill&#39;] =3D checkbutton.get_active()<br>
+=A0=A0=A0=A0=A0=A0=A0 self.set_tool(tool=3Dtool)<br>=A0=A0=A0=A0=A0=A0=A0=
=A0 <br>=A0=A0=A0=A0 def _configure_palette_shape_heart(self):<br>=A0=A0=A0=
=A0=A0=A0=A0=A0 logging.debug(&#39;Creating palette to shape heart&#39;)<br=
>@@ -980,6 +952,9 @@ class ShapesToolbar(gtk.Toolbar):<br>
=A0=A0=A0=A0=A0=A0=A0=A0 palette.content_box.pack_start(hbox)<br>=A0=A0=A0=
=A0=A0=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 spin.connect(&#39;value-change=
d&#39;, self._on_vertices_value_changed, self._SHAPE_STAR)<br>+<br>+=A0=A0=
=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>+<br>=A0=A0=A0=A0 <br>=A0=A0=A0=A0 def _con=
figure_palette_shape_trapezoid(self):<br>
=A0=A0=A0=A0=A0=A0=A0=A0 logging.debug(&#39;Creating palette to shape trape=
zoid&#39;)<br>@@ -1039,6 +1014,18 @@ class ShapesToolbar(gtk.Toolbar):<br>=
=A0=A0=A0=A0=A0=A0=A0=A0 palette.content_box.pack_start(hbox)<br>=A0=A0=A0=
=A0=A0=A0=A0=A0 <br>=A0=A0=A0=A0=A0=A0=A0=A0 size_spinbutton.connect(&#39;v=
alue-changed&#39;, self._on_line_size_value_changed, tool)<br>
+<br>+=A0=A0=A0=A0=A0=A0=A0 # User is able to fill or not a polygon, and ch=
oose its fill color<br>+=A0=A0=A0=A0=A0=A0=A0 if tool[&#39;name&#39;] is se=
lf._TOOL_POLYGON[&#39;name&#39;]:<br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 # C=
reating a CheckButton named &quot;Fill&quot;.<br>
+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 fill_checkbutton =3D gtk.CheckButton(_(&=
#39;Fill&#39;))<br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 fill_checkbutton.show=
()<br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 fill_checkbutton.set_active(self._=
TOOL_POLYGON[&#39;fill&#39;])<br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>+=
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 fill_checkbutton.connect(&#39;toggled&#39=
;, self._on_fill_checkbutton_toggled, widget, self._TOOL_POLYGON)<br>
+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 <br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 #=
palette.set_content(fill_checkbutton)<br>+=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=
 palette.action_bar.pack_start(fill_checkbutton)<br>=A0=A0=A0=A0 <br>=A0=A0=
=A0=A0 <br>=A0=A0=A0=A0 def _configure_palette_shape_line(self):<br>-- <br>=
1.6.6.1<br>
<br><br>-- <br>Gonzalo Odiard<br>SugarLabs Argentina<br>

--000e0cdf19b499cc6104873a7c7f--
--000e0cdf19b499cc6e04873a7c81
Content-Type: application/octet-stream; 
	name="0001-move-free-form-tool.patch"
Content-Disposition: attachment; filename="0001-move-free-form-tool.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g9jb0v110

RnJvbSAwZjk5YmQwYjVkNmQwM2RmZTY2NzNkOTQ0NzY0YTkzNDY0MjdkZWUxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHb256YWxvIE9kaWFyZCA8Z29kaWFyZEBnbWFpbC5jb20+CkRh
dGU6IFNhdCwgMjIgTWF5IDIwMTAgMTA6MTY6NTIgLTAzMDAKU3ViamVjdDogW1BBVENIXSBtb3Zl
IGZyZWUgZm9ybSB0b29sCgotLS0KIHRvb2xib3gucHkgfCAgIDk3ICsrKysrKysrKysrKysrKysr
KysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlcyBjaGFu
Z2VkLCA0MiBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS90b29s
Ym94LnB5IGIvdG9vbGJveC5weQppbmRleCA2YTAxYTcyLi5jM2JjYzAxIDEwMDY0NAotLS0gYS90
b29sYm94LnB5CisrKyBiL3Rvb2xib3gucHkKQEAgLTIxNiwxNSArMjE2LDYgQEAgY2xhc3MgVG9v
bHNUb29sYmFyKGd0ay5Ub29sYmFyKToKICAgICAgICAgJ3ZlcnRpY2VzJyAgICAgIDogTm9uZQog
ICAgIH0KICAgICAKLSAgICBfVE9PTF9QT0xZR09OID0gewotICAgICAgICAnbmFtZScgICAgICAg
ICAgOiAncG9seWdvbicsCi0gICAgICAgICdsaW5lIHNpemUnICAgICA6IDIsCi0gICAgICAgICdm
aWxsIGNvbG9yJyAgICA6IE5vbmUsCi0gICAgICAgICdzdHJva2UgY29sb3InICA6IE5vbmUsCi0g
ICAgICAgICdsaW5lIHNoYXBlJyAgICA6ICdjaXJjbGUnLAotICAgICAgICAnZmlsbCcgICAgICAg
ICAgOiBUcnVlLAotICAgICAgICAndmVydGljZXMnICAgICAgOiBOb25lCi0gICAgfQogICAgIAog
ICAgIF9UT09MX0JVQ0tFVCA9IHsKICAgICAgICAgJ25hbWUnICAgICAgICAgIDogJ2J1Y2tldCcs
CkBAIC0zMTksMTMgKzMxMCw2IEBAIGNsYXNzIFRvb2xzVG9vbGJhcihndGsuVG9vbGJhcik6CiAg
ICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ0NvdWxkIG5vdCBjcmVh
dGUgcGFsZXR0ZSBmb3IgdG9vbCBFcmFzZXInKQogICAgICAgICAKLSAgICAgICAgc2VsZi5fdG9v
bF9wb2x5Z29uID0gVG9vbEJ1dHRvbigndG9vbC1wb2x5Z29uJykKLSAgICAgICAgc2VsZi5pbnNl
cnQoc2VsZi5fdG9vbF9wb2x5Z29uLCAtMSkKLSAgICAgICAgc2VsZi5fdG9vbF9wb2x5Z29uLnNl
dF90b29sdGlwKF8oJ1BvbHlnb24nKSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5f
Y29uZmlndXJlX3BhbGV0dGUoc2VsZi5fdG9vbF9wb2x5Z29uLCBzZWxmLl9UT09MX1BPTFlHT04p
Ci0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGxvZ2dpbmcuZGVidWcoJ0NvdWxkIG5vdCBj
cmVhdGUgcGFsZXR0ZSBmb3IgdG9vbCBQb2x5Z29uJykKICAgICAgICAgCiAgICAgICAgIHNlbGYu
X3Rvb2xfYnVja2V0ID0gVG9vbEJ1dHRvbigndG9vbC1idWNrZXQnKQogICAgICAgICBzZWxmLmlu
c2VydChzZWxmLl90b29sX2J1Y2tldCwgLTEpCkBAIC0zNjUsNyArMzQ5LDYgQEAgY2xhc3MgVG9v
bHNUb29sYmFyKGd0ay5Ub29sYmFyKToKICAgICAgICAgICAgICAgICAKICAgICAgICAgIyBOZXcg
Y29ubmVjdCBtZXRob2QKICAgICAgICAgIyBVc2luZyBkaWN0aW9ubmFyaWVzIHRvIGNvbnRyb2wg
dG9vbCdzIHByb3BlcnRpZXMKLSAgICAgICAgc2VsZi5fdG9vbF9wb2x5Z29uLmNvbm5lY3QoJ2Ns
aWNrZWQnLCBzZWxmLnNldF90b29sLCBzZWxmLl9UT09MX1BPTFlHT04pCiAgICAgICAgIHNlbGYu
X3Rvb2xfcGVuY2lsLmNvbm5lY3QoJ2NsaWNrZWQnLCBzZWxmLnNldF90b29sLCBzZWxmLl9UT09M
X1BFTkNJTCkKICAgICAgICAgc2VsZi5fdG9vbF9icnVzaC5jb25uZWN0KCdjbGlja2VkJywgc2Vs
Zi5zZXRfdG9vbCwgc2VsZi5fVE9PTF9CUlVTSCkKICAgICAgICAgc2VsZi5fdG9vbF9lcmFzZXIu
Y29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuc2V0X3Rvb2wsIHNlbGYuX1RPT0xfRVJBU0VSKQpAQCAt
Mzk3LDcgKzM4MCw2IEBAIGNsYXNzIFRvb2xzVG9vbGJhcihndGsuVG9vbGJhcik6CiAgICAgICAg
ICAgICAKICAgICAgICAgIyBXZSBjYW4gc2V0IHNpemUgd2hlbiB1c2luZyBlaXRoZXIgUGVuY2ls
LCBGcmVlIFBvbHlnb24sIEJydXNoIG9yIEVyYXNlcgogICAgICAgICBpZiB0b29sWyduYW1lJ10g
aXMgc2VsZi5fVE9PTF9QRU5DSUxbJ25hbWUnXSBvciBcCi0gICAgICAgICAgICAgdG9vbFsnbmFt
ZSddIGlzIHNlbGYuX1RPT0xfUE9MWUdPTlsnbmFtZSddIG9yIFwKICAgICAgICAgICAgICB0b29s
WyduYW1lJ10gaXMgc2VsZi5fVE9PTF9CUlVTSFsnbmFtZSddIG9yIFwKICAgICAgICAgICAgICB0
b29sWyduYW1lJ10gaXMgc2VsZi5fVE9PTF9FUkFTRVJbJ25hbWUnXToKICAgICAgICAgICAgIApA
QCAtNDY4LDM2ICs0NTAsNiBAQCBjbGFzcyBUb29sc1Rvb2xiYXIoZ3RrLlRvb2xiYXIpOgogICAg
ICAgICAgICAgI3Zib3gucGFja19lbmQoc2VwYXJhdG9yKQogICAgICAgICAgICAgI3NlcGFyYXRv
ci5zaG93KCkKIAotICAgICAgICAjIFVzZXIgaXMgYWJsZSB0byBmaWxsIG9yIG5vdCBhIHBvbHln
b24sIGFuZCBjaG9vc2UgaXRzIGZpbGwgY29sb3IKLSAgICAgICAgaWYgdG9vbFsnbmFtZSddIGlz
IHNlbGYuX1RPT0xfUE9MWUdPTlsnbmFtZSddOgotICAgICAgICAgICAgIyBDcmVhdGluZyBhIENo
ZWNrQnV0dG9uIG5hbWVkICJGaWxsIi4KLSAgICAgICAgICAgIGZpbGxfY2hlY2tidXR0b24gPSBn
dGsuQ2hlY2tCdXR0b24oXygnRmlsbCcpKQotICAgICAgICAgICAgZmlsbF9jaGVja2J1dHRvbi5z
aG93KCkKLSAgICAgICAgICAgIGZpbGxfY2hlY2tidXR0b24uc2V0X2FjdGl2ZShzZWxmLl9UT09M
X1BPTFlHT05bJ2ZpbGwnXSkKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZmlsbF9jaGVja2J1
dHRvbi5jb25uZWN0KCd0b2dnbGVkJywgc2VsZi5fb25fZmlsbF9jaGVja2J1dHRvbl90b2dnbGVk
LCB3aWRnZXQsIHNlbGYuX1RPT0xfUE9MWUdPTikKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
I3BhbGV0dGUuc2V0X2NvbnRlbnQoZmlsbF9jaGVja2J1dHRvbikKLSAgICAgICAgICAgIHBhbGV0
dGUuYWN0aW9uX2Jhci5wYWNrX3N0YXJ0KGZpbGxfY2hlY2tidXR0b24pCi0gICAgICAgICAgICAK
LSAgICAgICAgICAgICMgQ3JlYXRpbmcgRmlsbCBDb2xvciBCdXR0b24KLSAgICAgICAgICAgIGhi
b3ggPSBndGsuSEJveCgpCi0gICAgICAgICAgICBoYm94LnNob3coKQotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBsYWJlbCA9IGd0ay5MYWJlbChfKCdGaWxsIENvbG9yOiAnKSkKLSAgICAgICAg
ICAgIGxhYmVsLnNob3coKQotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb2xvcmJ1dHRvbiA9
IEJ1dHRvbkZpbGxDb2xvcihzZWxmLl9hY3Rpdml0eSkKLSAgICAgICAgICAgIGNvbG9yYnV0dG9u
LnNob3dfYWxsKCkKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGxh
YmVsKQotICAgICAgICAgICAgaGJveC5wYWNrX3N0YXJ0KGNvbG9yYnV0dG9uKQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAjcGFsZXR0ZS5hY3Rpb25fYmFyLnBhY2tfc3RhcnQobGFiZWwpCi0g
ICAgICAgICAgICAjcGFsZXR0ZS5hY3Rpb25fYmFyLnBhY2tfc3RhcnQoY29sb3JidXR0b24pCi0g
ICAgICAgICAgICBjb250ZW50X2JveC5wYWNrX3N0YXJ0KGhib3gpCi0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNvbG9yYnV0dG9uLmNvbm5lY3RfYWZ0ZXIoJ2NvbG9yLXNldCcsIHNlbGYuX29u
X2NvbG9yX3NldCwgc2VsZi5fVE9PTF9QT0xZR09OKQogICAgICAgICBpZiB0b29sWyduYW1lJ10g
aXMgc2VsZi5fVE9PTF9NQVJRVUVFX1JFQ1RBTkdVTEFSWyduYW1lJ106CiAgICAgICAgICAgICAj
IENyZWF0aW5nIGEgQ2hlY2tCdXR0b24gbmFtZWQgIkZpbGwiLgogICAgICAgICAgICAga2VlcF9h
c3BlY3RfY2hlY2tidXR0b24gPSBndGsuQ2hlY2tCdXR0b24oXygnS2VlcCBhc3BlY3QnKSkKQEAg
LTU0NSwxMyArNDk3LDYgQEAgY2xhc3MgVG9vbHNUb29sYmFyKGd0ay5Ub29sYmFyKToKICAgICAg
ICAgI3NldHRpbmcgY3Vyc29yOiBNb3ZlZCB0byBBcmVhCiAgICAgICAgIAogICAgICAgICAKLSAg
ICBkZWYgX29uX2ZpbGxfY2hlY2tidXR0b25fdG9nZ2xlZChzZWxmLCBjaGVja2J1dHRvbiwgYnV0
dG9uPU5vbmUsIHRvb2w9Tm9uZSk6Ci0gICAgICAgIGxvZ2dpbmcuZGVidWcoJ0NoZWNrYnV0dG9u
IGlzIEFjdGl2ZTogJXMnLCBjaGVja2J1dHRvbi5nZXRfYWN0aXZlKCkgKQotICAgICAgICAKLSAg
ICAgICAgIyBOZXcgbWV0aG9kIGZvciBzZXR0aW5nIHRvb2xzCi0gICAgICAgICNzZWxmLl9hY3Rp
dml0eS5hcmVhLmZpbGwgPSBjaGVja2J1dHRvbi5nZXRfYWN0aXZlKCkKLSAgICAgICAgdG9vbFsn
ZmlsbCddID0gY2hlY2tidXR0b24uZ2V0X2FjdGl2ZSgpCi0gICAgICAgIHNlbGYuc2V0X3Rvb2wo
dG9vbD10b29sKQogICAgICAgICAKICMgICAgIGRlZiBfb25fZmlsbF9jaGVja2J1dHRvbl9tYXAo
c2VsZiwgY2hlY2tidXR0b24sIGRhdGE9Tm9uZSk6CiAjICAgICAgICAgIiIiCkBAIC03MzQsNiAr
Njc5LDE3IEBAIGNsYXNzIFNoYXBlc1Rvb2xiYXIoZ3RrLlRvb2xiYXIpOgogICAgICAgICAnZmls
bCcgICAgICAgICAgOiBUcnVlLAogICAgICAgICAndmVydGljZXMnICAgICAgOiBOb25lCiAgICAg
fQorCisgICAgX1RPT0xfUE9MWUdPTiA9IHsKKyAgICAgICAgJ25hbWUnICAgICAgICAgIDogJ3Bv
bHlnb24nLAorICAgICAgICAnbGluZSBzaXplJyAgICAgOiAyLAorICAgICAgICAnZmlsbCBjb2xv
cicgICAgOiBOb25lLAorICAgICAgICAnc3Ryb2tlIGNvbG9yJyAgOiBOb25lLAorICAgICAgICAn
bGluZSBzaGFwZScgICAgOiAnY2lyY2xlJywKKyAgICAgICAgJ2ZpbGwnICAgICAgICAgIDogVHJ1
ZSwKKyAgICAgICAgJ3ZlcnRpY2VzJyAgICAgIDogTm9uZQorICAgIH0KKwogICAgIAogICAgICMj
VGhlIENvbnN0cnVjdG9yCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFjdGl2aXR5KToKQEAgLTc4
Miw2ICs3MzgsMTQgQEAgY2xhc3MgU2hhcGVzVG9vbGJhcihndGsuVG9vbGJhcik6CiAgICAgICAg
ICAgICBzZWxmLl9jb25maWd1cmVfcGFsZXR0ZV9zaGFwZV9saW5lKCkKICAgICAgICAgZXhjZXB0
OgogICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnQ291bGQgbm90IGNyZWF0ZSBwYWxldHRlIGZv
ciBTaGFwZSBMaW5lJykKKworICAgICAgICBzZWxmLl90b29sX3BvbHlnb24gPSBUb29sQnV0dG9u
KCd0b29sLXBvbHlnb24nKQorICAgICAgICBzZWxmLmluc2VydChzZWxmLl90b29sX3BvbHlnb24s
IC0xKQorICAgICAgICBzZWxmLl90b29sX3BvbHlnb24uc2V0X3Rvb2x0aXAoXygnRnJlZSBmb3Jt
JykpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9zaW1wbGVfcGFsZXR0
ZShzZWxmLl90b29sX3BvbHlnb24sIHNlbGYuX1RPT0xfUE9MWUdPTikKKyAgICAgICAgZXhjZXB0
OgorICAgICAgICAgICAgbG9nZ2luZy5kZWJ1ZygnQ291bGQgbm90IGNyZWF0ZSBwYWxldHRlIGZv
ciB0b29sIFBvbHlnb24nKQogICAgICAgICAKICAgICAgICAgc2VsZi5fc2hhcGVfcG9seWdvbiA9
IFRvb2xCdXR0b24oJ3Rvb2wtc2hhcGUtcG9seWdvbicpCiAgICAgICAgIHNlbGYuaW5zZXJ0KHNl
bGYuX3NoYXBlX3BvbHlnb24sIC0xKQpAQCAtODUzLDYgKzgxNyw3IEBAIGNsYXNzIFNoYXBlc1Rv
b2xiYXIoZ3RrLlRvb2xiYXIpOgogICAgICAgICBzZWxmLl9zaGFwZV9hcnJvdy5jb25uZWN0KCdj
bGlja2VkJywgc2VsZi5zZXRfdG9vbCwgc2VsZi5fU0hBUEVfQVJST1cpCiAgICAgICAgIHNlbGYu
X3NoYXBlX2VsbGlwc2UuY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuc2V0X3Rvb2wsIHNlbGYuX1NI
QVBFX0VMTElQU0UpCiAgICAgICAgICNzZWxmLl9zaGFwZV9mcmVlZm9ybS5jb25uZWN0KCdjbGlj
a2VkJywgc2VsZi5zZXRfdG9vbCwgc2VsZi5fU0hBUEVfRlJFRUZPUk0pCisgICAgICAgIHNlbGYu
X3Rvb2xfcG9seWdvbi5jb25uZWN0KCdjbGlja2VkJywgc2VsZi5zZXRfdG9vbCwgc2VsZi5fVE9P
TF9QT0xZR09OKQogICAgICAgICBzZWxmLl9zaGFwZV9oZWFydC5jb25uZWN0KCdjbGlja2VkJywg
c2VsZi5zZXRfdG9vbCwgc2VsZi5fU0hBUEVfSEVBUlQpCiAgICAgICAgIHNlbGYuX3NoYXBlX2xp
bmUuY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYuc2V0X3Rvb2wsIHNlbGYuX1NIQVBFX0xJTkUpCiAg
ICAgICAgIHNlbGYuX3NoYXBlX3BhcmFsbGVsb2dyYW0uY29ubmVjdCgnY2xpY2tlZCcsIHNlbGYu
c2V0X3Rvb2wsIHNlbGYuX1NIQVBFX1BBUkFMTEVMT0dSQU0pCkBAIC05MzQsNiArODk5LDEzIEBA
IGNsYXNzIFNoYXBlc1Rvb2xiYXIoZ3RrLlRvb2xiYXIpOgogICAgICAgICAKICAgICAgICAgc3Bp
bi5jb25uZWN0KCd2YWx1ZS1jaGFuZ2VkJywgc2VsZi5fb25fdmVydGljZXNfdmFsdWVfY2hhbmdl
ZCwgc2VsZi5fU0hBUEVfUE9MWUdPTikKICAgICAgICAgCisgICAgZGVmIF9vbl9maWxsX2NoZWNr
YnV0dG9uX3RvZ2dsZWQoc2VsZiwgY2hlY2tidXR0b24sIGJ1dHRvbj1Ob25lLCB0b29sPU5vbmUp
OgorICAgICAgICBsb2dnaW5nLmRlYnVnKCdDaGVja2J1dHRvbiBpcyBBY3RpdmU6ICVzJywgY2hl
Y2tidXR0b24uZ2V0X2FjdGl2ZSgpICkKKyAgICAgICAgCisgICAgICAgICMgTmV3IG1ldGhvZCBm
b3Igc2V0dGluZyB0b29scworICAgICAgICAjc2VsZi5fYWN0aXZpdHkuYXJlYS5maWxsID0gY2hl
Y2tidXR0b24uZ2V0X2FjdGl2ZSgpCisgICAgICAgIHRvb2xbJ2ZpbGwnXSA9IGNoZWNrYnV0dG9u
LmdldF9hY3RpdmUoKQorICAgICAgICBzZWxmLnNldF90b29sKHRvb2w9dG9vbCkKICAgICAgICAg
CiAgICAgZGVmIF9jb25maWd1cmVfcGFsZXR0ZV9zaGFwZV9oZWFydChzZWxmKToKICAgICAgICAg
bG9nZ2luZy5kZWJ1ZygnQ3JlYXRpbmcgcGFsZXR0ZSB0byBzaGFwZSBoZWFydCcpCkBAIC05ODAs
NiArOTUyLDkgQEAgY2xhc3MgU2hhcGVzVG9vbGJhcihndGsuVG9vbGJhcik6CiAgICAgICAgIHBh
bGV0dGUuY29udGVudF9ib3gucGFja19zdGFydChoYm94KQogICAgICAgICAKICAgICAgICAgc3Bp
bi5jb25uZWN0KCd2YWx1ZS1jaGFuZ2VkJywgc2VsZi5fb25fdmVydGljZXNfdmFsdWVfY2hhbmdl
ZCwgc2VsZi5fU0hBUEVfU1RBUikKKworICAgICAgICAgICAgCisKICAgICAKICAgICBkZWYgX2Nv
bmZpZ3VyZV9wYWxldHRlX3NoYXBlX3RyYXBlem9pZChzZWxmKToKICAgICAgICAgbG9nZ2luZy5k
ZWJ1ZygnQ3JlYXRpbmcgcGFsZXR0ZSB0byBzaGFwZSB0cmFwZXpvaWQnKQpAQCAtMTAzOSw2ICsx
MDE0LDE4IEBAIGNsYXNzIFNoYXBlc1Rvb2xiYXIoZ3RrLlRvb2xiYXIpOgogICAgICAgICBwYWxl
dHRlLmNvbnRlbnRfYm94LnBhY2tfc3RhcnQoaGJveCkKICAgICAgICAgCiAgICAgICAgIHNpemVf
c3BpbmJ1dHRvbi5jb25uZWN0KCd2YWx1ZS1jaGFuZ2VkJywgc2VsZi5fb25fbGluZV9zaXplX3Zh
bHVlX2NoYW5nZWQsIHRvb2wpCisKKyAgICAgICAgIyBVc2VyIGlzIGFibGUgdG8gZmlsbCBvciBu
b3QgYSBwb2x5Z29uLCBhbmQgY2hvb3NlIGl0cyBmaWxsIGNvbG9yCisgICAgICAgIGlmIHRvb2xb
J25hbWUnXSBpcyBzZWxmLl9UT09MX1BPTFlHT05bJ25hbWUnXToKKyAgICAgICAgICAgICMgQ3Jl
YXRpbmcgYSBDaGVja0J1dHRvbiBuYW1lZCAiRmlsbCIuCisgICAgICAgICAgICBmaWxsX2NoZWNr
YnV0dG9uID0gZ3RrLkNoZWNrQnV0dG9uKF8oJ0ZpbGwnKSkKKyAgICAgICAgICAgIGZpbGxfY2hl
Y2tidXR0b24uc2hvdygpCisgICAgICAgICAgICBmaWxsX2NoZWNrYnV0dG9uLnNldF9hY3RpdmUo
c2VsZi5fVE9PTF9QT0xZR09OWydmaWxsJ10pCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZp
bGxfY2hlY2tidXR0b24uY29ubmVjdCgndG9nZ2xlZCcsIHNlbGYuX29uX2ZpbGxfY2hlY2tidXR0
b25fdG9nZ2xlZCwgd2lkZ2V0LCBzZWxmLl9UT09MX1BPTFlHT04pCisgICAgICAgICAgICAKKyAg
ICAgICAgICAgICNwYWxldHRlLnNldF9jb250ZW50KGZpbGxfY2hlY2tidXR0b24pCisgICAgICAg
ICAgICBwYWxldHRlLmFjdGlvbl9iYXIucGFja19zdGFydChmaWxsX2NoZWNrYnV0dG9uKQogICAg
IAogICAgIAogICAgIGRlZiBfY29uZmlndXJlX3BhbGV0dGVfc2hhcGVfbGluZShzZWxmKToKLS0g
CjEuNi42LjEKCg==
--000e0cdf19b499cc6e04873a7c81--


More information about the Sugar-devel mailing list