|
Jiri Moskovcak |
373fc9d |
From 9e36fa04511b245ae904d67cbb9cd803d3a7e7c6 Mon Sep 17 00:00:00 2001
|
|
Jiri Moskovcak |
373fc9d |
From: Denys Vlasenko <dvlasenk@redhat.com>
|
|
Jiri Moskovcak |
373fc9d |
Date: Tue, 19 Jul 2011 12:06:01 +0200
|
|
Jiri Moskovcak |
373fc9d |
Subject: [PATCH 04/12] wizard: steal directory before copying added files to
|
|
Jiri Moskovcak |
373fc9d |
it
|
|
Jiri Moskovcak |
373fc9d |
|
|
Jiri Moskovcak |
373fc9d |
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
|
|
Jiri Moskovcak |
373fc9d |
---
|
|
Jiri Moskovcak |
373fc9d |
src/gui-wizard-gtk/wizard.c | 163 +++++++++++++++++++++++--------------------
|
|
Jiri Moskovcak |
373fc9d |
1 files changed, 86 insertions(+), 77 deletions(-)
|
|
Jiri Moskovcak |
373fc9d |
|
|
Jiri Moskovcak |
373fc9d |
diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c
|
|
Jiri Moskovcak |
373fc9d |
index cdc4a5c..847e84c 100644
|
|
Jiri Moskovcak |
373fc9d |
--- a/src/gui-wizard-gtk/wizard.c
|
|
Jiri Moskovcak |
373fc9d |
+++ b/src/gui-wizard-gtk/wizard.c
|
|
Jiri Moskovcak |
373fc9d |
@@ -1675,6 +1675,92 @@ static void search_timeout(GtkEntry *entry)
|
|
Jiri Moskovcak |
373fc9d |
g_timeout = g_timeout_add(500, &highlight_search, (gpointer)entry);
|
|
Jiri Moskovcak |
373fc9d |
}
|
|
Jiri Moskovcak |
373fc9d |
|
|
Jiri Moskovcak |
373fc9d |
+static void save_edited_one_liner(GtkCellRendererText *renderer,
|
|
Jiri Moskovcak |
373fc9d |
+ gchar *tree_path,
|
|
Jiri Moskovcak |
373fc9d |
+ gchar *new_text,
|
|
Jiri Moskovcak |
373fc9d |
+ gpointer user_data)
|
|
Jiri Moskovcak |
373fc9d |
+{
|
|
Jiri Moskovcak |
373fc9d |
+ //log("path:'%s' new_text:'%s'", tree_path, new_text);
|
|
Jiri Moskovcak |
373fc9d |
+
|
|
Jiri Moskovcak |
373fc9d |
+ GtkTreeIter iter;
|
|
Jiri Moskovcak |
373fc9d |
+ if (!gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(g_ls_details), &iter, tree_path))
|
|
Jiri Moskovcak |
373fc9d |
+ return;
|
|
Jiri Moskovcak |
373fc9d |
+ gchar *item_name = NULL;
|
|
Jiri Moskovcak |
373fc9d |
+ gtk_tree_model_get(GTK_TREE_MODEL(g_ls_details), &iter,
|
|
Jiri Moskovcak |
373fc9d |
+ DETAIL_COLUMN_NAME, &item_name,
|
|
Jiri Moskovcak |
373fc9d |
+ -1);
|
|
Jiri Moskovcak |
373fc9d |
+ if (!item_name) /* paranoia, should never happen */
|
|
Jiri Moskovcak |
373fc9d |
+ return;
|
|
Jiri Moskovcak |
373fc9d |
+ struct problem_item *item = get_problem_data_item_or_NULL(g_cd, item_name);
|
|
Jiri Moskovcak |
373fc9d |
+ if (item && (item->flags & CD_FLAG_ISEDITABLE))
|
|
Jiri Moskovcak |
373fc9d |
+ {
|
|
Jiri Moskovcak |
373fc9d |
+ struct dump_dir *dd = dd_opendir(g_dump_dir_name, DD_OPEN_READONLY);
|
|
Jiri Moskovcak |
373fc9d |
+ dd = steal_if_needed(dd);
|
|
Jiri Moskovcak |
373fc9d |
+ if (dd && dd->locked)
|
|
Jiri Moskovcak |
373fc9d |
+ {
|
|
Jiri Moskovcak |
373fc9d |
+ dd_save_text(dd, item_name, new_text);
|
|
Jiri Moskovcak |
373fc9d |
+ free(item->content);
|
|
Jiri Moskovcak |
373fc9d |
+ item->content = xstrdup(new_text);
|
|
Jiri Moskovcak |
373fc9d |
+ gtk_list_store_set(g_ls_details, &iter,
|
|
Jiri Moskovcak |
373fc9d |
+ DETAIL_COLUMN_VALUE, new_text,
|
|
Jiri Moskovcak |
373fc9d |
+ -1);
|
|
Jiri Moskovcak |
373fc9d |
+ }
|
|
Jiri Moskovcak |
373fc9d |
+ dd_close(dd);
|
|
Jiri Moskovcak |
373fc9d |
+ }
|
|
Jiri Moskovcak |
373fc9d |
+}
|
|
Jiri Moskovcak |
373fc9d |
+
|
|
Jiri Moskovcak |
373fc9d |
+static void on_btn_add_file(GtkButton *button)
|
|
Jiri Moskovcak |
373fc9d |
+{
|
|
Jiri Moskovcak |
373fc9d |
+ GtkWidget *dialog = gtk_file_chooser_dialog_new(
|
|
Jiri Moskovcak |
373fc9d |
+ "Attach File",
|
|
Jiri Moskovcak |
373fc9d |
+ GTK_WINDOW(g_assistant),
|
|
Jiri Moskovcak |
373fc9d |
+ GTK_FILE_CHOOSER_ACTION_OPEN,
|
|
Jiri Moskovcak |
373fc9d |
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
|
Jiri Moskovcak |
373fc9d |
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
|
|
Jiri Moskovcak |
373fc9d |
+ NULL
|
|
Jiri Moskovcak |
373fc9d |
+ );
|
|
Jiri Moskovcak |
373fc9d |
+ char *filename = NULL;
|
|
Jiri Moskovcak |
373fc9d |
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
|
|
Jiri Moskovcak |
373fc9d |
+ filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
|
|
Jiri Moskovcak |
373fc9d |
+ gtk_widget_destroy(dialog);
|
|
Jiri Moskovcak |
373fc9d |
+
|
|
Jiri Moskovcak |
373fc9d |
+ if (filename)
|
|
Jiri Moskovcak |
373fc9d |
+ {
|
|
Jiri Moskovcak |
373fc9d |
+ char *basename = strrchr(filename, '/');
|
|
Jiri Moskovcak |
373fc9d |
+ if (!basename) /* wtf? */
|
|
Jiri Moskovcak |
373fc9d |
+ goto free_and_ret;
|
|
Jiri Moskovcak |
373fc9d |
+ basename++;
|
|
Jiri Moskovcak |
373fc9d |
+
|
|
Jiri Moskovcak |
373fc9d |
+ struct stat statbuf;
|
|
Jiri Moskovcak |
373fc9d |
+ if (stat(filename, &statbuf) != 0 || !S_ISREG(statbuf.st_mode))
|
|
Jiri Moskovcak |
373fc9d |
+ goto free_and_ret;
|
|
Jiri Moskovcak |
373fc9d |
+
|
|
Jiri Moskovcak |
373fc9d |
+ struct problem_item *item = get_problem_data_item_or_NULL(g_cd, basename);
|
|
Jiri Moskovcak |
373fc9d |
+ if (!item || (item->flags & CD_FLAG_ISEDITABLE))
|
|
Jiri Moskovcak |
373fc9d |
+ {
|
|
Jiri Moskovcak |
373fc9d |
+ struct dump_dir *dd = dd_opendir(g_dump_dir_name, DD_OPEN_READONLY);
|
|
Jiri Moskovcak |
373fc9d |
+ dd = steal_if_needed(dd);
|
|
Jiri Moskovcak |
373fc9d |
+ bool writable = (dd && dd->locked);
|
|
Jiri Moskovcak |
373fc9d |
+ dd_close(dd);
|
|
Jiri Moskovcak |
373fc9d |
+ if (writable)
|
|
Jiri Moskovcak |
373fc9d |
+ {
|
|
Jiri Moskovcak |
373fc9d |
+ char *new_name = concat_path_file(g_dump_dir_name, basename);
|
|
Jiri Moskovcak |
373fc9d |
+ /* TODO: error check */
|
|
Jiri Moskovcak |
373fc9d |
+ copy_file(filename, new_name, 0666);
|
|
Jiri Moskovcak |
373fc9d |
+ free(new_name);
|
|
Jiri Moskovcak |
373fc9d |
+ reload_problem_data_from_dump_dir();
|
|
Jiri Moskovcak |
373fc9d |
+ update_gui_state_from_problem_data();
|
|
Jiri Moskovcak |
373fc9d |
+ }
|
|
Jiri Moskovcak |
373fc9d |
+ }
|
|
Jiri Moskovcak |
373fc9d |
+ else
|
|
Jiri Moskovcak |
373fc9d |
+ {
|
|
Jiri Moskovcak |
373fc9d |
+ /* TODO: show error dialog */
|
|
Jiri Moskovcak |
373fc9d |
+ }
|
|
Jiri Moskovcak |
373fc9d |
+ free_and_ret:
|
|
Jiri Moskovcak |
373fc9d |
+ g_free(filename);
|
|
Jiri Moskovcak |
373fc9d |
+ }
|
|
Jiri Moskovcak |
373fc9d |
+}
|
|
Jiri Moskovcak |
373fc9d |
+
|
|
Jiri Moskovcak |
373fc9d |
|
|
Jiri Moskovcak |
373fc9d |
/* Initialization */
|
|
Jiri Moskovcak |
373fc9d |
|
|
Jiri Moskovcak |
373fc9d |
@@ -1829,83 +1915,6 @@ static void add_pages()
|
|
Jiri Moskovcak |
373fc9d |
// g_signal_connect(g_tv_details, "key-press-event", G_CALLBACK(on_key_press_event_cb), NULL);
|
|
Jiri Moskovcak |
373fc9d |
}
|
|
Jiri Moskovcak |
373fc9d |
|
|
Jiri Moskovcak |
373fc9d |
-static void save_edited_one_liner(GtkCellRendererText *renderer,
|
|
Jiri Moskovcak |
373fc9d |
- gchar *tree_path,
|
|
Jiri Moskovcak |
373fc9d |
- gchar *new_text,
|
|
Jiri Moskovcak |
373fc9d |
- gpointer user_data)
|
|
Jiri Moskovcak |
373fc9d |
-{
|
|
Jiri Moskovcak |
373fc9d |
- //log("path:'%s' new_text:'%s'", tree_path, new_text);
|
|
Jiri Moskovcak |
373fc9d |
-
|
|
Jiri Moskovcak |
373fc9d |
- GtkTreeIter iter;
|
|
Jiri Moskovcak |
373fc9d |
- if (!gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(g_ls_details), &iter, tree_path))
|
|
Jiri Moskovcak |
373fc9d |
- return;
|
|
Jiri Moskovcak |
373fc9d |
- gchar *item_name = NULL;
|
|
Jiri Moskovcak |
373fc9d |
- gtk_tree_model_get(GTK_TREE_MODEL(g_ls_details), &iter,
|
|
Jiri Moskovcak |
373fc9d |
- DETAIL_COLUMN_NAME, &item_name,
|
|
Jiri Moskovcak |
373fc9d |
- -1);
|
|
Jiri Moskovcak |
373fc9d |
- if (!item_name) /* paranoia, should never happen */
|
|
Jiri Moskovcak |
373fc9d |
- return;
|
|
Jiri Moskovcak |
373fc9d |
- struct problem_item *item = get_problem_data_item_or_NULL(g_cd, item_name);
|
|
Jiri Moskovcak |
373fc9d |
- if (item && (item->flags & CD_FLAG_ISEDITABLE))
|
|
Jiri Moskovcak |
373fc9d |
- {
|
|
Jiri Moskovcak |
373fc9d |
- struct dump_dir *dd = dd_opendir(g_dump_dir_name, DD_OPEN_READONLY);
|
|
Jiri Moskovcak |
373fc9d |
- dd = steal_if_needed(dd);
|
|
Jiri Moskovcak |
373fc9d |
- if (dd && dd->locked)
|
|
Jiri Moskovcak |
373fc9d |
- {
|
|
Jiri Moskovcak |
373fc9d |
- dd_save_text(dd, item_name, new_text);
|
|
Jiri Moskovcak |
373fc9d |
- free(item->content);
|
|
Jiri Moskovcak |
373fc9d |
- item->content = xstrdup(new_text);
|
|
Jiri Moskovcak |
373fc9d |
- gtk_list_store_set(g_ls_details, &iter,
|
|
Jiri Moskovcak |
373fc9d |
- DETAIL_COLUMN_VALUE, new_text,
|
|
Jiri Moskovcak |
373fc9d |
- -1);
|
|
Jiri Moskovcak |
373fc9d |
- }
|
|
Jiri Moskovcak |
373fc9d |
- dd_close(dd);
|
|
Jiri Moskovcak |
373fc9d |
- }
|
|
Jiri Moskovcak |
373fc9d |
-}
|
|
Jiri Moskovcak |
373fc9d |
-
|
|
Jiri Moskovcak |
373fc9d |
-static void on_btn_add_file(GtkButton *button)
|
|
Jiri Moskovcak |
373fc9d |
-{
|
|
Jiri Moskovcak |
373fc9d |
- GtkWidget *dialog = gtk_file_chooser_dialog_new(
|
|
Jiri Moskovcak |
373fc9d |
- "Attach File",
|
|
Jiri Moskovcak |
373fc9d |
- GTK_WINDOW(g_assistant),
|
|
Jiri Moskovcak |
373fc9d |
- GTK_FILE_CHOOSER_ACTION_OPEN,
|
|
Jiri Moskovcak |
373fc9d |
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
|
Jiri Moskovcak |
373fc9d |
- GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
|
|
Jiri Moskovcak |
373fc9d |
- NULL
|
|
Jiri Moskovcak |
373fc9d |
- );
|
|
Jiri Moskovcak |
373fc9d |
- if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
|
|
Jiri Moskovcak |
373fc9d |
- {
|
|
Jiri Moskovcak |
373fc9d |
- char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
|
|
Jiri Moskovcak |
373fc9d |
-
|
|
Jiri Moskovcak |
373fc9d |
- char *basename = strrchr(filename, '/');
|
|
Jiri Moskovcak |
373fc9d |
- if (!basename) /* wtf? */
|
|
Jiri Moskovcak |
373fc9d |
- goto free_and_ret;
|
|
Jiri Moskovcak |
373fc9d |
- basename++;
|
|
Jiri Moskovcak |
373fc9d |
-
|
|
Jiri Moskovcak |
373fc9d |
- struct stat statbuf;
|
|
Jiri Moskovcak |
373fc9d |
- if (stat(filename, &statbuf) != 0 || !S_ISREG(statbuf.st_mode))
|
|
Jiri Moskovcak |
373fc9d |
- goto free_and_ret;
|
|
Jiri Moskovcak |
373fc9d |
-
|
|
Jiri Moskovcak |
373fc9d |
- struct problem_item *item = get_problem_data_item_or_NULL(g_cd, basename);
|
|
Jiri Moskovcak |
373fc9d |
- if (!item || (item->flags & CD_FLAG_ISEDITABLE))
|
|
Jiri Moskovcak |
373fc9d |
- {
|
|
Jiri Moskovcak |
373fc9d |
- char *new_name = concat_path_file(g_dump_dir_name, basename);
|
|
Jiri Moskovcak |
373fc9d |
- /* TODO: error check */
|
|
Jiri Moskovcak |
373fc9d |
- copy_file(filename, new_name, 0666);
|
|
Jiri Moskovcak |
373fc9d |
- free(new_name);
|
|
Jiri Moskovcak |
373fc9d |
- reload_problem_data_from_dump_dir();
|
|
Jiri Moskovcak |
373fc9d |
- update_gui_state_from_problem_data();
|
|
Jiri Moskovcak |
373fc9d |
- }
|
|
Jiri Moskovcak |
373fc9d |
- else
|
|
Jiri Moskovcak |
373fc9d |
- {
|
|
Jiri Moskovcak |
373fc9d |
- /* TODO: error dialog */
|
|
Jiri Moskovcak |
373fc9d |
- }
|
|
Jiri Moskovcak |
373fc9d |
- free_and_ret:
|
|
Jiri Moskovcak |
373fc9d |
- g_free(filename);
|
|
Jiri Moskovcak |
373fc9d |
- }
|
|
Jiri Moskovcak |
373fc9d |
- gtk_widget_destroy(dialog);
|
|
Jiri Moskovcak |
373fc9d |
-}
|
|
Jiri Moskovcak |
373fc9d |
-
|
|
Jiri Moskovcak |
373fc9d |
static void create_details_treeview(void)
|
|
Jiri Moskovcak |
373fc9d |
{
|
|
Jiri Moskovcak |
373fc9d |
GtkCellRenderer *renderer;
|
|
Jiri Moskovcak |
373fc9d |
--
|
|
Jiri Moskovcak |
373fc9d |
1.7.6
|
|
Jiri Moskovcak |
373fc9d |
|