From a76afd26f9fdd471633a68f0e383ac3bc286ae80 Mon Sep 17 00:00:00 2001 From: Albert Malewski Date: Mon, 17 Aug 2015 14:22:02 +0200 Subject: [PATCH 01/16] Added action on "Exit browser" button [Issue#] https://bugs.tizen.org/jira/browse/TT-131 [Problem] "Exit browser" in More Menu is not working. [Cause] There was no action connected to "exit browser" button. [Solution] Added function _exitClicked that calls elm_exit(). [Verify] Browser -> MoreMenu -> Exit browser -> Obs Browser should be closed. Change-Id: I14473625d1b8ba9d60e9049005193b63e3a66208 --- services/MoreMenuUI/MoreMenuUI.cpp | 17 +++++++++++++++-- services/MoreMenuUI/MoreMenuUI.h | 1 + 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/services/MoreMenuUI/MoreMenuUI.cpp b/services/MoreMenuUI/MoreMenuUI.cpp index ff31301..3edef9d 100644 --- a/services/MoreMenuUI/MoreMenuUI.cpp +++ b/services/MoreMenuUI/MoreMenuUI.cpp @@ -465,17 +465,24 @@ void MoreMenuUI::_thumbSelected(void* data, Evas_Object*, void*) break; #ifdef READER_MODE_ENABLED case READER_MODE: - //TODO: Implement reader mode + //TODO: Implement reader mode + break; #endif case SCREEN_ZOOM: + break; #ifdef START_MINIBROWSER_ENABLED case START_MINIBROWSER: - //TODO: Implement minibrowser launching + //TODO: Implement minibrowser launching + break; #endif case FOCUS_MODE: + break; case VIEW_MOBILE_WEB: + break; case SHARE: + break; case EXIT_BROWSER: + _exitClicked(); break; } } @@ -499,6 +506,12 @@ void MoreMenuUI::clearItems() elm_cache_all_flush(); } +void MoreMenuUI::_exitClicked() +{ + BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); + elm_exit(); +} + //void MoreMenuUI::focusItem(void*, Evas_Object*, void* event_info) //{ // BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); diff --git a/services/MoreMenuUI/MoreMenuUI.h b/services/MoreMenuUI/MoreMenuUI.h index 1d87456..0bb5b1e 100644 --- a/services/MoreMenuUI/MoreMenuUI.h +++ b/services/MoreMenuUI/MoreMenuUI.h @@ -81,6 +81,7 @@ private: static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part); static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); + static void _exitClicked(); static Evas_Object* listItemContentGet(void *data, Evas_Object *obj, const char *part); static char* listItemTextGet(void *data, Evas_Object *obj, const char *part); -- 2.7.4 From 7ef0447eb77b0dbd6c66c2c2827f8b1e988e9e53 Mon Sep 17 00:00:00 2001 From: Marcin Lapinski Date: Tue, 18 Aug 2015 11:46:41 +0200 Subject: [PATCH 02/16] Set callback for bookmark gengrid item instead of items thumbnail. [Issue#] https://bugs.tizen.org/jira/browse/TT-135 [Problem] Clicking on bookmark folder text doesn't work. [Cause] Callback was set on thumbnail instead of on whole item. [Sollution] Move callback to bookmark gengrid item click. [Verify] 1. Run browser 2. Create some bookmark folders 3. Open More Menu -> Bookmark manager 4. Click on some bookmark folder description 5. Bookmark folder shold be opened. Additional changes: - Changed some function names to make code more self-explaining. - Removed redundant focus managment callbacks causing problems in the current approach. Change-Id: Ibddc457a7cfdc19f7b68ce4163f4b2ae04d793db --- services/BookmarkManagerUI/BookmarkManagerUI.cpp | 59 ++++++------------------ services/BookmarkManagerUI/BookmarkManagerUI.h | 11 ++--- 2 files changed, 18 insertions(+), 52 deletions(-) diff --git a/services/BookmarkManagerUI/BookmarkManagerUI.cpp b/services/BookmarkManagerUI/BookmarkManagerUI.cpp index 9a0be45..2ae1617 100644 --- a/services/BookmarkManagerUI/BookmarkManagerUI.cpp +++ b/services/BookmarkManagerUI/BookmarkManagerUI.cpp @@ -80,15 +80,12 @@ void BookmarkManagerUI::show(Evas_Object* parent) elm_object_part_content_set(b_mm_layout, "elm.swallow.grid", m_gengrid); elm_object_style_set(m_gengrid, "back_ground"); - evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, nullptr); - evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, nullptr); - evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this); if (!m_item_class) { m_item_class = elm_gengrid_item_class_new(); m_item_class->item_style = "grid_bm_item"; - m_item_class->func.text_get = _grid_text_get; - m_item_class->func.content_get = _grid_content_get; + m_item_class->func.text_get = _grid_folder_text_get; + m_item_class->func.content_get = _grid_folder_content_get; m_item_class->func.state_get = nullptr; m_item_class->func.del = nullptr; } @@ -298,7 +295,7 @@ void BookmarkManagerUI::addBookmarkFolderItem(std::shared_ptritem = hi; itemData->bookmarkManagerUI.reset(this); - Elm_Object_Item* BookmarkFolderView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, nullptr, this); + Elm_Object_Item* BookmarkFolderView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, _folderItemClicked, itemData); m_map_bookmark_folder_views.insert(std::pair(hi->getAddress(),BookmarkFolderView)); elm_gengrid_item_selected_set(BookmarkFolderView, EINA_FALSE); setEmptyGengrid(false); @@ -322,7 +319,7 @@ void BookmarkManagerUI::addBookmarkItem(std::shared_ptritem = hi; itemData->bookmarkManagerUI.reset(this); - Elm_Object_Item* BookmarkView = elm_gengrid_item_append(m_gengrid, m_detail_item_class, itemData, nullptr, this); + Elm_Object_Item* BookmarkView = elm_gengrid_item_append(m_gengrid, m_detail_item_class, itemData, _bookmarkItemClicked, itemData); m_map_bookmark_folder_views.insert(std::pair(hi->getAddress(),BookmarkView)); elm_gengrid_item_selected_set(BookmarkView, EINA_FALSE); setEmptyGengrid(false); @@ -339,7 +336,7 @@ void BookmarkManagerUI::addBookmarkItems(std::vector image = itemData->item->getThumbnail(); + std::shared_ptr image = itemData->item->getThumbnail(); if (image) { - thumb = tizen_browser::tools::EflTools::getEvasImage(image, itemData->bookmarkManagerUI->m_parent); + thumb = tools::EflTools::getEvasImage(image, itemData->bookmarkManagerUI->m_parent); } return thumb; } @@ -388,7 +385,6 @@ Evas_Object * BookmarkManagerUI::_grid_content_get(void *data, Evas_Object *obj, if (thumbButton != nullptr) { elm_object_style_set(thumbButton, "thumbButton"); - evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::BookmarkManagerUI::_thumbSelected, data); } return thumbButton; } @@ -446,7 +442,6 @@ Evas_Object * BookmarkManagerUI::_grid_bookmark_content_get(void *data, Evas_Obj if (thumbButton != nullptr) { elm_object_style_set(thumbButton, "thumbButton"); - evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::BookmarkManagerUI::_bookmark_thumbSelected, data); } return thumbButton; } @@ -454,11 +449,12 @@ Evas_Object * BookmarkManagerUI::_grid_bookmark_content_get(void *data, Evas_Obj return nullptr; } -void BookmarkManagerUI::_itemSelected(void * data, Evas_Object *, void * event_info) +void BookmarkManagerUI::_bookmarkItemClicked(void * data, Evas_Object *, void * event_info) { + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); (void)data; (void)event_info; -#if 0 +/* if ((data != nullptr) && (event_info != nullptr)) { Elm_Object_Item * selected = static_cast(event_info); @@ -469,11 +465,12 @@ void BookmarkManagerUI::_itemSelected(void * data, Evas_Object *, void * event_i self->bookmarkClicked(itemData->item); } } -#endif +*/ } -void BookmarkManagerUI::_thumbSelected(void * data, Evas_Object *, void *) +void BookmarkManagerUI::_folderItemClicked(void * data, Evas_Object *, void *) { + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); if (data != nullptr) { BookmarkFolderItemData * itemData = static_cast(data); @@ -483,7 +480,6 @@ void BookmarkManagerUI::_thumbSelected(void * data, Evas_Object *, void *) } } - void BookmarkManagerUI::_bookmark_thumbSelected(void * data, Evas_Object *, void *) { (void)data; @@ -508,7 +504,6 @@ void BookmarkManagerUI::clearItems() elm_cache_all_flush(); } - void BookmarkManagerUI::updateGengrid() { elm_genlist_clear(m_genList); @@ -516,31 +511,5 @@ void BookmarkManagerUI::updateGengrid() m_map_bookmark_folder_views.clear(); } -void BookmarkManagerUI::focusItem(void*, Evas_Object*, void* event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if (event_info != nullptr) - { - Elm_Object_Item *item = static_cast(event_info); - elm_object_item_signal_emit( item, "mouse,in", "over2"); - - // selected manually - elm_gengrid_item_selected_set(item, EINA_TRUE); - } -} - -void BookmarkManagerUI::unFocusItem(void*, Evas_Object*, void* event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if (event_info != nullptr) - { - Elm_Object_Item *item = static_cast(event_info); - elm_object_item_signal_emit( item, "mouse,out", "over2"); - - // unselected manually - elm_gengrid_item_selected_set(item, EINA_FALSE); - } -} - } } diff --git a/services/BookmarkManagerUI/BookmarkManagerUI.h b/services/BookmarkManagerUI/BookmarkManagerUI.h index 419f508..eeb2a57 100644 --- a/services/BookmarkManagerUI/BookmarkManagerUI.h +++ b/services/BookmarkManagerUI/BookmarkManagerUI.h @@ -61,13 +61,13 @@ public: boost::signals2::signal bookmarkFolderClicked; private: - static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); - static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part); + static char* _grid_folder_text_get(void *data, Evas_Object *obj, const char *part); + static Evas_Object * _grid_folder_content_get(void *data, Evas_Object *obj, const char *part); static char* _grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _grid_bookmark_content_get(void *data, Evas_Object *obj, const char *part); - static void _itemSelected(void * data, Evas_Object * obj, void * event_info); - static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); + static void _bookmarkItemClicked(void * data, Evas_Object * obj, void * event_info); + static void _folderItemClicked(void * data, Evas_Object * obj, void * event_info); static void _bookmark_thumbSelected(void * data, Evas_Object *, void *); void NewFolderCreate(Evas_Object * popup_content); @@ -95,9 +95,6 @@ private: std::string edjFilePath; std::string m_folder; bool m_gengridSetup; - - static void focusItem(void*, Evas_Object*, void* event_info); - static void unFocusItem(void*, Evas_Object*, void* event_info); }; } -- 2.7.4 From fddb1dac5662e51a56cc87b6b08224a1cc4c058e Mon Sep 17 00:00:00 2001 From: Maciej Skrzypkowski Date: Mon, 17 Aug 2015 16:02:17 +0200 Subject: [PATCH 03/16] Change view of Most Visited tiles. [Issue#] https://bugs.tizen.org/jira/browse/TT-73 [Problem] Font sizes, colors, highlight were wrong. [Cause] N/A [Solution] Changed to proper ones. [Verify] Check tiles title and URL font and it's location acording to guideline. Check backgrounds. Check highliting tiles. Change-Id: I8ab0b869a72f6baedaf3832e58edb88c40135940 Signed-off-by: Maciej Skrzypkowski --- services/MainUI/edc/MainUI.edc | 867 +++++++++++++++++++++++------------------ 1 file changed, 478 insertions(+), 389 deletions(-) diff --git a/services/MainUI/edc/MainUI.edc b/services/MainUI/edc/MainUI.edc index a81e52a..ba358bf 100644 --- a/services/MainUI/edc/MainUI.edc +++ b/services/MainUI/edc/MainUI.edc @@ -100,11 +100,7 @@ group { name: "mv_bookmarks"; } color_class{ name: "focusBgColor"; - color: 69 143 255 255; - } - color_class{ - name: "highlightBgColor"; - color: 69 143 255 102; + color: 0 119 246 255; } color_class{ name: "imageHighlight"; @@ -343,425 +339,518 @@ group { name: "mv_bookmarks"; } group { name: "elm/genlist/item/big_grid_item/default"; - data.item: "texts" "page_title page_url"; - data.item: "contents" "elm.thumbnail elm.thumbButton"; - min: 600 614; - max: 600 614; - images { - image: "web_frame_selected.png" COMP; - image: "ico_bg_round_shape_37x37.png" COMP; - } - parts { - part { name: "bg"; - type: RECT; - mouse_events: 0; - description { state: "default" 0.0; - min: 784 614; - max: 784 614; - visible: 1; - color: 231 231 231 255; - } - description { state: "selected"; - inherit: "default" 0.0; - color: 70 143 254 255; - } - } - - part { name: "elm.thumbnail"; - type: SWALLOW; - description { state: "default" 0.0; - fixed: 1 0; - align: 0.0 0.0; - color : 231 231 231 255; - min: 784 526; - max: 784 526; - rel1 { - relative: 0.0 0.0; to: "bg"; - } - rel2 { - relative: 1.0 1.0; to: "bg"; - } - } - description { state: "selected"; - inherit: "default" 0.0; - } - } - - part { name: "focus_highlight"; - type: IMAGE; - description { state: "default" 0.0; - rel1 { - to: "elm.thumbnail"; - relative: 0.0 0.0; - } - rel2 { - to: "elm.thumbnail"; - relative: 1.0 1.0; - } - image.normal: "web_frame_selected.png"; - image.border: 8 8 8 0; - image.border_scale: 1; - image.middle: NONE; - visible: 0; - } - description { state: "selected"; - inherit: "default" 0.0; - visible: 1; - } - } - - part { name: "background"; - type: RECT; - description { state: "default" 0.0; - min: 784 87; - max: 784 87; - align: 0.0 0.0; - color: 231 231 231 255; - rel1 { - to: "elm.thumbnail"; - relative: 0.0 1.0; - } - rel2 { - relative: 1.0 1.0; - } - } - description { state: "selected" 0.0; - inherit: "default" 0.0; - color: 70 143 254 255; - } - } + data.item: "texts" "page_title page_url"; + data.item: "contents" "elm.thumbnail elm.thumbButton"; + min: 600 614; + max: 600 614; + images { + image: "web_frame_selected.png" COMP; + image: "ico_bg_round_shape_37x37.png" COMP; + } + parts { + part { name: "bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + min: 784 614; + max: 784 614; + visible: 1; + color: 231 231 231 255; + } + } - part { name: "page_title"; - type: TEXT; - description { state: "default" 0.0; - min: 700 48; - max: 700 48; - align: 0.0 0.5; - rel1 { - to: "background"; - relative: 0.0 0.0; - offset: 17 0; - } - rel2 { - to: "background"; - relative: 1.0 1.0; - } - color: 51 51 51 255; - text { - text: "Web page title"; - font: "Sans"; - size: 27; - align: 0 0.5; - } - } - description { state: "focus" 0.0; - inherit: "default" 0.0; - //color: focusTextColor; + part { name: "elm.thumbnail"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 0.0 0.0; + color : 231 231 231 255; + min: 784 498; + max: 784 498; + rel1 { + relative: 0.0 0.0; to: "bg"; } - description { state: "highlight" 0.0; - inherit: "default" 0.0; - //color: highlightTextColor; + rel2 { + relative: 1.0 1.0; to: "bg"; } - } + } + description { state: "selected"; + inherit: "default" 0.0; + } + } - part { name: "page_url"; - type: TEXT; - description { state: "default" 0.0; - min: 700 48; - max: 700 48; - align: 0 0.5; - rel1 { - to: "page_title"; - relative: 0.0 1.0; - } - rel2 { - to: "page_title"; - relative: 1.0 1.0; - } - color: 153 153 153 255; - text { - text: "Web page url"; - font: "Sans"; - size: 24; - align: 0 0.5; - } + part { name: "border_top"; + type: RECT; + description { state: "default" 0.0; + color_class: focusBgColor; + min: 0 6; + max: -1 6; + align: 0 0; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 0.0; } - description { state: "focus" 0.0; - inherit: "default" 0.0; - //color: focusTextColor; + rel2 { + to: "elm.thumbnail"; + relative: 1.0 1.0; } - description { state: "highlight" 0.0; - inherit: "default" 0.0; - //color: highlightTextColor; + visible: 0; + } + description { state: "selected"; + inherit: "default" 0.0; + visible: 1; + } + } + + part { name: "border_left"; + type: RECT; + description { state: "default" 0.0; + color_class: focusBgColor; + min: 6 0; + max: 6 -1; + align: 0 0; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 0.0; } + rel2 { + to: "elm.thumbnail"; + relative: 1.0 1.0; } + visible: 0; + } + description { state: "selected"; + inherit: "default" 0.0; + visible: 1; + } + } - part { name: "elm.thumbButton"; - type: SWALLOW; - description { state: "default" 0.0; - rel1.to: "elm.thumbnail"; - rel2.to: "elm.thumbnail"; - } - } - - part { name: "over2"; - type: RECT; - mouse_events: 1; - repeat_events: 1; - description { state: "default" 0.0; - color: 0 0 0 0; - rel1.to: "bg"; - rel2.to: "background"; - } - } - part { name: "over3"; - type: RECT; - mouse_events: 1; - repeat_events: 1; - description { state: "default" 0.0; - color: 0 0 0 0; - rel1.to: "background"; - rel2.to: "background"; - } - } - } - - programs{ - program { name: "mouse_in"; - signal: "mouse,in"; - source: "over2"; - action: STATE_SET "selected" 0.0; - target: "background"; - target: "focus_highlight"; - target: "bg"; - } - program { name: "mouse_out"; - signal: "mouse,out"; - source: "over2"; - action: STATE_SET "default" 0.0; - target: "background"; - target: "focus_highlight"; - target: "bg"; - } - } -} - -group { name: "elm/genlist/item/small_grid_item/default"; - data.item: "texts" "page_title page_url"; - data.item: "contents" "elm.thumbnail elm.thumbButton"; - images { - image: "web_frame_selected.png" COMP; - image: "ico_bg_round_shape_37x37.png" COMP; - } - parts { - part { name: "border"; + part { name: "border_right"; type: RECT; description { state: "default" 0.0; - min: 378 320; - max: 378 320; + color_class: focusBgColor; + min: 6 0; + max: 6 -1; + align: 1 0; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 0.0; + } + rel2 { + to: "elm.thumbnail"; + relative: 1.0 1.0; + } visible: 0; } + description { state: "selected"; + inherit: "default" 0.0; + visible: 1; + } } - part { name: "bg"; - type: RECT; - mouse_events: 0; - description { state: "default" 0.0; - min: 378 294; - max: 378 294; - visible: 1; - color: 231 231 231 255; + part { name: "background"; + type: RECT; + description { state: "default" 0.0; + min: 784 116; + max: 784 116; align: 0.0 0.0; + color: 113 128 147 255; + visible: 1; rel1 { - relative: 0.0 0.0; to: "border"; + to: "elm.thumbnail"; + relative: 0.0 1.0; } rel2 { - relative: 1.0 1.0; to: "border"; + relative: 1.0 1.0; } - } - description { state: "selected"; - inherit: "default" 0.0; - color: 70 143 254 255; - } - } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 0 119 246 255; + } + } - part { name: "elm.thumbnail"; - type: SWALLOW; - description { state: "default" 0.0; - fixed: 1 0; - align: 0.0 0.0; - color : 231 231 231 255; - min: 342 203; - max: 342 203; - rel1 { - relative: 0.0 0.0; to: "bg"; - } - rel2 { - relative: 1.0 1.0; to: "bg"; - } - } - description { state: "selected"; - inherit: "default" 0.0; - } - } + part { name: "page_title"; + type: TEXT; + description { state: "default" 0.0; + min: 700 36; + max: 700 36; + align: 0.0 0.0; + color: 255 255 255 255; + rel1 { + to: "background"; + relative: 0.0 0.0; + offset: 32 22; + } + rel2 { + to: "background"; + relative: 1.0 1.0; + } + text { + text: "Web page title"; + font: "Sans"; + size: 36; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color_class: highlightTextColor; + } + } - part { name: "focus_highlight"; - type: IMAGE; - description { state: "default" 0.0; - rel1 { - to: "elm.thumbnail"; - relative: 0.0 0.0; - } - rel2 { - to: "elm.thumbnail"; - relative: 1.0 1.0; - } - image.normal: "web_frame_selected.png"; - image.border: 8 8 8 0; - image.border_scale: 1; - image.middle: NONE; - visible: 0; - } - description { state: "selected"; - inherit: "default" 0.0; - visible: 1; - } - } + part { name: "page_url"; + type: TEXT; + description { state: "default" 0.0; + min: 700 28; + max: 700 28; + align: 0 0.0; + color: 255 255 255 255; + rel1 { + to: "page_title"; + relative: 0.0 1.0; + offset: 0 10; + } + rel2 { + to: "background"; + relative: 1.0 1.0; + } + text { + text: "Web page url"; + font: "Sans"; + size: 28; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color_class: highlightTextColor; + } + } - part { name: "background"; - type: RECT; - description { state: "default" 0.0; - min: 342 87; - max: 342 87; - align: 0.0 0.0; - color: 231 231 231 255; - rel1 { - to: "elm.thumbnail"; - relative: 0.0 1.0; - } - rel2 { - relative: 1.0 1.0; - } - } - description { state: "selected" 0.0; - inherit: "default" 0.0; - color: 70 143 254 255; - } - } + part { name: "elm.thumbButton"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "bg"; + rel2.to: "bg"; + } + } - part { name: "page_title"; - type: TEXT; - description { state: "default" 0.0; - min: 320 48; - max: 320 48; - align: 0.0 0.5; - rel1 { - to: "background"; - relative: 0.0 0.0; - offset: 17 0; - } - rel2 { - to: "background"; - relative: 1.0 1.0; - } - color: 51 51 51 255; - text { - text: "Web page title"; - font: "Sans"; - size: 27; - align: 0 0.5; - } + part { name: "over2"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "bg"; + rel2.to: "background"; + } + } + part { name: "over3"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "background"; + rel2.to: "background"; + } + } + } + + programs{ + program { name: "mouse_in"; + signal: "mouse,in"; + source: "over2"; + action: STATE_SET "selected" 0.0; + target: "background"; + target: "border_top"; + target: "border_left"; + target: "border_right"; + } + program { name: "mouse_out"; + signal: "mouse,out"; + source: "over2"; + action: STATE_SET "default" 0.0; + target: "background"; + target: "border_top"; + target: "border_left"; + target: "border_right"; + } + } +} + +group { name: "elm/genlist/item/small_grid_item/default"; + data.item: "texts" "page_title page_url"; + data.item: "contents" "elm.thumbnail elm.thumbButton"; + images { + image: "web_frame_selected.png" COMP; + image: "ico_bg_round_shape_37x37.png" COMP; + } + parts { + part { name: "container"; + type: RECT; + description { state: "default" 0.0; + min: 378 320; + max: 378 320; + visible: 0; + } + } + + part { name: "bg"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + min: 378 294; + max: 378 294; + visible: 1; + color: 231 231 231 255; + align: 0.0 0.0; + rel1 { + relative: 0.0 0.0; to: "container"; } - description { state: "focus" 0.0; - inherit: "default" 0.0; - //color: focusTextColor; + rel2 { + relative: 1.0 1.0; to: "container"; } - description { state: "highlight" 0.0; - inherit: "default" 0.0; - //color: highlightTextColor; + } + } + + part { name: "elm.thumbnail"; + type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 0.0 0.0; + color : 231 231 231 255; + min: 378 198; + max: 378 198; + rel1 { + relative: 0.0 0.0; to: "bg"; } - } + rel2 { + relative: 1.0 1.0; to: "bg"; + } + } + description { state: "selected"; + inherit: "default" 0.0; + } + } - part { name: "page_url"; - type: TEXT; - description { state: "default" 0.0; - min: 320 48; - max: 320 48; - align: 0 0.5; - rel1 { - to: "page_title"; - relative: 0.0 1.0; - } - rel2 { - to: "page_title"; - relative: 1.0 1.0; - } - color: 153 153 153 255; - text { - text: "Web page url"; - font: "Sans"; - size: 24; - align: 0 0.5; - } + part { name: "border_top"; + type: RECT; + description { state: "default" 0.0; + color_class: focusBgColor; + min: 0 6; + max: -1 6; + align: 0 0; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 0.0; } - description { state: "focus" 0.0; - inherit: "default" 0.0; - //color: focusTextColor; + rel2 { + to: "elm.thumbnail"; + relative: 1.0 1.0; } - description { state: "highlight" 0.0; - inherit: "default" 0.0; - //color: highlightTextColor; + visible: 0; + } + description { state: "selected"; + inherit: "default" 0.0; + visible: 1; + } + } + + part { name: "border_left"; + type: RECT; + description { state: "default" 0.0; + color_class: focusBgColor; + min: 6 0; + max: 6 -1; + align: 0 0; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 0.0; } + rel2 { + to: "elm.thumbnail"; + relative: 1.0 1.0; } + visible: 0; + } + description { state: "selected"; + inherit: "default" 0.0; + visible: 1; + } + } - part { name: "elm.thumbButton"; - type: SWALLOW; - description { state: "default" 0.0; - rel1.to: "elm.thumbnail"; - rel2.to: "elm.thumbnail"; - } - } + part { name: "border_right"; + type: RECT; + description { state: "default" 0.0; + color_class: focusBgColor; + min: 6 0; + max: 6 -1; + align: 1 0; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 0.0; + } + rel2 { + to: "elm.thumbnail"; + relative: 1.0 1.0; + } + visible: 0; + } + description { state: "selected"; + inherit: "default" 0.0; + visible: 1; + } + } - part { name: "over2"; - type: RECT; - mouse_events: 1; - repeat_events: 1; - description { state: "default" 0.0; - color: 0 0 0 0; - rel1.to: "bg"; - rel2.to: "background"; - } - } - part { name: "over3"; - type: RECT; - mouse_events: 1; - repeat_events: 1; - description { state: "default" 0.0; - color: 0 0 0 0; - rel1.to: "background"; - rel2.to: "background"; - } - } - } + part { name: "background"; + type: RECT; + description { state: "default" 0.0; + min: 378 96; + max: 378 96; + align: 0.0 0.0; + color: 113 128 147 255; + visible: 1; + rel1 { + to: "elm.thumbnail"; + relative: 0.0 1.0; + } + rel2 { + relative: 1.0 1.0; + } + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 0 119 246 255; + } + } - programs{ - program { name: "mouse_in"; - signal: "mouse,in"; - source: "over2"; - action: STATE_SET "selected" 0.0; - target: "background"; - target: "focus_highlight"; - target: "bg"; - } - program { name: "mouse_out"; - signal: "mouse,out"; - source: "over2"; - action: STATE_SET "default" 0.0; - target: "background"; - target: "focus_highlight"; - target: "bg"; - } - } + part { name: "page_title"; + type: TEXT; + description { state: "default" 0.0; + min: 314 28; + max: 314 28; + align: 0.0 0.0; + color: 255 255 255 255; + rel1 { + to: "background"; + relative: 0.0 0.0; + offset: 32 18; + } + rel2 { + to: "background"; + relative: 1.0 1.0; + } + text { + text: "Web page title"; + font: "Sans"; + size: 28; + align: 0 0.0; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color_class: highlightTextColor; + } + } + + part { name: "page_url"; + type: TEXT; + description { state: "default" 0.0; + min: 314 24; + max: 314 24; + align: 0 0.0; + color: 255 255 255 255; + rel1 { + to: "page_title"; + relative: 0.0 1.0; + offset: 0 8; + } + rel2 { + to: "background"; + relative: 1.0 1.0; + } + text { + text: "Web page url"; + font: "Sans"; + size: 24; + align: 0 0.5; + } + } + description { state: "focus" 0.0; + inherit: "default" 0.0; + color_class: focusTextColor; + } + description { state: "highlight" 0.0; + inherit: "default" 0.0; + //color_class: highlightTextColor; + } + } + + part { name: "elm.thumbButton"; + type: SWALLOW; + description { state: "default" 0.0; + rel1.to: "bg"; + rel2.to: "bg"; + } + } + + part { name: "over2"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "bg"; + rel2.to: "background"; + } + } + + part { name: "over3"; + type: RECT; + mouse_events: 1; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + rel1.to: "background"; + rel2.to: "background"; + } + } + } + + programs { + program { name: "mouse_in"; + signal: "mouse,in"; + source: "over2"; + action: STATE_SET "selected" 0.0; + target: "background"; + target: "border_top"; + target: "border_left"; + target: "border_right"; + } + program { name: "mouse_out"; + signal: "mouse,out"; + source: "over2"; + action: STATE_SET "default" 0.0; + target: "background"; + target: "border_top"; + target: "border_left"; + target: "border_right"; + } + } } group { name: "elm/gengrid/item/grid_item/default"; -- 2.7.4 From 2a185292ceb2ec7d3b852bb9b5ddd94d62bce024 Mon Sep 17 00:00:00 2001 From: Maciej Skrzypkowski Date: Wed, 19 Aug 2015 11:13:52 +0200 Subject: [PATCH 04/16] Add removing http prefix from URL, add preventing from loading view two times. [Issue#] https://bugs.tizen.org/jira/browse/TT-73 [Problem] Full URL was shown, second click on button caused hiding view. [Cause] N/A [Solution] Parsing URL, preventing second view show. [Verify] Check URL on "Most visited" tiles, check if second click on "Most visited" or "Bookmark" button causes hiding view. Change-Id: I0b043c75e2779ae277620cc16d14c221da64df22 Signed-off-by: Maciej Skrzypkowski --- services/MainUI/MainUI.cpp | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/services/MainUI/MainUI.cpp b/services/MainUI/MainUI.cpp index c6feff8..8e4afd7 100644 --- a/services/MainUI/MainUI.cpp +++ b/services/MainUI/MainUI.cpp @@ -31,6 +31,9 @@ namespace tizen_browser{ namespace base_ui{ const int SMALL_TILES_ROWS = 2; +const int SUFIX_CHAR_DEL = 1; +const char * HTTP_PREFIX = "http://"; +const char * HTTPS_PREFIX = "https://"; EXPORT_SERVICE(MainUI, "org.tizen.browser.mainui") @@ -229,6 +232,8 @@ void MainUI::_mostVisited_clicked(void * data, Evas_Object * /* obj */, void * e { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); MainUI* mainUI = reinterpret_cast(data); + if (elm_object_part_content_get(mainUI->m_layout, "elm.swallow.left")) // check if most visited view is already set + return; mainUI->mostVisitedClicked(std::string()); } @@ -236,6 +241,8 @@ void MainUI::_bookmark_clicked(void * data, Evas_Object * /* obj */, void * even { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); MainUI* mainUI = reinterpret_cast(data); + if (elm_object_part_content_get(mainUI->m_layout, "elm.swallow.grid")) // check if bookmark view is already set + return; mainUI->bookmarkClicked(std::string()); } @@ -323,14 +330,21 @@ void MainUI::addBookmarkItems(std::vector(data); - if (!strcmp(part, "page_title")) { - return strdup(itemData->item->getTitle().c_str()); - } - if (!strcmp(part, "page_url")) { - return strdup(itemData->item->getUrl().c_str()); - } - return strdup(""); + HistoryItemData *itemData = reinterpret_cast(data); + if (!strcmp(part, "page_title")) { + return strdup(itemData->item->getTitle().c_str()); + } + if (!strcmp(part, "page_url")) { + if (itemData->item->getUrl().find(HTTPS_PREFIX) == 0) { + size_t len = strlen(HTTPS_PREFIX); + return strdup(itemData->item->getUrl().substr(len, itemData->item->getUrl().size() - len - SUFIX_CHAR_DEL).c_str()); // remove https prefix + } else if (itemData->item->getUrl().find(HTTP_PREFIX) == 0) { + size_t len = strlen(HTTP_PREFIX); + return strdup(itemData->item->getUrl().substr(len, itemData->item->getUrl().size() - len - SUFIX_CHAR_DEL).c_str()); // remove http prefix + } + return strdup(itemData->item->getUrl().c_str()); + } + return strdup(""); } char* MainUI::_grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part) -- 2.7.4 From 4f9c8713e339024f2180079ba03df5c1779638f2 Mon Sep 17 00:00:00 2001 From: Albert Malewski Date: Tue, 18 Aug 2015 13:02:37 +0200 Subject: [PATCH 05/16] Fixed navigating to links from history [Issue#] https://bugs.tizen.org/jira/browse/TT-93 [Problem] Browser cannot navigate to links from history. [Cause] There is no implemented callback on click event in history. [Solution] Implemented callback _history_item_clicked_cb and switching the view. [Verify] Launch Browser > More menu > History > Click on some link > Obs Browser should load clicked webpage. Change-Id: Iaac04dd59776b302fa199dd6d631aafa03eca139 --- services/HistoryUI/HistoryUI.cpp | 9 ++++++++- services/HistoryUI/HistoryUI.h | 1 + services/SimpleUI/SimpleUI.cpp | 9 +++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/services/HistoryUI/HistoryUI.cpp b/services/HistoryUI/HistoryUI.cpp index 11ab3ed..c4ec024 100644 --- a/services/HistoryUI/HistoryUI.cpp +++ b/services/HistoryUI/HistoryUI.cpp @@ -234,7 +234,7 @@ Evas_Object * HistoryUI::_history_grid_content_get(void *data, Evas_Object*, con id->historyUI->m_itemClassToday->func.del = nullptr; for(auto it = _history_item_data.begin(); it != _history_item_data.end(); it++) { - Elm_Object_Item* historyView = elm_genlist_item_append(id->historyUI->m_genListToday, id->historyUI->m_itemClassToday, *it, nullptr, ELM_GENLIST_ITEM_NONE, nullptr, id->historyUI.get()); + Elm_Object_Item* historyView = elm_genlist_item_append(id->historyUI->m_genListToday, id->historyUI->m_itemClassToday, *it, nullptr, ELM_GENLIST_ITEM_NONE, _history_item_clicked_cb, (*it)); id->historyUI->m_map_history_views.insert(std::pair((*it)->item->getUrl(), historyView)); } @@ -294,5 +294,12 @@ void HistoryUI::clearItems() setEmptyGengrid(true); } +void HistoryUI::_history_item_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + HistoryItemData * itemData = reinterpret_cast(data); + itemData->historyUI->historyItemClicked(itemData->item); +} + } } diff --git a/services/HistoryUI/HistoryUI.h b/services/HistoryUI/HistoryUI.h index 7070ff8..f6ac0b2 100644 --- a/services/HistoryUI/HistoryUI.h +++ b/services/HistoryUI/HistoryUI.h @@ -58,6 +58,7 @@ private: static void _clearHistory_clicked(void *data, Evas_Object *obj, void *event_info); static char* _listTodayTextGet(void* data, Evas_Object* obj , const char* part); static void _close_clicked_cb(void *data, Evas_Object *obj, void *event_info); + static void _history_item_clicked_cb(void *data, Evas_Object *obj, void *event_info); void setEmptyGengrid(bool setEmpty); diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 9f3c77e..05826d3 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -597,6 +597,15 @@ void SimpleUI::onHistoryAdded(std::shared_ptr historyItem) { std::string historyAddress = historyItem->getUrl(); + if(m_historyUI) { // TODO: remove this section when naviframes will be available + m_historyUI->clearItems(); + m_historyUI = nullptr; + } + + if(m_moreMenuUI) { // TODO: remove this section when naviframes will be available + m_moreMenuUI->clearItems(); + m_moreMenuUI = nullptr; + } openNewTab(historyAddress); } -- 2.7.4 From ee4309d7da13b43d31114187d514b0bc5db06660 Mon Sep 17 00:00:00 2001 From: Janusz Majnert Date: Tue, 18 Aug 2015 09:40:57 +0200 Subject: [PATCH 06/16] Removing ewk_context_default_get call [Issue#] N/A [Problem] Call to internal EWK API [Cause] Code restored during branch merge [Solution] Remove the call, it is not needed [Verify] Build and run the browser, load a few tabs, close tabs The call to ewk_context_default get was restored by mistake when performing a merge between branches. The version in tizen branch had the code replaced with another method to implicitly initialize EWK internal contexts. Change-Id: If21dcc4ca40242786c22e80b7a5591a70c56ecfb --- services/SimpleUI/SimpleUI.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 05826d3..4cf12a4 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -76,7 +76,6 @@ SimpleUI::SimpleUI() , m_ewkContext(ewk_context_new()) { elm_init(0, nullptr); - ewk_context_default_get(); Evas_Object *main_window = elm_win_util_standard_add("browserApp", "browserApp"); if (main_window == nullptr) BROWSER_LOGE("Failed to create main window"); -- 2.7.4 From 8f14e6e0d0f626dffa6f39f98ff46f681d7c3793 Mon Sep 17 00:00:00 2001 From: Maciej Skrzypkowski Date: Wed, 19 Aug 2015 15:49:06 +0200 Subject: [PATCH 07/16] Added "no visited site" view for Most visted tab. [Issue#] https://bugs.tizen.org/jira/browse/TT-73 [Problem] For no history there was no message. [Cause] N/A [Solution] Added label "No visited site" when there is no history [Verify] Run fresh browser instance, there should be "No visited site" message in Most visited tab. Change-Id: I171f6d5d74dbc175102a08afac37b22ff3bb6e50 Signed-off-by: Maciej Skrzypkowski --- services/MainUI/MainUI.cpp | 52 +++++++++++++++++-------------- services/MainUI/MainUI.h | 4 +-- services/MainUI/edc/MainUI.edc | 69 ++++++++++++++++++++++++++++++++---------- services/SimpleUI/SimpleUI.cpp | 20 ++++++------ 4 files changed, 96 insertions(+), 49 deletions(-) diff --git a/services/MainUI/MainUI.cpp b/services/MainUI/MainUI.cpp index 8e4afd7..c52bb07 100644 --- a/services/MainUI/MainUI.cpp +++ b/services/MainUI/MainUI.cpp @@ -31,6 +31,7 @@ namespace tizen_browser{ namespace base_ui{ const int SMALL_TILES_ROWS = 2; +const int MAX_TILES_NUMBER = 5; const int SUFIX_CHAR_DEL = 1; const char * HTTP_PREFIX = "http://"; const char * HTTPS_PREFIX = "https://"; @@ -269,8 +270,8 @@ Evas_Object* MainUI::listItemBottomContentGet(void* data, Evas_Object* obj, cons void MainUI::addHistoryItem(std::shared_ptr hi) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - if (m_map_history_views.size() >= 5) - return; + if (m_map_history_views.size() >= MAX_TILES_NUMBER) + return; HistoryItemData *itemData = new HistoryItemData(); itemData->item = hi; @@ -290,19 +291,18 @@ void MainUI::addHistoryItem(std::shared_ptr(hi->getUrl(),historyView)); - - setEmptyGengrid(false); } void MainUI::addHistoryItems(std::vector > items) { - BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - int i = 0; - for (auto it = items.begin(); it != items.end(); ++it) { - i++; - if (i > 5) break; - addHistoryItem(*it); - } + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + int i = 0; + for (auto it = items.begin(); it != items.end(); ++it) { + i++; + if (i > MAX_TILES_NUMBER) + break; + addHistoryItem(*it); + } } void MainUI::addBookmarkItem(std::shared_ptr bi) @@ -317,7 +317,7 @@ void MainUI::addBookmarkItem(std::shared_ptr > items) @@ -438,6 +438,12 @@ void MainUI::showHistoryGenlist() elm_object_part_content_unset(m_layout, "elm.swallow.grid"); evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.genlistBottom")); elm_object_part_content_unset(m_layout, "elm.swallow.genlistBottom"); + + if (m_map_history_views.empty()) { + setEmptyView(true); + return; + } + setEmptyView(false); elm_object_part_content_set(m_layout, "elm.swallow.left", m_genListLeft); elm_object_part_content_set(m_layout, "elm.swallow.right", m_genListRight); elm_object_part_content_set(m_layout, "elm.swallow.center", m_genListCenter); @@ -479,21 +485,23 @@ void MainUI::clearItems() elm_genlist_clear(m_genListBottom); } -Evas_Object* MainUI::createNoHistoryLabel() +void MainUI::showNoHistoryLabel() { - Evas_Object *label = elm_label_add(m_parent); - elm_object_text_set(label, "No favorite websites."); - evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); - return label; + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.left")); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.right")); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.center")); + + elm_layout_text_set(m_layout, "elm.text.empty", "No visited site"); + elm_layout_signal_emit(m_layout, "empty,view", "mainui"); } -void MainUI::setEmptyGengrid(bool setEmpty) +void MainUI::setEmptyView(bool empty) { - if(setEmpty) { - elm_object_part_content_set(m_gengrid, "elm.swallow.empty", createNoHistoryLabel()); + BROWSER_LOGD("%s:%d %s, empty: %d", __FILE__, __LINE__, __func__, empty); + if(empty) { + showNoHistoryLabel(); } else { - elm_object_part_content_set(m_gengrid, "elm.swallow.empty", nullptr); + elm_layout_signal_emit(m_layout, "not,empty,view", "mainui"); } } diff --git a/services/MainUI/MainUI.h b/services/MainUI/MainUI.h index c62a301..66e8d94 100644 --- a/services/MainUI/MainUI.h +++ b/services/MainUI/MainUI.h @@ -70,7 +70,7 @@ private: static void _item_deleted(void *data, Evas_Object *obj); static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); static void _deleteBookmark(void *data, Evas_Object *obj, void *event_info); - void setEmptyGengrid(bool setEmpty); + void setEmptyView(bool empty); static void _mostVisited_clicked(void * data, Evas_Object * obj, void * event_info); static void _bookmark_clicked(void * data, Evas_Object * obj, void * event_info); @@ -92,7 +92,7 @@ private: std::map m_map_bookmark_views; bool m_gengridSetup; std::string edjFilePath; - Evas_Object *createNoHistoryLabel(); + void showNoHistoryLabel(); static void focusItem(void* data, Evas_Object* obj, void* event_info); static void unFocusItem(void* data, Evas_Object* obj, void* event_info); diff --git a/services/MainUI/edc/MainUI.edc b/services/MainUI/edc/MainUI.edc index ba358bf..ea2929e 100644 --- a/services/MainUI/edc/MainUI.edc +++ b/services/MainUI/edc/MainUI.edc @@ -203,7 +203,7 @@ group { name: "mv_bookmarks"; } } - part { name: "most_visited"; + part { name: "center_rect"; type: RECT; description { state: "default" 0.0; min: 1592 614; @@ -219,6 +219,11 @@ group { name: "mv_bookmarks"; relative: 1 1; } } + description { state: "empty" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 229 229 229 255; + } } part { name: "elm.swallow.left"; type: SWALLOW; @@ -228,7 +233,7 @@ group { name: "mv_bookmarks"; align: 0.0 0.0; fixed: 0 0; rel1 { - relative: 0 0; to: "most_visited"; + relative: 0 0; to: "center_rect"; } rel2 { relative: 1 1; @@ -244,12 +249,12 @@ group { name: "mv_bookmarks"; align: 0.0 0.0; fixed: 0 0; rel1 { - to: "most_visited"; + to: "center_rect"; relative: 0 0; offset: 810 0; } rel2{ - to: "most_visited"; + to: "center_rect"; relative: 1 1; offset: 0 0; } @@ -263,12 +268,12 @@ group { name: "mv_bookmarks"; align: 0.0 0.0; fixed: 0 0; rel1 { - to: "most_visited"; + to: "center_rect"; relative: 0 0; offset: 1214 0; } rel2 { - to: "most_visited"; + to: "center_rect"; relative: 1 1; offset: 0 0; } @@ -322,19 +327,51 @@ group { name: "mv_bookmarks"; offset: 0 0; } } - } - part { name: "elm.swallow.empty"; - type: SWALLOW; - description { state: "default" 0.0; + } + + part { name: "elm.text.empty"; + type: TEXT; + description { state: "default" 0.0; + visible: 0; align: 0.5 0.5; - rel1 { - relative: 0.5 0.5; - } - rel2 { - relative: 0.5 0.5; - } + color: 0 0 0 179; + text { + text: "empty"; + font: "Sans"; + size: 32; + align: 0.5 0.5; + } + rel1 { + to: "gengrid_bg"; + relative: 0.0 0.0; } + rel2 { + to: "gengrid_bg"; + relative: 1 1; + } + } + description { state: "empty" 0.0; + inherit: "default" 0.0; + visible: 1; } + } + } + + programs { + program { name: "empty"; + signal: "empty,view"; + source: "mainui"; + action: STATE_SET "empty" 0.0; + target: "elm.text.empty"; + target: "center_rect"; + } + program { name: "not_empty"; + signal: "not,empty,view"; + source: "mainui"; + action: STATE_SET "default" 0.0; + target: "elm.text.empty"; + target: "center_rect"; + } } } diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 4cf12a4..10e3bab 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -610,8 +610,10 @@ void SimpleUI::onHistoryClicked(std::shared_ptrclearAllHistory(); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + m_historyService->clearAllHistory(); + m_mainUI->clearHistoryGenlist(); + m_mainUI->showHistoryGenlist(); } void SimpleUI::onMostVisitedClicked(const std::string&) @@ -1066,16 +1068,16 @@ void SimpleUI::hideMainUI() void SimpleUI::showMainUI() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_mainUI = - std::dynamic_pointer_cast + m_mainUI = std::dynamic_pointer_cast (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.mainui")); - M_ASSERT(m_mainUI); - hideWebView(); - m_mainUI->show(m_window.get()); - m_mainUI->addHistoryItems(getHistory()); + M_ASSERT(m_mainUI); + hideWebView(); + m_mainUI->show(m_window.get()); + m_mainUI->addHistoryItems(getHistory()); + m_mainUI->showHistoryGenlist(); - m_isHomePageActive = true; + m_isHomePageActive = true; } void SimpleUI::showHistoryUI(const std::string& str) -- 2.7.4 From b6a9b4256f08a2176676a3ad2c0d857fe8073529 Mon Sep 17 00:00:00 2001 From: Marcin Lapinski Date: Wed, 19 Aug 2015 14:25:54 +0200 Subject: [PATCH 08/16] Refactoring MainUI [Issue#] https://bugs.tizen.org/jira/browse/TT-72 [Problem] MainUI needs refactoring. [Cause] N/A [Sollotion] -Removed redundant gengrid from bottom panel. -Removed unused declarations. -Removed redundant namespace identifiers. [Verify] 1. Browser builds 2. Refactor does not change behaviour of browser. Change-Id: If23e9979914cb44af91b881b25e5caffbba4c246 --- services/MainUI/MainUI.cpp | 73 ++++++++++++------------------------------ services/MainUI/MainUI.h | 6 +--- services/MainUI/edc/MainUI.edc | 8 ++--- 3 files changed, 25 insertions(+), 62 deletions(-) diff --git a/services/MainUI/MainUI.cpp b/services/MainUI/MainUI.cpp index c52bb07..a7ab4a7 100644 --- a/services/MainUI/MainUI.cpp +++ b/services/MainUI/MainUI.cpp @@ -64,8 +64,7 @@ MainUI::MainUI() , m_genListLeft(nullptr) , m_genListCenter(nullptr) , m_genListRight(nullptr) - , m_genListBottom(nullptr) - , m_itemClassBottom(nullptr) + , m_layoutBottom(nullptr) , m_big_item_class(nullptr) , m_small_item_class(nullptr) , m_bookmark_item_class(nullptr) @@ -183,12 +182,12 @@ void MainUI::showTopButtons() Evas_Object *mvButton = elm_button_add(m_layoutTop); elm_object_style_set(mvButton, "invisible_button"); - evas_object_smart_callback_add(mvButton, "clicked", tizen_browser::base_ui::MainUI::_mostVisited_clicked, this); + evas_object_smart_callback_add(mvButton, "clicked", _mostVisited_clicked, this); elm_layout_content_set(m_layoutTop, "mostvisited_click", mvButton); Evas_Object *bmButton = elm_button_add(m_layoutTop); elm_object_style_set(bmButton, "invisible_button"); - evas_object_smart_callback_add(bmButton, "clicked", tizen_browser::base_ui::MainUI::_bookmark_clicked, this); + evas_object_smart_callback_add(bmButton, "clicked", _bookmark_clicked, this); elm_layout_content_set(m_layoutTop, "bookmark_click", bmButton); elm_object_part_content_set(m_layout, "elm.swallow.genlistTop", m_layoutTop); @@ -198,35 +197,17 @@ void MainUI::showBottomButton() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); elm_theme_extension_add(nullptr, edjFilePath.c_str()); - m_genListBottom = elm_genlist_add(m_layout); - elm_genlist_homogeneous_set(m_genListBottom, EINA_FALSE); - elm_genlist_multi_select_set(m_genListBottom, EINA_FALSE); - elm_genlist_select_mode_set(m_genListBottom, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(m_genListBottom, ELM_LIST_LIMIT); - //elm_genlist_decorate_mode_set(m_genListBottom, EINA_TRUE); - evas_object_size_hint_weight_set(m_genListBottom, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); - evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/ + m_layoutBottom = elm_layout_add(m_layout); + evas_object_size_hint_weight_set(m_layoutBottom, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_layoutBottom, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_layout_file_set(m_layoutBottom, edjFilePath.c_str(), "bottom_button_item"); + //elm_object_part_content_set(m_layout, "elm.swallow.layoutBottom", m_layoutBottom); - m_itemClassBottom = elm_genlist_item_class_new(); - m_itemClassBottom->item_style = "bottom_button_item"; - m_itemClassBottom->func.text_get = nullptr; - m_itemClassBottom->func.content_get = &listItemBottomContentGet; - m_itemClassBottom->func.state_get = 0; - m_itemClassBottom->func.del = 0; - - ItemData * id = new ItemData; - id->mainUI = this; - Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListBottom, //genlist - m_itemClassBottom, //item Class - id, - nullptr, //parent item - ELM_GENLIST_ITEM_NONE,//item type - nullptr, - nullptr //data passed to above function - ); - id->e_item = elmItem; + Evas_Object * bookmark_manager_button = elm_button_add(m_layoutBottom); + elm_object_style_set(bookmark_manager_button, "invisible_button"); + elm_object_part_content_set(m_layoutBottom, "bookmarkmanager_click", bookmark_manager_button); + evas_object_smart_callback_add(bookmark_manager_button, "clicked", _bookmark_manager_clicked, this); } void MainUI::_mostVisited_clicked(void * data, Evas_Object * /* obj */, void * event_info) @@ -250,21 +231,8 @@ void MainUI::_bookmark_clicked(void * data, Evas_Object * /* obj */, void * even void MainUI::_bookmark_manager_clicked(void * data, Evas_Object * /* obj */, void * event_info) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - ItemData* itemData = reinterpret_cast(data); - itemData->mainUI->bookmarkManagerClicked(std::string()); -} - -Evas_Object* MainUI::listItemBottomContentGet(void* data, Evas_Object* obj, const char* part) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if(!strcmp(part, "bookmarkmanager_click")) - { - Evas_Object *bmButton = elm_button_add(obj); - elm_object_style_set(bmButton, "invisible_button"); - evas_object_smart_callback_add(bmButton, "clicked", tizen_browser::base_ui::MainUI::_bookmark_manager_clicked, data); - return bmButton; - } - return nullptr; + MainUI* mainUI = static_cast(data); + mainUI->bookmarkManagerClicked(std::string()); } void MainUI::addHistoryItem(std::shared_ptr hi) @@ -275,7 +243,7 @@ void MainUI::addHistoryItem(std::shared_ptritem = hi; - itemData->mainUI = std::shared_ptr(this); + itemData->mainUI = std::shared_ptr(this); Elm_Object_Item* historyView = nullptr; if (m_map_history_views.empty()) @@ -376,7 +344,7 @@ Evas_Object * MainUI::_grid_content_get(void *data, Evas_Object *obj, const char else if (!strcmp(part, "elm.thumbButton")) { Evas_Object *thumbButton = elm_button_add(obj); elm_object_style_set(thumbButton, "thumbButton"); - evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::MainUI::_thumbSelected, data); + evas_object_smart_callback_add(thumbButton, "clicked", _thumbSelected, data); return thumbButton; } return nullptr; @@ -399,7 +367,7 @@ Evas_Object * MainUI::_grid_bookmark_content_get(void *data, Evas_Object *obj, c else if (!strcmp(part, "elm.thumbButton")) { Evas_Object *thumbButton = elm_button_add(obj); elm_object_style_set(thumbButton, "thumbButton"); - evas_object_smart_callback_add(thumbButton, "clicked", tizen_browser::base_ui::MainUI::_thumbSelected, data); + evas_object_smart_callback_add(thumbButton, "clicked", _thumbSelected, data); return thumbButton; } return nullptr; @@ -436,8 +404,8 @@ void MainUI::showHistoryGenlist() { evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.grid")); elm_object_part_content_unset(m_layout, "elm.swallow.grid"); - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.genlistBottom")); - elm_object_part_content_unset(m_layout, "elm.swallow.genlistBottom"); + evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.layoutBottom")); + elm_object_part_content_unset(m_layout, "elm.swallow.layoutBottom"); if (m_map_history_views.empty()) { setEmptyView(true); @@ -465,7 +433,7 @@ void MainUI::showBookmarkGengrid() elm_object_part_content_unset(m_layout, "elm.swallow.right"); elm_object_part_content_unset(m_layout, "elm.swallow.center"); elm_object_part_content_set(m_layout, "elm.swallow.grid", m_gengrid); - elm_object_part_content_set(m_layout, "elm.swallow.genlistBottom", m_genListBottom); + elm_object_part_content_set(m_layout, "elm.swallow.layoutBottom", m_layoutBottom); } void MainUI::hide() @@ -482,7 +450,6 @@ void MainUI::clearItems() BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); clearHistoryGenlist(); clearBookmarkGengrid(); - elm_genlist_clear(m_genListBottom); } void MainUI::showNoHistoryLabel() diff --git a/services/MainUI/MainUI.h b/services/MainUI/MainUI.h index 66e8d94..a5cefb5 100644 --- a/services/MainUI/MainUI.h +++ b/services/MainUI/MainUI.h @@ -58,9 +58,6 @@ public: boost::signals2::signal bookmarkClicked; boost::signals2::signal bookmarkManagerClicked; private: - static Evas_Object* listItemBottomContentGet(void *data, Evas_Object *obj, const char *part); - static Evas_Object* listTopItemContentGet(void *data, Evas_Object *obj, const char *part); - //static char* listItemTextGet(void *data, Evas_Object *obj, const char *part); static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part); @@ -79,12 +76,11 @@ private: Evas_Object *m_parent; Evas_Object *m_layout; Evas_Object *m_layoutTop; + Evas_Object *m_layoutBottom; Evas_Object *m_gengrid; Evas_Object *m_genListLeft; Evas_Object *m_genListCenter; Evas_Object *m_genListRight; - Evas_Object *m_genListBottom; - Elm_Genlist_Item_Class *m_itemClassBottom; Elm_Gengrid_Item_Class * m_big_item_class; Elm_Gengrid_Item_Class * m_small_item_class; Elm_Gengrid_Item_Class * m_bookmark_item_class; diff --git a/services/MainUI/edc/MainUI.edc b/services/MainUI/edc/MainUI.edc index ea2929e..129d266 100644 --- a/services/MainUI/edc/MainUI.edc +++ b/services/MainUI/edc/MainUI.edc @@ -168,7 +168,7 @@ group { name: "mv_bookmarks"; } } } - part { name: "genlistBottom_bg"; + part { name: "layoutBottom_bg"; type: RECT; mouse_events: 0; description { state: "default" 0.0; @@ -312,7 +312,7 @@ group { name: "mv_bookmarks"; rel2 { relative: 1.0 1.0; } } } - part { name: "elm.swallow.genlistBottom"; + part { name: "elm.swallow.layoutBottom"; type: SWALLOW; description { state: "default" 0.0; min: 1920 181; @@ -320,7 +320,7 @@ group { name: "mv_bookmarks"; align: 0.0 0.0; fixed: 0 0; rel1 { - relative: 0 0; to: "genlistBottom_bg"; + relative: 0 0; to: "layoutBottom_bg"; } rel2 { relative: 1 1; @@ -1325,7 +1325,7 @@ group { name: "top_button_item"; } } -group { name: "elm/genlist/item/bottom_button_item/default"; +group { name: "bottom_button_item"; min: 1920 181; max: 1920 181; data.item: "texts" "bookmarkmanager_text"; -- 2.7.4 From 0ffb324f4919ad8eb1a78be4b01aee798948c194 Mon Sep 17 00:00:00 2001 From: "t.dakowicz" Date: Wed, 19 Aug 2015 15:00:17 +0200 Subject: [PATCH 09/16] TT-134 Implemented tree structure of bookmark folders [Issue#] https://bugs.tizen.org/jira/browse/TT-134 [Problem] New folders were always added to the root folder [Cause] N/A [Solution] Used properly a current folder variable, changed displaying/updating folder content and did minor style improvements [Verify] Check if new folder addition inside a folder actually adds a folder to the selected one. Please keep in mind that there are some problems with diplaying content inside folders, which will be handled in separate issue. Change-Id: Ic5f71c57d78e95bb9878bf17d84db57eb57b8f9d --- core/AbstractInterfaces/AbstractFavoriteService.h | 6 +- services/BookmarkManagerUI/BookmarkManagerUI.cpp | 83 +++++++++++------------ services/BookmarkManagerUI/BookmarkManagerUI.h | 12 ++-- services/BookmarkService/BookmarkService.cpp | 23 ++++--- services/BookmarkService/BookmarkService.h | 12 ++-- services/MoreMenuUI/MoreMenuUI.cpp | 4 +- services/MoreMenuUI/MoreMenuUI.h | 9 +-- services/SimpleUI/SimpleUI.cpp | 82 +++++++++++++--------- services/SimpleUI/SimpleUI.h | 10 +-- 9 files changed, 135 insertions(+), 106 deletions(-) diff --git a/core/AbstractInterfaces/AbstractFavoriteService.h b/core/AbstractInterfaces/AbstractFavoriteService.h index 4d32920..d7a9d75 100644 --- a/core/AbstractInterfaces/AbstractFavoriteService.h +++ b/core/AbstractInterfaces/AbstractFavoriteService.h @@ -59,10 +59,10 @@ public: std::shared_ptr favicon = std::shared_ptr(), unsigned int dirId = 0) = 0; /** - * @brief Creates a new folder with name "title" in a folder with id, parent_id + * @brief Creates a new folder with name "title" in a folder with id and order * @return folder_id of created folder */ - virtual int save_folder(const char *title, int *saved_bookmark_id, int parent_id=0, int by_operator=0)=0; + virtual int save_folder(const char *title, int *saved_bookmark_id, int by_operator = 0) = 0; /** * @brief get folder id of a folder with name "title" in folder with id, parent_id @@ -96,7 +96,7 @@ public: * * @return list of bookmark folders */ - virtual std::vector > getBookmarkFolders()= 0; + virtual std::vector > getBookmarkFolders(int folder_id) = 0; /** * @brief Delete all bookmarks diff --git a/services/BookmarkManagerUI/BookmarkManagerUI.cpp b/services/BookmarkManagerUI/BookmarkManagerUI.cpp index 2ae1617..cd50471 100644 --- a/services/BookmarkManagerUI/BookmarkManagerUI.cpp +++ b/services/BookmarkManagerUI/BookmarkManagerUI.cpp @@ -51,8 +51,8 @@ BookmarkManagerUI::BookmarkManagerUI() , m_itemClass(nullptr) , m_gengrid(nullptr) , m_parent(nullptr) - , m_item_class(nullptr) - , m_detail_item_class(nullptr) + , m_folder_item_class(nullptr) + , m_bookmark_item_class(nullptr) , m_gengridSetup(false) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); @@ -76,29 +76,35 @@ void BookmarkManagerUI::show(Evas_Object* parent) evas_object_size_hint_align_set(b_mm_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); evas_object_show(b_mm_layout); - m_gengrid = elm_gengrid_add(b_mm_layout); - elm_object_part_content_set(b_mm_layout, "elm.swallow.grid", m_gengrid); + createGenGrid(); - elm_object_style_set(m_gengrid, "back_ground"); + if (!m_folder_item_class) { + m_folder_item_class = elm_gengrid_item_class_new(); + m_folder_item_class->item_style = "grid_bm_item"; + m_folder_item_class->func.text_get = _grid_folder_text_get; + m_folder_item_class->func.content_get = _grid_folder_content_get; + m_folder_item_class->func.state_get = nullptr; + m_folder_item_class->func.del = nullptr; + } - if (!m_item_class) { - m_item_class = elm_gengrid_item_class_new(); - m_item_class->item_style = "grid_bm_item"; - m_item_class->func.text_get = _grid_folder_text_get; - m_item_class->func.content_get = _grid_folder_content_get; - m_item_class->func.state_get = nullptr; - m_item_class->func.del = nullptr; - } + if (!m_bookmark_item_class) { + m_bookmark_item_class = elm_gengrid_item_class_new(); + m_bookmark_item_class->item_style = "grid_ds_item"; + m_bookmark_item_class->func.text_get = _grid_bookmark_text_get; + m_bookmark_item_class->func.content_get = _grid_bookmark_content_get; + m_bookmark_item_class->func.state_get = nullptr; + m_bookmark_item_class->func.del = nullptr; + } +} - if (!m_detail_item_class) { - m_detail_item_class = elm_gengrid_item_class_new(); - m_detail_item_class->item_style = "grid_ds_item"; - m_detail_item_class->func.text_get = _grid_bookmark_text_get; - m_detail_item_class->func.content_get = _grid_bookmark_content_get; - m_detail_item_class->func.state_get = nullptr; - m_detail_item_class->func.del = nullptr; - } +void BookmarkManagerUI::createGenGrid() +{ + if(m_gengrid != nullptr) + evas_object_del(m_gengrid); + m_gengrid = elm_gengrid_add(b_mm_layout); + elm_object_part_content_set(b_mm_layout, "elm.swallow.grid", m_gengrid); + elm_object_style_set(m_gengrid, "back_ground"); elm_gengrid_align_set(m_gengrid, 0, 0); elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS); elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE); @@ -141,6 +147,7 @@ void BookmarkManagerUI::showTopContent() nullptr, nullptr //data passed to above function ); + id->e_item = elmItem; BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); } @@ -204,19 +211,19 @@ void BookmarkManagerUI::newFolderPopup() BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_popup.reset(new AddNewFolderPopup(m_parent, nullptr,"Add New Folder?","New Folder","Ok","Cancel")); m_popup->on_ok.disconnect_all_slots(); - m_popup->on_ok.connect(boost::bind(&BookmarkManagerUI::NewFolderCreate, this, _1)); + m_popup->on_ok.connect(boost::bind(&BookmarkManagerUI::newFolderCreate, this, _1)); m_popup->on_cancel.disconnect_all_slots(); m_popup->on_cancel.connect(boost::bind(&BookmarkManagerUI::CancelClicked, this, _1)); m_popup->show(); } -void BookmarkManagerUI::NewFolderCreate(Evas_Object * popup_content) +void BookmarkManagerUI::newFolderCreate(Evas_Object * popup_content) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (popup_content != nullptr) { m_folderName = elm_entry_entry_get(popup_content); - saveFolderClicked(m_folderName.c_str(), 0,0); + saveFolderClicked(m_folderName.c_str(), 0); m_popup->hide(); } } @@ -295,7 +302,7 @@ void BookmarkManagerUI::addBookmarkFolderItem(std::shared_ptritem = hi; itemData->bookmarkManagerUI.reset(this); - Elm_Object_Item* BookmarkFolderView = elm_gengrid_item_append(m_gengrid, m_item_class, itemData, _folderItemClicked, itemData); + Elm_Object_Item* BookmarkFolderView = elm_gengrid_item_append(m_gengrid, m_folder_item_class, itemData, _folderItemClicked, itemData); m_map_bookmark_folder_views.insert(std::pair(hi->getAddress(),BookmarkFolderView)); elm_gengrid_item_selected_set(BookmarkFolderView, EINA_FALSE); setEmptyGengrid(false); @@ -319,7 +326,7 @@ void BookmarkManagerUI::addBookmarkItem(std::shared_ptritem = hi; itemData->bookmarkManagerUI.reset(this); - Elm_Object_Item* BookmarkView = elm_gengrid_item_append(m_gengrid, m_detail_item_class, itemData, _bookmarkItemClicked, itemData); + Elm_Object_Item* BookmarkView = elm_gengrid_item_append(m_gengrid, m_bookmark_item_class, itemData, _bookmarkItemClicked, itemData); m_map_bookmark_folder_views.insert(std::pair(hi->getAddress(),BookmarkView)); elm_gengrid_item_selected_set(BookmarkView, EINA_FALSE); setEmptyGengrid(false); @@ -346,7 +353,6 @@ char* BookmarkManagerUI::_grid_folder_text_get(void *data, Evas_Object *, const const char *part_name2 = "page_url"; static const int part_name1_len = strlen(part_name1); static const int part_name2_len = strlen(part_name2); - if (!strncmp(part_name1, part, part_name1_len) && !itemData->item->getTittle().empty()) { return strdup(itemData->item->getTittle().c_str()); @@ -452,20 +458,12 @@ Evas_Object * BookmarkManagerUI::_grid_bookmark_content_get(void *data, Evas_Obj void BookmarkManagerUI::_bookmarkItemClicked(void * data, Evas_Object *, void * event_info) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - (void)data; - (void)event_info; -/* - if ((data != nullptr) && (event_info != nullptr)) + if (data != nullptr) { - Elm_Object_Item * selected = static_cast(event_info); - BookmarkManagerUI * self = static_cast(data); - HistoryItemData * itemData = static_cast(elm_object_item_data_get(selected)); - if (itemData != nullptr) - { - self->bookmarkClicked(itemData->item); - } + BookmarkFolderItemData * itemData = static_cast(data); + BROWSER_LOGD("Bookmark URL: %s" , itemData->item->getAddress().c_str()); + itemData->bookmarkManagerUI->bookmarkItemClicked(itemData->item); } -*/ } void BookmarkManagerUI::_folderItemClicked(void * data, Evas_Object *, void *) @@ -476,7 +474,7 @@ void BookmarkManagerUI::_folderItemClicked(void * data, Evas_Object *, void *) BookmarkFolderItemData * itemData = static_cast(data); BROWSER_LOGD("Folder ID: %d" , itemData->item->getId()); itemData->bookmarkManagerUI->set_folder(itemData->item->getTittle().c_str()); - itemData->bookmarkManagerUI->bookmarkFolderClicked(itemData->item->getId()); + itemData->bookmarkManagerUI->folderItemClicked(itemData->item->getId()); } } @@ -507,9 +505,10 @@ void BookmarkManagerUI::clearItems() void BookmarkManagerUI::updateGengrid() { elm_genlist_clear(m_genList); - elm_gengrid_clear(m_gengrid); + //elm_gengrid_clear(m_gengrid); + //remove 'createGenGrid' if the elm_gengrid_clear() will be valid again + createGenGrid(); m_map_bookmark_folder_views.clear(); } - } } diff --git a/services/BookmarkManagerUI/BookmarkManagerUI.h b/services/BookmarkManagerUI/BookmarkManagerUI.h index eeb2a57..e37dbbb 100644 --- a/services/BookmarkManagerUI/BookmarkManagerUI.h +++ b/services/BookmarkManagerUI/BookmarkManagerUI.h @@ -57,10 +57,12 @@ public: boost::signals2::signal closeBookmarkManagerClicked; boost::signals2::signal addNewFolderClicked; - boost::signals2::signal saveFolderClicked; - boost::signals2::signal bookmarkFolderClicked; + boost::signals2::signal saveFolderClicked; + boost::signals2::signal)> bookmarkItemClicked; + boost::signals2::signal folderItemClicked; private: + void createGenGrid(); static char* _grid_folder_text_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _grid_folder_content_get(void *data, Evas_Object *obj, const char *part); static char* _grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part); @@ -70,7 +72,7 @@ private: static void _folderItemClicked(void * data, Evas_Object * obj, void * event_info); static void _bookmark_thumbSelected(void * data, Evas_Object *, void *); - void NewFolderCreate(Evas_Object * popup_content); + void newFolderCreate(Evas_Object * popup_content); void CancelClicked(Evas_Object * popup_content); static Evas_Object* listItemContentGet(void *data, Evas_Object *obj, const char *part); @@ -89,8 +91,8 @@ private: Elm_Genlist_Item_Class *m_itemClass; Evas_Object *m_gengrid; Evas_Object *m_parent; - Elm_Gengrid_Item_Class * m_item_class; - Elm_Gengrid_Item_Class * m_detail_item_class; + Elm_Gengrid_Item_Class * m_bookmark_item_class; + Elm_Gengrid_Item_Class * m_folder_item_class; std::map m_map_bookmark_folder_views; std::string edjFilePath; std::string m_folder; diff --git a/services/BookmarkService/BookmarkService.cpp b/services/BookmarkService/BookmarkService.cpp index ac5cce3..322e826 100644 --- a/services/BookmarkService/BookmarkService.cpp +++ b/services/BookmarkService/BookmarkService.cpp @@ -191,9 +191,10 @@ int BookmarkService::getBookmarkId(const std::string & url) std::vector > BookmarkService::getBookmarks(int folder_id) { BROWSER_LOGD("[%s:%d] folder_id = %d", __func__, __LINE__, folder_id); + set_current_folder_id(folder_id); int *ids = nullptr; int ids_count = 0; - int ret = bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, 0, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); + int ret = bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, BOOKMARK_TYPE, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); if (ret<0){ BROWSER_LOGE("Error! Could not get ids!"); return std::vector>(); @@ -229,25 +230,26 @@ std::vector > BookmarkService::getBookmarks(int fo memcpy(fav->imageData, (void*)image_bytes, bookmark_info.favicon_length); bookmark->setFavicon(fav); m_bookmarks.push_back(bookmark); + } free(ids); return m_bookmarks; } -std::vector > BookmarkService::getBookmarkFolders() +std::vector > BookmarkService::getBookmarkFolders(int folder_id) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + set_current_folder_id(folder_id); int *ids = nullptr; int ids_count = 0; - int ret = bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, -1, 1, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); + int ret = bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, folder_id, FOLDER_TYPE, -1, -1, BP_BOOKMARK_O_SEQUENCE, 0); if (ret<0){ BROWSER_LOGE("Error! Could not get ids!"); return std::vector>(); } m_bookmarks.clear(); - - BROWSER_LOGD("Bookmark items: %d", ids_count); + BROWSER_LOGD("Bookmark folders: %d", ids_count); for(int i = 0; i > getBookmarks(int folder_id = -1); - std::vector > getBookmarkFolders(); + std::vector > getBookmarkFolders(int folder_id); /** * @brief Delete all bookmarks @@ -110,7 +110,7 @@ public: } folder_info; int get_root_folder_id(void); - int save_folder(const char *title, int *saved_bookmark_id, int parent_id=0,int by_operator = 0); + int save_folder(const char *title, int *saved_bookmark_id, int by_operator = 0); bool delete_by_id(int id); bool delete_by_id_notify(int id); bool delete_by_uri(const char *uri); @@ -159,10 +159,15 @@ public: bool get_memory_full(void) { return m_memory_full; } int get_current_folder_id(void) { return m_curr_folder; } + void set_current_folder_id(int folder_id) { m_curr_folder = folder_id; } private: + enum ItemType{ + BOOKMARK_TYPE = 0 + , FOLDER_TYPE = 1 + , ALL_TYPE = -1 + }; bool _get_depth_count_recursive(int folder_id, int cur_depth, int *depth_count); - std::vector m_bookmark_list; std::vector m_path_history; std::string m_path_string; @@ -171,7 +176,6 @@ private: int m_curr_folder; std::shared_ptr m_storageManager; std::vector > m_bookmarks; - /// \todo Need to change getBookmarkId function for finding stored bookmark - check getBookmarkExists function int getBookmarkId(const std::string & url); std::shared_ptr getStorageManager(); diff --git a/services/MoreMenuUI/MoreMenuUI.cpp b/services/MoreMenuUI/MoreMenuUI.cpp index 3edef9d..d28c73c 100644 --- a/services/MoreMenuUI/MoreMenuUI.cpp +++ b/services/MoreMenuUI/MoreMenuUI.cpp @@ -180,12 +180,14 @@ void MoreMenuUI::star_clicked_cb(void* data, Evas_Object*, void*) BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { ItemData * id = static_cast(data); + id->m_moreMenu->addToBookmarkClicked(); id->m_moreMenu->AddBookmarkPopupCalled(); } } void MoreMenuUI::AddBookmarkPopupCalled() { + m_add_bookmark_popup = std::make_shared(m_mm_layout); m_add_bookmark_popup->show(); m_add_bookmark_popup->addBookmarkFolderItems(m_map_bookmark_folder_list); @@ -218,7 +220,7 @@ void MoreMenuUI::NewFolderCreate(Evas_Object* popup_content) BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (popup_content) { m_folderName = elm_entry_entry_get(popup_content); - BookmarkFolderCreated(m_folderName.c_str(), 0,0); + BookmarkFolderCreated(m_folderName.c_str(), 0); m_new_folder_popup->hide(); } } diff --git a/services/MoreMenuUI/MoreMenuUI.h b/services/MoreMenuUI/MoreMenuUI.h index 0bb5b1e..103b8c7 100644 --- a/services/MoreMenuUI/MoreMenuUI.h +++ b/services/MoreMenuUI/MoreMenuUI.h @@ -70,13 +70,14 @@ public: void clearItems(); void getBookmarkFolderList(std::vector > ); + boost::signals2::signal addToBookmarkClicked; + boost::signals2::signal AddBookmarkInput; + boost::signals2::signal BookmarkFolderCreated; boost::signals2::signal bookmarkManagerClicked; - boost::signals2::signal historyUIClicked; - boost::signals2::signal BookmarkFolderCreated; - boost::signals2::signal closeMoreMenuClicked; boost::signals2::signal BookmarkFoldersListImport; + boost::signals2::signal historyUIClicked; boost::signals2::signal settingsClicked; - boost::signals2::signal AddBookmarkInput; + boost::signals2::signal closeMoreMenuClicked; private: static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part); diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 10e3bab..c5e2385 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -56,6 +56,7 @@ namespace base_ui{ EXPORT_SERVICE(SimpleUI, "org.tizen.browser.simpleui") const std::string HomePageURL = "about:home"; +const int ROOT_FOLDER = 0; SimpleUI::SimpleUI() : AbstractMainWindow() @@ -113,9 +114,9 @@ std::vector > SimpleUI::ge } -std::vector > SimpleUI::getBookmarkFolders() +std::vector > SimpleUI::getBookmarkFolders(int folder_id) { - return m_favoriteService->getBookmarkFolders(); + return m_favoriteService->getBookmarkFolders(folder_id); } @@ -333,8 +334,6 @@ int SimpleUI::exec(const std::string& _url) BROWSER_LOGD("[%s]:%d url=%s", __func__, __LINE__, url.c_str()); - saveFolder("Bookmark Bar",0,1); - m_simpleURI->setFocus(); return 0; @@ -643,6 +642,15 @@ void SimpleUI::onBookmarkManagerButtonClicked(const std::string&) void SimpleUI::onBookmarkClicked(std::shared_ptr bookmarkItem) { std::string bookmarkAddress = bookmarkItem->getAddress(); + if(m_bookmarkManagerUI) { // TODO: remove this section when naviframes will be available + m_bookmarkManagerUI->clearItems(); + m_bookmarkManagerUI = nullptr; + } + + if(m_moreMenuUI) { // TODO: remove this section when naviframes will be available + m_moreMenuUI->clearItems(); + m_moreMenuUI = nullptr; + } openNewTab(bookmarkAddress); } @@ -1138,19 +1146,20 @@ void SimpleUI::showMoreMenu() (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.moremenuui")); M_ASSERT(m_moreMenuUI); - m_moreMenuUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this, _1)); - m_moreMenuUI->historyUIClicked.connect(boost::bind(&SimpleUI::showHistoryUI, this,_1)); - m_moreMenuUI->settingsClicked.connect(boost::bind(&SimpleUI::showSettingsUI, this,_1)); - m_moreMenuUI->closeMoreMenuClicked.disconnect_all_slots(); - m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&SimpleUI::closeMoreMenu, this,_1)); - m_moreMenuUI->AddBookmarkInput.disconnect_all_slots(); - m_moreMenuUI->AddBookmarkInput.connect(boost::bind(&SimpleUI::addToBookmarks, this,_1)); + m_moreMenuUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this, _1)); + m_moreMenuUI->historyUIClicked.connect(boost::bind(&SimpleUI::showHistoryUI, this,_1)); + m_moreMenuUI->settingsClicked.connect(boost::bind(&SimpleUI::showSettingsUI, this,_1)); + m_moreMenuUI->closeMoreMenuClicked.disconnect_all_slots(); + m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&SimpleUI::closeMoreMenu, this,_1)); + m_moreMenuUI->addToBookmarkClicked.disconnect_all_slots(); + m_moreMenuUI->addToBookmarkClicked.connect(boost::bind(&SimpleUI::addBookmarkFolders, this)); + m_moreMenuUI->AddBookmarkInput.disconnect_all_slots(); + m_moreMenuUI->AddBookmarkInput.connect(boost::bind(&SimpleUI::addToBookmarks, this,_1)); m_moreMenuUI->BookmarkFolderCreated.disconnect_all_slots(); - m_moreMenuUI->BookmarkFolderCreated.connect(boost::bind(&SimpleUI::NewFolder, this,_1,_2,_3)); + m_moreMenuUI->BookmarkFolderCreated.connect(boost::bind(&SimpleUI::newFolderMoreMenu, this,_1,_2)); m_moreMenuUI->show(m_window.get()); - m_moreMenuUI->getBookmarkFolderList(getBookmarkFolders()); m_moreMenuUI->showCurrentTab(current_tab_as_new_tab ? nullptr : m_historyService->getHistoryItems().front()); - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); } } @@ -1172,20 +1181,25 @@ void SimpleUI::showBookmarkManagerMenu() m_bookmarkManagerUI->closeBookmarkManagerClicked.disconnect_all_slots(); m_bookmarkManagerUI->closeBookmarkManagerClicked.connect(boost::bind(&SimpleUI::closeBookmarkManagerMenu, this,_1)); m_bookmarkManagerUI->saveFolderClicked.disconnect_all_slots(); - m_bookmarkManagerUI->saveFolderClicked.connect(boost::bind(&SimpleUI::saveFolder, this,_1,_2,_3)); - m_bookmarkManagerUI->bookmarkFolderClicked.disconnect_all_slots(); - m_bookmarkManagerUI->bookmarkFolderClicked.connect(boost::bind(&SimpleUI::updateBookmakMangaerGenGrid, this,_1)); + m_bookmarkManagerUI->saveFolderClicked.connect(boost::bind(&SimpleUI::newFolderBookmarkManager, this,_1,_2)); + m_bookmarkManagerUI->bookmarkItemClicked.disconnect_all_slots(); + m_bookmarkManagerUI->bookmarkItemClicked.connect(boost::bind(&SimpleUI::onBookmarkClicked, this, _1)); + m_bookmarkManagerUI->folderItemClicked.disconnect_all_slots(); + m_bookmarkManagerUI->folderItemClicked.connect(boost::bind(&SimpleUI::updateBookmarkManagerGenGrid, this,_1)); m_bookmarkManagerUI->show(m_window.get()); - m_bookmarkManagerUI->addBookmarkFolderItems(getBookmarkFolders()); + m_bookmarkManagerUI->addBookmarkFolderItems(getBookmarkFolders(ROOT_FOLDER)); m_bookmarkManagerUI->showTopContent(); + m_curr_folder_id = ROOT_FOLDER; } } -void SimpleUI::updateBookmakMangaerGenGrid(int folder_id) +void SimpleUI::updateBookmarkManagerGenGrid(int folder_id) { m_bookmarkManagerUI->updateGengrid(); + m_bookmarkManagerUI->addBookmarkFolderItems(getBookmarkFolders(folder_id)); m_bookmarkManagerUI->addBookmarkItems(getBookmarks(folder_id)); m_bookmarkManagerUI->showTopContent(); + m_curr_folder_id = folder_id; } void SimpleUI::closeBookmarkManagerMenu(std::string& str) @@ -1406,33 +1420,38 @@ void SimpleUI::addToBookmarks(int folder_id) } } -void SimpleUI::saveFolder(const char* title,int folder_id, int by_operator) +void SimpleUI::addBookmarkFolders(void) +{ + if(m_moreMenuUI) + m_moreMenuUI->getBookmarkFolderList(getBookmarkFolders(ROOT_FOLDER)); +} + + +void SimpleUI::newFolderBookmarkManager(const char* title, int by_operator) { BROWSER_LOGD("[%s,%d],", __func__, __LINE__); int id = -1; if (m_favoriteService) - m_favoriteService->save_folder(title, &id, folder_id, by_operator); + m_favoriteService->save_folder(title, &id, by_operator); if (id >= 0 ) - { BROWSER_LOGD("[%s], Added New Folder", __func__); - } - if(m_bookmarkManagerUI) - { m_bookmarkManagerUI->updateGengrid(); - m_bookmarkManagerUI->addBookmarkFolderItems(getBookmarkFolders()); + { + BROWSER_LOGD("[%s], Added New Folder", __func__); + if(m_bookmarkManagerUI) + { + updateBookmarkManagerGenGrid(m_curr_folder_id); // TODO: correct folder displaying behaviour needs to be implemented + } } } - - -void SimpleUI::NewFolder(const char* title,int folder_id, int by_operator) +void SimpleUI::newFolderMoreMenu(const char* title, int by_operator) { int id = -1; if (m_favoriteService) - m_favoriteService->save_folder(title, &id, folder_id, by_operator); + m_favoriteService->save_folder(title, &id, by_operator); if (id >= 0) { BROWSER_LOGD("[%s], Added New Folder", __func__); addToBookmarks(id); - m_moreMenuUI->getBookmarkFolderList(getBookmarkFolders()); } } @@ -1441,6 +1460,5 @@ void SimpleUI::deleteBookmark(void) if (m_favoriteService) m_favoriteService->deleteBookmark(m_webEngine->getURI()); } - } } diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index 96a07cf..06bbe47 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -121,7 +121,7 @@ private: void bookmarkCheck(); std::vector > getBookmarks(int folder_id = -1); - std::vector > getBookmarkFolders(); + std::vector > getBookmarkFolders(int folder_id); std::vector > getHistory(); void onBookmarkAdded(std::shared_ptr bookmarkItem); @@ -219,9 +219,10 @@ private: void hideHistory(); void AddBookmarkPopup(std::string& str); void AddNewFolderPopup(std::string& str); + void addBookmarkFolders(); - void saveFolder(const char* title, int folder_id, int by_user); - void NewFolder(const char* title, int folder_id, int by_user); + void newFolderBookmarkManager(const char* title, int by_user); + void newFolderMoreMenu(const char* title, int by_user); void showTabUI(); void closeTabUI(const std::string& str); void showMoreMenu(); @@ -241,7 +242,7 @@ private: void hideProgressBar(); void closeBookmarkManagerMenu(std::string& str); - void updateBookmakMangaerGenGrid(int folder_id); + void updateBookmarkManagerGenGrid(int folder_id); void showBookmarkManagerMenu(); void showPopup(Evas_Object *content, char* btn1_text, char* btn2_text); @@ -313,6 +314,7 @@ private: int m_tabLimit; int m_favoritesLimit; bool m_wvIMEStatus; + int m_curr_folder_id; // This context object is used to implicitly init internal ewk data used by opengl to create the first and // consecutive webviews in the application, otherwise we would encounter a crash after creating // the first web view -- 2.7.4 From 8732ea5b4404639b8c0291df010fbc9cc9153ea3 Mon Sep 17 00:00:00 2001 From: Marcin Lapinski Date: Mon, 10 Aug 2015 11:18:01 +0200 Subject: [PATCH 10/16] Reintroduce removed ewk_view_screenshot_contents_get api call. [Issue#] https://bugs.tizen.org/jira/browse/TT-89 [Problem] Bookmark items do not show its thumbnail. [Cause] N/A [Sollution] Put ewk_view_screenshot_contents_get call back as it was moved to public api. [Verify] Bookmark items thumbnalis should be visible. Change-Id: I50538f737eebbce566565f5c6052266125d52610 --- services/WebKitEngineService/WebView.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/services/WebKitEngineService/WebView.cpp b/services/WebKitEngineService/WebView.cpp index 4bb27ed..89ef166 100644 --- a/services/WebKitEngineService/WebView.cpp +++ b/services/WebKitEngineService/WebView.cpp @@ -429,7 +429,7 @@ void WebView::confirmationResult(WebConfirmationPtr confirmation) std::shared_ptr WebView::captureSnapshot(int targetWidth, int targetHeight) { - BROWSER_LOGD("%s:%d %s NOT IMPLEMENTED, returning empty BrowserImage object", __FILE__, __LINE__, __func__); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); M_ASSERT(m_ewkView); M_ASSERT(targetWidth); M_ASSERT(targetHeight); @@ -458,13 +458,12 @@ std::shared_ptr WebView::captureSnapshot(int if (area.w == 0 || area.h == 0) return noImage; - double scaleW = (double)targetWidth / (double)(area.w); - double scaleH = (double)targetHeight / (double)(area.h); + BROWSER_LOGD("[%s:%d] Before snapshot (screenshot) - look at the time of taking snapshot below",__func__, __LINE__); #if defined(USE_EWEBKIT) #if PLATFORM(TIZEN) - Evas_Object *snapshot = nullptr; - // TODO use ewk_view_screenshot_contents_get_async API here + Evas_Object *snapshot = ewk_view_screenshot_contents_get( m_ewkView, area, 1.0, evas_object_evas_get(m_ewkView)); + BROWSER_LOGD("[%s:%d] Snapshot (screenshot) catched, evas pointer: %p",__func__, __LINE__, snapshot); if (snapshot) return tizen_browser::tools::EflTools::getBrowserImage(snapshot); #endif -- 2.7.4 From bd4dc74ee8d4d0b188e2efe703d2559665326211 Mon Sep 17 00:00:00 2001 From: Jung Ick Guack Date: Wed, 26 Aug 2015 15:01:02 +0900 Subject: [PATCH 11/16] Fixed bug that 2nd app control is not working [Issue#] HQ Synergy TF team reported the issue [Problem] Only 1st app control is working. After 2nd app control is not working. [Cause] There is wrong scope for first initializing code when start SimpleUI::exec [Sollution] Move opening new tab to out of first initializing scope. [Verify] App control should open the tab even after 2nd command. HQ Synergy TF team verified thie fix. Change-Id: Ic59d7e977c07a90de6aea455224d4bb44db7c922 Signed-off-by: Jung Ick Guack --- services/SimpleUI/SimpleUI.cpp | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index c5e2385..965cc3e 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -310,29 +310,29 @@ int SimpleUI::exec(const std::string& _url) m_mainUI->bookmarkClicked.connect(boost::bind(&SimpleUI::onBookmarkButtonClicked, this,_1)); m_mainUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this,_1)); - // only when first run - if (url.empty()) { - BROWSER_LOGD("[%s]: changing to homeUrl", __func__); - switchViewToHomePage(); + } + + if (url.empty()) { + BROWSER_LOGD("[%s]: changing to homeUrl", __func__); + switchViewToHomePage(); #if MERGE_ME // Not sure if this should be enabled - filterURL(HomePageURL); + filterURL(HomePageURL); #endif - if(lastSession.items().size() >= 1){ - for(auto iter=lastSession.items().begin(), - end=lastSession.items().end(); - iter != end; - iter++ - ){ - openNewTab(iter->second); - } - m_sessionService->getStorage()->deleteSession(lastSession); - } - } - else - openNewTab(url); - } - - BROWSER_LOGD("[%s]:%d url=%s", __func__, __LINE__, url.c_str()); + if(lastSession.items().size() >= 1){ + for(auto iter=lastSession.items().begin(), + end=lastSession.items().end(); + iter != end; + iter++ + ){ + openNewTab(iter->second); + } + m_sessionService->getStorage()->deleteSession(lastSession); + } + } + else + openNewTab(url); + + BROWSER_LOGD("[%s]:%d url=%s", __func__, __LINE__, url.c_str()); m_simpleURI->setFocus(); -- 2.7.4 From 1f0bb91afbf563d9933edceba1ff44340c55f741 Mon Sep 17 00:00:00 2001 From: cookie Date: Wed, 26 Aug 2015 15:42:49 +0900 Subject: [PATCH 12/16] Change the log level INFO to DEBUG [Issue#] The browser log don't display by journalctl -fl [Problem] The browser log don't display for debugging [Cause] The log level is INFO [Sollution] Change to log level to LoggerLevel::DEBUG Change-Id: Iefd33af8344996d0de812e290476f948a387fa1b Signed-off-by: cookie --- core/Logger/Logger.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) mode change 100644 => 100755 core/Logger/Logger.cpp diff --git a/core/Logger/Logger.cpp b/core/Logger/Logger.cpp old mode 100644 new mode 100755 index 2412557..daa8f91 --- a/core/Logger/Logger.cpp +++ b/core/Logger/Logger.cpp @@ -36,7 +36,7 @@ static const std::string LEVEL_TAG_ERROR = "TAG_ERROR"; #ifdef LOG_LEVEL static const LoggerLevel globalLoggerLevel = Logger::parseLoggerLevel(LOG_LEVEL); #else -static const LoggerLevel globalLoggerLevel = LoggerLevel::INFO; +static const LoggerLevel globalLoggerLevel = LoggerLevel::DEBUG; #endif Logger &Logger::getInstance() { -- 2.7.4 From 53abca1948542bb2e027ad81b6b63485b7fac913 Mon Sep 17 00:00:00 2001 From: Marcin Lapinski Date: Tue, 25 Aug 2015 17:48:36 +0200 Subject: [PATCH 13/16] Refactoring TabUI [Issue#] https://bugs.tizen.org/jira/browse/TT-72 [Problem] TabUI needs refactoring. [Cause] N/A [Sollution] Following actions were taken: -Split humongous show functions into several smaller. -Removed unused functions. -Replaced redundant class members with local variables. -Renamed functions, variables and edc names to make names more adequate. [Verify] 1. Browser builds 2. Refactor does not change behaviour of browser. Change-Id: I12a850bfb239b2d8477536517dfb93bb1db76df4 --- services/TabUI/TabUI.cpp | 339 +++++++++++++------------------------------ services/TabUI/TabUI.h | 27 ++-- services/TabUI/edc/TabUI.edc | 24 +-- 3 files changed, 124 insertions(+), 266 deletions(-) diff --git a/services/TabUI/TabUI.cpp b/services/TabUI/TabUI.cpp index d004b0b..d92dd18 100644 --- a/services/TabUI/TabUI.cpp +++ b/services/TabUI/TabUI.cpp @@ -39,18 +39,8 @@ typedef struct _TabItemData std::shared_ptr tabUI; } TabItemData; -struct ItemData -{ - tizen_browser::base_ui::TabUI* tabUI; - Elm_Object_Item * e_item; -}; - TabUI::TabUI() : m_tab_layout(nullptr) - , m_genListActionBar(nullptr) - , m_itemClassActionBar(nullptr) - , m_genListTop(nullptr) - , m_itemClassTop(nullptr) , m_gengrid(nullptr) , m_parent(nullptr) , m_item_class(nullptr) @@ -58,34 +48,19 @@ TabUI::TabUI() BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); m_edjFilePath = EDJE_DIR; m_edjFilePath.append("TabUI/TabUI.edj"); + elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); + createTabItemClass(); } TabUI::~TabUI() { - + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + elm_gengrid_item_class_free(m_item_class); } -void TabUI::show(Evas_Object* parent) +void TabUI::createTabItemClass() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - //m_parent = p; - elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); - m_tab_layout = elm_layout_add(parent); - elm_layout_file_set(m_tab_layout, m_edjFilePath.c_str(), "tab-layout"); - evas_object_size_hint_weight_set(m_tab_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(m_tab_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(m_tab_layout); - - showActionBar(); - showTopButtons(); - - m_gengrid = elm_gengrid_add(m_tab_layout); - elm_object_part_content_set(m_tab_layout, "tab_gengird", m_gengrid); - - evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, nullptr); - evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, nullptr); - evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this); - if (!m_item_class) { m_item_class = elm_gengrid_item_class_new(); m_item_class->item_style = "tab_item"; @@ -94,6 +69,37 @@ void TabUI::show(Evas_Object* parent) m_item_class->func.state_get = nullptr; m_item_class->func.del = nullptr; } +} + +void TabUI::show(Evas_Object* parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(parent); + m_parent = parent; + //TODO:check if there is no some memory leak due to not destroying previous instance of this UI element. + m_tab_layout = createTabUILayout(parent); + evas_object_show(m_tab_layout); +} + +Evas_Object* TabUI::createTabUILayout(Evas_Object* parent) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(parent); + Evas_Object* tab_layout = elm_layout_add(parent); + elm_layout_file_set(tab_layout, m_edjFilePath.c_str(), "tab-layout"); + evas_object_size_hint_weight_set(tab_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(tab_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + + //Create button bars and put them to layout's swallows + Evas_Object* buttonBar = createTopButtons(tab_layout); + elm_object_part_content_set(tab_layout, "top_bar", buttonBar); + + buttonBar = createActionBar(tab_layout); + elm_object_part_content_set(tab_layout, "action_bar", buttonBar); + + //create gengrid containing tabs + m_gengrid = elm_gengrid_add(tab_layout); + elm_object_part_content_set(tab_layout, "tab_gengird", m_gengrid); M_ASSERT(m_parent); elm_gengrid_align_set(m_gengrid, 0, 0); @@ -109,211 +115,94 @@ void TabUI::show(Evas_Object* parent) double efl_scale = elm_config_scale_get() / elm_app_base_scale_get(); elm_gengrid_item_size_set(m_gengrid, 364 * efl_scale, 320 * efl_scale); + return tab_layout; } -void TabUI::showActionBar() +Evas_Object* TabUI::createActionBar(Evas_Object* parent) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); - m_genListActionBar = elm_genlist_add(m_tab_layout); - elm_object_part_content_set(m_tab_layout, "action_bar_genlist", m_genListActionBar); - elm_genlist_homogeneous_set(m_genListActionBar, EINA_FALSE); - elm_genlist_multi_select_set(m_genListActionBar, EINA_FALSE); - elm_genlist_select_mode_set(m_genListActionBar, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(m_genListActionBar, ELM_LIST_LIMIT); - elm_genlist_decorate_mode_set(m_genListActionBar, EINA_TRUE); - evas_object_size_hint_weight_set(m_genListActionBar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - -// evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); -// evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/ - - m_itemClassActionBar = elm_genlist_item_class_new(); - m_itemClassActionBar->item_style = "action_bar_items"; - m_itemClassActionBar->func.text_get = nullptr; // &listTopItemTextGet; - m_itemClassActionBar->func.content_get = &listActionBarContentGet; - m_itemClassActionBar->func.state_get = nullptr; - m_itemClassActionBar->func.del = nullptr; - - ItemData *id = new ItemData; - id->tabUI = this; - Elm_Object_Item* elmItem = elm_genlist_item_append(m_genListActionBar, //genlist - m_itemClassActionBar, //item Class - id, - nullptr, //parent item - ELM_GENLIST_ITEM_NONE, //item type - nullptr, - nullptr //data passed to above function - ); - id->e_item = elmItem; - - ItemData *id2 = new ItemData; - id2->tabUI = this; - Elm_Object_Item* elmItem2 = elm_genlist_item_append(m_genListActionBar, //genlist - m_itemClassActionBar, //item Class - id2, - nullptr, //parent item - ELM_GENLIST_ITEM_NONE, //item type - nullptr, - nullptr //data passed to above function - ); - id2->e_item = elmItem2; - - ItemData *id3 = new ItemData; - id3->tabUI = this; - Elm_Object_Item* elmItem3 = elm_genlist_item_append(m_genListActionBar , //genlist - m_itemClassActionBar, //item Class - id3, - nullptr, //parent item - ELM_GENLIST_ITEM_NONE, //item type - nullptr, - nullptr //data passed to above function - ); - id3->e_item = elmItem3; - - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + M_ASSERT(parent); + Evas_Object* actionBarLayout = elm_layout_add(parent); + elm_layout_file_set(actionBarLayout, m_edjFilePath.c_str(), "action_bar_layout"); + evas_object_size_hint_weight_set(actionBarLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(actionBarLayout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(actionBarLayout); + + Evas_Object* button = elm_button_add(actionBarLayout); + elm_object_style_set(button, "tab_button"); + evas_object_smart_callback_add(button, "clicked", _newtab_clicked, this); + elm_object_part_content_set(actionBarLayout, "newtab_click", button); + + button = elm_button_add(actionBarLayout); + elm_object_style_set(button, "tab_button"); + evas_object_smart_callback_add(button, "clicked", _newincognitotab_clicked, this); + elm_object_part_content_set(actionBarLayout, "newincognitotab_click", button); + + button = elm_button_add(actionBarLayout); + elm_object_style_set(button, "tab_button"); + evas_object_smart_callback_add(button, "clicked", _closetabs_clicked, this); + elm_object_part_content_set(actionBarLayout, "closetabs_click", button); + + button = elm_button_add(actionBarLayout); + elm_object_style_set(button, "tab_button"); + evas_object_smart_callback_add(button, "clicked", _close_clicked, this); + elm_object_part_content_set(actionBarLayout, "close_click", button); + + return actionBarLayout; } -Evas_Object* TabUI::listActionBarContentGet(void* data, Evas_Object* obj , const char* part) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if (obj && part) { - const char *part_name1 = "newtab_click"; - static const int part_name1_len = strlen(part_name1); - const char *part_name2 = "newincognitotab_clic"; - static const int part_name2_len = strlen(part_name2); - const char *part_name3 = "closetabs_click"; - static const int part_name3_len = strlen(part_name3); - const char *part_name4 = "close_click"; - static const int part_name4_len = strlen(part_name4); - - if (!strncmp(part_name1, part, part_name1_len)) { - Evas_Object *newtabButton = elm_button_add(obj); - elm_object_style_set(newtabButton, "tab_button"); - evas_object_smart_callback_add(newtabButton, "clicked", tizen_browser::base_ui::TabUI::_newtab_clicked, data); - return newtabButton; - } - if (!strncmp(part_name2, part, part_name2_len)) { - Evas_Object *newincognitotabButton = elm_button_add(obj); - elm_object_style_set(newincognitotabButton, "tab_button"); - evas_object_smart_callback_add(newincognitotabButton, "clicked", tizen_browser::base_ui::TabUI::_newincognitotab_clicked, data); - return newincognitotabButton; - } - if (!strncmp(part_name3, part, part_name3_len)) { - Evas_Object *closetabsButton = elm_button_add(obj); - elm_object_style_set(closetabsButton, "tab_button"); - evas_object_smart_callback_add(closetabsButton, "clicked", tizen_browser::base_ui::TabUI::_closetabs_clicked, data); - return closetabsButton; - } - if (!strncmp(part_name4, part, part_name4_len)) { - Evas_Object *close_click = elm_button_add(obj); - elm_object_style_set(close_click, "tab_button"); - evas_object_smart_callback_add(close_click, "clicked", TabUI::close_clicked_cb, data); - return close_click; - } - } - return nullptr; -} -void TabUI::close_clicked_cb(void* data, Evas_Object*, void*) +void TabUI::_close_clicked(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { - ItemData * id = static_cast(data); - id->tabUI->closeTabUIClicked(std::string()); - id->tabUI->clearItems(); + TabUI * tabUI = static_cast(data); + tabUI->closeTabUIClicked(std::string()); + tabUI->clearItems(); } } void TabUI::hide() { - evas_object_hide(elm_layout_content_get(m_tab_layout, "action_bar_genlist")); - evas_object_hide(elm_layout_content_get(m_tab_layout, "top_bar_genlist")); + evas_object_hide(elm_layout_content_get(m_tab_layout, "action_bar")); + evas_object_hide(elm_layout_content_get(m_tab_layout, "top_bar")); evas_object_hide(elm_layout_content_get(m_tab_layout, "tab_gengird")); evas_object_hide(m_tab_layout); } -void TabUI::showTopButtons() -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - elm_theme_extension_add(nullptr, m_edjFilePath.c_str()); - m_genListTop = elm_genlist_add(m_tab_layout); - elm_object_part_content_set(m_tab_layout, "top_bar_genlist", m_genListTop); - elm_genlist_homogeneous_set(m_genListTop, EINA_FALSE); - elm_genlist_multi_select_set(m_genListTop, EINA_FALSE); - elm_genlist_select_mode_set(m_genListTop, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(m_genListTop, ELM_LIST_LIMIT); - elm_genlist_decorate_mode_set(m_genListTop, EINA_TRUE); - evas_object_size_hint_weight_set(m_genListTop, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - -// evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); -// evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr); - - m_itemClassTop = elm_genlist_item_class_new(); - m_itemClassTop->item_style = "top_buttons"; - m_itemClassTop->func.text_get = nullptr; - m_itemClassTop->func.content_get = &listTopButtonItemsContentGet; - m_itemClassTop->func.state_get = nullptr; - m_itemClassTop->func.del = nullptr; - - ItemData *id = new ItemData; - id->tabUI = this; - Elm_Object_Item *elmItem = elm_genlist_item_append(m_genListTop, //genlist - m_itemClassTop, //item Class - id, - nullptr, //parent item - ELM_GENLIST_ITEM_NONE, //item type - nullptr, - nullptr //data passed to above function - ); - id->e_item = elmItem; - ItemData *id2 = new ItemData; - id2->tabUI = this; - Elm_Object_Item *elmItem2 = elm_genlist_item_append(m_genListTop, //genlist - m_itemClassTop, //item Class - id2, - nullptr, //parent item - ELM_GENLIST_ITEM_NONE, //item type - nullptr, - nullptr //data passed to above function - ); - id2->e_item = elmItem2; - - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); -} - -Evas_Object* TabUI::listTopButtonItemsContentGet(void* data, Evas_Object* obj , const char* part) +Evas_Object* TabUI::createTopButtons(Evas_Object* parent) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if (data && obj && part) { - const char *part_name1 = "openedtabs_button"; - static const int part_name1_len = strlen(part_name1); - const char *part_name2 = "onotherdevices_button"; - static const int part_name2_len = strlen(part_name2); - - if (!strncmp(part_name1, part, part_name1_len)) { - Evas_Object *openedtabsButton = elm_button_add(obj); - elm_object_style_set(openedtabsButton, "tab_button"); - evas_object_smart_callback_add(openedtabsButton, "clicked", tizen_browser::base_ui::TabUI::_openedtabs_clicked, data); - return openedtabsButton; - } - if (!strncmp(part_name2, part, part_name2_len)) { - Evas_Object *onotherdevicesButton = elm_button_add(obj); - elm_object_style_set(onotherdevicesButton, "tab_button"); - evas_object_smart_callback_add(onotherdevicesButton, "clicked", tizen_browser::base_ui::TabUI::_onotherdevices_clicked, data); - return onotherdevicesButton; - } - } - return nullptr; + M_ASSERT(parent); + + Evas_Object* topLayout = elm_layout_add(parent); + elm_layout_file_set(topLayout, m_edjFilePath.c_str(), "top_buttons_layout"); + evas_object_size_hint_weight_set(topLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(topLayout, EVAS_HINT_FILL, EVAS_HINT_FILL); + + Evas_Object *button = elm_button_add(topLayout); + elm_object_style_set(button, "tab_button"); + evas_object_smart_callback_add(button, "clicked", _openedtabs_clicked, this); + //TODO: "openedtabs_button" is not swallow, change it when implementing callbacks + elm_object_part_content_set(topLayout, "openedtabs_button", button); + + button = elm_button_add(topLayout); + elm_object_style_set(button, "tab_button"); + //TODO: "onotherdevices_button" is not swallow, change it when implementing callbacks + evas_object_smart_callback_add(button, "clicked", _onotherdevices_clicked, this); + elm_object_part_content_set(topLayout, "onotherdevices_button", button); + + return topLayout; } void TabUI::_newtab_clicked(void * data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { - ItemData* itemData = static_cast(data); - itemData->tabUI->clearItems(); - itemData->tabUI->newTabClicked(std::string()); + TabUI* tabUI = static_cast(data); + tabUI->clearItems(); + tabUI->newTabClicked(std::string()); } } @@ -331,9 +220,9 @@ void TabUI::_newincognitotab_clicked(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { - ItemData* itemData = static_cast(data); - itemData->tabUI->clearItems(); - itemData->tabUI->newIncognitoTabClicked(std::string()); + TabUI* tabUI = static_cast(data); + tabUI->clearItems(); + tabUI->newIncognitoTabClicked(std::string()); } } @@ -341,8 +230,8 @@ void TabUI::_closetabs_clicked(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { - ItemData* itemData = static_cast(data); - itemData->tabUI->closeTabsClicked(std::string()); + TabUI* tabUI = static_cast(data); + tabUI->closeTabsClicked(std::string()); } } @@ -421,7 +310,6 @@ Evas_Object * TabUI::_tab_grid_content_get(void *data, Evas_Object *obj, const c void TabUI::_itemSelected(void*, Evas_Object*, void*) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); -// self->historyClicked(itemData->item); } void TabUI::_thumbSelected(void *data, Evas_Object*, void*) @@ -439,8 +327,6 @@ void TabUI::clearItems() BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); hide(); elm_gengrid_clear(m_gengrid); - elm_genlist_clear(m_genListActionBar); - elm_genlist_clear(m_genListTop); m_map_tab_views.clear(); } @@ -462,29 +348,6 @@ void TabUI::setEmptyGengrid(bool setEmpty) } } -void TabUI::focusItem(void*, Evas_Object*, void* event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if (event_info) { - Elm_Object_Item *item = static_cast(event_info); - elm_object_item_signal_emit( item, "mouse,in", "over2"); - - // selected manually - elm_gengrid_item_selected_set(item, EINA_TRUE); - } -} - -void TabUI::unFocusItem(void*, Evas_Object*, void* event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if (event_info) { - Elm_Object_Item *item = static_cast(event_info); - elm_object_item_signal_emit( item, "mouse,out", "over2"); - - // unselected manually - elm_gengrid_item_selected_set(item, EINA_FALSE); - } -} } } diff --git a/services/TabUI/TabUI.h b/services/TabUI/TabUI.h index 9694132..19d5507 100644 --- a/services/TabUI/TabUI.h +++ b/services/TabUI/TabUI.h @@ -36,10 +36,8 @@ class BROWSER_EXPORT TabUI public: TabUI(); ~TabUI(); - void show(Evas_Object *main_layout); + void show(Evas_Object *parent); virtual std::string getName(); - void showActionBar(); - void showTopButtons(); void clearItems(); void hide(); @@ -53,17 +51,15 @@ public: boost::signals2::signal openedTabsClicked; boost::signals2::signal onOtherDevicesClicked; boost::signals2::signal closeTabUIClicked; -private: - static Evas_Object* listActionBarContentGet(void *data, Evas_Object *obj, const char *part); - static Evas_Object* listTopButtonItemsContentGet(void *data, Evas_Object *obj, const char *part); +private: static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _tab_grid_content_get(void *data, Evas_Object *obj, const char *part); static void _itemSelected(void * data, Evas_Object * obj, void * event_info); static void _item_deleted(void *data, Evas_Object *obj); static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); static void _deleteBookmark(void *data, Evas_Object *obj, void *event_info); - static void close_clicked_cb(void *data, Evas_Object *obj, void *event_info); + static void _close_clicked(void *data, Evas_Object *obj, void *event_info); void setEmptyGengrid(bool setEmpty); static void _openedtabs_clicked(void * data, Evas_Object * obj, void * event_info); @@ -71,23 +67,22 @@ private: static void _newincognitotab_clicked(void * data, Evas_Object * obj, void * event_info); static void _closetabs_clicked(void * data, Evas_Object * obj, void * event_info); static void _onotherdevices_clicked(void * data, Evas_Object * obj, void * event_info); + + Evas_Object* createTabUILayout(Evas_Object* parent); + Evas_Object* createActionBar(Evas_Object* parent); + Evas_Object* createTopButtons(Evas_Object* parent); + Evas_Object* createNoHistoryLabel(); + void createTabItemClass(); + private: Evas_Object *m_tab_layout; - Evas_Object *m_genListActionBar; - Elm_Genlist_Item_Class *m_itemClassActionBar; - Evas_Object *m_genListTop; - Elm_Genlist_Item_Class *m_itemClassTop; Evas_Object *m_gengrid; Evas_Object *m_parent; - + Elm_Gengrid_Item_Class * m_item_class; std::map m_map_tab_views; bool m_gengridSetup; std::string m_edjFilePath; - Evas_Object *createNoHistoryLabel(); - - static void focusItem(void* data, Evas_Object* obj, void* event_info); - static void unFocusItem(void* data, Evas_Object* obj, void* event_info); }; } diff --git a/services/TabUI/edc/TabUI.edc b/services/TabUI/edc/TabUI.edc index e4e88cd..0094215 100644 --- a/services/TabUI/edc/TabUI.edc +++ b/services/TabUI/edc/TabUI.edc @@ -140,7 +140,7 @@ group { image: "web_shadow.png" COMP; } parts { - part { name: "action_bar_genlist_bg"; + part { name: "action_bar_bg"; type: RECT; mouse_events: 0; description { state: "default" 0.0; @@ -157,7 +157,7 @@ group { } } } - part { name: "top_bar_genlist_bg"; + part { name: "top_bar_bg"; type: RECT; mouse_events: 0; description { state: "default" 0.0; @@ -167,7 +167,7 @@ group { max: 1920 181; color: 70 143 254 255; rel1 { - relative: 0 1; to: "action_bar_genlist_bg"; + relative: 0 1; to: "action_bar_bg"; } rel2{ relative: 1 1; @@ -184,7 +184,7 @@ group { max: 1920 714; color: 231 231 231 255; rel1 { - relative: 0 1; to: "top_bar_genlist_bg"; + relative: 0 1; to: "top_bar_bg"; } rel2{ relative: 1 1; @@ -208,7 +208,7 @@ group { } } } - part { name: "action_bar_genlist"; + part { name: "action_bar"; type : SWALLOW; scale: 1; description { @@ -218,7 +218,7 @@ group { max: 1920 104; align: 0.0 0.0; fixed: 0 0; - rel1 { relative: 0.0 0.0; to: "action_bar_genlist_bg";} + rel1 { relative: 0.0 0.0; to: "action_bar_bg";} rel2 { relative: 1.0 1.0; } } description { @@ -232,7 +232,7 @@ group { visible: 1; } } - part { name: "top_bar_genlist"; + part { name: "top_bar"; type : SWALLOW; scale: 1; description { @@ -242,7 +242,7 @@ group { max: 1920 181; align: 0.0 0.0; fixed: 0 0; - rel1 { relative: 0.0 0.0; to: "top_bar_genlist_bg"; offset: 0 0;} + rel1 { relative: 0.0 0.0; to: "top_bar_bg"; offset: 0 0;} rel2 { relative: 1.0 1.0; } } description { @@ -292,7 +292,7 @@ group { min: 1920 14; max: 1920 14; image.normal: "web_shadow.png"; - rel1 { relative: 0.0 1.0; to: "action_bar_genlist_bg"; } + rel1 { relative: 0.0 1.0; to: "action_bar_bg"; } rel2 { relative: 1.0 1.0; } } } @@ -306,7 +306,7 @@ group { max: 1920 81; align: 0.0 0.0; fixed: 0 0; - rel1 { relative: 0.0 0.0; to: "top_bar_genlist_bg"; offset: 0 0;} + rel1 { relative: 0.0 0.0; to: "top_bar_bg"; offset: 0 0;} rel2 { relative: 1.0 1.0; } } description { @@ -586,7 +586,7 @@ group { name: "elm/gengrid/item/tab_item/default"; } } } -group { name: "elm/genlist/item/action_bar_items/default"; +group { name: "action_bar_layout"; min: 1920 104; max: 1920 104; data.item: "texts" "closetabs_text"; @@ -1157,7 +1157,7 @@ group { name: "elm/genlist/item/action_bar_items/default"; } } -group { name: "elm/genlist/item/top_buttons/default"; +group { name: "top_buttons_layout"; min: 1920 181; max: 1920 181; data.item: "texts" "openedtabs_button_text onotherdevices_button_text"; -- 2.7.4 From 2160e14cfba3c8c4c4a6ad19469b35a9e41d56a2 Mon Sep 17 00:00:00 2001 From: Marcin Lapinski Date: Fri, 21 Aug 2015 15:33:02 +0200 Subject: [PATCH 14/16] Refactoring MainUI [Issue#] https://bugs.tizen.org/jira/browse/TT-72 [Problem] MainUI needs refactoring. [Cause] N/A [Sollution] Following actions were taken: -Split humongous show functions into several smaller. -Removed unused functions. -Logically split most visited and bookmark view. -Replace redundant class members with local variables. -Renamed functions and variables to make names more adequate. [Verify] 1. Browser builds 2. Refactor does not change behaviour of browser. Change-Id: I44a5c958ad4e7b0c694434a4cfdb45702c871ec7 --- services/MainUI/MainUI.cpp | 395 +++++++++++++++++++++++------------------ services/MainUI/MainUI.h | 29 +-- services/MainUI/edc/MainUI.edc | 10 +- services/SimpleUI/SimpleUI.cpp | 17 +- 4 files changed, 256 insertions(+), 195 deletions(-) diff --git a/services/MainUI/MainUI.cpp b/services/MainUI/MainUI.cpp index a7ab4a7..6d86e66 100644 --- a/services/MainUI/MainUI.cpp +++ b/services/MainUI/MainUI.cpp @@ -59,178 +59,240 @@ struct ItemData{ MainUI::MainUI() : m_parent(nullptr) , m_layout(nullptr) - , m_layoutTop(nullptr) - , m_gengrid(nullptr) + , m_bookmarksButton(nullptr) + , m_mostVisitedButton(nullptr) + , m_bookmarksView(nullptr) + , m_mostVisitedView(nullptr) + , m_bookmarkGengrid(nullptr) , m_genListLeft(nullptr) , m_genListCenter(nullptr) , m_genListRight(nullptr) - , m_layoutBottom(nullptr) , m_big_item_class(nullptr) , m_small_item_class(nullptr) , m_bookmark_item_class(nullptr) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); edjFilePath = EDJE_DIR; edjFilePath.append("MainUI/MainUI.edj"); + elm_theme_extension_add(nullptr, edjFilePath.c_str()); + MainUI::createItemClasses(); } MainUI::~MainUI() { + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + elm_genlist_item_class_free(m_big_item_class); + elm_genlist_item_class_free(m_small_item_class); + elm_gengrid_item_class_free(m_bookmark_item_class); +} + +void MainUI::createItemClasses() +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + if (!m_big_item_class) { + m_big_item_class = elm_genlist_item_class_new(); + m_big_item_class->item_style = "big_grid_item"; + m_big_item_class->func.text_get = _grid_text_get; + m_big_item_class->func.content_get = _grid_content_get; + m_big_item_class->func.state_get = nullptr; + m_big_item_class->func.del = nullptr; + } + + if (!m_small_item_class) { + m_small_item_class = elm_genlist_item_class_new(); + m_small_item_class->item_style = "small_grid_item"; + m_small_item_class->func.text_get = _grid_text_get; + m_small_item_class->func.content_get = _grid_content_get; + m_small_item_class->func.state_get = nullptr; + m_small_item_class->func.del = nullptr; + } + + if (!m_bookmark_item_class) { + m_bookmark_item_class = elm_gengrid_item_class_new(); + m_bookmark_item_class->item_style = "grid_item"; + m_bookmark_item_class->func.text_get = _grid_bookmark_text_get; + m_bookmark_item_class->func.content_get = _grid_bookmark_content_get; + m_bookmark_item_class->func.state_get = nullptr; + m_bookmark_item_class->func.del = nullptr; + } } void MainUI::show(Evas_Object* parent) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - elm_theme_extension_add(nullptr, edjFilePath.c_str()); - m_layout = elm_layout_add(parent); - elm_layout_file_set(m_layout, edjFilePath.c_str(), "mv_bookmarks"); - evas_object_size_hint_weight_set(m_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(m_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + //FIXME: this may be source of memory leak this object is not deleted anywhere + m_layout = createQuickAccessLayout(parent); evas_object_show(m_layout); - m_parent = m_layout; - - m_genListLeft = elm_genlist_add(m_layout); - elm_object_part_content_set(m_layout, "elm.swallow.left", m_genListLeft); - elm_genlist_homogeneous_set(m_genListLeft, EINA_FALSE); - elm_genlist_multi_select_set(m_genListLeft, EINA_FALSE); - elm_genlist_select_mode_set(m_genListLeft, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(m_genListLeft, ELM_LIST_LIMIT); - evas_object_size_hint_weight_set(m_genListLeft, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - - m_genListCenter = elm_genlist_add(m_layout); - elm_object_part_content_set(m_layout, "elm.swallow.center", m_genListCenter); - elm_genlist_homogeneous_set(m_genListCenter, EINA_FALSE); - elm_genlist_multi_select_set(m_genListCenter, EINA_FALSE); - elm_genlist_select_mode_set(m_genListCenter, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(m_genListCenter, ELM_LIST_LIMIT); - evas_object_size_hint_weight_set(m_genListCenter, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - - m_genListRight = elm_genlist_add(m_layout); - elm_object_part_content_set(m_layout, "elm.swallow.right", m_genListRight); - elm_genlist_homogeneous_set(m_genListRight, EINA_FALSE); - elm_genlist_multi_select_set(m_genListRight, EINA_FALSE); - elm_genlist_select_mode_set(m_genListRight, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(m_genListRight, ELM_LIST_LIMIT); - evas_object_size_hint_weight_set(m_genListRight, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - - if (!m_big_item_class) { - m_big_item_class = elm_genlist_item_class_new(); - m_big_item_class->item_style = "big_grid_item"; - m_big_item_class->func.text_get = _grid_text_get; - m_big_item_class->func.content_get = _grid_content_get; - m_big_item_class->func.state_get = nullptr; - m_big_item_class->func.del = nullptr; - } - if (!m_small_item_class) { - m_small_item_class = elm_genlist_item_class_new(); - m_small_item_class->item_style = "small_grid_item"; - m_small_item_class->func.text_get = _grid_text_get; - m_small_item_class->func.content_get = _grid_content_get; - m_small_item_class->func.state_get = nullptr; - m_small_item_class->func.del = nullptr; - } + m_parent = parent; +} - /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); - evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, nullptr);*/ +Evas_Object* MainUI::createQuickAccessLayout(Evas_Object* parent) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + Evas_Object* layout = elm_layout_add(parent); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set (layout, EVAS_HINT_FILL, EVAS_HINT_FILL); - m_gengrid = elm_gengrid_add(m_layout); - //elm_object_part_content_set(m_layout, "elm.swallow.grid", m_gengrid); + m_mostVisitedView = createMostVisitedView(layout); + m_bookmarksView = createBookmarksView (layout); - evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, nullptr); - evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, nullptr); - evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this); + evas_object_show(m_mostVisitedView); + //TODO: uncoment this after cleaning up the mess in whole app window. + //evas_object_show(m_bookmarksView); + showHistory(); - if (!m_bookmark_item_class) { - m_bookmark_item_class = elm_gengrid_item_class_new(); - m_bookmark_item_class->item_style = "grid_item"; - m_bookmark_item_class->func.text_get = _grid_bookmark_text_get; - m_bookmark_item_class->func.content_get = _grid_bookmark_content_get; - m_bookmark_item_class->func.state_get = nullptr; - m_bookmark_item_class->func.del = nullptr; - } + return layout; +} - M_ASSERT(m_parent); - elm_theme_extension_add(nullptr, edjFilePath.c_str()); - elm_gengrid_align_set(m_gengrid, 0, 0); - elm_gengrid_select_mode_set(m_gengrid, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_gengrid_multi_select_set(m_gengrid, EINA_FALSE); - elm_gengrid_horizontal_set(m_gengrid, EINA_FALSE); - //elm_gengrid_highlight_mode_set(m_gengrid, EINA_TRUE); - elm_scroller_policy_set(m_gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); - elm_scroller_page_size_set(m_gengrid, 0, 327); - evas_object_size_hint_weight_set(m_gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(m_gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_gengrid_item_size_set(m_gengrid, 364 * efl_scale, 320 * efl_scale); +Evas_Object* MainUI::createMostVisitedView (Evas_Object * parent) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + + Evas_Object* mostVisitedLayout = elm_layout_add(parent); + elm_layout_file_set(mostVisitedLayout, edjFilePath.c_str(), "mv_bookmarks"); + evas_object_size_hint_weight_set(mostVisitedLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set (mostVisitedLayout, EVAS_HINT_FILL, EVAS_HINT_FILL); + + Evas_Object* genListLeft = elm_genlist_add(mostVisitedLayout); + + elm_genlist_homogeneous_set(genListLeft, EINA_FALSE); + elm_genlist_multi_select_set(genListLeft, EINA_FALSE); + elm_genlist_select_mode_set(genListLeft, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(genListLeft, ELM_LIST_LIMIT); + evas_object_size_hint_weight_set(genListLeft, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + elm_object_part_content_set(mostVisitedLayout, "elm.swallow.left", genListLeft); + m_genListLeft = genListLeft; + + Evas_Object* genListCenter = elm_genlist_add(mostVisitedLayout); + elm_genlist_homogeneous_set(genListCenter, EINA_FALSE); + elm_genlist_multi_select_set(genListCenter, EINA_FALSE); + elm_genlist_select_mode_set(genListCenter, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(genListCenter, ELM_LIST_LIMIT); + evas_object_size_hint_weight_set(genListCenter, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + elm_object_part_content_set(mostVisitedLayout, "elm.swallow.center", genListCenter); + m_genListCenter = genListCenter; + + Evas_Object* genListRight = elm_genlist_add(mostVisitedLayout); + elm_genlist_homogeneous_set(genListRight, EINA_FALSE); + elm_genlist_multi_select_set(genListRight, EINA_FALSE); + elm_genlist_select_mode_set(genListRight, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_genlist_mode_set(genListRight, ELM_LIST_LIMIT); + evas_object_size_hint_weight_set(genListRight, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + elm_object_part_content_set(mostVisitedLayout, "elm.swallow.right", genListRight); + m_genListRight=genListRight; - showTopButtons(); - showBottomButton(); + Evas_Object* topButtons = createTopButtons(mostVisitedLayout); + elm_object_part_content_set(mostVisitedLayout, "elm.swallow.layoutTop", topButtons); + + return mostVisitedLayout; } +Evas_Object* MainUI::createBookmarksView (Evas_Object * parent) +{ + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + + Evas_Object *bookmarkViewLayout = elm_layout_add(parent); + elm_layout_file_set(bookmarkViewLayout, edjFilePath.c_str(), "mv_bookmarks"); + evas_object_size_hint_weight_set(bookmarkViewLayout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bookmarkViewLayout, EVAS_HINT_FILL, EVAS_HINT_FILL); + + Evas_Object *bookmarkGengrid = elm_gengrid_add(bookmarkViewLayout); + + elm_gengrid_align_set(bookmarkGengrid, 0, 0); + elm_gengrid_select_mode_set(bookmarkGengrid, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_gengrid_multi_select_set(bookmarkGengrid, EINA_FALSE); + elm_gengrid_horizontal_set(bookmarkGengrid, EINA_FALSE); + + elm_scroller_policy_set(bookmarkGengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_scroller_page_size_set(bookmarkGengrid, 0, 327); + evas_object_size_hint_weight_set(bookmarkGengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bookmarkGengrid, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_gengrid_item_size_set(bookmarkGengrid, 364 * efl_scale, 320 * efl_scale); + evas_object_show(bookmarkGengrid); + + elm_object_part_content_set(bookmarkViewLayout, "elm.swallow.grid", bookmarkGengrid); + m_bookmarkGengrid = bookmarkGengrid; + + Evas_Object* topButtons = createTopButtons(bookmarkViewLayout); + elm_object_part_content_set(bookmarkViewLayout, "elm.swallow.layoutTop", topButtons); + + Evas_Object* bottomButton = createBottomButton(bookmarkViewLayout); + elm_object_part_content_set(bookmarkViewLayout, "elm.swallow.layoutBottom", bottomButton); -void MainUI::showTopButtons() + return bookmarkViewLayout; +} + +Evas_Object* MainUI::createTopButtons (Evas_Object *parent) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - m_layoutTop = elm_layout_add(m_layout); + Evas_Object *layoutTop = elm_layout_add(parent); + elm_layout_file_set(layoutTop, edjFilePath.c_str(), "top_button_item"); + evas_object_size_hint_weight_set(layoutTop, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layoutTop, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(layoutTop); - elm_layout_file_set(m_layoutTop, edjFilePath.c_str(), "top_button_item"); - evas_object_size_hint_weight_set(m_layoutTop, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(m_layoutTop, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_show(m_layoutTop); + Evas_Object *mostVisitedButton = elm_button_add(layoutTop); + elm_object_style_set(mostVisitedButton, "invisible_button"); + evas_object_smart_callback_add(mostVisitedButton, "clicked", _mostVisited_clicked, this); + evas_object_show(mostVisitedButton); + elm_layout_content_set(layoutTop, "mostvisited_click", mostVisitedButton); - Evas_Object *mvButton = elm_button_add(m_layoutTop); - elm_object_style_set(mvButton, "invisible_button"); - evas_object_smart_callback_add(mvButton, "clicked", _mostVisited_clicked, this); - elm_layout_content_set(m_layoutTop, "mostvisited_click", mvButton); + m_mostVisitedButton = mostVisitedButton; - Evas_Object *bmButton = elm_button_add(m_layoutTop); - elm_object_style_set(bmButton, "invisible_button"); - evas_object_smart_callback_add(bmButton, "clicked", _bookmark_clicked, this); - elm_layout_content_set(m_layoutTop, "bookmark_click", bmButton); + Evas_Object *bookmarksButton = elm_button_add(layoutTop); + elm_object_style_set(bookmarksButton, "invisible_button"); + evas_object_smart_callback_add(bookmarksButton, "clicked", _bookmark_clicked, this); + evas_object_show(bookmarksButton); + elm_layout_content_set(layoutTop, "bookmark_click", bookmarksButton); - elm_object_part_content_set(m_layout, "elm.swallow.genlistTop", m_layoutTop); + m_bookmarksButton = bookmarksButton; + + return layoutTop; } -void MainUI::showBottomButton() +Evas_Object* MainUI::createBottomButton(Evas_Object *parent) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - elm_theme_extension_add(nullptr, edjFilePath.c_str()); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); - m_layoutBottom = elm_layout_add(m_layout); - evas_object_size_hint_weight_set(m_layoutBottom, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(m_layoutBottom, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_layout_file_set(m_layoutBottom, edjFilePath.c_str(), "bottom_button_item"); - //elm_object_part_content_set(m_layout, "elm.swallow.layoutBottom", m_layoutBottom); + Evas_Object *layoutBottom = elm_layout_add(parent); + elm_layout_file_set(layoutBottom, edjFilePath.c_str(), "bottom_button_item"); - Evas_Object * bookmark_manager_button = elm_button_add(m_layoutBottom); + evas_object_size_hint_weight_set(layoutBottom, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layoutBottom, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(layoutBottom); + + Evas_Object * bookmark_manager_button = elm_button_add(layoutBottom); elm_object_style_set(bookmark_manager_button, "invisible_button"); - elm_object_part_content_set(m_layoutBottom, "bookmarkmanager_click", bookmark_manager_button); evas_object_smart_callback_add(bookmark_manager_button, "clicked", _bookmark_manager_clicked, this); + evas_object_show(bookmark_manager_button); + + elm_object_part_content_set(layoutBottom, "bookmarkmanager_click", bookmark_manager_button); + + return layoutBottom; } void MainUI::_mostVisited_clicked(void * data, Evas_Object * /* obj */, void * event_info) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); MainUI* mainUI = reinterpret_cast(data); - if (elm_object_part_content_get(mainUI->m_layout, "elm.swallow.left")) // check if most visited view is already set - return; mainUI->mostVisitedClicked(std::string()); } void MainUI::_bookmark_clicked(void * data, Evas_Object * /* obj */, void * event_info) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); MainUI* mainUI = reinterpret_cast(data); - if (elm_object_part_content_get(mainUI->m_layout, "elm.swallow.grid")) // check if bookmark view is already set - return; mainUI->bookmarkClicked(std::string()); } void MainUI::_bookmark_manager_clicked(void * data, Evas_Object * /* obj */, void * event_info) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); MainUI* mainUI = static_cast(data); mainUI->bookmarkManagerClicked(std::string()); } @@ -271,6 +333,8 @@ void MainUI::addHistoryItems(std::vector0) + setEmptyView(false); } void MainUI::addBookmarkItem(std::shared_ptr bi) @@ -279,13 +343,11 @@ void MainUI::addBookmarkItem(std::shared_ptritem = bi; itemData->mainUI = std::shared_ptr(this); - Elm_Object_Item* bookmarkView = elm_gengrid_item_append(m_gengrid, m_bookmark_item_class, itemData, nullptr, this); + Elm_Object_Item* bookmarkView = elm_gengrid_item_append(m_bookmarkGengrid, m_bookmark_item_class, itemData, nullptr, this); m_map_bookmark_views.insert(std::pair(bi->getAddress(),bookmarkView)); // unselect by default elm_gengrid_item_selected_set(bookmarkView, EINA_FALSE); - - setEmptyView(false); } void MainUI::addBookmarkItems(std::vector > items) @@ -391,75 +453,86 @@ void MainUI::_thumbSelected(void * data, Evas_Object * /* obj */, void * /* even void MainUI::clearHistoryGenlist() { + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + elm_genlist_clear(m_genListRight); elm_genlist_clear(m_genListLeft); elm_genlist_clear(m_genListCenter); m_map_history_views.clear(); - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.left")); - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.right")); - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.center")); } -void MainUI::showHistoryGenlist() +void MainUI::showHistory() { - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.grid")); - elm_object_part_content_unset(m_layout, "elm.swallow.grid"); - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.layoutBottom")); - elm_object_part_content_unset(m_layout, "elm.swallow.layoutBottom"); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + + if (elm_layout_content_get(m_layout, "elm.swallow.content") == m_mostVisitedView) + return; + + //TODO: remove these "evas_object_hide" and "evas_object_show" after cleaning up the mess in whole app window. + elm_layout_content_unset(m_layout, "elm.swallow.content"); + evas_object_hide(m_bookmarksView); + elm_layout_content_set(m_layout, "elm.swallow.content", m_mostVisitedView); + evas_object_show(m_mostVisitedView); + + elm_object_focus_set(m_mostVisitedButton, true); if (m_map_history_views.empty()) { setEmptyView(true); return; } setEmptyView(false); - elm_object_part_content_set(m_layout, "elm.swallow.left", m_genListLeft); - elm_object_part_content_set(m_layout, "elm.swallow.right", m_genListRight); - elm_object_part_content_set(m_layout, "elm.swallow.center", m_genListCenter); } void MainUI::clearBookmarkGengrid() { - elm_gengrid_clear(m_gengrid); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + + elm_gengrid_clear(m_bookmarkGengrid); m_map_bookmark_views.clear(); - evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.grid")); } -void MainUI::showBookmarkGengrid() +void MainUI::showBookmarks() { - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.left")); - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.right")); - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.center")); - elm_object_part_content_unset(m_layout, "elm.swallow.left"); - elm_object_part_content_unset(m_layout, "elm.swallow.right"); - elm_object_part_content_unset(m_layout, "elm.swallow.center"); - elm_object_part_content_set(m_layout, "elm.swallow.grid", m_gengrid); - elm_object_part_content_set(m_layout, "elm.swallow.layoutBottom", m_layoutBottom); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + + if (elm_layout_content_get(m_layout, "elm.swallow.content") == m_bookmarksView) + return; + + //TODO: remove these "evas_object_hide" and "evas_object_show" after cleaning up the mess in whole app window. + elm_layout_content_unset(m_layout, "elm.swallow.content"); + evas_object_hide(m_mostVisitedView); + elm_layout_content_set(m_layout, "elm.swallow.content", m_bookmarksView); + evas_object_show(m_bookmarksView); + + elm_object_focus_set(m_bookmarksButton, true); } void MainUI::hide() { - BROWSER_LOGD("MainUI Hide"); - evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.genlistTop")); - evas_object_hide(elm_layout_content_get(m_layout, "elm.swallow.genlistBottom")); - evas_object_hide(m_layout); - clearItems(); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); + + //TODO: remove these "evas_object_hide" after cleaning up the mess in whole app window. + evas_object_hide(m_layout); + evas_object_hide(m_mostVisitedView); + evas_object_hide(m_bookmarksView); + clearItems(); } void MainUI::clearItems() { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); clearHistoryGenlist(); clearBookmarkGengrid(); } void MainUI::showNoHistoryLabel() { - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.left")); - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.right")); - evas_object_hide(elm_object_part_content_get(m_layout, "elm.swallow.center")); + evas_object_hide(elm_object_part_content_get(m_mostVisitedView, "elm.swallow.left")); + evas_object_hide(elm_object_part_content_get(m_mostVisitedView, "elm.swallow.right")); + evas_object_hide(elm_object_part_content_get(m_mostVisitedView, "elm.swallow.center")); - elm_layout_text_set(m_layout, "elm.text.empty", "No visited site"); - elm_layout_signal_emit(m_layout, "empty,view", "mainui"); + elm_layout_text_set(m_mostVisitedView, "elm.text.empty", "No visited site"); + elm_layout_signal_emit(m_mostVisitedView, "empty,view", "mainui"); } void MainUI::setEmptyView(bool empty) @@ -468,29 +541,9 @@ void MainUI::setEmptyView(bool empty) if(empty) { showNoHistoryLabel(); } else { - elm_layout_signal_emit(m_layout, "not,empty,view", "mainui"); + elm_layout_signal_emit(m_mostVisitedView, "not,empty,view", "mainui"); } } -void MainUI::focusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item *item = reinterpret_cast(event_info); - elm_object_item_signal_emit( item, "mouse,in", "over2"); - - // selected manually - elm_gengrid_item_selected_set(item, EINA_TRUE); -} - -void MainUI::unFocusItem(void* /*data*/, Evas_Object* /*obj*/, void* event_info) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - Elm_Object_Item *item = reinterpret_cast(event_info); - elm_object_item_signal_emit( item, "mouse,out", "over2"); - - // unselected manually - elm_gengrid_item_selected_set(item, EINA_FALSE); -} - } } diff --git a/services/MainUI/MainUI.h b/services/MainUI/MainUI.h index a5cefb5..35a3794 100644 --- a/services/MainUI/MainUI.h +++ b/services/MainUI/MainUI.h @@ -30,6 +30,8 @@ namespace tizen_browser{ namespace base_ui{ +//TODO: This class name is not revelant to what this class actually does. +//Rename this class and file to "QuickAccessUI". class BROWSER_EXPORT MainUI : public tizen_browser::interfaces::AbstractUIComponent , public tizen_browser::core::AbstractService @@ -42,10 +44,8 @@ public: virtual std::string getName(); void clearHistoryGenlist(); void clearBookmarkGengrid(); - void showHistoryGenlist(); - void showBookmarkGengrid(); - void showTopButtons(); - void showBottomButton(); + void showHistory(); + void showBookmarks(); void clearItems(); void addHistoryItem(std::shared_ptr); @@ -59,6 +59,14 @@ public: boost::signals2::signal bookmarkManagerClicked; private: + void createItemClasses(); + + Evas_Object* createQuickAccessLayout(Evas_Object *parent); + Evas_Object* createMostVisitedView(Evas_Object *parent); + Evas_Object* createBookmarksView(Evas_Object *parent); + Evas_Object* createBottomButton(Evas_Object *parent); + Evas_Object* createTopButtons(Evas_Object *parent); + static char* _grid_text_get(void *data, Evas_Object *obj, const char *part); static Evas_Object * _grid_content_get(void *data, Evas_Object *obj, const char *part); static char* _grid_bookmark_text_get(void *data, Evas_Object *obj, const char *part); @@ -75,23 +83,24 @@ private: private: Evas_Object *m_parent; Evas_Object *m_layout; - Evas_Object *m_layoutTop; - Evas_Object *m_layoutBottom; - Evas_Object *m_gengrid; + Evas_Object *m_bookmarksView; + Evas_Object *m_mostVisitedView; + Evas_Object *m_bookmarksButton; + Evas_Object *m_mostVisitedButton; + Evas_Object *m_bookmarkGengrid; Evas_Object *m_genListLeft; Evas_Object *m_genListCenter; Evas_Object *m_genListRight; + Elm_Gengrid_Item_Class * m_big_item_class; Elm_Gengrid_Item_Class * m_small_item_class; Elm_Gengrid_Item_Class * m_bookmark_item_class; + std::multimap m_map_history_views; std::map m_map_bookmark_views; bool m_gengridSetup; std::string edjFilePath; void showNoHistoryLabel(); - - static void focusItem(void* data, Evas_Object* obj, void* event_info); - static void unFocusItem(void* data, Evas_Object* obj, void* event_info); }; } diff --git a/services/MainUI/edc/MainUI.edc b/services/MainUI/edc/MainUI.edc index 129d266..de77956 100644 --- a/services/MainUI/edc/MainUI.edc +++ b/services/MainUI/edc/MainUI.edc @@ -133,7 +133,7 @@ group { name: "mv_bookmarks"; } parts { - part { name: "genlistTop_bg"; + part { name: "layoutTop_bg"; type: RECT; mouse_events: 0; description { state: "default" 0.0; @@ -160,7 +160,7 @@ group { name: "mv_bookmarks"; align: 0.0 0.0; fixed: 0 0; rel1 { - to: "genlistTop_bg"; + to: "layoutTop_bg"; relative: 0 1; } rel2{ @@ -280,7 +280,7 @@ group { name: "mv_bookmarks"; } } - part { name: "elm.swallow.genlistTop"; + part { name: "elm.swallow.layoutTop"; type: SWALLOW; description { state: "default" 0.0; min: 1920 181; @@ -288,7 +288,7 @@ group { name: "mv_bookmarks"; align: 0.0 0.0; fixed: 0 0; rel1 { - relative: 0 0; to: "genlistTop_bg"; + relative: 0 0; to: "layoutTop_bg"; } rel2 { relative: 1 1; @@ -308,7 +308,7 @@ group { name: "mv_bookmarks"; min: 1920 14; max: 1920 14; image.normal: "web_shadow.png"; - rel1 { relative: 0.0 0.0; to: "elm.swallow.genlistTop"; } + rel1 { relative: 0.0 0.0; to: "elm.swallow.layoutTop"; } rel2 { relative: 1.0 1.0; } } } diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 965cc3e..f5f18f2 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -612,7 +612,7 @@ void SimpleUI::onClearHistoryClicked(const std::string&) BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); m_historyService->clearAllHistory(); m_mainUI->clearHistoryGenlist(); - m_mainUI->showHistoryGenlist(); + m_mainUI->showHistory(); } void SimpleUI::onMostVisitedClicked(const std::string&) @@ -621,7 +621,7 @@ void SimpleUI::onMostVisitedClicked(const std::string&) m_mainUI->clearHistoryGenlist(); m_mainUI->clearBookmarkGengrid(); m_mainUI->addHistoryItems(getHistory()); - m_mainUI->showHistoryGenlist(); + m_mainUI->showHistory(); } void SimpleUI::onBookmarkButtonClicked(const std::string&) @@ -630,7 +630,7 @@ void SimpleUI::onBookmarkButtonClicked(const std::string&) m_mainUI->clearBookmarkGengrid(); m_mainUI->clearHistoryGenlist(); m_mainUI->addBookmarkItems(getBookmarks()); - m_mainUI->showBookmarkGengrid(); + m_mainUI->showBookmarks(); } void SimpleUI::onBookmarkManagerButtonClicked(const std::string&) @@ -1066,11 +1066,11 @@ void SimpleUI::hideWebView() void SimpleUI::hideMainUI() { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if(m_mainUI) - m_mainUI->hide(); - m_mainUI = nullptr; - m_isHomePageActive = false; + m_mainUI->hide(); + m_mainUI = nullptr; + m_isHomePageActive = false; } void SimpleUI::showMainUI() @@ -1083,8 +1083,7 @@ void SimpleUI::showMainUI() hideWebView(); m_mainUI->show(m_window.get()); m_mainUI->addHistoryItems(getHistory()); - m_mainUI->showHistoryGenlist(); - + m_mainUI->addBookmarkItems(getBookmarks()); m_isHomePageActive = true; } -- 2.7.4 From dfa047c462421e1c4f23375a620fcc01b6da2a00 Mon Sep 17 00:00:00 2001 From: Albert Malewski Date: Thu, 27 Aug 2015 09:45:37 +0200 Subject: [PATCH 15/16] Fixed crash that occurs after clicking on 'History' button [Issue#] https://bugs.tizen.org/jira/browse/TT-98 [Problem] Browser crashes after clicking on 'History' button. [Cause] There was used normal pointer that pointed to the destroyed object. [Sollution] 1. Changed type of HistoryService::getHistoryItems() and HistoryService::getMostVisitedHistoryItems() functions that the return std::shared_ptr > >. 2. Added HistoryService::getHistoryItem function which returns HistoryItem by id. 3. Added HistoryService::getCurrentTab functions that returns currently observed web page's info. 4. Changed type of h_item pointer in MoreMenuUI.cpp from normal pointer to shared_ptr. 5. Added listItemDel function to avoid memory leaks when genlist is cleared. [Verify] Launch browser > More Menu > History > Obs History should not crash after clicking on 'History' button. Change-Id: I9140c1dedc061b2d014792aa14da92053e7aa27f --- services/HistoryService/HistoryService.cpp | 121 +++++++++++++++++------------ services/HistoryService/HistoryService.h | 6 +- services/HistoryUI/HistoryUI.cpp | 6 +- services/HistoryUI/HistoryUI.h | 4 +- services/MainUI/MainUI.cpp | 6 +- services/MainUI/MainUI.h | 4 +- services/MoreMenuUI/MoreMenuUI.cpp | 21 +++-- services/MoreMenuUI/MoreMenuUI.h | 3 +- services/SimpleUI/SimpleUI.cpp | 23 +++--- services/SimpleUI/SimpleUI.h | 2 +- 10 files changed, 114 insertions(+), 82 deletions(-) diff --git a/services/HistoryService/HistoryService.cpp b/services/HistoryService/HistoryService.cpp index f2ebbfb..2a9db4f 100644 --- a/services/HistoryService/HistoryService.cpp +++ b/services/HistoryService/HistoryService.cpp @@ -134,9 +134,9 @@ bool isDuplicate(const char* title) } -HistoryItemVector& HistoryService::getMostVisitedHistoryItems() +std::shared_ptr HistoryService::getMostVisitedHistoryItems() { - history_list.clear(); + std::shared_ptr ret_history_list(new HistoryItemVector); int *ids=nullptr; int count=-1; @@ -208,10 +208,10 @@ HistoryItemVector& HistoryService::getMostVisitedHistoryItems() memcpy(hi->imageData, (void*)history_info.thumbnail, history_info.thumbnail_length); history->setThumbnail(hi); - history_list.push_back(history); + ret_history_list->push_back(history); } free(ids); - return history_list; + return ret_history_list; } void HistoryService::addHistoryItem(std::shared_ptr his,std::shared_ptr thumbnail){ @@ -317,71 +317,94 @@ void HistoryService::clearURLHistory(const std::string & url) historyDeleted(url); } - -HistoryItemVector& HistoryService::getHistoryItems(int historyDepthInDays, int maxItems) +std::shared_ptr HistoryService::getHistoryItem(int * ids, int idNumber) { - history_list.clear(); + bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_CREATED); + bp_history_info_fmt history_info; + bp_history_adaptor_get_info(ids[idNumber], offset, &history_info); + + int date; + bp_history_adaptor_get_date_created(ids[idNumber], &date); + + struct tm *item_time_info; + time_t item_time = (time_t) date; + item_time_info = localtime(&item_time); + + int m_year = item_time_info->tm_year; + int m_month = item_time_info->tm_mon + 1; + int m_day = item_time_info->tm_yday; + int m_month_day = item_time_info->tm_mday; + int m_date = date; + int min = item_time_info->tm_min; + int hour = item_time_info->tm_hour; + int sec = item_time_info->tm_sec; + + m_year = 2000 + m_year % 100; + + std::shared_ptr history = std::make_shared (std::string(history_info.url)); + boost::gregorian::date d(m_year, m_month, m_month_day); + boost::posix_time::ptime t(d, boost::posix_time::time_duration(hour, min, sec)); + history->setLastVisit(t); + history->setUrl(std::string(history_info.url ? history_info.url : "")); + history->setTitle(std::string(history_info.title ? history_info.title : "")); + + //thumbail + std::shared_ptr hi = std::make_shared(); + hi->imageType = tizen_browser::tools::BrowserImage::ImageType::ImageTypePNG; + hi->width = history_info.thumbnail_width; + hi->height = history_info.thumbnail_height; + hi->dataSize = history_info.thumbnail_length; + hi->imageData = (void*) malloc(history_info.thumbnail_length); + memcpy(hi->imageData, (void*) history_info.thumbnail, history_info.thumbnail_length); + history->setThumbnail(hi); + + return history; +} +std::shared_ptr HistoryService::getCurrentTab() +{ int *ids=nullptr; - int count=-1; + int count = -1; bp_history_rows_cond_fmt conds; conds.limit = 20; //no of rows to get negative means no limitation conds.offset = -1; //the first row's index - conds.order_offset =BP_HISTORY_O_DATE_CREATED; // property to sort + conds.order_offset = BP_HISTORY_O_DATE_VISITED; // property to sort conds.ordering = 1; //way of ordering 0 asc 1 desc conds.period_offset = BP_HISTORY_O_DATE_CREATED; conds.period_type = BP_HISTORY_DATE_TODAY; - int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0); + int ret = bp_history_adaptor_get_cond_ids_p(&ids , &count, &conds, 0, nullptr, 0); if (ret<0){ BROWSER_LOGD("Error! Could not get ids!"); } - bp_history_offset offset = (BP_HISTORY_O_URL | BP_HISTORY_O_TITLE | BP_HISTORY_O_FAVICON | BP_HISTORY_O_DATE_CREATED); - - for(int i = 0; i< count; i++){ - bp_history_info_fmt history_info; - bp_history_adaptor_get_info(ids[i],offset,&history_info); - - int date; - bp_history_adaptor_get_date_created(ids[i], &date); - - struct tm *item_time_info; - time_t item_time = (time_t)date; - item_time_info = localtime(&item_time); - - int m_year = item_time_info->tm_year; - int m_month = item_time_info->tm_mon + 1; - int m_day = item_time_info->tm_yday; - int m_month_day = item_time_info->tm_mday; - int m_date = date; - int min = item_time_info->tm_min; - int hour= item_time_info->tm_hour; - int sec = item_time_info->tm_sec; + return getHistoryItem(ids); +} - m_year = 2000 + m_year % 100; +std::shared_ptr HistoryService::getHistoryItems(bp_history_date_defs period, int maxItems) +{ + std::shared_ptr ret_history_list(new HistoryItemVector); - std::shared_ptr history = std::make_shared(std::string(history_info.url)); - boost::gregorian::date d(m_year,m_month,m_month_day); - boost::posix_time::ptime t(d,boost::posix_time::time_duration(hour,min,sec)); - history->setLastVisit(t); - history->setUrl(std::string(history_info.url ? history_info.url : "")); - history->setTitle(std::string(history_info.title ? history_info.title : "")); + int *ids=nullptr; + int count=-1; + bp_history_rows_cond_fmt conds; + conds.limit = 20; //no of rows to get negative means no limitation + conds.offset = -1; //the first row's index + conds.order_offset = BP_HISTORY_O_DATE_VISITED; // property to sort + conds.ordering = 1; //way of ordering 0 asc 1 desc + conds.period_offset = BP_HISTORY_O_DATE_CREATED; + conds.period_type = period; - //thumbail - std::shared_ptr hi = std::make_shared(); - hi->imageType = tizen_browser::tools::BrowserImage::ImageType::ImageTypePNG; - hi->width = history_info.thumbnail_width; - hi->height = history_info.thumbnail_height; - hi->dataSize = history_info.thumbnail_length; - hi->imageData = (void*)malloc(history_info.thumbnail_length); - memcpy(hi->imageData, (void*)history_info.thumbnail, history_info.thumbnail_length); - history->setThumbnail(hi); + int ret = bp_history_adaptor_get_cond_ids_p(&ids ,&count, &conds, 0, nullptr, 0); + if (ret<0) { + BROWSER_LOGD("Error! Could not get ids!"); + } - history_list.push_back(history); + for(int i = 0; i< count; i++) { + ret_history_list->push_back(getHistoryItem(ids, i)); } free(ids); - return history_list; + return ret_history_list; } int HistoryService::getHistoryVisitCounter(const std::string & url) diff --git a/services/HistoryService/HistoryService.h b/services/HistoryService/HistoryService.h index 3f2c44e..966a37b 100644 --- a/services/HistoryService/HistoryService.h +++ b/services/HistoryService/HistoryService.h @@ -76,8 +76,9 @@ public: /** * @throws HistoryException on error */ - HistoryItemVector & getHistoryItems(int historyDepthInDays = 7, int maxItems = 50); - HistoryItemVector & getMostVisitedHistoryItems(); + std::shared_ptr getHistoryItems(bp_history_date_defs period = BP_HISTORY_DATE_TODAY, int maxItems = 50); + std::shared_ptr getCurrentTab(); + std::shared_ptr getMostVisitedHistoryItems(); /** * @throws HistoryException on error @@ -106,6 +107,7 @@ private: */ void initDatabaseBookmark(const std::string & db_str); + std::shared_ptr getHistoryItem(int* ids, int idNumber = 0); std::shared_ptr getStorageManager(); }; diff --git a/services/HistoryUI/HistoryUI.cpp b/services/HistoryUI/HistoryUI.cpp index c4ec024..a2dc558 100644 --- a/services/HistoryUI/HistoryUI.cpp +++ b/services/HistoryUI/HistoryUI.cpp @@ -178,7 +178,7 @@ void HistoryUI::addItems() BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); } -void HistoryUI::addHistoryItem(std::shared_ptr hi) +void HistoryUI::addHistoryItem(std::shared_ptr hi) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); HistoryItemData *itemData = new HistoryItemData(); @@ -188,11 +188,11 @@ void HistoryUI::addHistoryItem(std::shared_ptr > items) +void HistoryUI::addHistoryItems(std::shared_ptr items) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); _history_item_data.clear(); - for (auto it = items.begin(); it != items.end(); ++it) + for (auto it = items->begin(); it != items->end(); ++it) addHistoryItem(*it); } diff --git a/services/HistoryUI/HistoryUI.h b/services/HistoryUI/HistoryUI.h index f6ac0b2..1eb4a24 100644 --- a/services/HistoryUI/HistoryUI.h +++ b/services/HistoryUI/HistoryUI.h @@ -38,8 +38,8 @@ public: ~HistoryUI(); void init(Evas_Object *main_layout); virtual std::string getName(); - void addHistoryItem(std::shared_ptr); - void addHistoryItems(std::vector >); + void addHistoryItem(std::shared_ptr); + void addHistoryItems(std::shared_ptr); void removeHistoryItem(const std::string& uri); void clearItems(); void hide(); diff --git a/services/MainUI/MainUI.cpp b/services/MainUI/MainUI.cpp index 6d86e66..e011d46 100644 --- a/services/MainUI/MainUI.cpp +++ b/services/MainUI/MainUI.cpp @@ -297,7 +297,7 @@ void MainUI::_bookmark_manager_clicked(void * data, Evas_Object * /* obj */, voi mainUI->bookmarkManagerClicked(std::string()); } -void MainUI::addHistoryItem(std::shared_ptr hi) +void MainUI::addHistoryItem(std::shared_ptr hi) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); if (m_map_history_views.size() >= MAX_TILES_NUMBER) @@ -323,11 +323,11 @@ void MainUI::addHistoryItem(std::shared_ptr(hi->getUrl(),historyView)); } -void MainUI::addHistoryItems(std::vector > items) +void MainUI::addHistoryItems(std::shared_ptr items) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); int i = 0; - for (auto it = items.begin(); it != items.end(); ++it) { + for (auto it = items->begin(); it != items->end(); ++it) { i++; if (i > MAX_TILES_NUMBER) break; diff --git a/services/MainUI/MainUI.h b/services/MainUI/MainUI.h index 35a3794..6809fd0 100644 --- a/services/MainUI/MainUI.h +++ b/services/MainUI/MainUI.h @@ -48,8 +48,8 @@ public: void showBookmarks(); void clearItems(); - void addHistoryItem(std::shared_ptr); - void addHistoryItems(std::vector >); + void addHistoryItem(std::shared_ptr); + void addHistoryItems(std::shared_ptr); void addBookmarkItem(std::shared_ptr); void addBookmarkItems(std::vector >); diff --git a/services/MoreMenuUI/MoreMenuUI.cpp b/services/MoreMenuUI/MoreMenuUI.cpp index d28c73c..ed361b6 100644 --- a/services/MoreMenuUI/MoreMenuUI.cpp +++ b/services/MoreMenuUI/MoreMenuUI.cpp @@ -34,7 +34,7 @@ EXPORT_SERVICE(MoreMenuUI, "org.tizen.browser.moremenuui") struct ItemData{ tizen_browser::base_ui::MoreMenuUI * m_moreMenu; - tizen_browser::services::HistoryItem * h_item; + std::shared_ptr h_item; Elm_Object_Item * e_item; }; @@ -98,7 +98,7 @@ void MoreMenuUI::show(Evas_Object* parent) addItems(); } -void MoreMenuUI::showCurrentTab(const std::shared_ptr item) +void MoreMenuUI::showCurrentTab(std::shared_ptr item) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); elm_theme_extension_add(NULL, m_edjFilePath.c_str()); @@ -119,11 +119,11 @@ void MoreMenuUI::showCurrentTab(const std::shared_ptrfunc.text_get = &listItemTextGet; m_itemClass->func.content_get = &listItemContentGet; m_itemClass->func.state_get = 0; - m_itemClass->func.del = 0; + m_itemClass->func.del = &listItemDel; ItemData * id = new ItemData; id->m_moreMenu = this; - id->h_item = item ? item.get() : NULL; + id->h_item = item; Elm_Object_Item* elmItem = elm_genlist_item_append(m_genList, //genlist m_itemClass, //item Class id, @@ -148,7 +148,7 @@ Evas_Object* MoreMenuUI::listItemContentGet(void* data, Evas_Object* obj, const const char *part_name3 = "close_click"; static const int part_name3_len = strlen(part_name3); - if (!strncmp(part_name1, part, part_name1_len) && id->h_item && id->h_item->getFavIcon()) { + if (!strncmp(part_name1, part, part_name1_len) && id->h_item.get() && id->h_item->getFavIcon()) { // Currently favicon is not getting fetched from the engine, // so we are showing Google's favicon by default. Evas_Object *thumb_nail = elm_icon_add(obj); @@ -259,14 +259,14 @@ char* MoreMenuUI::listItemTextGet(void* data, Evas_Object*, const char* part) static const int part_name2_len = strlen(part_name2); if (!strncmp(part_name1, part, part_name1_len)) { - if (!id->h_item) { + if (!id->h_item.get()) { return strdup("New Tab"); } return strdup(id->h_item->getTitle().c_str()); } if (!strncmp(part_name2, part, part_name2_len)) { - if(!id->h_item) + if(!id->h_item.get()) return strdup(""); return strdup(id->h_item->getUrl().c_str()); } @@ -274,6 +274,13 @@ char* MoreMenuUI::listItemTextGet(void* data, Evas_Object*, const char* part) return strdup(""); } +void MoreMenuUI::listItemDel(void* data, Evas_Object* obj) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if(data) + delete (ItemData *)data; +} + void MoreMenuUI::hide() { evas_object_hide(elm_layout_content_get(m_mm_layout, "elm.swallow.grid")); diff --git a/services/MoreMenuUI/MoreMenuUI.h b/services/MoreMenuUI/MoreMenuUI.h index 103b8c7..9d0b4d4 100644 --- a/services/MoreMenuUI/MoreMenuUI.h +++ b/services/MoreMenuUI/MoreMenuUI.h @@ -63,7 +63,7 @@ public: MoreMenuUI(); ~MoreMenuUI(); void show(Evas_Object *main_layout); - void showCurrentTab(const std::shared_ptr item); + void showCurrentTab(std::shared_ptr item); virtual std::string getName(); void addItems(); void hide(); @@ -86,6 +86,7 @@ private: static Evas_Object* listItemContentGet(void *data, Evas_Object *obj, const char *part); static char* listItemTextGet(void *data, Evas_Object *obj, const char *part); + static void listItemDel(void *, Evas_Object *); void newFolderPopup(std::string); void NewFolderCreate(Evas_Object * popup_content); diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index f5f18f2..7d8e1fa 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -108,7 +108,7 @@ std::vector > SimpleUI::g return m_favoriteService->getBookmarks(folder_id); } -std::vector > SimpleUI::getHistory() +std::shared_ptr SimpleUI::getHistory() { return m_historyService->getMostVisitedHistoryItems(); } @@ -1139,25 +1139,24 @@ void SimpleUI::showMoreMenu() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); bool current_tab_as_new_tab = isHomePageActive() || (m_historyService->getHistoryItemsCount() == 0); - if(!m_moreMenuUI){ - m_moreMenuUI = - std::dynamic_pointer_cast - - (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.moremenuui")); + if (!m_moreMenuUI) { + m_moreMenuUI = std::dynamic_pointer_cast + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.moremenuui")); M_ASSERT(m_moreMenuUI); + m_moreMenuUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this, _1)); - m_moreMenuUI->historyUIClicked.connect(boost::bind(&SimpleUI::showHistoryUI, this,_1)); - m_moreMenuUI->settingsClicked.connect(boost::bind(&SimpleUI::showSettingsUI, this,_1)); + m_moreMenuUI->historyUIClicked.connect(boost::bind(&SimpleUI::showHistoryUI, this, _1)); + m_moreMenuUI->settingsClicked.connect(boost::bind(&SimpleUI::showSettingsUI, this, _1)); m_moreMenuUI->closeMoreMenuClicked.disconnect_all_slots(); - m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&SimpleUI::closeMoreMenu, this,_1)); + m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&SimpleUI::closeMoreMenu, this, _1)); m_moreMenuUI->addToBookmarkClicked.disconnect_all_slots(); m_moreMenuUI->addToBookmarkClicked.connect(boost::bind(&SimpleUI::addBookmarkFolders, this)); m_moreMenuUI->AddBookmarkInput.disconnect_all_slots(); - m_moreMenuUI->AddBookmarkInput.connect(boost::bind(&SimpleUI::addToBookmarks, this,_1)); + m_moreMenuUI->AddBookmarkInput.connect(boost::bind(&SimpleUI::addToBookmarks, this, _1)); m_moreMenuUI->BookmarkFolderCreated.disconnect_all_slots(); - m_moreMenuUI->BookmarkFolderCreated.connect(boost::bind(&SimpleUI::newFolderMoreMenu, this,_1,_2)); + m_moreMenuUI->BookmarkFolderCreated.connect(boost::bind(&SimpleUI::newFolderMoreMenu, this, _1, _2)); m_moreMenuUI->show(m_window.get()); - m_moreMenuUI->showCurrentTab(current_tab_as_new_tab ? nullptr : m_historyService->getHistoryItems().front()); + m_moreMenuUI->showCurrentTab(current_tab_as_new_tab ? nullptr : m_historyService->getCurrentTab()); BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); } } diff --git a/services/SimpleUI/SimpleUI.h b/services/SimpleUI/SimpleUI.h index 06bbe47..e4783dd 100644 --- a/services/SimpleUI/SimpleUI.h +++ b/services/SimpleUI/SimpleUI.h @@ -122,7 +122,7 @@ private: void bookmarkCheck(); std::vector > getBookmarks(int folder_id = -1); std::vector > getBookmarkFolders(int folder_id); - std::vector > getHistory(); + std::shared_ptr getHistory(); void onBookmarkAdded(std::shared_ptr bookmarkItem); void onBookmarkClicked(std::shared_ptr bookmarkItem); -- 2.7.4 From be51d69764718e57d75c943cb1b5c41296d18832 Mon Sep 17 00:00:00 2001 From: "t.dakowicz" Date: Thu, 27 Aug 2015 16:43:15 +0200 Subject: [PATCH 16/16] TT-141 Added current web page info sync [Issue#] https://bugs.tizen.org/jira/browse/TT-141 [Problem] Current web page info wasn't always updated and favicon wasn't loaded [Cause] Lack of proper signals [Solution] Added signals, removed genlist and used single layout instead, resized space for site info, removed pointless image reload from WebView::getFavicon [Verify] Open a new page -> type web url -> MoreMenu Check if the info is properly loaded Change-Id: Ibe3f7cd97279470761eaa9f58c9e40b06c655eeb --- services/MoreMenuUI/MoreMenuUI.cpp | 200 +++++++++---------------------- services/MoreMenuUI/MoreMenuUI.h | 22 ++-- services/MoreMenuUI/edc/MoreMenu.edc | 21 ++-- services/SimpleUI/SimpleUI.cpp | 45 +++---- services/WebKitEngineService/WebView.cpp | 61 ++++------ 5 files changed, 116 insertions(+), 233 deletions(-) diff --git a/services/MoreMenuUI/MoreMenuUI.cpp b/services/MoreMenuUI/MoreMenuUI.cpp index ed361b6..fb1bcb5 100644 --- a/services/MoreMenuUI/MoreMenuUI.cpp +++ b/services/MoreMenuUI/MoreMenuUI.cpp @@ -72,10 +72,6 @@ void MoreMenuUI::show(Evas_Object* parent) m_gengrid = elm_gengrid_add(m_mm_layout); elm_object_part_content_set(m_mm_layout, "elm.swallow.grid", m_gengrid); - /*evas_object_smart_callback_add(m_gengrid, "item,focused", focusItem, NULL); - evas_object_smart_callback_add(m_gengrid, "item,unfocused", unFocusItem, NULL); - evas_object_smart_callback_add(m_gengrid, "activated", _itemSelected, this);*/ - if (!m_item_class) { m_item_class = elm_gengrid_item_class_new(); m_item_class->item_style = "menu_item"; @@ -98,90 +94,75 @@ void MoreMenuUI::show(Evas_Object* parent) addItems(); } -void MoreMenuUI::showCurrentTab(std::shared_ptr item) +void MoreMenuUI::showCurrentTab() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - elm_theme_extension_add(NULL, m_edjFilePath.c_str()); - m_genList = elm_genlist_add(m_mm_layout); - elm_object_part_content_set(m_mm_layout, "elm.swallow.genlist", m_genList); - elm_genlist_homogeneous_set(m_genList, EINA_FALSE); - elm_genlist_multi_select_set(m_genList, EINA_FALSE); - elm_genlist_select_mode_set(m_genList, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_genlist_mode_set(m_genList, ELM_LIST_LIMIT); - elm_genlist_decorate_mode_set(m_genList, EINA_TRUE); - evas_object_size_hint_weight_set(m_genList, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - - /*evas_object_smart_callback_add(m_genList, "item,focused", focusItem, this); - evas_object_smart_callback_add(m_genList, "item,unfocused", unFocusItem, NULL);*/ - - m_itemClass = elm_genlist_item_class_new(); - m_itemClass->item_style = "current_tab"; - m_itemClass->func.text_get = &listItemTextGet; - m_itemClass->func.content_get = &listItemContentGet; - m_itemClass->func.state_get = 0; - m_itemClass->func.del = &listItemDel; - - ItemData * id = new ItemData; - id->m_moreMenu = this; - id->h_item = item; - Elm_Object_Item* elmItem = elm_genlist_item_append(m_genList, //genlist - m_itemClass, //item Class - id, - NULL, //parent item - ELM_GENLIST_ITEM_NONE, //item type - NULL, - NULL //data passed to above function - ); - id->e_item = elmItem; + m_current_tab_bar = elm_layout_add(m_mm_layout); + elm_layout_file_set(m_current_tab_bar, m_edjFilePath.c_str(), "current_tab_layout"); + evas_object_size_hint_weight_set(m_current_tab_bar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_part_content_set(m_mm_layout, "current_tab_bar", m_current_tab_bar); + + Evas_Object* button = elm_button_add(m_current_tab_bar); + elm_object_style_set(button, "hidden_button"); + evas_object_smart_callback_add(button, "clicked", _star_clicked, this); + elm_object_part_content_set(m_current_tab_bar, "star_click", button); + + button = elm_button_add(m_current_tab_bar); + elm_object_style_set(button, "hidden_button"); + evas_object_smart_callback_add(button, "clicked", _close_clicked, this); + elm_object_part_content_set(m_current_tab_bar, "close_click", button); BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); } -Evas_Object* MoreMenuUI::listItemContentGet(void* data, Evas_Object* obj, const char* part) +void MoreMenuUI::setFavIcon(std::shared_ptr favicon) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if (data && obj && part) { - ItemData * id = static_cast(data); - const char *part_name1 = "favicon"; - static const int part_name1_len = strlen(part_name1); - const char *part_name2 = "star_click"; - static const int part_name2_len =strlen(part_name2); - const char *part_name3 = "close_click"; - static const int part_name3_len = strlen(part_name3); - - if (!strncmp(part_name1, part, part_name1_len) && id->h_item.get() && id->h_item->getFavIcon()) { - // Currently favicon is not getting fetched from the engine, - // so we are showing Google's favicon by default. - Evas_Object *thumb_nail = elm_icon_add(obj); - const char *file_name = "favicon.png"; - elm_image_file_set(thumb_nail, id->m_moreMenu->m_edjFilePath.c_str(), file_name); - return thumb_nail; - //return tizen_browser::tools::EflTools::getEvasImage(id->h_item->getFavIcon(), obj); + if(favicon && favicon->imageType != tools::BrowserImage::ImageTypeNoImage){ + m_icon = tizen_browser::tools::EflTools::getEvasImage(favicon, m_current_tab_bar); + if(m_icon){ + evas_object_size_hint_weight_set(m_icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(m_icon, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_part_content_set(m_current_tab_bar, "favicon", m_icon); + evas_object_show(m_icon); } + } +} - if (!strncmp(part_name2, part, part_name2_len)) { - Evas_Object *star_click = elm_button_add(obj); - elm_object_style_set(star_click, "hidden_button"); - evas_object_smart_callback_add(star_click, "clicked", MoreMenuUI::star_clicked_cb, id); - return star_click; - } +void MoreMenuUI::setWebTitle(const std::string& title) +{ + BROWSER_LOGD("[%s:%d] %s", __PRETTY_FUNCTION__, __LINE__, title.c_str()); + if(!title.empty()) + elm_object_part_text_set(m_current_tab_bar, "webpage_title", title.c_str()); + else + elm_object_part_text_set(m_current_tab_bar, "webpage_title", "New Tab"); +} - if (!strncmp(part_name3, part, part_name3_len)) { - Evas_Object *close_click = elm_button_add(obj); - elm_object_style_set(close_click, "hidden_button"); - evas_object_smart_callback_add(close_click, "clicked", MoreMenuUI::close_clicked_cb, id); - return close_click; - } +void MoreMenuUI::setURL(const std::string& url) +{ + BROWSER_LOGD("[%s:%d] %s", __PRETTY_FUNCTION__, __LINE__, url.c_str()); + if(!url.empty()) + elm_object_part_text_set(m_current_tab_bar, "webpage_url", url.c_str()); + else + elm_object_part_text_set(m_current_tab_bar, "webpage_url", ""); +} + +void MoreMenuUI::_star_clicked(void* data, Evas_Object*, void*) +{ + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + if (data) { + MoreMenuUI *moreMenuUI = static_cast(data); + moreMenuUI->addToBookmarkClicked(); + moreMenuUI->AddBookmarkPopupCalled(); } - return NULL; } -void MoreMenuUI::star_clicked_cb(void* data, Evas_Object*, void*) +void MoreMenuUI::_close_clicked(void* data, Evas_Object*, void*) { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); if (data) { - ItemData * id = static_cast(data); - id->m_moreMenu->addToBookmarkClicked(); - id->m_moreMenu->AddBookmarkPopupCalled(); + MoreMenuUI *moreMenuUI = static_cast(data); + moreMenuUI->closeMoreMenuClicked(std::string()); + moreMenuUI->clearItems(); } } @@ -238,53 +219,11 @@ void MoreMenuUI::addToBookmarks(int folder_id) m_add_bookmark_popup->hide(); m_add_bookmark_popup.reset(); } -void MoreMenuUI::close_clicked_cb(void* data, Evas_Object*, void*) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if (data) { - ItemData * id = static_cast(data); - id->m_moreMenu->closeMoreMenuClicked(std::string()); - id->m_moreMenu->clearItems(); - } -} - -char* MoreMenuUI::listItemTextGet(void* data, Evas_Object*, const char* part) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if (data && part) { - ItemData *id = static_cast(data); - const char *part_name1 = "webpage_title"; - static const int part_name1_len = strlen(part_name1); - const char *part_name2 = "webpage_url"; - static const int part_name2_len = strlen(part_name2); - - if (!strncmp(part_name1, part, part_name1_len)) { - if (!id->h_item.get()) { - return strdup("New Tab"); - } - return strdup(id->h_item->getTitle().c_str()); - } - - if (!strncmp(part_name2, part, part_name2_len)) { - if(!id->h_item.get()) - return strdup(""); - return strdup(id->h_item->getUrl().c_str()); - } - } - return strdup(""); -} - -void MoreMenuUI::listItemDel(void* data, Evas_Object* obj) -{ - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - if(data) - delete (ItemData *)data; -} void MoreMenuUI::hide() { evas_object_hide(elm_layout_content_get(m_mm_layout, "elm.swallow.grid")); - evas_object_hide(elm_layout_content_get(m_mm_layout, "elm.swallow.genlist")); + evas_object_hide(elm_layout_content_get(m_mm_layout, "current_tab_bar")); evas_object_hide(m_mm_layout); } @@ -507,9 +446,9 @@ void MoreMenuUI::clearItems() hide(); BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); elm_gengrid_clear(m_gengrid); - elm_genlist_clear(m_genList); m_map_menu_views.clear(); m_map_bookmark_folder_list.clear(); + evas_object_del(m_current_tab_bar); elm_theme_extension_del(NULL, m_edjFilePath.c_str()); elm_theme_full_flush(); elm_cache_all_flush(); @@ -521,34 +460,5 @@ void MoreMenuUI::_exitClicked() elm_exit(); } -//void MoreMenuUI::focusItem(void*, Evas_Object*, void* event_info) -//{ -// BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); -// if (event_info) { -// Elm_Object_Item *item = static_cast(event_info); -// elm_object_item_signal_emit(item, "mouse,in", "over2"); -// -// // selected manually -// elm_gengrid_item_selected_set(item, EINA_TRUE); -// } -//} -// -//void MoreMenuUI::unFocusItem(void*, Evas_Object*, void* event_info) -//{ -// BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); -// if (event_info) { -// Elm_Object_Item *item = static_cast(event_info); -// elm_object_item_signal_emit( item, "mouse,out", "over2"); -// -// // unselected manually -// elm_gengrid_item_selected_set(item, EINA_FALSE); -// } -//} -// -//void MoreMenuUI::_itemSelected(void*, Evas_Object*, void *) -//{ -// BROWSER_LOGD("[%s:%d]", __PRETTY_FUNCTION__, __LINE__); -//} - } } diff --git a/services/MoreMenuUI/MoreMenuUI.h b/services/MoreMenuUI/MoreMenuUI.h index 9d0b4d4..cd3d6c1 100644 --- a/services/MoreMenuUI/MoreMenuUI.h +++ b/services/MoreMenuUI/MoreMenuUI.h @@ -25,7 +25,6 @@ #include "AbstractService.h" #include "ServiceFactory.h" #include "service_macros.h" -//#include "../SimpleUI/SimpleUI.h" #include "BookmarkItem.h" #include "AddBookmarkPopup.h" @@ -63,12 +62,15 @@ public: MoreMenuUI(); ~MoreMenuUI(); void show(Evas_Object *main_layout); - void showCurrentTab(std::shared_ptr item); + void showCurrentTab(); virtual std::string getName(); void addItems(); void hide(); void clearItems(); void getBookmarkFolderList(std::vector > ); + void setFavIcon(std::shared_ptr favicon); + void setWebTitle(const std::string& title); + void setURL(const std::string& url); boost::signals2::signal addToBookmarkClicked; boost::signals2::signal AddBookmarkInput; @@ -84,10 +86,6 @@ private: static void _thumbSelected(void * data, Evas_Object * obj, void * event_info); static void _exitClicked(); - static Evas_Object* listItemContentGet(void *data, Evas_Object *obj, const char *part); - static char* listItemTextGet(void *data, Evas_Object *obj, const char *part); - static void listItemDel(void *, Evas_Object *); - void newFolderPopup(std::string); void NewFolderCreate(Evas_Object * popup_content); void CancelClicked(Evas_Object * popup_content); @@ -95,18 +93,17 @@ private: void AddBookmarkPopupCalled(); void addToBookmarks(int folder_id); - static void star_clicked_cb(void *data, Evas_Object *obj, void *event_info); - static void close_clicked_cb(void *data, Evas_Object *obj, void *event_info); + static void _star_clicked(void *data, Evas_Object *obj, void *event_info); + static void _close_clicked(void *data, Evas_Object *obj, void *event_info); static void __cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info); static void __cb_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info); private: - Evas_Object *m_genList; + Evas_Object *m_current_tab_bar; std::shared_ptr m_new_folder_popup; Evas_Object *m_mm_layout; std::shared_ptr m_add_bookmark_popup; - Elm_Genlist_Item_Class *m_itemClass; Evas_Object *m_gengrid; Evas_Object *m_parent; Elm_Gengrid_Item_Class * m_item_class; @@ -115,10 +112,7 @@ private: std::string m_edjFilePath; std::string m_folderName; bool m_gengridSetup; - - //static void focusItem(void* data, Evas_Object* obj, void* event_info); - //static void unFocusItem(void* data, Evas_Object* obj, void* event_info); - //static void _itemSelected(void * data, Evas_Object * obj, void * event_info); + Evas_Object *m_icon; }; } diff --git a/services/MoreMenuUI/edc/MoreMenu.edc b/services/MoreMenuUI/edc/MoreMenu.edc index e7b67a7..91dbe04 100644 --- a/services/MoreMenuUI/edc/MoreMenu.edc +++ b/services/MoreMenuUI/edc/MoreMenu.edc @@ -52,14 +52,13 @@ RESOURCE_IMAGE_LOSSY("ic_more_mobileview_foc.png") RESOURCE_IMAGE_LOSSY("ic_more_share_foc.png") RESOURCE_IMAGE_LOSSY("ic_more_setting_foc.png") RESOURCE_IMAGE_LOSSY("ic_more_exit_foc.png") -RESOURCE_IMAGE_LOSSY("favicon.png") #define WIDTH 1920 #define HEIGHT 366 #define ITEM_WIDTH 1200 group { - name: "elm/genlist/item/current_tab/default"; + name: "current_tab_layout"; min: WIDTH HEIGHT; max: WIDTH HEIGHT; images { @@ -332,8 +331,8 @@ RESOURCE_IMAGE_LOSSY("favicon.png") state: "default" 0.0; visible: 1; fixed: 1 1; - min: 216 36; - max: 216 36; + min: 1146 36; + max: 1146 36; align: 0 0.0; rel1 { relative: 0.0 0.0; to: "item_background"; offset: 98 0;} rel2 { relative: 1.0 1.0; to: "item_background";} @@ -362,8 +361,8 @@ RESOURCE_IMAGE_LOSSY("favicon.png") state: "default" 0.0; visible: 1; fixed: 1 1; - min: 765 27; - max: 765 27; + min: 1146 28; + max: 1146 28; align: 0 0; rel1 { relative: 0.0 0.0; to: "item_background"; offset: 98 51;} rel2 { relative: 1.0 1.0; to: "item_background";} @@ -371,7 +370,7 @@ RESOURCE_IMAGE_LOSSY("favicon.png") text { text: "http:/onet.pl"; font: "font_name"; - size: 27; + size: 28; align: 0 0.5; } } @@ -635,7 +634,7 @@ group { image: "web_shadow.png" COMP; } parts { - part { name: "genlist_bg"; + part { name: "current_tab_bar_bg"; type: RECT; mouse_events: 0; description { state: "default" 0.0; @@ -662,14 +661,14 @@ group { max: 1920 714; color: 231 231 231 255; rel1 { - relative: 0 1; to: "genlist_bg"; + relative: 0 1; to: "current_tab_bar_bg"; } rel2{ relative: 1 1; } } } - part { name: "elm.swallow.genlist"; + part { name: "current_tab_bar"; type : SWALLOW; scale: 1; description { @@ -679,7 +678,7 @@ group { max: 1920 366; align: 0.0 0.0; fixed: 0 0; - rel1 { relative: 0.0 0.0; to: "genlist_bg";} + rel1 { relative: 0.0 0.0; to: "current_tab_bar_bg";} rel2 { relative: 1.0 1.0; } } description { diff --git a/services/SimpleUI/SimpleUI.cpp b/services/SimpleUI/SimpleUI.cpp index 7d8e1fa..1bb4e66 100644 --- a/services/SimpleUI/SimpleUI.cpp +++ b/services/SimpleUI/SimpleUI.cpp @@ -263,8 +263,6 @@ int SimpleUI::exec(const std::string& _url) m_webEngine->confirmationRequest.connect(boost::bind(&SimpleUI::handleConfirmationRequest, this, _1)); m_webEngine->tabCreated.connect(boost::bind(&SimpleUI::tabCreated, this)); m_webEngine->tabClosed.connect(boost::bind(&SimpleUI::tabClosed,this,_1)); - m_webEngine->favIconChanged.connect(boost::bind(&SimpleURI::setFavIcon, m_simpleURI.get(), _1)); - m_webEngine->favIconChanged.connect(boost::bind(&WebTitleBar::setFavIcon, webTitleBar.get(), _1)); m_webEngine->titleChanged.connect(boost::bind(&WebTitleBar::show, webTitleBar.get(), _1)); m_webEngine->IMEStateChanged.connect(boost::bind(&SimpleUI::setwvIMEStatus, this, _1)); @@ -776,10 +774,6 @@ void SimpleUI::loadFinished() addBookmarkEnable(m_favoriteService->countBookmarksAndSubFolders() < m_favoritesLimit); - if(m_simpleURI->getCurrentIconTyep() != SimpleURI::IconTypeFav){ - m_simpleURI->setFavIcon(m_webEngine->getFavicon()); - webTitleBar->setFavIcon(m_webEngine->getFavicon()); - } if(m_webEngine->isLoadError()){ loadError(); } @@ -1139,32 +1133,39 @@ void SimpleUI::showMoreMenu() { BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); bool current_tab_as_new_tab = isHomePageActive() || (m_historyService->getHistoryItemsCount() == 0); - if (!m_moreMenuUI) { - m_moreMenuUI = std::dynamic_pointer_cast - (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.moremenuui")); + if(!m_moreMenuUI){ + m_moreMenuUI = + std::dynamic_pointer_cast + + (tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.moremenuui")); M_ASSERT(m_moreMenuUI); - + m_webEngine->favIconChanged.disconnect_all_slots(); + m_webEngine->favIconChanged.connect(boost::bind(&MoreMenuUI::setFavIcon, m_moreMenuUI.get(), _1)); + m_webEngine->titleChanged.disconnect_all_slots(); + m_webEngine->titleChanged.connect(boost::bind(&MoreMenuUI::setWebTitle, m_moreMenuUI.get(), _1)); + m_webEngine->uriChanged.disconnect_all_slots(); + m_webEngine->uriChanged.connect(boost::bind(&MoreMenuUI::setURL, m_moreMenuUI.get(), _1)); m_moreMenuUI->bookmarkManagerClicked.connect(boost::bind(&SimpleUI::onBookmarkManagerButtonClicked, this, _1)); - m_moreMenuUI->historyUIClicked.connect(boost::bind(&SimpleUI::showHistoryUI, this, _1)); - m_moreMenuUI->settingsClicked.connect(boost::bind(&SimpleUI::showSettingsUI, this, _1)); - m_moreMenuUI->closeMoreMenuClicked.disconnect_all_slots(); - m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&SimpleUI::closeMoreMenu, this, _1)); - m_moreMenuUI->addToBookmarkClicked.disconnect_all_slots(); + m_moreMenuUI->historyUIClicked.connect(boost::bind(&SimpleUI::showHistoryUI, this,_1)); + m_moreMenuUI->settingsClicked.connect(boost::bind(&SimpleUI::showSettingsUI, this,_1)); + m_moreMenuUI->closeMoreMenuClicked.connect(boost::bind(&SimpleUI::closeMoreMenu, this,_1)); m_moreMenuUI->addToBookmarkClicked.connect(boost::bind(&SimpleUI::addBookmarkFolders, this)); - m_moreMenuUI->AddBookmarkInput.disconnect_all_slots(); - m_moreMenuUI->AddBookmarkInput.connect(boost::bind(&SimpleUI::addToBookmarks, this, _1)); - m_moreMenuUI->BookmarkFolderCreated.disconnect_all_slots(); - m_moreMenuUI->BookmarkFolderCreated.connect(boost::bind(&SimpleUI::newFolderMoreMenu, this, _1, _2)); + m_moreMenuUI->AddBookmarkInput.connect(boost::bind(&SimpleUI::addToBookmarks, this,_1)); + m_moreMenuUI->BookmarkFolderCreated.connect(boost::bind(&SimpleUI::newFolderMoreMenu, this,_1,_2)); + m_moreMenuUI->show(m_window.get()); - m_moreMenuUI->showCurrentTab(current_tab_as_new_tab ? nullptr : m_historyService->getCurrentTab()); + m_moreMenuUI->showCurrentTab(); + m_moreMenuUI->setFavIcon(m_webEngine->getFavicon()); + m_moreMenuUI->setWebTitle(m_webEngine->getTitle()); + m_moreMenuUI->setURL(m_webEngine->getURI()); BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); } } void SimpleUI::closeMoreMenu(const std::string& str) { - BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); - m_moreMenuUI.reset() ; + BROWSER_LOGD("[%s:%d] ", __PRETTY_FUNCTION__, __LINE__); + m_moreMenuUI.reset(); } void SimpleUI::showBookmarkManagerMenu() diff --git a/services/WebKitEngineService/WebView.cpp b/services/WebKitEngineService/WebView.cpp index 89ef166..f634541 100644 --- a/services/WebKitEngineService/WebView.cpp +++ b/services/WebKitEngineService/WebView.cpp @@ -210,7 +210,7 @@ std::string WebView::getURI(void) { #if defined(USE_EWEBKIT) BROWSER_LOGD("%s:%d %s uri=%s", __FILE__, __LINE__, __func__, ewk_view_url_get(m_ewkView)); - return tizen_browser::tools::fromChar(ewk_view_url_get(m_ewkView)); + return fromChar(ewk_view_url_get(m_ewkView)); #else return std::string(); #endif @@ -427,14 +427,14 @@ void WebView::confirmationResult(WebConfirmationPtr confirmation) #endif } -std::shared_ptr WebView::captureSnapshot(int targetWidth, int targetHeight) +std::shared_ptr WebView::captureSnapshot(int targetWidth, int targetHeight) { BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); M_ASSERT(m_ewkView); M_ASSERT(targetWidth); M_ASSERT(targetHeight); Evas_Coord vw, vh; - std::shared_ptr noImage = std::make_shared(); + std::shared_ptr noImage = std::make_shared(); evas_object_geometry_get(m_ewkView, nullptr, nullptr, &vw, &vh); if (vw == 0 || vh == 0) return noImage; @@ -465,7 +465,7 @@ std::shared_ptr WebView::captureSnapshot(int Evas_Object *snapshot = ewk_view_screenshot_contents_get( m_ewkView, area, 1.0, evas_object_evas_get(m_ewkView)); BROWSER_LOGD("[%s:%d] Snapshot (screenshot) catched, evas pointer: %p",__func__, __LINE__, snapshot); if (snapshot) - return tizen_browser::tools::EflTools::getBrowserImage(snapshot); + return EflTools::getBrowserImage(snapshot); #endif #endif @@ -594,7 +594,7 @@ void WebView::__titleChanged(void * data, Evas_Object * obj, void * /* event_inf BROWSER_LOGD("%s:%d %s", __FILE__, __LINE__, __func__); WebView * self = reinterpret_cast(data); - self->m_title = tizen_browser::tools::fromChar(ewk_view_title_get(obj)); + self->m_title = fromChar(ewk_view_title_get(obj)); self->titleChanged(self->m_title); } @@ -609,7 +609,7 @@ void WebView::__urlChanged(void * data, Evas_Object * /* obj */, void * event_in m_webEngine = std::dynamic_pointer_cast, tizen_browser::core::AbstractService>( tizen_browser::core::ServiceManager::getInstance().getService("org.tizen.browser.webkitengineservice")); M_ASSERT(m_webEngine); - self->uriChanged(tizen_browser::tools::fromChar(reinterpret_cast(event_info))); + self->uriChanged(fromChar(reinterpret_cast(event_info))); self->tabIdChecker(self->m_tabId); } @@ -630,7 +630,7 @@ void WebView::__faviconChanged(void* data, Evas_Object*, void*) Evas_Object * favicon = ewk_context_icon_database_icon_object_add(ewk_view_context_get(self->m_ewkView), ewk_view_url_get(self->m_ewkView),evas_object_evas_get(self->m_ewkView)); if (favicon) { BROWSER_LOGD("[%s:%d] Favicon received", __PRETTY_FUNCTION__, __LINE__); - self->faviconImage = tizen_browser::tools::EflTools::getBrowserImage(favicon); + self->faviconImage = EflTools::getBrowserImage(favicon); evas_object_unref(favicon); self->favIconChanged(self->faviconImage); } @@ -653,8 +653,8 @@ void WebView::__IMEOpened(void* data, Evas_Object*, void*) std::string WebView::securityOriginToUri(const Ewk_Security_Origin *origin) { - std::string protocol = tizen_browser::tools::fromChar(ewk_security_origin_protocol_get(origin)); - std::string uri = tizen_browser::tools::fromChar(ewk_security_origin_host_get(origin)); + std::string protocol = fromChar(ewk_security_origin_protocol_get(origin)); + std::string uri = fromChar(ewk_security_origin_host_get(origin)); std::string url = (boost::format("%1%://%2%") % protocol % uri).str(); return url; } @@ -831,42 +831,21 @@ const TabId& WebView::getTabId(){ } -std::shared_ptr WebView::getFavicon() { +std::shared_ptr WebView::getFavicon() +{ BROWSER_LOGD("%s:%d, TabId: %s", __PRETTY_FUNCTION__, __LINE__, m_tabId.toString().c_str()); - M_ASSERT(m_ewkView); - -#if defined(USE_EWEBKIT) - if (faviconImage.get() == NULL) { - - if (m_ewkView) - { - Ewk_Context *context = ewk_view_context_get(m_ewkView); - if (context) - { - Evas_Object * favicon = ewk_context_icon_database_icon_object_add(context, ewk_view_url_get(m_ewkView), evas_object_evas_get(m_ewkView)); - -#ifndef NDEBUG - int w = 0, h = 0; - evas_object_image_size_get(favicon, &w, &h); - BROWSER_LOGD("[%s]: Info about favicon: w:%d h:%d, type: %s", __func__, w, h, evas_object_type_get(favicon)); -#endif - if (favicon) { - std::shared_ptr - image = tizen_browser::tools::EflTools::getBrowserImage(favicon); + if(faviconImage.get()) + return faviconImage; - evas_object_unref(favicon); + Evas_Object * favicon = ewk_context_icon_database_icon_object_add(ewk_view_context_get(m_ewkView), ewk_view_url_get(m_ewkView),evas_object_evas_get(m_ewkView)); + faviconImage = EflTools::getBrowserImage(favicon); + evas_object_unref(favicon); - return image; - } - } else { - return faviconImage; - } - } - } -#endif + if(faviconImage.get()) + return faviconImage; - BROWSER_LOGE("[%s:%d]: Returned favicon is empty!", __PRETTY_FUNCTION__, __LINE__); - return std::make_shared(); + BROWSER_LOGD("[%s:%d] Returned favicon is empty!", __PRETTY_FUNCTION__, __LINE__); + return std::make_shared(); } void WebView::clearPrivateData() -- 2.7.4