diff --git a/src/mainwindow.c b/src/mainwindow.c index b3939c6..353d147 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -240,6 +240,7 @@ static void mainWindow_configure_treeView(struct mainWindow *mainWindow) G_TYPE_POINTER, G_TYPE_POINTER, G_TYPE_STRING, + G_TYPE_STRING, G_TYPE_STRING); mainWindow->entryListFiltered = GTK_TREE_MODEL_FILTER(gtk_tree_model_filter_new( GTK_TREE_MODEL(mainWindow->entryListStore), @@ -592,19 +593,21 @@ void mainWindow_calendarSelected(GtkWidget *widget, gpointer user_data) g_free(text); } -static void mainWindow_set_text(struct mainWindow *mainWindow, gchar *text) +static void mainWindow_set_text(struct mainWindow *mainWindow, gchar *text, gchar *file_url) { gchar *tempfile_path = "/tmp/mdiary.tmp.md"; gchar *cmd = NULL; gchar *cmd_stdout = NULL; gchar *cmd_stderr = NULL; gint exit_status = 0; + gchar *base_url = NULL; GFileOutputStream *stream; GFile *file; if (mainWindow->webkitView && gtk_stack_get_visible_child(GTK_STACK(mainWindow->stackRenderMode)) == mainWindow->webkitScrollArea) { if (text[0] != '\0') { + base_url = g_strdup_printf("file://%s", file_url); file = g_file_new_for_path(tempfile_path); stream = g_file_replace( file, NULL, FALSE, @@ -617,12 +620,13 @@ static void mainWindow_set_text(struct mainWindow *mainWindow, gchar *text) if (g_spawn_command_line_sync(cmd, &cmd_stdout, &cmd_stderr, &exit_status, NULL) && exit_status == 0) { webkit_web_view_load_html_string(WEBKIT_WEB_VIEW(mainWindow->webkitView), - cmd_stdout, ""); + cmd_stdout, base_url); } else { g_warning("Could not render markdown for file. Showing plain text instead.\n"); webkit_web_view_load_html_string(WEBKIT_WEB_VIEW(mainWindow->webkitView), text, ""); } + g_free(base_url); } else { webkit_web_view_load_html_string(WEBKIT_WEB_VIEW(mainWindow->webkitView), text, ""); @@ -651,6 +655,7 @@ void mainWindow_entrySelected(GtkWidget *widget, gpointer user_data) GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; + gchar *file_url; gchar *text; gchar *title; gchar *summary; @@ -659,18 +664,21 @@ void mainWindow_entrySelected(GtkWidget *widget, gpointer user_data) selection = gtk_tree_view_get_selection(mainWindow->entryListView); if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, COL_TEXT, &text, -1); - mainWindow_set_text(mainWindow, text); + gtk_tree_model_get(model, &iter, COL_URL, &file_url, -1); + mainWindow_set_text(mainWindow, text, file_url); g_free(text); + g_free(file_url); gtk_tree_model_get(model, &iter, COL_SUMMARY, &summary, -1); gtk_tree_model_get(model, &iter, COL_TITLE, &title, -1); temp = g_strdup_printf("%s: %s", title, summary); gtk_label_set_markup(GTK_LABEL(mainWindow->labelSummary), temp); + g_free(title); g_free(summary); g_free(temp); } else { - mainWindow_set_text(mainWindow, ""); + mainWindow_set_text(mainWindow, "", ""); gtk_label_set_text(GTK_LABEL(mainWindow->labelSummary), "Please select an entry in the list above."); } } diff --git a/src/mdiary.c b/src/mdiary.c index 1317cfd..28c1978 100644 --- a/src/mdiary.c +++ b/src/mdiary.c @@ -346,7 +346,8 @@ static void mdiary_add_file_to_store(struct mdiary_scanner *mdiary_scanner, datetime, tagList, summary, - text->str); + text->str, + filename); if (g_date_time_to_unix(datetime) > mdiary_scanner->time_latest) mdiary_scanner->time_latest = g_date_time_to_unix(datetime); @@ -542,7 +543,8 @@ void mdiary_add_entry_to_store(GtkListStore *entryListStore, GDateTime *datetime, GList *tags, gchar *summary, - gchar *text) + gchar *text, + gchar *file_url) { GtkTreeIter iter; GDateTime *datetime_copy; @@ -567,6 +569,7 @@ void mdiary_add_entry_to_store(GtkListStore *entryListStore, COL_TAGLIST, taglist_copy, /* TODO: Verify that the duplication worked! */ COL_SUMMARY, summary, /* Automatically strdupd */ COL_TEXT, text, /* Automatically strdupd */ + COL_URL, file_url, /* Automatically strdupd */ -1); g_free(date_text); diff --git a/src/mdiary.h b/src/mdiary.h index dbda7ce..99a0a81 100644 --- a/src/mdiary.h +++ b/src/mdiary.h @@ -13,6 +13,7 @@ enum { COL_TAGLIST, /* GList of the tags */ COL_SUMMARY, /* Summary of the entry */ COL_TEXT, /* Raw text from the file */ + COL_URL, /* Path to the file */ COL_COUNT }; @@ -36,7 +37,8 @@ void mdiary_add_entry_to_store(GtkListStore *entryListStore, GDateTime *datetime, GList *tags, gchar *summary, - gchar *text); + gchar *text, + gchar *file_url); GDateTime *mdiary_get_date_from_string_ext(gchar *string, gchar *prefix, gchar *suffix); GDateTime *mdiary_get_date_from_string(gchar *string); void mdiary_reset_store(GtkListStore *entryListStore, GtkListStore *autoCompletion);