/**
* e_shell_run_open_dialog:
* @shell: an #EShell
* @title: file chooser dialog title
* @customize_func: optional dialog customization function
* @customize_data: optional data to pass to @customize_func
*
* Runs a #GtkFileChooserDialog in open mode with the given title and
* returns the selected #GFile. If @customize_func is provided, the
* function is called just prior to running the dialog (the file chooser
* is the first argument, @customize data is the second). If the user
* cancels the dialog the function will return %NULL.
*
* Returns: the #GFile to open, or %NULL
**/
GFile *
e_shell_run_open_dialog (EShell *shell,
const gchar *title,
GtkCallback customize_func,
gpointer customize_data)
{
GtkFileChooser *file_chooser;
GFile *chosen_file = NULL;
GtkWidget *dialog;
GtkWindow *parent;
g_return_val_if_fail (E_IS_SHELL (shell), NULL);
parent = e_shell_get_active_window (shell);
dialog = gtk_file_chooser_dialog_new (
title, parent,
GTK_FILE_CHOOSER_ACTION_OPEN,
_("_Cancel"), GTK_RESPONSE_CANCEL,
_("_Open"), GTK_RESPONSE_ACCEPT, NULL);
file_chooser = GTK_FILE_CHOOSER (dialog);
gtk_dialog_set_default_response (
GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
gtk_file_chooser_set_local_only (file_chooser, FALSE);
/* Allow further customizations before running the dialog. */
if (customize_func != NULL)
customize_func (dialog, customize_data);
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
chosen_file = gtk_file_chooser_get_file (file_chooser);
gtk_widget_destroy (dialog);
return chosen_file;
}
/**
* e_shell_run_save_dialog:
* @shell: an #EShell
* @title: file chooser dialog title
* @suggestion: file name suggestion, or %NULL
* @filters: Possible filters for dialog, or %NULL
* @customize_func: optional dialog customization function
* @customize_data: optional data to pass to @customize_func
*
* Runs a #GtkFileChooserDialog in save mode with the given title and
* returns the selected #GFile. If @customize_func is provided, the
* function is called just prior to running the dialog (the file chooser
* is the first argument, @customize_data is the second). If the user
* cancels the dialog the function will return %NULL.
*
* With non-%NULL @filters will be added also file filters to the dialog.
* The string format is "pat1:mt1;pat2:mt2:...", where 'pat' is a pattern
* and 'mt' is a MIME type for the pattern to be used. There can be more
* than one MIME type, those are separated by comma.
*
* Returns: the #GFile to save to, or %NULL
**/
GFile *
e_shell_run_save_dialog (EShell *shell,
const gchar *title,
const gchar *suggestion,
const gchar *filters,
GtkCallback customize_func,
gpointer customize_data)
{
GtkFileChooser *file_chooser;
GFile *chosen_file = NULL;
GtkWidget *dialog;
GtkWindow *parent;
g_return_val_if_fail (E_IS_SHELL (shell), NULL);
parent = e_shell_get_active_window (shell);
dialog = gtk_file_chooser_dialog_new (
title, parent,
GTK_FILE_CHOOSER_ACTION_SAVE,
_("_Cancel"), GTK_RESPONSE_CANCEL,
_("_Save"), GTK_RESPONSE_ACCEPT, NULL);
file_chooser = GTK_FILE_CHOOSER (dialog);
gtk_dialog_set_default_response (
GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
gtk_file_chooser_set_local_only (file_chooser, FALSE);
gtk_file_chooser_set_do_overwrite_confirmation (file_chooser, TRUE);
if (suggestion != NULL) {
gchar *current_name;
current_name = g_strdup (suggestion);
e_filename_make_safe (current_name);
gtk_file_chooser_set_current_name (file_chooser, current_name);
g_free (current_name);
}
if (filters != NULL) {
gchar **flts = g_strsplit (filters, ";", -1);
gint i;
for (i = 0; flts && flts[i]; i++) {
GtkFileFilter *filter = gtk_file_filter_new ();
gchar *flt = flts[i];
gchar *delim = strchr (flt, ':'), *next = NULL;
if (delim) {
*delim = 0;
next = strchr (delim + 1, ',');
}
gtk_file_filter_add_pattern (filter, flt);
if (g_ascii_strcasecmp (flt, "*.mbox") == 0)
gtk_file_filter_set_name (
filter, _("Berkeley Mailbox (mbox)"));
else if (g_ascii_strcasecmp (flt, "*.vcf") == 0)
gtk_file_filter_set_name (
filter, _("vCard (.vcf)"));
else if (g_ascii_strcasecmp (flt, "*.ics") == 0)
gtk_file_filter_set_name (
filter, _("iCalendar (.ics)"));
while (delim) {
delim++;
if (next)
*next = 0;
gtk_file_filter_add_mime_type (filter, delim);
delim = next;
if (next)
next = strchr (next + 1, ',');
}
gtk_file_chooser_add_filter (file_chooser, filter);
}
if (flts && flts[0]) {
GtkFileFilter *filter = gtk_file_filter_new ();
gtk_file_filter_add_pattern (filter, "*");
gtk_file_filter_set_name (filter, _("All Files (*)"));
gtk_file_chooser_add_filter (file_chooser, filter);
}
g_strfreev (flts);
}
/* Allow further customizations before running the dialog. */
if (customize_func != NULL)
customize_func (dialog, customize_data);
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
chosen_file = gtk_file_chooser_get_file (file_chooser);
gtk_widget_destroy (dialog);
return chosen_file;
}
/**
* e_shell_utils_import_uris:
* @shell: The #EShell instance
* @uris: %NULL-terminated list of URIs to import
*
* Imports given URIs to Evolution, giving user a choice what to import
* if more than one importer can be applied, and where to import it, if
* the importer itself is configurable.
*
* URIs should be either a filename or URI of form file://.
* All others are skipped.
*
* Returns: the number of URIs successfully handled
**/
guint
e_shell_utils_import_uris (EShell *shell,
const gchar * const *uris)
{
GtkWindow *parent;
GtkWidget *assistant;
g_return_val_if_fail (shell != NULL, 0);
g_return_val_if_fail (uris != NULL, 0);
parent = e_shell_get_active_window (shell);
assistant = e_import_assistant_new_simple (parent, uris);
if (assistant) {
g_signal_connect_after (
assistant, "cancel",
G_CALLBACK (gtk_widget_destroy), NULL);
g_signal_connect_after (
assistant, "finished",
G_CALLBACK (gtk_widget_destroy), NULL);
gtk_application_add_window (
GTK_APPLICATION (shell),
GTK_WINDOW (assistant));
gtk_widget_show (assistant);
} else
g_warning ("Cannot import any of the given URIs");
return g_strv_length ((gchar **) uris);
}
?h=v1.7.1&id=5cd86443ee071b5e3abe4995c777ce467c29f2c5'>tests: added new EIP158 testsJeffrey Wilcke | 2016-11-13 | 731 | -1158/+84508 |
* | core/vm, params: EIP160: EXP reprice | Jeffrey Wilcke | 2016-11-13 | 2 | -9/+6 |
* | core, core/state, trie: EIP158, reprice & skip empty account write | Jeffrey Wilcke | 2016-11-13 | 74 | -561/+717 |
* | Merge pull request #3248 from zsfelfoldi/light-topic3 | Felix Lange | 2016-11-11 | 2 | -2/+8 |
|\ |
|
| * | les: add missing nil check and handle quit in findServers | Zsolt Felfoldi | 2016-11-11 | 1 | -2/+5 |
| * | discv5: fixed state machine lockup bug | Zsolt Felfoldi | 2016-11-11 | 1 | -0/+3 |
* | | Merge pull request #3247 from fjl/bzzd | Felix Lange | 2016-11-11 | 11 | -117/+492 |
|\ \
| |/
|/| |
|
| * | cmd/bzzhash: add swarm hashing tool | Felix Lange | 2016-11-11 | 1 | -0/+49 |
| * | cmd/bzzup: add swarm upload tool | Felix Lange | 2016-11-11 | 1 | -0/+161 |
| * | cmd/bzzd: add swarm server daemon | Felix Lange | 2016-11-11 | 1 | -0/+246 |
| * | swarm/api/http: reject requests without content-length | Felix Lange | 2016-11-11 | 1 | -1/+5 |
| * | swarm/network: skip TestSyncDb | Felix Lange | 2016-11-11 | 1 | -0/+2 |
| * | swarm/api: add bzz prefix to swarm directory | Felix Lange | 2016-11-11 | 2 | -12/+7 |
| * | node: add InstanceDir method | Felix Lange | 2016-11-11 | 2 | -2/+15 |
| * | accounts: add Find method | Felix Lange | 2016-11-11 | 1 | -1/+7 |
| * | cmd/v5test: delete the v5test tool | Felix Lange | 2016-11-11 | 1 | -101/+0 |
|/ |
|
* | cmd/geth: improve command help messages (#3227) | Kenji Siu | 2016-11-10 | 5 | -87/+132 |
* | Merge pull request #3244 from karalabe/reinstate-cache | Péter Szilágyi | 2016-11-10 | 1 | -0/+1 |
|\ |
|
| * | cmd/geth: reinstate dropped --cache flag | Péter Szilágyi | 2016-11-10 | 1 | -0/+1 |
|/ |
|
* | cmd/geth: use a loop in TestDAOForkBlockNewChain (#3222) | xiekeyang | 2016-11-09 | 1 | -84/+68 |
* | Merge pull request #3232 from zsfelfoldi/light-topic3 | Felix Lange | 2016-11-09 |