Hi,
I needed to "swallow" an elm_player in my clip preparation program. In
the process, I completed the mouse support for the player widget.
1. Modified in player.edc:
      incorporated a volume attenuator using a diskelector.
      added a check-box for mute
      added a label widget 'billboard' to display length-time_remaing info
2. Modified in elm_widget_player.h:
      instance data
3. Modified in elc_player.c:
     The stop button now opens a fileselector. Cancel continues with
the current media and a selection switches media.
     Enabled label for slider to numerically indicate play position
     Placed to the right of forward button - a 'billboard', volume
attenuator, mute checkbox.
Tested (r83733) the player widget to be complete w.r.t. to mouse
control - load a new file, seek forward/backward, rewind, lower
volume, mute and a blinking billboard.
Not touched is the keyboard interface - which seems to be duplicated
in the video widget. The "space" button used to play/pause media gets
confused with the selection of currently focused widget.
Problem not resolved (no clue) is that when the player is left in play
mode and I switch to the VT, play stops after some seconds with
gstreamer/xine engines. E17 vanishes off 'top'. Resuming X causes a
rush of frames before stablising.
Patch, applicable after the '3 small corrections' set posted to r83733 follows.

Arvind
---
diff -uprN a/data/themes/widgets/player.edc b/data/themes/widgets/player.edc
--- a/data/themes/widgets/player.edc    2012-07-25 16:41:51.000000000 +0530
+++ b/data/themes/widgets/player.edc    2013-02-06 12:24:53.000000000 +0530
@@ -4,12 +4,26 @@ group {
    min: 20 10;

    parts {
+      part { name: "media_player/background"; type: RECT;
+            description {  state: "default" 0.0;
+               color: 240 255 240 64;
+                       rel1 {
+                          relative: 0.0 0.0;
+                          offset: 2 2;
+                       }
+                       rel2 {
+                          relative: 1.0 1.0;
+                          offset: -2 -2;
+                       }
+                }
+         }
       part { name: "media_player/slider"; type: SWALLOW;
          description { state: "default" 0.0;
             fixed: 0 1;
+            rel1.relative: 0.1 0.0;
             rel1.offset: 2 2;
-            rel2.offset: 2 -3;
-            rel2.relative: 1.0 0.0;
+            rel2.offset: -2 -3;
+            rel2.relative: 0.90 0.0;
             align: 0.5 0.0;
          }
       }
@@ -19,13 +33,13 @@ group {
             min: BSZ BSZ;
             align: 0.0 1.0;
             rel1 {
-               to_y: "media_player/slider";
-               offset: 2 2;
+               to: "media_player/slider";
+               offset: -20 -4;
                relative: 0.0 1.0;
             }
             rel2 {
                relative: 0.0 1.0;
-               offset: 2 -3;
+               offset: 42 -3;
             }
          }
       }
@@ -125,13 +139,61 @@ group {
       }
       part { name: "media_player/forward"; type: SWALLOW;
          description { state: "default" 0.0;
+            fixed: 1 1;
             min: BSZ BSZ;
             align: 0.0 1.0;
             rel1 { to: "media_player/next";
                offset: 2 0;
                relative: 1.0 0.0;
             }
-            rel2.offset: -3 -3;
+            rel2 { to: "media_player/next";
+               offset: 2 -1;
+               relative: 1.0 1.0;
+            }
+         }
+      }
+      part { name: "media_player/billboard"; type: SWALLOW;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            rel1 {
+                          to_x: "media_player/volume";
+               offset: -140 0;
+               relative: 0.0 0.5;
+            }
+            rel2 { to_x: "media_player/volume";
+               offset: -40 -3;
+               relative: 0.0 1.0;
+            }
+         }
+      }
+      part { name: "media_player/volume"; type: SWALLOW;
+         description { state: "default" 0.0;
+            fixed: 0 1;
+            rel1 {
+                          to_y: "media_player/slider";
+                          offset: 10 -3;
+               relative: 0.60 1.0;
+            }
+            rel2 {
+                          to_x: "media_player/mute";
+                          offset: -15 -3;
+               relative: 0.0 1.0;
+            }
+            align: 0.5 0.0;
+         }
+      }
+      part { name: "media_player/mute"; type: SWALLOW;
+         description { state: "default" 0.0;
+            fixed: 1 1;
+            align: 0.5 0.0;
+            rel1 { to_y: "media_player/slider";
+                          offset: -65 -3;
+               relative: 0.95 1.0;
+            }
+            rel2 {
+                          offset: -25 -3;
+               relative: 0.95 1.0;
+                       }
          }
       }
    }
@@ -142,6 +204,11 @@ group {
          after: "pause/0";
       }
       program {
+         signal: "elm,player,stop";
+         source: "elm";
+         after: "play/0";
+      }
+      program {
          signal: "elm,player,play";
          source: "elm";
          after: "play/0";
diff -uprN a/src/lib/elc_player.c b/src/lib/elc_player.c
--- a/src/lib/elc_player.c      2013-02-06 23:22:03.000000000 +0530
+++ b/src/lib/elc_player.c      2013-02-06 22:48:22.000000000 +0530
@@ -34,6 +34,15 @@ static const Evas_Smart_Cb_Description _
 };

 #ifdef HAVE_EMOTION
+static void _stop(void *, Evas_Object *, void *);
+static void _pause(void *, Evas_Object *, void *);
+static void _play(void *, Evas_Object *, void *);
+static void _forward(void *, Evas_Object *, void *);
+static void _prev(void *, Evas_Object *, void *);
+static void _rewind(void *, Evas_Object *, void *);
+static void _next(void *, Evas_Object *, void *);
+static void _mute_audio(void *, Evas_Object *, void *);
+
 static void
 _elm_player_smart_event(Eo *obj, void *_pd, va_list *list)
 {
@@ -47,60 +56,72 @@ _elm_player_smart_event(Eo *obj, void *_
    Evas_Event_Key_Down *ev = event_info;

    Elm_Player_Smart_Data *sd = _pd;
+   Elm_Object_Item *itm;

    if (elm_widget_disabled_get(obj)) return;
    if (type != EVAS_CALLBACK_KEY_DOWN) return;
    if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
    if (!sd->video) return;

+   if ((!strcmp(ev->keyname, "Up")) ||
+       ((!strcmp(ev->keyname, "KP_Up")) && (!ev->string)))
+     {
+                itm = elm_diskselector_selected_item_get(sd->volume);
+            itm = elm_diskselector_item_prev_get(itm);
+                if (itm)
+                   elm_diskselector_item_selected_set(itm, EINA_TRUE);
+        } else
+   if ((!strcmp(ev->keyname, "Down")) ||
+       ((!strcmp(ev->keyname, "KP_Down")) && (!ev->string)))
+     {
+                itm = elm_diskselector_selected_item_get(sd->volume);
+            itm = elm_diskselector_item_next_get(itm);
+                if (itm)
+                   elm_diskselector_item_selected_set(itm, EINA_TRUE);
+        } else
    if ((!strcmp(ev->keyname, "Left")) ||
        ((!strcmp(ev->keyname, "KP_Left")) && (!ev->string)))
      {
-        double current, last;
-
-        current = elm_video_play_position_get(sd->video);
-        last = elm_video_play_length_get(sd->video);
-
-        if (current < last)
-          {
-             current -= last / 100;
-             elm_video_play_position_set(sd->video, current);
-          }
-
-        ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
-        if (ret) *ret = EINA_TRUE;
-        return;
-     }
+           _prev(obj, NULL, NULL);
+     } else
    if ((!strcmp(ev->keyname, "Right")) ||
        ((!strcmp(ev->keyname, "KP_Right")) && (!ev->string)))
      {
-        double current, last;
-
-        current = elm_video_play_position_get(sd->video);
-        last = elm_video_play_length_get(sd->video);
-
-        if (current > 0)
-          {
-             current += last / 100;
-             if (current < 0) current = 0;
-             elm_video_play_position_set(sd->video, current);
-          }
-
-        ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
-        if (ret) *ret = EINA_TRUE;
-        return;
-     }
-   if (!strcmp(ev->keyname, "space"))
+           _forward(obj, NULL, NULL);
+     } else
+   if (!strcmp(ev->keyname, "p")) /* somebody is processing "space" */
      {
         if (elm_video_is_playing_get(sd->video))
-          elm_video_pause(sd->video);
+          _pause(obj, NULL, NULL);
         else
-          elm_video_play(sd->video);
-        ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
-        if (ret) *ret = EINA_TRUE;
-        return;
+          _play(obj, NULL, NULL);
+     } else
+   if (!strcmp(ev->keyname, "m"))
+     {
+        elm_check_state_set(sd->mute,
+           !elm_check_state_get(sd->mute));
+     _mute_audio(obj, NULL, NULL);
+     } else
+   if (!strcmp(ev->keyname, "s") || /* for Stop */
+       !strcmp(ev->keyname, "f") || /* for File */
+       !strcmp(ev->keyname, "n"))   /* for Next */
+     {
+        _stop(obj, NULL, NULL);
+     } else
+   if (!strcmp(ev->keyname, "bracketleft"))
+     {
+           _rewind(obj, NULL, NULL);
+        } else
+   if (!strcmp(ev->keyname, "bracketright"))
+     {
+           _next(obj, NULL, NULL);
+        } else {
+        fprintf(stderr, "keyname: '%s' not handled\n", ev->keyname);
+               return;
      }
-   fprintf(stderr, "keyname: '%s' not handle\n", ev->keyname);
+   ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
+   if (ret) *ret = EINA_TRUE;
+   fprintf(stderr, "keyname: '%s' handled\n", ev->keyname);
 }


@@ -153,6 +174,53 @@ _elm_player_smart_sizing_eval(Eo *obj, v
 }

 static void
+_update_volume(void *data,
+               Evas_Object *disksel __UNUSED__,
+               void *event_info)
+{
+ Elm_Object_Item *item = event_info;
+ const char *key;
+ const double  *pval;
+
+   ELM_PLAYER_DATA_GET(data, sd);
+
+   key = elm_object_item_part_text_get(item, NULL);
+   pval = eina_hash_find(sd->volume_vals, key);
+   elm_video_audio_level_set (sd->video, *pval);
+}
+
+static void
+_mute_audio(void *data,
+               Evas_Object *obj __UNUSED__,
+               void *event_info __UNUSED__)
+{
+   ELM_PLAYER_DATA_GET(data, sd);
+   elm_video_audio_mute_set
+      (sd->video, elm_check_state_get(sd->mute));
+}
+
+static char * _double_to_time(double);
+
+static void
+_show_billboard(void *data,
+               Evas_Object *obj __UNUSED__,
+               void *event_info __UNUSED__)
+{
+   char *msg;
+
+   ELM_PLAYER_DATA_GET(data, sd);
+
+   strcpy(sd->msg, _double_to_time(sd->length));
+   msg = strrchr(sd->msg, '.');
+   *msg = 0;
+   if (sd->frames == 30) {
+    strcat(msg, "  ");
+    strcat(msg, _double_to_time(sd->length - sd->pos));
+   }
+   elm_object_text_set(sd->billboard, sd->msg);
+}
+
+static void
 _update_slider(void *data,
                Evas_Object *obj __UNUSED__,
                void *event_info __UNUSED__)
@@ -163,12 +231,38 @@ _update_slider(void *data,
    ELM_PLAYER_DATA_GET(data, sd);

    seekable = elm_video_is_seekable_get(sd->video);
+   if (seekable == sd->disabled)
+    elm_object_disabled_set(sd->slider, !seekable);
+
    length = elm_video_play_length_get(sd->video);
-   pos = elm_video_play_position_get(sd->video);

-   elm_object_disabled_set(sd->slider, !seekable);
-   elm_slider_min_max_set(sd->slider, 0, length);
-   elm_slider_value_set(sd->slider, pos);
+   if (sd->length != length) {
+       sd->length = length;
+       elm_slider_min_max_set(sd->slider, 0, length);
+   }
+
+   if (sd->frames < 0) {
+       pos = elm_video_play_position_get(sd->video);
+       if (fabs(sd->pos - pos) >= 0.1) {
+               sd->pos = pos;
+               sd->frames = 30;
+               elm_slider_value_set(sd->slider, pos);
+       }
+   }
+
+   if(sd->frames == 10 || sd->frames == 30)
+    _show_billboard(data, NULL, NULL);
+}
+
+static void
+_frame_decoded_cb(void *data,
+               Evas_Object *obj __UNUSED__,
+               void *event_info __UNUSED__)
+{
+   ELM_PLAYER_DATA_GET(data, sd);
+   /* do not update slider on every frame */
+   if (--sd->frames < 0)
+       _update_slider(data, obj, event_info);
 }

 static void
@@ -176,9 +270,24 @@ _update_position(void *data,
                  Evas_Object *obj __UNUSED__,
                  void *event_info __UNUSED__)
 {
+   /*
+    * called wnenever the value of the slider is changed.
+       *  - irespective of user drags
+       *    or
+       *    internal increments larger than the slider resolution.
+       * the 2nd case causes an inadvertent repositioning of stream
+       * which some engines respond to (xine).
+       * This is a feedback loop that needs to be broken.
+       */
+   double pos;
+
    ELM_PLAYER_DATA_GET(data, sd);

-   elm_video_play_position_set(sd->video, elm_slider_value_get(sd->slider));
+   pos = elm_slider_value_get(sd->slider);
+   if (fabs(sd->pos - pos) >= 0.1) {
+       elm_video_play_position_set(sd->video, pos);
+       sd->pos = pos;
+   }
 }

 static void
@@ -240,6 +349,8 @@ _pause(void *data,

    elm_layout_signal_emit(data, "elm,button,pause", "elm");
    evas_object_smart_callback_call(data, SIG_PAUSE_CLICKED, NULL);
+   sd->frames = 30;
+   _show_billboard(data, NULL, NULL);
 }

 static void
@@ -285,12 +396,86 @@ _rewind(void *data,
 }

 static void
+_file_chosen(void *data,
+             Evas_Object *obj __UNUSED__,
+                        void *event_info)
+{
+ const char *file = (const char *) event_info;
+ Evas_Object *del;
+
+   ELM_PLAYER_DATA_GET(data, sd);
+
+   if (file)   {
+       eina_stringshare_replace(&sd->path, file);
+    elm_video_file_set(sd->video, file);
+    elm_video_play_position_set(sd->video, 0);
+   }
+   elm_video_play(sd->video);
+
+   if (sd->inwin) {
+    evas_object_hide(sd->filesel_win);
+    evas_object_lower(sd->filesel_win);
+   }
+   else {
+    del = sd->filesel_win;
+       sd->filesel_win = NULL;
+       sd->filesel = NULL;
+       evas_object_del(del);
+   }
+}
+
+static void
+_new_fileselector(Evas_Object *obj)
+{
+   ELM_PLAYER_DATA_GET(obj, sd);
+
+   sd->filesel = elm_fileselector_add(sd->filesel_win);
+   elm_fileselector_is_save_set(sd->filesel, EINA_FALSE);
+   elm_fileselector_mode_set(sd->filesel, ELM_FILESELECTOR_LIST); /*
GRID is unprintable */
+   elm_fileselector_buttons_ok_cancel_set(sd->filesel, EINA_TRUE);
+   elm_fileselector_path_set(sd->filesel, eina_stringshare_add(sd->path));
+   evas_object_size_hint_weight_set(sd->filesel, EVAS_HINT_EXPAND,
EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(sd->filesel, EVAS_HINT_FILL,
EVAS_HINT_FILL);
+   evas_object_smart_callback_add(sd->filesel, "done", _file_chosen, obj);
+}
+
+static void
+_new_win(Evas_Object *obj)
+{
+ Evas_Object *bg;
+
+   ELM_PLAYER_DATA_GET(obj, sd);
+   sd->filesel_win = elm_win_add(NULL, "player_fileselector",
ELM_WIN_DIALOG_BASIC);
+   elm_win_title_set(sd->filesel_win, "Clip Selection");
+   elm_win_autodel_set(sd->filesel_win, EINA_TRUE);
+   evas_object_smart_callback_add(sd->filesel_win, "delete,request",
_file_chosen, obj);
+
+   bg = elm_bg_add(sd->filesel_win);
+   elm_win_resize_object_add(sd->filesel_win, bg);
+   evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_show(bg);
+
+   evas_object_resize(sd->filesel_win, 400, 400);
+   _new_fileselector(obj);
+}
+
+static void
 _stop(void *data,
       Evas_Object *obj __UNUSED__,
       void *event_info __UNUSED__)
 {
+   ELM_PLAYER_DATA_GET(data, sd);
+
    elm_layout_signal_emit(data, "elm,button,stop", "elm");
    evas_object_smart_callback_call(data, SIG_STOP_CLICKED, NULL);
+
+   if (sd->inwin)
+       elm_win_inwin_activate(sd->filesel_win);
+   else {
+    _new_win(data);
+    elm_win_resize_object_add(sd->filesel_win, sd->filesel);
+   }
+   elm_object_text_set(sd->billboard, "Play Stopped");
 }

 static void
@@ -307,11 +492,15 @@ _play_finished(void *data,
                void *event_info __UNUSED__)
 {
    elm_layout_signal_emit(data, "elm,player,pause", "elm");
+   ELM_PLAYER_DATA_GET(data, sd);
+   elm_object_text_set(sd->billboard, "Play Finished");
 }

 static void
 _on_video_del(Elm_Player_Smart_Data *sd)
 {
+   elm_object_disabled_set(sd->mute, EINA_TRUE);
+   elm_object_disabled_set(sd->volume, EINA_TRUE);
    elm_object_disabled_set(sd->slider, EINA_TRUE);
    elm_object_disabled_set(sd->forward, EINA_TRUE);
    elm_object_disabled_set(sd->info, EINA_TRUE);
@@ -367,22 +556,23 @@ static char *
 _double_to_time(double value)
 {
    char buf[256];
-   int ph, pm, ps, pf;
+   unsigned ph, pm, ps;
+   signed pf;

-   ph = value / 3600;
-   pm = value / 60 - (ph * 60);
-   ps = value - (pm * 60);
-   pf = value * 100 - (ps * 100) - (pm * 60 * 100) - (ph * 60 * 60 * 100);
+   ps = value;
+   ph = ps / 3600;
+   ps = ps - (ph * 3600);
+   pm = ps / 60;
+   ps = ps - (pm * 60);
+   pf = (value * 10) - (10 * ((ph * 3600) + (pm * 60) + ps));
+   if (pf < 0 )
+    pf = 0;
+   else
+    if (pf >= 10) /* over/under flows do occur */
+          pf = 9;

-   if (ph)
-     snprintf(buf, sizeof(buf), "%i:%02i:%02i.%02i",
+   snprintf(buf, sizeof(buf), "%u:%02u:%02u.%i",
               ph, pm, ps, pf);
-   else if (pm)
-     snprintf(buf, sizeof(buf), "%02i:%02i.%02i",
-              pm, ps, pf);
-   else
-     snprintf(buf, sizeof(buf), "%02i.%02i",
-              ps, pf);

    return (char *)eina_stringshare_add(buf);
 }
@@ -393,6 +583,28 @@ _str_free(char *data)
    eina_stringshare_del(data);
 }

+static void
+_new_fileselector_inwin(Elm_Player_Smart_Data *pd, Eo *obj)
+{
+ Evas_Object *parent;
+
+   parent = pd->video;
+   while((parent) && (strcmp(elm_widget_type_get(parent), "elm_win")))
+       parent = elm_object_parent_widget_get(parent);
+   if (parent) {
+    pd->inwin = EINA_TRUE;
+       pd->filesel_win = elm_win_inwin_add(parent);
+    evas_object_hide(pd->filesel_win);
+    evas_object_lower(pd->filesel_win);
+    _new_fileselector(obj);
+    elm_win_inwin_content_set(pd->filesel_win, pd->filesel);
+   }
+   else {
+    pd->inwin = EINA_FALSE;
+    pd->filesel_win = NULL;
+   }
+}
+
 /* a video object is never parented by a player one, just tracked.
  * treating this special case here and delegating other objects to own
  * layout */
@@ -427,6 +639,7 @@ _elm_player_smart_content_set(Eo *obj, v

    if (!content) goto end;

+   _new_fileselector_inwin(sd, obj);
    elm_object_disabled_set(sd->slider, EINA_FALSE);
    elm_object_disabled_set(sd->forward, EINA_FALSE);
    elm_object_disabled_set(sd->info, EINA_FALSE);
@@ -436,6 +649,7 @@ _elm_player_smart_content_set(Eo *obj, v
    elm_object_disabled_set(sd->prev, EINA_FALSE);
    elm_object_disabled_set(sd->rewind, EINA_FALSE);
    elm_object_disabled_set(sd->next, EINA_FALSE);
+   elm_object_disabled_set(sd->stop, EINA_FALSE);

    sd->emotion = elm_video_emotion_get(sd->video);
    emotion_object_priority_set(sd->emotion, EINA_TRUE);
@@ -455,7 +669,7 @@ _elm_player_smart_content_set(Eo *obj, v
    else elm_layout_signal_emit(obj, "elm,player,pause", "elm");

    evas_object_smart_callback_add(sd->emotion, "frame_decode",
-                                  _update_slider, obj);
+                                  _frame_decoded_cb, obj);
    evas_object_smart_callback_add(sd->emotion, "frame_resize",
                                   _update_slider, obj);
    evas_object_smart_callback_add(sd->emotion, "length_change",
@@ -475,6 +689,13 @@ end:
 static void
 _elm_player_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
 {
+#define ATTENUATOR_SIZE        6
+ static const char *att_keys[ATTENUATOR_SIZE] =
+    {"0dB", "-1.5dB", "-3dB", "-6dB", "-12dB", "-20dB"};
+ static const double att_vals[ATTENUATOR_SIZE] =
+    {1.0, 0.840896, 0.707107, 0.5, 0.353553, 0.1};
+ int i;
+
    eo_do_super(obj, evas_obj_smart_add());

    Elm_Player_Smart_Data *priv = _pd;
@@ -490,12 +711,18 @@ _elm_player_smart_add(Eo *obj, void *_pd
    priv->rewind = _player_button_add(obj, "media_player/rewind", _rewind);
    priv->stop = _player_button_add(obj, "media_player/stop", _stop);

+   priv->disabled = EINA_TRUE;
+   priv->length = 0.0;
+   priv->frames = 0;
+   priv->pos = 0.0;
+
    priv->slider = elm_slider_add(obj);
    elm_slider_indicator_format_function_set
      (priv->slider, _double_to_time, _str_free);
    elm_slider_units_format_function_set
      (priv->slider, _double_to_time, _str_free);
-   elm_slider_min_max_set(priv->slider, 0, 0);
+   elm_slider_unit_format_set(priv->slider, "%s");
+   elm_slider_min_max_set(priv->slider, 0, 1);
    elm_slider_value_set(priv->slider, 0);
    elm_object_disabled_set(priv->slider, EINA_TRUE);
    evas_object_size_hint_align_set(priv->slider, EVAS_HINT_FILL, 0.5);
@@ -506,6 +733,38 @@ _elm_player_smart_add(Eo *obj, void *_pd
    evas_object_smart_callback_add
      (priv->slider, "changed", _update_position, obj);

+   priv->volume = elm_diskselector_add(obj);
+   elm_diskselector_round_enabled_set(priv->volume, EINA_FALSE);
+   elm_diskselector_side_text_max_length_set(priv->volume, 5);
+   elm_object_disabled_set(priv->volume, EINA_FALSE);
+   evas_object_size_hint_align_set(priv->volume, EVAS_HINT_FILL, 0.5);
+   evas_object_size_hint_weight_set
+     (priv->volume, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   priv->volume_vals = eina_hash_string_small_new(NULL);
+   for (i = 0; i < ATTENUATOR_SIZE; i++) {
+       eina_hash_direct_add(priv->volume_vals, att_keys[i], &att_vals[i]);
+       elm_diskselector_item_append(priv->volume, att_keys[i], NULL,
_update_volume, obj);
+   }
+   elm_layout_content_set(obj, "media_player/volume", priv->volume);
+
+   priv->mute = elm_check_add(obj);
+   elm_object_text_set(priv->mute, "Mute");
+   elm_check_state_set(priv->mute, EINA_FALSE);
+   elm_layout_content_set(obj, "media_player/mute", priv->mute);
+   evas_object_smart_callback_add
+     (priv->mute, "changed", _mute_audio, obj);
+
+   priv->billboard = elm_label_add(obj);
+   elm_label_line_wrap_set(priv->billboard, ELM_WRAP_NONE);
+   evas_object_size_hint_align_set(priv->billboard, EVAS_HINT_FILL,
EVAS_HINT_FILL);
+   evas_object_size_hint_weight_set(priv->billboard,
EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   elm_object_text_set(priv->billboard, "No Media");
+   elm_layout_content_set(obj, "media_player/billboard", priv->billboard);
+
+   priv->path = eina_stringshare_add("/");
+   priv->inwin = EINA_FALSE;
+   priv->filesel_win = NULL;
+
    elm_layout_sizing_eval(obj);
    elm_widget_can_focus_set(obj, EINA_TRUE);
 }
diff -uprN a/src/lib/elm_widget_player.h b/src/lib/elm_widget_player.h
--- a/src/lib/elm_widget_player.h       2012-11-26 12:02:53.000000000 +0530
+++ b/src/lib/elm_widget_player.h       2013-02-06 11:17:07.000000000 +0530
@@ -33,6 +33,20 @@ struct _Elm_Player_Smart_Data
    Evas_Object          *rewind;
    Evas_Object          *stop;
    Evas_Object          *slider;
+   Evas_Object          *volume;
+   Evas_Object          *mute;
+   Evas_Object          *billboard;
+   Evas_Object          *filesel;
+   Evas_Object          *filesel_win;
+
+   Eina_Hash    *volume_vals; /* volume attenutator presets */
+   Eina_Bool    disabled;     /* used for only-when-must changes */
+   double       length;       /*         --- ditto ---           */
+   short        frames;       /* used to reduce update frequency */
+   double       pos;          /* inter-callback communication to
break slider feedback loop */
+   Eina_Bool    inwin;        /* inwin mode for filesel */
+   const char   *path;        /* chosen file */
+   char         msg[32];      /* buffer for billboard */
 };

 /**

------------------------------------------------------------------------------
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013 
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb
_______________________________________________
enlightenment-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-users

Reply via email to