From 7f37162fe009e7f7f6b51497fe4c20a4445e2cd8 Mon Sep 17 00:00:00 2001 From: Christian Dywan Date: Mon, 27 Aug 2012 21:49:36 +0200 Subject: [PATCH] Introduce Midori.Paths and Midori.RuntimeMode Also introduce initial "portable" mode on Win32. --- extensions/adblock.c | 4 +- extensions/addons.c | 22 +++---- extensions/web-cache.c | 2 +- katze/katze-net.c | 12 +--- katze/katze-utils.c | 4 +- katze/midori-paths.vala | 117 ++++++++++++++++++++++++++++++++++ midori/main.c | 44 +++++++------ midori/midori-app.c | 7 +- midori/midori-bookmarks.c | 5 +- midori/midori-browser.c | 17 ++--- midori/midori-extension.c | 3 +- midori/midori-preferences.c | 3 +- midori/midori-view.c | 29 +++------ midori/midori-view.h | 3 - midori/sokoke.c | 43 +------------ midori/sokoke.h | 6 -- tests/browser.c | 1 + tests/extensions.c | 1 + tests/properties.c | 1 + toolbars/midori-transferbar.c | 2 +- wscript | 1 + 21 files changed, 192 insertions(+), 135 deletions(-) create mode 100644 katze/midori-paths.vala diff --git a/extensions/adblock.c b/extensions/adblock.c index 7480f754..68a55515 100644 --- a/extensions/adblock.c +++ b/extensions/adblock.c @@ -10,6 +10,7 @@ See the file COPYING for the full license text. */ #include +#include "midori-core.h" #include #include "config.h" @@ -179,8 +180,7 @@ adblock_get_filename_for_uri (const gchar* uri) if (!strncmp (uri, "file", 4)) return g_strndup (uri + 7, strlen (uri) - 7); - folder = g_build_filename (g_get_user_cache_dir (), PACKAGE_NAME, - "adblock", NULL); + folder = g_build_filename (midori_paths_get_cache_dir (), "adblock", NULL); katze_mkdir_with_parents (folder, 0700); filename = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri, -1); diff --git a/extensions/addons.c b/extensions/addons.c index 5cfce23d..6087af45 100644 --- a/extensions/addons.c +++ b/extensions/addons.c @@ -14,6 +14,7 @@ /* This extensions add support for user addons: userscripts and userstyles */ #include +#include "midori-core.h" #include #include "config.h" @@ -182,8 +183,8 @@ addons_install_response (GtkWidget* infobar, if (!filename) filename = g_path_get_basename (uri); - folder_path = g_build_path (G_DIR_SEPARATOR_S, g_get_user_data_dir (), - PACKAGE_NAME, folder, NULL); + folder_path = g_build_path (G_DIR_SEPARATOR_S, + midori_paths_get_user_data_dir (), PACKAGE_NAME, folder, NULL); if (!g_file_test (folder_path, G_FILE_TEST_EXISTS)) katze_mkdir_with_parents (folder_path, 0700); @@ -293,13 +294,13 @@ addons_button_add_clicked_cb (GtkToolItem* toolitem, if (addons->kind == ADDONS_USER_SCRIPTS) { addons_type = g_strdup ("userscripts"); - path = g_build_path (G_DIR_SEPARATOR_S, g_get_user_data_dir (), + path = g_build_path (G_DIR_SEPARATOR_S, midori_paths_get_user_data_dir (), PACKAGE_NAME, "scripts", NULL); } else if (addons->kind == ADDONS_USER_STYLES) { addons_type = g_strdup ("userstyles"); - path = g_build_path (G_DIR_SEPARATOR_S, g_get_user_data_dir (), + path = g_build_path (G_DIR_SEPARATOR_S, midori_paths_get_user_data_dir (), PACKAGE_NAME, "styles", NULL); } else @@ -513,13 +514,10 @@ addons_open_target_folder_clicked_cb (GtkWidget* toolitem, } else { - folder = g_build_path (G_DIR_SEPARATOR_S, g_get_user_data_dir (), - PACKAGE_NAME, - addons->kind == ADDONS_USER_SCRIPTS - ? "scripts" : "styles", NULL); - - if (!g_file_test (folder, G_FILE_TEST_EXISTS)) - katze_mkdir_with_parents (folder, 0700); + folder = g_build_path (G_DIR_SEPARATOR_S, midori_paths_get_user_data_dir (), + PACKAGE_NAME, addons->kind == ADDONS_USER_SCRIPTS + ? "scripts" : "styles", NULL); + katze_mkdir_with_parents (folder, 0700); } folder_uri = g_filename_to_uri (folder, NULL, NULL); @@ -827,7 +825,7 @@ addons_get_directories (AddonsKind kind) else g_assert_not_reached (); - path = g_build_path (G_DIR_SEPARATOR_S, g_get_user_data_dir (), + path = g_build_path (G_DIR_SEPARATOR_S, midori_paths_get_user_data_dir (), PACKAGE_NAME, folder_name, NULL); directories = g_slist_prepend (directories, path); diff --git a/extensions/web-cache.c b/extensions/web-cache.c index a3e592bf..cf810158 100644 --- a/extensions/web-cache.c +++ b/extensions/web-cache.c @@ -28,7 +28,7 @@ web_cache_get_cache_dir (void) { static gchar* cache_dir = NULL; if (!cache_dir) - cache_dir = g_build_filename (g_get_user_cache_dir (), + cache_dir = g_build_filename (sokoke_get_user_cache_dir (), PACKAGE_NAME, "web", NULL); return cache_dir; } diff --git a/katze/katze-net.c b/katze/katze-net.c index f873d08c..09fe2711 100644 --- a/katze/katze-net.c +++ b/katze/katze-net.c @@ -19,6 +19,7 @@ #include "katze-net.h" #include "midori-core.h" +#include "sokoke.h" #include #include @@ -28,7 +29,6 @@ struct _KatzeNet { GObject parent_instance; - gchar* cache_path; guint cache_size; }; @@ -54,17 +54,11 @@ katze_net_class_init (KatzeNetClass* class) static void katze_net_init (KatzeNet* net) { - net->cache_path = g_build_filename (g_get_user_cache_dir (), - PACKAGE_NAME, NULL); } static void katze_net_finalize (GObject* object) { - KatzeNet* net = KATZE_NET (object); - - katze_assign (net->cache_path, NULL); - G_OBJECT_CLASS (katze_net_parent_class)->finalize (object); } @@ -118,9 +112,9 @@ katze_net_get_cached_path (KatzeNet* net, net = katze_net_new (); if (subfolder) - cache_path = g_build_filename (net->cache_path, subfolder, NULL); + cache_path = g_build_filename (midori_paths_get_cache_dir (), subfolder, NULL); else - cache_path = net->cache_path; + cache_path = midori_paths_get_cache_dir (); katze_mkdir_with_parents (cache_path, 0700); checksum = g_compute_checksum_for_string (G_CHECKSUM_MD5, uri, -1); diff --git a/katze/katze-utils.c b/katze/katze-utils.c index c206923e..7ded8173 100644 --- a/katze/katze-utils.c +++ b/katze/katze-utils.c @@ -14,6 +14,7 @@ #include "katze-utils.h" #include "katze-array.h" #include "midori-core.h" +#include "sokoke.h" #include #include @@ -1509,8 +1510,7 @@ katze_load_cached_icon (const gchar* uri, filename = g_strdup_printf ("%s%s", checksum, ext ? ext : ""); g_free (icon_uri); g_free (checksum); - path = g_build_filename (g_get_user_cache_dir (), PACKAGE_NAME, - "icons", filename, NULL); + path = g_build_filename (midori_paths_get_cache_dir (), "icons", filename, NULL); g_free (filename); if ((icon = gdk_pixbuf_new_from_file_at_size (path, 16, 16, NULL))) { diff --git a/katze/midori-paths.vala b/katze/midori-paths.vala new file mode 100644 index 00000000..dc05611c --- /dev/null +++ b/katze/midori-paths.vala @@ -0,0 +1,117 @@ +/* + Copyright (C) 2012 Christian Dywan + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + See the file COPYING for the full license text. +*/ + +namespace GLib { + #if HAVE_WIN32 + extern static string win32_get_package_installation_directory_of_module (void* hmodule = null); + #endif +} + +namespace Midori { + public enum RuntimeMode { + UNDEFINED, + NORMAL, + APP, + PRIVATE, + PORTABLE + } + + namespace Paths { + static RuntimeMode mode = RuntimeMode.UNDEFINED; + static string? config_dir = null; + static string? cache_dir = null; + static string? user_data_dir = null; + static string? tmp_dir = null; + + public static string get_readonly_config_dir (RuntimeMode new_mode) { + assert (mode == RuntimeMode.UNDEFINED); + if (new_mode == RuntimeMode.PORTABLE) { + #if HAVE_WIN32 + string profile = win32_get_package_installation_directory_of_module (); + #else + string profile = "profile://"; + #endif + return Path.build_path (Path.DIR_SEPARATOR_S, + profile, "profile", "config"); + } + return Path.build_path (Path.DIR_SEPARATOR_S, + Environment.get_user_config_dir (), "midori"); + } + + public static void init (RuntimeMode new_mode, string? config_base) { + assert (mode == RuntimeMode.UNDEFINED); + assert (new_mode != RuntimeMode.UNDEFINED); + mode = new_mode; + if (mode == RuntimeMode.PORTABLE) { + #if HAVE_WIN32 + string profile = win32_get_package_installation_directory_of_module (); + #else + string profile = "profile://"; + #endif + config_dir = Path.build_path (Path.DIR_SEPARATOR_S, + profile, "profile", "config"); + cache_dir = Path.build_path (Path.DIR_SEPARATOR_S, + profile, "profile", "cache"); + user_data_dir = Path.build_path (Path.DIR_SEPARATOR_S, + profile, "profile", "misc"); + tmp_dir = Path.build_path (Path.DIR_SEPARATOR_S, + profile, "profile", "tmp"); + } + else if (mode == RuntimeMode.PRIVATE || mode == RuntimeMode.APP) { + config_dir = "private-or-app://"; + cache_dir = "private-or-app://"; + user_data_dir = "private-or-app://"; + tmp_dir = Path.build_path (Path.DIR_SEPARATOR_S, + Environment.get_tmp_dir (), "midori-" + Environment.get_user_name ()); + } + else { + if (config_base != null) + config_dir = config_base; + else + config_dir = Path.build_path (Path.DIR_SEPARATOR_S, + Environment.get_user_config_dir (), "midori"); + cache_dir = Path.build_path (Path.DIR_SEPARATOR_S, + Environment.get_user_cache_dir (), "midori"); + user_data_dir = Environment.get_user_data_dir (); + tmp_dir = Path.build_path (Path.DIR_SEPARATOR_S, + Environment.get_tmp_dir (), "midori-" + Environment.get_user_name ()); + } + if (strcmp (Environment.get_variable ("MIDORI_DEBUG"), "paths") == 0) { + stdout.printf ("config: %s\ncache: %s\nuser_data: %s\ntmp: %s\n", + config_dir, cache_dir, user_data_dir, tmp_dir); + } + } + + public bool is_readonly () { + return mode == RuntimeMode.APP || mode == RuntimeMode.PRIVATE; + } + + public static string get_config_dir () { + assert (config_dir != null); + return config_dir; + } + + public static string get_cache_dir () { + assert (cache_dir != null); + return cache_dir; + } + + public static string get_user_data_dir () { + assert (user_data_dir != null); + return user_data_dir; + } + + public static string get_tmp_dir () { + assert (tmp_dir != null); + return tmp_dir; + } + } +} diff --git a/midori/main.c b/midori/main.c index 84219524..abce0a21 100644 --- a/midori/main.c +++ b/midori/main.c @@ -55,7 +55,7 @@ static gchar* build_config_filename (const gchar* filename) { - return g_build_filename (sokoke_set_config_dir (NULL), filename, NULL); + return g_build_filename (midori_paths_get_config_dir (), filename, NULL); } static MidoriWebSettings* @@ -1018,7 +1018,7 @@ midori_load_soup_session (gpointer settings) #endif #if WEBKIT_CHECK_VERSION (1, 8, 0) - gchar* cache = g_build_filename (g_get_user_data_dir (), + gchar* cache = g_build_filename (midori_paths_get_user_data_dir (), "webkit", "icondatabase", NULL); webkit_favicon_database_set_path (webkit_get_favicon_database (), cache); g_free (cache); @@ -1194,8 +1194,7 @@ midori_load_soup_session_full (gpointer settings) } #if WEBKIT_CHECK_VERSION (1, 3, 11) - katze_assign (config_file, g_build_filename (g_get_user_cache_dir (), - PACKAGE_NAME, "web", NULL)); + katze_assign (config_file, g_build_filename (midori_paths_get_cache_dir (), "web", NULL)); feature = SOUP_SESSION_FEATURE (soup_cache_new (config_file, 0)); soup_session_add_feature (session, feature); soup_cache_set_max_size (SOUP_CACHE (feature), @@ -1615,8 +1614,7 @@ speeddial_new_from_file (const gchar* config, g_key_file_load_from_data (key_file, keyfile, -1, 0, NULL); g_free (keyfile); tiles = g_key_file_get_groups (key_file, NULL); - thumb_dir = g_build_path (G_DIR_SEPARATOR_S, g_get_user_cache_dir (), - PACKAGE_NAME, "thumbnails", NULL); + thumb_dir = g_build_path (G_DIR_SEPARATOR_S, midori_paths_get_cache_dir (), "thumbnails", NULL); if (!g_file_test (thumb_dir, G_FILE_TEST_EXISTS)) katze_mkdir_with_parents (thumb_dir, 0700); g_free (thumb_dir); @@ -1804,10 +1802,10 @@ static void midori_clear_saved_logins_cb (void) { sqlite3* db; - gchar* path = g_build_filename (sokoke_set_config_dir (NULL), "logins", NULL); + gchar* path = g_build_filename (midori_paths_get_config_dir (), "logins", NULL); g_unlink (path); /* Form History database, written by the extension */ - katze_assign (path, g_build_filename (sokoke_set_config_dir (NULL), + katze_assign (path, g_build_filename (midori_paths_get_config_dir (), "extensions", MIDORI_MODULE_PREFIX "formhistory." G_MODULE_SUFFIX, "forms.db", NULL)); if (sqlite3_open (path, &db) == SQLITE_OK) { @@ -1823,7 +1821,7 @@ midori_clear_web_cache_cb (void) { SoupSession* session = webkit_get_default_session (); SoupSessionFeature* feature = soup_session_get_feature (session, SOUP_TYPE_CACHE); - gchar* cache = g_build_filename (g_get_user_cache_dir (), PACKAGE_NAME, "web", NULL); + gchar* cache = g_build_filename (midori_paths_get_cache_dir (), "web", NULL); soup_cache_clear (SOUP_CACHE (feature)); soup_cache_flush (SOUP_CACHE (feature)); sokoke_remove_path (cache, TRUE); @@ -1834,13 +1832,11 @@ midori_clear_web_cache_cb (void) static void midori_clear_page_icons_cb (void) { - gchar* cache = g_build_filename (g_get_user_cache_dir (), - PACKAGE_NAME, "icons", NULL); + gchar* cache = g_build_filename (midori_paths_get_cache_dir (), "icons", NULL); /* FIXME: Exclude search engine icons */ sokoke_remove_path (cache, TRUE); g_free (cache); - cache = g_build_filename (g_get_user_data_dir (), - "webkit", "icondatabase", NULL); + cache = g_build_filename (midori_paths_get_user_data_dir (), "webkit", "icondatabase", NULL); sokoke_remove_path (cache, TRUE); g_free (cache); #if WEBKIT_CHECK_VERSION (1, 8, 0) @@ -1897,6 +1893,7 @@ main (int argc, gchar* webapp; gchar* config; gboolean private; + gboolean portable; gboolean diagnostic_dialog; gboolean back_from_crash; gboolean run; @@ -1921,6 +1918,10 @@ main (int argc, #endif { "private", 'p', 0, G_OPTION_ARG_NONE, &private, N_("Private browsing, no changes are saved"), NULL }, + #ifdef G_OS_WIN32 + { "portable", 't', 0, G_OPTION_ARG_NONE, &portable, + N_("Portable mode, all runtime files are stored in one place"), NULL }, + #endif { "diagnostic-dialog", 'd', 0, G_OPTION_ARG_NONE, &diagnostic_dialog, N_("Show a diagnostic dialog"), NULL }, { "run", 'r', 0, G_OPTION_ARG_NONE, &run, @@ -1992,6 +1993,7 @@ main (int argc, webapp = NULL; config = NULL; private = FALSE; + portable = FALSE; back_from_crash = FALSE; diagnostic_dialog = FALSE; run = FALSE; @@ -2025,7 +2027,7 @@ main (int argc, if (private) { if (!config && !webapp) - config = g_build_filename (g_get_user_config_dir (), PACKAGE_NAME, NULL); + config = midori_paths_get_readonly_config_dir (MIDORI_RUNTIME_MODE_PRIVATE); /* Mask the timezone, which can be read by Javascript */ g_setenv ("TZ", "UTC", TRUE); } @@ -2207,13 +2209,13 @@ main (int argc, "gtk-application-prefer-dark-theme", TRUE, NULL); #endif - } - if (private || !config) - { - /* Disable saving by setting an unwritable folder */ - sokoke_set_config_dir ("/"); + midori_paths_init (MIDORI_RUNTIME_MODE_PRIVATE, "private://"); } + else if (webapp) + midori_paths_init (MIDORI_RUNTIME_MODE_APP, config ? config : "app://"); + else if (portable) + midori_paths_init (MIDORI_RUNTIME_MODE_PORTABLE, "portable://"); midori_load_soup_session (settings); if (block_uris) @@ -2326,9 +2328,9 @@ main (int argc, if (inactivity_reset > 0) g_error ("--inactivity-reset is currently only supported with --app."); - sokoke_set_config_dir (config); + midori_paths_init (MIDORI_RUNTIME_MODE_NORMAL, config); app = midori_app_new (); - katze_assign (config, (gchar*)sokoke_set_config_dir (NULL)); + katze_assign (config, g_strdup (midori_paths_get_config_dir ())); midori_startup_timer ("App created: \t%f"); /* FIXME: The app might be 'running' but actually showing a dialog diff --git a/midori/midori-app.c b/midori/midori-app.c index f73fe8f9..820cc5e5 100644 --- a/midori/midori-app.c +++ b/midori/midori-app.c @@ -21,6 +21,7 @@ #include "midori-app.h" #include "midori-platform.h" +#include "midori-core.h" #include #include @@ -750,7 +751,7 @@ midori_app_create_instance (MidoriApp* app) { #if HAVE_UNIQUE - const gchar* config = sokoke_set_config_dir (NULL); + const gchar* config = midori_paths_get_config_dir (); gchar* name_hash; name_hash = g_compute_checksum_for_string (G_CHECKSUM_MD5, config, -1); katze_assign (app_name, g_strconcat ("midori", "_", name_hash, NULL)); @@ -781,7 +782,7 @@ midori_app_create_instance (MidoriApp* app) g_signal_connect (instance, "message-received", G_CALLBACK (midori_browser_message_received_cb), app); #else - instance = socket_init (instance_name, sokoke_set_config_dir (NULL), &exists); + instance = socket_init (instance_name, midori_paths_get_config_dir (), &exists); g_object_set_data (G_OBJECT (app), "sock-exists", exists ? (gpointer)0xdeadbeef : NULL); if (instance != MidoriAppInstanceNull) @@ -1567,7 +1568,7 @@ midori_debug (const gchar* token) { static const gchar* debug_token = NULL; const gchar* debug = g_getenv ("MIDORI_DEBUG"); - const gchar* debug_tokens = "soup soup:1 soup:2 soup:3 cookies "; + const gchar* debug_tokens = "soup soup:1 soup:2 soup:3 cookies paths "; const gchar* full_debug_tokens = "adblock:1 adblock:2 startup bookmarks "; if (debug_token == NULL) { diff --git a/midori/midori-bookmarks.c b/midori/midori-bookmarks.c index ed3cc158..bbcb3eda 100644 --- a/midori/midori-bookmarks.c +++ b/midori/midori-bookmarks.c @@ -14,6 +14,7 @@ #include "panels/midori-bookmarks.h" #include "midori-array.h" #include "sokoke.h" +#include "midori-core.h" #include #include @@ -142,9 +143,9 @@ midori_bookmarks_initialize (KatzeArray* array, g_return_val_if_fail (errmsg != NULL, NULL); - oldfile = g_build_filename (sokoke_set_config_dir (NULL), "bookmarks.db", NULL); + oldfile = g_build_filename (midori_paths_get_config_dir (), "bookmarks.db", NULL); oldfile_exists = g_access (oldfile, F_OK) == 0; - newfile = g_build_filename (sokoke_set_config_dir (NULL), "bookmarks_v2.db", NULL); + newfile = g_build_filename (midori_paths_get_config_dir (), "bookmarks_v2.db", NULL); newfile_did_exist = g_access (newfile, F_OK) == 0; /* sqlite3_open will create the file if it did not exists already */ diff --git a/midori/midori-browser.c b/midori/midori-browser.c index a74d2c29..b45b4b46 100644 --- a/midori/midori-browser.c +++ b/midori/midori-browser.c @@ -565,7 +565,7 @@ midori_view_notify_icon_cb (MidoriView* view, if (midori_browser_get_current_tab (browser) != (GtkWidget*)view) return; - if (sokoke_is_app_or_private ()) + if (midori_paths_is_readonly () /* APP, PRIVATE */) gtk_window_set_icon (GTK_WINDOW (browser), midori_view_get_icon (view)); } @@ -1286,8 +1286,7 @@ midori_browser_add_speed_dial (MidoriBrowser* browser) GKeyFile* key_file; gchar* dial_id = g_strdup_printf ("Dial %s", slot_id + 1); gchar* file_path = sokoke_build_thumbnail_path (uri); - gchar* thumb_dir = g_build_path (G_DIR_SEPARATOR_S, g_get_user_cache_dir (), - PACKAGE_NAME, "thumbnails", NULL); + gchar* thumb_dir = g_build_path (G_DIR_SEPARATOR_S, midori_paths_get_cache_dir (), "thumbnails", NULL); g_object_get (browser, "speed-dial", &key_file, NULL); g_key_file_set_string (key_file, dial_id, "uri", uri); @@ -1560,7 +1559,7 @@ midori_browser_download_prepare_destination_uri (WebKitDownload* download, gchar* suggested_filename; GFile* file_source; gchar* file_basename; - gchar* download_dir = NULL; + const gchar* download_dir = NULL; gchar* destination_uri; gchar* destination_filename; @@ -1569,16 +1568,14 @@ midori_browser_download_prepare_destination_uri (WebKitDownload* download, g_free (suggested_filename); file_basename = g_file_get_basename (file_source); if (folder == NULL) - download_dir = midori_view_get_tmp_dir (); + download_dir = midori_paths_get_tmp_dir (); else - download_dir = (gchar*)folder; + download_dir = folder; destination_filename = g_build_filename (download_dir, file_basename, NULL); destination_filename = midori_browser_download_prepare_filename (destination_filename); destination_uri = g_filename_to_uri (destination_filename, NULL, NULL); g_free (file_basename); - if (folder == NULL) - g_free (download_dir); g_free (destination_filename); g_object_unref (file_source); @@ -2749,7 +2746,7 @@ _action_tab_close_activate (GtkAction* action, GtkWidget* widget = midori_browser_get_current_tab (browser); MidoriView* view = MIDORI_VIEW (widget); gboolean last_tab = midori_browser_get_n_pages (browser) == 1; - if (last_tab && sokoke_is_app_or_private ()) + if (last_tab && midori_paths_is_readonly () /* APP, PRIVATE */) { gtk_widget_destroy (GTK_WIDGET (browser)); return; @@ -5345,7 +5342,7 @@ midori_browser_switched_tab (MidoriBrowser* browser, midori_browser_set_title (browser, midori_view_get_display_title (new_view)); action = _action_by_name (browser, "Location"); midori_location_action_set_text (MIDORI_LOCATION_ACTION (action), uri); - if (sokoke_is_app_or_private ()) + if (midori_paths_is_readonly () /* APP, PRIVATE */) gtk_window_set_icon (GTK_WINDOW (browser), midori_view_get_icon (new_view)); if (browser->proxy_array) diff --git a/midori/midori-extension.c b/midori/midori-extension.c index 28156342..aff2a14a 100644 --- a/midori/midori-extension.c +++ b/midori/midori-extension.c @@ -14,6 +14,7 @@ #include #include "midori-platform.h" +#include "midori-core.h" #include G_DEFINE_TYPE (MidoriExtension, midori_extension, G_TYPE_OBJECT); @@ -648,7 +649,7 @@ midori_extension_get_config_dir (MidoriExtension* extension) if (!filename) return "/"; extension->priv->config_dir = g_build_filename ( - sokoke_set_config_dir (NULL), "extensions", filename, NULL); + midori_paths_get_config_dir (), "extensions", filename, NULL); } return extension->priv->config_dir; diff --git a/midori/midori-preferences.c b/midori/midori-preferences.c index bcb5122a..f685c581 100644 --- a/midori/midori-preferences.c +++ b/midori/midori-preferences.c @@ -12,6 +12,7 @@ #include "midori-preferences.h" #include "midori-app.h" +#include "midori-core.h" #include "midori-platform.h" #include @@ -293,7 +294,7 @@ midori_preferences_set_settings (MidoriPreferences* preferences, #define SPANNED_ADD(__widget) \ katze_preferences_add_widget (_preferences, __widget, "spanned") /* Page "General" */ - if (!sokoke_is_app_or_private ()) + if (!midori_paths_is_readonly ()) { PAGE_NEW (GTK_STOCK_HOME, _("Startup")); FRAME_NEW (NULL); diff --git a/midori/midori-view.c b/midori/midori-view.c index 267cd1b1..6dc108d5 100644 --- a/midori/midori-view.c +++ b/midori/midori-view.c @@ -3002,7 +3002,7 @@ midori_view_populate_popup (MidoriView* view, gtk_action_group_get_action (actions, "BookmarkAdd")); gtk_menu_shell_append (menu_shell, menuitem); - if (!midori_view_is_blank (view) && !sokoke_is_app_or_private ()) + if (!midori_view_is_blank (view) && !midori_paths_is_readonly ()) { menuitem = sokoke_action_create_popup_menu_item ( gtk_action_group_get_action (actions, "AddSpeedDial")); @@ -4286,8 +4286,8 @@ prepare_speed_dial_html (MidoriView* view, g_string_append_printf (markup, "%s%s" "\n", - sokoke_is_app_or_private () ? "" : "", + midori_paths_is_readonly () ? "" : "", slot_size + 1, slot_size - 4); /* Combined width of slots should always be less than 100%. @@ -4525,7 +4525,6 @@ midori_view_set_uri (MidoriView* view, { gchar* res_dir = midori_app_find_res_filename (""); gchar* lib_dir = midori_app_get_lib_path (PACKAGE_NAME); - gchar* tmp_dir = midori_view_get_tmp_dir (); data = g_strdup_printf ("

%s

" "

config: %s

" "

res: %s

" @@ -4533,10 +4532,10 @@ midori_view_set_uri (MidoriView* view, "

cache: %s

" "

tmp: %s

" "", - uri, sokoke_set_config_dir (NULL), res_dir, lib_dir, g_get_user_cache_dir (), tmp_dir); + uri, midori_paths_get_config_dir (), res_dir, + lib_dir, midori_paths_get_cache_dir (), midori_paths_get_tmp_dir ()); g_free (res_dir); g_free (lib_dir); - g_free (tmp_dir); katze_assign (view->uri, g_strdup (uri)); } else if (!strcmp (uri, "about:") || !strcmp (uri, "about:version")) @@ -5643,15 +5642,6 @@ midori_view_fallback_extension (MidoriView* view, return ""; } -gchar* -midori_view_get_tmp_dir (void) -{ - gchar* tmpdir = g_strdup_printf ("%s/midori-%s", - g_get_tmp_dir (), g_get_user_name ()); - g_mkdir (tmpdir, 0700); - return tmpdir; -} - /** * midori_view_save_source: * @view: a #MidoriView @@ -5687,10 +5677,8 @@ midori_view_save_source (MidoriView* view, if (!outfile) { gchar* extension = midori_view_get_uri_extension (uri); - gchar* tmpdir = midori_view_get_tmp_dir (); - unique_filename = g_strdup_printf ("%s/%uXXXXXX%s", tmpdir, + unique_filename = g_strdup_printf ("%s/%uXXXXXX%s", midori_paths_get_tmp_dir (), g_str_hash (uri), midori_view_fallback_extension (view, extension)); - g_free (tmpdir); g_free (extension); fd = g_mkstemp (unique_filename); } @@ -6348,8 +6336,7 @@ thumb_view_load_status_cb (WebKitWebView* thumb_view_, img = midori_view_web_view_get_snapshot (thumb_view, 240, 160); #endif file_path = sokoke_build_thumbnail_path (url); - thumb_dir = g_build_path (G_DIR_SEPARATOR_S, g_get_user_cache_dir (), - PACKAGE_NAME, "thumbnails", NULL); + thumb_dir = g_build_path (G_DIR_SEPARATOR_S, midori_paths_get_cache_dir (), "thumbnails", NULL); if (!g_file_test (thumb_dir, G_FILE_TEST_EXISTS)) katze_mkdir_with_parents (thumb_dir, 0700); @@ -6549,7 +6536,7 @@ midori_view_save_speed_dial_config (MidoriView* view, MidoriBrowser* browser = midori_browser_get_for_widget (GTK_WIDGET (view)); GtkWidget* tab; - config_file = g_build_filename (sokoke_set_config_dir (NULL), "speeddial", NULL); + config_file = g_build_filename (midori_paths_get_config_dir (), "speeddial", NULL); sokoke_key_file_save_to_file (key_file, config_file, NULL); g_free (config_file); diff --git a/midori/midori-view.h b/midori/midori-view.h index 6ba08972..e1811f9d 100644 --- a/midori/midori-view.h +++ b/midori/midori-view.h @@ -298,9 +298,6 @@ const gchar* midori_view_fallback_extension (MidoriView* view, const gchar* extension); -gchar* -midori_view_get_tmp_dir (void); - G_END_DECLS #endif /* __MIDORI_VIEW_H__ */ diff --git a/midori/sokoke.c b/midori/sokoke.c index abccfd3d..8631be3c 100644 --- a/midori/sokoke.c +++ b/midori/sokoke.c @@ -497,7 +497,7 @@ sokoke_spawn_app (const gchar* uri, gchar* argument; if (private) { - gchar* config_quoted = g_shell_quote (sokoke_set_config_dir (NULL)); + gchar* config_quoted = g_shell_quote (midori_paths_get_config_dir ()); argument = g_strconcat ("-c ", config_quoted, " -p ", uri_quoted, NULL); } @@ -970,42 +970,6 @@ sokoke_time_t_to_julian (const time_t* timestamp) return julian; } -/** - * sokoke_set_config_dir: - * @new_config_dir: an absolute path, or %NULL - * - * Retrieves and/ or sets the base configuration folder. - * - * "/" means no configuration is saved. - * - * Return value: the configuration folder, or %NULL - **/ -const gchar* -sokoke_set_config_dir (const gchar* new_config_dir) -{ - static gchar* config_dir = NULL; - - if (config_dir) - return config_dir; - - if (!new_config_dir) - config_dir = g_build_filename (g_get_user_config_dir (), - PACKAGE_NAME, NULL); - else - { - g_return_val_if_fail (g_path_is_absolute (new_config_dir), NULL); - katze_assign (config_dir, g_strdup (new_config_dir)); - } - - return config_dir; -} - -gboolean -sokoke_is_app_or_private (void) -{ - return !strcmp ("/", sokoke_set_config_dir (NULL)); -} - /** * sokoke_remove_path: * @path: an absolute path @@ -1116,7 +1080,7 @@ sokoke_find_data_filename (const gchar* filename, g_free (path); #endif - path = g_build_filename (g_get_user_data_dir (), res1, res2, filename, NULL); + path = g_build_filename (midori_paths_get_user_data_dir (), res1, res2, filename, NULL); if (g_access (path, F_OK) == 0) return path; g_free (path); @@ -1409,8 +1373,7 @@ sokoke_build_thumbnail_path (const gchar* name) gchar* checksum = g_compute_checksum_for_string (G_CHECKSUM_MD5, name, -1); gchar* filename = g_strdup_printf ("%s.png", checksum); - path = g_build_filename (g_get_user_cache_dir (), "midori", "thumbnails", - filename, NULL); + path = g_build_filename (midori_paths_get_cache_dir (), "thumbnails", filename, NULL); g_free (filename); g_free (checksum); diff --git a/midori/sokoke.h b/midori/sokoke.h index 1bb5fe3f..578b41d1 100644 --- a/midori/sokoke.h +++ b/midori/sokoke.h @@ -130,12 +130,6 @@ sokoke_action_create_popup_menu_item (GtkAction* action); gint64 sokoke_time_t_to_julian (const time_t* timestamp); -const gchar* -sokoke_set_config_dir (const gchar* new_config_dir); - -gboolean -sokoke_is_app_or_private (void); - gboolean sokoke_remove_path (const gchar* path, gboolean ignore_errors); diff --git a/tests/browser.c b/tests/browser.c index 710e25ce..f05e1be4 100644 --- a/tests/browser.c +++ b/tests/browser.c @@ -132,6 +132,7 @@ main (int argc, { g_test_init (&argc, &argv, NULL); midori_app_setup (&argc, &argv, NULL, NULL); + midori_paths_init (MIDORI_RUNTIME_MODE_PRIVATE, NULL); g_object_set_data (G_OBJECT (webkit_get_default_session ()), "midori-session-initialized", (void*)1); diff --git a/tests/extensions.c b/tests/extensions.c index 3da96cd8..b3d5330f 100644 --- a/tests/extensions.c +++ b/tests/extensions.c @@ -247,6 +247,7 @@ main (int argc, { g_test_init (&argc, &argv, NULL); midori_app_setup (&argc, &argv, NULL, NULL); + midori_paths_init (MIDORI_RUNTIME_MODE_PRIVATE, NULL); soup_session_add_feature_by_type (webkit_get_default_session (), SOUP_TYPE_COOKIE_JAR); diff --git a/tests/properties.c b/tests/properties.c index 46ad284e..99bd847f 100644 --- a/tests/properties.c +++ b/tests/properties.c @@ -189,6 +189,7 @@ main (int argc, { g_test_init (&argc, &argv, NULL); midori_app_setup (&argc, &argv, NULL, NULL); + midori_paths_init (MIDORI_RUNTIME_MODE_PRIVATE, NULL); g_object_set_data (G_OBJECT (webkit_get_default_session ()), "midori-session-initialized", (void*)1); diff --git a/toolbars/midori-transferbar.c b/toolbars/midori-transferbar.c index 52113c7e..64b9fc8d 100644 --- a/toolbars/midori-transferbar.c +++ b/toolbars/midori-transferbar.c @@ -159,7 +159,7 @@ midori_transferbar_download_notify_status_cb (WebKitDownload* download, g_free (fingerprint); if (verified) { - if (!sokoke_is_app_or_private ()) + if (!midori_paths_is_readonly ()) gtk_recent_manager_add_item (gtk_recent_manager_get_default (), webkit_download_get_destination_uri (download)); } diff --git a/wscript b/wscript index 63c003d4..44bf2245 100644 --- a/wscript +++ b/wscript @@ -245,6 +245,7 @@ def configure (conf): args = '' if Options.platform == 'win32': args = '--define-variable=target=win32' + conf.env.append_value ('VALAFLAGS', '-D HAVE_WIN32') elif sys.platform != 'darwin': check_pkg ('x11') # Pass /usr/X11R6/include for OpenBSD -- 2.39.5