From eef1f96a0aee9080449284c59c9c988f0b8020c7 Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sat, 11 Feb 2017 17:51:04 +0100 Subject: [PATCH 1/8] Updated mainWindow_add_recent_workspace + refactoring --- src/mainwindow.c | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/mainwindow.c b/src/mainwindow.c index fbed465..49b0463 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -147,9 +147,9 @@ static gint mainWindow_sort_date_compare_func(GtkTreeModel *model, return -1; } -static void mainWindow_add_recent_workspace(struct mainWindow *mainWindow, gchar *path) +void mainWindow_add_recent_workspace(struct mainWindow *mainWindow, gchar *path) { - GtkTreeIter iter; + GtkTreeIter iter, iter2; GRegex *regex; GMatchInfo *match_info; gchar *temp; @@ -163,12 +163,20 @@ static void mainWindow_add_recent_workspace(struct mainWindow *mainWindow, gchar temp = g_strdup_printf("%s\n%s", g_match_info_fetch(match_info, 2), g_match_info_fetch(match_info, 1)); - gtk_list_store_append(mainWindow->workspaceListStore, &iter); + gtk_list_store_prepend(mainWindow->workspaceListStore, &iter); gtk_list_store_set(mainWindow->workspaceListStore, &iter, WSCOL_LABEL, temp, WSCOL_PATH, path, -1); g_free(temp); + + if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(mainWindow->workspaceListStore), NULL) + > FILE_LIST_MAX_LEN) { + while (gtk_tree_model_iter_next(GTK_TREE_MODEL(mainWindow->workspaceListStore), &iter)) { + memcpy(&iter2, &iter, sizeof(iter)); /* TODO: A bit of a hack if you ask me... */ + } + gtk_list_store_remove(mainWindow->workspaceListStore, &iter2); + } } g_regex_unref(regex); @@ -188,9 +196,9 @@ static void mainWindow_configure_workspaceTreeView(struct mainWindow *mainWindow G_TYPE_STRING); mainWindow->workspaceListFiltered = GTK_TREE_MODEL_FILTER( - gtk_tree_model_filter_new( - GTK_TREE_MODEL(mainWindow->workspaceListStore), - NULL)); + gtk_tree_model_filter_new( + GTK_TREE_MODEL(mainWindow->workspaceListStore), + NULL)); gtk_tree_model_filter_set_visible_func(mainWindow->workspaceListFiltered, (GtkTreeModelFilterVisibleFunc) mainWindow_workspace_entry_visible, @@ -201,10 +209,6 @@ static void mainWindow_configure_workspaceTreeView(struct mainWindow *mainWindow renderer = gtk_cell_renderer_text_new(); gtk_tree_view_insert_column_with_attributes(mainWindow->workspaceListView, -1, "", renderer, "markup", WSCOL_LABEL, NULL); - - /* Test only */ - mainWindow_add_recent_workspace(mainWindow, "/home/user/Document/diary"); - mainWindow_add_recent_workspace(mainWindow, "/home/user/Document/workfoo"); } /** @@ -602,13 +606,13 @@ void mainWindow_filterChanged(GtkWidget *widget, gpointer user_data) } mainWindow->filterSettings.search_title = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(mainWindow->checkSearchTitle)); + GTK_TOGGLE_BUTTON(mainWindow->checkSearchTitle)); mainWindow->filterSettings.search_tags = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(mainWindow->checkSearchTags)); + GTK_TOGGLE_BUTTON(mainWindow->checkSearchTags)); mainWindow->filterSettings.search_text = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(mainWindow->checkSearchText)); + GTK_TOGGLE_BUTTON(mainWindow->checkSearchText)); mainWindow->filterSettings.search_summary = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(mainWindow->checkSearchSummary)); + GTK_TOGGLE_BUTTON(mainWindow->checkSearchSummary)); gtk_tree_model_filter_refilter(mainWindow->entryListFiltered); } @@ -752,9 +756,9 @@ void mainWindow_otherWorkspaceClicked(GtkWidget *widget, gpointer user_data) if (res == GTK_RESPONSE_ACCEPT) { char *directory; - directory = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(dialog)); + directory = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); mainWindow_switch_workspace(mainWindow, directory); - g_free (directory); + g_free(directory); } gtk_widget_destroy (dialog); From 85f8c1e78362b6a208724d28e69dad1e129b9da3 Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sat, 11 Feb 2017 18:08:27 +0100 Subject: [PATCH 2/8] Improved last_workspace handling --- src/mainwindow.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/mainwindow.c b/src/mainwindow.c index 49b0463..c069a3d 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -149,10 +149,11 @@ static gint mainWindow_sort_date_compare_func(GtkTreeModel *model, void mainWindow_add_recent_workspace(struct mainWindow *mainWindow, gchar *path) { - GtkTreeIter iter, iter2; + GtkTreeIter iter, iter_delete; GRegex *regex; GMatchInfo *match_info; gchar *temp; + gboolean del_iter = FALSE; regex = g_regex_new("(.*)\\/(.*)", G_REGEX_RAW, 0, NULL); if (g_regex_match(regex, path, 0, &match_info) && @@ -160,6 +161,20 @@ void mainWindow_add_recent_workspace(struct mainWindow *mainWindow, gchar *path) g_match_info_matches(match_info)) { g_match_info_fetch(match_info, 1); + gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mainWindow->workspaceListStore), &iter); + while (gtk_tree_model_iter_next(GTK_TREE_MODEL(mainWindow->workspaceListStore), &iter)) { + memcpy(&iter_delete, &iter, sizeof(iter)); /* Used for last element in case we need to reduce */ + gtk_tree_model_get(GTK_TREE_MODEL(mainWindow->workspaceListStore), &iter, + WSCOL_PATH, &temp, + -1); + if (!g_strcmp0(temp, path)) { + g_free(temp); + del_iter = TRUE; + break; + } + g_free(temp); + } + temp = g_strdup_printf("%s\n%s", g_match_info_fetch(match_info, 2), g_match_info_fetch(match_info, 1)); @@ -170,13 +185,11 @@ void mainWindow_add_recent_workspace(struct mainWindow *mainWindow, gchar *path) -1); g_free(temp); - if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(mainWindow->workspaceListStore), NULL) - > FILE_LIST_MAX_LEN) { - while (gtk_tree_model_iter_next(GTK_TREE_MODEL(mainWindow->workspaceListStore), &iter)) { - memcpy(&iter2, &iter, sizeof(iter)); /* TODO: A bit of a hack if you ask me... */ - } - gtk_list_store_remove(mainWindow->workspaceListStore, &iter2); - } + if (del_iter) + gtk_list_store_remove(mainWindow->workspaceListStore, &iter_delete); + else if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(mainWindow->workspaceListStore), NULL) + > FILE_LIST_MAX_LEN) + gtk_list_store_remove(mainWindow->workspaceListStore, &iter_delete); } g_regex_unref(regex); @@ -703,12 +716,14 @@ static void mainWindow_switch_workspace(struct mainWindow *mainWindow, gchar *pa gtk_popover_popdown(GTK_POPOVER(mainWindow->popoverWorkspace)); mainWindow_set_meta_information(mainWindow, 0, 0, TRUE); mdiary_reset_store(mainWindow->entryListStore, mainWindow->completionListStore); - if (mdiary_scan_to_store(path, mainWindow->entryListStore, mainWindow->completionListStore)) + if (mdiary_scan_to_store(path, mainWindow->entryListStore, mainWindow->completionListStore)) { mainWindow_set_meta_information(mainWindow, mdiary_get_time_earliest(), mdiary_get_time_latest(), FALSE); - else + mainWindow_add_recent_workspace(mainWindow, path); + } else { mainWindow_show_error(mainWindow, "Could not open workspace or no entries were found in it."); + } } From 38c399d685949cee1b2a4a4eb7a94525bca4408e Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sat, 11 Feb 2017 18:09:07 +0100 Subject: [PATCH 3/8] Added new settings parser --- src/main.c | 5 +++-- src/mainwindow.h | 5 +++-- src/settings.c | 9 ++++----- src/settings.h | 5 +++-- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main.c b/src/main.c index 4927253..050f6b0 100644 --- a/src/main.c +++ b/src/main.c @@ -13,11 +13,12 @@ int main(int argc, char *argv[]) gtk_init(&argc, &argv); + mainWindow = mainWindow_new(); + settings_path = g_strdup_printf("%s/.mdiary.conf", g_get_home_dir()); - settings = mdiary_settings_new(); + settings = mdiary_settings_new(mainWindow); mdiary_load_settings(settings_path, settings); - mainWindow = mainWindow_new(); gtk_widget_show(mainWindow->mainWindow); gtk_main(); diff --git a/src/mainwindow.h b/src/mainwindow.h index fe6e4a6..a1d48dc 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -6,6 +6,8 @@ #include #include "mdiary.h" +#define FILE_LIST_MAX_LEN 5 + struct mainWindow { GtkWidget *mainWindow; GtkWidget *mainPane; @@ -59,8 +61,6 @@ void mainWindow_set_meta_information(struct mainWindow *mainWindow, guint time_earliest, guint time_latest, gboolean hide_all); - -/* Slots */ void mainWindow_showPopover(GtkWidget *widget, GdkEvent *event, gpointer user_data); void mainWindow_otherWorkspaceClicked(GtkWidget *widget, gpointer user_data); void mainWindow_workspaceListClicked(GtkWidget *widget, @@ -74,5 +74,6 @@ void mainWindow_filterChanged(GtkWidget *widget, gpointer user_data); void mainWindow_workspace_search_changed(GtkWidget *widget, gpointer user_data); void mainWindow_checkDate(GtkWidget *widget, gint event, gpointer user_data); void mainWindow_dateIconPress(GtkWidget *widget, gint icon_pos, gint event, gpointer user_data); +void mainWindow_add_recent_workspace(struct mainWindow *mainWindow, gchar *path); #endif /* MAINWINDOW_H */ diff --git a/src/settings.c b/src/settings.c index 8e9a504..5807010 100644 --- a/src/settings.c +++ b/src/settings.c @@ -10,8 +10,7 @@ static void mdiary_settings_parse_line(gchar *line, struct mdiary_settings *sett if (g_regex_match(regex, line, 0, &match_info) && g_regex_get_capture_count(regex) > 0 && g_match_info_matches(match_info)) { - settings->last_workspaces = g_list_append(settings->last_workspaces, - g_strdup(g_match_info_fetch(match_info, 1))); + mainWindow_add_recent_workspace(settings->mainWindow, g_match_info_fetch(match_info, 1)); } g_regex_unref(regex); @@ -49,17 +48,17 @@ gboolean mdiary_save_settings(gchar *filename, struct mdiary_settings *settings) g_print("SETTINGS: NYI.\n"); } -struct mdiary_settings *mdiary_settings_new() +struct mdiary_settings *mdiary_settings_new(struct mainWindow *mainWindow) { struct mdiary_settings *settings; settings = malloc(sizeof(struct mdiary_settings)); - settings->last_workspaces = NULL; + settings->mainWindow = mainWindow; return settings; } void mdiary_settings_free(struct mdiary_settings *settings) { - g_list_free_full(settings->last_workspaces, g_free); + free(settings); } diff --git a/src/settings.h b/src/settings.h index 1781b0d..66e21ed 100644 --- a/src/settings.h +++ b/src/settings.h @@ -4,14 +4,15 @@ #include #include #include +#include "mainwindow.h" struct mdiary_settings { - GList *last_workspaces; + struct mainWindow *mainWindow; }; gboolean mdiary_load_settings(gchar *filename, struct mdiary_settings *settings); gboolean mdiary_save_settings(gchar *filename, struct mdiary_settings *settings); -struct mdiary_settings *mdiary_settings_new(); +struct mdiary_settings *mdiary_settings_new(struct mainWindow *mainWindow); void mdiary_settings_free(struct mdiary_settings *settings); #endif // SETTINGS_H From 0cb3999495ca32d31c2ecd398bf72dd20e84cc5d Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sat, 11 Feb 2017 18:11:41 +0100 Subject: [PATCH 4/8] Removed obsolete code --- src/mainwindow.c | 2 -- src/mainwindow.h | 1 - 2 files changed, 3 deletions(-) diff --git a/src/mainwindow.c b/src/mainwindow.c index c069a3d..91128d8 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -450,8 +450,6 @@ struct mainWindow *mainWindow_new() mainWindow->textBuffer = GTK_TEXT_BUFFER(gtk_builder_get_object(builder, "entryTextBuffer")); mainWindow->searchEntryCompletion = GTK_ENTRY_COMPLETION(gtk_builder_get_object( builder, "searchEntryCompletion")); - mainWindow->chooseDirectoryDialog = GTK_FILE_CHOOSER_DIALOG(gtk_builder_get_object( - builder, "chooseDirectoryDialog")); mainWindow->buttonOtherWorkspace = GTK_WIDGET(gtk_builder_get_object(builder, "buttonOtherWorkspace")); mainWindow->workspaceSearch = GTK_WIDGET(gtk_builder_get_object(builder, "searchWorkspace")); mainWindow->popoverWorkspace = GTK_WIDGET(gtk_builder_get_object(builder, "popoverWorkspace")); diff --git a/src/mainwindow.h b/src/mainwindow.h index a1d48dc..5e7ba33 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -23,7 +23,6 @@ struct mainWindow { GtkWidget *checkSearchText; GtkWidget *labelSummary; GtkWidget *buttonClearSearch; - GtkFileChooserWidget *chooseDirectoryDialog; GtkTreeView *entryListView; GtkTreeSelection *entryListSelection; GtkTextBuffer *textBuffer; From 8d16aca0568fb5bbf737f34137589248a1e8fb8d Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sat, 11 Feb 2017 18:33:09 +0100 Subject: [PATCH 5/8] Improved last workspaces list + added saving of settings --- src/mainwindow.c | 45 +++++++++++++++++++++------------------------ src/mainwindow.h | 8 +++++++- src/settings.c | 34 +++++++++++++++++++++++++++++++--- 3 files changed, 59 insertions(+), 28 deletions(-) diff --git a/src/mainwindow.c b/src/mainwindow.c index 91128d8..18582bf 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -1,12 +1,6 @@ #include "mainwindow.h" #include "mdiary.h" -enum { - WSCOL_LABEL = 0, - WSCOL_PATH, - WSCOL_COUNT -}; - static gboolean mainWindow_workspace_entry_visible(GtkTreeModel *model, GtkTreeIter *iter, struct mainWindow *mainWindow) @@ -147,7 +141,7 @@ static gint mainWindow_sort_date_compare_func(GtkTreeModel *model, return -1; } -void mainWindow_add_recent_workspace(struct mainWindow *mainWindow, gchar *path) +void mainWindow_add_recent_workspace(struct mainWindow *mainWindow, gchar *path, gboolean append) { GtkTreeIter iter, iter_delete; GRegex *regex; @@ -161,34 +155,37 @@ void mainWindow_add_recent_workspace(struct mainWindow *mainWindow, gchar *path) g_match_info_matches(match_info)) { g_match_info_fetch(match_info, 1); - gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mainWindow->workspaceListStore), &iter); - while (gtk_tree_model_iter_next(GTK_TREE_MODEL(mainWindow->workspaceListStore), &iter)) { - memcpy(&iter_delete, &iter, sizeof(iter)); /* Used for last element in case we need to reduce */ - gtk_tree_model_get(GTK_TREE_MODEL(mainWindow->workspaceListStore), &iter, - WSCOL_PATH, &temp, - -1); - if (!g_strcmp0(temp, path)) { + if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mainWindow->workspaceListStore), &iter)) { + do { + memcpy(&iter_delete, &iter, sizeof(iter)); /* scan for last */ + gtk_tree_model_get(GTK_TREE_MODEL(mainWindow->workspaceListStore), &iter, + WSCOL_PATH, &temp, + -1); + if (!g_strcmp0(temp, path)) { + g_free(temp); + gtk_list_store_remove(mainWindow->workspaceListStore, &iter); + break; + } g_free(temp); - del_iter = TRUE; - break; - } - g_free(temp); + } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(mainWindow->workspaceListStore), &iter)); } temp = g_strdup_printf("%s\n%s", g_match_info_fetch(match_info, 2), g_match_info_fetch(match_info, 1)); - gtk_list_store_prepend(mainWindow->workspaceListStore, &iter); + if (append) + gtk_list_store_append(mainWindow->workspaceListStore, &iter); + else + gtk_list_store_prepend(mainWindow->workspaceListStore, &iter); gtk_list_store_set(mainWindow->workspaceListStore, &iter, WSCOL_LABEL, temp, WSCOL_PATH, path, -1); g_free(temp); - if (del_iter) - gtk_list_store_remove(mainWindow->workspaceListStore, &iter_delete); - else if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(mainWindow->workspaceListStore), NULL) - > FILE_LIST_MAX_LEN) + + if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(mainWindow->workspaceListStore), NULL) + > FILE_LIST_MAX_LEN) gtk_list_store_remove(mainWindow->workspaceListStore, &iter_delete); } @@ -718,7 +715,7 @@ static void mainWindow_switch_workspace(struct mainWindow *mainWindow, gchar *pa mainWindow_set_meta_information(mainWindow, mdiary_get_time_earliest(), mdiary_get_time_latest(), FALSE); - mainWindow_add_recent_workspace(mainWindow, path); + mainWindow_add_recent_workspace(mainWindow, path, FALSE); } else { mainWindow_show_error(mainWindow, "Could not open workspace or no entries were found in it."); } diff --git a/src/mainwindow.h b/src/mainwindow.h index 5e7ba33..9b1d794 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -8,6 +8,12 @@ #define FILE_LIST_MAX_LEN 5 +enum { + WSCOL_LABEL = 0, + WSCOL_PATH, + WSCOL_COUNT +}; + struct mainWindow { GtkWidget *mainWindow; GtkWidget *mainPane; @@ -73,6 +79,6 @@ void mainWindow_filterChanged(GtkWidget *widget, gpointer user_data); void mainWindow_workspace_search_changed(GtkWidget *widget, gpointer user_data); void mainWindow_checkDate(GtkWidget *widget, gint event, gpointer user_data); void mainWindow_dateIconPress(GtkWidget *widget, gint icon_pos, gint event, gpointer user_data); -void mainWindow_add_recent_workspace(struct mainWindow *mainWindow, gchar *path); +void mainWindow_add_recent_workspace(struct mainWindow *mainWindow, gchar *path, gboolean append); #endif /* MAINWINDOW_H */ diff --git a/src/settings.c b/src/settings.c index 5807010..a88e881 100644 --- a/src/settings.c +++ b/src/settings.c @@ -10,7 +10,7 @@ static void mdiary_settings_parse_line(gchar *line, struct mdiary_settings *sett if (g_regex_match(regex, line, 0, &match_info) && g_regex_get_capture_count(regex) > 0 && g_match_info_matches(match_info)) { - mainWindow_add_recent_workspace(settings->mainWindow, g_match_info_fetch(match_info, 1)); + mainWindow_add_recent_workspace(settings->mainWindow, g_match_info_fetch(match_info, 1), TRUE); } g_regex_unref(regex); @@ -40,12 +40,40 @@ gboolean mdiary_load_settings(gchar *filename, struct mdiary_settings *settings) g_input_stream_close(G_INPUT_STREAM(dstream), NULL, NULL); g_input_stream_close(G_INPUT_STREAM(stream), NULL, NULL); g_object_unref(file); - } gboolean mdiary_save_settings(gchar *filename, struct mdiary_settings *settings) { - g_print("SETTINGS: NYI.\n"); + GtkTreeIter iter; + gchar *temp; + gchar *output_buffer; + GFileOutputStream *stream; + GFile *file; + + file = g_file_new_for_path(filename); + stream = g_file_replace( + file, NULL, FALSE, + G_FILE_CREATE_NONE, + NULL, NULL); + + if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(settings->mainWindow->workspaceListStore), &iter)) { + do { + gtk_tree_model_get(GTK_TREE_MODEL(settings->mainWindow->workspaceListStore), &iter, + WSCOL_PATH, &temp, + -1); + + output_buffer = g_strdup_printf("workspace = %s\n", temp); + g_output_stream_write(G_OUTPUT_STREAM(stream), + output_buffer, strlen(output_buffer), NULL, NULL); + + g_free(output_buffer); + g_free(temp); + + } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(settings->mainWindow->workspaceListStore), &iter)); + } + g_output_stream_close(G_OUTPUT_STREAM(stream),NULL,NULL); + g_object_unref(stream); + g_object_unref(file); } struct mdiary_settings *mdiary_settings_new(struct mainWindow *mainWindow) From 98a6c30744c7fd6b947d7b2cf2463ea5c6298974 Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sat, 11 Feb 2017 18:37:04 +0100 Subject: [PATCH 6/8] Fixed error which caused last workspace entries to disappear --- glade/mainWindow.glade | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/glade/mainWindow.glade b/glade/mainWindow.glade index b76bdb0..4cecb9e 100644 --- a/glade/mainWindow.glade +++ b/glade/mainWindow.glade @@ -33,8 +33,13 @@ True True + natural + natural False + False + True True + False horizontal True From e9ca1ce259f7d03aa5bbc6da454f15b3dcc0c8c5 Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sat, 11 Feb 2017 18:41:11 +0100 Subject: [PATCH 7/8] Now automatically resumes last workspace --- src/mainwindow.c | 2 +- src/mainwindow.h | 1 + src/settings.c | 11 +++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/mainwindow.c b/src/mainwindow.c index 18582bf..3e02aa3 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -705,7 +705,7 @@ static void mainWindow_show_error(struct mainWindow *mainWindow, gchar *text) gtk_widget_destroy(dialog); } -static void mainWindow_switch_workspace(struct mainWindow *mainWindow, gchar *path) +void mainWindow_switch_workspace(struct mainWindow *mainWindow, gchar *path) { g_print("Switching workspace to %s.\n", path); gtk_popover_popdown(GTK_POPOVER(mainWindow->popoverWorkspace)); diff --git a/src/mainwindow.h b/src/mainwindow.h index 9b1d794..97a6e04 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -80,5 +80,6 @@ void mainWindow_workspace_search_changed(GtkWidget *widget, gpointer user_data); void mainWindow_checkDate(GtkWidget *widget, gint event, gpointer user_data); void mainWindow_dateIconPress(GtkWidget *widget, gint icon_pos, gint event, gpointer user_data); void mainWindow_add_recent_workspace(struct mainWindow *mainWindow, gchar *path, gboolean append); +void mainWindow_switch_workspace(struct mainWindow *mainWindow, gchar *path); #endif /* MAINWINDOW_H */ diff --git a/src/settings.c b/src/settings.c index a88e881..b8a2dcd 100644 --- a/src/settings.c +++ b/src/settings.c @@ -24,6 +24,9 @@ gboolean mdiary_load_settings(gchar *filename, struct mdiary_settings *settings) GDataInputStream *dstream; gchar *line; + GtkTreeIter iter; + gchar *temp; + file = g_file_new_for_path(filename); stream = g_file_read(file, NULL, &err); if (err != NULL) { @@ -40,6 +43,14 @@ gboolean mdiary_load_settings(gchar *filename, struct mdiary_settings *settings) g_input_stream_close(G_INPUT_STREAM(dstream), NULL, NULL); g_input_stream_close(G_INPUT_STREAM(stream), NULL, NULL); g_object_unref(file); + + if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(settings->mainWindow->workspaceListStore), &iter)) { + gtk_tree_model_get(GTK_TREE_MODEL(settings->mainWindow->workspaceListStore), &iter, + WSCOL_PATH, &temp, + -1); + mainWindow_switch_workspace(settings->mainWindow, temp); + g_free(temp); + } } gboolean mdiary_save_settings(gchar *filename, struct mdiary_settings *settings) From f444d40071fa394a6c8cb433750db7bfe49469cb Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sat, 11 Feb 2017 18:44:29 +0100 Subject: [PATCH 8/8] Headerbar now updates with the workspace URL --- glade/mainWindow.glade | 2 +- src/mainwindow.c | 3 +++ src/mainwindow.h | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/glade/mainWindow.glade b/glade/mainWindow.glade index 4cecb9e..3af9833 100644 --- a/glade/mainWindow.glade +++ b/glade/mainWindow.glade @@ -390,7 +390,7 @@ - + True False MDiary diff --git a/src/mainwindow.c b/src/mainwindow.c index 3e02aa3..f5cd3d3 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -442,6 +442,7 @@ struct mainWindow *mainWindow_new() mainWindow->checkSearchText = GTK_WIDGET(gtk_builder_get_object(builder, "checkSearchText")); mainWindow->labelSummary = GTK_WIDGET(gtk_builder_get_object(builder, "labelSummary")); mainWindow->buttonClearSearch = GTK_WIDGET(gtk_builder_get_object(builder, "buttonClearSearch")); + mainWindow->headerBar = GTK_WIDGET(gtk_builder_get_object(builder, "headerBar")); 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")); @@ -716,7 +717,9 @@ void mainWindow_switch_workspace(struct mainWindow *mainWindow, gchar *path) mdiary_get_time_earliest(), mdiary_get_time_latest(), FALSE); mainWindow_add_recent_workspace(mainWindow, path, FALSE); + gtk_header_bar_set_subtitle(GTK_HEADER_BAR(mainWindow->headerBar), path); } else { + gtk_header_bar_set_subtitle(GTK_HEADER_BAR(mainWindow->headerBar), "No workspace opened."); mainWindow_show_error(mainWindow, "Could not open workspace or no entries were found in it."); } diff --git a/src/mainwindow.h b/src/mainwindow.h index 97a6e04..03c30c1 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -29,6 +29,7 @@ struct mainWindow { GtkWidget *checkSearchText; GtkWidget *labelSummary; GtkWidget *buttonClearSearch; + GtkWidget *headerBar; GtkTreeView *entryListView; GtkTreeSelection *entryListSelection; GtkTextBuffer *textBuffer;