2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <Elementary.h>
18 #include <boost/concept_check.hpp>
20 #include <AbstractMainWindow.h>
23 #include "ServiceManager.h"
24 #include "BrowserLogger.h"
25 #include "Tools/EflTools.h"
26 #include "../Tools/BrowserImage.h"
28 #define efl_scale (elm_config_scale_get() / elm_app_base_scale_get())
30 namespace tizen_browser{
33 EXPORT_SERVICE(MainUI, "org.tizen.browser.mainui")
35 typedef struct _HistoryItemData
37 std::shared_ptr<tizen_browser::services::HistoryItem> item;
38 std::shared_ptr<tizen_browser::base_ui::MainUI> mainUI;
41 typedef struct _BookmarkItemData
43 std::shared_ptr<tizen_browser::services::BookmarkItem> item;
44 std::shared_ptr<tizen_browser::base_ui::MainUI> mainUI;
48 tizen_browser::base_ui::MainUI * mainUI;
49 const char* button_name;
50 Elm_Object_Item * e_item;
55 , m_genListTop(nullptr)
56 , m_genListBottom(nullptr)
58 , m_big_item_class(nullptr)
59 , m_medium_item_class(nullptr)
60 , m_small_item_class(nullptr)
61 , m_bookmark_item_class(nullptr)
63 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
64 edjFilePath = EDJE_DIR;
65 edjFilePath.append("MainUI/MainUI.edj");
72 void MainUI::show(Evas_Object* parent)
74 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
75 elm_theme_extension_add(nullptr, edjFilePath.c_str());
76 m_layout = elm_layout_add(parent);
77 elm_layout_file_set(m_layout, edjFilePath.c_str(), "mv_bookmarks");
78 evas_object_size_hint_weight_set(m_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
79 evas_object_size_hint_align_set(m_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
80 evas_object_show(m_layout);
83 m_genListMVBig = elm_genlist_add(m_layout);
84 elm_object_part_content_set(m_layout, "elm.swallow.mvBig", m_genListMVBig);
85 elm_genlist_homogeneous_set(m_genListMVBig, EINA_FALSE);
86 elm_genlist_multi_select_set(m_genListMVBig, EINA_FALSE);
87 elm_genlist_select_mode_set(m_genListMVBig, ELM_OBJECT_SELECT_MODE_ALWAYS);
88 elm_genlist_mode_set(m_genListMVBig, ELM_LIST_LIMIT);
89 evas_object_size_hint_weight_set(m_genListMVBig, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
91 m_genListMVMedium = elm_genlist_add(m_layout);
92 elm_object_part_content_set(m_layout, "elm.swallow.mvMedium", m_genListMVMedium);
93 elm_genlist_homogeneous_set(m_genListMVMedium, EINA_FALSE);
94 elm_genlist_multi_select_set(m_genListMVMedium, EINA_FALSE);
95 elm_genlist_select_mode_set(m_genListMVMedium, ELM_OBJECT_SELECT_MODE_ALWAYS);
96 elm_genlist_mode_set(m_genListMVMedium, ELM_LIST_LIMIT);
97 evas_object_size_hint_weight_set(m_genListMVMedium, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
99 m_genListMVSmall = elm_genlist_add(m_layout);
100 elm_object_part_content_set(m_layout, "elm.swallow.mvSmall", m_genListMVSmall);
101 elm_genlist_homogeneous_set(m_genListMVSmall, EINA_FALSE);
102 elm_genlist_multi_select_set(m_genListMVSmall, EINA_FALSE);
103 elm_genlist_select_mode_set(m_genListMVSmall, ELM_OBJECT_SELECT_MODE_ALWAYS);
104 elm_genlist_mode_set(m_genListMVSmall, ELM_LIST_LIMIT);
105 evas_object_size_hint_weight_set(m_genListMVSmall, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
107 if (!m_big_item_class) {
108 m_big_item_class = elm_genlist_item_class_new();
109 m_big_item_class->item_style = "big_grid_item";
110 m_big_item_class->func.text_get = _grid_text_get;
111 m_big_item_class->func.content_get = _grid_content_get;
112 m_big_item_class->func.state_get = nullptr;
113 m_big_item_class->func.del = nullptr;
116 if (!m_medium_item_class) {
117 m_medium_item_class = elm_genlist_item_class_new();
118 m_medium_item_class->item_style = "medium_grid_item";
119 m_medium_item_class->func.text_get = _grid_text_get;
120 m_medium_item_class->func.content_get = _grid_content_get;
121 m_medium_item_class->func.state_get = nullptr;
122 m_medium_item_class->func.del = nullptr;
125 if (!m_small_item_class) {
126 m_small_item_class = elm_genlist_item_class_new();
127 m_small_item_class->item_style = "small_grid_item";
128 m_small_item_class->func.text_get = _grid_text_get;
129 m_small_item_class->func.content_get = _grid_content_get;
130 m_small_item_class->func.state_get = nullptr;
131 m_small_item_class->func.del = nullptr;
134 /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this);
135 evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/
138 m_gengrid = elm_gengrid_add(m_layout);
139 //elm_object_part_content_set(m_layout, "elm.swallow.grid", m_gengrid);
141 evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, nullptr);
142 evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, nullptr);
143 evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this);
145 if (!m_bookmark_item_class) {
146 m_bookmark_item_class = elm_gengrid_item_class_new();
147 m_bookmark_item_class->item_style = "grid_item";
148 m_bookmark_item_class->func.text_get = _grid_bookmark_text_get;
149 m_bookmark_item_class->func.content_get = _grid_bookmark_content_get;
150 m_bookmark_item_class->func.state_get = nullptr;
151 m_bookmark_item_class->func.del = nullptr;
155 elm_theme_extension_add(nullptr, edjFilePath.c_str());
156 elm_gengrid_align_set(m_gengrid, 0, 0);
157 elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS);
158 elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE);
159 elm_gengrid_horizontal_set(m_gengrid, EINA_FALSE);
160 //elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE);
161 elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
162 elm_scroller_page_size_set(m_gengrid, 0, 327);
163 evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
164 evas_object_size_hint_align_set(m_gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL);
165 elm_gengrid_item_size_set(m_gengrid, 364 * efl_scale, 320 * efl_scale);
172 void MainUI::showTopButtons()
174 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
175 elm_theme_extension_add(nullptr, edjFilePath.c_str());
176 m_genListTop = elm_genlist_add(m_layout);
177 elm_object_part_content_set(m_layout, "elm.swallow.genlistTop", m_genListTop);
178 elm_genlist_homogeneous_set(m_genListTop, EINA_FALSE);
179 elm_genlist_multi_select_set(m_genListTop, EINA_FALSE);
180 elm_genlist_select_mode_set(m_genListTop, ELM_OBJECT_SELECT_MODE_ALWAYS);
181 elm_genlist_mode_set(m_genListTop, ELM_LIST_LIMIT);
182 //elm_genlist_decorate_mode_set(m_genListTop, EINA_TRUE);
183 evas_object_size_hint_weight_set(m_genListTop, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
185 /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this);
186 evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/
188 m_itemClassTop = elm_genlist_item_class_new();
189 m_itemClassTop->item_style = "top_button_item";
190 m_itemClassTop->func.text_get = nullptr; // &listTopItemTextGet;
191 m_itemClassTop->func.content_get = &listTopItemContentGet;
192 m_itemClassTop->func.state_get = 0;
193 m_itemClassTop->func.del = 0;
195 ItemData * id = new ItemData;
197 Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListTop, //genlist
198 m_itemClassTop, //item Class
200 nullptr, //parent item
201 ELM_GENLIST_ITEM_NONE,//item type
203 nullptr //data passed to above function
205 id->e_item = elmItem;
206 ItemData * id2 = new ItemData;
208 Elm_Object_Item* elmItem2 = elm_genlist_item_append(m_genListTop, //genlist
209 m_itemClassTop, //item Class
211 nullptr, //parent item
212 ELM_GENLIST_ITEM_NONE,//item type
214 nullptr //data passed to above function
216 id2->e_item = elmItem2;
217 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
220 void MainUI::showBottomButton()
222 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
223 elm_theme_extension_add(nullptr, edjFilePath.c_str());
224 m_genListBottom = elm_genlist_add(m_layout);
225 elm_object_part_content_set(m_layout, "elm.swallow.genlistBottom", m_genListBottom);
226 elm_genlist_homogeneous_set(m_genListBottom, EINA_FALSE);
227 elm_genlist_multi_select_set(m_genListBottom, EINA_FALSE);
228 elm_genlist_select_mode_set(m_genListBottom, ELM_OBJECT_SELECT_MODE_ALWAYS);
229 elm_genlist_mode_set(m_genListBottom, ELM_LIST_LIMIT);
230 //elm_genlist_decorate_mode_set(m_genListBottom, EINA_TRUE);
231 evas_object_size_hint_weight_set(m_genListBottom, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
233 /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this);
234 evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/
236 m_itemClassBottom = elm_genlist_item_class_new();
237 m_itemClassBottom->item_style = "bottom_button_item";
238 m_itemClassBottom->func.text_get = nullptr;
239 m_itemClassBottom->func.content_get = &listItemBottomContentGet;
240 m_itemClassBottom->func.state_get = 0;
241 m_itemClassBottom->func.del = 0;
243 ItemData * id = new ItemData;
245 Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListBottom, //genlist
246 m_itemClassBottom, //item Class
248 nullptr, //parent item
249 ELM_GENLIST_ITEM_NONE,//item type
251 nullptr //data passed to above function
253 id->e_item = elmItem;
256 Evas_Object* MainUI::listTopItemContentGet(void* data, Evas_Object* obj, const char* part)
258 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
259 if(!strcmp(part, "mostvisited_click"))
261 Evas_Object *mvButton = elm_button_add(obj);
262 elm_object_style_set(mvButton, "invisible_button");
263 evas_object_smart_callback_add(mvButton, "clicked", tizen_browser::base_ui::MainUI::_mostVisited_clicked, data);
266 else if(!strcmp(part, "bookmark_click"))
268 Evas_Object *bmButton = elm_button_add(obj);
269 elm_object_style_set(bmButton, "invisible_button");
270 evas_object_smart_callback_add(bmButton, "clicked", tizen_browser::base_ui::MainUI::_bookmark_clicked, data);
276 void MainUI::_mostVisited_clicked(void * data, Evas_Object * /* obj */, void * event_info)
278 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
279 ItemData* itemData = reinterpret_cast<ItemData *>(data);
280 itemData->mainUI->mostVisitedClicked(std::string());
283 void MainUI::_bookmark_clicked(void * data, Evas_Object * /* obj */, void * event_info)
285 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
286 ItemData* itemData = reinterpret_cast<ItemData *>(data);
287 itemData->mainUI->bookmarkClicked(std::string());
290 void MainUI::_bookmark_manager_clicked(void * data, Evas_Object * /* obj */, void * event_info)
292 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
293 ItemData* itemData = reinterpret_cast<ItemData *>(data);
294 itemData->mainUI->bookmarkManagerClicked(std::string());
297 Evas_Object* MainUI::listItemBottomContentGet(void* data, Evas_Object* obj, const char* part)
299 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
300 if(!strcmp(part, "bookmarkmanager_click"))
302 Evas_Object *bmButton = elm_button_add(obj);
303 elm_object_style_set(bmButton, "invisible_button");
304 evas_object_smart_callback_add(bmButton, "clicked", tizen_browser::base_ui::MainUI::_bookmark_manager_clicked, data);
310 void MainUI::addHistoryItem(std::shared_ptr<tizen_browser::services::HistoryItem> hi)
312 BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
313 if (m_map_history_views.size() >= 5)
316 HistoryItemData *itemData = new HistoryItemData();
318 itemData->mainUI = std::shared_ptr<tizen_browser::base_ui::MainUI>(this);
319 Elm_Object_Item* historyView = nullptr;
321 switch(m_map_history_views.size())
324 BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size());
325 historyView = elm_genlist_item_append(m_genListMVBig, m_big_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this);
329 BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size());
330 historyView = elm_genlist_item_append(m_genListMVMedium, m_medium_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this);
334 BROWSER_LOGD("%s:%d %s m_map_history_views.size %d", __FILE__, __LINE__, __func__, m_map_history_views.size());
335 historyView = elm_genlist_item_append(m_genListMVSmall, m_small_item_class, itemData, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, this);
339 m_map_history_views.insert(std::pair<std::string,Elm_Object_Item*>(hi->getUrl(),historyView));
341 setEmptyGengrid(false);
344 void MainUI::addHistoryItems(std::vector<std::shared_ptr<tizen_browser::services::HistoryItem> > items)
346 BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
348 for (auto it = items.begin(); it != items.end(); ++it) {
355 void MainUI::addBookmarkItem(std::shared_ptr<tizen_browser::services::BookmarkItem> bi)
357 BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
358 BookmarkItemData *itemData = new BookmarkItemData();
360 itemData->mainUI = std::shared_ptr<tizen_browser::base_ui::MainUI>(this);
361 Elm_Object_Item* bookmarkView = elm_gengrid_item_append(m_gengrid, m_bookmark_item_class, itemData, nullptr, this);
362 m_map_bookmark_views.insert(std::pair<std::string,Elm_Object_Item*>(bi->getAddress(),bookmarkView));
364 // unselect by default
365 elm_gengrid_item_selected_set(bookmarkView, EINA_FALSE);
367 setEmptyGengrid(false);
370 void MainUI::addBookmarkItems(std::vector<std::shared_ptr<tizen_browser::services::BookmarkItem> > items)
372 BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__);
373 for (auto it = items.begin(); it != items.end(); ++it) {
374 addBookmarkItem(*it);
378 char* MainUI::_grid_text_get(void *data, Evas_Object *obj, const char *part)
380 HistoryItemData *itemData = reinterpret_cast<HistoryItemData*>(data);
381 if (!strcmp(part, "page_title")) {
382 return strdup(itemData->item->getTitle().c_str());
384 if (!strcmp(part, "page_url")) {
385 return strdup(itemData->item->getUrl().c_str());
390 char* MainUI::_grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part)
392 BookmarkItemData *itemData = reinterpret_cast<BookmarkItemData*>(data);
393 if (!strcmp(part, "page_title")) {
394 return strdup(itemData->item->getTittle().c_str());
396 if (!strcmp(part, "page_url")) {
397 return strdup(itemData->item->getAddress().c_str());
402 Evas_Object * MainUI::_grid_content_get(void *data, Evas_Object *obj, const char *part)
404 BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part);
405 HistoryItemData *itemData = reinterpret_cast<HistoryItemData*>(data);
407 if (!strcmp(part, "elm.thumbnail")) {
408 if (itemData->item->getThumbnail()) {
409 Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->mainUI->m_parent);
416 else if (!strcmp(part, "elm.thumbButton")) {
417 Evas_Object *thumbButton = elm_button_add(obj);
418 elm_object_style_set(thumbButton, "thumbButton");
419 evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::MainUI::_thumbSelected, data);
425 Evas_Object * MainUI::_grid_bookmark_content_get(void *data, Evas_Object *obj, const char *part)
427 BROWSER_LOGD("%s:%d %s part=%s", __FILE__, __LINE__, __func__, part);
428 BookmarkItemData *itemData = reinterpret_cast<BookmarkItemData*>(data);
430 if (!strcmp(part, "elm.thumbnail")) {
431 if (itemData->item->getThumbnail()) {
432 Evas_Object * thumb = tizen_browser::tools::EflTools::getEvasImage(itemData->item->getThumbnail(), itemData->mainUI->m_parent);
439 else if (!strcmp(part, "elm.thumbButton")) {
440 Evas_Object *thumbButton = elm_button_add(obj);
441 elm_object_style_set(thumbButton, "thumbButton");
442 evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::MainUI::_thumbSelected, data);
449 void MainUI::_itemSelected(void * data, Evas_Object * /* obj */, void * event_info)
451 Elm_Object_Item * selected = reinterpret_cast<Elm_Object_Item *>(event_info);
452 HistoryItemData * itemData = reinterpret_cast<HistoryItemData *>(elm_object_item_data_get(selected));
453 MainUI * self = reinterpret_cast<MainUI *>(data);
455 self->historyClicked(itemData->item);
458 void MainUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* event_info */)
460 HistoryItemData * itemData = reinterpret_cast<HistoryItemData *>(data);
461 itemData->mainUI->historyClicked(itemData->item);
464 void MainUI::clearHistoryGenlist()
466 elm_genlist_clear(m_genListMVSmall);
467 elm_genlist_clear(m_genListMVBig);
468 elm_genlist_clear(m_genListMVMedium);
469 m_map_history_views.clear();
470 evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvBig"));
471 evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvSmall"));
472 evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvMedium"));
475 void MainUI::showHistoryGenlist()
477 evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.grid"));
478 elm_object_part_content_unset(m_layout, "elm.swallow.grid");
479 elm_object_part_content_set(m_layout, "elm.swallow.mvBig", m_genListMVBig);
480 elm_object_part_content_set(m_layout, "elm.swallow.mvSmall", m_genListMVSmall);
481 elm_object_part_content_set(m_layout, "elm.swallow.mvMedium", m_genListMVMedium);
484 void MainUI::clearBookmarkGengrid()
486 elm_gengrid_clear(m_gengrid);
487 m_map_bookmark_views.clear();
488 evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.grid"));
491 void MainUI::showBookmarkGengrid()
493 evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvBig"));
494 evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvSmall"));
495 evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.mvMedium"));
496 elm_object_part_content_unset(m_layout, "elm.swallow.mvBig");
497 elm_object_part_content_unset(m_layout, "elm.swallow.mvSmall");
498 elm_object_part_content_unset(m_layout, "elm.swallow.mvMedium");
499 elm_object_part_content_set(m_layout, "elm.swallow.grid", m_gengrid);
504 BROWSER_LOGD("MainUI Hide");
505 evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.genlistTop"));
506 evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.genlistBottom"));
507 evas_object_hide(m_layout);
511 void MainUI::clearItems()
513 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
514 clearHistoryGenlist();
515 clearBookmarkGengrid();
516 elm_genlist_clear(m_genListTop);
517 elm_genlist_clear(m_genListBottom);
520 Evas_Object* MainUI::createNoHistoryLabel()
522 Evas_Object *label = elm_label_add(m_parent);
523 elm_object_text_set(label, "No favorite websites.");
524 evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
525 evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL);
529 void MainUI::setEmptyGengrid(bool setEmpty)
532 elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoHistoryLabel());
534 elm_object_part_content_set(m_gengrid, "elm.swallow.empty", nullptr);
538 void MainUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info)
540 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
541 Elm_Object_Item *item = reinterpret_cast<Elm_Object_Item*>(event_info);
542 elm_object_item_signal_emit( item, "mouse,in", "over2");
545 elm_gengrid_item_selected_set(item, EINA_TRUE);
548 void MainUI::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info)
550 BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__);
551 Elm_Object_Item *item = reinterpret_cast<Elm_Object_Item*>(event_info);
552 elm_object_item_signal_emit( item, "mouse,out", "over2");
554 // unselected manually
555 elm_gengrid_item_selected_set(item, EINA_FALSE);