Compare commits

..

No commits in common. "2d8d86781c127b466614592699ef97371d1a9387" and "0a6beb710ca4dd592bdbba038c290e2fa2977852" have entirely different histories.

7 changed files with 28 additions and 184 deletions

View File

@ -7,12 +7,11 @@ find_package(PkgConfig REQUIRED)
pkg_check_modules(GLIB2 REQUIRED glib-2.0)
pkg_check_modules(GOBJECT2 REQUIRED gobject-2.0)
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
pkg_check_modules(WEBKIT REQUIRED webkit2gtk-4.0)
INCLUDE_DIRECTORIES (${GLIB2_INCLUDE_DIRS} ${GOBJECT2_INCLUDE_DIRS} ${GTK3_INCLUDE_DIRS} ${WEBKIT_INCLUDE_DIRS})
LINK_DIRECTORIES (${GLIB2_LIBRARY_DIRS} ${GOBJECT2_LIBRARY_DIRS} ${GTK3_LIBRARY_DIRS} ${WEBKIT_LIBRARY_DIRS})
add_definitions(${GLIB2_CFLAGS_OTHER} ${GOBJECT2_CFLAGS_OTHER} ${GTK3_CFLAGS_OTHER} ${WEBKIT_CFLAGS_OTHER})
INCLUDE_DIRECTORIES (${GLIB2_INCLUDE_DIRS} ${GOBJECT2_INCLUDE_DIRS} ${GTK3_INCLUDE_DIRS} )
LINK_DIRECTORIES (${GLIB2_LIBRARY_DIRS} ${GOBJECT2_LIBRARY_DIRS} ${GTK3_LIBRARY_DIRS})
add_definitions(${GLIB2_CFLAGS_OTHER} ${GOBJECT2_CFLAGS_OTHER} ${GTK3_CFLAGS_OTHER})
aux_source_directory(./src SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(${PROJECT_NAME} ${GTK3_LIBRARIES} ${WEBKIT_LIBRARIES})
target_link_libraries(${PROJECT_NAME} ${GTK3_LIBRARIES} ${PC_LIBSOUP_LIBRARIES})

View File

@ -78,6 +78,7 @@
<property name="width_request">720</property>
<property name="height_request">405</property>
<property name="can_focus">False</property>
<signal name="destroy" handler="gtk_main_quit" swapped="no"/>
<child>
<object class="GtkPaned" id="mainPane">
<property name="visible">True</property>
@ -356,32 +357,22 @@
</packing>
</child>
<child>
<object class="GtkStack" id="stackRenderMode">
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkScrolledWindow" id="entryTextScrollArea">
<object class="GtkTextView" id="entryText">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTextView" id="entryText">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">False</property>
<property name="wrap_mode">word-char</property>
<property name="left_margin">4</property>
<property name="right_margin">4</property>
<property name="top_margin">4</property>
<property name="bottom_margin">4</property>
<property name="buffer">entryTextBuffer</property>
</object>
</child>
<property name="editable">False</property>
<property name="wrap_mode">word-char</property>
<property name="left_margin">4</property>
<property name="right_margin">4</property>
<property name="top_margin">4</property>
<property name="bottom_margin">4</property>
<property name="buffer">entryTextBuffer</property>
</object>
<packing>
<property name="name">page0</property>
<property name="title" translatable="yes">page0</property>
</packing>
</child>
</object>
<packing>

View File

@ -5,72 +5,26 @@
#include "mdiary.h"
#include "settings.h"
static void quit_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data)
int main(int argc, char *argv[])
{
struct mainWindow *mainWindow = *((struct mainWindow **) user_data);
gtk_window_close(GTK_WINDOW(mainWindow->mainWindow));
}
static void settings_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data)
{
struct mainWindow *mainWindow = *((struct mainWindow **) user_data);
g_print("nTODO\n");
}
const GActionEntry app_actions[] = {
{ "quit", quit_cb },
{ "settings", settings_cb }
};
static void activate(GApplication *app, gpointer user_data)
{
struct mainWindow *mainWindow = *((struct mainWindow **) user_data);
struct mainWindow *mainWindow;
struct mdiary_settings *settings;
gchar *settings_path;
gtk_init(&argc, &argv);
mainWindow = mainWindow_new();
gtk_application_add_window(GTK_APPLICATION(app), GTK_WINDOW(mainWindow->mainWindow));
settings_path = g_strdup_printf("%s/.mdiary.conf", g_get_home_dir());
settings = mdiary_settings_new(mainWindow);
mdiary_load_settings(settings_path, settings);
gtk_widget_show(mainWindow->mainWindow);
gtk_main();
mdiary_save_settings(settings_path, settings);
mdiary_settings_free(settings);
g_free(settings_path);
}
int main(int argc, char *argv[])
{
struct mainWindow *mainWindow;
GtkApplication *app;
GMenu *app_menu;
GMenu *p1;
GMenu *p2;
int status;
app = gtk_application_new("net.notsyncing.mdiary", G_APPLICATION_FLAGS_NONE);
g_application_register(G_APPLICATION(app), NULL, NULL);
g_signal_connect(app, "activate", G_CALLBACK(activate), &mainWindow);
app_menu = g_menu_new();
p1 = g_menu_new();
p2 = g_menu_new();
g_menu_append(p1, "Settings", "app.settings");
g_menu_append(p2, "Quit", "app.quit");
g_menu_append_section(app_menu, NULL, G_MENU_MODEL(p1));
g_menu_append_section(app_menu, NULL, G_MENU_MODEL(p2));
gtk_application_set_app_menu(app, G_MENU_MODEL(app_menu));
g_action_map_add_action_entries(G_ACTION_MAP(app), app_actions, G_N_ELEMENTS(app_actions), &mainWindow);
gtk_application_set_app_menu(GTK_APPLICATION(app), G_MENU_MODEL(app_menu));
g_object_unref(p1);
g_object_unref(p2);
g_object_unref(app_menu);
status = g_application_run(G_APPLICATION(app), argc, argv);
g_object_unref(app);
return 0;
}

View File

@ -240,7 +240,6 @@ 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),
@ -425,33 +424,6 @@ static void mainWindow_init_to_default(struct mainWindow *mainWindow)
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(mainWindow->checkSearchText), 0);
}
/**
* @brief mainWindow_webkit_set_enabled sets the active text renderer.
* @param mainWindow the mainWindow
* @param state
*/
void mainWindow_webkit_set_enabled(struct mainWindow *mainWindow, gboolean state)
{
if (state) {
if (!mainWindow->webkitView) {
mainWindow->webkitView = webkit_web_view_new();
webkit_web_view_load_html_string(WEBKIT_WEB_VIEW(mainWindow->webkitView), "", "");
gtk_widget_show(mainWindow->webkitView);
mainWindow->webkitScrollArea = gtk_scrolled_window_new(NULL, NULL);
gtk_container_add(GTK_CONTAINER(mainWindow->webkitScrollArea), mainWindow->webkitView);
gtk_stack_add_titled(GTK_STACK(mainWindow->stackRenderMode), mainWindow->webkitScrollArea,
"webkit", "webkit");
gtk_widget_show(mainWindow->webkitScrollArea);
}
gtk_stack_set_visible_child(GTK_STACK(mainWindow->stackRenderMode),
mainWindow->webkitScrollArea);
} else {
gtk_stack_set_visible_child(GTK_STACK(mainWindow->stackRenderMode),
mainWindow->entryTextScrollArea);
}
}
/**
* @brief mainWindow_new creates a new mainWindow.
* @return Returns struct mainWindow *
@ -470,7 +442,6 @@ struct mainWindow *mainWindow_new()
mainWindow->dateStart = GTK_WIDGET(gtk_builder_get_object(builder, "dateStart"));
mainWindow->dateEnd = GTK_WIDGET(gtk_builder_get_object(builder, "dateEnd"));
mainWindow->entryText = GTK_WIDGET(gtk_builder_get_object(builder, "entryText"));
mainWindow->entryTextScrollArea = GTK_WIDGET(gtk_builder_get_object(builder, "entryTextScrollArea"));
mainWindow->popoverDate = GTK_WIDGET(gtk_builder_get_object(builder, "popoverDate"));
mainWindow->calendarRange = GTK_WIDGET(gtk_builder_get_object(builder, "calendarRange"));
mainWindow->checkSearchTitle = GTK_WIDGET(gtk_builder_get_object(builder, "checkSearchTitle"));
@ -482,7 +453,6 @@ struct mainWindow *mainWindow_new()
mainWindow->headerBar = GTK_WIDGET(gtk_builder_get_object(builder, "headerBar"));
mainWindow->labelDateToDate = GTK_WIDGET(gtk_builder_get_object(builder, "label_date_to_date"));
mainWindow->buttonDecrypt = GTK_WIDGET(gtk_builder_get_object(builder, "buttonDecrypt"));
mainWindow->stackRenderMode = GTK_WIDGET(gtk_builder_get_object(builder, "stackRenderMode"));
mainWindow->entryListView = GTK_TREE_VIEW(gtk_builder_get_object(builder, "entryListView"));
mainWindow->entryListSelection = GTK_TREE_SELECTION(gtk_builder_get_object(builder, "entryListSelection"));
mainWindow->textBuffer = GTK_TEXT_BUFFER(gtk_builder_get_object(builder, "entryTextBuffer"));
@ -506,8 +476,6 @@ struct mainWindow *mainWindow_new()
g_object_unref(G_OBJECT(builder));
mainWindow_configure_treeView(mainWindow);
mainWindow->webkitView = NULL;
mainWindow->webkitScrollArea = NULL;
mainWindow_connect_signals(mainWindow);
mainWindow_configure_workspaceTreeView(mainWindow);
mainWindow_init_to_default(mainWindow);
@ -515,8 +483,6 @@ struct mainWindow *mainWindow_new()
mainWindow_configure_entry_completion(mainWindow);
mainWindow_set_meta_information(mainWindow, 0, 0, TRUE);
mainWindow_webkit_set_enabled(mainWindow, TRUE);
return mainWindow;
}
@ -593,57 +559,6 @@ void mainWindow_calendarSelected(GtkWidget *widget, gpointer user_data)
g_free(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,
G_FILE_CREATE_NONE,
NULL, NULL);
g_output_stream_write(G_OUTPUT_STREAM(stream), text, strlen(text), NULL, NULL);
g_output_stream_flush(G_OUTPUT_STREAM(stream), NULL, NULL);
cmd = g_strdup_printf("markdown %s", tempfile_path);
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, 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, "");
}
g_output_stream_close(G_OUTPUT_STREAM(stream), NULL, NULL);
g_file_delete(file, NULL, NULL);
g_object_unref(stream);
g_object_unref(file);
g_free(cmd);
g_free(cmd_stdout);
g_free(cmd_stderr);
} else {
gtk_text_buffer_set_text(mainWindow->textBuffer, text, strlen(text));
}
}
/**
* @brief mainWindow_entrySelected is the callback when the user selects a diary entry.
* @param widget N/A
@ -655,7 +570,6 @@ void mainWindow_entrySelected(GtkWidget *widget, gpointer user_data)
GtkTreeSelection *selection;
GtkTreeModel *model;
GtkTreeIter iter;
gchar *file_url;
gchar *text;
gchar *title;
gchar *summary;
@ -664,21 +578,18 @@ 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);
gtk_tree_model_get(model, &iter, COL_URL, &file_url, -1);
mainWindow_set_text(mainWindow, text, file_url);
gtk_text_buffer_set_text(mainWindow->textBuffer, text, strlen(text));
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("<b>%s</b>: %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, "", "");
gtk_text_buffer_set_text(mainWindow->textBuffer, "", 0);
gtk_label_set_text(GTK_LABEL(mainWindow->labelSummary), "Please select an entry in the list above.");
}
}

View File

@ -4,7 +4,6 @@
#include <stdlib.h>
#include <string.h>
#include <gtk/gtk.h>
#include <webkit2/webkit2.h>
#include "mdiary.h"
#define FILE_LIST_MAX_LEN 5
@ -22,7 +21,6 @@ struct mainWindow {
GtkWidget *dateStart;
GtkWidget *dateEnd;
GtkWidget *entryText;
GtkWidget *entryTextScrollArea;
GtkWidget *popoverDate;
GtkWidget *calendarRange;
GtkWidget *checkSearchTitle;
@ -34,9 +32,6 @@ struct mainWindow {
GtkWidget *headerBar;
GtkWidget *labelDateToDate;
GtkWidget *buttonDecrypt;
GtkWidget *webkitView;
GtkWidget *webkitScrollArea;
GtkWidget *stackRenderMode;
GtkTreeView *entryListView;
GtkTreeSelection *entryListSelection;
GtkTextBuffer *textBuffer;
@ -90,6 +85,5 @@ void mainWindow_dateIconPress(GtkWidget *widget, gint icon_pos, gint event, gpoi
void mainWindow_add_recent_workspace(struct mainWindow *mainWindow, gchar *path, gboolean append);
void mainWindow_switch_workspace(struct mainWindow *mainWindow, gchar *path, gboolean gpg_enabled);
void mainWindow_decrypt_gpg_clicked(GtkWidget *widget, gpointer user_data);
void mainWindow_webkit_set_enabled(struct mainWindow *mainWindow, gboolean state);
#endif /* MAINWINDOW_H */

View File

@ -346,8 +346,7 @@ static void mdiary_add_file_to_store(struct mdiary_scanner *mdiary_scanner,
datetime,
tagList,
summary,
text->str,
filename);
text->str);
if (g_date_time_to_unix(datetime) > mdiary_scanner->time_latest)
mdiary_scanner->time_latest = g_date_time_to_unix(datetime);
@ -543,8 +542,7 @@ void mdiary_add_entry_to_store(GtkListStore *entryListStore,
GDateTime *datetime,
GList *tags,
gchar *summary,
gchar *text,
gchar *file_url)
gchar *text)
{
GtkTreeIter iter;
GDateTime *datetime_copy;
@ -569,7 +567,6 @@ 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);

View File

@ -13,7 +13,6 @@ enum {
COL_TAGLIST, /* GList<gchar *> of the tags */
COL_SUMMARY, /* Summary of the entry */
COL_TEXT, /* Raw text from the file */
COL_URL, /* Path to the file */
COL_COUNT
};
@ -37,8 +36,7 @@ void mdiary_add_entry_to_store(GtkListStore *entryListStore,
GDateTime *datetime,
GList *tags,
gchar *summary,
gchar *text,
gchar *file_url);
gchar *text);
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);