diff options
| author | Steven Rostedt <srostedt@redhat.com> | 2010-06-14 20:51:50 -0400 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2010-06-14 20:51:50 -0400 |
| commit | ad15344e398191ae63bde380b865c57c286e2732 (patch) | |
| tree | f79c661d8db7d2ff283f4f51713c7a409f8b6585 | |
| parent | a06b4a35cf29205d4c17da6c8f6fbc63b503b68f (diff) | |
kernelshark: Have file dialog ask if we want to overwrite
If someone selects a file that already exists and the command will
be used to overwrite the file. Ask the user if they want to overwrite
it instead of just doing so.
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
| -rw-r--r-- | kernel-shark.c | 6 | ||||
| -rw-r--r-- | trace-capture.c | 2 | ||||
| -rw-r--r-- | trace-dialog.c | 50 | ||||
| -rw-r--r-- | trace-graph-main.c | 6 | ||||
| -rw-r--r-- | trace-gui.h | 8 | ||||
| -rw-r--r-- | trace-view-main.c | 6 |
6 files changed, 58 insertions, 20 deletions
diff --git a/kernel-shark.c b/kernel-shark.c index 7c0f816..e97d612 100644 --- a/kernel-shark.c +++ b/kernel-shark.c | |||
| @@ -290,7 +290,7 @@ load_clicked (gpointer data) | |||
| 290 | struct tracecmd_input *handle; | 290 | struct tracecmd_input *handle; |
| 291 | gchar *filename; | 291 | gchar *filename; |
| 292 | 292 | ||
| 293 | filename = trace_get_file_dialog("Load File"); | 293 | filename = trace_get_file_dialog("Load File", NULL, FALSE); |
| 294 | if (!filename) | 294 | if (!filename) |
| 295 | return; | 295 | return; |
| 296 | 296 | ||
| @@ -321,7 +321,7 @@ load_filters_clicked (gpointer data) | |||
| 321 | gchar *filename; | 321 | gchar *filename; |
| 322 | int ret; | 322 | int ret; |
| 323 | 323 | ||
| 324 | filename = trace_get_file_dialog("Load Filters"); | 324 | filename = trace_get_file_dialog("Load Filters", NULL, FALSE); |
| 325 | if (!filename) | 325 | if (!filename) |
| 326 | return; | 326 | return; |
| 327 | 327 | ||
| @@ -407,7 +407,7 @@ save_filters_clicked (gpointer data) | |||
| 407 | struct filter_task *hide_tasks; | 407 | struct filter_task *hide_tasks; |
| 408 | gchar *filename; | 408 | gchar *filename; |
| 409 | 409 | ||
| 410 | filename = trace_get_file_dialog("Save Filters"); | 410 | filename = trace_get_file_dialog("Save Filters", "Save", TRUE); |
| 411 | if (!filename) | 411 | if (!filename) |
| 412 | return; | 412 | return; |
| 413 | 413 | ||
diff --git a/trace-capture.c b/trace-capture.c index fda61fc..3fa5a1e 100644 --- a/trace-capture.c +++ b/trace-capture.c | |||
| @@ -554,7 +554,7 @@ file_clicked (GtkWidget *widget, gpointer data) | |||
| 554 | struct trace_capture *cap = data; | 554 | struct trace_capture *cap = data; |
| 555 | gchar *filename; | 555 | gchar *filename; |
| 556 | 556 | ||
| 557 | filename = trace_get_file_dialog("Trace File"); | 557 | filename = trace_get_file_dialog("Trace File", "Save", TRUE); |
| 558 | if (!filename) | 558 | if (!filename) |
| 559 | return; | 559 | return; |
| 560 | 560 | ||
diff --git a/trace-dialog.c b/trace-dialog.c index 4fab040..4bddd08 100644 --- a/trace-dialog.c +++ b/trace-dialog.c | |||
| @@ -250,13 +250,15 @@ void trace_show_help(GtkWidget *window, const gchar *link, GError **error) | |||
| 250 | #endif | 250 | #endif |
| 251 | } | 251 | } |
| 252 | 252 | ||
| 253 | void trace_dialog(GtkWindow *parent, enum trace_dialog_type type, | 253 | GtkResponseType trace_dialog(GtkWindow *parent, enum trace_dialog_type type, |
| 254 | gchar *message, ...) | 254 | gchar *message, ...) |
| 255 | { | 255 | { |
| 256 | GtkWidget *dialog; | 256 | GtkWidget *dialog; |
| 257 | GtkMessageType mtype; | 257 | GtkMessageType mtype; |
| 258 | GtkButtonsType btype = GTK_BUTTONS_CLOSE; | ||
| 258 | gchar *str; | 259 | gchar *str; |
| 259 | va_list ap; | 260 | va_list ap; |
| 261 | int result; | ||
| 260 | 262 | ||
| 261 | switch (type) { | 263 | switch (type) { |
| 262 | case TRACE_GUI_INFO: | 264 | case TRACE_GUI_INFO: |
| @@ -268,6 +270,10 @@ void trace_dialog(GtkWindow *parent, enum trace_dialog_type type, | |||
| 268 | case TRACE_GUI_ERROR: | 270 | case TRACE_GUI_ERROR: |
| 269 | mtype = GTK_MESSAGE_ERROR; | 271 | mtype = GTK_MESSAGE_ERROR; |
| 270 | break; | 272 | break; |
| 273 | case TRACE_GUI_ASK: | ||
| 274 | mtype = GTK_MESSAGE_WARNING; | ||
| 275 | btype = GTK_BUTTONS_YES_NO; | ||
| 276 | break; | ||
| 271 | } | 277 | } |
| 272 | 278 | ||
| 273 | va_start(ap, message); | 279 | va_start(ap, message); |
| @@ -277,26 +283,56 @@ void trace_dialog(GtkWindow *parent, enum trace_dialog_type type, | |||
| 277 | dialog = gtk_message_dialog_new(parent, | 283 | dialog = gtk_message_dialog_new(parent, |
| 278 | GTK_DIALOG_DESTROY_WITH_PARENT, | 284 | GTK_DIALOG_DESTROY_WITH_PARENT, |
| 279 | mtype, | 285 | mtype, |
| 280 | GTK_BUTTONS_CLOSE, | 286 | btype, |
| 281 | "%s", str); | 287 | "%s", str); |
| 282 | g_free(str); | 288 | g_free(str); |
| 283 | gtk_dialog_run(GTK_DIALOG(dialog)); | 289 | result = gtk_dialog_run(GTK_DIALOG(dialog)); |
| 284 | gtk_widget_destroy(dialog); | 290 | gtk_widget_destroy(dialog); |
| 291 | |||
| 292 | return result; | ||
| 285 | } | 293 | } |
| 286 | 294 | ||
| 287 | gchar *trace_get_file_dialog(const gchar *title) | 295 | /** |
| 296 | * trace_get_file_dialog - pop up a file dialog to get a file | ||
| 297 | * @title: the title of the dialog | ||
| 298 | * @open: the text for the "open" button (NULL for default) | ||
| 299 | * @warn: if the file exists, warn and let them choose again. | ||
| 300 | * | ||
| 301 | * Returns: the filename if it should be used. NULL otherwise. | ||
| 302 | * The filename needs to be freed with g_free(). | ||
| 303 | */ | ||
| 304 | gchar *trace_get_file_dialog(const gchar *title, const char *open, | ||
| 305 | gboolean warn) | ||
| 288 | { | 306 | { |
| 289 | GtkWidget *dialog; | 307 | GtkWidget *dialog; |
| 308 | GtkResponseType ret; | ||
| 290 | gchar *filename = NULL; | 309 | gchar *filename = NULL; |
| 291 | 310 | ||
| 311 | if (!open) | ||
| 312 | open = GTK_STOCK_OPEN; | ||
| 313 | |||
| 292 | dialog = gtk_file_chooser_dialog_new(title, | 314 | dialog = gtk_file_chooser_dialog_new(title, |
| 293 | NULL, | 315 | NULL, |
| 294 | GTK_FILE_CHOOSER_ACTION_OPEN, | 316 | GTK_FILE_CHOOSER_ACTION_OPEN, |
| 295 | GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | 317 | GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
| 296 | GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, | 318 | open, GTK_RESPONSE_ACCEPT, |
| 297 | NULL); | 319 | NULL); |
| 298 | if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) | 320 | |
| 321 | again: | ||
| 322 | if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { | ||
| 299 | filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); | 323 | filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); |
| 324 | if (warn) { | ||
| 325 | ret = trace_dialog(GTK_WINDOW(dialog), TRACE_GUI_ASK, | ||
| 326 | "The file '%s' already exists.\n" | ||
| 327 | "Are you sure you want to replace it", | ||
| 328 | filename); | ||
| 329 | if (ret == GTK_RESPONSE_NO) { | ||
| 330 | g_free(filename); | ||
| 331 | filename = NULL; | ||
| 332 | goto again; | ||
| 333 | } | ||
| 334 | } | ||
| 335 | } | ||
| 300 | 336 | ||
| 301 | gtk_widget_destroy(dialog); | 337 | gtk_widget_destroy(dialog); |
| 302 | 338 | ||
diff --git a/trace-graph-main.c b/trace-graph-main.c index b4f05fb..cc8bf6c 100644 --- a/trace-graph-main.c +++ b/trace-graph-main.c | |||
| @@ -57,7 +57,7 @@ load_clicked (gpointer data) | |||
| 57 | struct tracecmd_input *handle; | 57 | struct tracecmd_input *handle; |
| 58 | gchar *filename; | 58 | gchar *filename; |
| 59 | 59 | ||
| 60 | filename = trace_get_file_dialog("Load File"); | 60 | filename = trace_get_file_dialog("Load File", NULL, FALSE); |
| 61 | if (!filename) | 61 | if (!filename) |
| 62 | return; | 62 | return; |
| 63 | 63 | ||
| @@ -162,7 +162,7 @@ load_filters_clicked (gpointer data) | |||
| 162 | struct tracecmd_xml_handle *handle; | 162 | struct tracecmd_xml_handle *handle; |
| 163 | gchar *filename; | 163 | gchar *filename; |
| 164 | 164 | ||
| 165 | filename = trace_get_file_dialog("Load Filters"); | 165 | filename = trace_get_file_dialog("Load Filters", NULL, FALSE); |
| 166 | if (!filename) | 166 | if (!filename) |
| 167 | return; | 167 | return; |
| 168 | 168 | ||
| @@ -189,7 +189,7 @@ save_filters_clicked (gpointer data) | |||
| 189 | struct tracecmd_xml_handle *handle; | 189 | struct tracecmd_xml_handle *handle; |
| 190 | gchar *filename; | 190 | gchar *filename; |
| 191 | 191 | ||
| 192 | filename = trace_get_file_dialog("Save Filters"); | 192 | filename = trace_get_file_dialog("Save Filters", "Save", TRUE); |
| 193 | if (!filename) | 193 | if (!filename) |
| 194 | return; | 194 | return; |
| 195 | 195 | ||
diff --git a/trace-gui.h b/trace-gui.h index a2177b0..ca9f6ca 100644 --- a/trace-gui.h +++ b/trace-gui.h | |||
| @@ -27,6 +27,7 @@ enum trace_dialog_type { | |||
| 27 | TRACE_GUI_INFO, | 27 | TRACE_GUI_INFO, |
| 28 | TRACE_GUI_WARNING, | 28 | TRACE_GUI_WARNING, |
| 29 | TRACE_GUI_ERROR, | 29 | TRACE_GUI_ERROR, |
| 30 | TRACE_GUI_ASK, | ||
| 30 | }; | 31 | }; |
| 31 | 32 | ||
| 32 | GtkWidget *trace_status_bar_new(void); | 33 | GtkWidget *trace_status_bar_new(void); |
| @@ -36,10 +37,11 @@ void trace_dialog_register_alt_warning(void (*alt)(const char *fmt, va_list ap)) | |||
| 36 | 37 | ||
| 37 | void trace_show_help(GtkWidget *window, const gchar *link, GError **error); | 38 | void trace_show_help(GtkWidget *window, const gchar *link, GError **error); |
| 38 | 39 | ||
| 39 | void trace_dialog(GtkWindow *parent, enum trace_dialog_type type, | 40 | GtkResponseType trace_dialog(GtkWindow *parent, enum trace_dialog_type type, |
| 40 | gchar *message, ...); | 41 | gchar *message, ...); |
| 41 | 42 | ||
| 42 | gchar *trace_get_file_dialog(const gchar *title); | 43 | gchar *trace_get_file_dialog(const gchar *title, const char *open, |
| 44 | gboolean warn); | ||
| 43 | 45 | ||
| 44 | GtkWidget * | 46 | GtkWidget * |
| 45 | trace_create_combo_box(GtkWidget *hbox, const gchar *text, | 47 | trace_create_combo_box(GtkWidget *hbox, const gchar *text, |
diff --git a/trace-view-main.c b/trace-view-main.c index 59d6838..636ebd1 100644 --- a/trace-view-main.c +++ b/trace-view-main.c | |||
| @@ -68,7 +68,7 @@ load_clicked (gpointer data) | |||
| 68 | struct tracecmd_input *handle; | 68 | struct tracecmd_input *handle; |
| 69 | gchar *filename; | 69 | gchar *filename; |
| 70 | 70 | ||
| 71 | filename = trace_get_file_dialog("Load File"); | 71 | filename = trace_get_file_dialog("Load File", NULL, FALSE); |
| 72 | if (!filename) | 72 | if (!filename) |
| 73 | return; | 73 | return; |
| 74 | 74 | ||
| @@ -91,7 +91,7 @@ load_filters_clicked (gpointer data) | |||
| 91 | struct tracecmd_xml_handle *handle; | 91 | struct tracecmd_xml_handle *handle; |
| 92 | gchar *filename; | 92 | gchar *filename; |
| 93 | 93 | ||
| 94 | filename = trace_get_file_dialog("Load Filters"); | 94 | filename = trace_get_file_dialog("Load Filters", NULL, FALSE); |
| 95 | if (!filename) | 95 | if (!filename) |
| 96 | return; | 96 | return; |
| 97 | 97 | ||
| @@ -121,7 +121,7 @@ save_filters_clicked (gpointer data) | |||
| 121 | struct tracecmd_xml_handle *handle; | 121 | struct tracecmd_xml_handle *handle; |
| 122 | gchar *filename; | 122 | gchar *filename; |
| 123 | 123 | ||
| 124 | filename = trace_get_file_dialog("Save Filters"); | 124 | filename = trace_get_file_dialog("Save Filters", "Save", TRUE); |
| 125 | if (!filename) | 125 | if (!filename) |
| 126 | return; | 126 | return; |
| 127 | 127 | ||
