From f3c79e353329aab9337461fdc1a7559cc55ba315 Mon Sep 17 00:00:00 2001 From: Leandro Pereira Date: Mon, 13 Sep 2010 22:34:19 +0000 Subject: [PATCH] Rename Bookmarks to More and implement Preferences display. SVN revision: 52205 --- data/themes/Makefile.am | 12 +- data/themes/arrow_right.png | Bin 0 -> 644 bytes data/themes/bt_bookmark_normal.png | Bin 6660 -> 0 bytes data/themes/bt_bookmark_selected.png | Bin 8464 -> 0 bytes data/themes/bt_more_normal.png | Bin 0 -> 4229 bytes data/themes/bt_more_selected.png | Bin 0 -> 6304 bytes data/themes/check.png | Bin 0 -> 1638 bytes data/themes/elm-list.edc | 8 +- ...k-button.png => more-list-back-button.png} | Bin ...ark-list-title.png => more-list-title.png} | Bin src/bin/Makefile.am | 6 +- src/bin/chrome.c | 614 +++++++++++++----- src/bin/main.c | 28 +- src/bin/prefs.c | 271 ++++++++ src/bin/prefs.h | 40 ++ src/bin/private.h | 2 + 16 files changed, 807 insertions(+), 174 deletions(-) create mode 100644 data/themes/arrow_right.png delete mode 100644 data/themes/bt_bookmark_normal.png delete mode 100644 data/themes/bt_bookmark_selected.png create mode 100644 data/themes/bt_more_normal.png create mode 100644 data/themes/bt_more_selected.png create mode 100644 data/themes/check.png rename data/themes/{bookmark-list-back-button.png => more-list-back-button.png} (100%) rename data/themes/{bookmark-list-title.png => more-list-title.png} (100%) create mode 100644 src/bin/prefs.c create mode 100644 src/bin/prefs.h diff --git a/data/themes/Makefile.am b/data/themes/Makefile.am index 1c42325..a7663cd 100644 --- a/data/themes/Makefile.am +++ b/data/themes/Makefile.am @@ -7,12 +7,12 @@ filesdir = $(datadir)/$(PACKAGE) files_DATA = ewebkit.edj default.edj images = \ - bookmark-list-back-button.png \ - bookmark-list-title.png \ + more-list-back-button.png \ + more-list-title.png \ bt_back_normal.png \ bt_back_selected.png \ - bt_bookmark_normal.png \ - bt_bookmark_selected.png \ + bt_more_normal.png \ + bt_more_selected.png \ bt_fav_normal.png \ bt_fav_selected.png \ bt_forward_normal.png \ @@ -41,7 +41,9 @@ images = \ cur_shine.png \ cur_glow.png \ cur_shad.png \ - progress-bar-background.png + progress-bar-background.png \ + arrow_right.png \ + check.png fonts = diff --git a/data/themes/arrow_right.png b/data/themes/arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..1de5eb906d9804689fbabb908c8678319ebb1f94 GIT binary patch literal 644 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1rX+877lyx?jcX?Zd7K3vkswhI zFm^kcZ3hx8D{xE)(qO#|6+TOsF)%Rpc)B=-Se%}F#XmpDQKaqT{Z?+(Psf9jm9IIO ztG)8_^|<_gzwqsnixP`BZWOz6#qF|F!=cvKP4|j2GnLMzsm=VHa?bL7wHiYbM~bNE z*DtOt)7Cyvvr!KD8g-c6y=u|y*GnCa&6*W!D!fs-UC-xe`NR)Z@t;qvo7300Y5Jyb zrLLQgPiM3|A1b@s#K>TSa>;}38vDL_G4X6|xmN0`*0wI^WcBkHmA+t)AZLZ=owlmE z;!2XLrnT?qN-oWwS*|%@^TN!_o%Y9=RBtbf+9y3*?cl*CzJ;sI<+82Kr-g=0-?~0I zWfz0TEkUiy*DHhVU5&b4Y4O#Vn#3}QO%N|D`C~9G^wNh53-#L^ebm+_GEAJ;zwc&{ zpyX?-i`T#8l+9)Om)rXJv6EM+?DRvgr^sbwo@Y9w`f&52^G80dT(o{t*t#3n3RV`x zO1ADkv^3Z&da-)Ij`LE*+w*P*mt|>82@d?MZ5SW5jzuFQ%fd|Xly>zJ+s)gn-`IY; z+2$L}och{MmARz)QJCDt|G!zney06nTA{pV>5ey3UjidZwZt`|BqgyV)hf9t6-Y4{ z85kPq8d&NY8iW{{Ss9yKnHcFB7+V<_Y$}vogrXrgKP5A*61RrKIt%518YDqB1m~xf plqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$(@O1TaS?83{1OOr*{M7&e literal 0 HcmV?d00001 diff --git a/data/themes/bt_bookmark_normal.png b/data/themes/bt_bookmark_normal.png deleted file mode 100644 index 816c71c89e62e6bd844aad3b4bbbd0804e4ded30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6660 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 O0000+fs;{};xyO5N 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 literal 0 HcmV?d00001 diff --git a/data/themes/bt_more_selected.png b/data/themes/bt_more_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..cd41b6344cc55a2aebe45488ca50bb45ef1624a0 GIT binary patch literal 6304 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%0D5`L$DrBqBP?tgLl~Ok-{hmlnWhwV^ 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 b=^2#d#QgtXPz|yxfdUAF!Xev^#q(N literal 0 HcmV?d00001 diff --git a/data/themes/elm-list.edc b/data/themes/elm-list.edc index 094ae0a..a08b029 100644 --- a/data/themes/elm-list.edc +++ b/data/themes/elm-list.edc @@ -54,11 +54,11 @@ align: 0.0 0.5; rel1 { relative: 0.0 0.0; - offset: 4 4; + offset: 20 3; } rel2 { relative: 0.0 1.0; - offset: 4 -5; + offset: 21 -12; } } } @@ -69,11 +69,11 @@ align: 1.0 0.5; rel1 { relative: 1.0 0.0; - offset: -5 4; + offset: -15 3; } rel2 { relative: 1.0 1.0; - offset: -5 -5; + offset: -16 -12; } } } diff --git a/data/themes/bookmark-list-back-button.png b/data/themes/more-list-back-button.png similarity index 100% rename from data/themes/bookmark-list-back-button.png rename to data/themes/more-list-back-button.png diff --git a/data/themes/bookmark-list-title.png b/data/themes/more-list-title.png similarity index 100% rename from data/themes/bookmark-list-title.png rename to data/themes/more-list-title.png diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 19e965d..797eee6 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -15,7 +15,7 @@ bin_PROGRAMS += eve_ql endif eve_LDADD = @ELEMENTARY_LIBS@ @EWEBKIT_LIBS@ -eve_SOURCES = main.c view.c chrome.c favorite.c history.c +eve_SOURCES = main.c view.c chrome.c favorite.c history.c prefs.c if BUILD_QUICKLAUNCH ############################################################################ @@ -36,5 +36,5 @@ eve_ql_CFLAGS = -DELM_LIB_QUICKLAUNCH=1 eve_ql_LDFLAGS = endif -noinst_HEADERS = gettext.h private.h favorite.h history.h -EXTRA_DIST = gettext.h private.h favorite.h history.h +noinst_HEADERS = gettext.h private.h favorite.h history.h prefs.h +EXTRA_DIST = gettext.h private.h favorite.h history.h prefs.h diff --git a/src/bin/chrome.c b/src/bin/chrome.c index 3f9dbfc..c0f7c97 100644 --- a/src/bin/chrome.c +++ b/src/bin/chrome.c @@ -7,23 +7,27 @@ #include #include "favorite.h" +#include "prefs.h" #include "private.h" #define BOOKMARK_MENU_PREALLOC_SIZE 32 -typedef struct _Bookmark_Menu_Item Bookmark_Menu_Item; -typedef struct _Bookmark_Menu_Filter_Context Bookmark_Menu_Filter_Context; -typedef Bookmark_Menu_Item *(* Bookmark_Menu_Callback)(Bookmark_Menu_Item *current_item); +typedef struct _More_Menu_Item More_Menu_Item; +typedef struct _More_Menu_Filter_Context More_Menu_Filter_Context; +typedef struct _More_Menu_Preference More_Menu_Preference; +typedef struct _More_Menu_Preference_List More_Menu_Preference_List; -static Bookmark_Menu_Item * bookmark_menu_favorites(Bookmark_Menu_Item *); -static Bookmark_Menu_Item * bookmark_menu_history_today(Bookmark_Menu_Item *); -static Bookmark_Menu_Item * bookmark_menu_history_yesterday(Bookmark_Menu_Item *); -static Bookmark_Menu_Item * bookmark_menu_history_this_week(Bookmark_Menu_Item *); -static Bookmark_Menu_Item * bookmark_menu_history_most_visited(Bookmark_Menu_Item *); -static Bookmark_Menu_Item * bookmark_menu_history_least_visited(Bookmark_Menu_Item *); -static Bookmark_Menu_Item * bookmark_menu_history_by_domain(Bookmark_Menu_Item *); +typedef More_Menu_Item *(*More_Menu_Callback)(More_Menu_Item *current_item); -static Elm_Gengrid_Item_Class gic_default, gic_new_page; +static More_Menu_Item *more_menu_favorites(More_Menu_Item *); +static More_Menu_Item *more_menu_history_today(More_Menu_Item *); +static More_Menu_Item *more_menu_history_yesterday(More_Menu_Item *); +static More_Menu_Item *more_menu_history_this_week(More_Menu_Item *); +static More_Menu_Item *more_menu_history_most_visited(More_Menu_Item *); +static More_Menu_Item *more_menu_history_least_visited(More_Menu_Item *); +static More_Menu_Item *more_menu_history_by_domain(More_Menu_Item *); +static void on_more_item_click(void *data, Evas_Object *obj, void *event_info __UNUSED__); +static void on_more_item_back_click(void *data, Evas_Object *edje, const char *emission __UNUSED__, const char *source __UNUSED__); typedef enum { ITEM_TYPE_LAST, @@ -31,51 +35,167 @@ typedef enum { ITEM_TYPE_DYNAMIC_FOLDER, ITEM_TYPE_PAGE, ITEM_TYPE_CALLBACK, + ITEM_TYPE_CALLBACK_NO_HIDE, ITEM_TYPE_SEPARATOR, -} Bookmark_Menu_Item_Type; + ITEM_TYPE_PREFERENCE +} More_Menu_Item_Type; -struct _Bookmark_Menu_Item +typedef enum { + ITEM_FLAG_NONE = 0, + ITEM_FLAG_DYNAMIC = 1<<0, + ITEM_FLAG_SELECTED = 1<<1, + ITEM_FLAG_ARROW = 1<<2, +} More_Menu_Item_Flags; + +typedef enum { + PREF_TYPE_CHECKBOX, + PREF_TYPE_LIST, + PREF_TYPE_STRING +} More_Menu_Preference_Type; + +typedef enum { + EVE_PREF_ENABLE_JAVASCRIPT, + EVE_PREF_ENABLE_PLUGINS, + EVE_PREF_HOME_PAGE, + EVE_PREF_PROXY, + EVE_PREF_USER_AGENT, + EVE_PREF_TOUCH_INTERFACE, + EVE_PREF_MOUSE_CURSOR, + EVE_PREF_ENABLE_PRIVATE_MODE, + EVE_PREF_LAST +} Eve_Preference; + +struct _More_Menu_Item { - Bookmark_Menu_Item_Type type; - const char *text; - void *next; - Eina_Bool dynamic : 1; + More_Menu_Item_Type type; + const char *text; + void *next; + void *data; + More_Menu_Item_Flags flags; }; -struct _Bookmark_Menu_Filter_Context +struct _More_Menu_Filter_Context { - Bookmark_Menu_Item *current_bookmark_item; - double time; + More_Menu_Item *current_item; + double time; }; -static Bookmark_Menu_Item bookmark_menu_history[] = -{ - { ITEM_TYPE_DYNAMIC_FOLDER, "Today", bookmark_menu_history_today, EINA_FALSE }, - { ITEM_TYPE_DYNAMIC_FOLDER, "Yesterday", bookmark_menu_history_yesterday, EINA_FALSE }, - { ITEM_TYPE_DYNAMIC_FOLDER, "This week", bookmark_menu_history_this_week, EINA_FALSE }, - { ITEM_TYPE_SEPARATOR, NULL, NULL, EINA_FALSE }, - { ITEM_TYPE_DYNAMIC_FOLDER, "Most visited", bookmark_menu_history_most_visited, EINA_FALSE }, - { ITEM_TYPE_DYNAMIC_FOLDER, "Least visited", bookmark_menu_history_least_visited, EINA_FALSE }, - { ITEM_TYPE_SEPARATOR, NULL, NULL, EINA_FALSE }, - { ITEM_TYPE_DYNAMIC_FOLDER, "By domain", bookmark_menu_history_by_domain, EINA_FALSE }, - { ITEM_TYPE_LAST, NULL, NULL, EINA_FALSE } +struct _More_Menu_Preference { + More_Menu_Preference_Type type; + Eve_Preference pref; + void *pref_get; + void *pref_set; + void *data; }; -static Bookmark_Menu_Item bookmark_menu_root[] = +struct _More_Menu_Preference_List { + const char *title; + const char *value; +}; + +static More_Menu_Item more_menu_history[] = { - { ITEM_TYPE_STATIC_FOLDER, "History", bookmark_menu_history, EINA_FALSE }, - { ITEM_TYPE_DYNAMIC_FOLDER, "Favorites", bookmark_menu_favorites, EINA_FALSE }, - { ITEM_TYPE_SEPARATOR, NULL, NULL, EINA_FALSE }, - { ITEM_TYPE_PAGE, "ProFUSION", "http://profusion.mobi", EINA_FALSE }, - { ITEM_TYPE_PAGE, "WebKit", "http://webkit.org", EINA_FALSE }, - { ITEM_TYPE_PAGE, "Enlightenment", "http://enlightenment.org", EINA_FALSE }, + { ITEM_TYPE_DYNAMIC_FOLDER, "Today", more_menu_history_today, NULL, ITEM_FLAG_ARROW }, + { ITEM_TYPE_DYNAMIC_FOLDER, "Yesterday", more_menu_history_yesterday, NULL, ITEM_FLAG_ARROW }, + { ITEM_TYPE_DYNAMIC_FOLDER, "This week", more_menu_history_this_week, NULL, ITEM_FLAG_ARROW }, + { ITEM_TYPE_SEPARATOR, NULL, NULL, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_DYNAMIC_FOLDER, "Most visited", more_menu_history_most_visited, NULL, ITEM_FLAG_ARROW }, + { ITEM_TYPE_DYNAMIC_FOLDER, "Least visited", more_menu_history_least_visited, NULL, ITEM_FLAG_ARROW }, + { ITEM_TYPE_SEPARATOR, NULL, NULL, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_DYNAMIC_FOLDER, "By domain", more_menu_history_by_domain, NULL, ITEM_FLAG_ARROW }, + { ITEM_TYPE_LAST, NULL, NULL, NULL, ITEM_FLAG_NONE } +}; + +static More_Menu_Item more_menu_preferences[] = +{ + { ITEM_TYPE_PREFERENCE, "Enable JavaScript", + (More_Menu_Preference[]) {{ + .type = PREF_TYPE_CHECKBOX, + .pref = EVE_PREF_ENABLE_JAVASCRIPT, + .pref_get = prefs_enable_javascript_get, + .pref_set = prefs_enable_javascript_set, + }}, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_PREFERENCE, "Enable plugins", + (More_Menu_Preference[]) {{ + .type = PREF_TYPE_CHECKBOX, + .pref = EVE_PREF_ENABLE_PLUGINS, + .pref_get = prefs_enable_plugins_get, + .pref_set = prefs_enable_plugins_set, + }}, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_PREFERENCE, "Private mode", + (More_Menu_Preference[]) {{ + .type = PREF_TYPE_CHECKBOX, + .pref = EVE_PREF_ENABLE_PRIVATE_MODE, + .pref_get = prefs_enable_private_mode_get, + .pref_set = prefs_enable_private_mode_set, + }}, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_SEPARATOR, NULL, NULL, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_STATIC_FOLDER, "Privacy", + (More_Menu_Item[]) { + { ITEM_TYPE_CALLBACK, "Clear everything", NULL, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_SEPARATOR, NULL, NULL, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_CALLBACK, "Clear cache", NULL, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_CALLBACK, "Clear history", NULL, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_CALLBACK, "Clear database", NULL, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_LAST, NULL, NULL, NULL, ITEM_FLAG_NONE }, + }, NULL, ITEM_FLAG_ARROW }, + { ITEM_TYPE_SEPARATOR, NULL, NULL, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_STATIC_FOLDER, "Tweaks", + (More_Menu_Item[]) { + { ITEM_TYPE_PREFERENCE, "Enable mouse cursor", + (More_Menu_Preference[]) {{ + .type = PREF_TYPE_CHECKBOX, + .pref = EVE_PREF_MOUSE_CURSOR, + .pref_get = prefs_enable_mouse_cursor_get, + .pref_set = prefs_enable_mouse_cursor_set + }}, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_PREFERENCE, "Enable touch interface", + (More_Menu_Preference[]) {{ + .type = PREF_TYPE_CHECKBOX, + .pref = EVE_PREF_TOUCH_INTERFACE, + .pref_get = prefs_enable_touch_interface_get, + .pref_set = prefs_enable_touch_interface_set + }}, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_PREFERENCE, "User agent", + (More_Menu_Preference[]) {{ + .type = PREF_TYPE_LIST, + .pref = EVE_PREF_USER_AGENT, + .pref_get = prefs_user_agent_get, + .pref_set = prefs_user_agent_set, + .data = (More_Menu_Preference_List[]) { + { "Eve", "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3 " PACKAGE_NAME "/" PACKAGE_VERSION }, + { "iPhone", "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3" }, + { "Safari", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-US) AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8" }, + { "Chrome", "Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7" }, + { "Firefox", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.2) Gecko/20121223 Firefox/3.8" }, + { "Internet Explorer", "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)" }, + { NULL, NULL } + } + }}, NULL, ITEM_FLAG_ARROW }, + { ITEM_TYPE_LAST, NULL, NULL, NULL, ITEM_FLAG_NONE }, + }, NULL, ITEM_FLAG_ARROW }, + { ITEM_TYPE_SEPARATOR, NULL, NULL, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_LAST, NULL, NULL, NULL, ITEM_FLAG_NONE } +}; + +static More_Menu_Item more_menu_root[] = +{ + { ITEM_TYPE_STATIC_FOLDER, "History", more_menu_history, NULL, ITEM_FLAG_ARROW }, + { ITEM_TYPE_DYNAMIC_FOLDER, "Favorites", more_menu_favorites, NULL, ITEM_FLAG_ARROW }, + { ITEM_TYPE_STATIC_FOLDER, "Preferences", more_menu_preferences, NULL, ITEM_FLAG_ARROW }, + { ITEM_TYPE_SEPARATOR, NULL, NULL, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_PAGE, "ProFUSION", "http://profusion.mobi", NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_PAGE, "WebKit", "http://webkit.org", NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_PAGE, "Enlightenment", "http://enlightenment.org", NULL, ITEM_FLAG_NONE }, #ifdef STORM_TROOPER - { ITEM_TYPE_SEPARATOR, NULL, NULL, EINA_FALSE }, - { ITEM_TYPE_PAGE, "", "http://i.imgur.com/cJO3j.gif", EINA_FALSE }, + { ITEM_TYPE_SEPARATOR, NULL, NULL, NULL, ITEM_FLAG_NONE }, + { ITEM_TYPE_PAGE, "", "http://i.imgur.com/cJO3j.gif", NULL, ITEM_FLAG_NONE }, #endif - { ITEM_TYPE_LAST, NULL, NULL, EINA_FALSE } + { ITEM_TYPE_LAST, NULL, NULL, NULL, ITEM_FLAG_NONE } }; +static Elm_Gengrid_Item_Class gic_default, gic_new_page; + static Eina_List * _eina_hash_sorted_keys_get(Eina_Hash *hash, Eina_Compare_Cb compare_func) { @@ -84,10 +204,10 @@ _eina_hash_sorted_keys_get(Eina_Hash *hash, Eina_Compare_Cb compare_func) Eina_Hash_Tuple *keyval; EINA_ITERATOR_FOREACH(iter, keyval) - keyvals = eina_list_prepend(keyvals, keyval); + keyvals = eina_list_prepend(keyvals, keyval); keyvals = eina_list_sort(keyvals, 0, compare_func); EINA_LIST_FOREACH(keyvals, keyvals_iter, keyval) - keys = eina_list_append(keys, keyval->key); + keys = eina_list_append(keys, keyval->key); eina_list_free(keyvals); eina_iterator_free(iter); @@ -95,17 +215,17 @@ _eina_hash_sorted_keys_get(Eina_Hash *hash, Eina_Compare_Cb compare_func) return keys; } -static Bookmark_Menu_Item * -_bookmark_menu_history(Eina_Iterator *items, Bookmark_Menu_Item *current_item, Eina_Bool (*filter)(Bookmark_Menu_Filter_Context *ctx, Hist_Item *item)) +static More_Menu_Item * +_more_menu_history(Eina_Iterator *items, More_Menu_Item *current_item, Eina_Bool (*filter)(More_Menu_Filter_Context *ctx, Hist_Item *item)) { - Bookmark_Menu_Item *bm_item; - Bookmark_Menu_Item *ret = NULL, *new_ret; - Bookmark_Menu_Filter_Context ctx; + More_Menu_Item *bm_item; + More_Menu_Item *ret = NULL, *new_ret; + More_Menu_Filter_Context ctx; int n_items = 0; const char *url; ctx.time = ecore_time_get(); - ctx.current_bookmark_item = current_item; + ctx.current_item = current_item; EINA_ITERATOR_FOREACH(items, url) { @@ -114,11 +234,11 @@ _bookmark_menu_history(Eina_Iterator *items, Bookmark_Menu_Item *current_item, E if (!filter(&ctx, item)) continue; - bm_item = calloc(1, sizeof(Bookmark_Menu_Item)); + bm_item = calloc(1, sizeof(More_Menu_Item)); bm_item->type = ITEM_TYPE_PAGE; bm_item->text = eina_stringshare_add(hist_item_title_get(item)); bm_item->next = (char *)hist_item_url_get(item); - bm_item->dynamic = 1; + bm_item->flags = ITEM_FLAG_DYNAMIC; if (!ret) ret = calloc(1, sizeof(*ret) * BOOKMARK_MENU_PREALLOC_SIZE); @@ -142,7 +262,7 @@ realloc_error: if (!n_items) return NULL; - bm_item = calloc(1, sizeof(Bookmark_Menu_Item)); + bm_item = calloc(1, sizeof(More_Menu_Item)); bm_item->type = ITEM_TYPE_LAST; new_ret = realloc(ret, (1 + n_items) * sizeof(*ret)); if (!new_ret) @@ -160,10 +280,10 @@ realloc_error: } static Eina_Bool -_domain_filter(Bookmark_Menu_Filter_Context *ctx, Hist_Item *item) +_domain_filter(More_Menu_Filter_Context *ctx, Hist_Item *item) { char *domain = strstr(hist_item_url_get(item), "://"); - const char *filtered_domain = ctx->current_bookmark_item->text; + const char *filtered_domain = ctx->current_item->text; if (domain) { domain += 3; @@ -173,23 +293,23 @@ _domain_filter(Bookmark_Menu_Filter_Context *ctx, Hist_Item *item) return EINA_FALSE; } -static Bookmark_Menu_Item * -_bookmark_menu_history_by_domain(Bookmark_Menu_Item *current_item) +static More_Menu_Item * +_more_menu_history_by_domain(More_Menu_Item *current_item) { - Bookmark_Menu_Item *ret; + More_Menu_Item *ret; Eina_Iterator *items = eina_hash_iterator_key_new(hist_items_hash_get(hist)); - ret = _bookmark_menu_history(items, current_item, _domain_filter); + ret = _more_menu_history(items, current_item, _domain_filter); eina_iterator_free(items); return ret; } -static Bookmark_Menu_Item * -bookmark_menu_history_by_domain(Bookmark_Menu_Item *current_item) +static More_Menu_Item * +more_menu_history_by_domain(More_Menu_Item *current_item) { - Bookmark_Menu_Item *bm_item; - Bookmark_Menu_Item *ret = NULL, *new_ret; + More_Menu_Item *bm_item; + More_Menu_Item *ret = NULL, *new_ret; Eina_Iterator *items = eina_hash_iterator_key_new(hist_items_hash_get(hist)); Eina_Hash *domains = eina_hash_string_superfast_new(NULL); const char *url; @@ -221,11 +341,11 @@ unknown_schema: items = eina_hash_iterator_key_new(domains); EINA_ITERATOR_FOREACH(items, url) { - bm_item = calloc(1, sizeof(Bookmark_Menu_Item)); + bm_item = calloc(1, sizeof(More_Menu_Item)); bm_item->type = ITEM_TYPE_DYNAMIC_FOLDER; bm_item->text = eina_stringshare_add(url); - bm_item->next = _bookmark_menu_history_by_domain; - bm_item->dynamic = 1; + bm_item->next = _more_menu_history_by_domain; + bm_item->flags = ITEM_FLAG_ARROW | ITEM_FLAG_DYNAMIC; if (!n_items) ret = calloc(1, sizeof(*ret) * BOOKMARK_MENU_PREALLOC_SIZE); @@ -250,7 +370,7 @@ realloc_error: if (!n_items) return NULL; - bm_item = calloc(1, sizeof(Bookmark_Menu_Item)); + bm_item = calloc(1, sizeof(More_Menu_Item)); bm_item->type = ITEM_TYPE_LAST; new_ret = realloc(ret, (1 + n_items) * sizeof(*ret)); if (!new_ret) @@ -268,7 +388,7 @@ realloc_error: } static Eina_Bool -_this_week_filter(Bookmark_Menu_Filter_Context *ctx, Hist_Item *item) +_this_week_filter(More_Menu_Filter_Context *ctx, Hist_Item *item) { double item_time = hist_item_last_visit_get(item); double now = ctx->time; @@ -276,7 +396,7 @@ _this_week_filter(Bookmark_Menu_Filter_Context *ctx, Hist_Item *item) } static Eina_Bool -_today_filter(Bookmark_Menu_Filter_Context *ctx, Hist_Item *item) +_today_filter(More_Menu_Filter_Context *ctx, Hist_Item *item) { double item_time = hist_item_last_visit_get(item); double now = ctx->time; @@ -284,36 +404,36 @@ _today_filter(Bookmark_Menu_Filter_Context *ctx, Hist_Item *item) } static Eina_Bool -_yesterday_filter(Bookmark_Menu_Filter_Context *ctx, Hist_Item *item) +_yesterday_filter(More_Menu_Filter_Context *ctx, Hist_Item *item) { double item_time = hist_item_last_visit_get(item); double now = ctx->time; return (now - item_time) > 24 * 3600 && (now - item_time) <= 48 * 3600; } -static Bookmark_Menu_Item * -bookmark_menu_history_today(Bookmark_Menu_Item *current_item) +static More_Menu_Item * +more_menu_history_today(More_Menu_Item *current_item) { Eina_Iterator *iter = eina_hash_iterator_key_new(hist_items_hash_get(hist)); - Bookmark_Menu_Item *items = _bookmark_menu_history(iter, current_item, _today_filter); + More_Menu_Item *items = _more_menu_history(iter, current_item, _today_filter); eina_iterator_free(iter); return items; } -static Bookmark_Menu_Item * -bookmark_menu_history_yesterday(Bookmark_Menu_Item *current_item) +static More_Menu_Item * +more_menu_history_yesterday(More_Menu_Item *current_item) { Eina_Iterator *iter = eina_hash_iterator_key_new(hist_items_hash_get(hist)); - Bookmark_Menu_Item *items = _bookmark_menu_history(iter, current_item, _yesterday_filter); + More_Menu_Item *items = _more_menu_history(iter, current_item, _yesterday_filter); eina_iterator_free(iter); return items; } -static Bookmark_Menu_Item * -bookmark_menu_history_this_week(Bookmark_Menu_Item *current_item) +static More_Menu_Item * +more_menu_history_this_week(More_Menu_Item *current_item) { Eina_Iterator *iter = eina_hash_iterator_key_new(hist_items_hash_get(hist)); - Bookmark_Menu_Item *items = _bookmark_menu_history(iter, current_item, _this_week_filter); + More_Menu_Item *items = _more_menu_history(iter, current_item, _this_week_filter); eina_iterator_free(iter); return items; } @@ -336,33 +456,33 @@ _cb_compare_hist_visit_count_incr(const void *data1, const void *data2) return hist_item_visit_count_get(f1) - hist_item_visit_count_get(f2); } -static Bookmark_Menu_Item * -bookmark_menu_history_least_visited(Bookmark_Menu_Item *current_item) +static More_Menu_Item * +more_menu_history_least_visited(More_Menu_Item *current_item) { Eina_List *keys = _eina_hash_sorted_keys_get(hist_items_hash_get(hist), _cb_compare_hist_visit_count_incr); Eina_Iterator *iter = eina_list_iterator_new(keys); - Bookmark_Menu_Item *items = _bookmark_menu_history(iter, current_item, _this_week_filter); + More_Menu_Item *items = _more_menu_history(iter, current_item, _this_week_filter); eina_list_free(keys); eina_iterator_free(iter); return items; } -static Bookmark_Menu_Item * -bookmark_menu_history_most_visited(Bookmark_Menu_Item *current_item) +static More_Menu_Item * +more_menu_history_most_visited(More_Menu_Item *current_item) { Eina_List *keys = _eina_hash_sorted_keys_get(hist_items_hash_get(hist), _cb_compare_hist_visit_count_decr); Eina_Iterator *iter = eina_list_iterator_new(keys); - Bookmark_Menu_Item *items = _bookmark_menu_history(iter, current_item, _this_week_filter); + More_Menu_Item *items = _more_menu_history(iter, current_item, _this_week_filter); eina_list_free(keys); eina_iterator_free(iter); return items; } -static Bookmark_Menu_Item * -bookmark_menu_favorites(Bookmark_Menu_Item *current_item) +static More_Menu_Item * +more_menu_favorites(More_Menu_Item *current_item) { - Bookmark_Menu_Item *bm_item; - Bookmark_Menu_Item *ret = NULL, *new_ret; + More_Menu_Item *bm_item; + More_Menu_Item *ret = NULL, *new_ret; Eina_Iterator *iter = eina_hash_iterator_key_new(fav_items_hash_get(fav)); int n_items = 0; const char *url; @@ -371,11 +491,11 @@ bookmark_menu_favorites(Bookmark_Menu_Item *current_item) { Fav_Item *item = fav_items_get(fav, url); - bm_item = calloc(1, sizeof(Bookmark_Menu_Item)); + bm_item = calloc(1, sizeof(More_Menu_Item)); bm_item->type = ITEM_TYPE_PAGE; bm_item->text = eina_stringshare_add(fav_item_title_get(item)); bm_item->next = (char *)fav_item_url_get(item); - bm_item->dynamic = 1; + bm_item->flags = ITEM_FLAG_DYNAMIC; if (!n_items) ret = calloc(1, sizeof(*ret) * BOOKMARK_MENU_PREALLOC_SIZE); @@ -402,7 +522,7 @@ realloc_error: return NULL; } - bm_item = calloc(1, sizeof(Bookmark_Menu_Item)); + bm_item = calloc(1, sizeof(More_Menu_Item)); bm_item->type = ITEM_TYPE_LAST; new_ret = realloc(ret, (1 + n_items) * sizeof(*ret)); if (!new_ret) @@ -772,14 +892,67 @@ on_action_forward(void *data, Evas_Object *o __UNUSED__, ewk_view_forward(view); } -static void on_bookmark_item_click(void *data, Evas_Object *obj, void *event_info __UNUSED__); -static void on_bookmark_item_back_click(void *data, Evas_Object *edje, const char *emission __UNUSED__, const char *source __UNUSED__); +static void +pref_updated(More_Menu_Preference *p, void *new_value) +{ + Evas_Object *chrome, *view; + Browser_Window *win; + Eina_List *win_iter, *chrome_iter; + +#define SET_PREF_TO_ALL_VIEWS(fn,newvalue) \ + EINA_LIST_FOREACH(app.windows, win_iter, win) \ + { \ + EINA_LIST_FOREACH(win->chromes, chrome_iter, chrome) \ + { \ + view = evas_object_data_get(chrome, "view"); \ + fn(view, newvalue); \ + } \ + } + + switch (p->pref) { + case EVE_PREF_ENABLE_JAVASCRIPT: + { + SET_PREF_TO_ALL_VIEWS(ewk_view_setting_enable_scripts_set, *((int *)new_value)); + break; + } + case EVE_PREF_ENABLE_PLUGINS: + { + SET_PREF_TO_ALL_VIEWS(ewk_view_setting_enable_plugins_set, *((int *)new_value)); + break; + } + case EVE_PREF_USER_AGENT: + { + SET_PREF_TO_ALL_VIEWS(ewk_view_setting_user_agent_set, new_value); + break; + } + case EVE_PREF_ENABLE_PRIVATE_MODE: + { + SET_PREF_TO_ALL_VIEWS(ewk_view_setting_private_browsing_set, *((int *)new_value)); + break; + } + } + +#undef SET_PREF_TO_ALL_VIEWS +} static void -bookmark_menu_set(Evas_Object *chrome, - Evas_Object *list, - Bookmark_Menu_Item *root, - const char *old_text) +cb_pref_bool_changed(void *data, Evas_Object *obj, void *event_info __UNUSED__) +{ + More_Menu_Preference *pref = data; + void (*pref_set)(Prefs *, Eina_Bool); + + if ((pref_set = pref->pref_set)) + { + pref_set(prefs, elm_toggle_state_get(obj)); + pref_updated(pref, (int[]){ elm_toggle_state_get(obj) }); + } +} + +static void +more_menu_set(Evas_Object *chrome, + Evas_Object *list, + More_Menu_Item *root, + const char *old_text) { Browser_Window *win = evas_object_data_get(chrome, "win"); Evas_Object *ed = elm_layout_edje_get(chrome); @@ -787,7 +960,7 @@ bookmark_menu_set(Evas_Object *chrome, if (!eina_list_data_find(win->list_history, root)) { - if (root == bookmark_menu_root || !root) + if (root == more_menu_root || !root) win->list_history = eina_list_prepend(win->list_history, NULL); else win->list_history = eina_list_prepend(win->list_history, root); @@ -795,48 +968,82 @@ bookmark_menu_set(Evas_Object *chrome, elm_list_clear(list); - if (!root || root == bookmark_menu_root) + if (!root || root == more_menu_root) { - root = bookmark_menu_root; - edje_object_part_text_set(ed, "bookmark-list-title", "Bookmarks"); + root = more_menu_root; + edje_object_part_text_set(ed, "more-list-title", "More"); edje_object_signal_emit(ed, "list,back,hide", ""); } else { - edje_object_part_text_set(ed, "bookmark-list-back-button-text", eina_stringshare_add(old_text ? old_text : "Bookmarks")); - edje_object_signal_callback_del(ed, "list,back,clicked", "", on_bookmark_item_back_click); - edje_object_signal_callback_add(ed, "list,back,clicked", "", on_bookmark_item_back_click, list); + edje_object_part_text_set(ed, "more-list-back-button-text", eina_stringshare_add(old_text ? old_text : "More")); + edje_object_signal_callback_del(ed, "list,back,clicked", "", on_more_item_back_click); + edje_object_signal_callback_add(ed, "list,back,clicked", "", on_more_item_back_click, list); edje_object_signal_emit(ed, "list,back,show", ""); } - for (i = 0; root[i].type != ITEM_TYPE_LAST; i++) { - if (root[i].type == ITEM_TYPE_SEPARATOR) - { - Elm_List_Item *item = elm_list_item_append(list, NULL, NULL, NULL, NULL, NULL); - elm_list_item_separator_set(item, EINA_TRUE); - } - else - elm_list_item_append(list, root[i].text, NULL, NULL, on_bookmark_item_click, &root[i]); + for (i = 0; root[i].type != ITEM_TYPE_LAST; i++) + { + Evas_Object *icon = NULL, *end = NULL; + switch (root[i].type) { + case ITEM_TYPE_SEPARATOR: + { + Elm_List_Item *item = elm_list_item_append(list, NULL, NULL, NULL, NULL, NULL); + elm_list_item_separator_set(item, EINA_TRUE); + break; + } + case ITEM_TYPE_PREFERENCE: + { + More_Menu_Preference *pref = root[i].next; + + if (!pref->pref_get) break; + if (pref->type == PREF_TYPE_CHECKBOX) + { + Eina_Bool (*pref_get)(Prefs *); + Evas_Object *toggle = elm_toggle_add(list); + + pref_get = pref->pref_get; + elm_toggle_state_set(toggle, pref_get(prefs)); + evas_object_smart_callback_add(toggle, "changed", cb_pref_bool_changed, pref); + + end = toggle; + } + } + /* fallthrough */ + default: + if (!icon && root[i].flags & ITEM_FLAG_SELECTED) + { + icon = elm_icon_add(list); + elm_icon_file_set(icon, PACKAGE_DATA_DIR "/default.edj", "list-selected"); + } + if (!end && root[i].flags & ITEM_FLAG_ARROW) + { + end = elm_icon_add(list); + elm_icon_file_set(end, PACKAGE_DATA_DIR "/default.edj", "list-arrow"); + } + + elm_list_item_append(list, root[i].text, icon, end, on_more_item_click, &root[i]); + } } elm_list_go(list); } static void -on_bookmark_item_back_click(void *data, Evas_Object *edje, - const char *emission __UNUSED__, - const char *source __UNUSED__) +on_more_item_back_click(void *data, Evas_Object *edje, + const char *emission __UNUSED__, + const char *source __UNUSED__) { - Bookmark_Menu_Item *bmi; + More_Menu_Item *bmi; Browser_Window *win = evas_object_data_get(edje, "win"); Evas_Object *list = data; edje_object_signal_emit(edje, "list,animate,right", ""); - edje_object_part_text_set(edje, "bookmark-list-title", edje_object_part_text_get(edje, "bookmark-list-back-button-text")); - eina_stringshare_del(edje_object_part_text_get(edje, "bookmark-list-back-button-text")); + edje_object_part_text_set(edje, "more-list-title", edje_object_part_text_get(edje, "more-list-back-button-text")); + eina_stringshare_del(edje_object_part_text_get(edje, "more-list-back-button-text")); - if ((bmi = win->list_history->data) && bmi->dynamic) + if ((bmi = win->list_history->data) && bmi->flags & ITEM_FLAG_DYNAMIC) { eina_stringshare_del(bmi->text); free(bmi); @@ -846,20 +1053,98 @@ on_bookmark_item_back_click(void *data, Evas_Object *edje, win->list_history_titles = eina_list_remove_list(win->list_history_titles, win->list_history_titles); if (!win->list_history_titles) - bookmark_menu_set(win->current_chrome, list, win->list_history->data, "Bookmarks"); + more_menu_set(win->current_chrome, list, win->list_history->data, "More"); else - bookmark_menu_set(win->current_chrome, list, win->list_history->data, win->list_history_titles->data); + more_menu_set(win->current_chrome, list, win->list_history->data, win->list_history_titles->data); +} + +void +chrome_prefs_apply(Evas_Object *chrome) +{ + Evas_Object *view = evas_object_data_get(chrome, "view"); + + ewk_view_setting_enable_scripts_set(view, prefs_enable_javascript_get(prefs)); + ewk_view_setting_enable_plugins_set(view, prefs_enable_plugins_get(prefs)); + ewk_view_setting_user_agent_set(view, prefs_user_agent_get(prefs)); + ewk_view_setting_private_browsing_set(view, prefs_enable_private_mode_get(prefs)); } static void -on_bookmark_item_click(void *data, Evas_Object *obj, +callback_menu_prefs_list_set(More_Menu_Item *i) +{ + More_Menu_Preference *p = i->data; + More_Menu_Preference_List *l = p->data; + void (*pref_set)(Prefs *, const char *); + const char *title = NULL; + int item; + + for (item = 0; l[item].title; item++) + { + if (!strcmp(l[item].title, i->text)) + { + if (p->pref_set) + { + pref_set = p->pref_set; + pref_set(prefs, l[item].value); + pref_updated(p, (void *)l[item].value); + } + break; + } + } +} + +static More_Menu_Item * +more_menu_prefs_list_create(More_Menu_Item *i, More_Menu_Preference *p) +{ + More_Menu_Preference_List *list = p->data; + More_Menu_Item *bmi; + const char *(*pref_get)(void *); + const char *preference = NULL; + int item, n_items; + + if (!list) return NULL; + for (n_items = 0; list[n_items].title; n_items++); + if (!(bmi = calloc(n_items, sizeof(*bmi)))) return NULL; + + if (p->pref_get) + { + pref_get = p->pref_get; + preference = pref_get(prefs); + } + + for (item = 0; item < n_items; item++) { + bmi[item].text = eina_stringshare_add(list[item].title); + bmi[item].next = callback_menu_prefs_list_set; + bmi[item].type = ITEM_TYPE_CALLBACK_NO_HIDE; + bmi[item].data = p; + bmi[item].flags = (preference && !strcmp(list[item].value, preference)) ? ITEM_FLAG_SELECTED : ITEM_FLAG_NONE; + bmi[item].flags |= ITEM_FLAG_DYNAMIC; + } + + bmi[item].type = ITEM_TYPE_LAST; + + return bmi; +} + +static More_Menu_Item * +more_menu_prefs_create(More_Menu_Item *i, More_Menu_Preference *p) +{ + switch (p->type) { + case PREF_TYPE_LIST: return more_menu_prefs_list_create(i, p); + } + + return NULL; +} + +static void +on_more_item_click(void *data, Evas_Object *obj, void *event_info __UNUSED__) { Evas_Object *chrome = evas_object_data_get(obj, "chrome"); Evas_Object *ed = elm_layout_edje_get(chrome); - Bookmark_Menu_Item *bmi = data; + More_Menu_Item *bmi = data; Browser_Window *win = evas_object_data_get(chrome, "win"); - const char *old_text = edje_object_part_text_get(ed, "bookmark-list-title"); + const char *old_text = edje_object_part_text_get(ed, "more-list-title"); if (!bmi) return; @@ -868,39 +1153,57 @@ on_bookmark_item_click(void *data, Evas_Object *obj, case ITEM_TYPE_STATIC_FOLDER: win->list_history_titles = eina_list_prepend(win->list_history_titles, old_text); edje_object_signal_emit(ed, "list,animate,left", ""); - edje_object_part_text_set(ed, "bookmark-list-title", bmi->text); - bookmark_menu_set(chrome, obj, bmi->next, old_text); + edje_object_part_text_set(ed, "more-list-title", bmi->text); + more_menu_set(chrome, obj, bmi->next, old_text); break; case ITEM_TYPE_DYNAMIC_FOLDER: { - Bookmark_Menu_Callback callback = bmi->next; + More_Menu_Callback callback = bmi->next; if (!callback) return; - Bookmark_Menu_Item *new_root = callback(bmi); + More_Menu_Item *new_root = callback(bmi); if (new_root) { win->list_history_titles = eina_list_prepend(win->list_history_titles, old_text); - edje_object_part_text_set(ed, "bookmark-list-title", bmi->text); + edje_object_part_text_set(ed, "more-list-title", bmi->text); edje_object_signal_emit(ed, "list,animate,left", ""); - bookmark_menu_set(chrome, obj, new_root, old_text); + more_menu_set(chrome, obj, new_root, old_text); } } break; - + + case ITEM_TYPE_PREFERENCE: + { + if (!bmi->next) + return; + + More_Menu_Item *new_root = more_menu_prefs_create(bmi, bmi->next); + if (new_root) + { + win->list_history_titles = eina_list_prepend(win->list_history_titles, old_text); + edje_object_signal_emit(ed, "list,animate,left", ""); + edje_object_part_text_set(ed, "more-list-title", bmi->text); + more_menu_set(chrome, obj, new_root, old_text); + } + } + case ITEM_TYPE_LAST: case ITEM_TYPE_SEPARATOR: - break; + break; case ITEM_TYPE_CALLBACK: + edje_object_signal_emit(ed, "more,item,clicked", ""); + /* fallthrough */ + case ITEM_TYPE_CALLBACK_NO_HIDE: { - Bookmark_Menu_Callback callback = bmi->next; + More_Menu_Callback callback = bmi->next; Evas_Object *ed = elm_layout_edje_get(chrome); if (callback) callback(bmi); - - edje_object_signal_emit(ed, "bookmark,item,clicked", ""); + if (bmi->type == ITEM_TYPE_CALLBACK_NO_HIDE) + on_more_item_back_click(obj, ed, NULL, NULL); } break; @@ -911,7 +1214,7 @@ on_bookmark_item_click(void *data, Evas_Object *obj, if (win) ewk_view_uri_set(win->current_view, bmi->next); - edje_object_signal_emit(ed, "bookmark,item,clicked", ""); + edje_object_signal_emit(ed, "more,item,clicked", ""); } break; } @@ -993,7 +1296,7 @@ tab_grid_new_tab_click(void *data, Evas_Object *obj, void *event_info) Evas_Object *ed = elm_layout_edje_get(chrome); edje_object_signal_emit(ed, "tab,item,clicked", ""); - tab_add(win, DEFAULT_URL); + tab_add(win, prefs_home_page_get(prefs)); } static void @@ -1026,37 +1329,37 @@ on_action_tab_hide(void *data, Evas_Object *o __UNUSED__, } static void -on_action_bookmark_hide(void *data, Evas_Object *o __UNUSED__, +on_action_more_hide(void *data, Evas_Object *o __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__) { Evas_Object *chrome = data; Evas_Object *edje = elm_layout_edje_get(chrome); - Bookmark_Menu_Item *bmi; + More_Menu_Item *bmi; Browser_Window *win = evas_object_data_get(chrome, "win"); EINA_LIST_FREE(win->list_history, bmi) - if (bmi && bmi->dynamic) + if (bmi && bmi->flags & ITEM_FLAG_DYNAMIC) { eina_stringshare_del(bmi->text); free(bmi); } - eina_stringshare_del(edje_object_part_text_get(edje, "bookmark-list-back-button-text")); + eina_stringshare_del(edje_object_part_text_get(edje, "more-list-back-button-text")); eina_list_free(win->list_history_titles); win->list_history = NULL; win->list_history_titles = NULL; } static void -on_action_bookmark_show(void *data, Evas_Object *o __UNUSED__, +on_action_more_show(void *data, Evas_Object *o __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__) { Evas_Object *chrome = data; - Evas_Object *hl = evas_object_data_get(chrome, "bookmark-list"); + Evas_Object *hl = evas_object_data_get(chrome, "more-list"); - bookmark_menu_set(chrome, hl, NULL, NULL); + more_menu_set(chrome, hl, NULL, NULL); } static void @@ -1083,7 +1386,7 @@ on_action_home(void *data, Evas_Object *o __UNUSED__, { Evas_Object *view = data; - ewk_view_uri_set(view, DEFAULT_URL); + ewk_view_uri_set(view, prefs_home_page_get(prefs)); } static void @@ -1313,14 +1616,14 @@ chrome_add(Browser_Window *win, const char *url) evas_object_smart_callback_add (text_url, "activated", on_action_load_page, view); - Evas_Object *bookmark_list = elm_list_add(ed); - elm_list_scroller_policy_set(bookmark_list, + Evas_Object *more_list = elm_list_add(ed); + elm_list_scroller_policy_set(more_list, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); - elm_object_style_set(bookmark_list, "ewebkit"); - evas_object_data_set(bookmark_list, "chrome", chrome); - evas_object_data_set(chrome, "bookmark-list", bookmark_list); - elm_layout_content_set(chrome, "bookmark-list-swallow", bookmark_list); + elm_object_style_set(more_list, "ewebkit"); + evas_object_data_set(more_list, "chrome", chrome); + evas_object_data_set(chrome, "more-list", more_list); + elm_layout_content_set(chrome, "more-list-swallow", more_list); Evas_Object *tab_grid = elm_gengrid_add(ed); elm_object_style_set(tab_grid, "ewebkit"); @@ -1358,10 +1661,10 @@ chrome_add(Browser_Window *win, const char *url) edje_object_signal_callback_add(ed, "view,mask,visible", "", on_view_mask_visible, win); edje_object_signal_callback_add(ed, "view,mask,hidden", "", on_view_mask_hidden, win); - edje_object_signal_callback_add(ed, "bookmark,show", "", - on_action_bookmark_show, chrome); - edje_object_signal_callback_add(ed, "bookmark,hide", "", - on_action_bookmark_hide, chrome); + edje_object_signal_callback_add(ed, "more,show", "", + on_action_more_show, chrome); + edje_object_signal_callback_add(ed, "more,hide", "", + on_action_more_hide, chrome); edje_object_signal_callback_add(ed, "tab,show", "", on_action_tab_show, chrome); edje_object_signal_callback_add(ed, "tab,hide", "", @@ -1391,6 +1694,7 @@ chrome_add(Browser_Window *win, const char *url) _chrome_state_apply(chrome, view); elm_pager_content_push(win->pager, chrome); + chrome_prefs_apply(chrome); return chrome; error_view_create: diff --git a/src/bin/main.c b/src/bin/main.c index c66356d..94b84b1 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -11,6 +11,7 @@ #include #ifndef ELM_LIB_QUICKLAUNCH +#include "prefs.h" #include "favorite.h" #include "private.h" @@ -22,6 +23,7 @@ int _log_domain = -1; Fav *fav = NULL; Hist *hist = NULL; +Prefs *prefs = NULL; App app; static void @@ -379,13 +381,7 @@ elm_main(int argc, char **argv) return 0; } - if (args < argc) - url = argv[args]; - else - url = DEFAULT_URL; - - - if (!user_agent) + if (!user_agent || (user_agent && strcasecmp(user_agent, "eve"))) user_agent = "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3 " PACKAGE_NAME "/" PACKAGE_VERSION; else { @@ -417,6 +413,7 @@ elm_main(int argc, char **argv) ewk_init(); favorite_init(); history_init(); + preferences_init(); home = getenv("HOME"); if (!home || !home[0]) @@ -456,6 +453,19 @@ elm_main(int argc, char **argv) hist = hist_new(0); hist_save(hist, path); } + + snprintf(path, sizeof(path), "%s/.config/ewebkit/prefs.db", home); + prefs = prefs_load(path); + if (!prefs) + { + prefs = prefs_new(EINA_FALSE, EINA_TRUE, EINA_FALSE, EINA_TRUE, "eve", DEFAULT_URL, NULL, EINA_FALSE); + prefs_save(prefs, path); + } + + if (args < argc) + url = argv[args]; + else + url = prefs_home_page_get(prefs); if (!add_win(&app, url)) { @@ -470,6 +480,9 @@ end: hist_save(hist, NULL); hist_free(hist); + + prefs_save(prefs, NULL); + prefs_free(prefs); eina_stringshare_del(app.user_agent); @@ -479,6 +492,7 @@ end: ewk_shutdown(); favorite_shutdown(); history_shutdown(); + preferences_shutdown(); return r; } diff --git a/src/bin/prefs.c b/src/bin/prefs.c new file mode 100644 index 0000000..8e6f6b7 --- /dev/null +++ b/src/bin/prefs.c @@ -0,0 +1,271 @@ +/* This file has been automatically generated by geneet.py */ +/* DO NOT MODIFY */ + +#include +#include +#include +#include +#include + +#include "prefs.h" + +struct _Prefs { + char enable_mouse_cursor; + char enable_touch_interface; + char enable_plugins; + char enable_javascript; + const char * user_agent; + const char * home_page; + const char * proxy; + char enable_private_mode; + const char *__eet_filename; +}; + +static const char PREFS_ENTRY[] = "prefs"; + +static Eet_Data_Descriptor *_prefs_descriptor = NULL; + +static inline void +_prefs_init(void) +{ + Eet_Data_Descriptor_Class eddc; + + if (_prefs_descriptor) return; + + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Prefs); + _prefs_descriptor = eet_data_descriptor_stream_new(&eddc); + + EET_DATA_DESCRIPTOR_ADD_BASIC(_prefs_descriptor, Prefs, "enable_mouse_cursor", enable_mouse_cursor, EET_T_CHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC(_prefs_descriptor, Prefs, "enable_touch_interface", enable_touch_interface, EET_T_CHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC(_prefs_descriptor, Prefs, "enable_plugins", enable_plugins, EET_T_CHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC(_prefs_descriptor, Prefs, "enable_javascript", enable_javascript, EET_T_CHAR); + EET_DATA_DESCRIPTOR_ADD_BASIC(_prefs_descriptor, Prefs, "user_agent", user_agent, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(_prefs_descriptor, Prefs, "home_page", home_page, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(_prefs_descriptor, Prefs, "proxy", proxy, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(_prefs_descriptor, Prefs, "enable_private_mode", enable_private_mode, EET_T_CHAR); +} + +static inline void +_prefs_shutdown(void) +{ + if (!_prefs_descriptor) return; + eet_data_descriptor_free(_prefs_descriptor); + _prefs_descriptor = NULL; +} + +Prefs * +prefs_new(char enable_mouse_cursor, char enable_touch_interface, char enable_plugins, char enable_javascript, const char * user_agent, const char * home_page, const char * proxy, char enable_private_mode) +{ + Prefs *prefs = calloc(1, sizeof(Prefs)); + + if (!prefs) + { + fprintf(stderr, "ERROR: could not calloc Prefs\n"); + return NULL; + } + + prefs->enable_mouse_cursor = enable_mouse_cursor; + prefs->enable_touch_interface = enable_touch_interface; + prefs->enable_plugins = enable_plugins; + prefs->enable_javascript = enable_javascript; + prefs->user_agent = eina_stringshare_add(user_agent ? user_agent : "eve"); + prefs->home_page = eina_stringshare_add(home_page ? home_page : "http://www.google.com"); + prefs->proxy = eina_stringshare_add(proxy); + prefs->enable_private_mode = enable_private_mode; + + return prefs; +} + +void +prefs_free(Prefs *prefs) +{ + eina_stringshare_del(prefs->user_agent); + eina_stringshare_del(prefs->home_page); + eina_stringshare_del(prefs->proxy); + free(prefs); +} + +inline char +prefs_enable_mouse_cursor_get(const Prefs *prefs) +{ + return prefs->enable_mouse_cursor; +} + +inline void +prefs_enable_mouse_cursor_set(Prefs *prefs, char enable_mouse_cursor) +{ + EINA_SAFETY_ON_NULL_RETURN(prefs); + prefs->enable_mouse_cursor = enable_mouse_cursor; +} + +inline char +prefs_enable_touch_interface_get(const Prefs *prefs) +{ + return prefs->enable_touch_interface; +} + +inline void +prefs_enable_touch_interface_set(Prefs *prefs, char enable_touch_interface) +{ + EINA_SAFETY_ON_NULL_RETURN(prefs); + prefs->enable_touch_interface = enable_touch_interface; +} + +inline char +prefs_enable_plugins_get(const Prefs *prefs) +{ + return prefs->enable_plugins; +} + +inline void +prefs_enable_plugins_set(Prefs *prefs, char enable_plugins) +{ + EINA_SAFETY_ON_NULL_RETURN(prefs); + prefs->enable_plugins = enable_plugins; +} + +inline char +prefs_enable_javascript_get(const Prefs *prefs) +{ + return prefs->enable_javascript; +} + +inline void +prefs_enable_javascript_set(Prefs *prefs, char enable_javascript) +{ + EINA_SAFETY_ON_NULL_RETURN(prefs); + prefs->enable_javascript = enable_javascript; +} + +inline const char * +prefs_user_agent_get(const Prefs *prefs) +{ + return prefs->user_agent; +} + +inline void +prefs_user_agent_set(Prefs *prefs, const char *user_agent) +{ + EINA_SAFETY_ON_NULL_RETURN(prefs); + eina_stringshare_del(prefs->user_agent); + prefs->user_agent = eina_stringshare_add(user_agent); +} + +inline const char * +prefs_home_page_get(const Prefs *prefs) +{ + return prefs->home_page; +} + +inline void +prefs_home_page_set(Prefs *prefs, const char *home_page) +{ + EINA_SAFETY_ON_NULL_RETURN(prefs); + eina_stringshare_del(prefs->home_page); + prefs->home_page = eina_stringshare_add(home_page); +} + +inline const char * +prefs_proxy_get(const Prefs *prefs) +{ + return prefs->proxy; +} + +inline void +prefs_proxy_set(Prefs *prefs, const char *proxy) +{ + EINA_SAFETY_ON_NULL_RETURN(prefs); + eina_stringshare_del(prefs->proxy); + prefs->proxy = eina_stringshare_add(proxy); +} + +inline char +prefs_enable_private_mode_get(const Prefs *prefs) +{ + return prefs->enable_private_mode; +} + +inline void +prefs_enable_private_mode_set(Prefs *prefs, char enable_private_mode) +{ + EINA_SAFETY_ON_NULL_RETURN(prefs); + prefs->enable_private_mode = enable_private_mode; +} + +Prefs * +prefs_load(const char *filename) +{ + Prefs *prefs; + Eet_File *ef = eet_open(filename, EET_FILE_MODE_READ); + if (!ef) + { + fprintf(stderr, "ERROR: could not open '%s' for read\n", filename); + return NULL; + } + + prefs = eet_data_read(ef, _prefs_descriptor, PREFS_ENTRY); + prefs->__eet_filename = eina_stringshare_add(filename); + + eet_close(ef); + return prefs; +} + +Eina_Bool +prefs_save(Prefs *prefs, const char *filename) +{ + char tmp[PATH_MAX]; + Eet_File *ef; + Eina_Bool ret; + unsigned int i, len; + struct stat st; + + if (filename) prefs->__eet_filename = eina_stringshare_add(filename); + else if (prefs->__eet_filename) filename = prefs->__eet_filename; + else return EINA_FALSE; + + len = eina_strlcpy(tmp, filename, sizeof(tmp)); + if (len + 12 >= (int)sizeof(tmp)) + { + fprintf(stderr, "ERROR: filename is too big: %s\n", filename); + return EINA_FALSE; + } + + i = 0; + do + { + snprintf(tmp + len, 12, ".%u", i); + i++; + } + while(stat(tmp, &st) == 0); + + ef = eet_open(tmp, EET_FILE_MODE_WRITE); + if (!ef) + { + fprintf(stderr, "ERROR: could not open '%s' for write\n", tmp); + return EINA_FALSE; + } + + ret = !!eet_data_write(ef, _prefs_descriptor, PREFS_ENTRY, prefs, EINA_TRUE); + eet_close(ef); + + if (ret) + { + unlink(filename); + rename(tmp, filename); + } + + return ret; +} + +void +preferences_init(void) +{ + _prefs_init(); +} + +void +preferences_shutdown(void) +{ + _prefs_shutdown(); +} + diff --git a/src/bin/prefs.h b/src/bin/prefs.h new file mode 100644 index 0000000..f64f4f7 --- /dev/null +++ b/src/bin/prefs.h @@ -0,0 +1,40 @@ +/* This file has been automatically generated by geneet.py */ +/* DO NOT MODIFY */ + +#ifndef __PREFERENCES_H__ +#define __PREFERENCES_H__ + +#include +#include + +typedef struct _Prefs Prefs; + +/* Prefs */ +Prefs *prefs_new(char enable_mouse_cursor, char enable_touch_interface, char enable_plugins, char enable_javascript, const char * user_agent, const char * home_page, const char * proxy, char enable_private_mode); +void prefs_free(Prefs *prefs); + +void prefs_enable_mouse_cursor_set(Prefs *prefs, char enable_mouse_cursor); +char prefs_enable_mouse_cursor_get(const Prefs *prefs); +void prefs_enable_touch_interface_set(Prefs *prefs, char enable_touch_interface); +char prefs_enable_touch_interface_get(const Prefs *prefs); +void prefs_enable_plugins_set(Prefs *prefs, char enable_plugins); +char prefs_enable_plugins_get(const Prefs *prefs); +void prefs_enable_javascript_set(Prefs *prefs, char enable_javascript); +char prefs_enable_javascript_get(const Prefs *prefs); +void prefs_user_agent_set(Prefs *prefs, const char * user_agent); +const char * prefs_user_agent_get(const Prefs *prefs); +void prefs_home_page_set(Prefs *prefs, const char * home_page); +const char * prefs_home_page_get(const Prefs *prefs); +void prefs_proxy_set(Prefs *prefs, const char * proxy); +const char * prefs_proxy_get(const Prefs *prefs); +void prefs_enable_private_mode_set(Prefs *prefs, char enable_private_mode); +char prefs_enable_private_mode_get(const Prefs *prefs); + +Prefs *prefs_load(const char *filename); +Eina_Bool prefs_save(Prefs *prefs, const char *filename); + +/* Global initializer / shutdown functions */ +void preferences_init(void); +void preferences_shutdown(void); + +#endif /* __PREFERENCES_H__ */ diff --git a/src/bin/private.h b/src/bin/private.h index fcb5a3e..53c2d19 100644 --- a/src/bin/private.h +++ b/src/bin/private.h @@ -8,6 +8,7 @@ #include #include +#include "prefs.h" #include "favorite.h" #include "history.h" @@ -18,6 +19,7 @@ typedef struct _View_Zoom_Interactive View_Zoom_Interactive; extern int _log_domain; extern Fav *fav; extern Hist *hist; +extern Prefs *prefs; extern App app; #define CRITICAL(...) EINA_LOG_DOM_CRIT(_log_domain, __VA_ARGS__)