summaryrefslogtreecommitdiff
path: root/src/ephy-session.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ephy-session.c')
-rw-r--r--src/ephy-session.c2160
1 files changed, 1024 insertions, 1136 deletions
diff --git a/src/ephy-session.c b/src/ephy-session.c
index 6622080b6..f836053e9 100644
--- a/src/ephy-session.c
+++ b/src/ephy-session.c
@@ -42,39 +42,35 @@
#include <libxml/tree.h>
#include <libxml/xmlwriter.h>
-typedef struct
-{
- EphyNotebook *notebook;
- gint ref_count;
+typedef struct {
+ EphyNotebook *notebook;
+ gint ref_count;
} NotebookTracker;
-typedef struct
-{
- NotebookTracker *notebook_tracker;
- int position;
- char *url;
- WebKitWebViewSessionState *state;
+typedef struct {
+ NotebookTracker *notebook_tracker;
+ int position;
+ char *url;
+ WebKitWebViewSessionState *state;
} ClosedTab;
-struct _EphySession
-{
- GObject parent_instance;
+struct _EphySession {
+ GObject parent_instance;
- GQueue *closed_tabs;
- guint save_source_id;
- GCancellable *save_cancellable;
- guint closing : 1;
- guint dont_save : 1;
+ GQueue *closed_tabs;
+ guint save_source_id;
+ GCancellable *save_cancellable;
+ guint closing : 1;
+ guint dont_save : 1;
};
-#define SESSION_STATE "type:session_state"
-#define MAX_CLOSED_TABS 10
+#define SESSION_STATE "type:session_state"
+#define MAX_CLOSED_TABS 10
-enum
-{
- PROP_0,
- PROP_CAN_UNDO_TAB_CLOSED,
- LAST_PROP
+enum {
+ PROP_0,
+ PROP_CAN_UNDO_TAB_CLOSED,
+ LAST_PROP
};
static GParamSpec *obj_properties[LAST_PROP];
@@ -88,378 +84,358 @@ G_DEFINE_TYPE (EphySession, ephy_session, G_TYPE_OBJECT)
static GFile *
get_session_file (const char *filename)
{
- GFile *file;
- char *path;
+ GFile *file;
+ char *path;
- if (filename == NULL)
- {
- return NULL;
- }
+ if (filename == NULL) {
+ return NULL;
+ }
- if (strcmp (filename, SESSION_STATE) == 0)
- {
- path = g_build_filename (ephy_dot_dir (),
- "session_state.xml",
- NULL);
- }
- else
- {
- path = g_strdup (filename);
- }
+ if (strcmp (filename, SESSION_STATE) == 0) {
+ path = g_build_filename (ephy_dot_dir (),
+ "session_state.xml",
+ NULL);
+ } else {
+ path = g_strdup (filename);
+ }
- file = g_file_new_for_path (path);
- g_free (path);
+ file = g_file_new_for_path (path);
+ g_free (path);
- return file;
+ return file;
}
static void
session_delete (EphySession *session)
{
- GFile *file;
+ GFile *file;
- file = get_session_file (SESSION_STATE);
- g_file_delete (file, NULL, NULL);
- g_object_unref (file);
+ file = get_session_file (SESSION_STATE);
+ g_file_delete (file, NULL, NULL);
+ g_object_unref (file);
}
static void
-load_changed_cb (WebKitWebView *view,
- WebKitLoadEvent load_event,
- EphySession *session)
+load_changed_cb (WebKitWebView *view,
+ WebKitLoadEvent load_event,
+ EphySession *session)
{
- if (!ephy_web_view_load_failed (EPHY_WEB_VIEW (view)))
- ephy_session_save (session);
+ if (!ephy_web_view_load_failed (EPHY_WEB_VIEW (view)))
+ ephy_session_save (session);
}
static void
notebook_tracker_set_notebook (NotebookTracker *tracker,
- EphyNotebook *notebook)
+ EphyNotebook *notebook)
{
- if (tracker->notebook == notebook)
- {
- return;
- }
+ if (tracker->notebook == notebook) {
+ return;
+ }
- if (tracker->notebook)
- {
- g_object_remove_weak_pointer (G_OBJECT (tracker->notebook), (gpointer *)&tracker->notebook);
- }
- tracker->notebook = notebook;
- if (tracker->notebook)
- {
- g_object_add_weak_pointer (G_OBJECT (tracker->notebook), (gpointer *)&tracker->notebook);
- }
+ if (tracker->notebook) {
+ g_object_remove_weak_pointer (G_OBJECT (tracker->notebook), (gpointer *)&tracker->notebook);
+ }
+ tracker->notebook = notebook;
+ if (tracker->notebook) {
+ g_object_add_weak_pointer (G_OBJECT (tracker->notebook), (gpointer *)&tracker->notebook);
+ }
}
static NotebookTracker *
notebook_tracker_new (EphyNotebook *notebook)
{
- NotebookTracker *tracker = g_slice_new0 (NotebookTracker);
+ NotebookTracker *tracker = g_slice_new0 (NotebookTracker);
- tracker->ref_count = 1;
- notebook_tracker_set_notebook (tracker, notebook);
+ tracker->ref_count = 1;
+ notebook_tracker_set_notebook (tracker, notebook);
- return tracker;
+ return tracker;
}
static NotebookTracker *
notebook_tracker_ref (NotebookTracker *tracker)
{
- g_atomic_int_inc (&tracker->ref_count);
+ g_atomic_int_inc (&tracker->ref_count);
- return tracker;
+ return tracker;
}
static void
notebook_tracker_unref (NotebookTracker *tracker)
{
- if (!g_atomic_int_dec_and_test (&tracker->ref_count))
- return;
+ if (!g_atomic_int_dec_and_test (&tracker->ref_count))
+ return;
- notebook_tracker_set_notebook (tracker, NULL);
- g_slice_free (NotebookTracker, tracker);
+ notebook_tracker_set_notebook (tracker, NULL);
+ g_slice_free (NotebookTracker, tracker);
}
static EphyNotebook *
closed_tab_get_notebook (ClosedTab *tab)
{
- return tab->notebook_tracker->notebook;
+ return tab->notebook_tracker->notebook;
}
static int
compare_func (ClosedTab *iter, EphyNotebook *notebook)
{
- return GTK_NOTEBOOK (closed_tab_get_notebook (iter)) - GTK_NOTEBOOK (notebook);
+ return GTK_NOTEBOOK (closed_tab_get_notebook (iter)) - GTK_NOTEBOOK (notebook);
}
static NotebookTracker *
-ephy_session_ref_or_create_notebook_tracker (EphySession *session,
- EphyNotebook *notebook)
+ephy_session_ref_or_create_notebook_tracker (EphySession *session,
+ EphyNotebook *notebook)
{
- GList *item = g_queue_find_custom (session->closed_tabs, notebook, (GCompareFunc)compare_func);
- return item ? notebook_tracker_ref (((ClosedTab *)item->data)->notebook_tracker) : notebook_tracker_new (notebook);
+ GList *item = g_queue_find_custom (session->closed_tabs, notebook, (GCompareFunc)compare_func);
+ return item ? notebook_tracker_ref (((ClosedTab *)item->data)->notebook_tracker) : notebook_tracker_new (notebook);
}
static void
closed_tab_free (ClosedTab *tab)
{
- g_free (tab->url);
- notebook_tracker_unref (tab->notebook_tracker);
- webkit_web_view_session_state_unref (tab->state);
+ g_free (tab->url);
+ notebook_tracker_unref (tab->notebook_tracker);
+ webkit_web_view_session_state_unref (tab->state);
- g_slice_free (ClosedTab, tab);
+ g_slice_free (ClosedTab, tab);
}
static ClosedTab *
-closed_tab_new (EphyWebView *web_view,
- int position,
- NotebookTracker *notebook_tracker)
+closed_tab_new (EphyWebView *web_view,
+ int position,
+ NotebookTracker *notebook_tracker)
{
- ClosedTab *tab = g_slice_new0 (ClosedTab);
+ ClosedTab *tab = g_slice_new0 (ClosedTab);
- tab->url = g_strdup (ephy_web_view_get_address (web_view));
- tab->position = position;
- /* Takes the ownership of the tracker */
- tab->notebook_tracker = notebook_tracker;
- tab->state = webkit_web_view_get_session_state (WEBKIT_WEB_VIEW (web_view));
+ tab->url = g_strdup (ephy_web_view_get_address (web_view));
+ tab->position = position;
+ /* Takes the ownership of the tracker */
+ tab->notebook_tracker = notebook_tracker;
+ tab->state = webkit_web_view_get_session_state (WEBKIT_WEB_VIEW (web_view));
- return tab;
+ return tab;
}
void
ephy_session_undo_close_tab (EphySession *session)
{
- EphyEmbed *embed, *new_tab;
- WebKitWebView *web_view;
- WebKitBackForwardList *bf_list;
- WebKitBackForwardListItem *item;
- ClosedTab *tab;
- EphyWindow *window;
- EphyNotebook *notebook;
- EphyNewTabFlags flags = EPHY_NEW_TAB_JUMP;
-
- g_return_if_fail (EPHY_IS_SESSION (session));
-
- tab = g_queue_pop_head (session->closed_tabs);
- if (tab == NULL)
- return;
-
- LOG ("UNDO CLOSE TAB: %s", tab->url);
- notebook = closed_tab_get_notebook (tab);
- if (notebook)
- {
- if (tab->position > 0)
- {
- /* Append in the n-th position. */
- embed = EPHY_EMBED (gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook),
- tab->position - 1));
- flags |= EPHY_NEW_TAB_APPEND_AFTER;
- }
- else
- {
- /* Just prepend in the first position. */
- embed = NULL;
- flags |= EPHY_NEW_TAB_FIRST;
- }
-
- window = EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (notebook)));
- new_tab = ephy_shell_new_tab (ephy_shell_get_default (),
- window, embed,
- flags);
- }
- else
- {
- window = ephy_window_new ();
- new_tab = ephy_shell_new_tab (ephy_shell_get_default (),
- window, NULL, flags);
- notebook_tracker_set_notebook (tab->notebook_tracker,
- EPHY_NOTEBOOK (ephy_window_get_notebook (window)));
- }
-
- web_view = WEBKIT_WEB_VIEW (ephy_embed_get_web_view (new_tab));
- webkit_web_view_restore_session_state (web_view, tab->state);
- bf_list = webkit_web_view_get_back_forward_list (web_view);
- item = webkit_back_forward_list_get_current_item (bf_list);
- if (item)
- {
- webkit_web_view_go_to_back_forward_list_item (web_view, item);
- }
- else
- {
- ephy_web_view_load_url (ephy_embed_get_web_view (new_tab), tab->url);
- }
-
- gtk_widget_grab_focus (GTK_WIDGET (new_tab));
- gtk_window_present (GTK_WINDOW (window));
-
- closed_tab_free (tab);
-
- if (g_queue_is_empty (session->closed_tabs))
- g_object_notify_by_pspec (G_OBJECT (session), obj_properties[PROP_CAN_UNDO_TAB_CLOSED]);
+ EphyEmbed *embed, *new_tab;
+ WebKitWebView *web_view;
+ WebKitBackForwardList *bf_list;
+ WebKitBackForwardListItem *item;
+ ClosedTab *tab;
+ EphyWindow *window;
+ EphyNotebook *notebook;
+ EphyNewTabFlags flags = EPHY_NEW_TAB_JUMP;
+
+ g_return_if_fail (EPHY_IS_SESSION (session));
+
+ tab = g_queue_pop_head (session->closed_tabs);
+ if (tab == NULL)
+ return;
+
+ LOG ("UNDO CLOSE TAB: %s", tab->url);
+ notebook = closed_tab_get_notebook (tab);
+ if (notebook) {
+ if (tab->position > 0) {
+ /* Append in the n-th position. */
+ embed = EPHY_EMBED (gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook),
+ tab->position - 1));
+ flags |= EPHY_NEW_TAB_APPEND_AFTER;
+ } else {
+ /* Just prepend in the first position. */
+ embed = NULL;
+ flags |= EPHY_NEW_TAB_FIRST;
+ }
+
+ window = EPHY_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (notebook)));
+ new_tab = ephy_shell_new_tab (ephy_shell_get_default (),
+ window, embed,
+ flags);
+ } else {
+ window = ephy_window_new ();
+ new_tab = ephy_shell_new_tab (ephy_shell_get_default (),
+ window, NULL, flags);
+ notebook_tracker_set_notebook (tab->notebook_tracker,
+ EPHY_NOTEBOOK (ephy_window_get_notebook (window)));
+ }
+
+ web_view = WEBKIT_WEB_VIEW (ephy_embed_get_web_view (new_tab));
+ webkit_web_view_restore_session_state (web_view, tab->state);
+ bf_list = webkit_web_view_get_back_forward_list (web_view);
+ item = webkit_back_forward_list_get_current_item (bf_list);
+ if (item) {
+ webkit_web_view_go_to_back_forward_list_item (web_view, item);
+ } else {
+ ephy_web_view_load_url (ephy_embed_get_web_view (new_tab), tab->url);
+ }
+
+ gtk_widget_grab_focus (GTK_WIDGET (new_tab));
+ gtk_window_present (GTK_WINDOW (window));
+
+ closed_tab_free (tab);
+
+ if (g_queue_is_empty (session->closed_tabs))
+ g_object_notify_by_pspec (G_OBJECT (session), obj_properties[PROP_CAN_UNDO_TAB_CLOSED]);
}
static void
-ephy_session_tab_closed (EphySession *session,
- EphyNotebook *notebook,
- EphyEmbed *embed,
- gint position)
+ephy_session_tab_closed (EphySession *session,
+ EphyNotebook *notebook,
+ EphyEmbed *embed,
+ gint position)
{
- EphyWebView *view;
- WebKitWebView *wk_view;
- ClosedTab *tab;
+ EphyWebView *view;
+ WebKitWebView *wk_view;
+ ClosedTab *tab;
- view = ephy_embed_get_web_view (embed);
- wk_view = WEBKIT_WEB_VIEW (view);
+ view = ephy_embed_get_web_view (embed);
+ wk_view = WEBKIT_WEB_VIEW (view);
- if (!webkit_web_view_can_go_back (wk_view) && !webkit_web_view_can_go_forward (wk_view) &&
- (ephy_web_view_get_is_blank (view) || ephy_web_view_is_overview (view)))
- {
- return;
- }
+ if (!webkit_web_view_can_go_back (wk_view) && !webkit_web_view_can_go_forward (wk_view) &&
+ (ephy_web_view_get_is_blank (view) || ephy_web_view_is_overview (view))) {
+ return;
+ }
- if (g_queue_get_length (session->closed_tabs) == MAX_CLOSED_TABS)
- {
- closed_tab_free (g_queue_pop_tail (session->closed_tabs));
- }
+ if (g_queue_get_length (session->closed_tabs) == MAX_CLOSED_TABS) {
+ closed_tab_free (g_queue_pop_tail (session->closed_tabs));
+ }
- tab = closed_tab_new (view, position,
- ephy_session_ref_or_create_notebook_tracker (session, notebook));
- g_queue_push_head (session->closed_tabs, tab);
+ tab = closed_tab_new (view, position,
+ ephy_session_ref_or_create_notebook_tracker (session, notebook));
+ g_queue_push_head (session->closed_tabs, tab);
- if (g_queue_get_length (session->closed_tabs) == 1)
- g_object_notify_by_pspec (G_OBJECT (session), obj_properties[PROP_CAN_UNDO_TAB_CLOSED]);
+ if (g_queue_get_length (session->closed_tabs) == 1)
+ g_object_notify_by_pspec (G_OBJECT (session), obj_properties[PROP_CAN_UNDO_TAB_CLOSED]);
- LOG ("Added: %s to the list (%d elements)",
- ephy_web_view_get_address (view), g_queue_get_length (session->closed_tabs));
+ LOG ("Added: %s to the list (%d elements)",
+ ephy_web_view_get_address (view), g_queue_get_length (session->closed_tabs));
}
gboolean
ephy_session_get_can_undo_tab_closed (EphySession *session)
{
- g_return_val_if_fail (EPHY_IS_SESSION (session), FALSE);
+ g_return_val_if_fail (EPHY_IS_SESSION (session), FALSE);
- return g_queue_is_empty (session->closed_tabs) == FALSE;
+ return g_queue_is_empty (session->closed_tabs) == FALSE;
}
static void
-notebook_page_added_cb (GtkWidget *notebook,
- EphyEmbed *embed,
- guint position,
- EphySession *session)
+notebook_page_added_cb (GtkWidget *notebook,
+ EphyEmbed *embed,
+ guint position,
+ EphySession *session)
{
- g_signal_connect (ephy_embed_get_web_view (embed), "load-changed",
- G_CALLBACK (load_changed_cb), session);
+ g_signal_connect (ephy_embed_get_web_view (embed), "load-changed",
+ G_CALLBACK (load_changed_cb), session);
}
static void
-notebook_page_removed_cb (GtkWidget *notebook,
- EphyEmbed *embed,
- guint position,
- EphySession *session)
+notebook_page_removed_cb (GtkWidget *notebook,
+ EphyEmbed *embed,
+ guint position,
+ EphySession *session)
{
- ephy_session_save (session);
+ ephy_session_save (session);
- g_signal_handlers_disconnect_by_func
- (ephy_embed_get_web_view (embed), G_CALLBACK (load_changed_cb),
- session);
+ g_signal_handlers_disconnect_by_func
+ (ephy_embed_get_web_view (embed), G_CALLBACK (load_changed_cb),
+ session);
- ephy_session_tab_closed (session, EPHY_NOTEBOOK (notebook), embed, position);
+ ephy_session_tab_closed (session, EPHY_NOTEBOOK (notebook), embed, position);
}
static void
-notebook_page_reordered_cb (GtkWidget *notebook,
- GtkWidget *tab,
- guint position,
- EphySession *session)
+notebook_page_reordered_cb (GtkWidget *notebook,
+ GtkWidget *tab,
+ guint position,
+ EphySession *session)
{
- ephy_session_save (session);
+ ephy_session_save (session);
}
static void
notebook_switch_page_cb (GtkNotebook *notebook,
- GtkWidget *page,
- guint page_num,
- EphySession *session)
+ GtkWidget *page,
+ guint page_num,
+ EphySession *session)
{
- ephy_session_save (session);
+ ephy_session_save (session);
}
static void
session_maybe_open_window (EphySession *session,
- guint32 user_time)
+ guint32 user_time)
{
- EphyShell *shell = ephy_shell_get_default ();
+ EphyShell *shell = ephy_shell_get_default ();
- /* FIXME: maybe just check for normal windows? */
- if (ephy_shell_get_n_windows (shell) == 0)
- {
- EphyWindow *window = ephy_window_new ();
- EphyEmbed *embed;
+ /* FIXME: maybe just check for normal windows? */
+ if (ephy_shell_get_n_windows (shell) == 0) {
+ EphyWindow *window = ephy_window_new ();
+ EphyEmbed *embed;
- embed = ephy_shell_new_tab_full (shell,
- NULL /* title */,
- NULL /* related view */,
- window, NULL /* tab */,
- 0,
- user_time);
- ephy_web_view_load_homepage (ephy_embed_get_web_view (embed));
- ephy_window_activate_location (window);
- }
+ embed = ephy_shell_new_tab_full (shell,
+ NULL /* title */,
+ NULL /* related view */,
+ window, NULL /* tab */,
+ 0,
+ user_time);
+ ephy_web_view_load_homepage (ephy_embed_get_web_view (embed));
+ ephy_window_activate_location (window);
+ }
}
static void
window_added_cb (GtkApplication *application,
- GtkWindow *window,
- EphySession *session)
+ GtkWindow *window,
+ EphySession *session)
{
- GtkWidget *notebook;
- EphyWindow *ephy_window;
+ GtkWidget *notebook;
+ EphyWindow *ephy_window;
- ephy_session_save (session);
+ ephy_session_save (session);
- if (!EPHY_IS_WINDOW (window))
- return;
+ if (!EPHY_IS_WINDOW (window))
+ return;
- ephy_window = EPHY_WINDOW (window);
+ ephy_window = EPHY_WINDOW (window);
- notebook = ephy_window_get_notebook (ephy_window);
- g_signal_connect (notebook, "page-added",
- G_CALLBACK (notebook_page_added_cb), session);
- g_signal_connect (notebook, "page-removed",
- G_CALLBACK (notebook_page_removed_cb), session);
- g_signal_connect (notebook, "page-reordered",
- G_CALLBACK (notebook_page_reordered_cb), session);
- g_signal_connect_after (notebook, "switch-page",
- G_CALLBACK (notebook_switch_page_cb), session);
+ notebook = ephy_window_get_notebook (ephy_window);
+ g_signal_connect (notebook, "page-added",
+ G_CALLBACK (notebook_page_added_cb), session);
+ g_signal_connect (notebook, "page-removed",
+ G_CALLBACK (notebook_page_removed_cb), session);
+ g_signal_connect (notebook, "page-reordered",
+ G_CALLBACK (notebook_page_reordered_cb), session);
+ g_signal_connect_after (notebook, "switch-page",
+ G_CALLBACK (notebook_switch_page_cb), session);
- /* Set unique identifier as role, so that on restore, the WM can
- * place the window on the right workspace
- */
+ /* Set unique identifier as role, so that on restore, the WM can
+ * place the window on the right workspace
+ */
- if (gtk_window_get_role (window) == NULL)
- {
- /* I guess rand() is unique enough, otherwise we could use
- * time + pid or something
- */
- char *role;
+ if (gtk_window_get_role (window) == NULL) {
+ /* I guess rand() is unique enough, otherwise we could use
+ * time + pid or something
+ */
+ char *role;
- role = g_strdup_printf ("epiphany-window-%x", rand());
- gtk_window_set_role (window, role);
- g_free (role);
- }
+ role = g_strdup_printf ("epiphany-window-%x", rand ());
+ gtk_window_set_role (window, role);
+ g_free (role);
+ }
}
static void
window_removed_cb (GtkApplication *application,
- GtkWindow *window,
- EphySession *session)
+ GtkWindow *window,
+ EphySession *session)
{
- ephy_session_save (session);
+ ephy_session_save (session);
- /* NOTE: since the window will be destroyed anyway, we don't need to
- * disconnect our signal handlers from its components.
- */
+ /* NOTE: since the window will be destroyed anyway, we don't need to
+ * disconnect our signal handlers from its components.
+ */
}
/* Class implementation */
@@ -467,66 +443,65 @@ window_removed_cb (GtkApplication *application,
static void
ephy_session_init (EphySession *session)
{
- EphyShell *shell;
+ EphyShell *shell;
- LOG ("EphySession initialising");
+ LOG ("EphySession initialising");
- session->closed_tabs = g_queue_new ();
- shell = ephy_shell_get_default ();
- g_signal_connect (shell, "window-added",
- G_CALLBACK (window_added_cb), session);
- g_signal_connect (shell, "window-removed",
- G_CALLBACK (window_removed_cb), session);
+ session->closed_tabs = g_queue_new ();
+ shell = ephy_shell_get_default ();
+ g_signal_connect (shell, "window-added",
+ G_CALLBACK (window_added_cb), session);
+ g_signal_connect (shell, "window-removed",
+ G_CALLBACK (window_removed_cb), session);
}
static void
ephy_session_dispose (GObject *object)
{
- EphySession *session = EPHY_SESSION (object);
+ EphySession *session = EPHY_SESSION (object);
- LOG ("EphySession disposing");
+ LOG ("EphySession disposing");
- g_queue_free_full (session->closed_tabs,
- (GDestroyNotify)closed_tab_free);
+ g_queue_free_full (session->closed_tabs,
+ (GDestroyNotify)closed_tab_free);
- G_OBJECT_CLASS (ephy_session_parent_class)->dispose (object);
+ G_OBJECT_CLASS (ephy_session_parent_class)->dispose (object);
}
static void
-ephy_session_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
+ephy_session_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
{
- EphySession *session = EPHY_SESSION (object);
+ EphySession *session = EPHY_SESSION (object);
- switch (property_id)
- {
- case PROP_CAN_UNDO_TAB_CLOSED:
- g_value_set_boolean (value,
- ephy_session_get_can_undo_tab_closed (session));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
+ switch (property_id) {
+ case PROP_CAN_UNDO_TAB_CLOSED:
+ g_value_set_boolean (value,
+ ephy_session_get_can_undo_tab_closed (session));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
}
static void
ephy_session_class_init (EphySessionClass *class)
{
- GObjectClass *object_class = G_OBJECT_CLASS (class);
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
- object_class->dispose = ephy_session_dispose;
- object_class->get_property = ephy_session_get_property;
+ object_class->dispose = ephy_session_dispose;
+ object_class->get_property = ephy_session_get_property;
- obj_properties[PROP_CAN_UNDO_TAB_CLOSED] =
- g_param_spec_boolean ("can-undo-tab-closed",
- "Can undo tab close",
- "Session can undo a tab closure",
- FALSE,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
+ obj_properties[PROP_CAN_UNDO_TAB_CLOSED] =
+ g_param_spec_boolean ("can-undo-tab-closed",
+ "Can undo tab close",
+ "Session can undo a tab closure",
+ FALSE,
+ G_PARAM_READABLE | G_PARAM_STATIC_STRINGS);
- g_object_class_install_properties (object_class, LAST_PROP, obj_properties);
+ g_object_class_install_properties (object_class, LAST_PROP, obj_properties);
}
/* Implementation */
@@ -534,891 +509,816 @@ ephy_session_class_init (EphySessionClass *class)
void
ephy_session_close (EphySession *session)
{
- EphyPrefsRestoreSessionPolicy policy;
+ EphyPrefsRestoreSessionPolicy policy;
- g_return_if_fail (EPHY_IS_SESSION (session));
+ g_return_if_fail (EPHY_IS_SESSION (session));
- LOG ("ephy_session_close");
+ LOG ("ephy_session_close");
- if (session->save_source_id)
- {
- /* There's a save pending, cancel it and save the session now since
- * after closing the session the saving is no longer allowed.
- */
- g_source_remove (session->save_source_id);
- session->save_source_id = 0;
- }
+ if (session->save_source_id) {
+ /* There's a save pending, cancel it and save the session now since
+ * after closing the session the saving is no longer allowed.
+ */
+ g_source_remove (session->save_source_id);
+ session->save_source_id = 0;
+ }
- session->closing = TRUE;
+ session->closing = TRUE;
- policy = g_settings_get_enum (EPHY_SETTINGS_MAIN, EPHY_PREFS_RESTORE_SESSION_POLICY);
- if (policy == EPHY_PREFS_RESTORE_SESSION_POLICY_ALWAYS)
- {
- ephy_session_save_idle_cb (session);
- }
- else
- {
- session_delete (session);
- }
+ policy = g_settings_get_enum (EPHY_SETTINGS_MAIN, EPHY_PREFS_RESTORE_SESSION_POLICY);
+ if (policy == EPHY_PREFS_RESTORE_SESSION_POLICY_ALWAYS) {
+ ephy_session_save_idle_cb (session);
+ } else {
+ session_delete (session);
+ }
- session->dont_save = TRUE;
+ session->dont_save = TRUE;
}
static void
-get_window_geometry (GtkWindow *window,
- GdkRectangle *rectangle)
+get_window_geometry (GtkWindow *window,
+ GdkRectangle *rectangle)
{
- gtk_window_get_size (window, &rectangle->width, &rectangle->height);
- gtk_window_get_position (window, &rectangle->x, &rectangle->y);
+ gtk_window_get_size (window, &rectangle->width, &rectangle->height);
+ gtk_window_get_position (window, &rectangle->x, &rectangle->y);
}
typedef struct {
- char *url;
- char *title;
- gboolean loading;
- gboolean crashed;
- WebKitWebViewSessionState *state;
+ char *url;
+ char *title;
+ gboolean loading;
+ gboolean crashed;
+ WebKitWebViewSessionState *state;
} SessionTab;
static SessionTab *
-session_tab_new (EphyEmbed *embed,
- EphySession *session)
-{
- SessionTab *session_tab;
- const char *address;
- EphyWebView *web_view = ephy_embed_get_web_view (embed);
- EphyWebViewErrorPage error_page = ephy_web_view_get_error_page (web_view);
-
- session_tab = g_slice_new (SessionTab);
-
- address = ephy_web_view_get_address (web_view);
- /* Do not store ephy-about: URIs, they are not valid for loading. */
- if (g_str_has_prefix (address, EPHY_ABOUT_SCHEME))
- {
- session_tab->url = g_strconcat ("about", address + EPHY_ABOUT_SCHEME_LEN, NULL);
- }
- else if (g_str_equal (address, "about:blank"))
- {
- /* EphyWebView address is NULL between load_uri() and WEBKIT_LOAD_STARTED,
- * but WebKitWebView knows the pending API request URL, so use that instead of about:blank.
- */
- session_tab->url = g_strdup (webkit_web_view_get_uri (WEBKIT_WEB_VIEW (web_view)));
- }
- else
- {
- session_tab->url = g_strdup (address);
- }
-
- session_tab->title = g_strdup (ephy_embed_get_title (embed));
- session_tab->loading = (ephy_web_view_is_loading (web_view) &&
- !ephy_embed_has_load_pending (embed) &&
- !session->closing);
- session_tab->crashed = (error_page == EPHY_WEB_VIEW_ERROR_PAGE_CRASH ||
- error_page == EPHY_WEB_VIEW_ERROR_PROCESS_CRASH);
- session_tab->state = webkit_web_view_get_session_state (WEBKIT_WEB_VIEW (web_view));
-
- return session_tab;
+session_tab_new (EphyEmbed *embed,
+ EphySession *session)
+{
+ SessionTab *session_tab;
+ const char *address;
+ EphyWebView *web_view = ephy_embed_get_web_view (embed);
+ EphyWebViewErrorPage error_page = ephy_web_view_get_error_page (web_view);
+
+ session_tab = g_slice_new (SessionTab);
+
+ address = ephy_web_view_get_address (web_view);
+ /* Do not store ephy-about: URIs, they are not valid for loading. */
+ if (g_str_has_prefix (address, EPHY_ABOUT_SCHEME)) {
+ session_tab->url = g_strconcat ("about", address + EPHY_ABOUT_SCHEME_LEN, NULL);
+ } else if (g_str_equal (address, "about:blank")) {
+ /* EphyWebView address is NULL between load_uri() and WEBKIT_LOAD_STARTED,
+ * but WebKitWebView knows the pending API request URL, so use that instead of about:blank.
+ */
+ session_tab->url = g_strdup (webkit_web_view_get_uri (WEBKIT_WEB_VIEW (web_view)));
+ } else {
+ session_tab->url = g_strdup (address);
+ }
+
+ session_tab->title = g_strdup (ephy_embed_get_title (embed));
+ session_tab->loading = (ephy_web_view_is_loading (web_view) &&
+ !ephy_embed_has_load_pending (embed) &&
+ !session->closing);
+ session_tab->crashed = (error_page == EPHY_WEB_VIEW_ERROR_PAGE_CRASH ||
+ error_page == EPHY_WEB_VIEW_ERROR_PROCESS_CRASH);
+ session_tab->state = webkit_web_view_get_session_state (WEBKIT_WEB_VIEW (web_view));
+
+ return session_tab;
}
static void
session_tab_free (SessionTab *tab)
{
- g_free (tab->url);
- g_free (tab->title);
- g_clear_pointer (&tab->state, webkit_web_view_session_state_unref);
+ g_free (tab->url);
+ g_free (tab->title);
+ g_clear_pointer (&tab->state, webkit_web_view_session_state_unref);
- g_slice_free (SessionTab, tab);
+ g_slice_free (SessionTab, tab);
}
typedef struct {
- GdkRectangle geometry;
- char *role;
+ GdkRectangle geometry;
+ char *role;
- GList *tabs;
- gint active_tab;
+ GList *tabs;
+ gint active_tab;
} SessionWindow;
static SessionWindow *
-session_window_new (EphyWindow *window,
- EphySession *session)
+session_window_new (EphyWindow *window,
+ EphySession *session)
{
- SessionWindow *session_window;
- GList *tabs, *l;
- GtkNotebook *notebook;
+ SessionWindow *session_window;
+ GList *tabs, *l;
+ GtkNotebook *notebook;
- tabs = ephy_embed_container_get_children (EPHY_EMBED_CONTAINER (window));
- /* Do not save an empty EphyWindow.
- * This only happens when the window was newly opened.
- */
- if (!tabs)
- {
- return NULL;
- }
+ tabs = ephy_embed_container_get_children (EPHY_EMBED_CONTAINER (window));
+ /* Do not save an empty EphyWindow.
+ * This only happens when the window was newly opened.
+ */
+ if (!tabs) {
+ return NULL;
+ }
- session_window = g_slice_new0 (SessionWindow);
- get_window_geometry (GTK_WINDOW (window), &session_window->geometry);
- session_window->role = g_strdup (gtk_window_get_role (GTK_WINDOW (window)));
+ session_window = g_slice_new0 (SessionWindow);
+ get_window_geometry (GTK_WINDOW (window), &session_window->geometry);
+ session_window->role = g_strdup (gtk_window_get_role (GTK_WINDOW (window)));
- for (l = tabs; l != NULL; l = l->next)
- {
- SessionTab *tab;
+ for (l = tabs; l != NULL; l = l->next) {
+ SessionTab *tab;
- tab = session_tab_new (EPHY_EMBED (l->data), session);
- session_window->tabs = g_list_prepend (session_window->tabs, tab);
- }
- g_list_free (tabs);
- session_window->tabs = g_list_reverse (session_window->tabs);
+ tab = session_tab_new (EPHY_EMBED (l->data), session);
+ session_window->tabs = g_list_prepend (session_window->tabs, tab);
+ }
+ g_list_free (tabs);
+ session_window->tabs = g_list_reverse (session_window->tabs);
- notebook = GTK_NOTEBOOK (ephy_window_get_notebook (window));
- session_window->active_tab = gtk_notebook_get_current_page (notebook);
+ notebook = GTK_NOTEBOOK (ephy_window_get_notebook (window));
+ session_window->active_tab = gtk_notebook_get_current_page (notebook);
- return session_window;
+ return session_window;
}
static void
session_window_free (SessionWindow *session_window)
{
- g_free (session_window->role);
- g_list_free_full (session_window->tabs, (GDestroyNotify)session_tab_free);
+ g_free (session_window->role);
+ g_list_free_full (session_window->tabs, (GDestroyNotify)session_tab_free);
- g_slice_free (SessionWindow, session_window);
+ g_slice_free (SessionWindow, session_window);
}
typedef struct {
- EphySession *session;
+ EphySession *session;
- GList *windows;
+ GList *windows;
} SaveData;
static SaveData *
save_data_new (EphySession *session)
{
- SaveData *data;
- EphyShell *shell = ephy_shell_get_default ();
- GList *windows, *w;
+ SaveData *data;
+ EphyShell *shell = ephy_shell_get_default ();
+ GList *windows, *w;
- data = g_slice_new0 (SaveData);
- data->session = g_object_ref (session);
+ data = g_slice_new0 (SaveData);
+ data->session = g_object_ref (session);
- windows = gtk_application_get_windows (GTK_APPLICATION (shell));
- for (w = windows; w != NULL ; w = w->next)
- {
- SessionWindow *session_window;
+ windows = gtk_application_get_windows (GTK_APPLICATION (shell));
+ for (w = windows; w != NULL; w = w->next) {
+ SessionWindow *session_window;
- session_window = session_window_new (EPHY_WINDOW (w->data), session);
- if (session_window)
- data->windows = g_list_prepend (data->windows, session_window);
- }
- data->windows = g_list_reverse (data->windows);
+ session_window = session_window_new (EPHY_WINDOW (w->data), session);
+ if (session_window)
+ data->windows = g_list_prepend (data->windows, session_window);
+ }
+ data->windows = g_list_reverse (data->windows);
- return data;
+ return data;
}
static void
save_data_free (SaveData *data)
{
- g_list_free_full (data->windows, (GDestroyNotify)session_window_free);
+ g_list_free_full (data->windows, (GDestroyNotify)session_window_free);
- g_object_unref (data->session);
+ g_object_unref (data->session);
- g_slice_free (SaveData, data);
+ g_slice_free (SaveData, data);
}
static int
write_tab (xmlTextWriterPtr writer,
- SessionTab *tab)
-{
- int ret;
-
- ret = xmlTextWriterStartElement (writer, (xmlChar *) "embed");
- if (ret < 0) return ret;
-
- ret = xmlTextWriterWriteAttribute (writer, (xmlChar *) "url",
- (const xmlChar *) tab->url);
- if (ret < 0) return ret;
-
- ret = xmlTextWriterWriteAttribute (writer, (xmlChar *) "title",
- (const xmlChar *) tab->title);
- if (ret < 0) return ret;
-
- if (tab->loading)
- {
- ret = xmlTextWriterWriteAttribute (writer,
- (const xmlChar *) "loading",
- (const xmlChar *) "true");
- if (ret < 0) return ret;
- }
-
- if (tab->crashed)
- {
- ret = xmlTextWriterWriteAttribute (writer,
- (const xmlChar *) "crashed",
- (const xmlChar *) "true");
- if (ret < 0) return ret;
- }
-
- if (tab->state)
- {
- GBytes *bytes;
-
- bytes = webkit_web_view_session_state_serialize (tab->state);
- if (bytes)
- {
- gchar *base64;
- gconstpointer data;
- gsize data_length;
-
- data = g_bytes_get_data (bytes, &data_length);
- base64 = g_base64_encode (data, data_length);
- ret = xmlTextWriterWriteAttribute (writer,
- (const xmlChar *) "history",
- (const xmlChar *) base64);
- g_free (base64);
- g_bytes_unref (bytes);
- }
- }
-
- ret = xmlTextWriterEndElement (writer); /* embed */
- return ret;
+ SessionTab *tab)
+{
+ int ret;
+
+ ret = xmlTextWriterStartElement (writer, (xmlChar *)"embed");
+ if (ret < 0) return ret;
+
+ ret = xmlTextWriterWriteAttribute (writer, (xmlChar *)"url",
+ (const xmlChar *)tab->url);
+ if (ret < 0) return ret;
+
+ ret = xmlTextWriterWriteAttribute (writer, (xmlChar *)"title",
+ (const xmlChar *)tab->title);
+ if (ret < 0) return ret;
+
+ if (tab->loading) {
+ ret = xmlTextWriterWriteAttribute (writer,
+ (const xmlChar *)"loading",
+ (const xmlChar *)"true");
+ if (ret < 0) return ret;
+ }
+
+ if (tab->crashed) {
+ ret = xmlTextWriterWriteAttribute (writer,
+ (const xmlChar *)"crashed",
+ (const xmlChar *)"true");
+ if (ret < 0) return ret;
+ }
+
+ if (tab->state) {
+ GBytes *bytes;
+
+ bytes = webkit_web_view_session_state_serialize (tab->state);
+ if (bytes) {
+ gchar *base64;
+ gconstpointer data;
+ gsize data_length;
+
+ data = g_bytes_get_data (bytes, &data_length);
+ base64 = g_base64_encode (data, data_length);
+ ret = xmlTextWriterWriteAttribute (writer,
+ (const xmlChar *)"history",
+ (const xmlChar *)base64);
+ g_free (base64);
+ g_bytes_unref (bytes);
+ }
+ }
+
+ ret = xmlTextWriterEndElement (writer); /* embed */
+ return ret;
}
static int
write_window_geometry (xmlTextWriterPtr writer,
- GdkRectangle *geometry)
+ GdkRectangle *geometry)
{
- int ret;
+ int ret;
- /* set window properties */
- ret = xmlTextWriterWriteFormatAttribute (writer, (const xmlChar *) "x", "%d",
- geometry->x);
- if (ret < 0) return ret;
+ /* set window properties */
+ ret = xmlTextWriterWriteFormatAttribute (writer, (const xmlChar *)"x", "%d",
+ geometry->x);
+ if (ret < 0) return ret;
- ret = xmlTextWriterWriteFormatAttribute (writer, (const xmlChar *) "y", "%d",
- geometry->y);
- if (ret < 0) return ret;
+ ret = xmlTextWriterWriteFormatAttribute (writer, (const xmlChar *)"y", "%d",
+ geometry->y);
+ if (ret < 0) return ret;
- ret = xmlTextWriterWriteFormatAttribute (writer, (const xmlChar *) "width", "%d",
- geometry->width);
- if (ret < 0) return ret;
+ ret = xmlTextWriterWriteFormatAttribute (writer, (const xmlChar *)"width", "%d",
+ geometry->width);
+ if (ret < 0) return ret;
- ret = xmlTextWriterWriteFormatAttribute (writer, (const xmlChar *) "height", "%d",
- geometry->height);
- return ret;
+ ret = xmlTextWriterWriteFormatAttribute (writer, (const xmlChar *)"height", "%d",
+ geometry->height);
+ return ret;
}
static int
write_ephy_window (xmlTextWriterPtr writer,
- SessionWindow *window)
+ SessionWindow *window)
{
- GList *l;
- int ret;
+ GList *l;
+ int ret;
- ret = xmlTextWriterStartElement (writer, (xmlChar *) "window");
- if (ret < 0) return ret;
+ ret = xmlTextWriterStartElement (writer, (xmlChar *)"window");
+ if (ret < 0) return ret;
- ret = write_window_geometry (writer, &window->geometry);
- if (ret < 0) return ret;
+ ret = write_window_geometry (writer, &window->geometry);
+ if (ret < 0) return ret;
- ret = xmlTextWriterWriteFormatAttribute (writer, (const xmlChar *) "active-tab", "%d",
- window->active_tab);
- if (ret < 0) return ret;
+ ret = xmlTextWriterWriteFormatAttribute (writer, (const xmlChar *)"active-tab", "%d",
+ window->active_tab);
+ if (ret < 0) return ret;
- if (window->role != NULL)
- {
- ret = xmlTextWriterWriteAttribute (writer,
- (const xmlChar *) "role",
- (const xmlChar *) window->role);
- if (ret < 0) return ret;
- }
+ if (window->role != NULL) {
+ ret = xmlTextWriterWriteAttribute (writer,
+ (const xmlChar *)"role",
+ (const xmlChar *)window->role);
+ if (ret < 0) return ret;
+ }
- for (l = window->tabs; l != NULL; l = l->next)
- {
- SessionTab *tab = (SessionTab *) l->data;
- ret = write_tab (writer, tab);
- if (ret < 0) break;
- }
- if (ret < 0) return ret;
+ for (l = window->tabs; l != NULL; l = l->next) {
+ SessionTab *tab = (SessionTab *)l->data;
+ ret = write_tab (writer, tab);
+ if (ret < 0) break;
+ }
+ if (ret < 0) return ret;
- ret = xmlTextWriterEndElement (writer); /* window */
- return ret;
+ ret = xmlTextWriterEndElement (writer); /* window */
+ return ret;
}
static void
-save_session_in_thread_finished_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
+save_session_in_thread_finished_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
{
- g_application_release (G_APPLICATION (ephy_shell_get_default ()));
+ g_application_release (G_APPLICATION (ephy_shell_get_default ()));
}
static void
-save_session_sync (GTask *task,
- gpointer source_object,
- gpointer task_data,
- GCancellable *cancellable)
+save_session_sync (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
- SaveData *data = (SaveData *)g_task_get_task_data (task);
- xmlBufferPtr buffer;
- xmlTextWriterPtr writer;
- GList *w;
- int ret = -1;
+ SaveData *data = (SaveData *)g_task_get_task_data (task);
+ xmlBufferPtr buffer;
+ xmlTextWriterPtr writer;
+ GList *w;
+ int ret = -1;
- buffer = xmlBufferCreate ();
- writer = xmlNewTextWriterMemory (buffer, 0);
- if (writer == NULL) goto out;
+ buffer = xmlBufferCreate ();
+ writer = xmlNewTextWriterMemory (buffer, 0);
+ if (writer == NULL) goto out;
- ret = xmlTextWriterSetIndent (writer, 1);
- if (ret < 0) goto out;
+ ret = xmlTextWriterSetIndent (writer, 1);
+ if (ret < 0) goto out;
- ret = xmlTextWriterSetIndentString (writer, (const xmlChar *) " ");
- if (ret < 0) goto out;
+ ret = xmlTextWriterSetIndentString (writer, (const xmlChar *)" ");
+ if (ret < 0) goto out;
- START_PROFILER ("Saving session")
+ START_PROFILER ("Saving session")
- ret = xmlTextWriterStartDocument (writer, "1.0", NULL, NULL);
- if (ret < 0) goto out;
+ ret = xmlTextWriterStartDocument (writer, "1.0", NULL, NULL);
+ if (ret < 0) goto out;
- /* create and set the root node for the session */
- ret = xmlTextWriterStartElement (writer, (const xmlChar *) "session");
- if (ret < 0) goto out;
+ /* create and set the root node for the session */
+ ret = xmlTextWriterStartElement (writer, (const xmlChar *)"session");
+ if (ret < 0) goto out;
- /* iterate through all the windows */
- for (w = data->windows; w != NULL && ret >= 0; w = w->next)
- {
- ret = write_ephy_window (writer, (SessionWindow *) w->data);
- }
- if (ret < 0) goto out;
+ /* iterate through all the windows */
+ for (w = data->windows; w != NULL && ret >= 0; w = w->next) {
+ ret = write_ephy_window (writer, (SessionWindow *)w->data);
+ }
+ if (ret < 0) goto out;
- ret = xmlTextWriterEndElement (writer); /* session */
- if (ret < 0) goto out;
+ ret = xmlTextWriterEndElement (writer); /* session */
+ if (ret < 0) goto out;
- ret = xmlTextWriterEndDocument (writer);
+ ret = xmlTextWriterEndDocument (writer);
-out:
- if (writer)
- xmlFreeTextWriter (writer);
+ out:
+ if (writer)
+ xmlFreeTextWriter (writer);
- if (ret >= 0 && !g_cancellable_is_cancelled (cancellable))
- {
- GError *error = NULL;
- GFile *session_file;
+ if (ret >= 0 && !g_cancellable_is_cancelled (cancellable)) {
+ GError *error = NULL;
+ GFile *session_file;
- session_file = get_session_file (SESSION_STATE);
+ session_file = get_session_file (SESSION_STATE);
- if (!g_file_replace_contents (session_file,
- (const char *)buffer->content,
- buffer->use,
- NULL, TRUE, 0, NULL,
- cancellable, &error))
- {
- if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
- {
- g_warning ("Error saving session: %s", error->message);
- }
- g_error_free (error);
- }
+ if (!g_file_replace_contents (session_file,
+ (const char *)buffer->content,
+ buffer->use,
+ NULL, TRUE, 0, NULL,
+ cancellable, &error)) {
+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
+ g_warning ("Error saving session: %s", error->message);
+ }
+ g_error_free (error);
+ }
- g_object_unref (session_file);
- }
+ g_object_unref (session_file);
+ }
- xmlBufferFree (buffer);
+ xmlBufferFree (buffer);
- g_task_return_boolean (task, TRUE);
+ g_task_return_boolean (task, TRUE);
- STOP_PROFILER ("Saving session")
+ STOP_PROFILER ("Saving session")
}
static EphySession *
ephy_session_save_idle_started (EphySession *session)
{
- g_application_hold (G_APPLICATION (ephy_shell_get_default ()));
- return g_object_ref (session);
+ g_application_hold (G_APPLICATION (ephy_shell_get_default ()));
+ return g_object_ref (session);
}
static void
ephy_session_save_idle_finished (EphySession *session)
{
- g_application_release (G_APPLICATION (ephy_shell_get_default ()));
- g_object_unref (session);
+ g_application_release (G_APPLICATION (ephy_shell_get_default ()));
+ g_object_unref (session);
}
static gboolean
ephy_session_save_idle_cb (EphySession *session)
{
- EphyShell *shell = ephy_shell_get_default ();
- SaveData *data;
- GTask *task;
+ EphyShell *shell = ephy_shell_get_default ();
+ SaveData *data;
+ GTask *task;
- session->save_source_id = 0;
+ session->save_source_id = 0;
- if (session->save_cancellable)
- {
- g_cancellable_cancel (session->save_cancellable);
- g_object_unref (session->save_cancellable);
- session->save_cancellable = NULL;
- }
+ if (session->save_cancellable) {
+ g_cancellable_cancel (session->save_cancellable);
+ g_object_unref (session->save_cancellable);
+ session->save_cancellable = NULL;
+ }
- LOG ("ephy_sesion_save");
+ LOG ("ephy_sesion_save");
- if (ephy_shell_get_n_windows (shell) == 0)
- {
- session_delete (session);
- return G_SOURCE_REMOVE;
- }
+ if (ephy_shell_get_n_windows (shell) == 0) {
+ session_delete (session);
+ return G_SOURCE_REMOVE;
+ }
- g_application_hold (G_APPLICATION (ephy_shell_get_default ()));
- session->save_cancellable = g_cancellable_new ();
- data = save_data_new (session);
- task = g_task_new (session, session->save_cancellable,
- save_session_in_thread_finished_cb, NULL);
- g_task_set_task_data (task, data, (GDestroyNotify)save_data_free);
- g_task_run_in_thread (task, save_session_sync);
- g_object_unref (task);
+ g_application_hold (G_APPLICATION (ephy_shell_get_default ()));
+ session->save_cancellable = g_cancellable_new ();
+ data = save_data_new (session);
+ task = g_task_new (session, session->save_cancellable,
+ save_session_in_thread_finished_cb, NULL);
+ g_task_set_task_data (task, data, (GDestroyNotify)save_data_free);
+ g_task_run_in_thread (task, save_session_sync);
+ g_object_unref (task);
- return G_SOURCE_REMOVE;
+ return G_SOURCE_REMOVE;
}
void
ephy_session_save (EphySession *session)
{
- EphyPrefsRestoreSessionPolicy policy;
+ EphyPrefsRestoreSessionPolicy policy;
- g_return_if_fail (EPHY_IS_SESSION (session));
+ g_return_if_fail (EPHY_IS_SESSION (session));
- if (session->save_source_id)
- {
- return;
- }
+ if (session->save_source_id) {
+ return;
+ }
- if (session->dont_save)
- {
- return;
- }
+ if (session->dont_save) {
+ return;
+ }
- policy = g_settings_get_enum (EPHY_SETTINGS_MAIN, EPHY_PREFS_RESTORE_SESSION_POLICY);
- if (policy == EPHY_PREFS_RESTORE_SESSION_POLICY_NEVER)
- {
- return;
- }
+ policy = g_settings_get_enum (EPHY_SETTINGS_MAIN, EPHY_PREFS_RESTORE_SESSION_POLICY);
+ if (policy == EPHY_PREFS_RESTORE_SESSION_POLICY_NEVER) {
+ return;
+ }
- session->save_source_id = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT_IDLE, 1,
- (GSourceFunc)ephy_session_save_idle_cb,
- ephy_session_save_idle_started (session),
- (GDestroyNotify)ephy_session_save_idle_finished);
+ session->save_source_id = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT_IDLE, 1,
+ (GSourceFunc)ephy_session_save_idle_cb,
+ ephy_session_save_idle_started (session),
+ (GDestroyNotify)ephy_session_save_idle_finished);
}
static void
confirm_before_recover (EphyWindow *window, const char *url, const char *title)
{
- EphyEmbed *embed;
+ EphyEmbed *embed;
- embed = ephy_shell_new_tab_full (ephy_shell_get_default (),
- title, NULL,
- window, NULL,
- EPHY_NEW_TAB_APPEND_LAST,
- 0);
+ embed = ephy_shell_new_tab_full (ephy_shell_get_default (),
+ title, NULL,
+ window, NULL,
+ EPHY_NEW_TAB_APPEND_LAST,
+ 0);
- ephy_web_view_load_error_page (ephy_embed_get_web_view (embed), url,
- EPHY_WEB_VIEW_ERROR_PAGE_CRASH, NULL);
+ ephy_web_view_load_error_page (ephy_embed_get_web_view (embed), url,
+ EPHY_WEB_VIEW_ERROR_PAGE_CRASH, NULL);
}
static void
-restore_geometry (GtkWindow *window,
- GdkRectangle *geometry)
+restore_geometry (GtkWindow *window,
+ GdkRectangle *geometry)
{
- if (geometry->x >= 0 && geometry->y >= 0)
- {
- gtk_window_move (window, geometry->x, geometry->y);
- }
+ if (geometry->x >= 0 && geometry->y >= 0) {
+ gtk_window_move (window, geometry->x, geometry->y);
+ }
- if (geometry->width > 0 && geometry->height > 0)
- {
- gtk_window_set_default_size (window, geometry->width, geometry->height);
- }
+ if (geometry->width > 0 && geometry->height > 0) {
+ gtk_window_set_default_size (window, geometry->width, geometry->height);
+ }
}
typedef struct {
- EphySession *session;
- guint32 user_time;
+ EphySession *session;
+ guint32 user_time;
- EphyWindow *window;
- gboolean is_first_window;
- gint active_tab;
+ EphyWindow *window;
+ gboolean is_first_window;
+ gint active_tab;
- gboolean is_first_tab;
+ gboolean is_first_tab;
} SessionParserContext;
static SessionParserContext *
session_parser_context_new (EphySession *session,
- guint32 user_time)
+ guint32 user_time)
{
- SessionParserContext *context;
+ SessionParserContext *context;
- context = g_slice_new0 (SessionParserContext);
- context->session = g_object_ref (session);
- context->user_time = user_time;
- context->is_first_window = TRUE;
+ context = g_slice_new0 (SessionParserContext);
+ context->session = g_object_ref (session);
+ context->user_time = user_time;
+ context->is_first_window = TRUE;
- return context;
+ return context;
}
static void
session_parser_context_free (SessionParserContext *context)
{
- g_object_unref (context->session);
+ g_object_unref (context->session);
- g_slice_free (SessionParserContext, context);
+ g_slice_free (SessionParserContext, context);
}
static void
session_parse_window (SessionParserContext *context,
- const gchar **names,
- const gchar **values)
-{
- GdkRectangle geometry = { -1, -1, 0, 0 };
- guint i;
-
- context->window = ephy_window_new ();
-
- for (i = 0; names[i]; i++)
- {
- gulong int_value;
-
- if (strcmp (names[i], "x") == 0)
- {
- ephy_string_to_int (values[i], &int_value);
- geometry.x = int_value;
- }
- else if (strcmp (names[i], "y") == 0)
- {
- ephy_string_to_int (values[i], &int_value);
- geometry.y = int_value;
- }
- else if (strcmp (names[i], "width") == 0)
- {
- ephy_string_to_int (values[i], &int_value);
- geometry.width = int_value;
- }
- else if (strcmp (names[i], "height") == 0)
- {
- ephy_string_to_int (values[i], &int_value);
- geometry.height = int_value;
- }
- else if (strcmp (names[i], "role") == 0)
- {
- gtk_window_set_role (GTK_WINDOW (context->window), values[i]);
- }
- else if (strcmp (names[i], "active-tab") == 0)
- {
- ephy_string_to_int (values[i], &int_value);
- context->active_tab = int_value;
- }
- }
-
- restore_geometry (GTK_WINDOW (context->window), &geometry);
- ephy_gui_window_update_user_time (GTK_WIDGET (context->window), context->user_time);
+ const gchar **names,
+ const gchar **values)
+{
+ GdkRectangle geometry = { -1, -1, 0, 0 };
+ guint i;
+
+ context->window = ephy_window_new ();
+
+ for (i = 0; names[i]; i++) {
+ gulong int_value;
+
+ if (strcmp (names[i], "x") == 0) {
+ ephy_string_to_int (values[i], &int_value);
+ geometry.x = int_value;
+ } else if (strcmp (names[i], "y") == 0) {
+ ephy_string_to_int (values[i], &int_value);
+ geometry.y = int_value;
+ } else if (strcmp (names[i], "width") == 0) {
+ ephy_string_to_int (values[i], &int_value);
+ geometry.width = int_value;
+ } else if (strcmp (names[i], "height") == 0) {
+ ephy_string_to_int (values[i], &int_value);
+ geometry.height = int_value;
+ } else if (strcmp (names[i], "role") == 0) {
+ gtk_window_set_role (GTK_WINDOW (context->window), values[i]);
+ } else if (strcmp (names[i], "active-tab") == 0) {
+ ephy_string_to_int (values[i], &int_value);
+ context->active_tab = int_value;
+ }
+ }
+
+ restore_geometry (GTK_WINDOW (context->window), &geometry);
+ ephy_gui_window_update_user_time (GTK_WIDGET (context->window), context->user_time);
}
static void
session_parse_embed (SessionParserContext *context,
- const gchar **names,
- const gchar **values)
-{
- const char *url = NULL;
- const char *title = NULL;
- const char *history = NULL;
- gboolean was_loading = FALSE;
- gboolean crashed = FALSE;
- gboolean is_blank_page = FALSE;
- guint i;
-
- for (i = 0; names[i]; i++)
- {
- if (strcmp (names[i], "url") == 0)
- {
- url = values[i];
- is_blank_page = (strcmp (url, "about:blank") == 0 ||
- strcmp (url, "about:overview") == 0);
- }
- else if (strcmp (names[i], "title") == 0)
- {
- title = values[i];
- }
- else if (strcmp (names[i], "loading") == 0)
- {
- was_loading = strcmp (values[i], "true") == 0;
- }
- else if (strcmp (names[i], "crashed") == 0)
- {
- crashed = strcmp (values[i], "true") == 0;
- }
- else if (strcmp (names[i], "history") == 0)
- {
- history = values[i];
- }
- }
-
- /* In the case that crash happens before we receive the URL from the server,
- * this will open an about:blank tab.
- * See http://bugzilla.gnome.org/show_bug.cgi?id=591294
- * Otherwise, if the web was fully loaded, it is reloaded again.
- */
- if ((!was_loading || is_blank_page) && !crashed)
- {
- EphyNewTabFlags flags;
- EphyEmbed *embed;
- EphyWebView *web_view;
- gboolean delay_loading;
- WebKitWebViewSessionState* state = NULL;
-
- delay_loading = g_settings_get_boolean (EPHY_SETTINGS_MAIN,
- EPHY_PREFS_RESTORE_SESSION_DELAYING_LOADS);
-
- flags = EPHY_NEW_TAB_APPEND_LAST;
-
- embed = ephy_shell_new_tab_full (ephy_shell_get_default (),
- title, NULL,
- context->window, NULL, flags,
- 0);
-
- web_view = ephy_embed_get_web_view (embed);
- if (history) {
- guchar *data;
- gsize data_length;
- GBytes *history_data;
-
- data = g_base64_decode (history, &data_length);
- history_data = g_bytes_new_take (data, data_length);
- state = webkit_web_view_session_state_new (history_data);
- g_bytes_unref (history_data);
- }
-
- if (delay_loading)
- {
- WebKitURIRequest *request = webkit_uri_request_new (url);
-
- ephy_embed_set_delayed_load_request (embed, request, state);
- ephy_web_view_set_placeholder (web_view, url, title);
- g_object_unref (request);
- }
- else
- {
- WebKitBackForwardList *bf_list;
- WebKitBackForwardListItem *item;
-
- if (state)
- {
- webkit_web_view_restore_session_state (WEBKIT_WEB_VIEW (web_view), state);
- }
-
- bf_list = webkit_web_view_get_back_forward_list (WEBKIT_WEB_VIEW (web_view));
- item = webkit_back_forward_list_get_current_item (bf_list);
- if (item)
- {
- webkit_web_view_go_to_back_forward_list_item (WEBKIT_WEB_VIEW (web_view), item);
- }
- else
- {
- ephy_web_view_load_url (web_view, url);
- }
- }
-
- if (state)
- {
- webkit_web_view_session_state_unref (state);
- }
- }
- else if (url && (was_loading || crashed))
- {
- /* This page was loading during a UI process crash
- * (was_loading == TRUE) or a web process crash
- * (crashed == TRUE) and might make Epiphany crash again.
- */
- confirm_before_recover (context->window, url, title);
- }
+ const gchar **names,
+ const gchar **values)
+{
+ const char *url = NULL;
+ const char *title = NULL;
+ const char *history = NULL;
+ gboolean was_loading = FALSE;
+ gboolean crashed = FALSE;
+ gboolean is_blank_page = FALSE;
+ guint i;
+
+ for (i = 0; names[i]; i++) {
+ if (strcmp (names[i], "url") == 0) {
+ url = values[i];
+ is_blank_page = (strcmp (url, "about:blank") == 0 ||
+ strcmp (url, "about:overview") == 0);
+ } else if (strcmp (names[i], "title") == 0) {
+ title = values[i];
+ } else if (strcmp (names[i], "loading") == 0) {
+ was_loading = strcmp (values[i], "true") == 0;
+ } else if (strcmp (names[i], "crashed") == 0) {
+ crashed = strcmp (values[i], "true") == 0;
+ } else if (strcmp (names[i], "history") == 0) {
+ history = values[i];
+ }
+ }
+
+ /* In the case that crash happens before we receive the URL from the server,
+ * this will open an about:blank tab.
+ * See http://bugzilla.gnome.org/show_bug.cgi?id=591294
+ * Otherwise, if the web was fully loaded, it is reloaded again.
+ */
+ if ((!was_loading || is_blank_page) && !crashed) {
+ EphyNewTabFlags flags;
+ EphyEmbed *embed;
+ EphyWebView *web_view;
+ gboolean delay_loading;
+ WebKitWebViewSessionState *state = NULL;
+
+ delay_loading = g_settings_get_boolean (EPHY_SETTINGS_MAIN,
+ EPHY_PREFS_RESTORE_SESSION_DELAYING_LOADS);
+
+ flags = EPHY_NEW_TAB_APPEND_LAST;
+
+ embed = ephy_shell_new_tab_full (ephy_shell_get_default (),
+ title, NULL,
+ context->window, NULL, flags,
+ 0);
+
+ web_view = ephy_embed_get_web_view (embed);
+ if (history) {
+ guchar *data;
+ gsize data_length;
+ GBytes *history_data;
+
+ data = g_base64_decode (history, &data_length);
+ history_data = g_bytes_new_take (data, data_length);
+ state = webkit_web_view_session_state_new (history_data);
+ g_bytes_unref (history_data);
+ }
+
+ if (delay_loading) {
+ WebKitURIRequest *request = webkit_uri_request_new (url);
+
+ ephy_embed_set_delayed_load_request (embed, request, state);
+ ephy_web_view_set_placeholder (web_view, url, title);
+ g_object_unref (request);
+ } else {
+ WebKitBackForwardList *bf_list;
+ WebKitBackForwardListItem *item;
+
+ if (state) {
+ webkit_web_view_restore_session_state (WEBKIT_WEB_VIEW (web_view), state);
+ }
+
+ bf_list = webkit_web_view_get_back_forward_list (WEBKIT_WEB_VIEW (web_view));
+ item = webkit_back_forward_list_get_current_item (bf_list);
+ if (item) {
+ webkit_web_view_go_to_back_forward_list_item (WEBKIT_WEB_VIEW (web_view), item);
+ } else {
+ ephy_web_view_load_url (web_view, url);
+ }
+ }
+
+ if (state) {
+ webkit_web_view_session_state_unref (state);
+ }
+ } else if (url && (was_loading || crashed)) {
+ /* This page was loading during a UI process crash
+ * (was_loading == TRUE) or a web process crash
+ * (crashed == TRUE) and might make Epiphany crash again.
+ */
+ confirm_before_recover (context->window, url, title);
+ }
}
static void
-session_start_element (GMarkupParseContext *ctx,
- const gchar *element_name,
- const gchar **names,
- const gchar **values,
- gpointer user_data,
- GError **error)
-{
- SessionParserContext *context = (SessionParserContext *)user_data;
-
- if (strcmp (element_name, "window") == 0)
- {
- session_parse_window (context, names, values);
- context->is_first_tab = TRUE;
- }
- else if (strcmp (element_name, "embed") == 0)
- {
- session_parse_embed (context, names, values);
- }
+session_start_element (GMarkupParseContext *ctx,
+ const gchar *element_name,
+ const gchar **names,
+ const gchar **values,
+ gpointer user_data,
+ GError **error)
+{
+ SessionParserContext *context = (SessionParserContext *)user_data;
+
+ if (strcmp (element_name, "window") == 0) {
+ session_parse_window (context, names, values);
+ context->is_first_tab = TRUE;
+ } else if (strcmp (element_name, "embed") == 0) {
+ session_parse_embed (context, names, values);
+ }
}
static void
-session_end_element (GMarkupParseContext *ctx,
- const gchar *element_name,
- gpointer user_data,
- GError **error)
+session_end_element (GMarkupParseContext *ctx,
+ const gchar *element_name,
+ gpointer user_data,
+ GError **error)
{
- SessionParserContext *context = (SessionParserContext *)user_data;
+ SessionParserContext *context = (SessionParserContext *)user_data;
- if (strcmp (element_name, "window") == 0)
- {
- GtkWidget *notebook;
- EphyEmbedShell *shell = ephy_embed_shell_get_default ();
+ if (strcmp (element_name, "window") == 0) {
+ GtkWidget *notebook;
+ EphyEmbedShell *shell = ephy_embed_shell_get_default ();
- notebook = ephy_window_get_notebook (context->window);
- gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), context->active_tab);
+ notebook = ephy_window_get_notebook (context->window);
+ gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), context->active_tab);
- if (ephy_embed_shell_get_mode (ephy_embed_shell_get_default ()) != EPHY_EMBED_SHELL_MODE_TEST)
- {
- EphyEmbed *active_child;
+ if (ephy_embed_shell_get_mode (ephy_embed_shell_get_default ()) != EPHY_EMBED_SHELL_MODE_TEST) {
+ EphyEmbed *active_child;
- active_child = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (context->window));
- gtk_widget_grab_focus (GTK_WIDGET (active_child));
- gtk_widget_show (GTK_WIDGET (context->window));
- }
+ active_child = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (context->window));
+ gtk_widget_grab_focus (GTK_WIDGET (active_child));
+ gtk_widget_show (GTK_WIDGET (context->window));
+ }
- ephy_embed_shell_restored_window (shell);
+ ephy_embed_shell_restored_window (shell);
- context->window = NULL;
- context->active_tab = 0;
- context->is_first_window = FALSE;
- }
- else if (strcmp (element_name, "embed") == 0)
- {
- context->is_first_tab = FALSE;
- }
+ context->window = NULL;
+ context->active_tab = 0;
+ context->is_first_window = FALSE;
+ } else if (strcmp (element_name, "embed") == 0) {
+ context->is_first_tab = FALSE;
+ }
}
static const GMarkupParser session_parser = {
- session_start_element,
- session_end_element,
- NULL,
- NULL,
- NULL
+ session_start_element,
+ session_end_element,
+ NULL,
+ NULL,
+ NULL
};
typedef struct {
- EphyShell *shell;
- GMarkupParseContext *parser;
- char buffer[1024];
+ EphyShell *shell;
+ GMarkupParseContext *parser;
+ char buffer[1024];
} LoadFromStreamAsyncData;
static LoadFromStreamAsyncData *
load_from_stream_async_data_new (GMarkupParseContext *parser)
{
- LoadFromStreamAsyncData *data;
+ LoadFromStreamAsyncData *data;
- data = g_slice_new (LoadFromStreamAsyncData);
- data->shell = g_object_ref (ephy_shell_get_default ());
- data->parser = parser;
+ data = g_slice_new (LoadFromStreamAsyncData);
+ data->shell = g_object_ref (ephy_shell_get_default ());
+ data->parser = parser;
- return data;
+ return data;
}
static void
load_from_stream_async_data_free (LoadFromStreamAsyncData *data)
{
- g_object_unref (data->shell);
- g_markup_parse_context_free (data->parser);
+ g_object_unref (data->shell);
+ g_markup_parse_context_free (data->parser);
- g_slice_free (LoadFromStreamAsyncData, data);
+ g_slice_free (LoadFromStreamAsyncData, data);
}
static void
load_stream_complete (GTask *task)
{
- EphySession *session;
+ EphySession *session;
- g_task_return_boolean (task, TRUE);
+ g_task_return_boolean (task, TRUE);
- session = EPHY_SESSION (g_task_get_source_object (task));
- session->dont_save = FALSE;
+ session = EPHY_SESSION (g_task_get_source_object (task));
+ session->dont_save = FALSE;
- ephy_session_save (session);
+ ephy_session_save (session);
- g_object_unref (task);
+ g_object_unref (task);
- g_application_release (G_APPLICATION (ephy_shell_get_default ()));
+ g_application_release (G_APPLICATION (ephy_shell_get_default ()));
}
static void
-load_stream_complete_error (GTask *task,
- GError *error)
+load_stream_complete_error (GTask *task,
+ GError *error)
{
- EphySession *session;
- LoadFromStreamAsyncData *data;
- SessionParserContext *context;
+ EphySession *session;
+ LoadFromStreamAsyncData *data;
+ SessionParserContext *context;
- g_task_return_error (task, error);
+ g_task_return_error (task, error);
- session = EPHY_SESSION (g_task_get_source_object (task));
- session->dont_save = FALSE;
- /* If the session fails to load for whatever reason,
- * delete the file and open an empty window.
- */
- session_delete (session);
+ session = EPHY_SESSION (g_task_get_source_object (task));
+ session->dont_save = FALSE;
+ /* If the session fails to load for whatever reason,
+ * delete the file and open an empty window.
+ */
+ session_delete (session);
- data = g_task_get_task_data (task);
- context = (SessionParserContext *)g_markup_parse_context_get_user_data (data->parser);
- session_maybe_open_window (session, context->user_time);
+ data = g_task_get_task_data (task);
+ context = (SessionParserContext *)g_markup_parse_context_get_user_data (data->parser);
+ session_maybe_open_window (session, context->user_time);
- g_object_unref (task);
+ g_object_unref (task);
- g_application_release (G_APPLICATION (ephy_shell_get_default ()));
+ g_application_release (G_APPLICATION (ephy_shell_get_default ()));
}
static void
-load_stream_read_cb (GObject *object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GInputStream *stream = G_INPUT_STREAM (object);
- GTask *task = G_TASK (user_data);
- LoadFromStreamAsyncData *data;
- gssize bytes_read;
- GError *error = NULL;
-
- bytes_read = g_input_stream_read_finish (stream, result, &error);
- if (bytes_read < 0)
- {
- load_stream_complete_error (task, error);
-
- return;
- }
-
- data = g_task_get_task_data (task);
- if (bytes_read == 0)
- {
- if (!g_markup_parse_context_end_parse (data->parser, &error))
- {
- load_stream_complete_error (task, error);
- }
- else
- {
- load_stream_complete (task);
- }
-
- return;
- }
-
- if (!g_markup_parse_context_parse (data->parser, data->buffer, bytes_read, &error))
- {
- load_stream_complete_error (task, error);
-
- return;
- }
-
- g_input_stream_read_async (stream, data->buffer, sizeof (data->buffer),
- g_task_get_priority (task),
- g_task_get_cancellable (task),
- load_stream_read_cb, task);
+load_stream_read_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GInputStream *stream = G_INPUT_STREAM (object);
+ GTask *task = G_TASK (user_data);
+ LoadFromStreamAsyncData *data;
+ gssize bytes_read;
+ GError *error = NULL;
+
+ bytes_read = g_input_stream_read_finish (stream, result, &error);
+ if (bytes_read < 0) {
+ load_stream_complete_error (task, error);
+
+ return;
+ }
+
+ data = g_task_get_task_data (task);
+ if (bytes_read == 0) {
+ if (!g_markup_parse_context_end_parse (data->parser, &error)) {
+ load_stream_complete_error (task, error);
+ } else {
+ load_stream_complete (task);
+ }
+
+ return;
+ }
+
+ if (!g_markup_parse_context_parse (data->parser, data->buffer, bytes_read, &error)) {
+ load_stream_complete_error (task, error);
+
+ return;
+ }
+
+ g_input_stream_read_async (stream, data->buffer, sizeof (data->buffer),
+ g_task_get_priority (task),
+ g_task_get_cancellable (task),
+ load_stream_read_cb, task);
}
/**
@@ -1439,39 +1339,39 @@ load_stream_read_cb (GObject *object,
* the operation.
**/
void
-ephy_session_load_from_stream (EphySession *session,
- GInputStream *stream,
- guint32 user_time,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
+ephy_session_load_from_stream (EphySession *session,
+ GInputStream *stream,
+ guint32 user_time,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
- GTask *task;
- SessionParserContext *context;
- GMarkupParseContext *parser;
- LoadFromStreamAsyncData *data;
+ GTask *task;
+ SessionParserContext *context;
+ GMarkupParseContext *parser;
+ LoadFromStreamAsyncData *data;
- g_return_if_fail (EPHY_IS_SESSION (session));
- g_return_if_fail (G_IS_INPUT_STREAM (stream));
+ g_return_if_fail (EPHY_IS_SESSION (session));
+ g_return_if_fail (G_IS_INPUT_STREAM (stream));
- g_application_hold (G_APPLICATION (ephy_shell_get_default ()));
+ g_application_hold (G_APPLICATION (ephy_shell_get_default ()));
- session->dont_save = TRUE;
+ session->dont_save = TRUE;
- task = g_task_new (session, cancellable, callback, user_data);
- /* Use a priority lower than drawing events (HIGH_IDLE + 20) to make sure
- * the main window is shown as soon as possible at startup
- */
- g_task_set_priority (task, G_PRIORITY_HIGH_IDLE + 30);
+ task = g_task_new (session, cancellable, callback, user_data);
+ /* Use a priority lower than drawing events (HIGH_IDLE + 20) to make sure
+ * the main window is shown as soon as possible at startup
+ */
+ g_task_set_priority (task, G_PRIORITY_HIGH_IDLE + 30);
- context = session_parser_context_new (session, user_time);
- parser = g_markup_parse_context_new (&session_parser, 0, context, (GDestroyNotify)session_parser_context_free);
- data = load_from_stream_async_data_new (parser);
- g_task_set_task_data (task, data, (GDestroyNotify)load_from_stream_async_data_free);
+ context = session_parser_context_new (session, user_time);
+ parser = g_markup_parse_context_new (&session_parser, 0, context, (GDestroyNotify)session_parser_context_free);
+ data = load_from_stream_async_data_new (parser);
+ g_task_set_task_data (task, data, (GDestroyNotify)load_from_stream_async_data_free);
- g_input_stream_read_async (stream, data->buffer, sizeof (data->buffer),
- g_task_get_priority (task), cancellable,
- load_stream_read_cb, task);
+ g_input_stream_read_async (stream, data->buffer, sizeof (data->buffer),
+ g_task_get_priority (task), cancellable,
+ load_stream_read_cb, task);
}
/**
@@ -1486,85 +1386,79 @@ ephy_session_load_from_stream (EphySession *session,
* Returns: %TRUE if at least a window has been opened
**/
gboolean
-ephy_session_load_from_stream_finish (EphySession *session,
- GAsyncResult *result,
- GError **error)
+ephy_session_load_from_stream_finish (EphySession *session,
+ GAsyncResult *result,
+ GError **error)
{
- g_return_val_if_fail (g_task_is_valid (result, session), FALSE);
+ g_return_val_if_fail (g_task_is_valid (result, session), FALSE);
- return g_task_propagate_boolean (G_TASK (result), error);
+ return g_task_propagate_boolean (G_TASK (result), error);
}
typedef struct {
- guint32 user_time;
+ guint32 user_time;
} LoadAsyncData;
static LoadAsyncData *
load_async_data_new (guint32 user_time)
{
- LoadAsyncData *data;
+ LoadAsyncData *data;
- data = g_slice_new (LoadAsyncData);
- data->user_time = user_time;
+ data = g_slice_new (LoadAsyncData);
+ data->user_time = user_time;
- return data;
+ return data;
}
static void
load_async_data_free (LoadAsyncData *data)
{
- g_slice_free (LoadAsyncData, data);
+ g_slice_free (LoadAsyncData, data);
}
static void
-load_from_stream_cb (GObject *object,
- GAsyncResult *result,
- gpointer user_data)
+load_from_stream_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
{
- EphySession *session = EPHY_SESSION (object);
- GTask *task = G_TASK (user_data);
- GError *error = NULL;
+ EphySession *session = EPHY_SESSION (object);
+ GTask *task = G_TASK (user_data);
+ GError *error = NULL;
- if (!ephy_session_load_from_stream_finish (session, result, &error))
- {
- g_task_return_error (task, error);
- }
- else
- {
- g_task_return_boolean (task, TRUE);
- }
+ if (!ephy_session_load_from_stream_finish (session, result, &error)) {
+ g_task_return_error (task, error);
+ } else {
+ g_task_return_boolean (task, TRUE);
+ }
- g_object_unref (task);
+ g_object_unref (task);
}
static void
-session_read_cb (GObject *object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GFileInputStream *stream;
- GTask *task = G_TASK (user_data);
- GError *error = NULL;
-
- stream = g_file_read_finish (G_FILE (object), result, &error);
- if (stream)
- {
- EphySession *session;
- LoadAsyncData *data;
-
- session = EPHY_SESSION (g_task_get_source_object (task));
- data = g_task_get_task_data (task);
- ephy_session_load_from_stream (session, G_INPUT_STREAM (stream), data->user_time,
- g_task_get_cancellable (task), load_from_stream_cb, task);
- g_object_unref (stream);
- }
- else
- {
- g_task_return_error (task, error);
- g_object_unref (task);
- }
-
- g_application_release (G_APPLICATION (ephy_shell_get_default ()));
+session_read_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GFileInputStream *stream;
+ GTask *task = G_TASK (user_data);
+ GError *error = NULL;
+
+ stream = g_file_read_finish (G_FILE (object), result, &error);
+ if (stream) {
+ EphySession *session;
+ LoadAsyncData *data;
+
+ session = EPHY_SESSION (g_task_get_source_object (task));
+ data = g_task_get_task_data (task);
+ ephy_session_load_from_stream (session, G_INPUT_STREAM (stream), data->user_time,
+ g_task_get_cancellable (task), load_from_stream_cb, task);
+ g_object_unref (stream);
+ } else {
+ g_task_return_error (task, error);
+ g_object_unref (task);
+ }
+
+ g_application_release (G_APPLICATION (ephy_shell_get_default ()));
}
/**
@@ -1585,35 +1479,35 @@ session_read_cb (GObject *object,
* the operation.
**/
void
-ephy_session_load (EphySession *session,
- const char *filename,
- guint32 user_time,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
+ephy_session_load (EphySession *session,
+ const char *filename,
+ guint32 user_time,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
- GFile *save_to_file;
- GTask *task;
- LoadAsyncData *data;
+ GFile *save_to_file;
+ GTask *task;
+ LoadAsyncData *data;
- g_return_if_fail (EPHY_IS_SESSION (session));
- g_return_if_fail (filename);
+ g_return_if_fail (EPHY_IS_SESSION (session));
+ g_return_if_fail (filename);
- LOG ("ephy_sesion_load %s", filename);
+ LOG ("ephy_sesion_load %s", filename);
- g_application_hold (G_APPLICATION (ephy_shell_get_default ()));
+ g_application_hold (G_APPLICATION (ephy_shell_get_default ()));
- task = g_task_new (session, cancellable, callback, user_data);
- /* Use a priority lower than drawing events (HIGH_IDLE + 20) to make sure
- * the main window is shown as soon as possible at startup
- */
- g_task_set_priority (task, G_PRIORITY_HIGH_IDLE + 30);
+ task = g_task_new (session, cancellable, callback, user_data);
+ /* Use a priority lower than drawing events (HIGH_IDLE + 20) to make sure
+ * the main window is shown as soon as possible at startup
+ */
+ g_task_set_priority (task, G_PRIORITY_HIGH_IDLE + 30);
- save_to_file = get_session_file (filename);
- data = load_async_data_new (user_time);
- g_task_set_task_data (task, data, (GDestroyNotify)load_async_data_free);
- g_file_read_async (save_to_file, g_task_get_priority (task), cancellable, session_read_cb, task);
- g_object_unref (save_to_file);
+ save_to_file = get_session_file (filename);
+ data = load_async_data_new (user_time);
+ g_task_set_task_data (task, data, (GDestroyNotify)load_async_data_free);
+ g_file_read_async (save_to_file, g_task_get_priority (task), cancellable, session_read_cb, task);
+ g_object_unref (save_to_file);
}
/**
@@ -1628,124 +1522,118 @@ ephy_session_load (EphySession *session,
* Returns: %TRUE if at least a window has been opened
**/
gboolean
-ephy_session_load_finish (EphySession *session,
- GAsyncResult *result,
- GError **error)
+ephy_session_load_finish (EphySession *session,
+ GAsyncResult *result,
+ GError **error)
{
- g_return_val_if_fail (g_task_is_valid (result, session), FALSE);
+ g_return_val_if_fail (g_task_is_valid (result, session), FALSE);
- return g_task_propagate_boolean (G_TASK (result), error);
+ return g_task_propagate_boolean (G_TASK (result), error);
}
static gboolean
session_state_file_exists (EphySession *session)
{
- GFile *saved_session_file;
- char *saved_session_file_path;
- gboolean retval;
+ GFile *saved_session_file;
+ char *saved_session_file_path;
+ gboolean retval;
- saved_session_file = get_session_file (SESSION_STATE);
- saved_session_file_path = g_file_get_path (saved_session_file);
- g_object_unref (saved_session_file);
- retval = g_file_test (saved_session_file_path, G_FILE_TEST_EXISTS);
- g_free (saved_session_file_path);
+ saved_session_file = get_session_file (SESSION_STATE);
+ saved_session_file_path = g_file_get_path (saved_session_file);
+ g_object_unref (saved_session_file);
+ retval = g_file_test (saved_session_file_path, G_FILE_TEST_EXISTS);
+ g_free (saved_session_file_path);
- return retval;
+ return retval;
}
static void
-session_resumed_cb (GObject *object,
- GAsyncResult *result,
- gpointer user_data)
+session_resumed_cb (GObject *object,
+ GAsyncResult *result,
+ gpointer user_data)
{
- EphySession *session = EPHY_SESSION (object);
- GTask *task = G_TASK (user_data);
- GError *error = NULL;
+ EphySession *session = EPHY_SESSION (object);
+ GTask *task = G_TASK (user_data);
+ GError *error = NULL;
- if (!ephy_session_load_finish (session, result, &error))
- {
- g_task_return_error (task, error);
- }
- else
- {
- g_task_return_boolean (task, TRUE);
- }
+ if (!ephy_session_load_finish (session, result, &error)) {
+ g_task_return_error (task, error);
+ } else {
+ g_task_return_boolean (task, TRUE);
+ }
- g_object_unref (task);
+ g_object_unref (task);
}
void
-ephy_session_resume (EphySession *session,
- guint32 user_time,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
+ephy_session_resume (EphySession *session,
+ guint32 user_time,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
{
- GTask *task;
- gboolean has_session_state;
- EphyPrefsRestoreSessionPolicy policy;
- EphyShell *shell;
+ GTask *task;
+ gboolean has_session_state;
+ EphyPrefsRestoreSessionPolicy policy;
+ EphyShell *shell;
- LOG ("ephy_session_resume");
+ LOG ("ephy_session_resume");
- task = g_task_new (session, cancellable, callback, user_data);
+ task = g_task_new (session, cancellable, callback, user_data);
- has_session_state = session_state_file_exists (session);
+ has_session_state = session_state_file_exists (session);
- policy = g_settings_get_enum (EPHY_SETTINGS_MAIN,
- EPHY_PREFS_RESTORE_SESSION_POLICY);
+ policy = g_settings_get_enum (EPHY_SETTINGS_MAIN,
+ EPHY_PREFS_RESTORE_SESSION_POLICY);
- shell = ephy_shell_get_default ();
+ shell = ephy_shell_get_default ();
- if (has_session_state == FALSE ||
- policy == EPHY_PREFS_RESTORE_SESSION_POLICY_NEVER)
- {
- /* If we are auto-resuming, and we never want to
- * restore the session, clobber the session state
- * file. */
- if (policy == EPHY_PREFS_RESTORE_SESSION_POLICY_NEVER)
- session_delete (session);
+ if (has_session_state == FALSE ||
+ policy == EPHY_PREFS_RESTORE_SESSION_POLICY_NEVER) {
+ /* If we are auto-resuming, and we never want to
+ * restore the session, clobber the session state
+ * file. */
+ if (policy == EPHY_PREFS_RESTORE_SESSION_POLICY_NEVER)
+ session_delete (session);
- session_maybe_open_window (session, user_time);
- }
- else if (ephy_shell_get_n_windows (shell) == 0)
- {
- ephy_session_load (session, SESSION_STATE, user_time, cancellable,
- session_resumed_cb, task);
- return;
- }
+ session_maybe_open_window (session, user_time);
+ } else if (ephy_shell_get_n_windows (shell) == 0) {
+ ephy_session_load (session, SESSION_STATE, user_time, cancellable,
+ session_resumed_cb, task);
+ return;
+ }
- g_task_return_boolean (task, TRUE);
- g_object_unref (task);
+ g_task_return_boolean (task, TRUE);
+ g_object_unref (task);
}
gboolean
-ephy_session_resume_finish (EphySession *session,
- GAsyncResult *result,
- GError **error)
+ephy_session_resume_finish (EphySession *session,
+ GAsyncResult *result,
+ GError **error)
{
- g_return_val_if_fail (g_task_is_valid (result, session), FALSE);
+ g_return_val_if_fail (g_task_is_valid (result, session), FALSE);
- return g_task_propagate_boolean (G_TASK (result), error);
+ return g_task_propagate_boolean (G_TASK (result), error);
}
void
ephy_session_clear (EphySession *session)
{
- EphyShell *shell;
- GList *windows, *p;
+ EphyShell *shell;
+ GList *windows, *p;
- g_return_if_fail (EPHY_IS_SESSION (session));
+ g_return_if_fail (EPHY_IS_SESSION (session));
- shell = ephy_shell_get_default ();
- windows = g_list_copy (gtk_application_get_windows (GTK_APPLICATION (shell)));
- for (p = windows; p; p = p->next)
- gtk_widget_destroy (GTK_WIDGET (p->data));
- g_list_free (windows);
- g_queue_foreach (session->closed_tabs,
- (GFunc)closed_tab_free, NULL);
- g_queue_clear (session->closed_tabs);
+ shell = ephy_shell_get_default ();
+ windows = g_list_copy (gtk_application_get_windows (GTK_APPLICATION (shell)));
+ for (p = windows; p; p = p->next)
+ gtk_widget_destroy (GTK_WIDGET (p->data));
+ g_list_free (windows);
+ g_queue_foreach (session->closed_tabs,
+ (GFunc)closed_tab_free, NULL);
+ g_queue_clear (session->closed_tabs);
- ephy_session_save (session);
+ ephy_session_save (session);
}