always_select added to normal list too.
authorCarsten Haitzler <raster@rasterman.com>
Mon, 27 Apr 2009 01:29:02 +0000 (01:29 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Mon, 27 Apr 2009 01:29:02 +0000 (01:29 +0000)
SVN revision: 40406

src/bin/test.c
src/lib/Elementary.h.in
src/lib/elm_list.c

index f480f42..6c94677 100644 (file)
@@ -3300,6 +3300,7 @@ my_win_main(void)
    evas_object_show(lb);
    
    li = elm_list_add(win);
+   elm_list_always_select_mode_set(li, 1);
    evas_object_size_hint_weight_set(li, 1.0, 1.0);
    evas_object_size_hint_align_set(li, -1.0, -1.0);
    elm_box_pack_end(bx0, li);
index 5ba45cd..c417520 100644 (file)
@@ -574,6 +574,7 @@ extern "C" {
    EAPI void         elm_list_go(Evas_Object *obj);
    EAPI void         elm_list_multi_select_set(Evas_Object *obj, Evas_Bool multi);
    EAPI void         elm_list_horizontal_mode_set(Evas_Object *obj, Elm_List_Mode mode);
+   EAPI void         elm_list_always_select_mode_set(Evas_Object *obj, Evas_Bool always_select);
    EAPI const Eina_List     *elm_list_items_get(const Evas_Object *obj);
    EAPI Elm_List_Item       *elm_list_selected_item_get(const Evas_Object *obj);
    EAPI const Eina_List     *elm_list_selected_items_get(const Evas_Object *obj);
index 87f477b..b00e33d 100644 (file)
@@ -12,6 +12,7 @@ struct _Widget_Data
    Evas_Coord minw[2], minh[2];
    Evas_Bool on_hold : 1;
    Evas_Bool multi : 1;
+   Evas_Bool always_select : 1;
 };
 
 struct _Elm_List_Item
@@ -129,13 +130,18 @@ _item_select(Elm_List_Item *it)
 {
    Widget_Data *wd = elm_widget_data_get(it->obj);
    const char *selectraise;
-   if (it->selected) return;
+   if (it->selected)
+     {
+        if (wd->always_select) goto call;
+        return;
+     }
    edje_object_signal_emit(it->base, "elm,state,selected", "elm");
    selectraise = edje_object_data_get(it->base, "selectraise");
    if ((selectraise) && (!strcmp(selectraise, "on")))
      evas_object_raise(it->base);
    it->selected = 1;
    wd->selected = eina_list_append(wd->selected, it);
+   call:
    if (it->func) it->func((void *)it->data, it->obj, it);
    evas_object_smart_callback_call(it->obj, "selected", it);
 }
@@ -191,6 +197,7 @@ _mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info)
             Elm_List_Item *it2;
             EINA_LIST_FOREACH_SAFE(wd->selected, l, l_next, it2)
               if (it2 != it) _item_unselect(it2);
+             _item_select(it);
          }
      }
 }
@@ -466,6 +473,13 @@ elm_list_horizontal_mode_set(Evas_Object *obj, Elm_List_Mode mode)
      elm_scroller_content_min_limit(wd->scroller, 0, 0);
 }
 
+EAPI void      
+elm_list_always_select_mode_set(Evas_Object *obj, Evas_Bool always_select)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   wd->always_select = always_select;
+}
+
 EAPI const Eina_List *
 elm_list_items_get(const Evas_Object *obj)
 {