summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Newman <MikeGTN@src.gnome.org>2003-06-09 18:57:01 +0000
committerMike Newman <MikeGTN@src.gnome.org>2003-06-09 18:57:01 +0000
commit0e4c879656dcb3a0f4ffbcc65e30b6120f65c05e (patch)
treea03abf8160f62763079a451a56d8e4abe5c6f87d
parentSupport user-defined return values via env vars, like dialog did. (diff)
downloadzenity-0e4c879656dcb3a0f4ffbcc65e30b6120f65c05e.tar.gz
zenity-0e4c879656dcb3a0f4ffbcc65e30b6120f65c05e.tar.bz2
zenity-0e4c879656dcb3a0f4ffbcc65e30b6120f65c05e.zip
Allow multiple file selections.
-rw-r--r--ChangeLog26
-rw-r--r--data/zenity.16
-rw-r--r--help/C/zenity.xml19
-rw-r--r--src/fileselection.c36
-rw-r--r--src/main.c56
-rw-r--r--src/zenity.h2
6 files changed, 117 insertions, 28 deletions
diff --git a/ChangeLog b/ChangeLog
index e0393de9..665dce85 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,15 +1,21 @@
+2003-06-09 Mike Newman <mikegtn@gnome.org>
+
+ * data/zenity.1, help/C/zenity.xml: Update docs for new file selection
+ options.
+
+2003-06-09 Mike Newman <mikegtn@gnome.org>
+
+ * src/fileselection.c, src/main.c, src/zenity.h: Add --multiple
+ mode to file selection, with --separator to divide returned filenames.
+ Change default separator for lists and file-sel to '|'.
+
2003-06-07 Mike Newman <mikegtn@gnome.org>
- * src/calendar.c: Allow user-defined return values via env vars
- * src/entry.c: Prefer ZENITY_OK etc, but also check for DIALOG_OK
- * src/fileselection.c: and fall through to original zenity behaviour.
- * src/msg.c:
- * src/progress.c:
- * src/text.c:
- * src/tree.c:
- * src/util.c:
- * src/util.h:
- * src/zenity.h:
+ * src/calendar.c, src/entry.c, src/fileselection.c, src/msg.c
+ src/progress.c, src/text.c, src/tree.c, src/util.c, src/util.h
+ src/zenity.h: Allow user-defined return values via env vars.
+ Prefer ZENITY_OK etc, but also check for DIALOG_OK and fall through
+ to original zenity behaviour.
2003-06-07 Glynn Foster <glynn.foster@sun.com>
diff --git a/data/zenity.1 b/data/zenity.1
index b61a8c99..77942ddb 100644
--- a/data/zenity.1
+++ b/data/zenity.1
@@ -113,6 +113,12 @@ File selection options
.TP
.B \-\-filename=FILENAME
Set the filename
+.TP
+.B \-\-multiple
+Allow selection of multiple filenames in file selection dialog
+.TP
+.B \-\-separator=SEPARATOR
+Specify separator character when returning multiple filenames
.PP
Info options
diff --git a/help/C/zenity.xml b/help/C/zenity.xml
index 37e0fa24..358fb813 100644
--- a/help/C/zenity.xml
+++ b/help/C/zenity.xml
@@ -539,6 +539,21 @@
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>--multiple</varname></term>
+ <listitem>
+ <para>Allow selection of mulitple filename in the File Selection dialog.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>--separator</varname>=SEPARATOR</term>
+ <listitem>
+ <para>Specify the character(s) which will divide between entries in the returned list of file names. The
+ default character is '|'. If you want to specify a newline, use '\n'.</para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
<figure id="zenity-fileselection-screenshot">
@@ -642,8 +657,8 @@
<varlistentry>
<term><varname>--seperator</varname>=SEPERATOR</term>
<listitem>
- <para>Specify what seperator character should be used when the List dialog returns the selected entries. The
- default character is '\'. If you want to specify a newline, use '\n'.
+ <para>Specify what seperator character(s) should be used when the List dialog returns the selected entries. The
+ default character is '|'. If you want to specify a newline, use '\n'.
</para>
</listitem>
</varlistentry>
diff --git a/src/fileselection.c b/src/fileselection.c
index 69fc6583..4e87d043 100644
--- a/src/fileselection.c
+++ b/src/fileselection.c
@@ -25,6 +25,8 @@
#include "zenity.h"
#include "util.h"
+ZenityData *zen_data;
+
static void zenity_fileselection_dialog_response (GtkWidget *widget, int response, gpointer data);
void zenity_fileselection (ZenityData *data, ZenityFileData *file_data)
@@ -32,6 +34,8 @@ void zenity_fileselection (ZenityData *data, ZenityFileData *file_data)
GladeXML *glade_dialog;
GtkWidget *dialog;
+ zen_data = data;
+
glade_dialog = zenity_util_load_glade_file ("zenity_fileselection_dialog");
if (glade_dialog == NULL) {
@@ -47,7 +51,7 @@ void zenity_fileselection (ZenityData *data, ZenityFileData *file_data)
g_object_unref (glade_dialog);
g_signal_connect (G_OBJECT (dialog), "response",
- G_CALLBACK (zenity_fileselection_dialog_response), data);
+ G_CALLBACK (zenity_fileselection_dialog_response), file_data);
if (data->dialog_title)
gtk_window_set_title (GTK_WINDOW (dialog), data->dialog_title);
@@ -62,6 +66,9 @@ void zenity_fileselection (ZenityData *data, ZenityFileData *file_data)
if (file_data->uri)
gtk_file_selection_set_filename (GTK_FILE_SELECTION (dialog), file_data->uri);
+ if (file_data->multi)
+ gtk_file_selection_set_select_multiple (GTK_FILE_SELECTION (dialog), TRUE);
+
gtk_widget_show (dialog);
gtk_main ();
}
@@ -69,13 +76,32 @@ void zenity_fileselection (ZenityData *data, ZenityFileData *file_data)
static void
zenity_fileselection_dialog_response (GtkWidget *widget, int response, gpointer data)
{
- ZenityData *zen_data = data;
+ ZenityFileData *file_data = data;
+ gchar **selections;
+ gchar *separator = g_strdup(file_data->separator);
+ int i;
switch (response) {
case GTK_RESPONSE_OK:
- zen_data->exit_code = zenity_util_return_exit_code
- (ZENITY_OK);
- g_printerr ("%s\n", gtk_file_selection_get_filename (GTK_FILE_SELECTION (widget)));
+ zen_data->exit_code = zenity_util_return_exit_code (ZENITY_OK);
+ selections = gtk_file_selection_get_selections (GTK_FILE_SELECTION (widget));
+ for (i=0;selections[i] != NULL; i++) {
+ g_printerr ("%s", g_filename_to_utf8 ((gchar*)selections[i], -1, NULL, NULL, NULL));
+ if (selections[i+1] != NULL) {
+ /* FIXME: This is a blatant copy of Gman's arse in tree.c */
+ if (strstr ((const gchar *) separator, (const gchar *) "\\n") != NULL)
+ g_printerr ("\n");
+ else if (strstr ((const gchar *) separator, (const gchar *) "\\t") != NULL)
+ g_printerr ("\t");
+ else
+ g_printerr ("%s",separator);
+ } else {
+ g_printerr ("\n");
+ }
+ }
+ g_strfreev(selections);
+ g_free(separator);
+
gtk_main_quit ();
break;
diff --git a/src/main.c b/src/main.c
index 23c4721b..32c98a14 100644
--- a/src/main.c
+++ b/src/main.c
@@ -89,6 +89,7 @@ enum {
OPTION_ERRORTEXT,
OPTION_INFOTEXT,
OPTION_FILENAME,
+ OPTION_MULTIFILE,
OPTION_TEXTFILENAME,
OPTION_COLUMN,
OPTION_SEPERATOR,
@@ -424,6 +425,24 @@ struct poptOption file_selection_options[] = {
N_("Set the filename"),
N_("FILENAME")
},
+ {
+ "multiple",
+ '\0',
+ POPT_ARG_NONE,
+ NULL,
+ OPTION_MULTIFILE,
+ N_("Allow multiple files to be selected"),
+ NULL
+ },
+ {
+ "separator",
+ '\0',
+ POPT_ARG_STRING,
+ NULL,
+ OPTION_SEPERATOR,
+ N_("Set output separator character."),
+ N_("SEPARATOR")
+ },
POPT_TABLEEND
};
@@ -471,7 +490,7 @@ struct poptOption list_options[] = {
NULL,
OPTION_SEPERATOR,
N_("Set output separator character"),
- NULL
+ N_("SEPARATOR")
},
{
"editable",
@@ -925,8 +944,10 @@ zenity_init_parsing_options (void) {
results->calendar_data->month = 0;
results->calendar_data->year = 0;
results->calendar_data->dialog_text = NULL;
+ results->file_data->multi = FALSE;
+ results->file_data->separator = g_strdup ("|");
results->text_data->editable = FALSE;
- results->tree_data->separator = g_strdup ("/");
+ results->tree_data->separator = g_strdup ("|");
results->progress_data->percentage = -1;
results->progress_data->pulsate = FALSE;
results->progress_data->autoclose = FALSE;
@@ -969,6 +990,7 @@ zenity_free_parsing_options (void) {
case MODE_FILE:
if (results->file_data->uri)
g_free (results->file_data->uri);
+ g_free (results->file_data->separator);
break;
case MODE_TEXTINFO:
if (results->text_data->uri)
@@ -1336,6 +1358,12 @@ zenity_parse_options_callback (poptContext ctx,
}
parse_option_file++;
break;
+ case OPTION_MULTIFILE:
+ if (results->mode != MODE_FILE)
+ zenity_error ("--multiple", ERROR_SUPPORT);
+
+ results->file_data->multi = TRUE;
+ break;
case OPTION_COLUMN:
if (results->mode != MODE_LIST)
zenity_error ("--column", ERROR_SUPPORT);
@@ -1360,15 +1388,21 @@ zenity_parse_options_callback (poptContext ctx,
results->tree_data->radiobox = TRUE;
break;
case OPTION_SEPERATOR:
- if (results->mode != MODE_LIST)
- zenity_error ("--separator", ERROR_SUPPORT);
-
- if (parse_option_separator)
- zenity_error ("--separator", ERROR_DUPLICATE);
-
- results->tree_data->separator = g_strdup (arg);
- parse_option_separator = TRUE;
- break;
+ if (parse_option_separator)
+ zenity_error ("--separator", ERROR_DUPLICATE);
+ switch (results->mode) {
+ case MODE_LIST:
+ results->tree_data->separator = g_strdup (arg);
+ parse_option_separator = TRUE;
+ break;
+ case MODE_FILE:
+ results->file_data->separator = g_strdup (arg);
+ parse_option_separator = TRUE;
+ break;
+ default:
+ zenity_error ("--separator", ERROR_SUPPORT);
+ }
+ break;
case OPTION_PERCENTAGE:
if (results->mode != MODE_PROGRESS)
zenity_error ("--percentage", ERROR_SUPPORT);
diff --git a/src/zenity.h b/src/zenity.h
index 97ecee17..b04ff5bb 100644
--- a/src/zenity.h
+++ b/src/zenity.h
@@ -61,6 +61,8 @@ typedef struct {
typedef struct {
gchar *uri;
+ gboolean multi;
+ gchar *separator;
} ZenityFileData;
typedef struct {
bgstack15