Save the session whenever it changes, instead of on quit.
This commit is contained in:
parent
5e66e09c00
commit
3301b37803
3 changed files with 108 additions and 128 deletions
|
@ -334,6 +334,30 @@ midori_web_list_add_item_cb (MidoriWebList* trash,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
midori_browser_session_cb (MidoriBrowser* browser,
|
||||||
|
gpointer arg1,
|
||||||
|
KatzeXbelItem* session)
|
||||||
|
{
|
||||||
|
gchar* config_path;
|
||||||
|
gchar* config_file;
|
||||||
|
GError* error;
|
||||||
|
|
||||||
|
config_path = g_build_filename (g_get_user_config_dir (),
|
||||||
|
PACKAGE_NAME, NULL);
|
||||||
|
g_mkdir_with_parents (config_path, 0755);
|
||||||
|
config_file = g_build_filename (config_path, "session.xbel", NULL);
|
||||||
|
error = NULL;
|
||||||
|
if (!katze_xbel_folder_to_file (session, config_file, &error))
|
||||||
|
{
|
||||||
|
g_warning (_("The session couldn't be saved. %s"), error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (config_file);
|
||||||
|
g_free (config_path);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main (int argc,
|
main (int argc,
|
||||||
char** argv)
|
char** argv)
|
||||||
|
@ -555,7 +579,7 @@ main (int argc,
|
||||||
midori_app_add_browser (app, browser);
|
midori_app_add_browser (app, browser);
|
||||||
gtk_widget_show (GTK_WIDGET (browser));
|
gtk_widget_show (GTK_WIDGET (browser));
|
||||||
|
|
||||||
KatzeXbelItem* session = katze_xbel_folder_new ();
|
KatzeXbelItem* session = midori_browser_get_proxy_xbel_folder (browser);
|
||||||
n = katze_xbel_folder_get_n_items (_session);
|
n = katze_xbel_folder_get_n_items (_session);
|
||||||
for (i = 0; i < n; i++)
|
for (i = 0; i < n; i++)
|
||||||
{
|
{
|
||||||
|
@ -568,6 +592,13 @@ main (int argc,
|
||||||
midori_browser_activate_action (browser, "Location");
|
midori_browser_activate_action (browser, "Location");
|
||||||
katze_xbel_item_unref (_session);
|
katze_xbel_item_unref (_session);
|
||||||
|
|
||||||
|
g_signal_connect_after (browser, "notify::uri",
|
||||||
|
G_CALLBACK (midori_browser_session_cb), session);
|
||||||
|
g_signal_connect_after (browser, "add-tab",
|
||||||
|
G_CALLBACK (midori_browser_session_cb), session);
|
||||||
|
g_signal_connect_after (browser, "remove-tab",
|
||||||
|
G_CALLBACK (midori_browser_session_cb), session);
|
||||||
|
|
||||||
/* Load extensions */
|
/* Load extensions */
|
||||||
JSGlobalContextRef js_context = gjs_global_context_new ();
|
JSGlobalContextRef js_context = gjs_global_context_new ();
|
||||||
/* FIXME: We want to honor system installed addons as well */
|
/* FIXME: We want to honor system installed addons as well */
|
||||||
|
@ -626,19 +657,6 @@ main (int argc,
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
}
|
}
|
||||||
katze_xbel_item_unref (xbel_trash);
|
katze_xbel_item_unref (xbel_trash);
|
||||||
g_object_get (settings, "load-on-startup", &load_on_startup, NULL);
|
|
||||||
if (load_on_startup == MIDORI_STARTUP_LAST_OPEN_PAGES)
|
|
||||||
{
|
|
||||||
katze_assign (config_file, g_build_filename (config_path,
|
|
||||||
"session.xbel", NULL));
|
|
||||||
error = NULL;
|
|
||||||
if (!katze_xbel_folder_to_file (session, config_file, &error))
|
|
||||||
{
|
|
||||||
g_warning (_("The session couldn't be saved. %s"), error->message);
|
|
||||||
g_error_free (error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
katze_xbel_item_unref (session);
|
|
||||||
katze_assign (config_file, g_build_filename (config_path, "config", NULL));
|
katze_assign (config_file, g_build_filename (config_path, "config", NULL));
|
||||||
error = NULL;
|
error = NULL;
|
||||||
if (!settings_save_to_file (settings, config_file, &error))
|
if (!settings_save_to_file (settings, config_file, &error))
|
||||||
|
|
|
@ -89,6 +89,7 @@ enum
|
||||||
|
|
||||||
PROP_MENUBAR,
|
PROP_MENUBAR,
|
||||||
PROP_NAVIGATIONBAR,
|
PROP_NAVIGATIONBAR,
|
||||||
|
PROP_URI,
|
||||||
PROP_TAB,
|
PROP_TAB,
|
||||||
PROP_STATUSBAR,
|
PROP_STATUSBAR,
|
||||||
PROP_SETTINGS,
|
PROP_SETTINGS,
|
||||||
|
@ -105,7 +106,7 @@ enum
|
||||||
NEW_WINDOW,
|
NEW_WINDOW,
|
||||||
|
|
||||||
ADD_TAB,
|
ADD_TAB,
|
||||||
ADD_URI,
|
REMOVE_TAB,
|
||||||
ACTIVATE_ACTION,
|
ACTIVATE_ACTION,
|
||||||
QUIT,
|
QUIT,
|
||||||
|
|
||||||
|
@ -382,6 +383,7 @@ midori_web_view_notify_load_status_cb (GtkWidget* web_view,
|
||||||
gtk_icon_entry_set_icon_from_pixbuf (GTK_ICON_ENTRY (
|
gtk_icon_entry_set_icon_from_pixbuf (GTK_ICON_ENTRY (
|
||||||
gtk_bin_get_child (GTK_BIN (browser->location))),
|
gtk_bin_get_child (GTK_BIN (browser->location))),
|
||||||
GTK_ICON_ENTRY_SECONDARY, NULL);
|
GTK_ICON_ENTRY_SECONDARY, NULL);
|
||||||
|
g_object_notify (G_OBJECT (browser), "uri");
|
||||||
}
|
}
|
||||||
|
|
||||||
_midori_browser_update_interface (browser);
|
_midori_browser_update_interface (browser);
|
||||||
|
@ -856,7 +858,7 @@ midori_browser_tab_close_clicked (GtkWidget* tab_close,
|
||||||
gtk_widget_destroy (widget);
|
gtk_widget_destroy (widget);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gint
|
static void
|
||||||
_midori_browser_add_tab (MidoriBrowser* browser,
|
_midori_browser_add_tab (MidoriBrowser* browser,
|
||||||
GtkWidget* widget)
|
GtkWidget* widget)
|
||||||
{
|
{
|
||||||
|
@ -1036,24 +1038,13 @@ _midori_browser_add_tab (MidoriBrowser* browser,
|
||||||
G_CALLBACK (midori_browser_tab_destroy_cb), browser);
|
G_CALLBACK (midori_browser_tab_destroy_cb), browser);
|
||||||
|
|
||||||
_midori_browser_update_actions (browser);
|
_midori_browser_update_actions (browser);
|
||||||
|
|
||||||
n = gtk_notebook_page_num (GTK_NOTEBOOK (browser->notebook), scrolled);
|
|
||||||
return n;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gint
|
static void
|
||||||
_midori_browser_add_uri (MidoriBrowser* browser,
|
_midori_browser_remove_tab (MidoriBrowser* browser,
|
||||||
const gchar* uri)
|
GtkWidget* widget)
|
||||||
{
|
{
|
||||||
GtkWidget* web_view;
|
gtk_widget_destroy (widget);
|
||||||
|
|
||||||
web_view = g_object_new (MIDORI_TYPE_WEB_VIEW,
|
|
||||||
"uri", uri,
|
|
||||||
"settings", browser->settings,
|
|
||||||
NULL);
|
|
||||||
gtk_widget_show (web_view);
|
|
||||||
|
|
||||||
return midori_browser_add_tab (browser, web_view);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1112,80 +1103,6 @@ midori_cclosure_marshal_VOID__OBJECT_POINTER_POINTER (GClosure* closure,
|
||||||
data2);
|
data2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
midori_cclosure_marshal_INT__OBJECT (GClosure* closure,
|
|
||||||
GValue* return_value,
|
|
||||||
guint n_param_values,
|
|
||||||
const GValue* param_values,
|
|
||||||
gpointer invocation_hint,
|
|
||||||
gpointer marshal_data)
|
|
||||||
{
|
|
||||||
typedef gint(*GMarshalFunc_INT__OBJECT) (gpointer data1,
|
|
||||||
gpointer arg_1,
|
|
||||||
gpointer data2);
|
|
||||||
register GMarshalFunc_INT__OBJECT callback;
|
|
||||||
register GCClosure* cc = (GCClosure*) closure;
|
|
||||||
register gpointer data1, data2;
|
|
||||||
gint v_return;
|
|
||||||
|
|
||||||
g_return_if_fail (return_value != NULL);
|
|
||||||
g_return_if_fail (n_param_values == 2);
|
|
||||||
|
|
||||||
if (G_CCLOSURE_SWAP_DATA (closure))
|
|
||||||
{
|
|
||||||
data1 = closure->data;
|
|
||||||
data2 = g_value_peek_pointer (param_values + 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
data1 = g_value_peek_pointer (param_values + 0);
|
|
||||||
data2 = closure->data;
|
|
||||||
}
|
|
||||||
callback = (GMarshalFunc_INT__OBJECT) (marshal_data
|
|
||||||
? marshal_data : cc->callback);
|
|
||||||
v_return = callback (data1,
|
|
||||||
g_value_get_object (param_values + 1),
|
|
||||||
data2);
|
|
||||||
g_value_set_int (return_value, v_return);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
midori_cclosure_marshal_INT__STRING (GClosure* closure,
|
|
||||||
GValue* return_value,
|
|
||||||
guint n_param_values,
|
|
||||||
const GValue* param_values,
|
|
||||||
gpointer invocation_hint,
|
|
||||||
gpointer marshal_data)
|
|
||||||
{
|
|
||||||
typedef gint(*GMarshalFunc_INT__STRING) (gpointer data1,
|
|
||||||
const gchar* arg_1,
|
|
||||||
gpointer data2);
|
|
||||||
register GMarshalFunc_INT__STRING callback;
|
|
||||||
register GCClosure* cc = (GCClosure*) closure;
|
|
||||||
register gpointer data1, data2;
|
|
||||||
gint v_return;
|
|
||||||
|
|
||||||
g_return_if_fail (return_value != NULL);
|
|
||||||
g_return_if_fail (n_param_values == 2);
|
|
||||||
|
|
||||||
if (G_CCLOSURE_SWAP_DATA (closure))
|
|
||||||
{
|
|
||||||
data1 = closure->data;
|
|
||||||
data2 = g_value_peek_pointer (param_values + 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
data1 = g_value_peek_pointer (param_values + 0);
|
|
||||||
data2 = closure->data;
|
|
||||||
}
|
|
||||||
callback = (GMarshalFunc_INT__STRING) (marshal_data
|
|
||||||
? marshal_data : cc->callback);
|
|
||||||
v_return = callback (data1,
|
|
||||||
g_value_get_string (param_values + 1),
|
|
||||||
data2);
|
|
||||||
g_value_set_int (return_value, v_return);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
midori_browser_class_init (MidoriBrowserClass* class)
|
midori_browser_class_init (MidoriBrowserClass* class)
|
||||||
{
|
{
|
||||||
|
@ -1231,20 +1148,20 @@ midori_browser_class_init (MidoriBrowserClass* class)
|
||||||
G_STRUCT_OFFSET (MidoriBrowserClass, add_tab),
|
G_STRUCT_OFFSET (MidoriBrowserClass, add_tab),
|
||||||
0,
|
0,
|
||||||
NULL,
|
NULL,
|
||||||
midori_cclosure_marshal_INT__OBJECT,
|
g_cclosure_marshal_VOID__OBJECT,
|
||||||
G_TYPE_INT, 1,
|
G_TYPE_NONE, 1,
|
||||||
GTK_TYPE_WIDGET);
|
GTK_TYPE_WIDGET);
|
||||||
|
|
||||||
signals[ADD_URI] = g_signal_new (
|
signals[REMOVE_TAB] = g_signal_new (
|
||||||
"add-uri",
|
"remove-tab",
|
||||||
G_TYPE_FROM_CLASS (class),
|
G_TYPE_FROM_CLASS (class),
|
||||||
(GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
|
(GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),
|
||||||
G_STRUCT_OFFSET (MidoriBrowserClass, add_uri),
|
G_STRUCT_OFFSET (MidoriBrowserClass, remove_tab),
|
||||||
0,
|
0,
|
||||||
NULL,
|
NULL,
|
||||||
midori_cclosure_marshal_INT__STRING,
|
g_cclosure_marshal_VOID__OBJECT,
|
||||||
G_TYPE_INT, 1,
|
G_TYPE_NONE, 1,
|
||||||
G_TYPE_STRING);
|
GTK_TYPE_WIDGET);
|
||||||
|
|
||||||
signals[ACTIVATE_ACTION] = g_signal_new (
|
signals[ACTIVATE_ACTION] = g_signal_new (
|
||||||
"activate-action",
|
"activate-action",
|
||||||
|
@ -1268,7 +1185,7 @@ midori_browser_class_init (MidoriBrowserClass* class)
|
||||||
G_TYPE_NONE, 0);
|
G_TYPE_NONE, 0);
|
||||||
|
|
||||||
class->add_tab = _midori_browser_add_tab;
|
class->add_tab = _midori_browser_add_tab;
|
||||||
class->add_uri = _midori_browser_add_uri;
|
class->remove_tab = _midori_browser_remove_tab;
|
||||||
class->activate_action = _midori_browser_activate_action;
|
class->activate_action = _midori_browser_activate_action;
|
||||||
class->quit = _midori_browser_quit;
|
class->quit = _midori_browser_quit;
|
||||||
|
|
||||||
|
@ -1297,6 +1214,15 @@ midori_browser_class_init (MidoriBrowserClass* class)
|
||||||
GTK_TYPE_TOOLBAR,
|
GTK_TYPE_TOOLBAR,
|
||||||
G_PARAM_READABLE));
|
G_PARAM_READABLE));
|
||||||
|
|
||||||
|
g_object_class_install_property (gobject_class,
|
||||||
|
PROP_URI,
|
||||||
|
g_param_spec_string (
|
||||||
|
"uri",
|
||||||
|
_("URI"),
|
||||||
|
_("The current URI"),
|
||||||
|
"about:blank",
|
||||||
|
G_PARAM_READWRITE));
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class,
|
g_object_class_install_property (gobject_class,
|
||||||
PROP_TAB,
|
PROP_TAB,
|
||||||
g_param_spec_object (
|
g_param_spec_object (
|
||||||
|
@ -2572,6 +2498,9 @@ gtk_notebook_switch_page_cb (GtkWidget* notebook,
|
||||||
g_get_application_name (), NULL);
|
g_get_application_name (), NULL);
|
||||||
gtk_window_set_title (GTK_WINDOW (browser), window_title);
|
gtk_window_set_title (GTK_WINDOW (browser), window_title);
|
||||||
g_free (window_title);
|
g_free (window_title);
|
||||||
|
|
||||||
|
g_object_notify (G_OBJECT (browser), "uri");
|
||||||
|
|
||||||
_midori_browser_set_statusbar_text (browser, NULL);
|
_midori_browser_set_statusbar_text (browser, NULL);
|
||||||
_midori_browser_update_interface (browser);
|
_midori_browser_update_interface (browser);
|
||||||
if (MIDORI_IS_WEB_VIEW (widget))
|
if (MIDORI_IS_WEB_VIEW (widget))
|
||||||
|
@ -3844,6 +3773,9 @@ midori_browser_set_property (GObject* object,
|
||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
|
case PROP_URI:
|
||||||
|
_midori_browser_open_uri (browser, g_value_get_string (value));
|
||||||
|
break;
|
||||||
case PROP_TAB:
|
case PROP_TAB:
|
||||||
midori_browser_set_current_tab (browser, g_value_get_object (value));
|
midori_browser_set_current_tab (browser, g_value_get_object (value));
|
||||||
break;
|
break;
|
||||||
|
@ -3912,6 +3844,9 @@ midori_browser_get_property (GObject* object,
|
||||||
case PROP_NAVIGATIONBAR:
|
case PROP_NAVIGATIONBAR:
|
||||||
g_value_set_object (value, browser->navigationbar);
|
g_value_set_object (value, browser->navigationbar);
|
||||||
break;
|
break;
|
||||||
|
case PROP_URI:
|
||||||
|
g_value_set_string (value, midori_browser_get_current_uri (browser));
|
||||||
|
break;
|
||||||
case PROP_TAB:
|
case PROP_TAB:
|
||||||
g_value_set_object (value, midori_browser_get_current_tab (browser));
|
g_value_set_object (value, midori_browser_get_current_tab (browser));
|
||||||
break;
|
break;
|
||||||
|
@ -3969,10 +3904,11 @@ gint
|
||||||
midori_browser_add_tab (MidoriBrowser* browser,
|
midori_browser_add_tab (MidoriBrowser* browser,
|
||||||
GtkWidget* widget)
|
GtkWidget* widget)
|
||||||
{
|
{
|
||||||
gint index;
|
GtkWidget* scrolled;
|
||||||
|
|
||||||
g_signal_emit (browser, signals[ADD_TAB], 0, widget, &index);
|
g_signal_emit (browser, signals[ADD_TAB], 0, widget);
|
||||||
return index;
|
scrolled = _midori_browser_scrolled_for_child (browser, widget);
|
||||||
|
return gtk_notebook_page_num (GTK_NOTEBOOK (browser->notebook), scrolled);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3986,10 +3922,7 @@ void
|
||||||
midori_browser_remove_tab (MidoriBrowser* browser,
|
midori_browser_remove_tab (MidoriBrowser* browser,
|
||||||
GtkWidget* widget)
|
GtkWidget* widget)
|
||||||
{
|
{
|
||||||
GtkWidget* scrolled = _midori_browser_scrolled_for_child (browser, widget);
|
g_signal_emit (browser, signals[REMOVE_TAB], 0, widget);
|
||||||
gtk_container_remove (GTK_CONTAINER (browser->notebook), scrolled);
|
|
||||||
|
|
||||||
/* FIXME: Remove the menuitem if this is a web view */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -4032,10 +3965,15 @@ gint
|
||||||
midori_browser_add_uri (MidoriBrowser* browser,
|
midori_browser_add_uri (MidoriBrowser* browser,
|
||||||
const gchar* uri)
|
const gchar* uri)
|
||||||
{
|
{
|
||||||
gint index;
|
GtkWidget* web_view;
|
||||||
|
|
||||||
g_signal_emit (browser, signals[ADD_URI], 0, uri, &index);
|
web_view = g_object_new (MIDORI_TYPE_WEB_VIEW,
|
||||||
return index;
|
"uri", uri,
|
||||||
|
"settings", browser->settings,
|
||||||
|
NULL);
|
||||||
|
gtk_widget_show (web_view);
|
||||||
|
|
||||||
|
return midori_browser_add_tab (browser, web_view);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -4052,6 +3990,27 @@ midori_browser_activate_action (MidoriBrowser* browser,
|
||||||
g_signal_emit (browser, signals[ACTIVATE_ACTION], 0, name);
|
g_signal_emit (browser, signals[ACTIVATE_ACTION], 0, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* midori_browser_get_current_uri:
|
||||||
|
* @browser: a #MidoriBrowser
|
||||||
|
*
|
||||||
|
* Determines the URI loaded in the current page.
|
||||||
|
*
|
||||||
|
* If there is no page present at all, %NULL is returned.
|
||||||
|
*
|
||||||
|
* Return value: the current URI, or %NULL
|
||||||
|
**/
|
||||||
|
const gchar*
|
||||||
|
midori_browser_get_current_uri (MidoriBrowser* browser)
|
||||||
|
{
|
||||||
|
GtkWidget* widget;
|
||||||
|
|
||||||
|
g_return_val_if_fail (MIDORI_IS_BROWSER (browser), NULL);
|
||||||
|
|
||||||
|
widget = midori_browser_get_current_web_view (browser);
|
||||||
|
return _midori_browser_get_tab_uri (browser, widget);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* midori_browser_set_current_page:
|
* midori_browser_set_current_page:
|
||||||
* @browser: a #MidoriBrowser
|
* @browser: a #MidoriBrowser
|
||||||
|
|
|
@ -54,12 +54,12 @@ struct _MidoriBrowserClass
|
||||||
(*new_window) (MidoriBrowser* browser,
|
(*new_window) (MidoriBrowser* browser,
|
||||||
const gchar* uri);
|
const gchar* uri);
|
||||||
|
|
||||||
gint
|
void
|
||||||
(*add_tab) (MidoriBrowser* browser,
|
(*add_tab) (MidoriBrowser* browser,
|
||||||
GtkWidget* widget);
|
GtkWidget* widget);
|
||||||
gint
|
void
|
||||||
(*add_uri) (MidoriBrowser* browser,
|
(*remove_tab) (MidoriBrowser* browser,
|
||||||
const gchar* uri);
|
GtkWidget* widget);
|
||||||
void
|
void
|
||||||
(*activate_action) (MidoriBrowser* browser,
|
(*activate_action) (MidoriBrowser* browser,
|
||||||
const gchar* name);
|
const gchar* name);
|
||||||
|
@ -93,6 +93,9 @@ void
|
||||||
midori_browser_activate_action (MidoriBrowser* browser,
|
midori_browser_activate_action (MidoriBrowser* browser,
|
||||||
const gchar* name);
|
const gchar* name);
|
||||||
|
|
||||||
|
const gchar*
|
||||||
|
midori_browser_get_current_uri (MidoriBrowser* browser);
|
||||||
|
|
||||||
void
|
void
|
||||||
midori_browser_set_current_page (MidoriBrowser* browser,
|
midori_browser_set_current_page (MidoriBrowser* browser,
|
||||||
gint n);
|
gint n);
|
||||||
|
|
Loading…
Reference in a new issue