void ephy_find_toolbar_set_embed (EphyFindToolbar *toolbar, EphyEmbed *embed) { EphyFindToolbarPrivate *priv = toolbar->priv; WebKitWebView *web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED(embed); if (priv->web_view == web_view) return; if (priv->web_view != NULL) { #ifdef HAVE_WEBKIT2 g_signal_handlers_disconnect_matched (priv->controller, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, toolbar); #endif g_signal_handlers_disconnect_matched (EPHY_WEB_VIEW (web_view), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, toolbar); } priv->web_view = web_view; if (web_view != NULL) { #ifdef HAVE_WEBKIT2 priv->controller = webkit_web_view_get_find_controller (web_view); g_signal_connect_object (priv->controller, "found-text", G_CALLBACK (found_text_cb), toolbar, 0); g_signal_connect_object (priv->controller, "failed-to-find-text", G_CALLBACK (failed_to_find_text_cb), toolbar, 0); #endif clear_status (toolbar); g_signal_connect_object (EPHY_WEB_VIEW (web_view), "search-key-press", G_CALLBACK (tab_search_key_press_cb), toolbar, 0); } }
static void impl_detach_tab (EphyExtension *ext, EphyWindow *window, EphyEmbed *embed) { WebKitWebView *web_view; LOG ("impl_detach_tab"); g_return_if_fail (EPHY_IS_EMBED (embed)); web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed); g_signal_handlers_disconnect_by_func (web_view, G_CALLBACK (button_press_event_cb), ext); g_signal_handlers_disconnect_by_func (web_view, G_CALLBACK (hovering_over_link_cb), ext); g_signal_handlers_disconnect_by_func (web_view, G_CALLBACK (load_status_notify_cb), ext); }
static void impl_attach_tab (EphyExtension *ext, EphyWindow *window, EphyEmbed *embed) { WebKitWebView *web_view; LOG ("impl_attach_tab"); g_return_if_fail (EPHY_IS_EMBED (embed)); web_view = EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (embed); g_signal_connect (web_view, "button-press-event", G_CALLBACK (button_press_event_cb), ext); g_signal_connect (web_view, "hovering-over-link", G_CALLBACK (hovering_over_link_cb), ext); g_signal_connect (web_view, "notify::load-status", G_CALLBACK (load_status_notify_cb), ext); }
void ephy_session_undo_close_tab (EphySession *session) { EphySessionPrivate *priv; EphyEmbed *embed, *new_tab; ClosedTab *tab; #ifndef HAVE_WEBKIT2 WebKitWebBackForwardList *dest; GList *i; #endif EphyNewTabFlags flags = EPHY_NEW_TAB_OPEN_PAGE | EPHY_NEW_TAB_PRESENT_WINDOW | EPHY_NEW_TAB_JUMP | EPHY_NEW_TAB_DONT_COPY_HISTORY; g_return_if_fail (EPHY_IS_SESSION (session)); priv = session->priv; tab = g_queue_pop_head (priv->closed_tabs); if (tab == NULL) return; LOG ("UNDO CLOSE TAB: %s", tab->url); if (*tab->parent_location != NULL) { GtkWidget *window; flags |= EPHY_NEW_TAB_IN_EXISTING_WINDOW; if (tab->position > 0) { /* Append in the n-th position. */ embed = EPHY_EMBED (gtk_notebook_get_nth_page (GTK_NOTEBOOK (*tab->parent_location), tab->position - 1)); flags |= EPHY_NEW_TAB_APPEND_AFTER; } else { /* Just prepend in the first position. */ embed = NULL; flags |= EPHY_NEW_TAB_FIRST; } window = gtk_widget_get_toplevel (GTK_WIDGET (*tab->parent_location)); new_tab = ephy_shell_new_tab (ephy_shell_get_default (), EPHY_WINDOW (window), embed, tab->url, flags); post_restore_cleanup (priv->closed_tabs, tab, FALSE); } else { EphyNotebook *notebook; flags |= EPHY_NEW_TAB_IN_NEW_WINDOW; new_tab = ephy_shell_new_tab (ephy_shell_get_default (), NULL, NULL, tab->url, flags); /* FIXME: This makes the assumption that the notebook is the parent of the returned EphyEmbed. */ notebook = EPHY_NOTEBOOK (gtk_widget_get_parent (GTK_WIDGET (new_tab))); *tab->parent_location = notebook; post_restore_cleanup (priv->closed_tabs, tab, TRUE); } /* This is deficient: we need to recreate the whole * BackForward list. Also, WebKit2 doesn't have this API. */ #ifndef HAVE_WEBKIT2 dest = webkit_web_view_get_back_forward_list (EPHY_GET_WEBKIT_WEB_VIEW_FROM_EMBED (new_tab)); for (i = tab->bflist; i; i = i->next) { LOG ("ADDING TO BF: %s", webkit_web_history_item_get_title ((WebKitWebHistoryItem*) i->data)); webkit_web_back_forward_list_add_item (dest, webkit_web_history_item_copy ((WebKitWebHistoryItem*) i->data)); } #endif closed_tab_free (tab); if (g_queue_is_empty (priv->closed_tabs)) g_object_notify (G_OBJECT (session), "can-undo-tab-closed"); }