commit 15e543c8ec89f728e6062e1e9a68348dc1b85b57
parent c4418f781d0ecb1e62dc4c801b94de53144e0905
Author: Kyle Milz <kmilz@ucalgary.ca>
Date: Wed, 10 Oct 2012 14:12:27 -0600
implement link saving/visited links populate
new code in webkit2 allows access to populating the visited links array.
also move some functionality from main into callbacks.
Diffstat:
4 files changed, 72 insertions(+), 43 deletions(-)
diff --git a/src/callbacks.c b/src/callbacks.c
@@ -167,22 +167,6 @@ webview_load_finished_cb(void *data, Evas_Object *obj, void *event_info)
update_state(wd);
- // printf("logging item to history.\n");
- Hist_Item *item;
- App_Data *ad = wd->app;
- const char *title = ewk_view_title_get(bd->view);
- const char *url = ewk_view_url_get(bd->view);
- item = hist_items_get(ad->history, url);
-
- if (item && hist_item_enabled_get(item)) {
- hist_item_visit_count_set(item, hist_item_visit_count_get(item) + 1);
- hist_item_last_visit_set(item, ecore_time_unix_get());
- hist_item_title_set(item, title);
- }
- else if (!item && config_enable_history_get(ad->config)) {
- hist_items_add(ad->history, url, hist_item_new(EINA_TRUE, title, url, 1, ecore_time_unix_get()));
- }
-
// userscript_hooks_end(elm_web_uri_get(td->web));
elm_object_focus_set(bd->web, EINA_TRUE);
@@ -888,23 +872,58 @@ inputbox_changed_cb(void *data, Evas_Object *obj, void *event_info)
}
}
-/*
+
static void
-populate_visited_links_cb(void *data, Evas_Object *obj, void *event_info)
+hist_nav_cb(const Evas_Object *view, Ewk_Navigation_Data *nav_data, void *data)
{
- Buffer_Data *bd = data;
- App_Data *ad = bd->window->app;
+ // printf("logging item to history.\n");
+ Hist_Item *item;
+ App_Data *ad = data;
+ const char *title = ewk_navigation_data_title_get(nav_data);
+ const char *url = ewk_navigation_data_url_get(nav_data);
+ item = hist_items_get(ad->history, url);
+ if (item && hist_item_enabled_get(item)) {
+ hist_item_visit_count_set(item, hist_item_visit_count_get(item) + 1);
+ hist_item_last_visit_set(item, ecore_time_unix_get());
+ hist_item_title_set(item, title);
+ }
+ else if (!item && config_enable_history_get(ad->config)) {
+ hist_items_add(ad->history, url, hist_item_new(EINA_TRUE, title, url, 1, ecore_time_unix_get()));
+ }
+}
+
+static void
+hist_client_redir_cb(const Evas_Object *vew, const char *source_url, const char *dest_url, void *data)
+{
+ printf("client_redirecion() from %s to %s\n", source_url, dest_url);
+}
+
+static void
+hist_server_redir_cb(const Evas_Object *vew, const char *source_url, const char *dest_url, void *data)
+{
+ printf("server_redirecion() from %s to %s\n", source_url, dest_url);
+}
+
+static void
+hist_visited_cb(void *data)
+{
+ App_Data *ad = data;
void *hash_data;
Eina_Iterator *it = eina_hash_iterator_tuple_new(hist_items_hash_get(ad->history));
while (eina_iterator_next(it, &hash_data)) {
Eina_Hash_Tuple *t = hash_data;
Hist_Item *hist_item = t->data;
- ewk_view_visited_link_add(bd->view, hist_item_url_get(hist_item));
+ ewk_context_visited_link_add(ewk_context_default_get(), hist_item_url_get(hist_item));
}
}
-*/
+
+static void
+hist_title_updated_cb(const Evas_Object *vew, const char *title, const char *url, void *data)
+{
+ printf("title_update() %s has new title %s\n", url, title);
+}
static void
_web_free_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
@@ -1004,7 +1023,6 @@ setup_buffer_callbacks(Buffer_Data *td)
// evas_object_smart_callback_add(v, "inputmethod,changed", inputmethod_changed_cb, td);
// evas_object_smart_callback_add(v, "inspector,view,create", webview_inspector_cb, td);
// evas_object_smart_callback_add(v, "inspector,view,close", webview_inspector_close_cb, td);
- // evas_object_smart_callback_add(v, "populate,visited,links", populate_visited_links_cb, td);
/* input events */
evas_object_event_callback_add(v, EVAS_CALLBACK_FREE, _web_free_cb, td);
@@ -1058,9 +1076,31 @@ generic_url_scheme_request_cb(Ewk_Url_Scheme_Request *request, void *user_data)
}
void
-setup_url_scheme_callbacks(Ewk_Context *ewk_context)
+setup_main_callbacks(App_Data *ad, const char *cookie_path)
{
int i;
+ Ewk_Cookie_Manager *cookie_manager;
+ Ewk_Context *context = ewk_context_default_get();
+
+ /* set cookie policy to use text file and no third party cookies */
+ cookie_manager = ewk_context_cookie_manager_get(context);
+ ewk_cookie_manager_persistent_storage_set(cookie_manager, cookie_path,
+ EWK_COOKIE_PERSISTENT_STORAGE_TEXT);
+ ewk_cookie_manager_accept_policy_set(cookie_manager,
+ EWK_COOKIE_ACCEPT_POLICY_NO_THIRD_PARTY);
+
+ /* history hooks */
+ ewk_context_history_callbacks_set(
+ context,
+ hist_nav_cb,
+ hist_client_redir_cb,
+ hist_server_redir_cb,
+ hist_title_updated_cb,
+ hist_visited_cb,
+ ad
+ );
+
+ /* url scheme registration */
URIHandler uri_handlers[] = {
{ "mailto:", "terminology -e mutt %s" },
{ "ftp://", "terminology -e wget ftp://%s" },
@@ -1068,9 +1108,9 @@ setup_url_scheme_callbacks(Ewk_Context *ewk_context)
};
for (i = 0; i < LENGTH(uri_handlers); i++)
- ewk_context_url_scheme_register(ewk_context, uri_handlers[i].handle,
+ ewk_context_url_scheme_register(context, uri_handlers[i].handle,
generic_url_scheme_request_cb, uri_handlers[i].handler);
- ewk_context_url_scheme_register(ewk_context, "about:", about_url_scheme_request_cb, NULL);
+ ewk_context_url_scheme_register(context, "about:", about_url_scheme_request_cb, NULL);
}
diff --git a/src/callbacks.h b/src/callbacks.h
@@ -1,7 +1,7 @@
void setup_buffer_callbacks(Buffer_Data*);
void setup_window_callbacks(Window_Data*);
-void setup_url_scheme_callbacks(Ewk_Context*);
+void setup_main_callbacks(App_Data*, const char*);
/*
static Eina_Bool webview_mimetype_cb(WebKitWebView *webview, WebKitWebFrame *frame, WebKitNetworkRequest *request, char *mime_type, WebKitWebPolicyDecision *decision, gpointer user_data);
diff --git a/src/main.c b/src/main.c
@@ -240,8 +240,6 @@ elm_main(int argc, char *argv[])
Session *session;
size_t dirlen;
int args;
- Ewk_Context *ewk_context;
- Ewk_Cookie_Manager *cookie_manager;
Ecore_Timer *session_save_timer = NULL;
Eina_Bool quit_option = EINA_FALSE;
Ecore_Con_Server *svr;
@@ -298,15 +296,6 @@ elm_main(int argc, char *argv[])
basename++;
dirlen++;
- ewk_context = ewk_context_default_get();
-
- eina_strlcpy(basename, "cookies.txt", sizeof(path) - dirlen);
- cookie_manager = ewk_context_cookie_manager_get(ewk_context);
- ewk_cookie_manager_persistent_storage_set(cookie_manager, path,
- EWK_COOKIE_PERSISTENT_STORAGE_TEXT);
- ewk_cookie_manager_accept_policy_set(cookie_manager,
- EWK_COOKIE_ACCEPT_POLICY_NO_THIRD_PARTY);
-
eina_strlcpy(basename, "config.eet", sizeof(path) - dirlen);
if (!(config = config_load(path))) {
config = config_new(EINA_TRUE /* allow_popup */,
@@ -339,20 +328,20 @@ elm_main(int argc, char *argv[])
ERR("Could not save new session file at %s", path);
}
+ eina_strlcpy(basename, "cookies.txt", sizeof(path) - dirlen);
+ setup_main_callbacks(ad, path);
+
session_save_timer = ecore_timer_loop_add(30, session_save_cb, ad);
if (!session_save_timer)
ERR("Could not register session save timer");
make_searchengines_list(searchengines, LENGTH(searchengines));
- setup_url_scheme_callbacks(ewk_context);
setup_modkeys(ad);
ad->config = config;
ad->history = hist;
ad->session = session;
ad->session_save_timer = session_save_timer;
- ad->ewk_context = ewk_context;
- ad->cookie_manager = cookie_manager;
/* initialize fields that are non-zero */
ad->keylistroot = make_keyslist();
diff --git a/src/viking.h b/src/viking.h
@@ -216,8 +216,8 @@ typedef struct
Hist *history;
Config *config;
Session *session;
- Ewk_Context *ewk_context;
- Ewk_Cookie_Manager *cookie_manager;
+ // Ewk_Context *ewk_context;
+ // Ewk_Cookie_Manager *cookie_manager;
Eina_Bool exiting : 1;
} App_Data;