Index: src/lib/elm_slider.c
===================================================================
--- src/lib/elm_slider.c	(revision 72454)
+++ src/lib/elm_slider.c	(working copy)
@@ -11,6 +11,8 @@ struct _Elm_Slider_Smart_Data
    Elm_Layout_Smart_Data base;
 
    Evas_Object          *spacer;
+   Evas_Object          *popup;
+   Evas_Object          *popup_base;
    Ecore_Timer          *delay;
 
    const char           *units;
@@ -182,25 +184,24 @@ _units_set(Evas_Object *obj)
 static void
 _indicator_set(Evas_Object *obj)
 {
+   char *buf = NULL;
+
    ELM_SLIDER_DATA_GET(obj, sd);
 
    if (sd->indicator_format_func)
-     {
-        char *buf;
+     buf = sd->indicator_format_func(sd->val);
 
-        buf = sd->indicator_format_func(sd->val);
-        elm_layout_text_set(obj, "elm.dragable.slider:elm.indicator", buf);
-
-        if (sd->indicator_format_free) sd->indicator_format_free(buf);
-     }
    else if (sd->indicator)
      {
-        char buf[1024];
+        buf = alloca(128);
+        snprintf(buf, 128, sd->indicator, sd->val);
+     }
 
-        snprintf(buf, sizeof(buf), sd->indicator, sd->val);
-        elm_layout_text_set(obj, "elm.dragable.slider:elm.indicator", buf);
-     }
-   else elm_layout_text_set(obj, "elm.dragable.slider:elm.indicator", NULL);
+   elm_layout_text_set(obj, "elm.dragable.slider:elm.indicator", buf);
+   edje_object_part_text_set(sd->popup, "elm.text", buf);
+
+   if ((sd->indicator_format_func) && (sd->indicator_format_free))
+     sd->indicator_format_free(buf);
 }
 
 static void
@@ -396,6 +397,8 @@ _elm_slider_smart_theme(Evas_Object *obj)
    if (sd->inverted)
      elm_layout_signal_emit(obj, "elm,state,inverted,on", "elm");
 
+   _elm_theme_object_set(obj, sd->popup, "slider", "indicator_popup", elm_object_style_get(obj));
+
    _visuals_refresh(obj);
 
    edje_object_message_signal_process(ELM_WIDGET_DATA(sd)->resize_obj);
@@ -455,6 +458,13 @@ _spacer_down_cb(void *data,
      button_x, button_y);
    _slider_update(data);
    evas_object_smart_callback_call(data, SIG_DRAG_START, NULL);
+
+   if (sd->indicator_show)
+     {
+        evas_object_geometry_get(sd->popup_base, &x, &y, NULL, NULL);
+        evas_object_move(sd->popup, x, y);
+        evas_object_show(sd->popup);
+     }
    elm_layout_signal_emit(data, "elm,state,indicator,show", "elm");
 }
 
@@ -497,6 +507,7 @@ _spacer_move_cb(void *data,
                   elm_widget_scroll_freeze_pop(data);
                   sd->frozen = EINA_FALSE;
                }
+             evas_object_hide(sd->popup);
              elm_layout_signal_emit(data, "elm,state,indicator,hide", "elm");
              elm_slider_value_set(data, sd->val2);
              return;
@@ -519,6 +530,9 @@ _spacer_move_cb(void *data,
           button_x, button_y);
 
         _slider_update(data);
+
+        evas_object_geometry_get(sd->popup_base, &x, &y, NULL, NULL);
+        evas_object_move(sd->popup, x, y);
      }
 }
 
@@ -541,6 +555,7 @@ _spacer_up_cb(void *data,
         elm_widget_scroll_freeze_pop(data);
         sd->frozen = EINA_FALSE;
      }
+   evas_object_hide(sd->popup);
    elm_layout_signal_emit(data, "elm,state,indicator,hide", "elm");
 }
 
@@ -607,6 +622,14 @@ _elm_slider_smart_add(Evas_Object *obj)
    evas_object_pass_events_set(priv->spacer, EINA_TRUE);
    elm_layout_content_set(obj, "elm.swallow.bar", priv->spacer);
 
+   priv->popup_base = evas_object_rectangle_add(evas_object_evas_get(obj));
+   evas_object_color_set(priv->popup_base, 0, 0, 0, 0);
+   evas_object_pass_events_set(priv->popup_base, EINA_TRUE);
+   elm_layout_content_set(obj, "elm.swallow.popup", priv->popup_base);
+
+   priv->popup = edje_object_add(evas_object_evas_get(obj));
+   _elm_theme_object_set(obj, priv->popup, "slider", "indicator_popup", "default");
+
    evas_object_event_callback_add
      (priv->spacer, EVAS_CALLBACK_MOUSE_DOWN, _spacer_down_cb, obj);
    evas_object_event_callback_add
Index: data/themes/widgets/slider.edc
===================================================================
--- data/themes/widgets/slider.edc	(revision 72454)
+++ data/themes/widgets/slider.edc	(working copy)
@@ -358,7 +358,7 @@ group { name: "elm/slider/horizontal/default";
       }
       part { name: "elm.dragable.slider";
          type: GROUP;
-         source: "elm/slider/horizontal/indicator/default";
+         source: "elm/slider/indicator/horizontal/default";
          mouse_events: 1;
          repeat_events: 1;
          scale: 1;
@@ -382,6 +382,22 @@ group { name: "elm/slider/horizontal/default";
             color: 255 0 0 100;
          }
       }
+      part { name: "elm.swallow.popup";
+         type: SWALLOW;
+         description { state: "default" 0.0;
+            min: 0 1;
+            align: 0.5 1.0;
+            fixed: 1 1;
+            rel1 {
+               relative: 0.5 0.5;
+               to: "elm.dragable.slider";
+            }
+            rel2 {
+               relative: 0.5 1.0;
+               to: "elm.dragable.slider";
+            }
+         }
+      }
       part { name: "disabler";
          type: RECT;
          description { state: "default" 0.0;
@@ -856,7 +872,7 @@ group { name: "elm/slider/vertical/default";
       }
       part { name: "elm.dragable.slider";
          type: GROUP;
-         source: "elm/slider/vertical/indicator/default";
+         source: "elm/slider/indicator/vertical/default";
          mouse_events: 1;
          repeat_events: 1;
          scale: 1;
@@ -880,6 +896,22 @@ group { name: "elm/slider/vertical/default";
             color: 0 0 0 0;
          }
       }
+      part { name: "elm.swallow.popup";
+         type: SWALLOW;
+         description { state: "default" 0.0;
+            min: 0 1;
+            align: 0.5 1.0;
+            fixed: 1 1;
+            rel1 {
+               relative: 0.5 0.0;
+               to: "elm.dragable.slider";
+            }
+            rel2 {
+               relative: 0.5 0.0;
+               to: "elm.dragable.slider";
+            }
+         }
+      }
       part { name: "disabler";
          type: RECT;
          description { state: "default" 0.0;
@@ -1057,55 +1089,16 @@ group { name: "elm/slider/vertical/default";
       }
    }
 }
-group { name: "elm/slider/horizontal/indicator/default";
-   alias: "elm/slider/horizontal/indicator/disabled";
-   alias: "elm/slider/vertical/indicator/default";
-   alias: "elm/slider/vertical/indicator/disabled";
+group { name: "elm/slider/indicator/horizontal/default";
+   alias: "elm/slider/indicator/horizontal/disabled";
+   alias: "elm/slider/indicator/vertical/default";
+   alias: "elm/slider/indicator/vertical/disabled";
    images {
       image: "sl_bt_0.png" COMP;
       image: "sl_bt_1.png" COMP;
       image: "sl_bt_2.png" COMP;
       image: "sl_bt_3.png" COMP;
-      image: "sl_bt2_0_0.png" COMP;
-      image: "sl_bt2_0_1.png" COMP;
-      image: "sl_bt2_0_2.png" COMP;
-      image: "sl_bt2_1.png" COMP;
-      image: "sl_bt2_2.png" COMP;
    }
-   script {
-      public value_hide = 0;
-      public set_value_show() {
-         set_int(value_hide, 0);
-      }
-      public set_value_hide() {
-         set_int(value_hide, 1);
-      }
-      public thumb_down() {
-         if (get_int(value_hide) == 1) {
-            set_state(PART:"elm.indicator", "default", 0.0);
-            set_state(PART:"button3", "default", 0.0);
-            set_state(PART:"button4", "default", 0.0);
-            set_state(PART:"button5", "default", 0.0);
-            set_state(PART:"button6", "default", 0.0);
-            set_state(PART:"button7", "default", 0.0);
-         } else {
-            set_state(PART:"elm.indicator", "visible", 0.0);
-            set_state(PART:"button3", "visible", 0.0);
-            set_state(PART:"button4", "visible", 0.0);
-            set_state(PART:"button5", "visible", 0.0);
-            set_state(PART:"button6", "visible", 0.0);
-            set_state(PART:"button7", "visible", 0.0);
-         }
-      }
-      public thumb_up() {
-         set_state(PART:"elm.indicator", "default", 0.0);
-         set_state(PART:"button3", "default", 0.0);
-         set_state(PART:"button4", "default", 0.0);
-         set_state(PART:"button5", "default", 0.0);
-         set_state(PART:"button6", "default", 0.0);
-         set_state(PART:"button7", "default", 0.0);
-      }
-   }
    parts {
       part { name: "button_events";
          type: RECT;
@@ -1137,6 +1130,10 @@ group { name: "elm/slider/vertical/default";
                border: 5 5 5 10;
             }
          }
+         description { state: "hide" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
       }
       part { name: "button1";
          mouse_events: 0;
@@ -1152,6 +1149,10 @@ group { name: "elm/slider/vertical/default";
                border: 5 5 5 0;
             }
          }
+         description { state: "hide" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
       }
       part { name: "button2";
          mouse_events: 0;
@@ -1164,16 +1165,150 @@ group { name: "elm/slider/vertical/default";
             }
             fill.smooth: 0;
          }
+         description { state: "hide" 0.0;
+            inherit: "default" 0.0;
+            visible: 1;
+         }
       }
+      part { name: "elm.indicator";
+         type: TEXT;
+         mouse_events: 0;
+         effect: SOFT_SHADOW;
+         scale: 1;
+         description { state: "default" 0.0;
+            visible: 0;
+            fixed: 1 1;
+            align: 0.5 1.0;
+            rel1 {
+               to: "button0";
+               relative: 0.0 -0.25;
+               offset: 0 -1;
+            }
+            rel2 {
+               to_x: "button0";
+               relative: 1.0 -0.25;
+               offset: -1 -1;
+            }
+            color: 224 224 224 255;
+            color3: 0 0 0 64;
+            text {
+               font:     "Sans,Edje-Vera";
+               size:     10;
+               min:      1 1;
+            }
+         }
+         description { state: "hide" 0.0;
+            inherit: "default" 0.0;
+            visible: 0;
+         }
+      }
+   }
+   programs {
+      program {
+         name:    "go_disabled";
+         signal:  "elm,state,disabled";
+         source:  "elm";
+         action:  STATE_SET "disabled" 0.0;
+         target:  "button0";
+      }
+      program {
+         name:    "go_enabled";
+         signal:  "elm,state,enabled";
+         source:  "elm";
+         action:  STATE_SET "default" 0.0;
+         target:  "button0";
+      }
+      program {
+         name:    "show_indicator";
+         signal:  "elm,state,indicator,show";
+         source:  "elm";
+         action:  STATE_SET "default" 0.0;
+         target:  "button0";
+         target:  "button1";
+         target:  "button2";
+         target:  "elm.indicator";
+      }
+      program {
+         name:    "hide_indicator";
+         signal:  "elm,state,indicator,hide";
+         source:  "elm";
+         action:  STATE_SET "hide" 0.0;
+         target:  "button0";
+         target:  "button1";
+         target:  "button2";
+         target:  "elm.indicator";
+      }
+   }
+}
+
+group { name: "elm/slider/indicator_popup/default";
+   images {
+      image: "sl_bt_0.png" COMP;
+      image: "sl_bt_1.png" COMP;
+      image: "sl_bt_2.png" COMP;
+      image: "sl_bt_3.png" COMP;
+      image: "sl_bt2_0_0.png" COMP;
+      image: "sl_bt2_0_1.png" COMP;
+      image: "sl_bt2_0_2.png" COMP;
+      image: "sl_bt2_1.png" COMP;
+      image: "sl_bt2_2.png" COMP;
+   }
+   parts {
+      part { name: "button0";
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            max: 17 999;
+            min: 17 24;
+            image {
+               normal: "sl_bt_0.png";
+               border: 5 5 5 10;
+            }
+            fill.smooth: 0;
+         }
+         description { state: "disabled" 0.0;
+            inherit: "default" 0.0;
+            image {
+               normal: "sl_bt_3.png";
+               border: 5 5 5 10;
+            }
+         }
+      }
+      part { name: "button1";
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            rel1.to: "button0";
+            rel2 {
+               to: "button0";
+               relative: 1.0 0.5;
+               offset: -1 -5;
+            }
+            image {
+               normal: "sl_bt_1.png";
+               border: 5 5 5 0;
+            }
+         }
+      }
+      part { name: "button2";
+         mouse_events: 0;
+         description { state: "default" 0.0;
+            rel1.to: "button0";
+            rel2.to: "button0";
+            image {
+               normal: "sl_bt_2.png";
+               border: 5 5 5 10;
+            }
+            fill.smooth: 0;
+         }
+      }
       part { name: "button3";
          mouse_events: 0;
          description { state: "default" 0.0;
             fixed: 1 1;
-            visible: 0;
             min: 8 32;
             align: 1.0 0.5;
             rel1 {
-               to_x: "elm.indicator";
+               to_x: "elm.text";
                to_y: "button4";
                relative: 0.0 0.0;
                offset: -7 0;
@@ -1189,20 +1324,15 @@ group { name: "elm/slider/vertical/default";
             }
             fill.smooth: 0;
          }
-         description { state: "visible" 0.0;
-            inherit: "default" 0.0;
-            visible: 1;
-         }
       }
       part { name: "button4";
          mouse_events: 0;
          description { state: "default" 0.0;
-            visible: 0;
             max: 15 999;
             min: 15 32;
             rel1 {
                to_x: "button0";
-               to_y: "elm.indicator";
+               to_y: "elm.text";
                offset: 0 0;
             }
             rel2.to: "button0";
@@ -1212,16 +1342,11 @@ group { name: "elm/slider/vertical/default";
             }
             fill.smooth: 0;
          }
-         description { state: "visible" 0.0;
-            inherit: "default" 0.0;
-            visible: 1;
-         }
       }
       part { name: "button5";
          mouse_events: 0;
          description { state: "default" 0.0;
             fixed: 1 1;
-            visible: 0;
             min: 8 32;
             align: 0.0 0.5;
             rel1 {
@@ -1230,7 +1355,7 @@ group { name: "elm/slider/vertical/default";
                offset: 0 0;
             }
             rel2 {
-               to_x: "elm.indicator";
+               to_x: "elm.text";
                to_y: "button4";
                relative: 1.0 1.0;
                offset: 6 -1;
@@ -1241,51 +1366,37 @@ group { name: "elm/slider/vertical/default";
             }
             fill.smooth: 0;
          }
-         description { state: "visible" 0.0;
-            inherit: "default" 0.0;
-            visible: 1;
-         }
       }
-      part { name: "elm.indicator";
+      part { name: "elm.text";
          type: TEXT;
          mouse_events: 0;
          effect: SOFT_SHADOW;
          scale: 1;
          description { state: "default" 0.0;
-            visible: 0;
             fixed: 1 1;
             align: 0.5 1.0;
             rel1 {
                to: "button0";
                relative: 0.0 -0.25;
-               offset: 0 0;
+               offset: 0 -1;
             }
             rel2 {
                to_x: "button0";
                relative: 1.0 -0.25;
-               offset: -1 0;
+               offset: -1 -1;
             }
             color: 224 224 224 255;
             color3: 0 0 0 64;
             text {
                font:     "Sans,Edje-Vera";
                size:     10;
-               min:      0 0;
-               align:    0.5 0.5;
+               min:      1 1;
             }
          }
-         description { state: "visible" 0.0;
-            inherit: "default" 0.0;
-            visible: 1;
-            text.min: 1 1;
-            rel1.offset: 0 -1;
-            rel2.offset: -1 -1;
-         }
       }
       part { name: "button6";
          mouse_events: 0;
          description { state: "default" 0.0;
-            visible: 0;
             rel1.to: "button3";
             rel2 {
                to: "button5";
@@ -1298,15 +1409,10 @@ group { name: "elm/slider/vertical/default";
             }
             fill.smooth: 0;
          }
-         description { state: "visible" 0.0;
-            inherit: "default" 0.0;
-            visible: 1;
-         }
       }
       part { name: "button7";
          mouse_events: 0;
          description { state: "default" 0.0;
-            visible: 0;
             rel1.to: "button3";
             rel2.to: "button5";
             image {
@@ -1316,70 +1422,6 @@ group { name: "elm/slider/vertical/default";
             }
             fill.smooth: 0;
          }
-         description { state: "visible" 0.0;
-            inherit: "default" 0.0;
-            visible: 1;
-         }
       }
    }
-   programs {
-      program { name: "set_val_show";
-         signal: "elm,state,val,show";
-         source: "elm";
-         script {
-            set_value_show();
-         }
-      }
-      program { name: "set_val_hide";
-         signal: "elm,state,val,hide";
-         source: "elm";
-         script {
-            set_value_hide();
-         }
-      }
-      program { name: "val_show";
-         signal: "mouse,down,*";
-         source: "button_events";
-         script {
-            thumb_down();
-         }
-      }
-      program { name: "val_hide";
-         signal: "mouse,up,*";
-         source: "button_events";
-         script {
-            thumb_up();
-         }
-      }
-      program { name: "indicator_show";
-         signal: "elm,state,indicator,show";
-         source: "elm";
-         script {
-            thumb_down();
-         }
-      }
-      program { name: "indicator_hide";
-         signal: "elm,state,indicator,hide";
-         source: "elm";
-         script {
-            thumb_up();
-         }
-      }
-      program {
-         name:    "go_disabled";
-         signal:  "elm,state,disabled";
-         source:  "elm";
-         action:  STATE_SET "disabled" 0.0;
-         target:  "button0";
-      }
-      program {
-         name:    "go_enabled";
-         signal:  "elm,state,enabled";
-         source:  "elm";
-         action:  STATE_SET "default" 0.0;
-         target:  "button0";
-      }
-   }
 }
-
-
