cedric pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=e0b40113b43569da26c8a218153059a5e850332e

commit e0b40113b43569da26c8a218153059a5e850332e
Author: divyesh purohit <div.puro...@samsung.com>
Date:   Fri Jan 22 11:07:01 2016 -0800

    combobox: apply proper style
    
    Summary:
    Initially combobox used hover's default style, this patch would make 
combobox use hoversel_vertical style.
    @Fix T3075 for 2nd point.
    
    Signed-off-by: divyesh purohit <div.puro...@samsung.com>
    
    Test Plan: please run combobox example from elementary_test
    
    Reviewers: shilpasingh, cedric, raster
    
    Subscribers: rajeshps, govi
    
    Maniphest Tasks: T3075
    
    Differential Revision: https://phab.enlightenment.org/D3596
    
    Signed-off-by: Cedric BAIL <ced...@osg.samsung.com>
---
 data/themes/edc/elm/hover.edc |  6 +--
 src/bin/test_combobox.c       |  1 +
 src/lib/elc_combobox.c        | 86 +++++++++++++++++++++++++++++++++----------
 src/lib/elc_hoversel.c        |  2 +-
 4 files changed, 70 insertions(+), 25 deletions(-)

diff --git a/data/themes/edc/elm/hover.edc b/data/themes/edc/elm/hover.edc
index 74757f8..229fa8d 100644
--- a/data/themes/edc/elm/hover.edc
+++ b/data/themes/edc/elm/hover.edc
@@ -699,8 +699,8 @@ group { name: "elm/hover/base/hoversel_vertical/default";
       program { name: "topshow";
          signal: "elm,action,slot,top,show"; source: "elm";
          script {
-            set_state(PART:"limit0", "visible", 0.0);
-            set_state(PART:"limit1", "visible", 0.0);
+            set_state(PART:"limit0", "default", 0.0);
+            set_state(PART:"limit1", "default", 0.0);
             set_state(PART:"button_image", "default", 0.0);
             topshow2();
          }
@@ -810,8 +810,6 @@ group { name: "elm/hover/base/hoversel_vertical/default";
 
 group { name: "elm/hover/base/hoversel_horizontal/default";
    alias: "elm/hover/base/hoversel_horizontal/entry";
-   alias: "elm/hover/base/combobox_horizontal/default";
-   alias: "elm/hover/base/combobox_horizontal/entry";
    images.image: "button_normal.png" COMP;
    data.item: "dismiss" "on";
    script {
diff --git a/src/bin/test_combobox.c b/src/bin/test_combobox.c
index b8ef5db..720e3c6 100644
--- a/src/bin/test_combobox.c
+++ b/src/bin/test_combobox.c
@@ -41,6 +41,7 @@ _combobox_item_pressed_cb(void *data EINA_UNUSED, Evas_Object 
*obj,
    printf("'item,pressed' callback is called. (selected item : %s)\n", txt);
    elm_object_text_set(obj, txt);
    elm_combobox_hover_end(obj);
+   elm_entry_cursor_end_set(obj);
 }
 
 static char *
diff --git a/src/lib/elc_combobox.c b/src/lib/elc_combobox.c
index 3d1a808..bac259d 100644
--- a/src/lib/elc_combobox.c
+++ b/src/lib/elc_combobox.c
@@ -65,7 +65,7 @@ _elm_combobox_elm_widget_theme_apply(Eo *obj, 
Elm_Combobox_Data *sd)
 
    ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd, EINA_FALSE);
 
-   style = elm_widget_style_get(obj);
+   style = eina_stringshare_add(elm_widget_style_get(obj));
 
    snprintf(buf, sizeof(buf), "combobox_vertical/%s", style);
 
@@ -75,6 +75,8 @@ _elm_combobox_elm_widget_theme_apply(Eo *obj, 
Elm_Combobox_Data *sd)
    eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_theme_apply());
    if (!int_ret) return EINA_FALSE;
 
+   eina_stringshare_replace(&(wd->style), style);
+
    mirrored = elm_widget_mirrored_get(obj);
 
    if (sd->hover)
@@ -82,18 +84,43 @@ _elm_combobox_elm_widget_theme_apply(Eo *obj, 
Elm_Combobox_Data *sd)
 
    elm_widget_mirrored_set(sd->genlist, mirrored);
    elm_widget_mirrored_set(sd->entry, mirrored);
+   eina_stringshare_del(style);
 
    elm_combobox_hover_end(obj);
 
    return EINA_TRUE;
 }
 
-static void
+static Eina_Bool
 _on_hover_clicked(void *data,
-                  Evas_Object *obj EINA_UNUSED,
-                  void *event_info EINA_UNUSED)
+                     Eo *obj, const Eo_Event_Description *desc EINA_UNUSED,
+                     void *event_info EINA_UNUSED)
 {
-   elm_combobox_hover_end(data);
+   const char *dismissstr;
+
+   dismissstr = elm_layout_data_get(obj, "dismiss");
+
+   if (!dismissstr || strcmp(dismissstr, "on"))
+     elm_combobox_hover_end(data); // for backward compatibility
+
+   return EINA_TRUE;
+}
+
+static void
+_hover_end_finished(void *data,
+                    Evas_Object *obj EINA_UNUSED,
+                    const char *emission EINA_UNUSED,
+                    const char *source EINA_UNUSED)
+{
+   const char *dismissstr;
+   ELM_COMBOBOX_DATA_GET(data, sd);
+   dismissstr = elm_layout_data_get(sd->hover, "dismiss");
+   if (dismissstr && !strcmp(dismissstr, "on"))
+     {
+        sd->expanded = EINA_FALSE;
+        evas_object_hide(sd->hover);
+        eo_do(data, eo_event_callback_call(ELM_COMBOBOX_EVENT_DISMISSED, 
NULL));
+     }
 }
 
 static void
@@ -151,13 +178,18 @@ _activate(Evas_Object *obj)
 {
    ELM_COMBOBOX_DATA_GET(obj, sd);
    if (elm_widget_disabled_get(obj)) return;
+   if (sd->expanded)
+     {
+        elm_combobox_hover_end(obj);
+        return;
+     }
    sd->expanded = EINA_TRUE;
-   eo_do(obj, eo_event_callback_call(ELM_COMBOBOX_EVENT_EXPANDED, NULL));
    _table_resize(obj);
    elm_object_part_content_set(sd->hover, elm_hover_best_content_location_get
                                (sd->hover, ELM_HOVER_AXIS_VERTICAL), sd->tbl);
    evas_object_show(sd->genlist);
    evas_object_show(sd->hover);
+   eo_do(obj, eo_event_callback_call(ELM_COMBOBOX_EVENT_EXPANDED, NULL));
 }
 
 static void
@@ -193,9 +225,8 @@ _gl_filter_finished_cb(void *data, Eo *obj EINA_UNUSED,
 
    if (sd->count > 0)
      {
-        if (sd->expanded == EINA_TRUE)
-          elm_combobox_hover_end(data);
-        _activate(data);
+         if (!sd->expanded) _activate(data);
+        else _table_resize(data);
      }
    else elm_combobox_hover_end(data);
    return EINA_TRUE;
@@ -218,12 +249,13 @@ _on_changed(void *data, Eo *obj EINA_UNUSED,
    return EINA_TRUE;
 }
 
-static void
-_on_clicked(void *data EINA_UNUSED,
-            Evas_Object *obj,
+static Eina_Bool
+_on_clicked(void *data,
+            Eo *obj EINA_UNUSED, const Eo_Event_Description *desc EINA_UNUSED,
             void *event_info EINA_UNUSED)
 {
-   elm_combobox_hover_begin(obj);
+   elm_combobox_hover_begin(data);
+   return EINA_TRUE;
 }
 
 EOLIAN static void
@@ -234,7 +266,8 @@ _elm_combobox_evas_object_smart_add(Eo *obj, 
Elm_Combobox_Data *sd EINA_UNUSED)
 
    elm_widget_mirrored_automatic_set(obj, EINA_FALSE);
 
-   evas_object_smart_callback_add(obj, "clicked", _on_clicked, obj);
+   eo_do(obj, eo_event_callback_add(
+         EVAS_CLICKABLE_INTERFACE_EVENT_CLICKED, _on_clicked, obj));
 
    //What are you doing here?
    eo_do(obj, elm_obj_widget_theme_apply());
@@ -299,6 +332,15 @@ _elm_combobox_eo_base_constructor(Eo *obj, 
Elm_Combobox_Data *sd)
    sd->hover = eo_add(ELM_HOVER_CLASS, sd->hover_parent);
    elm_widget_mirrored_automatic_set(sd->hover, EINA_FALSE);
    elm_hover_target_set(sd->hover, obj);
+   elm_widget_sub_object_add(obj, sd->hover);
+   snprintf(buf, sizeof(buf), "combobox_vertical/%s",
+              elm_widget_style_get(obj));
+   elm_object_style_set(sd->hover, buf);
+
+   eo_do(sd->hover, eo_event_callback_add
+     (EVAS_CLICKABLE_INTERFACE_EVENT_CLICKED, _on_hover_clicked, obj));
+   elm_layout_signal_callback_add
+     (sd->hover, "elm,action,hide,finished", "elm", _hover_end_finished, obj);
 
    //table
    sd->tbl = elm_table_add(obj);
@@ -341,9 +383,6 @@ _elm_combobox_eo_base_constructor(Eo *obj, 
Elm_Combobox_Data *sd)
          _on_aborted, obj));
    evas_object_show(entry);
 
-   snprintf(buf, sizeof(buf), "combobox_vertical/%s", 
elm_widget_style_get(obj));
-   elm_object_style_set(sd->hover, buf);
-   evas_object_smart_callback_add(sd->hover, "clicked", _on_hover_clicked, 
obj);
    eo_do(obj,
          eo_composite_attach(gl),
          eo_composite_attach(entry));
@@ -363,11 +402,18 @@ _elm_combobox_hover_begin(Eo *obj, Elm_Combobox_Data *sd)
 EOLIAN static void
 _elm_combobox_hover_end(Eo *obj, Elm_Combobox_Data *sd)
 {
+   const char *dismissstr;
    if (!sd->hover) return;
+   dismissstr = elm_layout_data_get(sd->hover, "dismiss");
 
-   sd->expanded = EINA_FALSE;
-   evas_object_hide(sd->hover);
-   eo_do(obj, eo_event_callback_call(ELM_COMBOBOX_EVENT_DISMISSED, NULL));
+   if (dismissstr && !strcmp(dismissstr, "on"))
+     elm_hover_dismiss(sd->hover);
+   else
+     {
+        sd->expanded = EINA_FALSE;
+        evas_object_hide(sd->hover);
+        eo_do(obj, eo_event_callback_call(ELM_COMBOBOX_EVENT_DISMISSED, NULL));
+     } // for backward compatibility
 }
 
 EOLIAN static Eina_Bool
diff --git a/src/lib/elc_hoversel.c b/src/lib/elc_hoversel.c
index eaa760b..2dfb587 100644
--- a/src/lib/elc_hoversel.c
+++ b/src/lib/elc_hoversel.c
@@ -107,7 +107,7 @@ _elm_hoversel_elm_widget_theme_apply(Eo *obj, 
Elm_Hoversel_Data *sd)
 }
 
 static Eina_Bool
-_on_hover_clicked(void *data EINA_UNUSED,
+_on_hover_clicked(void *data,
                      Eo *obj, const Eo_Event_Description *desc EINA_UNUSED,
                      void *event_info EINA_UNUSED)
 {

-- 


Reply via email to