Improved last workspaces list + added saving of settings
This commit is contained in:
parent
0cb3999495
commit
8d16aca056
@ -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("<b>%s</b>\n<span weight=\"ultralight\">%s</span>",
|
||||
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.");
|
||||
}
|
||||
|
@ -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 */
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user