Index: src/lib/Makefile.am
===================================================================
--- src/lib/Makefile.am	(revision 68427)
+++ src/lib/Makefile.am	(working copy)
@@ -66,6 +66,7 @@ elm_calendar.h \
 elm_check.h \
 elm_clock.h \
 elm_cnp.h \
+elm_colorpalette.h \
 elm_colorselector.h \
 elm_config.h \
 elm_conform.h \
@@ -159,6 +160,7 @@ elm_calendar.c \
 elm_check.c \
 elm_clock.c \
 elm_cnp.c \
+elm_colorpalette.c \
 elm_colorselector.c \
 elm_config.c \
 elm_conform.c \
Index: src/lib/elm_colorpalette.c
===================================================================
--- src/lib/elm_colorpalette.c	(revision 0)
+++ src/lib/elm_colorpalette.c	(revision 0)
@@ -0,0 +1,317 @@
+#include <Elementary.h>
+#include "elm_priv.h"
+
+#define MAX_NUM_COLORS 30
+#define DEFAULT_HOR_PAD 10
+#define DEFAULT_VER_PAD 10
+
+typedef struct _Widget_Data Widget_Data;
+typedef struct _Elm_Color_Item Elm_Color_Item;
+typedef struct _Elm_Color_RGBA Elm_Color_RGBA;
+
+struct _Widget_Data
+{
+   Evas_Object *base;
+   Evas_Object *box;
+   Eina_List *items;
+   Ecore_Timer *longpress_timer;
+   Eina_Bool longpressed : 1;
+};
+
+struct _Elm_Color_Item
+{
+   ELM_WIDGET_ITEM;
+   Evas_Object *color_obj;
+   Elm_Color_RGBA *color;
+};
+
+struct _Elm_Color_RGBA
+{
+   unsigned int r;
+   unsigned int g;
+   unsigned int b;
+   unsigned int a;
+};
+
+static const char *widtype = NULL;
+static void _del_hook(Evas_Object *obj);
+static void _theme_hook(Evas_Object *obj);
+static void _sizing_eval(Evas_Object *obj);
+static void _item_highlight(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static void _item_unhighlight(void *data, Evas *e, Evas_Object *obj, void *event_info);
+static Eina_Bool _long_press(void *data);
+static Elm_Color_Item *_item_new(Evas_Object *obj);
+
+static const char SIG_COLOR_ITEM_SELECTED[] = "color,item,selected";
+static const char SIG_COLOR_ITEM_LONGPRESSED[] = "color,item,longpressed";
+static const Evas_Smart_Cb_Description _signals[] = {
+       {SIG_COLOR_ITEM_SELECTED, ""},
+       {SIG_COLOR_ITEM_LONGPRESSED, ""},
+       {NULL, NULL}
+};
+
+static void
+_del_hook(Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+
+   if (wd->longpress_timer) ecore_timer_del(wd->longpress_timer);
+   _remove_items(wd);
+   free(wd);
+}
+
+static void
+_theme_hook(Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   Eina_List *elist;
+   Elm_Color_Item *item;
+   if (!wd) return;
+
+   _elm_theme_object_set(obj, wd->base, "colorpalette", "base", elm_widget_style_get(obj));
+   EINA_LIST_FOREACH(wd->items, elist, item)
+     {
+        elm_layout_theme_set(VIEW(item), "colorpalette", "item", elm_widget_style_get(obj));
+        _elm_theme_object_set(obj, item->color_obj, "colorpalette", "item/color", elm_widget_style_get(obj));
+     }
+   _sizing_eval(obj);
+}
+
+static void
+_item_sizing_eval(Elm_Color_Item *item)
+{
+   Evas_Coord minw = -1, minh = -1;
+
+   if (!item) return;
+
+   elm_coords_finger_size_adjust(1, &minw, 1, &minh);
+   edje_object_size_min_restricted_calc(VIEW(item), &minw, &minh, minw,
+                                        minh);
+   evas_object_size_hint_min_set(VIEW(item), minw, minh);
+}
+
+static void
+_sizing_eval(Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
+   Evas_Coord w, h;
+   Eina_List *elist;
+   Elm_Color_Item *item;
+   if (!wd) return;
+
+   EINA_LIST_FOREACH(wd->items, elist, item)
+     {
+        _item_sizing_eval(item);
+     }
+   evas_object_size_hint_min_get(wd->box, &minw, &minh);
+   evas_object_size_hint_max_get(wd->box, &maxw, &maxh);
+   evas_object_size_hint_min_set(obj, minw, minh);
+   evas_object_size_hint_max_set(obj, maxw, maxh);
+   evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+   if (w < minw) w = minw;
+   if (h < minh) h = minh;
+   if ((maxw >= 0) && (w > maxw)) w = maxw;
+   if ((maxh >= 0) && (h > maxh)) h = maxh;
+   evas_object_resize(obj, w, h);
+}
+
+static Eina_Bool
+_long_press(void *data)
+{
+   Elm_Color_Item *item = (Elm_Color_Item *) data;
+   Widget_Data *wd = elm_widget_data_get(WIDGET(item));
+   if (!wd) return ECORE_CALLBACK_CANCEL;
+   wd->longpress_timer = NULL;
+   wd->longpressed = EINA_TRUE;
+   evas_object_smart_callback_call(WIDGET(item), SIG_COLOR_ITEM_LONGPRESSED, item);
+   return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_item_highlight(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Color_Item *item = (Elm_Color_Item *) data;
+   Evas_Event_Mouse_Down *ev = event_info;
+   if (!item) return;
+   Widget_Data *wd = elm_widget_data_get(WIDGET(item));
+   if (!wd) return;
+   if (ev->button != 1) return;
+   elm_object_signal_emit(VIEW(item), "elm,state,selected", "elm");
+   wd->longpressed = EINA_FALSE;
+   if (wd->longpress_timer) ecore_timer_del(wd->longpress_timer);
+   wd->longpress_timer = ecore_timer_add(_elm_config->longpress_timeout, _long_press, data);
+}
+
+static void
+_item_unhighlight(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Elm_Color_Item *item = (Elm_Color_Item *) data;
+   Evas_Event_Mouse_Down *ev = event_info;
+   if (!item) return;
+   Widget_Data *wd = elm_widget_data_get(WIDGET(item));
+   if (!wd) return;
+   if (ev->button != 1) return;
+   if (wd->longpress_timer)
+     {
+        ecore_timer_del(wd->longpress_timer);
+        wd->longpress_timer = NULL;
+     }
+   elm_object_signal_emit(VIEW(item), "elm,state,unselected", "elm");
+   if (!wd->longpressed)
+     evas_object_smart_callback_call(WIDGET(item), SIG_COLOR_ITEM_SELECTED, item);
+}
+
+static void
+_remove_items(Widget_Data *wd)
+{
+   Elm_Color_Item *item;
+
+   if (!wd->items) return;
+
+   EINA_LIST_FREE(wd->items, item)
+     {
+        free(item->color);
+        elm_widget_item_free(item);
+     }
+
+   wd->items = NULL;
+}
+
+static Elm_Color_Item*
+_item_new(Evas_Object *obj)
+{
+   Elm_Color_Item *item;
+   Widget_Data *wd;
+
+   wd = elm_widget_data_get(obj);
+   if (!wd) return NULL;
+
+   item = elm_widget_item_new(obj, Elm_Color_Item);
+   if (!item) return NULL;
+
+   VIEW(item) = elm_layout_add(obj);
+   elm_layout_theme_set(VIEW(item), "colorpalette", "item", elm_widget_style_get(obj));
+   evas_object_size_hint_weight_set(VIEW(item), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(VIEW(item), EVAS_HINT_FILL, EVAS_HINT_FILL);
+   item->color_obj = edje_object_add(evas_object_evas_get(obj));
+   _elm_theme_object_set(obj, item->color_obj, "colorpalette", "item/color", elm_widget_style_get(obj));
+   evas_object_size_hint_weight_set(item->color_obj, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(item->color_obj, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_event_callback_add(item->color_obj, EVAS_CALLBACK_MOUSE_DOWN, _item_highlight, item);
+   evas_object_event_callback_add(item->color_obj, EVAS_CALLBACK_MOUSE_UP, _item_unhighlight, item);
+   elm_object_part_content_set(VIEW(item), "color_obj", item->color_obj);
+   _item_sizing_eval(item);
+   evas_object_show(VIEW(item));
+
+   return item;
+}
+
+EAPI Evas_Object *
+elm_colorpalette_add(Evas_Object *parent)
+{
+   Evas_Object *obj = NULL;
+   Widget_Data *wd = NULL;
+   Evas *e;
+   const char *hpadstr, *vpadstr;
+   unsigned int h_pad = DEFAULT_HOR_PAD;
+   unsigned int v_pad = DEFAULT_VER_PAD;
+
+   ELM_WIDGET_STANDARD_SETUP(wd, Widget_Data, parent, e, obj, NULL);
+
+   ELM_SET_WIDTYPE(widtype, "colorpalette");
+   elm_widget_type_set(obj, "colorpalette");
+   elm_widget_sub_object_add(parent, obj);
+   elm_widget_data_set(obj, wd);
+   elm_widget_del_hook_set(obj, _del_hook);
+   elm_widget_theme_hook_set(obj, _theme_hook);
+   evas_object_smart_callbacks_descriptions_set(obj, _signals);
+
+   wd->base = edje_object_add(e);
+   _elm_theme_object_set(obj, wd->base, "colorpalette", "base", "default");
+   elm_widget_resize_object_set(obj, wd->base);
+
+   wd->box = elm_box_add(obj);
+   elm_box_layout_set(wd->box, evas_object_box_layout_flow_horizontal,
+                      NULL, NULL);
+   elm_box_horizontal_set(wd->box, EINA_TRUE);
+   evas_object_size_hint_weight_set(wd->box, EVAS_HINT_EXPAND,
+                                    0);
+   evas_object_size_hint_align_set(wd->box, EVAS_HINT_FILL, 0);
+   elm_widget_sub_object_add(obj, wd->box);
+   elm_box_homogeneous_set(wd->box, EINA_TRUE);
+   hpadstr = edje_object_data_get(wd->base, "horizontal_pad");
+   if (hpadstr) h_pad = atoi(hpadstr);
+   vpadstr = edje_object_data_get(wd->base, "vertical_pad");
+   if (vpadstr) v_pad = atoi(vpadstr);
+   elm_box_padding_set(wd->box, h_pad, v_pad);
+   elm_box_align_set(wd->box, 0.0, 0.5);
+   edje_object_part_swallow(wd->base, "palette", wd->box);
+   evas_object_show(wd->box);
+
+   _sizing_eval(obj);
+   return obj;
+}
+
+EAPI Elm_Object_Item *
+elm_colorpalette_color_add(Evas_Object *obj, unsigned int r, unsigned int g, unsigned int b, unsigned int a)
+{
+   Elm_Color_Item *item;
+   ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return NULL;
+   item = _item_new(obj);
+   if (!item) return NULL;
+   item->color = ELM_NEW(Elm_Color_RGBA);
+   if (!item->color) return NULL;
+   item->color->r = r;
+   item->color->g = g;
+   item->color->b = b;
+   item->color->a = a;
+   elm_box_pack_end(wd->box, VIEW(item));
+   evas_object_color_set(item->color_obj, item->color->r, item->color->g,
+                         item->color->b, item->color->a);
+   wd->items = eina_list_append(wd->items, item);
+   _sizing_eval(obj);
+   return (Elm_Object_Item *) item;
+}
+
+EAPI void
+elm_colorpalette_clear(Evas_Object *obj)
+{
+   ELM_CHECK_WIDTYPE(obj, widtype);
+   Widget_Data *wd = elm_widget_data_get(obj);
+   if (!wd) return;
+   _remove_items(wd);
+}
+
+EAPI void
+elm_colorpalette_item_color_get(const Elm_Object_Item *item, unsigned int *r, unsigned int *g,
+                                unsigned int *b, unsigned int *a)
+{
+   ELM_OBJ_ITEM_CHECK_OR_RETURN(item);
+   Elm_Color_Item *it;
+   it = (Elm_Color_Item *)item;
+   if (it)
+     {
+        *r = it->color->r;
+        *g = it->color->g;
+        *b = it->color->b;
+        *a = it->color->a;
+     }
+}
+
+EAPI void
+elm_colorpalette_item_color_set(Elm_Object_Item *item, unsigned int r, unsigned int g,
+                                unsigned int b, unsigned int a)
+{
+   ELM_OBJ_ITEM_CHECK_OR_RETURN(item);
+   Elm_Color_Item *it;
+   it = (Elm_Color_Item *)item;
+   it->color->r = r;
+   it->color->g = g;
+   it->color->b = b;
+   it->color->a = a;
+   evas_object_color_set(it->color_obj, it->color->r, it->color->g, it->color->b, it->color->a);
+}
Index: src/lib/elm_colorpalette.h
===================================================================
--- src/lib/elm_colorpalette.h	(revision 0)
+++ src/lib/elm_colorpalette.h	(revision 0)
@@ -0,0 +1,76 @@
+/**
+ * @defgroup Colorpalette Colorpalette
+ * @ingroup Elementary
+ *
+ * @image html img/widget/colorpalette/preview-00.png
+ * @image latex img/widget/colorpalette/preview-00.eps width=\textwidth
+ *
+ * A Colorpalette is a color selection widget. It allows application to set a series of colors
+ * The colors can be picked by user from the color set by clicking on individual color
+ * item.
+ *
+ * Smart callbacks one can listen to:
+ * - "color,item,selected" - When user clicks on color item. The event_info parameter of the callback
+ *   will be the selected color item.
+ * - "color,item,longpressed" - When user long presses on color item. The event info parameter
+ *   of the callback contains selected color item.
+ *
+ * Available styles for it:
+ * - @c "default"
+ *
+ * Follow through a complete example given below:
+ * @li @ref tutorial_colorpalette
+ *
+ */
+/**
+* Add a new colorpalette to the parent.
+*
+* @param parent The parent object
+* @return The new object or NULL if it cannot be created
+*
+* @ingroup Colorpalette
+*/
+EAPI Evas_Object             *elm_colorpalette_add(Evas_Object *parent);
+
+/**
+* Get ColorPalette item's color.
+*
+* @param item The ColorPalette item.
+* @return The Color pointer Elm_Color_RGBA
+*
+* @ingroup Colorpalette
+*/
+EAPI void                    elm_colorpalette_item_color_get(const Elm_Object_Item *item, unsigned int *r, unsigned int *g, unsigned int *b, unsigned int *a);
+
+/**
+* Set the ColorPalette item's color.
+*
+* @param item The ColorPalette item.
+* @param color The Color pointer Elm_Color_RGBA.
+*
+* @ingroup Colorpalette
+*/
+EAPI void                    elm_colorpalette_item_color_set(Elm_Object_Item *item, unsigned int r, unsigned int g, unsigned int b, unsigned int a);
+
+/**
+* Add a new coloritem to colorpalette.
+*
+* @param obj The Colorpalette object
+* @param r R color value
+* @param g G color value
+* @param b B color value
+* @param a A color value
+* @return The new Color Item.
+*
+* @ingroup Colorpalette
+*/
+EAPI Elm_Object_Item         *elm_colorpalette_color_add(Evas_Object *obj, unsigned int r, unsigned int g, unsigned int b, unsigned int a);
+
+/**
+* Clear the color items.
+*
+* @param obj The Colorpalette object
+*
+* @ingroup Colorpalette
+*/
+EAPI void                    elm_colorpalette_clear(Evas_Object *obj);
Index: src/lib/Elementary.h.in
===================================================================
--- src/lib/Elementary.h.in	(revision 68427)
+++ src/lib/Elementary.h.in	(working copy)
@@ -185,6 +185,7 @@ EAPI extern Elm_Version *elm_version;
 #include <elm_check.h>
 #include <elm_clock.h>
 #include <elm_cnp.h> // XXX: comments in elm_cnp.h
+#include <elm_colorpalette.h>
 #include <elm_colorselector.h>
 #include <elm_config.h>
 #include <elm_conform.h>
Index: src/bin/test.c
===================================================================
--- src/bin/test.c	(revision 68427)
+++ src/bin/test.c	(working copy)
@@ -147,6 +147,7 @@ void test_focus2(void *data, Evas_Object *obj, voi
 void test_focus3(void *data, Evas_Object *obj, void *event_info);
 void test_flipselector(void *data, Evas_Object *obj, void *event_info);
 void test_diskselector(void *data, Evas_Object *obj, void *event_info);
+void test_colorpalette(void *data, Evas_Object *obj, void *event_info);
 void test_colorselector(void *data, Evas_Object *obj, void *event_info);
 void test_ctxpopup(void *data, Evas_Object *obj, void *event_info);
 void test_bubble(void *data, Evas_Object *obj, void *event_info);
@@ -461,6 +462,7 @@ add_tests:
    ADD_TEST(NULL, "Selectors", "Actionslider", test_actionslider);
    ADD_TEST(NULL, "Selectors", "Menu", test_menu);
    ADD_TEST(NULL, "Selectors", "Disk Selector", test_diskselector);
+   ADD_TEST(NULL, "Selectors", "Color Palette", test_colorpalette);
    ADD_TEST(NULL, "Selectors", "Color Selector", test_colorselector);
    ADD_TEST(NULL, "Selectors", "Segment Control", test_segment_control);
    ADD_TEST(NULL, "Selectors", "Hoversel", test_hoversel);
Index: src/bin/Makefile.am
===================================================================
--- src/bin/Makefile.am	(revision 68427)
+++ src/bin/Makefile.am	(working copy)
@@ -44,6 +44,7 @@ test_calendar.c \
 test_check.c \
 test_clock.c \
 test_cnp.c \
+test_colorpalette.c \
 test_colorselector.c \
 test_conform.c \
 test_ctxpopup.c \
Index: src/bin/test_colorpalette.c
===================================================================
--- src/bin/test_colorpalette.c	(revision 0)
+++ src/bin/test_colorpalette.c	(revision 0)
@@ -0,0 +1,85 @@
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+#ifndef ELM_LIB_QUICKLAUNCH
+
+static void
+_colorpalette_clicked_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info)
+{
+   unsigned int r = 0, g = 0, b = 0 ,a = 0;
+   Elm_Object_Item *color_it = (Elm_Object_Item *) event_info;
+   elm_colorpalette_item_color_get(color_it, &r, &g, &b, &a);
+   evas_object_color_set((Evas_Object *) data, r, g, b , a);
+}
+
+static void
+_colorpalette_longpressed_cb(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info)
+{
+   unsigned int r = 0,g = 0,b = 0 ,a = 0;
+   Elm_Object_Item *color_it = (Elm_Object_Item *) event_info;
+   elm_colorpalette_item_color_get(color_it, &r, &g, &b, &a);
+   printf("\ncolor = %d-%d-%d-%d\n", r, g, b, a);
+}
+
+void
+test_colorpalette(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+   Evas_Object *win, *bg, *bx, *cp, *fr, *re;
+
+   win = elm_win_add(NULL, "colorpalette", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Color Palette");
+   elm_win_autodel_set(win, EINA_TRUE);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_color_set(bg, 255, 255, 255, 255);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   fr = elm_frame_add(win);
+   evas_object_size_hint_weight_set(fr, 1.0, 0.5);
+   evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_text_set(fr, "Color View");
+   elm_box_pack_end(bx, fr);
+   evas_object_show(fr);
+
+   re = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_show(re);
+   elm_object_content_set(fr, re);
+
+   fr = elm_frame_add(win);
+   evas_object_size_hint_weight_set(fr, 1.0, 0.5);
+   evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_text_set(fr, "Color Palette");
+   elm_box_pack_end(bx, fr);
+   evas_object_show(fr);
+
+   cp = elm_colorpalette_add(win);
+   elm_colorpalette_color_add(cp, 255, 90, 18, 255);
+   elm_colorpalette_color_add(cp, 255, 213, 0, 255);
+   elm_colorpalette_color_add(cp, 146, 255, 11, 255);
+   elm_colorpalette_color_add(cp, 9, 186, 10, 255);
+   elm_colorpalette_color_add(cp, 86, 201, 242, 255);
+   elm_colorpalette_color_add(cp, 18, 83, 128, 255);
+   elm_colorpalette_color_add(cp, 140, 53, 238, 255);
+   elm_colorpalette_color_add(cp, 255, 145, 145, 255);
+   elm_colorpalette_color_add(cp, 255, 59, 119, 255);
+   elm_colorpalette_color_add(cp, 133, 100, 69, 255);
+
+   evas_object_size_hint_weight_set(cp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(cp, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_content_set(fr, cp);
+   evas_object_show(cp);
+   evas_object_smart_callback_add(cp, "color,item,selected", _colorpalette_clicked_cb, re);
+   evas_object_smart_callback_add(cp, "color,item,longpressed", _colorpalette_longpressed_cb, re);
+
+   evas_object_resize(win, 300, 300);
+   evas_object_show(win);
+}
+#endif
Index: src/edje_externals/elm_colorpalette.c
===================================================================
--- src/edje_externals/elm_colorpalette.c	(revision 0)
+++ src/edje_externals/elm_colorpalette.c	(revision 0)
@@ -0,0 +1,68 @@
+#include "private.h"
+
+typedef struct _Elm_Params_Colorpalette
+{
+   Elm_Params base;
+} Elm_Params_Colorpalette;
+
+static void
+external_colorpalette_state_set(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const void *from_params, const void *to_params, float pos __UNUSED__)
+{
+   const Elm_Params_Colorpalette *p;
+
+   if (to_params) p = to_params;
+   else if (from_params) p = from_params;
+   else return;
+}
+
+static Eina_Bool
+external_colorpalette_param_set(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Edje_External_Param *param)
+{
+   ERR("unknown parameter '%s' of type '%s'",
+       param->name, edje_external_param_type_str(param->type));
+
+   return EINA_FALSE;
+}
+
+static Eina_Bool
+external_colorpalette_param_get(void *data __UNUSED__, const Evas_Object *obj __UNUSED__, Edje_External_Param *param)
+{
+   ERR("unknown parameter '%s' of type '%s'",
+       param->name, edje_external_param_type_str(param->type));
+
+   return EINA_FALSE;
+}
+
+static void *
+external_colorpalette_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params __UNUSED__)
+{
+   Elm_Params_Colorpalette *mem;
+
+   mem = calloc(1, sizeof(Elm_Params_Colorpalette));
+   if (!mem)
+     return NULL;
+
+   return mem;
+}
+
+static Evas_Object *external_colorpalette_content_get(void *data __UNUSED__,
+          const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
+{
+   ERR("No content.");
+   return NULL;
+}
+
+static void
+external_colorpalette_params_free(void *params)
+{
+   Elm_Params_Colorpalette *mem = params;
+   free(mem);
+}
+
+static Edje_External_Param_Info external_colorpalette_params[] = {
+   DEFINE_EXTERNAL_COMMON_PARAMS,
+   EDJE_EXTERNAL_PARAM_INFO_SENTINEL
+};
+
+DEFINE_EXTERNAL_ICON_ADD(colorpalette, "colorpalette");
+DEFINE_EXTERNAL_TYPE_SIMPLE(colorpalette, "Colorpalette");
Index: src/edje_externals/Makefile.am
===================================================================
--- src/edje_externals/Makefile.am	(revision 68427)
+++ src/edje_externals/Makefile.am	(working copy)
@@ -37,6 +37,7 @@ elm_button.c \
 elm_calendar.c \
 elm_check.c \
 elm_clock.c \
+elm_colorpalette.c \
 elm_entry.c \
 elm_fileselector.c \
 elm_fileselector_button.c \
Index: src/examples/colorpalette_example_01.c
===================================================================
--- src/examples/colorpalette_example_01.c	(revision 0)
+++ src/examples/colorpalette_example_01.c	(revision 0)
@@ -0,0 +1,72 @@
+//Compile with:
+//gcc -g `pkg-config --cflags --libs elementary` colorpalette_example_01.c -o colorpalette_example_01
+
+#include <Elementary.h>
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+static void _change_color(void *data, Evas_Object *obj, void *event_info);
+
+EAPI_MAIN int
+elm_main(int argc, char **argv)
+{
+   Evas_Object *win, *bg, *cp, *bx, *fr;
+
+   win = elm_win_add(NULL, "color palette", ELM_WIN_BASIC);
+   elm_win_title_set(win, "Color Palette");
+   elm_win_autodel_set(win, EINA_TRUE);
+   elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_color_set(bg, 255, 255, 255, 255);
+   evas_object_show(bg);
+
+   bx = elm_box_add(win);
+   evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_win_resize_object_add(win, bx);
+   evas_object_show(bx);
+
+   fr = elm_frame_add(win);
+   evas_object_size_hint_weight_set(fr, 1.0, 0.5);
+   evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_text_set(fr, "Color Palette");
+   elm_box_pack_end(bx, fr);
+   evas_object_show(fr);
+
+   cp = elm_colorpalette_add(win);
+   elm_colorpalette_color_add(cp, 255, 90, 18, 255);
+   elm_colorpalette_color_add(cp, 255, 213, 0, 255);
+   elm_colorpalette_color_add(cp, 146, 255, 11, 255);
+   elm_colorpalette_color_add(cp, 9, 186, 10, 255);
+   elm_colorpalette_color_add(cp, 86, 201, 242, 255);
+   elm_colorpalette_color_add(cp, 18, 83, 128, 255);
+   elm_colorpalette_color_add(cp, 140, 53, 238, 255);
+   elm_colorpalette_color_add(cp, 255, 145, 145, 255);
+   elm_colorpalette_color_add(cp, 255, 59, 119, 255);
+   elm_colorpalette_color_add(cp, 133, 100, 69, 255);
+   evas_object_size_hint_weight_set(cp, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(cp, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_object_content_set(fr, cp);
+   evas_object_show(cp);
+   evas_object_smart_callback_add(cp, "color,item,selected", _change_color, NULL);
+
+   evas_object_resize(win, 300, 150);
+   evas_object_show(win);
+
+   elm_run();
+
+   return 0;
+}
+ELM_MAIN()
+
+static void
+_change_color(void *data, Evas_Object *obj, void *event_info)
+{
+   unsigned int r = 0, g = 0, b = 0 ,a = 0;
+   Elm_Object_Item *color_it = (Elm_Object_Item *) event_info;
+   elm_colorpalette_item_color_get(color_it, &r, &g, &b, &a);
+   printf("\ncolor selected RGBA = %d-%d-%d-%d\n", r, g, b, a);
+}
Index: src/examples/Makefile.am
===================================================================
--- src/examples/Makefile.am	(revision 68427)
+++ src/examples/Makefile.am	(working copy)
@@ -39,6 +39,7 @@ SRCS = \
 	button_example_01.c \
 	check_example_01.c \
 	colorselector_example_01.c \
+	colorpalette_example_01.c \
 	frame_example_01.c \
 	transit_example_01.c \
 	transit_example_02.c \
@@ -148,6 +149,7 @@ examples_PROGRAMS += \
 	button_example_01 \
 	check_example_01 \
 	colorselector_example_01 \
+	colorpalette_example_01 \
 	frame_example_01 \
 	transit_example_01 \
 	transit_example_02 \
@@ -242,6 +244,7 @@ SCREENSHOTS = \
 	button_example_01:button_01.png:0.0 \
 	check_example_01:check_example_01.png:0.0 \
 	colorselector_example_01:colorselector_example_01.png:0.0 \
+	colorpalette_example_01:colorpalette_example_01.png:0.0 \
 	animator_example_01:animator_example_01.png:0.2 \
 	animator_example_01:animator_example_02.png:0.5 \
 	animator_example_01:animator_example_03.png:0.9 \
Index: doc/widgets/widget_preview_colorpalette.c
===================================================================
--- doc/widgets/widget_preview_colorpalette.c	(revision 0)
+++ doc/widgets/widget_preview_colorpalette.c	(revision 0)
@@ -0,0 +1,18 @@
+#include "widget_preview_tmpl_head.c"
+
+Evas_Object *o = elm_colorpalette_add(win);
+elm_colorpalette_color_add(o, 255, 90, 18, 255);
+elm_colorpalette_color_add(o, 255, 213, 0, 255);
+elm_colorpalette_color_add(o, 146, 255, 11, 255);
+elm_colorpalette_color_add(o, 9, 186, 10, 255);
+elm_colorpalette_color_add(o, 86, 201, 242, 255);
+elm_colorpalette_color_add(o, 18, 83, 128, 255);
+elm_colorpalette_color_add(o, 140, 53, 238, 255);
+elm_colorpalette_color_add(o, 255, 145, 145, 255);
+elm_colorpalette_color_add(o, 255, 59, 119, 255);
+elm_colorpalette_color_add(o, 133, 100, 69, 255);
+evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+elm_win_resize_object_add(win, o);
+evas_object_show(o);
+
+#include "widget_preview_tmpl_foot.c"
Index: doc/widgets/Makefile.am
===================================================================
--- doc/widgets/Makefile.am	(revision 68427)
+++ doc/widgets/Makefile.am	(working copy)
@@ -36,6 +36,7 @@ widget_preview_fileselector_button1 \
 widget_preview_fileselector_button2 \
 widget_preview_fileselector_button3 \
 widget_preview_colorselector \
+widget_preview_colorpalette \
 widget_preview_layout \
 widget_preview_list \
 widget_preview_segment_control \
@@ -115,6 +116,7 @@ EXTRA_DIST = \
 	widget_preview_spinner.c \
 	widget_preview_clock.c \
 	widget_preview_colorselector.c \
+	widget_preview_colorpalette.c \
 	widget_preview_conformant.c \
 	widget_preview_slider.c \
 	widget_preview_panes.c \
Index: doc/examples.dox
===================================================================
--- doc/examples.dox	(revision 68427)
+++ doc/examples.dox	(working copy)
@@ -5400,6 +5400,40 @@
  */
 
 /**
+ * @page tutorial_colorpalette Color Palette example
+ * @dontinclude colorpalette_example_01.c
+ *
+ * This example shows how to change the color using a color
+ * palette. We aren't going to explain a lot of the code since it's the
+ * usual setup code:
+ * @until evas_object_show(bg)
+ *
+ * Now that we have a window with background we can create
+ * our colorpalette.
+ * @until elm_colorpalette_add
+ * 
+ * Now colors can be added to color palette, color palette returns
+ * color item.
+ * @until evas_object_show(cp)
+ *
+ * Next we ask to be notified whenever the color item is selected:
+ * @until color,item,selected
+ *
+ * We add some more code to the usual setup code:
+ * @until ELM_MAIN()
+ *
+ * And now get to the callback that prints the selected color:
+ * @until }
+ *
+ * This example will look like this:
+ *
+ * @image html screenshots/colorpalette_example_01.png
+ * @image latex screenshots/colorpalette_example_01.eps width=\textwidth
+ *
+ * @example colorpalette_example_01.c
+ */
+ 
+/**
  * @page slideshow_example Slideshow widget example
  *
  * This application is aimed to exemplify the slideshow widget. It
Index: doc/Makefile.am
===================================================================
--- doc/Makefile.am	(revision 68427)
+++ doc/Makefile.am	(working copy)
@@ -25,6 +25,7 @@ WGT_PREVIEW = \
 	bubble:preview-01.png:widget_preview_bubble2:160:50 \
 	bubble:preview-02.png:widget_preview_bubble3:160:50 \
 	colorselector:preview-00.png:widget_preview_colorselector:160:200 \
+	colorpalette:preview-00.png:widget_preview_colorpalette:250:110 \
 	layout:preview-00.png:widget_preview_layout:200:160 \
 	conformant:preview-00.png:widget_preview_conformant:200:400 \
 	list:preview-00.png:widget_preview_list:200:200 \
Index: doc/index.doxy
===================================================================
--- doc/index.doxy	(revision 68427)
+++ doc/index.doxy	(working copy)
@@ -79,6 +79,10 @@
  *
  * @image html img/widget/colorselector/preview-00.png
  * @image latex img/widget/colorselector/preview-00.eps
+ * @li @ref Colorpalette
+ *
+ * @image html img/widget/colorpalette/preview-00.png
+ * @image latex img/widget/colorpalette/preview-00.eps
  * @li @ref Ctxpopup
  *
  * @image html img/widget/ctxpopup/preview-00.png
Index: data/themes/widgets/colorpalette.edc
===================================================================
--- data/themes/widgets/colorpalette.edc	(revision 0)
+++ data/themes/widgets/colorpalette.edc	(revision 0)
@@ -0,0 +1,143 @@
+///////////////////////////////////////////////////////////////////////////////
+group {
+   name: "elm/colorpalette/base/default";
+   data.item: "horizontal_pad" "10";
+   data.item: "vertical_pad" "10";
+   parts {
+      part {
+         name: "bg_rect";
+         type: RECT;
+         scale: 1;
+         mouse_events: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+         }
+      }
+      part {
+         name: "padding_rect_u";
+         type: RECT;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            min: 0 5;
+            fixed: 0 1;
+            rel2.relative: 1.0 0.0;
+            align: 0.5 0.0;
+         }
+      }
+      part {
+         name: "padding_rect_d";
+         type: RECT;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            min: 0 5;
+            fixed: 0 1;
+            rel1.relative: 0.0 1.0;
+            align: 0.5 1.0;
+         }
+      }
+      part {
+         name: "bg";
+         type: RECT;
+         scale: 1;
+         mouse_events: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            rel1 {
+               relative: 0.0 1.0;
+               to_x: "bg_rect";
+               to_y: "padding_rect_u";
+            }
+            rel2 {
+               relative: 1.0 0.0;
+               to_x: "bg_rect";
+               to_y: "padding_rect_d";
+            }
+         }
+      }
+      part {
+         name: "palette";
+         type: SWALLOW;
+         description { state: "default" 0.0;
+            rel1.to: "bg";
+            rel2.to: "bg";
+         }
+      }
+   }
+}
+
+group {
+   name: "elm/colorpalette/item/default";
+   parts {
+      part {
+         name: "color_bg";
+         type: RECT;
+         mouse_events: 1;
+         scale: 1;
+         description { state: "default" 0.0;
+            min: 40 40;
+         }
+      }
+      part {
+         name: "color_obj";
+         type: SWALLOW;
+         mouse_events: 1;
+         scale: 1;
+         description { state: "default" 0.0;
+            rel1.to: "color_bg";
+            rel2.to: "color_bg";
+         }
+      }
+      part {
+         name: "focus_color";
+         mouse_events:1;
+         scale: 1;
+         type: RECT;
+         description {
+            state: "default" 0.0;
+            visible: 0;
+            min: 38 38;
+            rel1.to: "color_bg";
+            rel2.to: "color_bg";
+            color: 255 255 255 80;
+         }
+         description {
+            state: "focused" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
+      }
+   }
+   programs {
+      program {
+         name: "item_focus";
+         source: "elm";
+         signal: "elm,state,selected";
+         action: STATE_SET "focused" 0.0;
+         target: "focus_color";
+      }
+      program {
+         name: "item_unfocus";
+         source: "elm";
+         signal: "elm,state,unselected";
+         action: STATE_SET "default" 0.0;
+         target: "focus_color";
+      }
+   }
+}
+
+group {
+   name: "elm/colorpalette/item/color/default";
+   parts {
+      part {
+         name: "color_rect";
+         type: RECT;
+         mouse_events: 1;
+         scale: 1;
+         description{
+            state: "default" 0.0;
+         }
+      }
+   }
+}
Index: data/themes/Makefile.am
===================================================================
--- data/themes/Makefile.am	(revision 68427)
+++ data/themes/Makefile.am	(working copy)
@@ -42,6 +42,7 @@ widgets/clock.edc \
 widgets/icon.edc \
 widgets/photocam.edc \
 widgets/toggle.edc \
+widgets/colorpalette.edc \
 widgets/colorselector.edc \
 widgets/index.edc \
 widgets/photo.edc \
Index: data/themes/default.edc
===================================================================
--- data/themes/default.edc	(revision 68427)
+++ data/themes/default.edc	(working copy)
@@ -365,6 +365,7 @@ collections {
 #include "widgets/video.edc"
 #include "widgets/naviframe.edc"
 #include "widgets/multibuttonentry.edc"
+#include "widgets/colorpalette.edc"
 #include "ews.edc"
 #include "widgets/pointer.edc"
 }
