From 4a4887b5112236ed089fcfc5a9b46bb3a0bef69a Mon Sep 17 00:00:00 2001 From: Christian Dywan Date: Fri, 1 Jun 2012 00:05:11 +0200 Subject: [PATCH] Find res in executable or build folder We can drop the versioned filename. --- .../formhistory/formhistory-js-frontend.c | 4 +- midori/midori-app.c | 63 ++++++++++++++++++- midori/midori-app.h | 6 ++ midori/midori-view.c | 8 +-- midori/sokoke.c | 22 +------ wscript | 5 +- 6 files changed, 75 insertions(+), 33 deletions(-) diff --git a/extensions/formhistory/formhistory-js-frontend.c b/extensions/formhistory/formhistory-js-frontend.c index c1c85ead..ec64d7ac 100644 --- a/extensions/formhistory/formhistory-js-frontend.c +++ b/extensions/formhistory/formhistory-js-frontend.c @@ -27,7 +27,7 @@ formhistory_construct_popup_gui (FormHistoryPriv* priv) guint i; gchar* file; - file = sokoke_find_data_filename ("autosuggestcontrol.js", TRUE); + file = midori_app_find_res_filename ("autosuggestcontrol.js"); if (!g_file_get_contents (file, &autosuggest, NULL, NULL)) { g_free (file); @@ -35,7 +35,7 @@ formhistory_construct_popup_gui (FormHistoryPriv* priv) } g_strchomp (autosuggest); - katze_assign (file, sokoke_find_data_filename ("autosuggestcontrol.css", TRUE)); + katze_assign (file, midori_app_find_res_filename ("autosuggestcontrol.css")); if (!g_file_get_contents (file, &style, NULL, NULL)) { g_free (file); diff --git a/midori/midori-app.c b/midori/midori-app.c index 8c361f9b..8fdcac63 100644 --- a/midori/midori-app.c +++ b/midori/midori-app.c @@ -1302,6 +1302,57 @@ midori_app_send_notification (MidoriApp* app, #endif } +static gchar** command_line = NULL; +static gchar* exec_path = NULL; + +/** + * midori_app_get_command_line: + * + * Retrieves the argument vector passed at program startup. + * + * Return value: the argument vector + * + * Since: 0.4.7 + **/ +gchar** +midori_app_get_command_line (void) +{ + return command_line; +} + +/** + * midori_app_find_res_filename: + * @filename: a filename or relative path + * + * Looks for the specified filename in Midori's resources. + * + * Return value: a newly allocated full path + * + * Since: 0.4.7 + **/ +gchar* +midori_app_find_res_filename (const gchar* filename) +{ + gchar* path; + + path = g_build_filename (exec_path, "share", PACKAGE_NAME, "res", filename, NULL); + if (g_access (path, F_OK) == 0) + return path; + + g_free (path); + + /* Fallback to build folder */ + path = g_build_filename (g_file_get_path (g_file_get_parent ( + g_file_get_parent (g_file_get_parent (g_file_new_for_path (exec_path))))), + "data", filename, NULL); + if (g_access (path, F_OK) == 0) + return path; + g_free (path); + + return g_build_filename (MDATADIR, PACKAGE_NAME, "res", filename, NULL); +} + + /** * midori_app_setup: * @@ -1352,9 +1403,6 @@ midori_app_setup (gchar** argument_vector) { GTK_STOCK_DIRECTORY, N_("New _Folder"), 0, 0, NULL }, }; - /* Preserve argument vector */ - sokoke_get_argv (argument_vector); - /* libSoup uses threads, therefore if WebKit is built with libSoup * or Midori is using it, we need to initialize threads. */ #if !GLIB_CHECK_VERSION (2, 32, 0) @@ -1450,6 +1498,15 @@ midori_app_setup (gchar** argument_vector) g_object_unref (factory); #endif + /* Preserve argument vector */ + command_line = g_strdupv (argument_vector); + #ifdef G_OS_WIN32 + exec_path = g_win32_get_package_installation_directory_of_module (NULL); + #else + exec_path = g_file_get_path (g_file_get_parent (g_file_get_parent (g_file_new_for_path ( + g_find_program_in_path (command_line[0]))))); + #endif + /* Print messages to stdout on Win32 console, cf. AbiWord * http://svn.abisource.com/abiword/trunk/src/wp/main/win/Win32Main.cpp */ #ifdef _WIN32 diff --git a/midori/midori-app.h b/midori/midori-app.h index c918a19e..ffb03bc6 100644 --- a/midori/midori-app.h +++ b/midori/midori-app.h @@ -85,6 +85,12 @@ midori_app_send_notification (MidoriApp* app, void midori_app_setup (gchar** argument_vector); +gchar** +midori_app_get_command_line (void); + +gchar* +midori_app_find_res_filename (const gchar* filename); + G_END_DECLS #endif /* __MIDORI_APP_H__ */ diff --git a/midori/midori-view.c b/midori/midori-view.c index b6fe7ff1..e8397432 100644 --- a/midori/midori-view.c +++ b/midori/midori-view.c @@ -1128,7 +1128,7 @@ midori_view_web_view_resource_request_cb (WebKitWebView* web_view, if (g_str_has_prefix (uri, "res://")) { - gchar* filepath = sokoke_find_data_filename (&uri[6], TRUE); + gchar* filepath = midori_app_find_res_filename (&uri[6]); gchar* file_uri = g_filename_to_uri (filepath, NULL, NULL); g_free (filepath); webkit_network_request_set_uri (request, file_uri); @@ -1441,7 +1441,7 @@ midori_view_display_error (MidoriView* view, const gchar* try_again, WebKitWebFrame* web_frame) { - gchar* path = sokoke_find_data_filename ("error.html", TRUE); + gchar* path = midori_app_find_res_filename ("error.html"); gchar* template; if (g_file_get_contents (path, &template, NULL, NULL)) @@ -3977,7 +3977,7 @@ prepare_speed_dial_html (MidoriView* view, gchar** groups; g_object_get (browser, "speed-dial", &key_file, NULL); - file_path = sokoke_find_data_filename ("speeddial-head-" MIDORI_VERSION ".html", TRUE); + file_path = midori_app_find_res_filename ("speeddial-head.html"); if (key_file != NULL && g_access (file_path, F_OK) == 0 @@ -4245,7 +4245,7 @@ midori_view_set_uri (MidoriView* view, } else if (!strcmp (uri, "about:") || !strcmp (uri, "about:version")) { - gchar* arguments = g_strjoinv (" ", sokoke_get_argv (NULL)); + gchar* arguments = g_strjoinv (" ", midori_app_get_command_line ()); gchar* command_line = sokoke_replace_variables ( arguments, g_get_home_dir (), "~", NULL); gchar* architecture, *platform; diff --git a/midori/sokoke.c b/midori/sokoke.c index e4a0a444..1428924a 100644 --- a/midori/sokoke.c +++ b/midori/sokoke.c @@ -15,6 +15,7 @@ #include "midori-core.h" #include "midori-platform.h" +#include "midori-app.h" #include #if HAVE_UNISTD_H @@ -496,7 +497,7 @@ void sokoke_spawn_app (const gchar* uri, gboolean private) { - const gchar* executable = sokoke_get_argv (NULL)[0]; + const gchar* executable = midori_app_get_command_line ()[0]; /* "midori" "/usr/bin/midori" "c:/Program Files/Midori/bin/midori.exe" */ @@ -1178,25 +1179,6 @@ sokoke_find_data_filename (const gchar* filename, return g_build_filename (MDATADIR, res1, res2, filename, NULL); } -/** - * sokoke_get_argv: - * @argument_vector: %NULL - * - * Retrieves the argument vector passed at program startup. - * - * Return value: the argument vector - **/ -gchar** -sokoke_get_argv (gchar** argument_vector) -{ - static gchar** stored_argv = NULL; - - if (!stored_argv) - stored_argv = g_strdupv (argument_vector); - - return stored_argv; -} - gchar* sokoke_replace_variables (const gchar* template, const gchar* variable_first, ...) diff --git a/wscript b/wscript index f0c42eb8..43963e62 100644 --- a/wscript +++ b/wscript @@ -518,11 +518,8 @@ def build (bld): else: Utils.pprint ('BLUE', "logo-shade could not be rasterized.") - for res_file in ['about.css', 'error.html', 'close.png']: + for res_file in ['about.css', 'error.html', 'close.png', 'speeddial-head.html']: bld.install_files ('${MDATADIR}/' + APPNAME + '/res', 'data/' + res_file) - bld.install_as ( \ - '${MDATADIR}/' + APPNAME + '/res/speeddial-head-%s.html' % VERSION, \ - 'data/speeddial-head.html') if bld.env['addons']: bld.install_files ('${MDATADIR}/' + APPNAME + '/res', 'data/autosuggestcontrol.js')