Rename Bookmarks to More and implement Preferences display.

SVN revision: 52205
This commit is contained in:
Leandro Pereira 2010-09-13 22:34:19 +00:00
parent 092c8c9141
commit f3c79e3533
16 changed files with 807 additions and 174 deletions

View File

@ -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 =

BIN
data/themes/arrow_right.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
data/themes/check.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -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;
}
}
}

View File

Before

Width:  |  Height:  |  Size: 318 B

After

Width:  |  Height:  |  Size: 318 B

View File

Before

Width:  |  Height:  |  Size: 645 B

After

Width:  |  Height:  |  Size: 645 B

View File

@ -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

View File

@ -7,23 +7,27 @@
#include <Eina.h>
#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:

View File

@ -11,6 +11,7 @@
#include <Elementary.h>
#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;
}

271
src/bin/prefs.c Normal file
View File

@ -0,0 +1,271 @@
/* This file has been automatically generated by geneet.py */
/* DO NOT MODIFY */
#include <limits.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
#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();
}

40
src/bin/prefs.h Normal file
View File

@ -0,0 +1,40 @@
/* This file has been automatically generated by geneet.py */
/* DO NOT MODIFY */
#ifndef __PREFERENCES_H__
#define __PREFERENCES_H__
#include <Eina.h>
#include <Eet.h>
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__ */

View File

@ -8,6 +8,7 @@
#include <Elementary.h>
#include <EWebKit.h>
#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__)