yoz pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=6e8070d2261a3986ca2224a831cc954af728a429

commit 6e8070d2261a3986ca2224a831cc954af728a429
Author: MichaĆ«l Bouchaud (yoz) <[email protected]>
Date:   Fri Oct 14 20:49:35 2016 +0200

    e_remember: add e_client sound volume support
    
    @features
---
 src/bin/e_client_volume.c       |  1 +
 src/bin/e_config.c              |  4 ++++
 src/bin/e_int_client_remember.c | 15 +++++++++++++--
 src/bin/e_remember.c            | 27 ++++++++++++++++++++++++++-
 src/bin/e_remember.h            |  6 ++++++
 5 files changed, 50 insertions(+), 3 deletions(-)

diff --git a/src/bin/e_client_volume.c b/src/bin/e_client_volume.c
index af68de3..1d6a9f6 100644
--- a/src/bin/e_client_volume.c
+++ b/src/bin/e_client_volume.c
@@ -64,6 +64,7 @@ e_client_volume_sink_del(E_Client_Volume_Sink *sink)
    EINA_LIST_FREE(sink->clients, ec)
      {
         ec->sinks = eina_list_remove(ec->sinks, sink);
+        e_comp_object_frame_volume_update(ec->frame);
      }
    free(sink);
 }
diff --git a/src/bin/e_config.c b/src/bin/e_config.c
index dcdc8ea..af0494f 100644
--- a/src/bin/e_config.c
+++ b/src/bin/e_config.c
@@ -385,6 +385,10 @@ _e_config_edd_init(Eina_Bool old)
    E_CONFIG_VAL(D, T, prop.desktop_file, STR);
    E_CONFIG_VAL(D, T, prop.offer_resistance, UCHAR);
    E_CONFIG_VAL(D, T, prop.opacity, UCHAR);
+   E_CONFIG_VAL(D, T, prop.volume, INT);
+   E_CONFIG_VAL(D, T, prop.volume_min, INT);
+   E_CONFIG_VAL(D, T, prop.volume_max, INT);
+   E_CONFIG_VAL(D, T, prop.mute, UCHAR);
    E_CONFIG_VAL(D, T, uuid, STR);
    E_CONFIG_VAL(D, T, pid, INT);
 
diff --git a/src/bin/e_int_client_remember.c b/src/bin/e_int_client_remember.c
index 3de6000..56bfda3 100644
--- a/src/bin/e_int_client_remember.c
+++ b/src/bin/e_int_client_remember.c
@@ -12,6 +12,7 @@ static Evas_Object *_advanced_create_widgets(E_Config_Dialog 
*cfd, Evas *evas, E
 #define MODE_NOTHING        0
 #define MODE_GEOMETRY       E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE
 #define MODE_LOCKS          E_REMEMBER_APPLY_LOCKS
+#define MODE_VOLUME         E_REMEMBER_APPLY_VOLUME
 #define MODE_GEOMETRY_LOCKS E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | 
E_REMEMBER_APPLY_LOCKS
 #define MODE_ALL            E_REMEMBER_APPLY_POS | E_REMEMBER_APPLY_SIZE | 
E_REMEMBER_APPLY_LAYER | \
   E_REMEMBER_APPLY_LOCKS | E_REMEMBER_APPLY_BORDER | E_REMEMBER_APPLY_STICKY | 
                     \
@@ -62,6 +63,7 @@ struct _E_Config_Dialog_Data
       int keep_settings;
       int offer_resistance;
       int apply_opacity;
+      int apply_volume;
    } remember;
 
    int applied;
@@ -279,6 +281,8 @@ _fill_data(E_Config_Dialog_Data *cfdata)
           cfdata->remember.offer_resistance = 1;
         if (rem->apply & E_REMEMBER_APPLY_OPACITY)
           cfdata->remember.apply_opacity = 1;
+        if (rem->apply & E_REMEMBER_APPLY_VOLUME)
+          cfdata->remember.apply_volume = 1;
      }
 
    if (!rem) cfdata->mode = MODE_NOTHING;
@@ -610,6 +614,8 @@ _advanced_apply_data(E_Config_Dialog *cfd EINA_UNUSED, 
E_Config_Dialog_Data *cfd
      rem->apply |= E_REMEMBER_APPLY_OFFER_RESISTANCE;
    if (cfdata->remember.apply_opacity)
      rem->apply |= E_REMEMBER_APPLY_OPACITY;
+   if (cfdata->remember.apply_volume)
+     rem->apply |= E_REMEMBER_APPLY_VOLUME;
 
    if (ec && (!rem->apply && !rem->prop.desktop_file))
      {
@@ -654,6 +660,8 @@ _basic_create_widgets(E_Config_Dialog *cfd EINA_UNUSED, 
Evas *evas, E_Config_Dia
    e_widget_list_object_append(o, ob, 1, 1, 0.5);
    ob = e_widget_radio_add(evas, _("Size, Position and Locks"), 
MODE_GEOMETRY_LOCKS, rg);
    e_widget_list_object_append(o, ob, 1, 1, 0.5);
+   ob = e_widget_radio_add(evas, _("Volume"), MODE_VOLUME, rg);
+   e_widget_list_object_append(o, ob, 1, 1, 0.5);
    ob = e_widget_radio_add(evas, _("All"), MODE_ALL, rg);
    e_widget_list_object_append(o, ob, 1, 1, 0.5);
    return o;
@@ -789,10 +797,13 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas 
*evas, E_Config_Dialog_Data
    e_widget_table_object_append(of, ob, 0, 7, 1, 1, 1, 0, 1, 0);
    oc = e_widget_check_add(evas, _("Application file or name (.desktop)"),
                            &(cfdata->remember.apply_desktop_file));
-   e_widget_table_object_append(of, oc, 0, 8, 1, 1, 1, 0, 1, 0);
+   e_widget_table_object_append(of, ob, 0, 8, 1, 1, 1, 0, 1, 0);
+   oc = e_widget_check_add(evas, _("Volume"),
+                           &(cfdata->remember.apply_volume));
+   e_widget_table_object_append(of, oc, 0, 9, 1, 1, 1, 0, 1, 0);
    ob = e_widget_entry_add(cfd->dia->win, &cfdata->desktop, NULL, NULL, NULL);
    e_widget_check_widget_disable_on_unchecked_add(oc, ob);
-   e_widget_table_object_append(of, ob, 0, 9, 2, 1, 1, 0, 1, 0);
+   e_widget_table_object_append(of, ob, 0, 10, 2, 1, 1, 0, 1, 0);
    e_widget_toolbook_page_append(o, NULL, _("Properties"), of, 1, 1, 1, 1, 
0.5, 0.0);
 
    of = e_widget_table_add(e_win_evas_win_get(evas), 0);
diff --git a/src/bin/e_remember.c b/src/bin/e_remember.c
index 409348b..cc249c3 100644
--- a/src/bin/e_remember.c
+++ b/src/bin/e_remember.c
@@ -133,7 +133,8 @@ e_remember_internal_save(void)
                       E_REMEMBER_APPLY_SKIP_PAGER |
                       E_REMEMBER_APPLY_SKIP_TASKBAR |
                       E_REMEMBER_APPLY_OFFER_RESISTANCE |
-                      E_REMEMBER_APPLY_OPACITY);
+                      E_REMEMBER_APPLY_OPACITY |
+                      E_REMEMBER_APPLY_VOLUME);
         _e_remember_update(ec, rem);
 
         remembers->list = eina_list_append(remembers->list, rem);
@@ -552,6 +553,22 @@ e_remember_apply(E_Remember *rem, E_Client *ec)
      ec->want_focus = 1;
    if (rem->apply & E_REMEMBER_APPLY_OPACITY)
      ec->netwm.opacity = rem->prop.opacity;
+   if (rem->apply & E_REMEMBER_APPLY_VOLUME)
+     {
+        if (!ec->volume_control_enabled)
+          {
+             ec->volume_control_enabled = EINA_TRUE;
+             ec->volume = rem->prop.volume;
+             ec->volume_min = rem->prop.volume_min;
+             ec->volume_max = rem->prop.volume_max;
+             ec->mute = rem->prop.mute;
+          }
+        else
+          {
+             e_client_volume_set(ec, rem->prop.volume);
+             e_client_volume_mute_set(ec, rem->prop.mute);
+          }
+     }
 
    if (temporary)
      _e_remember_free(rem);
@@ -788,6 +805,14 @@ _e_remember_update(E_Client *ec, E_Remember *rem)
         rem->pid = ec->netwm.pid;
         rem->apply_first_only = 1;
      }
+   if (rem->apply & E_REMEMBER_APPLY_VOLUME)
+     {
+        rem->prop.volume = ec->volume;
+        rem->prop.volume_min = ec->volume_min;
+        rem->prop.volume_max = ec->volume_max;
+        rem->prop.mute = ec->mute;
+     }
+
    rem->no_reopen = ec->internal_no_reopen;
    {
       E_Event_Remember_Update *ev;
diff --git a/src/bin/e_remember.h b/src/bin/e_remember.h
index 5c97f2d..41c81cf 100644
--- a/src/bin/e_remember.h
+++ b/src/bin/e_remember.h
@@ -36,6 +36,7 @@ typedef struct _E_Remember E_Remember;
 #define E_REMEMBER_APPLY_OFFER_RESISTANCE (1 << 16)
 #define E_REMEMBER_APPLY_OPACITY          (1 << 17)
 #define E_REMEMBER_APPLY_UUID             (1 << 18)
+#define E_REMEMBER_APPLY_VOLUME           (1 << 19)
 
 #define E_REMEMBER_INTERNAL_DIALOGS       (1 << 0)
 #define E_REMEMBER_INTERNAL_FM_WINS       (1 << 1)
@@ -109,6 +110,11 @@ struct _E_Remember
       const char   *command;
       const char   *desktop_file;
       unsigned char opacity;
+
+      int           volume;
+      int           volume_min;
+      int           volume_max;
+      unsigned char mute;
    } prop;
    Eina_Stringshare *uuid;
    int pid;

-- 


Reply via email to