Merge branch 'wip/ebassi/filechooser-new' into 'master'

Clean up the GtkFileChooser API

Closes #2455

See merge request GNOME/gtk!1454
This commit is contained in:
Matthias Clasen
2020-02-24 00:32:23 +00:00
31 changed files with 563 additions and 3074 deletions

View File

@@ -221,9 +221,12 @@ open_cb (GtkWidget *button,
GTK_FILE_CHOOSER_ACTION_OPEN,
"_Load",
"_Cancel");
gtk_native_dialog_set_modal (GTK_NATIVE_DIALOG (dialog), TRUE);
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), ".");
GFile *cwd = g_file_new_for_path (".");
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd, NULL);
g_object_unref (cwd);
g_signal_connect (dialog, "response", G_CALLBACK (open_response_cb), self);
gtk_native_dialog_show (GTK_NATIVE_DIALOG (dialog));
}
@@ -290,14 +293,20 @@ save_response_cb (GtkNativeDialog *dialog,
if (response == GTK_RESPONSE_ACCEPT)
{
GListModel *model;
char *text, *filename;
GFile *file;
char *text;
GError *error = NULL;
model = constraint_view_get_model (CONSTRAINT_VIEW (self->view));
text = serialize_model (model);
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
if (!g_file_set_contents (filename, text, -1, &error))
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
g_file_replace_contents (file, text, -1,
NULL, FALSE,
G_FILE_CREATE_NONE,
NULL,
NULL,
&error);
if (error != NULL)
{
GtkWidget *dialog;
@@ -312,7 +321,9 @@ save_response_cb (GtkNativeDialog *dialog,
gtk_widget_show (dialog);
g_error_free (error);
}
g_free (filename);
g_free (text);
g_object_unref (file);
}
gtk_native_dialog_destroy (dialog);
@@ -329,9 +340,12 @@ save_cb (GtkWidget *button,
GTK_FILE_CHOOSER_ACTION_SAVE,
"_Save",
"_Cancel");
gtk_native_dialog_set_modal (GTK_NATIVE_DIALOG (dialog), TRUE);
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), ".");
GFile *cwd = g_file_new_for_path (".");
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd, NULL);
g_object_unref (cwd);
g_signal_connect (dialog, "response", G_CALLBACK (save_response_cb), self);
gtk_native_dialog_show (GTK_NATIVE_DIALOG (dialog));
}

View File

@@ -50,7 +50,6 @@ do_pickers (GtkWidget *do_widget)
gtk_widget_set_hexpand (label, TRUE);
picker = gtk_file_chooser_button_new ("Pick a File",
GTK_FILE_CHOOSER_ACTION_OPEN);
gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (picker), FALSE);
gtk_grid_attach (GTK_GRID (table), label, 0, 2, 1, 1);
gtk_grid_attach (GTK_GRID (table), picker, 1, 2, 1, 1);

View File

@@ -385,7 +385,11 @@ show_open_filechooser (NodeEditorWindow *self)
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), ".");
GFile *cwd = g_file_new_for_path (".");
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd, NULL);
g_object_unref (cwd);
g_signal_connect (dialog, "response", G_CALLBACK (open_response_cb), self);
gtk_widget_show (dialog);
}
@@ -406,13 +410,20 @@ save_response_cb (GtkWidget *dialog,
if (response == GTK_RESPONSE_ACCEPT)
{
char *text, *filename;
GFile *file;
char *text;
GError *error = NULL;
text = get_current_text (self->text_buffer);
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
if (!g_file_set_contents (filename, text, -1, &error))
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
g_file_replace_contents (file, text, -1,
NULL, FALSE,
G_FILE_CREATE_NONE,
NULL,
NULL,
&error);
if (error != NULL)
{
GtkWidget *dialog;
@@ -427,7 +438,9 @@ save_response_cb (GtkWidget *dialog,
gtk_widget_show (dialog);
g_error_free (error);
}
g_free (filename);
g_free (text);
g_object_unref (file);
}
gtk_widget_destroy (dialog);
@@ -448,8 +461,11 @@ save_cb (GtkWidget *button,
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), ".");
GFile *cwd = g_file_new_for_path (".");
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), cwd, NULL);
g_object_unref (cwd);
g_signal_connect (dialog, "response", G_CALLBACK (save_response_cb), self);
gtk_widget_show (dialog);
}
@@ -523,10 +539,10 @@ export_image_response_cb (GtkWidget *dialog,
if (response == GTK_RESPONSE_ACCEPT)
{
char *filename;
GFile *file;
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
if (!gdk_texture_save_to_png (texture, filename))
file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
if (!gdk_texture_save_to_png (texture, g_file_peek_path (file)))
{
GtkWidget *message_dialog;
@@ -538,7 +554,8 @@ export_image_response_cb (GtkWidget *dialog,
g_signal_connect (message_dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL);
gtk_widget_show (message_dialog);
}
g_free (filename);
g_object_unref (file);
}
gtk_widget_destroy (dialog);
@@ -565,7 +582,6 @@ export_image_cb (GtkWidget *button,
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
g_signal_connect (dialog, "response", G_CALLBACK (export_image_response_cb), texture);
gtk_widget_show (dialog);
}

View File

@@ -1128,63 +1128,33 @@ GTK_FILE_CHOOSER_ERROR
GtkFileChooserError
gtk_file_chooser_set_action
gtk_file_chooser_get_action
gtk_file_chooser_set_local_only
gtk_file_chooser_get_local_only
gtk_file_chooser_set_select_multiple
gtk_file_chooser_get_select_multiple
gtk_file_chooser_set_show_hidden
gtk_file_chooser_get_show_hidden
gtk_file_chooser_set_do_overwrite_confirmation
gtk_file_chooser_get_do_overwrite_confirmation
gtk_file_chooser_set_create_folders
gtk_file_chooser_get_create_folders
gtk_file_chooser_set_current_name
gtk_file_chooser_get_current_name
gtk_file_chooser_get_filename
gtk_file_chooser_set_filename
gtk_file_chooser_select_filename
gtk_file_chooser_unselect_filename
<SUBSECTION>
gtk_file_chooser_get_file
gtk_file_chooser_set_file
gtk_file_chooser_select_file
gtk_file_chooser_unselect_file
gtk_file_chooser_select_all
gtk_file_chooser_unselect_all
gtk_file_chooser_get_filenames
gtk_file_chooser_get_files
gtk_file_chooser_set_current_folder
gtk_file_chooser_get_current_folder
gtk_file_chooser_get_uri
gtk_file_chooser_set_uri
gtk_file_chooser_select_uri
gtk_file_chooser_unselect_uri
gtk_file_chooser_get_uris
gtk_file_chooser_set_current_folder_uri
gtk_file_chooser_get_current_folder_uri
gtk_file_chooser_set_preview_widget
gtk_file_chooser_get_preview_widget
gtk_file_chooser_set_preview_widget_active
gtk_file_chooser_get_preview_widget_active
gtk_file_chooser_set_use_preview_label
gtk_file_chooser_get_use_preview_label
gtk_file_chooser_get_preview_filename
gtk_file_chooser_get_preview_uri
gtk_file_chooser_set_extra_widget
gtk_file_chooser_get_extra_widget
<SUBSECTION>
gtk_file_chooser_add_filter
gtk_file_chooser_remove_filter
gtk_file_chooser_list_filters
gtk_file_chooser_set_filter
gtk_file_chooser_get_filter
<SUBSECTION>
gtk_file_chooser_add_shortcut_folder
gtk_file_chooser_remove_shortcut_folder
gtk_file_chooser_list_shortcut_folders
gtk_file_chooser_add_shortcut_folder_uri
gtk_file_chooser_remove_shortcut_folder_uri
gtk_file_chooser_list_shortcut_folder_uris
gtk_file_chooser_get_current_folder_file
gtk_file_chooser_get_file
gtk_file_chooser_get_files
gtk_file_chooser_get_preview_file
gtk_file_chooser_select_file
gtk_file_chooser_set_current_folder_file
gtk_file_chooser_set_file
gtk_file_chooser_unselect_file
<SUBSECTION>
gtk_file_chooser_add_choice
gtk_file_chooser_remove_choice
gtk_file_chooser_set_choice

View File

@@ -946,7 +946,40 @@
as gdk_drop_read_value_async() or gdk_drop_read_text_async().
</para>
</section>
<section>
<title>Update to GtkFileChooser API changes</title>
<para>
GtkFileChooser moved to a GFile-based API. If you need to convert a
path or a URI, use g_file_new_for_path(), g_file_new_for_commandline_arg(),
or g_file_new_for_uri(); similarly, if you need to get a path or a URI
from a GFile, use g_file_get_path(), or g_file_get_uri(). With the
removal or path and URI-based functions, the "local-only" property has
been removed; GFile can be used to access non-local as well as local
resources.
</para>
<para>
The GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER action has been removed. Use
%GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, instead. If a new folder is needed,
the user can create one.
</para>
<para>
The "confirm-overwrite" signal, and the "do-overwrite-confirmation"
property have been removed from GtkFileChooser. The file chooser widgets
will automatically handle the confirmation of overwriting a file when
using GTK_FILE_CHOOSER_ACTION_SAVE.
</para>
<para>
GtkFileChooser does not support a custom extra widget any more. If you
need to add extra widgets, use gtk_file_chooser_add_choice() instead.
</para>
<para>
GtkFileChooser does not support a custom preview widget any more. If
you need to show a custom preview, you can create your own GtkDialog
with a GtkFileChooserWidget and your own preview widget that you
update whenever the #GtkFileChooser::selection-changed signal is
emitted.
</para>
</section>
</section>
</chapter>

File diff suppressed because it is too large Load Diff

View File

@@ -44,9 +44,6 @@ typedef struct _GtkFileChooser GtkFileChooser;
* @GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER: Indicates an Open mode for
* selecting folders. The file chooser will let the user pick an
* existing folder.
* @GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: Indicates a mode for creating a
* new folder. The file chooser will let the user name an existing or
* new folder.
*
* Describes whether a #GtkFileChooser is being used to open existing files
* or to save to a possibly new file.
@@ -55,32 +52,9 @@ typedef enum
{
GTK_FILE_CHOOSER_ACTION_OPEN,
GTK_FILE_CHOOSER_ACTION_SAVE,
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER
} GtkFileChooserAction;
/**
* GtkFileChooserConfirmation:
* @GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM: The file chooser will present
* its stock dialog to confirm about overwriting an existing file.
* @GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME: The file chooser will
* terminate and accept the users choice of a file name.
* @GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN: The file chooser will
* continue running, so as to let the user select another file name.
*
* Used as a return value of handlers for the
* #GtkFileChooser::confirm-overwrite signal of a #GtkFileChooser. This
* value determines whether the file chooser will present the stock
* confirmation dialog, accept the users choice of a filename, or
* let the user choose another filename.
*/
typedef enum
{
GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM,
GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME,
GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN
} GtkFileChooserConfirmation;
GDK_AVAILABLE_IN_ALL
GType gtk_file_chooser_get_type (void) G_GNUC_CONST;
@@ -121,27 +95,10 @@ void gtk_file_chooser_set_action (GtkFileChooser
GDK_AVAILABLE_IN_ALL
GtkFileChooserAction gtk_file_chooser_get_action (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_set_local_only (GtkFileChooser *chooser,
gboolean local_only);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_get_local_only (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_set_select_multiple (GtkFileChooser *chooser,
gboolean select_multiple);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_get_select_multiple (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_set_show_hidden (GtkFileChooser *chooser,
gboolean show_hidden);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_get_show_hidden (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_set_do_overwrite_confirmation (GtkFileChooser *chooser,
gboolean do_overwrite_confirmation);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_get_do_overwrite_confirmation (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_set_create_folders (GtkFileChooser *chooser,
gboolean create_folders);
@@ -156,52 +113,10 @@ void gtk_file_chooser_set_current_name (GtkFileChooser *chooser,
GDK_AVAILABLE_IN_ALL
gchar *gtk_file_chooser_get_current_name (GtkFileChooser *chooser);
/* Filename manipulation
*/
GDK_AVAILABLE_IN_ALL
gchar * gtk_file_chooser_get_filename (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_set_filename (GtkFileChooser *chooser,
const char *filename);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_select_filename (GtkFileChooser *chooser,
const char *filename);
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_unselect_filename (GtkFileChooser *chooser,
const char *filename);
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_select_all (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_unselect_all (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
GSList * gtk_file_chooser_get_filenames (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_set_current_folder (GtkFileChooser *chooser,
const gchar *filename);
GDK_AVAILABLE_IN_ALL
gchar * gtk_file_chooser_get_current_folder (GtkFileChooser *chooser);
/* URI manipulation
*/
GDK_AVAILABLE_IN_ALL
gchar * gtk_file_chooser_get_uri (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_set_uri (GtkFileChooser *chooser,
const char *uri);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_select_uri (GtkFileChooser *chooser,
const char *uri);
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_unselect_uri (GtkFileChooser *chooser,
const char *uri);
GDK_AVAILABLE_IN_ALL
GSList * gtk_file_chooser_get_uris (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_set_current_folder_uri (GtkFileChooser *chooser,
const gchar *uri);
GDK_AVAILABLE_IN_ALL
gchar * gtk_file_chooser_get_current_folder_uri (GtkFileChooser *chooser);
/* GFile manipulation */
GDK_AVAILABLE_IN_ALL
@@ -220,44 +135,11 @@ void gtk_file_chooser_unselect_file (GtkFileChooser *chooser,
GDK_AVAILABLE_IN_ALL
GSList * gtk_file_chooser_get_files (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_set_current_folder_file (GtkFileChooser *chooser,
gboolean gtk_file_chooser_set_current_folder (GtkFileChooser *chooser,
GFile *file,
GError **error);
GDK_AVAILABLE_IN_ALL
GFile * gtk_file_chooser_get_current_folder_file (GtkFileChooser *chooser);
/* Preview widget
*/
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_set_preview_widget (GtkFileChooser *chooser,
GtkWidget *preview_widget);
GDK_AVAILABLE_IN_ALL
GtkWidget *gtk_file_chooser_get_preview_widget (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_set_preview_widget_active (GtkFileChooser *chooser,
gboolean active);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_get_preview_widget_active (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_set_use_preview_label (GtkFileChooser *chooser,
gboolean use_label);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_get_use_preview_label (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
char *gtk_file_chooser_get_preview_filename (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
char *gtk_file_chooser_get_preview_uri (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
GFile *gtk_file_chooser_get_preview_file (GtkFileChooser *chooser);
/* Extra widget
*/
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_set_extra_widget (GtkFileChooser *chooser,
GtkWidget *extra_widget);
GDK_AVAILABLE_IN_ALL
GtkWidget *gtk_file_chooser_get_extra_widget (GtkFileChooser *chooser);
GFile * gtk_file_chooser_get_current_folder (GtkFileChooser *chooser);
/* List of user selectable filters
*/
@@ -274,7 +156,7 @@ GSList *gtk_file_chooser_list_filters (GtkFileChooser *chooser);
*/
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_set_filter (GtkFileChooser *chooser,
GtkFileFilter *filter);
GtkFileFilter *filter);
GDK_AVAILABLE_IN_ALL
GtkFileFilter *gtk_file_chooser_get_filter (GtkFileChooser *chooser);
@@ -282,26 +164,15 @@ GtkFileFilter *gtk_file_chooser_get_filter (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_add_shortcut_folder (GtkFileChooser *chooser,
const char *folder,
GFile *folder,
GError **error);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_remove_shortcut_folder (GtkFileChooser *chooser,
const char *folder,
GFile *folder,
GError **error);
GDK_AVAILABLE_IN_ALL
GSList *gtk_file_chooser_list_shortcut_folders (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_add_shortcut_folder_uri (GtkFileChooser *chooser,
const char *uri,
GError **error);
GDK_AVAILABLE_IN_ALL
gboolean gtk_file_chooser_remove_shortcut_folder_uri (GtkFileChooser *chooser,
const char *uri,
GError **error);
GDK_AVAILABLE_IN_ALL
GSList *gtk_file_chooser_list_shortcut_folder_uris (GtkFileChooser *chooser);
GDK_AVAILABLE_IN_ALL
void gtk_file_chooser_add_choice (GtkFileChooser *chooser,
const char *id,

View File

@@ -80,11 +80,12 @@
* |[<!-- language="C" -->
* {
* GtkWidget *button;
* GFile *cwd = g_file_new_for_path ("/etc");
*
* button = gtk_file_chooser_button_new (_("Select a file"),
* GTK_FILE_CHOOSER_ACTION_OPEN);
* gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (button),
* "/etc");
* gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (button), cwd);
* g_object_unref (cwd);
* }
* ]|
*
@@ -331,11 +332,6 @@ static void combo_box_changed_cb (GtkComboBox *combo_box,
static void button_clicked_cb (GtkButton *real_button,
gpointer user_data);
static void chooser_update_preview_cb (GtkFileChooser *dialog,
gpointer user_data);
static void chooser_notify_cb (GObject *dialog,
GParamSpec *pspec,
gpointer user_data);
static void dialog_response_cb (GtkDialog *dialog,
gint response,
gpointer user_data);
@@ -556,7 +552,7 @@ gtk_file_chooser_button_set_current_folder (GtkFileChooser *chooser,
g_signal_emit_by_name (button, "current-folder-changed");
if (priv->active)
gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (priv->chooser), file, NULL);
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (priv->chooser), file, NULL);
return TRUE;
}
@@ -688,7 +684,7 @@ gtk_file_chooser_button_add_shortcut_folder (GtkFileChooser *chooser,
delegate = g_object_get_qdata (G_OBJECT (chooser),
GTK_FILE_CHOOSER_DELEGATE_QUARK);
retval = _gtk_file_chooser_add_shortcut_folder (delegate, file, error);
retval = gtk_file_chooser_add_shortcut_folder (delegate, file, error);
if (retval)
{
@@ -728,7 +724,7 @@ gtk_file_chooser_button_remove_shortcut_folder (GtkFileChooser *chooser,
delegate = g_object_get_qdata (G_OBJECT (chooser),
GTK_FILE_CHOOSER_DELEGATE_QUARK);
retval = _gtk_file_chooser_remove_shortcut_folder (delegate, file, error);
retval = gtk_file_chooser_remove_shortcut_folder (delegate, file, error);
if (retval)
{
@@ -810,9 +806,6 @@ gtk_file_chooser_button_constructed (GObject *object)
(gpointer) (&priv->dialog));
}
g_signal_connect (priv->chooser, "notify",
G_CALLBACK (chooser_notify_cb), object);
/* This is used, instead of the standard delegate, to ensure that signals are only
* delegated when the OK button is pressed. */
g_object_set_qdata (object, GTK_FILE_CHOOSER_DELEGATE_QUARK, priv->chooser);
@@ -879,7 +872,6 @@ gtk_file_chooser_button_set_property (GObject *object,
case GTK_FILE_CHOOSER_PROP_ACTION:
switch (g_value_get_enum (value))
{
case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER:
case GTK_FILE_CHOOSER_ACTION_SAVE:
{
GEnumClass *eclass;
@@ -921,22 +913,10 @@ gtk_file_chooser_button_set_property (GObject *object,
case PROP_TITLE:
case GTK_FILE_CHOOSER_PROP_FILTER:
case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET:
case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE:
case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL:
case GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET:
case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN:
case GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION:
case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS:
g_object_set_property (G_OBJECT (priv->chooser), pspec->name, value);
break;
case GTK_FILE_CHOOSER_PROP_LOCAL_ONLY:
g_object_set_property (G_OBJECT (priv->chooser), pspec->name, value);
fs_volumes_changed_cb (priv->fs, button);
bookmarks_changed_cb (button);
break;
case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE:
g_warning ("%s: Choosers of type '%s' do not support selecting multiple files.",
G_STRFUNC, G_OBJECT_TYPE_NAME (object));
@@ -966,14 +946,7 @@ gtk_file_chooser_button_get_property (GObject *object,
case PROP_TITLE:
case GTK_FILE_CHOOSER_PROP_ACTION:
case GTK_FILE_CHOOSER_PROP_FILTER:
case GTK_FILE_CHOOSER_PROP_LOCAL_ONLY:
case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET:
case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE:
case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL:
case GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET:
case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE:
case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN:
case GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION:
case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS:
g_object_get_property (G_OBJECT (priv->chooser), pspec->name, value);
break;
@@ -1285,7 +1258,6 @@ gtk_file_chooser_button_mnemonic_activate (GtkWidget *widget,
return gtk_widget_mnemonic_activate (priv->combo_box, group_cycling);
break;
case GTK_FILE_CHOOSER_ACTION_SAVE:
case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER:
default:
g_assert_not_reached ();
break;
@@ -1833,7 +1805,6 @@ model_add_volumes (GtkFileChooserButton *button,
GtkFileChooserButtonPrivate *priv = gtk_file_chooser_button_get_instance_private (button);
GtkListStore *store;
gint pos;
gboolean local_only;
GSList *l;
if (!volumes)
@@ -1841,7 +1812,6 @@ model_add_volumes (GtkFileChooserButton *button,
store = GTK_LIST_STORE (priv->model);
pos = model_get_type_position (button, ROW_TYPE_VOLUME);
local_only = gtk_file_chooser_get_local_only (GTK_FILE_CHOOSER (priv->chooser));
for (l = volumes; l; l = l->next)
{
@@ -1851,27 +1821,6 @@ model_add_volumes (GtkFileChooserButton *button,
gchar *display_name;
volume = l->data;
if (local_only)
{
if (_gtk_file_system_volume_is_mounted (volume))
{
GFile *base_file;
base_file = _gtk_file_system_volume_get_root (volume);
if (base_file != NULL)
{
if (!_gtk_file_has_native_path (base_file))
{
g_object_unref (base_file);
continue;
}
else
g_object_unref (base_file);
}
}
}
icon = _gtk_file_system_volume_get_icon (volume);
display_name = _gtk_file_system_volume_get_display_name (volume);
@@ -1901,7 +1850,6 @@ model_add_bookmarks (GtkFileChooserButton *button,
GtkListStore *store;
GtkTreeIter iter;
gint pos;
gboolean local_only;
GSList *l;
if (!bookmarks)
@@ -1909,7 +1857,6 @@ model_add_bookmarks (GtkFileChooserButton *button,
store = GTK_LIST_STORE (priv->model);
pos = model_get_type_position (button, ROW_TYPE_BOOKMARK);
local_only = gtk_file_chooser_get_local_only (GTK_FILE_CHOOSER (priv->chooser));
for (l = bookmarks; l; l = l->next)
{
@@ -1934,9 +1881,6 @@ model_add_bookmarks (GtkFileChooserButton *button,
gchar *label;
GIcon *icon;
if (local_only)
continue;
/* Don't call get_info for remote paths to avoid latency and
* auth dialogs.
* If we switch to a better bookmarks file format (XBEL), we
@@ -2134,15 +2078,11 @@ model_remove_rows (GtkFileChooserButton *button,
static gboolean
test_if_file_is_visible (GtkFileSystem *fs,
GFile *file,
gboolean local_only,
gboolean is_folder)
{
if (!file)
return FALSE;
if (local_only && !_gtk_file_has_native_path (file))
return FALSE;
if (!is_folder)
return FALSE;
@@ -2158,11 +2098,10 @@ filter_model_visible_func (GtkTreeModel *model,
GtkFileChooserButtonPrivate *priv = gtk_file_chooser_button_get_instance_private (button);
gchar type;
gpointer data;
gboolean local_only, retval, is_folder;
gboolean retval, is_folder;
type = ROW_TYPE_INVALID;
data = NULL;
local_only = gtk_file_chooser_get_local_only (GTK_FILE_CHOOSER (priv->chooser));
gtk_tree_model_get (model, iter,
TYPE_COLUMN, &type,
@@ -2178,30 +2117,10 @@ filter_model_visible_func (GtkTreeModel *model,
case ROW_TYPE_SPECIAL:
case ROW_TYPE_SHORTCUT:
case ROW_TYPE_BOOKMARK:
retval = test_if_file_is_visible (priv->fs, data, local_only, is_folder);
retval = test_if_file_is_visible (priv->fs, data, is_folder);
break;
case ROW_TYPE_VOLUME:
{
retval = TRUE;
if (local_only)
{
if (_gtk_file_system_volume_is_mounted (data))
{
GFile *base_file;
base_file = _gtk_file_system_volume_get_root (data);
if (base_file)
{
if (!_gtk_file_has_native_path (base_file))
retval = FALSE;
g_object_unref (base_file);
}
else
retval = FALSE;
}
}
}
retval = TRUE;
break;
default:
retval = TRUE;
@@ -2550,7 +2469,7 @@ save_inactive_state (GtkFileChooserButton *button)
if (priv->selection_while_inactive)
g_object_unref (priv->selection_while_inactive);
priv->current_folder_while_inactive = gtk_file_chooser_get_current_folder_file (GTK_FILE_CHOOSER (priv->chooser));
priv->current_folder_while_inactive = gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (priv->chooser));
priv->selection_while_inactive = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (priv->chooser));
}
@@ -2560,7 +2479,7 @@ restore_inactive_state (GtkFileChooserButton *button)
GtkFileChooserButtonPrivate *priv = gtk_file_chooser_button_get_instance_private (button);
if (priv->current_folder_while_inactive)
gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (priv->chooser), priv->current_folder_while_inactive, NULL);
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (priv->chooser), priv->current_folder_while_inactive, NULL);
if (priv->selection_while_inactive)
gtk_file_chooser_select_file (GTK_FILE_CHOOSER (priv->chooser), priv->selection_while_inactive, NULL);
@@ -2614,15 +2533,6 @@ open_dialog (GtkFileChooserButton *button)
{
restore_inactive_state (button);
priv->active = TRUE;
/* Only handle update-preview handler if it is handled on the button */
if (g_signal_has_handler_pending (button,
g_signal_lookup ("update-preview", GTK_TYPE_FILE_CHOOSER),
0, TRUE))
{
g_signal_connect (priv->chooser, "update-preview",
G_CALLBACK (chooser_update_preview_cb), button);
}
}
gtk_widget_set_sensitive (priv->combo_box, FALSE);
@@ -2708,58 +2618,6 @@ button_clicked_cb (GtkButton *real_button,
/* Dialog */
static void
chooser_update_preview_cb (GtkFileChooser *dialog,
gpointer user_data)
{
g_signal_emit_by_name (user_data, "update-preview");
}
static void
chooser_notify_cb (GObject *dialog,
GParamSpec *pspec,
gpointer user_data)
{
gpointer iface;
iface = g_type_interface_peek (g_type_class_peek (G_OBJECT_TYPE (dialog)),
GTK_TYPE_FILE_CHOOSER);
if (g_object_interface_find_property (iface, pspec->name))
g_object_notify (user_data, pspec->name);
if (g_ascii_strcasecmp (pspec->name, "local-only") == 0)
{
GtkFileChooserButton *button = GTK_FILE_CHOOSER_BUTTON (user_data);
GtkFileChooserButtonPrivate *priv = gtk_file_chooser_button_get_instance_private (button);
if (priv->has_current_folder)
{
GtkTreeIter iter;
gint pos;
gpointer data;
pos = model_get_type_position (user_data,
ROW_TYPE_CURRENT_FOLDER);
gtk_tree_model_iter_nth_child (priv->model, &iter, NULL, pos);
data = NULL;
gtk_tree_model_get (priv->model, &iter, DATA_COLUMN, &data, -1);
/* If the path isn't local but we're in local-only mode now, remove
* the custom-folder row */
if (data && _gtk_file_has_native_path (G_FILE (data)) &&
gtk_file_chooser_get_local_only (GTK_FILE_CHOOSER (priv->chooser)))
{
pos--;
model_remove_rows (user_data, pos, 2);
}
}
gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (priv->filter_model));
update_combo_box (user_data);
}
}
static void
common_response_cb (GtkFileChooserButton *button,
gint response)
@@ -2780,11 +2638,7 @@ common_response_cb (GtkFileChooserButton *button,
}
if (priv->active)
{
priv->active = FALSE;
g_signal_handlers_disconnect_by_func (priv->chooser, chooser_update_preview_cb, button);
}
priv->active = FALSE;
update_label_and_image (button);
update_combo_box (button);

View File

@@ -85,11 +85,9 @@
* res = gtk_dialog_run (GTK_DIALOG (dialog));
* if (res == GTK_RESPONSE_ACCEPT)
* {
* char *filename;
* GtkFileChooser *chooser = GTK_FILE_CHOOSER (dialog);
* filename = gtk_file_chooser_get_filename (chooser);
* open_file (filename);
* g_free (filename);
* g_autoptr(GFile) filen = gtk_file_chooser_get_file (chooser);
* open_file (file);
* }
*
* gtk_widget_destroy (dialog);
@@ -113,23 +111,16 @@
* NULL);
* chooser = GTK_FILE_CHOOSER (dialog);
*
* gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE);
*
* if (user_edited_a_new_document)
* gtk_file_chooser_set_current_name (chooser,
* _("Untitled document"));
* gtk_file_chooser_set_current_name (chooser, _("Untitled document"));
* else
* gtk_file_chooser_set_filename (chooser,
* existing_filename);
* gtk_file_chooser_set_file (chooser, existing_filename);
*
* res = gtk_dialog_run (GTK_DIALOG (dialog));
* if (res == GTK_RESPONSE_ACCEPT)
* {
* char *filename;
*
* filename = gtk_file_chooser_get_filename (chooser);
* save_to_file (filename);
* g_free (filename);
* g_autoptr(GFile) file = gtk_file_chooser_get_file (chooser);
* save_to_file (file);
* }
*
* gtk_widget_destroy (dialog);
@@ -145,7 +136,7 @@
* and suggest a name such as “Untitled” with gtk_file_chooser_set_current_name().
*
* - To save a file under a different name. Use #GTK_FILE_CHOOSER_ACTION_SAVE,
* and set the existing filename with gtk_file_chooser_set_filename().
* and set the existing file with gtk_file_chooser_set_file().
*
* - To choose a folder instead of a file. Use #GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER.
*
@@ -156,7 +147,7 @@
* considered to be a good policy, as now the file chooser is
* able to make good suggestions on its own. In general, you
* should only cause the file chooser to show a specific folder
* when it is appropriate to use gtk_file_chooser_set_filename(),
* when it is appropriate to use gtk_file_chooser_set_file(),
* i.e. when you are doing a Save As command and you already
* have a file saved somewhere.
@@ -362,18 +353,18 @@ file_chooser_widget_selection_changed (GtkWidget *widget,
{
GtkFileChooserDialogPrivate *priv = gtk_file_chooser_dialog_get_instance_private (dialog);
GtkWidget *button;
GSList *uris;
GSList *files;
gboolean sensitive;
button = get_accept_action_widget (GTK_DIALOG (dialog), FALSE);
if (button == NULL)
return;
uris = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (priv->widget));
sensitive = (uris != NULL);
files = gtk_file_chooser_get_files (GTK_FILE_CHOOSER (priv->widget));
sensitive = (files != NULL);
gtk_widget_set_sensitive (button, sensitive);
g_slist_free_full (uris, g_free);
g_slist_free_full (files, g_object_unref);
}
static void
@@ -495,8 +486,7 @@ setup_save_entry (GtkFileChooserDialog *dialog)
header = gtk_dialog_get_header_bar (GTK_DIALOG (dialog));
need_entry = action == GTK_FILE_CHOOSER_ACTION_SAVE ||
action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER;
need_entry = action == GTK_FILE_CHOOSER_ACTION_SAVE;
if (need_entry && !priv->has_entry)
{

View File

@@ -64,7 +64,6 @@ struct _GtkFileChooserEntry
guint complete_on_load : 1;
guint eat_tabs : 1;
guint eat_escape : 1;
guint local_only : 1;
};
enum
@@ -273,8 +272,6 @@ _gtk_file_chooser_entry_init (GtkFileChooserEntry *chooser_entry)
GtkEntryCompletion *comp;
GtkCellRenderer *cell;
chooser_entry->local_only = FALSE;
g_object_set (chooser_entry, "truncate-multiline", TRUE, NULL);
comp = gtk_entry_completion_new ();
@@ -573,7 +570,6 @@ update_inline_completion (GtkFileChooserEntry *chooser_entry)
gtk_entry_completion_set_inline_completion (completion, TRUE);
break;
case GTK_FILE_CHOOSER_ACTION_SAVE:
case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER:
default:
gtk_entry_completion_set_inline_completion (completion, FALSE);
break;
@@ -693,11 +689,6 @@ set_completion_folder (GtkFileChooserEntry *chooser_entry,
GFile *folder_file,
char *dir_part)
{
if (folder_file &&
chooser_entry->local_only
&& !_gtk_file_has_native_path (folder_file))
folder_file = NULL;
if (((chooser_entry->current_folder_file
&& folder_file
&& g_file_equal (folder_file, chooser_entry->current_folder_file))
@@ -985,7 +976,6 @@ _gtk_file_chooser_entry_set_action (GtkFileChooserEntry *chooser_entry,
gtk_entry_completion_set_popup_single_match (comp, FALSE);
break;
case GTK_FILE_CHOOSER_ACTION_SAVE:
case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER:
gtk_entry_completion_set_popup_single_match (comp, TRUE);
break;
}
@@ -1061,20 +1051,6 @@ _gtk_file_chooser_entry_select_filename (GtkFileChooserEntry *chooser_entry)
gtk_editable_select_region (GTK_EDITABLE (chooser_entry), 0, (gint) len);
}
void
_gtk_file_chooser_entry_set_local_only (GtkFileChooserEntry *chooser_entry,
gboolean local_only)
{
chooser_entry->local_only = local_only;
refresh_current_folder_and_file_part (chooser_entry);
}
gboolean
_gtk_file_chooser_entry_get_local_only (GtkFileChooserEntry *chooser_entry)
{
return chooser_entry->local_only;
}
void
_gtk_file_chooser_entry_set_file_filter (GtkFileChooserEntry *chooser_entry,
GtkFileFilter *filter)

View File

@@ -43,9 +43,6 @@ const gchar * _gtk_file_chooser_entry_get_file_part (GtkFileChooserEnt
gboolean _gtk_file_chooser_entry_get_is_folder (GtkFileChooserEntry *chooser_entry,
GFile *file);
void _gtk_file_chooser_entry_select_filename (GtkFileChooserEntry *chooser_entry);
void _gtk_file_chooser_entry_set_local_only (GtkFileChooserEntry *chooser_entry,
gboolean local_only);
gboolean _gtk_file_chooser_entry_get_local_only (GtkFileChooserEntry *chooser_entry);
void _gtk_file_chooser_entry_set_file_filter (GtkFileChooserEntry *chooser_entry,
GtkFileFilter *filter);

View File

@@ -105,8 +105,6 @@
* "_Cancel");
* chooser = GTK_FILE_CHOOSER (native);
*
* gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE);
*
* if (user_edited_a_new_document)
* gtk_file_chooser_set_current_name (chooser,
* _("Untitled document"));
@@ -147,7 +145,6 @@
* * #GtkFileChooser::current-folder-changed
* * #GtkFileChooser::selection-changed
* * #GtkFileChooser::file-activated
* * #GtkFileChooser::confirm-overwrite
*
* You can also not use the methods that directly control user navigation:
* * gtk_file_chooser_unselect_filename()
@@ -165,10 +162,6 @@
* used. It supports many of the features that #GtkFileChooserDialog
* does, but there are some things it does not handle:
*
* * Extra widgets added with gtk_file_chooser_set_extra_widget().
*
* * Use of custom previews by connecting to #GtkFileChooser::update-preview.
*
* * Any #GtkFileFilter added using a mimetype or custom filter.
*
* If any of these features are used the regular #GtkFileChooserDialog
@@ -182,10 +175,6 @@
* be a GTK+ file chooser. In this situation, the following things are not
* supported and will be silently ignored:
*
* * Extra widgets added with gtk_file_chooser_set_extra_widget().
*
* * Use of custom previews by connecting to #GtkFileChooser::update-preview.
*
* * Any #GtkFileFilter added with a custom filter.
*
* ## macOS details ## {#gtkfilechooserdialognative-macos}
@@ -194,12 +183,6 @@
* file chooser dialogs. Some features provided by #GtkFileChooserDialog are
* not supported:
*
* * Extra widgets added with gtk_file_chooser_set_extra_widget(), unless the
* widget is an instance of GtkLabel, in which case the label text will be used
* to set the NSSavePanel message instance property.
*
* * Use of custom previews by connecting to #GtkFileChooser::update-preview.
*
* * Any #GtkFileFilter added with a custom filter.
*
* * Shortcut folders.
@@ -577,13 +560,6 @@ dialog_response_cb (GtkDialog *dialog,
_gtk_native_dialog_emit_response (GTK_NATIVE_DIALOG (self), response_id);
}
static void
dialog_update_preview_cb (GtkFileChooser *file_chooser,
gpointer data)
{
g_signal_emit_by_name (data, "update-preview");
}
static void
show_dialog (GtkFileChooserNative *self)
{
@@ -618,11 +594,6 @@ show_dialog (GtkFileChooserNative *self)
G_CALLBACK (dialog_response_cb),
self);
g_signal_connect (self->dialog,
"update-preview",
G_CALLBACK (dialog_update_preview_cb),
self);
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
gtk_window_present (GTK_WINDOW (self->dialog));
G_GNUC_END_IGNORE_DEPRECATIONS
@@ -632,7 +603,6 @@ static void
hide_dialog (GtkFileChooserNative *self)
{
g_signal_handlers_disconnect_by_func (self->dialog, dialog_response_cb, self);
g_signal_handlers_disconnect_by_func (self->dialog, dialog_update_preview_cb, self);
gtk_widget_hide (self->dialog);
}
@@ -644,8 +614,8 @@ gtk_file_chooser_native_set_current_folder (GtkFileChooser *chooser,
GtkFileChooserNative *self = GTK_FILE_CHOOSER_NATIVE (chooser);
gboolean res;
res = gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (self->dialog),
file, error);
res = gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (self->dialog),
file, error);
if (res)

View File

@@ -54,9 +54,7 @@ typedef struct {
gboolean folder;
gboolean create_folders;
gboolean modal;
gboolean overwrite_confirmation;
gboolean select_multiple;
gboolean show_hidden;
gboolean running;
char *accept_label;
@@ -266,11 +264,6 @@ filechooser_quartz_launch (FileChooserQuartzData *data)
[data->panel setReleasedWhenClosed:YES];
if (data->show_hidden)
{
[data->panel setShowsHiddenFiles:YES];
}
if (data->accept_label)
[data->panel setPrompt:[NSString stringWithUTF8String:data->accept_label]];
@@ -445,26 +438,10 @@ gtk_file_chooser_native_quartz_show (GtkFileChooserNative *self)
GtkWindow *transient_for;
GtkFileChooserAction action;
guint update_preview_signal;
GSList *filters, *l;
int n_filters, i;
GtkWidget *extra_widget = NULL;
char *message = NULL;
extra_widget = gtk_file_chooser_get_extra_widget (GTK_FILE_CHOOSER (self));
// if the extra_widget is a GtkLabel, then use its text to set the dialog message
if (extra_widget != NULL)
{
if (!GTK_IS_LABEL (extra_widget))
return FALSE;
else
message = g_strdup (gtk_label_get_text (GTK_LABEL (extra_widget)));
}
update_preview_signal = g_signal_lookup ("update-preview", GTK_TYPE_FILE_CHOOSER);
if (g_signal_has_handler_pending (self, update_preview_signal, 0, TRUE))
return FALSE;
data = g_new0 (FileChooserQuartzData, 1);
// examine filters!
@@ -505,12 +482,10 @@ gtk_file_chooser_native_quartz_show (GtkFileChooserNative *self)
action = gtk_file_chooser_get_action (GTK_FILE_CHOOSER (self->dialog));
if (action == GTK_FILE_CHOOSER_ACTION_SAVE ||
action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
if (action == GTK_FILE_CHOOSER_ACTION_SAVE)
data->save = TRUE;
if (action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ||
action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
if (action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
data->folder = TRUE;
if ((action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ||
@@ -518,13 +493,6 @@ gtk_file_chooser_native_quartz_show (GtkFileChooserNative *self)
gtk_file_chooser_get_select_multiple (GTK_FILE_CHOOSER (self->dialog)))
data->select_multiple = TRUE;
// overwrite confirmation appears to be always on
if (gtk_file_chooser_get_do_overwrite_confirmation (GTK_FILE_CHOOSER (self->dialog)))
data->overwrite_confirmation = TRUE;
if (gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (self->dialog)))
data->show_hidden = TRUE;
transient_for = gtk_native_dialog_get_transient_for (GTK_NATIVE_DIALOG (self));
if (transient_for)
{
@@ -547,8 +515,7 @@ gtk_file_chooser_native_quartz_show (GtkFileChooserNative *self)
if (self->current_folder)
data->current_folder = g_object_ref (self->current_folder);
if (action == GTK_FILE_CHOOSER_ACTION_SAVE ||
action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
if (action == GTK_FILE_CHOOSER_ACTION_SAVE)
data->current_name = g_strdup (self->current_name);
}

View File

@@ -61,15 +61,13 @@ typedef struct {
gboolean save;
gboolean folder;
gboolean modal;
gboolean overwrite_confirmation;
gboolean select_multiple;
gboolean show_hidden;
char *accept_label;
char *cancel_label;
char *title;
GSList *shortcut_uris;
GSList *shortcut_files;
GArray *choices_selections;
GFile *current_folder;
@@ -331,7 +329,7 @@ filechooser_win32_thread_data_free (FilechooserWin32ThreadData *data)
g_array_free (data->choices_selections, TRUE);
data->choices_selections = NULL;
}
g_slist_free_full (data->shortcut_uris, g_free);
g_slist_free_full (data->shortcut_files, g_object_unref);
g_slist_free_full (data->files, g_object_unref);
if (data->self)
g_object_unref (data->self);
@@ -497,13 +495,7 @@ filechooser_win32_thread (gpointer _data)
if (data->select_multiple)
flags |= FOS_ALLOWMULTISELECT;
if (data->show_hidden)
flags |= FOS_FORCESHOWHIDDEN;
if (data->overwrite_confirmation)
flags |= FOS_OVERWRITEPROMPT;
else
flags &= ~(FOS_OVERWRITEPROMPT);
flags |= FOS_OVERWRITEPROMPT;
hr = IFileDialog_SetOptions (pfd, flags);
if (FAILED (hr))
@@ -538,9 +530,9 @@ filechooser_win32_thread (gpointer _data)
g_free (label);
}
for (l = data->shortcut_uris; l != NULL; l = l->next)
for (l = data->shortcut_files; l != NULL; l = l->next)
{
IShellItem *item = get_shell_item_for_uri (l->data);
IShellItem *item = get_shell_item_for_file (l->data);
if (item)
{
hr = IFileDialog_AddPlace (pfd, item, FDAP_BOTTOM);
@@ -873,18 +865,9 @@ gtk_file_chooser_native_win32_show (GtkFileChooserNative *self)
FilechooserWin32ThreadData *data;
GtkWindow *transient_for;
GtkFileChooserAction action;
guint update_preview_signal;
GSList *filters, *l;
int n_filters, i;
if (gtk_file_chooser_get_extra_widget (GTK_FILE_CHOOSER (self)) != NULL &&
self->choices == NULL)
return FALSE;
update_preview_signal = g_signal_lookup ("update-preview", GTK_TYPE_FILE_CHOOSER);
if (g_signal_has_handler_pending (self, update_preview_signal, 0, TRUE))
return FALSE;
data = g_new0 (FilechooserWin32ThreadData, 1);
filters = gtk_file_chooser_list_filters (GTK_FILE_CHOOSER (self));
@@ -911,19 +894,17 @@ gtk_file_chooser_native_win32_show (GtkFileChooserNative *self)
self->mode_data = data;
data->self = g_object_ref (self);
data->shortcut_uris =
gtk_file_chooser_list_shortcut_folder_uris (GTK_FILE_CHOOSER (self->dialog));
data->shortcut_files =
gtk_file_chooser_list_shortcut_folders (GTK_FILE_CHOOSER (self->dialog));
data->accept_label = translate_mnemonics (self->accept_label);
data->cancel_label = translate_mnemonics (self->cancel_label);
action = gtk_file_chooser_get_action (GTK_FILE_CHOOSER (self->dialog));
if (action == GTK_FILE_CHOOSER_ACTION_SAVE ||
action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
if (action == GTK_FILE_CHOOSER_ACTION_SAVE)
data->save = TRUE;
if (action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ||
action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
if (action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
data->folder = TRUE;
if ((action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ||
@@ -931,12 +912,6 @@ gtk_file_chooser_native_win32_show (GtkFileChooserNative *self)
gtk_file_chooser_get_select_multiple (GTK_FILE_CHOOSER (self->dialog)))
data->select_multiple = TRUE;
if (gtk_file_chooser_get_do_overwrite_confirmation (GTK_FILE_CHOOSER (self->dialog)))
data->overwrite_confirmation = TRUE;
if (gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (self->dialog)))
data->show_hidden = TRUE;
transient_for = gtk_native_dialog_get_transient_for (GTK_NATIVE_DIALOG (self));
if (transient_for)
{
@@ -957,8 +932,7 @@ gtk_file_chooser_native_win32_show (GtkFileChooserNative *self)
if (self->current_folder)
data->current_folder = g_object_ref (self->current_folder);
if (action == GTK_FILE_CHOOSER_ACTION_SAVE ||
action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
if (action == GTK_FILE_CHOOSER_ACTION_SAVE)
data->current_name = g_strdup (self->current_name);
}

View File

@@ -73,7 +73,6 @@ struct _GtkFileChooserIface
void (*select_all) (GtkFileChooser *chooser);
void (*unselect_all) (GtkFileChooser *chooser);
GSList * (*get_files) (GtkFileChooser *chooser);
GFile * (*get_preview_file) (GtkFileChooser *chooser);
GtkFileSystem *(*get_file_system) (GtkFileChooser *chooser);
void (*add_filter) (GtkFileChooser *chooser,
GtkFileFilter *filter);
@@ -94,7 +93,6 @@ struct _GtkFileChooserIface
void (*selection_changed) (GtkFileChooser *chooser);
void (*update_preview) (GtkFileChooser *chooser);
void (*file_activated) (GtkFileChooser *chooser);
GtkFileChooserConfirmation (*confirm_overwrite) (GtkFileChooser *chooser);
/* 3.22 additions */
void (*add_choice) (GtkFileChooser *chooser,
@@ -112,14 +110,6 @@ struct _GtkFileChooserIface
};
GtkFileSystem *_gtk_file_chooser_get_file_system (GtkFileChooser *chooser);
gboolean _gtk_file_chooser_add_shortcut_folder (GtkFileChooser *chooser,
GFile *folder,
GError **error);
gboolean _gtk_file_chooser_remove_shortcut_folder (GtkFileChooser *chooser,
GFile *folder,
GError **error);
GSList * _gtk_file_chooser_list_shortcut_folder_files (GtkFileChooser *chooser);
G_END_DECLS

View File

@@ -40,7 +40,6 @@ static void delegate_unselect_file (GtkFileChooser *choose
static void delegate_select_all (GtkFileChooser *chooser);
static void delegate_unselect_all (GtkFileChooser *chooser);
static GSList * delegate_get_files (GtkFileChooser *chooser);
static GFile * delegate_get_preview_file (GtkFileChooser *chooser);
static GtkFileSystem *delegate_get_file_system (GtkFileChooser *chooser);
static void delegate_add_filter (GtkFileChooser *chooser,
GtkFileFilter *filter);
@@ -61,13 +60,9 @@ static void delegate_current_folder_changed (GtkFileChooser *choose
gpointer data);
static void delegate_selection_changed (GtkFileChooser *chooser,
gpointer data);
static void delegate_update_preview (GtkFileChooser *chooser,
gpointer data);
static void delegate_file_activated (GtkFileChooser *chooser,
gpointer data);
static GtkFileChooserConfirmation delegate_confirm_overwrite (GtkFileChooser *chooser,
gpointer data);
static void delegate_add_choice (GtkFileChooser *chooser,
const char *id,
const char *label,
@@ -99,33 +94,12 @@ _gtk_file_chooser_install_properties (GObjectClass *klass)
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_ACTION,
"action");
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET,
"extra-widget");
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_FILTER,
"filter");
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_LOCAL_ONLY,
"local-only");
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET,
"preview-widget");
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE,
"preview-widget-active");
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL,
"use-preview-label");
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE,
"select-multiple");
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN,
"show-hidden");
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION,
"do-overwrite-confirmation");
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS,
"create-folders");
@@ -154,7 +128,6 @@ _gtk_file_chooser_delegate_iface_init (GtkFileChooserIface *iface)
iface->select_all = delegate_select_all;
iface->unselect_all = delegate_unselect_all;
iface->get_files = delegate_get_files;
iface->get_preview_file = delegate_get_preview_file;
iface->get_file_system = delegate_get_file_system;
iface->add_filter = delegate_add_filter;
iface->remove_filter = delegate_remove_filter;
@@ -193,12 +166,8 @@ _gtk_file_chooser_set_delegate (GtkFileChooser *receiver,
G_CALLBACK (delegate_current_folder_changed), receiver);
g_signal_connect (delegate, "selection-changed",
G_CALLBACK (delegate_selection_changed), receiver);
g_signal_connect (delegate, "update-preview",
G_CALLBACK (delegate_update_preview), receiver);
g_signal_connect (delegate, "file-activated",
G_CALLBACK (delegate_file_activated), receiver);
g_signal_connect (delegate, "confirm-overwrite",
G_CALLBACK (delegate_confirm_overwrite), receiver);
}
GQuark
@@ -252,12 +221,6 @@ delegate_get_files (GtkFileChooser *chooser)
return gtk_file_chooser_get_files (get_delegate (chooser));
}
static GFile *
delegate_get_preview_file (GtkFileChooser *chooser)
{
return gtk_file_chooser_get_preview_file (get_delegate (chooser));
}
static GtkFileSystem *
delegate_get_file_system (GtkFileChooser *chooser)
{
@@ -289,7 +252,7 @@ delegate_add_shortcut_folder (GtkFileChooser *chooser,
GFile *file,
GError **error)
{
return _gtk_file_chooser_add_shortcut_folder (get_delegate (chooser), file, error);
return gtk_file_chooser_add_shortcut_folder (get_delegate (chooser), file, error);
}
static gboolean
@@ -297,13 +260,13 @@ delegate_remove_shortcut_folder (GtkFileChooser *chooser,
GFile *file,
GError **error)
{
return _gtk_file_chooser_remove_shortcut_folder (get_delegate (chooser), file, error);
return gtk_file_chooser_remove_shortcut_folder (get_delegate (chooser), file, error);
}
static GSList *
delegate_list_shortcut_folders (GtkFileChooser *chooser)
{
return _gtk_file_chooser_list_shortcut_folder_files (get_delegate (chooser));
return gtk_file_chooser_list_shortcut_folders (get_delegate (chooser));
}
static gboolean
@@ -311,13 +274,13 @@ delegate_set_current_folder (GtkFileChooser *chooser,
GFile *file,
GError **error)
{
return gtk_file_chooser_set_current_folder_file (get_delegate (chooser), file, error);
return gtk_file_chooser_set_current_folder (get_delegate (chooser), file, error);
}
static GFile *
delegate_get_current_folder (GtkFileChooser *chooser)
{
return gtk_file_chooser_get_current_folder_file (get_delegate (chooser));
return gtk_file_chooser_get_current_folder (get_delegate (chooser));
}
static void
@@ -360,13 +323,6 @@ delegate_current_folder_changed (GtkFileChooser *chooser,
g_signal_emit_by_name (data, "current-folder-changed");
}
static void
delegate_update_preview (GtkFileChooser *chooser,
gpointer data)
{
g_signal_emit_by_name (data, "update-preview");
}
static void
delegate_file_activated (GtkFileChooser *chooser,
gpointer data)
@@ -374,16 +330,6 @@ delegate_file_activated (GtkFileChooser *chooser,
g_signal_emit_by_name (data, "file-activated");
}
static GtkFileChooserConfirmation
delegate_confirm_overwrite (GtkFileChooser *chooser,
gpointer data)
{
GtkFileChooserConfirmation conf;
g_signal_emit_by_name (data, "confirm-overwrite", &conf);
return conf;
}
GSettings *
_gtk_file_chooser_get_settings_for_widget (GtkWidget *widget)
{

View File

@@ -30,14 +30,7 @@ typedef enum {
GTK_FILE_CHOOSER_PROP_FIRST = 0x1000,
GTK_FILE_CHOOSER_PROP_ACTION = GTK_FILE_CHOOSER_PROP_FIRST,
GTK_FILE_CHOOSER_PROP_FILTER,
GTK_FILE_CHOOSER_PROP_LOCAL_ONLY,
GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET,
GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE,
GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL,
GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET,
GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE,
GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN,
GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION,
GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS,
GTK_FILE_CHOOSER_PROP_LAST = GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS
} GtkFileChooserProp;

View File

@@ -288,9 +288,6 @@ struct _GtkFileChooserWidgetPrivate {
GtkWidget *extra_and_filters;
GtkWidget *filter_combo_hbox;
GtkWidget *filter_combo;
GtkWidget *preview_box;
GtkWidget *preview_label;
GtkWidget *preview_widget;
GtkWidget *extra_align;
GtkWidget *extra_widget;
@@ -323,8 +320,6 @@ struct _GtkFileChooserWidgetPrivate {
GtkBookmarksManager *bookmarks_manager;
GFile *current_folder;
GFile *preview_file;
char *preview_display_name;
GFile *renamed_file;
GtkTreeViewColumn *list_name_column;
@@ -359,15 +354,10 @@ struct _GtkFileChooserWidgetPrivate {
/* Flags */
guint local_only : 1;
guint preview_widget_active : 1;
guint use_preview_label : 1;
guint select_multiple : 1;
guint show_hidden : 1;
guint show_hidden_set : 1;
guint sort_directories_first : 1;
guint show_time : 1;
guint do_overwrite_confirmation : 1;
guint list_sort_ascending : 1;
guint shortcuts_current_folder_active : 1;
guint show_size_column : 1;
@@ -488,7 +478,6 @@ static void gtk_file_chooser_widget_unselect_file (GtkF
static void gtk_file_chooser_widget_select_all (GtkFileChooser *chooser);
static void gtk_file_chooser_widget_unselect_all (GtkFileChooser *chooser);
static GSList * gtk_file_chooser_widget_get_files (GtkFileChooser *chooser);
static GFile * gtk_file_chooser_widget_get_preview_file (GtkFileChooser *chooser);
static GtkFileSystem *gtk_file_chooser_widget_get_file_system (GtkFileChooser *chooser);
static void gtk_file_chooser_widget_add_filter (GtkFileChooser *chooser,
GtkFileFilter *filter);
@@ -544,7 +533,6 @@ static void location_mode_set (GtkFileChooserWidget *impl, LocationMode new_mod
static void set_current_filter (GtkFileChooserWidget *impl,
GtkFileFilter *filter);
static void check_preview_change (GtkFileChooserWidget *impl);
static void filter_combo_changed (GtkComboBox *combo_box,
GtkFileChooserWidget *impl);
@@ -621,7 +609,6 @@ gtk_file_chooser_widget_iface_init (GtkFileChooserIface *iface)
iface->select_all = gtk_file_chooser_widget_select_all;
iface->unselect_all = gtk_file_chooser_widget_unselect_all;
iface->get_files = gtk_file_chooser_widget_get_files;
iface->get_preview_file = gtk_file_chooser_widget_get_preview_file;
iface->get_file_system = gtk_file_chooser_widget_get_file_system;
iface->set_current_folder = gtk_file_chooser_widget_set_current_folder;
iface->get_current_folder = gtk_file_chooser_widget_get_current_folder;
@@ -697,8 +684,6 @@ gtk_file_chooser_widget_finalize (GObject *object)
/* stopping the load above should have cleared this */
g_assert (priv->load_timeout_id == 0);
g_free (priv->preview_display_name);
G_OBJECT_CLASS (gtk_file_chooser_widget_parent_class)->finalize (object);
}
@@ -812,21 +797,6 @@ error_creating_folder_dialog (GtkFileChooserWidget *impl,
error);
}
/* Shows an error about not being able to create a folder because a file with
* the same name is already there.
*/
static void
error_creating_folder_over_existing_file_dialog (GtkFileChooserWidget *impl,
GFile *file,
GError *error)
{
error_dialog (impl,
_("The folder could not be created, as a file with the same "
"name already exists. Try using a different name for the "
"folder, or rename the file first."),
error);
}
static void
error_with_file_under_nonfolder (GtkFileChooserWidget *impl,
GFile *parent_file)
@@ -913,7 +883,7 @@ change_folder_and_display_error (GtkFileChooserWidget *impl,
* list_row_activated()
* fetches path from model; path belongs to the model (*)
* calls change_folder_and_display_error()
* calls gtk_file_chooser_set_current_folder_file()
* calls gtk_file_chooser_set_current_folder()
* changing folders fails, sets model to NULL, thus freeing the path in (*)
*/
@@ -926,58 +896,6 @@ change_folder_and_display_error (GtkFileChooserWidget *impl,
return result;
}
static void
update_preview_widget_visibility (GtkFileChooserWidget *impl)
{
GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
if (priv->use_preview_label)
{
if (!priv->preview_label)
{
priv->preview_label = gtk_label_new (priv->preview_display_name);
gtk_box_insert_child_after (GTK_BOX (priv->preview_box), priv->preview_label, NULL);
gtk_label_set_ellipsize (GTK_LABEL (priv->preview_label), PANGO_ELLIPSIZE_MIDDLE);
}
}
else
{
if (priv->preview_label)
{
gtk_widget_destroy (priv->preview_label);
priv->preview_label = NULL;
}
}
if (priv->preview_widget_active && priv->preview_widget)
gtk_widget_show (priv->preview_box);
else
gtk_widget_hide (priv->preview_box);
}
static void
set_preview_widget (GtkFileChooserWidget *impl,
GtkWidget *preview_widget)
{
GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
if (preview_widget == priv->preview_widget)
return;
if (priv->preview_widget)
gtk_container_remove (GTK_CONTAINER (priv->preview_box),
priv->preview_widget);
priv->preview_widget = preview_widget;
if (priv->preview_widget)
{
gtk_widget_show (priv->preview_widget);
gtk_container_add (GTK_CONTAINER (priv->preview_box), priv->preview_widget);
}
update_preview_widget_visibility (impl);
}
static void
new_folder_popover_active (GtkWidget *button,
GParamSpec *pspec,
@@ -1247,9 +1165,7 @@ places_sidebar_open_location_cb (GtkPlacesSidebar *sidebar,
/* In the Save modes, we want to preserve what the user typed in the filename
* entry, so that he may choose another folder without erasing his typed name.
*/
if (priv->location_entry
&& !(priv->action == GTK_FILE_CHOOSER_ACTION_SAVE
|| priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER))
if (priv->location_entry && priv->action != GTK_FILE_CHOOSER_ACTION_SAVE)
clear_entry = TRUE;
else
clear_entry = FALSE;
@@ -1333,14 +1249,13 @@ treeview_key_press_cb (GtkEventControllerKey *controller,
return GDK_EVENT_STOP;
}
if ((keyval == GDK_KEY_Return
|| keyval == GDK_KEY_ISO_Enter
|| keyval == GDK_KEY_KP_Enter
|| keyval == GDK_KEY_space
|| keyval == GDK_KEY_KP_Space)
&& !(state & gtk_accelerator_get_default_mod_mask ())
&& !(priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER))
if ((keyval == GDK_KEY_Return ||
keyval == GDK_KEY_ISO_Enter ||
keyval == GDK_KEY_KP_Enter ||
keyval == GDK_KEY_space ||
keyval == GDK_KEY_KP_Space) &&
!(state & gtk_accelerator_get_default_mod_mask ()) &&
priv->action != GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
{
gtk_widget_activate_default (GTK_WIDGET (impl));
return GDK_EVENT_STOP;
@@ -2405,7 +2320,6 @@ location_changed_timeout_cb (gpointer user_data)
GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
gtk_file_chooser_unselect_all (GTK_FILE_CHOOSER (impl));
check_preview_change (impl);
g_signal_emit_by_name (impl, "selection-changed", 0);
priv->location_changed_id = 0;
@@ -2462,7 +2376,6 @@ location_entry_setup (GtkFileChooserWidget *impl)
g_signal_connect_swapped (priv->location_entry, "hide-entry",
G_CALLBACK (location_entry_close_clicked), impl);
_gtk_file_chooser_entry_set_local_only (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), priv->local_only);
_gtk_file_chooser_entry_set_action (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), priv->action);
_gtk_file_chooser_entry_set_file_filter (GTK_FILE_CHOOSER_ENTRY (priv->location_entry),
priv->current_filter);
@@ -2698,12 +2611,6 @@ places_sidebar_show_other_locations_with_flags_cb (GtkPlacesSidebar *sidebar
GtkPlacesOpenFlags open_flags,
GtkFileChooserWidget *impl)
{
GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
priv->preview_widget_active = FALSE;
update_preview_widget_visibility (impl);
operation_mode_set (impl, OPERATION_MODE_OTHER_LOCATIONS);
}
@@ -2723,8 +2630,7 @@ location_toggle_popup_handler (GtkFileChooserWidget *impl)
* If it is visible, turn it off only if it is focused.
* Otherwise, switch to the entry.
*/
if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE)
{
gtk_widget_grab_focus (priv->location_entry);
}
@@ -2812,38 +2718,11 @@ switch_to_home_dir (GtkFileChooserWidget *impl)
home_file = g_file_new_for_path (home);
gtk_file_chooser_set_current_folder_file (GTK_FILE_CHOOSER (impl), home_file, NULL); /* NULL-GError */
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (impl), home_file, NULL); /* NULL-GError */
g_object_unref (home_file);
}
static void
set_local_only (GtkFileChooserWidget *impl,
gboolean local_only)
{
GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
if (local_only != priv->local_only)
{
priv->local_only = local_only;
if (priv->location_entry)
_gtk_file_chooser_entry_set_local_only (GTK_FILE_CHOOSER_ENTRY (priv->location_entry), local_only);
gtk_places_sidebar_set_local_only (GTK_PLACES_SIDEBAR (priv->places_sidebar), local_only);
if (local_only && priv->current_folder &&
!_gtk_file_has_native_path (priv->current_folder))
{
/* If we are pointing to a non-local folder, make an effort to change
* back to a local folder, but it's really up to the app to not cause
* such a situation, so we ignore errors.
*/
switch_to_home_dir (impl);
}
}
}
/* Sets the file chooser to multiple selection mode */
static void
set_select_multiple (GtkFileChooserWidget *impl,
@@ -2865,8 +2744,6 @@ set_select_multiple (GtkFileChooserWidget *impl,
priv->select_multiple = select_multiple;
g_object_notify (G_OBJECT (impl), "select-multiple");
check_preview_change (impl);
}
/* Takes the folder stored in a row in the recent_model, and puts it in the pathbar */
@@ -3118,8 +2995,7 @@ update_appearance (GtkFileChooserWidget *impl)
{
GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE)
{
save_widgets_create (impl);
gtk_places_sidebar_set_show_recent (GTK_PLACES_SIDEBAR (priv->places_sidebar), FALSE);
@@ -3191,10 +3067,7 @@ gtk_file_chooser_widget_get_subtitle (GtkFileChooserWidget *impl)
(priv->operation_mode == OPERATION_MODE_BROWSE &&
priv->location_mode == LOCATION_MODE_FILENAME_ENTRY))
{
if (priv->local_only)
subtitle = g_strdup (_("Enter location"));
else
subtitle = g_strdup (_("Enter location or URL"));
subtitle = g_strdup (_("Enter location or URL"));
}
return subtitle;
@@ -3256,13 +3129,13 @@ gtk_file_chooser_widget_set_property (GObject *object,
{
gtk_file_chooser_widget_unselect_all (GTK_FILE_CHOOSER (impl));
if ((action == GTK_FILE_CHOOSER_ACTION_SAVE ||
action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
&& priv->select_multiple)
if (action == GTK_FILE_CHOOSER_ACTION_SAVE &&
priv->select_multiple)
{
g_warning ("Tried to change the file chooser action to SAVE or CREATE_FOLDER, but "
"this is not allowed in multiple selection mode. Resetting the file chooser "
"to single selection mode.");
g_warning ("Tried to change the file chooser action to SAVE, "
"but this is not allowed in multiple selection "
"mode. Resetting the file chooser to single "
"selection mode.");
set_select_multiple (impl, FALSE);
}
priv->action = action;
@@ -3277,38 +3150,16 @@ gtk_file_chooser_widget_set_property (GObject *object,
set_current_filter (impl, g_value_get_object (value));
break;
case GTK_FILE_CHOOSER_PROP_LOCAL_ONLY:
set_local_only (impl, g_value_get_boolean (value));
break;
case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET:
set_preview_widget (impl, g_value_get_object (value));
break;
case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE:
priv->preview_widget_active = g_value_get_boolean (value);
update_preview_widget_visibility (impl);
break;
case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL:
priv->use_preview_label = g_value_get_boolean (value);
update_preview_widget_visibility (impl);
break;
case GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET:
set_extra_widget (impl, g_value_get_object (value));
break;
case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE:
{
gboolean select_multiple = g_value_get_boolean (value);
if ((priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
&& select_multiple)
if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE &&
select_multiple)
{
g_warning ("Tried to set the file chooser to multiple selection mode, but this is "
"not allowed in SAVE or CREATE_FOLDER modes. Ignoring the change and "
"leaving the file chooser in single selection mode.");
g_warning ("Tried to set the file chooser to multiple selection "
"mode, but this is not allowed in SAVE mode. Ignoring "
"the change and leaving the file chooser in single "
"selection mode.");
return;
}
@@ -3316,18 +3167,6 @@ gtk_file_chooser_widget_set_property (GObject *object,
}
break;
case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN:
priv->show_hidden_set = TRUE;
set_show_hidden (impl, g_value_get_boolean (value));
break;
case GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION:
{
gboolean do_overwrite_confirmation = g_value_get_boolean (value);
priv->do_overwrite_confirmation = do_overwrite_confirmation;
}
break;
case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS:
{
gboolean create_folders = g_value_get_boolean (value);
@@ -3369,38 +3208,10 @@ gtk_file_chooser_widget_get_property (GObject *object,
g_value_set_object (value, priv->current_filter);
break;
case GTK_FILE_CHOOSER_PROP_LOCAL_ONLY:
g_value_set_boolean (value, priv->local_only);
break;
case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET:
g_value_set_object (value, priv->preview_widget);
break;
case GTK_FILE_CHOOSER_PROP_PREVIEW_WIDGET_ACTIVE:
g_value_set_boolean (value, priv->preview_widget_active);
break;
case GTK_FILE_CHOOSER_PROP_USE_PREVIEW_LABEL:
g_value_set_boolean (value, priv->use_preview_label);
break;
case GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET:
g_value_set_object (value, priv->extra_widget);
break;
case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE:
g_value_set_boolean (value, priv->select_multiple);
break;
case GTK_FILE_CHOOSER_PROP_SHOW_HIDDEN:
g_value_set_boolean (value, priv->show_hidden);
break;
case GTK_FILE_CHOOSER_PROP_DO_OVERWRITE_CONFIRMATION:
g_value_set_boolean (value, priv->do_overwrite_confirmation);
break;
case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS:
g_value_set_boolean (value, priv->create_folders);
break;
@@ -3651,8 +3462,8 @@ settings_load (GtkFileChooserWidget *impl)
date_format = g_settings_get_enum (settings, SETTINGS_KEY_DATE_FORMAT);
type_format = g_settings_get_enum (settings, SETTINGS_KEY_TYPE_FORMAT);
if (!priv->show_hidden_set)
set_show_hidden (impl, show_hidden);
set_show_hidden (impl, show_hidden);
priv->show_size_column = show_size_column;
gtk_tree_view_column_set_visible (priv->list_size_column, show_size_column);
priv->show_type_column = show_type_column;
@@ -3694,8 +3505,7 @@ settings_save (GtkFileChooserWidget *impl)
/* All the other state */
g_settings_set_enum (settings, SETTINGS_KEY_LOCATION_MODE, priv->location_mode);
g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_HIDDEN,
gtk_file_chooser_get_show_hidden (GTK_FILE_CHOOSER (impl)));
g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_HIDDEN, priv->show_hidden);
g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_SIZE_COLUMN, priv->show_size_column);
g_settings_set_boolean (settings, SETTINGS_KEY_SHOW_TYPE_COLUMN, priv->show_type_column);
g_settings_set_boolean (settings, SETTINGS_KEY_SORT_DIRECTORIES_FIRST, priv->sort_directories_first);
@@ -3714,10 +3524,12 @@ settings_save (GtkFileChooserWidget *impl)
static void
switch_to_cwd (GtkFileChooserWidget *impl)
{
char *current_working_dir;
char *current_working_dir = g_get_current_dir ();
GFile *cwd = g_file_new_for_path (current_working_dir);
current_working_dir = g_get_current_dir ();
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (impl), current_working_dir);
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (impl), cwd, NULL);
g_object_unref (cwd);
g_free (current_working_dir);
}
@@ -4844,8 +4656,7 @@ file_system_model_set (GtkFileSystemModel *model,
{
gboolean sensitive = TRUE;
if (!(priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER
|| priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER))
if (priv->action != GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
{
sensitive = TRUE; /* for file modes... */
}
@@ -5127,7 +4938,6 @@ update_chooser_entry (GtkFileChooserWidget *impl)
return;
if (!(priv->action == GTK_FILE_CHOOSER_ACTION_SAVE
|| priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER
|| ((priv->action == GTK_FILE_CHOOSER_ACTION_OPEN
|| priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
&& priv->location_mode == LOCATION_MODE_FILENAME_ENTRY)))
@@ -5166,8 +4976,7 @@ update_chooser_entry (GtkFileChooserWidget *impl)
g_strdup (g_file_info_get_display_name (info));
if (priv->action == GTK_FILE_CHOOSER_ACTION_OPEN ||
priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
priv->action == GTK_FILE_CHOOSER_ACTION_SAVE)
{
/* Don't change the name when clicking on a folder... */
change_entry = !_gtk_file_info_consider_as_directory (info);
@@ -5204,8 +5013,7 @@ update_chooser_entry (GtkFileChooserWidget *impl)
}
else
{
g_assert (!(priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER));
g_assert (priv->action != GTK_FILE_CHOOSER_ACTION_SAVE);
/* Multiple selection, so just clear the entry. */
g_free (priv->browse_files_last_selected_name);
@@ -5457,8 +5265,6 @@ update_current_folder_get_info_cb (GCancellable *cancellable,
g_signal_emit_by_name (impl, "current-folder-changed", 0);
check_preview_change (impl);
g_signal_emit_by_name (impl, "selection-changed", 0);
out:
@@ -5486,18 +5292,6 @@ gtk_file_chooser_widget_update_current_folder (GtkFileChooser *chooser,
operation_mode_set (impl, OPERATION_MODE_BROWSE);
if (priv->local_only && !_gtk_file_has_native_path (file))
{
g_set_error_literal (error,
GTK_FILE_CHOOSER_ERROR,
GTK_FILE_CHOOSER_ERROR_BAD_FILENAME,
_("Cannot change to folder because it is not local"));
g_object_unref (file);
profile_end ("end - not local", NULL);
return FALSE;
}
if (priv->update_current_folder_cancellable)
g_cancellable_cancel (priv->update_current_folder_cancellable);
@@ -5545,8 +5339,7 @@ gtk_file_chooser_widget_set_current_name (GtkFileChooser *chooser,
GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser);
GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
g_return_if_fail (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER);
g_return_if_fail (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE);
pending_select_files_free (impl);
gtk_editable_set_text (GTK_EDITABLE (priv->location_entry), name);
@@ -5558,9 +5351,7 @@ gtk_file_chooser_widget_get_current_name (GtkFileChooser *chooser)
GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser);
GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
g_return_val_if_fail (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER,
NULL);
g_return_val_if_fail (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE, NULL);
return g_strdup (gtk_editable_get_text (GTK_EDITABLE (priv->location_entry)));
}
@@ -5579,7 +5370,7 @@ gtk_file_chooser_widget_select_file (GtkFileChooser *chooser,
parent_file = g_file_get_parent (file);
if (!parent_file)
return gtk_file_chooser_set_current_folder_file (chooser, file, error);
return gtk_file_chooser_set_current_folder (chooser, file, error);
fsmodel = GTK_FILE_SYSTEM_MODEL (gtk_tree_view_get_model (GTK_TREE_VIEW (priv->browse_files_tree_view)));
@@ -5619,7 +5410,7 @@ gtk_file_chooser_widget_select_file (GtkFileChooser *chooser,
{
gboolean result;
result = gtk_file_chooser_set_current_folder_file (chooser, parent_file, error);
result = gtk_file_chooser_set_current_folder (chooser, parent_file, error);
g_object_unref (parent_file);
return result;
}
@@ -5736,7 +5527,6 @@ check_save_entry (GtkFileChooserWidget *impl,
GError *error;
g_assert (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER ||
((priv->action == GTK_FILE_CHOOSER_ACTION_OPEN ||
priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) &&
priv->location_mode == LOCATION_MODE_FILENAME_ENTRY));
@@ -5911,8 +5701,7 @@ gtk_file_chooser_widget_get_files (GtkFileChooser *chooser)
else
{
/* The focus is on a dialog's action area button or something else */
if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE)
goto file_entry;
else
goto file_list;
@@ -5928,7 +5717,7 @@ gtk_file_chooser_widget_get_files (GtkFileChooser *chooser)
{
GFile *current_folder;
current_folder = gtk_file_chooser_get_current_folder_file (chooser);
current_folder = gtk_file_chooser_get_current_folder (chooser);
if (current_folder)
info.result = g_slist_prepend (info.result, current_folder);
@@ -5937,18 +5726,6 @@ gtk_file_chooser_widget_get_files (GtkFileChooser *chooser)
return g_slist_reverse (info.result);
}
GFile *
gtk_file_chooser_widget_get_preview_file (GtkFileChooser *chooser)
{
GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser);
GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
if (priv->preview_file)
return g_object_ref (priv->preview_file);
else
return NULL;
}
static GtkFileSystem *
gtk_file_chooser_widget_get_file_system (GtkFileChooser *chooser)
{
@@ -6282,49 +6059,24 @@ should_respond_after_confirm_overwrite (GtkFileChooserWidget *impl,
GFile *parent_file)
{
GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
GtkFileChooserConfirmation conf;
struct GetDisplayNameData *data;
if (!priv->do_overwrite_confirmation)
return TRUE;
g_assert (file_part != NULL);
conf = GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM;
data = g_new0 (struct GetDisplayNameData, 1);
data->impl = g_object_ref (impl);
data->file_part = g_strdup (file_part);
g_signal_emit_by_name (impl, "confirm-overwrite", &conf);
if (priv->should_respond_get_info_cancellable)
g_cancellable_cancel (priv->should_respond_get_info_cancellable);
switch (conf)
{
case GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM:
{
struct GetDisplayNameData *data;
g_assert (file_part != NULL);
data = g_new0 (struct GetDisplayNameData, 1);
data->impl = g_object_ref (impl);
data->file_part = g_strdup (file_part);
if (priv->should_respond_get_info_cancellable)
g_cancellable_cancel (priv->should_respond_get_info_cancellable);
priv->should_respond_get_info_cancellable =
_gtk_file_system_get_info (priv->file_system, parent_file,
"standard::display-name",
confirmation_confirm_get_info_cb,
data);
set_busy_cursor (data->impl, TRUE);
return FALSE;
}
case GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME:
return TRUE;
case GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN:
return FALSE;
default:
g_assert_not_reached ();
return FALSE;
}
priv->should_respond_get_info_cancellable =
_gtk_file_system_get_info (priv->file_system, parent_file,
"standard::display-name",
confirmation_confirm_get_info_cb,
data);
set_busy_cursor (data->impl, TRUE);
return FALSE;
}
static void
@@ -6388,8 +6140,7 @@ name_entry_get_parent_info_cb (GCancellable *cancellable,
else
request_response_and_add_to_recent_list (impl);
}
else if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER
|| priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
else if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
{
GError *mkdir_error = NULL;
@@ -6485,21 +6236,6 @@ file_exists_get_info_cb (GCancellable *cancellable,
needs_parent_check = TRUE; /* file doesn't exist; see if its parent exists */
}
}
else if (priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
{
if (file_exists && !is_folder)
{
/* Oops, the user typed the name of an existing path which is not
* a folder
*/
error_creating_folder_over_existing_file_dialog (impl, data->file,
g_error_copy (error));
}
else
{
needs_parent_check = TRUE;
}
}
else if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
{
if (!file_exists)
@@ -6657,12 +6393,11 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed)
SAVE_ENTRY, /* Go to the code for handling the save entry */
NOT_REACHED /* Sanity check */
} ActionToTake;
static const ActionToTake what_to_do[4][3] = {
static const ActionToTake what_to_do[3][3] = {
/* 0 selected 1 selected many selected */
/* ACTION_OPEN */ { NOOP, RESPOND_OR_SWITCH, ALL_FILES },
/* ACTION_SAVE */ { SAVE_ENTRY, RESPOND_OR_SWITCH, NOT_REACHED },
/* ACTION_SELECT_FOLDER */ { RESPOND, ALL_FOLDERS, ALL_FOLDERS },
/* ACTION_CREATE_FOLDER */ { SAVE_ENTRY, ALL_FOLDERS, NOT_REACHED }
};
int num_selected;
@@ -6672,7 +6407,7 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed)
file_list:
g_assert (priv->action >= GTK_FILE_CHOOSER_ACTION_OPEN && priv->action <= GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER);
g_assert (priv->action >= GTK_FILE_CHOOSER_ACTION_OPEN && priv->action < GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
if (priv->operation_mode == OPERATION_MODE_RECENT)
{
@@ -6750,7 +6485,6 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed)
save_entry:
g_assert (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER ||
((priv->action == GTK_FILE_CHOOSER_ACTION_OPEN ||
priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER) &&
priv->location_mode == LOCATION_MODE_FILENAME_ENTRY));
@@ -6781,8 +6515,7 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed)
if (is_empty)
{
if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE)
{
/* FIXME: ERROR_NO_FILENAME */
gtk_widget_grab_focus (priv->location_entry);
@@ -6801,8 +6534,7 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed)
{
change_folder_and_display_error (impl, file, TRUE);
}
else if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
else if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
{
/* The folder already exists, so we do not need to create it.
* Just respond to terminate the dialog.
@@ -6864,8 +6596,7 @@ gtk_file_chooser_widget_should_respond (GtkFileChooserEmbed *chooser_embed)
}
else
/* The focus is on a dialog's action area button or something else */
if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE)
goto save_entry;
else
goto file_list;
@@ -6895,8 +6626,7 @@ gtk_file_chooser_widget_initial_focus (GtkFileChooserEmbed *chooser_embed)
else
widget = priv->location_entry;
}
else if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
else if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE)
widget = priv->location_entry;
else
{
@@ -7434,92 +7164,6 @@ filter_combo_changed (GtkComboBox *combo_box,
new_filter);
}
static void
check_preview_change (GtkFileChooserWidget *impl)
{
GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
GtkTreePath *path;
GFile *new_file;
char *new_display_name;
GtkTreeModel *model;
GtkTreeSelection *selection;
model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->browse_files_tree_view));
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->browse_files_tree_view));
if (gtk_tree_selection_get_mode (selection) == GTK_SELECTION_SINGLE ||
gtk_tree_selection_get_mode (selection) == GTK_SELECTION_BROWSE)
{
GtkTreeIter iter;
if (gtk_tree_selection_get_selected (selection, NULL, &iter))
path = gtk_tree_model_get_path (model, &iter);
else
path = NULL;
}
else
{
gtk_tree_view_get_cursor (GTK_TREE_VIEW (priv->browse_files_tree_view), &path, NULL);
if (path && !gtk_tree_selection_path_is_selected (selection, path))
{
gtk_tree_path_free (path);
path = NULL;
}
}
if (path)
{
GtkTreeIter iter;
gtk_tree_model_get_iter (model, &iter, path);
gtk_tree_model_get (model, &iter,
MODEL_COL_FILE, &new_file,
MODEL_COL_NAME, &new_display_name,
-1);
gtk_tree_path_free (path);
}
else
{
new_file = NULL;
new_display_name = NULL;
}
if (new_file != priv->preview_file &&
!(new_file && priv->preview_file &&
g_file_equal (new_file, priv->preview_file)))
{
if (priv->preview_file)
{
g_object_unref (priv->preview_file);
g_free (priv->preview_display_name);
}
if (new_file)
{
priv->preview_file = new_file;
priv->preview_display_name = new_display_name;
}
else
{
priv->preview_file = NULL;
priv->preview_display_name = NULL;
g_free (new_display_name);
}
if (priv->use_preview_label && priv->preview_label)
gtk_label_set_text (GTK_LABEL (priv->preview_label), priv->preview_display_name);
g_signal_emit_by_name (impl, "update-preview");
}
else
{
if (new_file)
g_object_unref (new_file);
g_free (new_display_name);
}
}
static gboolean
list_select_func (GtkTreeSelection *selection,
GtkTreeModel *model,
@@ -7530,8 +7174,7 @@ list_select_func (GtkTreeSelection *selection,
GtkFileChooserWidget *impl = data;
GtkFileChooserWidgetPrivate *priv = gtk_file_chooser_widget_get_instance_private (impl);
if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
if (priv->action == GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER)
{
GtkTreeIter iter;
gboolean is_sensitive;
@@ -7564,18 +7207,9 @@ list_selection_changed (GtkTreeSelection *selection,
location_bar_update (impl);
check_preview_change (impl);
g_signal_emit_by_name (impl, "selection-changed", 0);
}
static void
list_cursor_changed (GtkTreeView *list,
GtkFileChooserWidget *impl)
{
check_preview_change (impl);
}
static gboolean
browse_files_tree_view_keynav_failed_cb (GtkWidget *widget,
GtkDirectionType direction,
@@ -7740,8 +7374,7 @@ location_popup_handler (GtkFileChooserWidget *impl,
location_mode_set (impl, LOCATION_MODE_FILENAME_ENTRY);
location_set_user_text (impl, path);
}
else if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
else if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE)
{
gtk_widget_grab_focus (priv->location_entry);
if (path != NULL)
@@ -7781,6 +7414,7 @@ static void
desktop_folder_handler (GtkFileChooserWidget *impl)
{
const char *name;
GFile *file;
/* "To disable a directory, point it to the homedir."
* See http://freedesktop.org/wiki/Software/xdg-user-dirs
@@ -7789,7 +7423,9 @@ desktop_folder_handler (GtkFileChooserWidget *impl)
if (!g_strcmp0 (name, g_get_home_dir ()))
return;
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (impl), name);
file = g_file_new_for_path (name);
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (impl), file, NULL);
g_object_unref (file);
}
/* Handler for the "search-shortcut" keybinding signal */
@@ -8254,7 +7890,6 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, browse_path_bar);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, filter_combo_hbox);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, filter_combo);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, preview_box);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, extra_align);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, extra_and_filters);
gtk_widget_class_bind_template_child_private (widget_class, GtkFileChooserWidget, location_entry_box);
@@ -8288,7 +7923,6 @@ gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class)
gtk_widget_class_bind_template_callback (widget_class, file_list_query_tooltip_cb);
gtk_widget_class_bind_template_callback (widget_class, list_row_activated);
gtk_widget_class_bind_template_callback (widget_class, list_selection_changed);
gtk_widget_class_bind_template_callback (widget_class, list_cursor_changed);
gtk_widget_class_bind_template_callback (widget_class, browse_files_tree_view_keynav_failed_cb);
gtk_widget_class_bind_template_callback (widget_class, filter_combo_changed);
gtk_widget_class_bind_template_callback (widget_class, path_bar_clicked);
@@ -8396,8 +8030,7 @@ gtk_file_chooser_widget_set_save_entry (GtkFileChooserWidget *impl,
priv->external_entry = entry;
if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE ||
priv->action == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
if (priv->action == GTK_FILE_CHOOSER_ACTION_SAVE)
{
save_widgets_destroy (impl);
save_widgets_create (impl);
@@ -8423,9 +8056,6 @@ gtk_file_chooser_widget_init (GtkFileChooserWidget *impl)
access ("MARK: *** CREATE FILE CHOOSER", F_OK);
#endif
priv->local_only = FALSE;
priv->preview_widget_active = TRUE;
priv->use_preview_label = TRUE;
priv->select_multiple = FALSE;
priv->show_hidden = FALSE;
priv->show_size_column = TRUE;

View File

@@ -185,7 +185,6 @@ struct _GtkPlacesSidebar {
guint show_other_locations : 1;
guint show_trash : 1;
guint show_starred_location : 1;
guint local_only : 1;
};
struct _GtkPlacesSidebarClass {
@@ -242,7 +241,6 @@ enum {
PROP_SHOW_ENTER_LOCATION,
PROP_SHOW_TRASH,
PROP_SHOW_STARRED_LOCATION,
PROP_LOCAL_ONLY,
PROP_SHOW_OTHER_LOCATIONS,
NUM_PROPERTIES
};
@@ -699,9 +697,6 @@ should_show_file (GtkPlacesSidebar *sidebar,
{
gchar *path;
if (!sidebar->local_only)
return TRUE;
path = g_file_get_path (file);
if (path)
{
@@ -1103,7 +1098,7 @@ update_places (GtkPlacesSidebar *sidebar)
}
/* Trash */
if (!sidebar->local_only && sidebar->show_trash)
if (sidebar->show_trash)
{
start_icon = _gtk_trash_monitor_get_icon (sidebar->trash_monitor);
sidebar->trash_row = add_place (sidebar, PLACES_BUILT_IN,
@@ -1408,9 +1403,6 @@ update_places (GtkPlacesSidebar *sidebar)
if (_gtk_bookmarks_manager_get_is_builtin (sidebar->bookmarks_manager, root))
continue;
if (sidebar->local_only && !is_native)
continue;
clos = g_slice_new (BookmarkQueryClosure);
clos->sidebar = sidebar;
clos->index = index;
@@ -1437,58 +1429,56 @@ update_places (GtkPlacesSidebar *sidebar)
g_object_unref (new_bookmark_icon);
/* network */
if (!sidebar->local_only)
network_volumes = g_list_reverse (network_volumes);
for (l = network_volumes; l != NULL; l = l->next)
{
network_volumes = g_list_reverse (network_volumes);
for (l = network_volumes; l != NULL; l = l->next)
volume = l->data;
mount = g_volume_get_mount (volume);
if (mount != NULL)
{
volume = l->data;
mount = g_volume_get_mount (volume);
if (mount != NULL)
{
network_mounts = g_list_prepend (network_mounts, mount);
continue;
}
else
{
start_icon = g_volume_get_symbolic_icon (volume);
name = g_volume_get_name (volume);
tooltip = g_strdup_printf (_("Mount and open “%s”"), name);
add_place (sidebar, PLACES_MOUNTED_VOLUME,
SECTION_MOUNTS,
name, start_icon, NULL, NULL,
NULL, volume, NULL, NULL, 0, tooltip);
g_object_unref (start_icon);
g_free (name);
g_free (tooltip);
}
network_mounts = g_list_prepend (network_mounts, mount);
continue;
}
network_mounts = g_list_reverse (network_mounts);
for (l = network_mounts; l != NULL; l = l->next)
else
{
char *mount_uri;
start_icon = g_volume_get_symbolic_icon (volume);
name = g_volume_get_name (volume);
tooltip = g_strdup_printf (_("Mount and open “%s”"), name);
mount = l->data;
root = g_mount_get_default_location (mount);
start_icon = g_mount_get_symbolic_icon (mount);
mount_uri = g_file_get_uri (root);
name = g_mount_get_name (mount);
tooltip = g_file_get_parse_name (root);
add_place (sidebar, PLACES_MOUNTED_VOLUME,
SECTION_MOUNTS,
name, start_icon, NULL, mount_uri,
NULL, NULL, mount, NULL, 0, tooltip);
g_object_unref (root);
name, start_icon, NULL, NULL,
NULL, volume, NULL, NULL, 0, tooltip);
g_object_unref (start_icon);
g_free (name);
g_free (mount_uri);
g_free (tooltip);
}
}
network_mounts = g_list_reverse (network_mounts);
for (l = network_mounts; l != NULL; l = l->next)
{
char *mount_uri;
mount = l->data;
root = g_mount_get_default_location (mount);
start_icon = g_mount_get_symbolic_icon (mount);
mount_uri = g_file_get_uri (root);
name = g_mount_get_name (mount);
tooltip = g_file_get_parse_name (root);
add_place (sidebar, PLACES_MOUNTED_VOLUME,
SECTION_MOUNTS,
name, start_icon, NULL, mount_uri,
NULL, NULL, mount, NULL, 0, tooltip);
g_object_unref (root);
g_object_unref (start_icon);
g_free (name);
g_free (mount_uri);
g_free (tooltip);
}
g_list_free_full (network_volumes, g_object_unref);
g_list_free_full (network_mounts, g_object_unref);
@@ -3970,7 +3960,6 @@ gtk_places_sidebar_init (GtkPlacesSidebar *sidebar)
sidebar->cancellable = g_cancellable_new ();
sidebar->show_trash = TRUE;
sidebar->local_only = TRUE;
sidebar->show_other_locations = TRUE;
sidebar->show_recent = TRUE;
sidebar->show_desktop = TRUE;
@@ -4116,10 +4105,6 @@ gtk_places_sidebar_set_property (GObject *obj,
gtk_places_sidebar_set_show_starred_location (sidebar, g_value_get_boolean (value));
break;
case PROP_LOCAL_ONLY:
gtk_places_sidebar_set_local_only (sidebar, g_value_get_boolean (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
break;
@@ -4168,10 +4153,6 @@ gtk_places_sidebar_get_property (GObject *obj,
g_value_set_boolean (value, gtk_places_sidebar_get_show_starred_location (sidebar));
break;
case PROP_LOCAL_ONLY:
g_value_set_boolean (value, gtk_places_sidebar_get_local_only (sidebar));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
break;
@@ -4599,12 +4580,6 @@ gtk_places_sidebar_class_init (GtkPlacesSidebarClass *class)
P_("Whether the sidebar includes a builtin shortcut to manually enter a location"),
FALSE,
GTK_PARAM_READWRITE);
properties[PROP_LOCAL_ONLY] =
g_param_spec_boolean ("local-only",
P_("Local Only"),
P_("Whether the sidebar only includes local files"),
TRUE,
GTK_PARAM_READWRITE);
properties[PROP_SHOW_TRASH] =
g_param_spec_boolean ("show-trash",
P_("Show “Trash”"),
@@ -5023,44 +4998,6 @@ gtk_places_sidebar_get_show_trash (GtkPlacesSidebar *sidebar)
return sidebar->show_trash;
}
/*
* gtk_places_sidebar_set_local_only:
* @sidebar: a places sidebar
* @local_only: whether to show only local files
*
* Sets whether the @sidebar should only show local files.
*/
void
gtk_places_sidebar_set_local_only (GtkPlacesSidebar *sidebar,
gboolean local_only)
{
g_return_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar));
local_only = !!local_only;
if (sidebar->local_only != local_only)
{
sidebar->local_only = local_only;
update_places (sidebar);
g_object_notify_by_pspec (G_OBJECT (sidebar), properties[PROP_LOCAL_ONLY]);
}
}
/*
* gtk_places_sidebar_get_local_only:
* @sidebar: a places sidebar
*
* Returns the value previously set with gtk_places_sidebar_set_local_only().
*
* Returns: %TRUE if the sidebar will only show local files.
*/
gboolean
gtk_places_sidebar_get_local_only (GtkPlacesSidebar *sidebar)
{
g_return_val_if_fail (GTK_IS_PLACES_SIDEBAR (sidebar), FALSE);
return sidebar->local_only;
}
static GSList *
find_shortcut_link (GtkPlacesSidebar *sidebar,
GFile *location)

View File

@@ -88,11 +88,6 @@ gboolean gtk_places_sidebar_get_show_enter_location (GtkPlacesSideb
void gtk_places_sidebar_set_show_enter_location (GtkPlacesSidebar *sidebar,
gboolean show_enter_location);
void gtk_places_sidebar_set_local_only (GtkPlacesSidebar *sidebar,
gboolean local_only);
gboolean gtk_places_sidebar_get_local_only (GtkPlacesSidebar *sidebar);
void gtk_places_sidebar_add_shortcut (GtkPlacesSidebar *sidebar,
GFile *location);
void gtk_places_sidebar_remove_shortcut (GtkPlacesSidebar *sidebar,

View File

@@ -89,7 +89,6 @@ struct _GtkPlacesViewPrivate
GtkPlacesViewRow *row_for_action;
guint local_only : 1;
guint should_open_location : 1;
guint should_pulse_entry : 1;
guint entry_pulse_timeout_id;
@@ -126,7 +125,6 @@ G_DEFINE_TYPE_WITH_PRIVATE (GtkPlacesView, gtk_places_view, GTK_TYPE_BOX)
/* GtkPlacesView properties & signals */
enum {
PROP_0,
PROP_LOCAL_ONLY,
PROP_OPEN_FLAGS,
PROP_FETCHING_NETWORKS,
PROP_LOADING,
@@ -449,10 +447,6 @@ gtk_places_view_get_property (GObject *object,
switch (prop_id)
{
case PROP_LOCAL_ONLY:
g_value_set_boolean (value, gtk_places_view_get_local_only (self));
break;
case PROP_LOADING:
g_value_set_boolean (value, gtk_places_view_get_loading (self));
break;
@@ -480,10 +474,6 @@ gtk_places_view_set_property (GObject *object,
switch (prop_id)
{
case PROP_LOCAL_ONLY:
gtk_places_view_set_local_only (self, g_value_get_boolean (value));
break;
case PROP_OPEN_FLAGS:
gtk_places_view_set_open_flags (self, g_value_get_flags (value));
break;
@@ -1953,38 +1943,12 @@ on_listbox_row_activated (GtkPlacesView *view,
activate_row (view, row, priv->current_open_flags);
}
static gboolean
is_mount_locally_accessible (GMount *mount)
{
GFile *base_file;
gchar *path;
if (mount == NULL)
return FALSE;
base_file = g_mount_get_root (mount);
if (base_file == NULL)
return FALSE;
path = g_file_get_path (base_file);
g_object_unref (base_file);
if (path == NULL)
return FALSE;
g_free (path);
return TRUE;
}
static gboolean
listbox_filter_func (GtkListBoxRow *row,
gpointer user_data)
{
GtkPlacesViewPrivate *priv;
gboolean is_network;
gboolean is_placeholder;
gboolean is_local = FALSE;
gboolean retval;
gboolean searching;
gchar *name;
@@ -1994,25 +1958,8 @@ listbox_filter_func (GtkListBoxRow *row,
retval = FALSE;
searching = priv->search_query && priv->search_query[0] != '\0';
is_network = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (row), "is-network"));
is_placeholder = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (row), "is-placeholder"));
if (GTK_IS_PLACES_VIEW_ROW (row))
{
GtkPlacesViewRow *placesviewrow;
GMount *mount;
placesviewrow = GTK_PLACES_VIEW_ROW (row);
g_object_get(G_OBJECT (placesviewrow), "mount", &mount, NULL);
is_local = is_mount_locally_accessible (mount);
g_clear_object (&mount);
}
if (is_network && priv->local_only && !is_local)
return FALSE;
if (is_placeholder && searching)
return FALSE;
@@ -2298,13 +2245,6 @@ gtk_places_view_class_init (GtkPlacesViewClass *klass)
G_TYPE_STRING,
G_TYPE_STRING);
properties[PROP_LOCAL_ONLY] =
g_param_spec_boolean ("local-only",
P_("Local Only"),
P_("Whether the sidebar only includes local files"),
FALSE,
GTK_PARAM_READWRITE);
properties[PROP_LOADING] =
g_param_spec_boolean ("loading",
P_("Loading"),
@@ -2607,54 +2547,3 @@ gtk_places_view_set_fetching_networks (GtkPlacesView *view,
g_object_notify_by_pspec (G_OBJECT (view), properties [PROP_FETCHING_NETWORKS]);
}
}
/*
* gtk_places_view_get_local_only:
* @view: a #GtkPlacesView
*
* Returns %TRUE if only local volumes are shown, i.e. no networks
* are displayed.
*
* Returns: %TRUE if only local volumes are shown, %FALSE otherwise.
*/
gboolean
gtk_places_view_get_local_only (GtkPlacesView *view)
{
GtkPlacesViewPrivate *priv;
g_return_val_if_fail (GTK_IS_PLACES_VIEW (view), FALSE);
priv = gtk_places_view_get_instance_private (view);
return priv->local_only;
}
/*
* gtk_places_view_set_local_only:
* @view: a #GtkPlacesView
* @local_only: %TRUE to hide remote locations, %FALSE to show.
*
* Sets the #GtkPlacesView::local-only property to @local_only.
*/
void
gtk_places_view_set_local_only (GtkPlacesView *view,
gboolean local_only)
{
GtkPlacesViewPrivate *priv;
g_return_if_fail (GTK_IS_PLACES_VIEW (view));
priv = gtk_places_view_get_instance_private (view);
if (priv->local_only != local_only)
{
priv->local_only = local_only;
gtk_widget_set_visible (priv->actionbar, !local_only);
update_places (view);
update_view_mode (view);
g_object_notify_by_pspec (G_OBJECT (view), properties [PROP_LOCAL_ONLY]);
}
}

View File

@@ -72,11 +72,6 @@ const gchar* gtk_places_view_get_search_query (GtkPlacesView
void gtk_places_view_set_search_query (GtkPlacesView *view,
const gchar *query_text);
gboolean gtk_places_view_get_local_only (GtkPlacesView *view);
void gtk_places_view_set_local_only (GtkPlacesView *view,
gboolean local_only);
gboolean gtk_places_view_get_loading (GtkPlacesView *view);
GtkWidget * gtk_places_view_new (void);

View File

@@ -68,7 +68,7 @@ struct GtkPrinterOptionWidgetPrivate
GtkWidget *button;
/* the last location for save to file, that the user selected */
gchar *last_location;
GFile *last_location;
};
enum {
@@ -485,42 +485,49 @@ dialog_response_callback (GtkDialog *dialog,
GtkPrinterOptionWidget *widget)
{
GtkPrinterOptionWidgetPrivate *priv = widget->priv;
gchar *uri = NULL;
gchar *new_location = NULL;
GFile *new_location = NULL;
char *uri = NULL;
if (response_id == GTK_RESPONSE_ACCEPT)
{
gchar *filename;
gchar *filename_utf8;
gchar *filename_short;
GFileInfo *info;
new_location = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
new_location = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
info = g_file_query_info (new_location,
"standard::display-name",
0,
NULL,
NULL);
if (info != NULL)
{
const char *filename_utf8 = g_file_info_get_display_name (info);
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
filename_utf8 = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL);
filename_short = trim_long_filename (filename_utf8);
gtk_button_set_label (GTK_BUTTON (priv->button), filename_short);
g_free (filename_short);
g_free (filename_utf8);
g_free (filename);
char *filename_short = trim_long_filename (filename_utf8);
gtk_button_set_label (GTK_BUTTON (priv->button), filename_short);
g_free (filename_short);
g_object_unref (info);
}
g_object_unref (new_location);
}
gtk_widget_destroy (GTK_WIDGET (dialog));
if (new_location)
uri = new_location;
uri = g_file_get_uri (new_location);
else
uri = priv->last_location;
uri = g_file_get_uri (priv->last_location);
if (uri)
if (uri != NULL)
{
gtk_printer_option_set (priv->source, uri);
emit_changed (widget);
g_free (uri);
}
g_free (new_location);
g_free (priv->last_location);
priv->last_location = NULL;
g_object_unref (new_location);
g_clear_object (&priv->last_location);
/* unblock the handler which was blocked in the filesave_choose_cb function */
g_signal_handler_unblock (priv->source, priv->source_changed_handler);
@@ -531,7 +538,6 @@ filesave_choose_cb (GtkWidget *button,
GtkPrinterOptionWidget *widget)
{
GtkPrinterOptionWidgetPrivate *priv = widget->priv;
gchar *last_location = NULL;
GtkWidget *dialog;
GtkWindow *toplevel;
@@ -546,27 +552,22 @@ filesave_choose_cb (GtkWidget *button,
_("_Select"), GTK_RESPONSE_ACCEPT,
NULL);
/* The confirmation dialog will appear, when the user clicks print */
gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), FALSE);
/* select the current filename in the dialog */
if (priv->source != NULL)
if (priv->source != NULL && priv->source->value != NULL)
{
priv->last_location = last_location = g_strdup (priv->source->value);
if (last_location)
priv->last_location = g_file_new_for_uri (priv->source->value);
if (priv->last_location)
{
GFile *file;
gchar *basename;
gchar *basename_utf8;
char *basename;
char *basename_utf8;
gtk_file_chooser_select_uri (GTK_FILE_CHOOSER (dialog), last_location);
file = g_file_new_for_uri (last_location);
basename = g_file_get_basename (file);
gtk_file_chooser_select_file (GTK_FILE_CHOOSER (dialog), priv->last_location, NULL);
basename = g_file_get_basename (priv->last_location);
basename_utf8 = g_filename_to_utf8 (basename, -1, NULL, NULL, NULL);
gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), basename_utf8);
g_free (basename_utf8);
g_free (basename);
g_object_unref (file);
}
}

View File

@@ -185,14 +185,22 @@ get_current_text (GtkTextBuffer *buffer)
static void
save_to_file (GtkInspectorCssEditor *ce,
const gchar *filename)
GFile *file)
{
gchar *text;
GError *error = NULL;
char *text;
text = get_current_text (ce->priv->text);
if (!g_file_set_contents (filename, text, -1, &error))
g_file_replace_contents (file, text, -1,
NULL,
FALSE,
G_FILE_CREATE_NONE,
NULL,
NULL,
&error);
if (error != NULL)
{
GtkWidget *dialog;
@@ -220,11 +228,9 @@ save_response (GtkWidget *dialog,
if (response == GTK_RESPONSE_ACCEPT)
{
gchar *filename;
filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
save_to_file (ce, filename);
g_free (filename);
GFile *file = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
save_to_file (ce, file);
g_object_unref (file);
}
gtk_widget_destroy (dialog);
@@ -245,7 +251,6 @@ save_clicked (GtkButton *button,
gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), "custom.css");
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
g_signal_connect (dialog, "response", G_CALLBACK (save_response), ce);
gtk_widget_show (dialog);
}

View File

@@ -1033,7 +1033,6 @@ render_node_save (GtkButton *button,
g_free (filename);
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
g_signal_connect (dialog, "response", G_CALLBACK (render_node_save_response), node);
gtk_widget_show (dialog);
}

View File

@@ -16,7 +16,6 @@
<property name="vexpand">1</property>
<child>
<object class="GtkPlacesSidebar" id="places_sidebar">
<property name="local-only">1</property>
<property name="show-other-locations">1</property>
<style>
<class name="sidebar"/>
@@ -110,7 +109,7 @@
</object>
</child>
<child>
<object class="GtkBox" id="list_and_preview_box">
<object class="GtkBox" id="list_box">
<property name="spacing">12</property>
<property name="vexpand">1</property>
<child>
@@ -159,7 +158,6 @@
<signal name="popup-menu" handler="list_popup_menu_cb" swapped="no"/>
<signal name="query-tooltip" handler="file_list_query_tooltip_cb" swapped="no"/>
<signal name="row-activated" handler="list_row_activated" swapped="no"/>
<signal name="cursor-changed" handler="list_cursor_changed" swapped="no"/>
<signal name="keynav-failed" handler="browse_files_tree_view_keynav_failed_cb"/>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection2">
@@ -263,7 +261,6 @@
<property name="name">other_locations</property>
<property name="child">
<object class="GtkPlacesView" id="places_view">
<property name="local-only" bind-source="GtkFileChooserWidget" bind-property="local-only" bind-flags="default|sync-create"/>
<signal name="open-location" handler="places_sidebar_open_location_cb" swapped="no"/>
<signal name="show-error-message" handler="places_sidebar_show_error_message_cb" swapped="no"/>
</object>
@@ -327,13 +324,6 @@
</child>
</object>
</child>
<child>
<object class="GtkBox" id="preview_box">
<property name="visible">0</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property>
</object>
</child>
</object>
</child>
</object>

View File

@@ -3,7 +3,7 @@
#include <gtk/gtk.h>
static GtkWidget *main_window;
static char *filename = NULL;
static GFile *filename = NULL;
static GtkPageSetup *page_setup = NULL;
static GtkPrintSettings *settings = NULL;
static gboolean file_changed = FALSE;
@@ -20,7 +20,7 @@ update_title (GtkWindow *window)
if (filename == NULL)
basename = g_strdup ("Untitled");
else
basename = g_path_get_basename (filename);
basename = g_file_get_basename (filename);
title = g_strdup_printf ("Simple Editor with printing - %s", basename);
g_free (basename);
@@ -81,7 +81,8 @@ get_text (void)
}
static void
set_text (const char *text, gsize len)
set_text (const char *text,
gsize len)
{
gtk_text_buffer_set_text (buffer, text, len);
file_changed = FALSE;
@@ -89,7 +90,7 @@ set_text (const char *text, gsize len)
}
static void
load_file (const char *open_filename)
load_file (GFile *open_filename)
{
GtkWidget *error_dialog;
char *contents;
@@ -98,37 +99,45 @@ load_file (const char *open_filename)
error_dialog = NULL;
error = NULL;
if (g_file_get_contents (open_filename, &contents, &len, &error))
g_file_load_contents (open_filename, NULL, &contents, &len, NULL, &error);
if (error == NULL)
{
if (g_utf8_validate (contents, len, NULL))
{
filename = g_strdup (open_filename);
g_clear_object (&filename);
filename = g_object_ref (open_filename);
set_text (contents, len);
g_free (contents);
}
else
{
GFileInfo *info = g_file_query_info (open_filename, "standard::display-name", 0, NULL, &error);
const char *display_name = g_file_info_get_display_name (info);
error_dialog = gtk_message_dialog_new (GTK_WINDOW (main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Error loading file %s:\n%s",
open_filename,
display_name,
"Not valid utf8");
g_object_unref (info);
}
}
else
{
GFileInfo *info = g_file_query_info (open_filename, "standard::display-name", 0, NULL, &error);
const char *display_name = g_file_info_get_display_name (info);
error_dialog = gtk_message_dialog_new (GTK_WINDOW (main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Error loading file %s:\n%s",
open_filename,
display_name,
error->message);
g_object_unref (info);
g_error_free (error);
}
if (error_dialog)
{
g_signal_connect (error_dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL);
@@ -138,38 +147,49 @@ load_file (const char *open_filename)
static void
save_file (const char *save_filename)
save_file (GFile *save_filename)
{
char *text = get_text ();
GtkWidget *error_dialog;
GError *error;
error = NULL;
if (g_file_set_contents (save_filename,
text, -1, &error))
g_file_replace_contents (save_filename,
text, -1,
NULL, FALSE,
G_FILE_CREATE_NONE,
NULL,
NULL,
&error);
if (error != NULL)
{
if (save_filename != filename)
{
g_free (filename);
filename = g_strdup (save_filename);
g_clear_object (&filename);
filename = g_object_ref (save_filename);
}
file_changed = FALSE;
update_ui ();
}
else
{
GFileInfo *info = g_file_query_info (save_filename, "standard::display-name", 0, NULL, NULL);
const char *display_name = g_file_info_get_display_name (info);
error_dialog = gtk_message_dialog_new (GTK_WINDOW (main_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,
GTK_BUTTONS_CLOSE,
"Error saving to file %s:\n%s",
filename,
display_name,
error->message);
g_signal_connect (error_dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL);
gtk_widget_show (error_dialog);
g_error_free (error);
g_object_unref (info);
}
}
@@ -481,7 +501,6 @@ activate_save_as (GSimpleAction *action,
{
GtkWidget *dialog;
gint response;
char *save_filename;
dialog = gtk_file_chooser_dialog_new ("Select file",
GTK_WINDOW (main_window),
@@ -494,9 +513,9 @@ activate_save_as (GSimpleAction *action,
if (response == GTK_RESPONSE_OK)
{
save_filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
GFile *save_filename = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
save_file (save_filename);
g_free (save_filename);
g_object_unref (save_filename);
}
gtk_widget_destroy (dialog);
@@ -520,7 +539,6 @@ activate_open (GSimpleAction *action,
{
GtkWidget *dialog;
gint response;
char *open_filename;
dialog = gtk_file_chooser_dialog_new ("Select file",
GTK_WINDOW (main_window),
@@ -533,9 +551,9 @@ activate_open (GSimpleAction *action,
if (response == GTK_RESPONSE_OK)
{
open_filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
GFile *open_filename = gtk_file_chooser_get_file (GTK_FILE_CHOOSER (dialog));
load_file (open_filename);
g_free (open_filename);
g_object_unref (open_filename);
}
gtk_widget_destroy (dialog);
@@ -689,7 +707,11 @@ command_line (GApplication *application,
argv = g_application_command_line_get_arguments (command_line, &argc);
if (argc == 2)
load_file (argv[1]);
{
GFile *file = g_file_new_for_commandline_arg (argv[1]);
load_file (file);
g_object_unref (file);
}
return 0;
}

View File

@@ -44,28 +44,38 @@ static GtkFileChooserAction action;
static void
print_current_folder (GtkFileChooser *chooser)
{
gchar *uri;
GFile *cwd;
uri = gtk_file_chooser_get_current_folder_uri (chooser);
g_print ("Current folder changed :\n %s\n", uri ? uri : "(null)");
g_free (uri);
cwd = gtk_file_chooser_get_current_folder (chooser);
if (cwd != NULL)
{
char *uri = g_file_get_uri (cwd);
g_print ("Current folder changed :\n %s\n", uri ? uri : "(null)");
g_free (uri);
g_object_unref (cwd);
}
else
{
g_print ("Current folder changed :\n none\n");
}
}
static void
print_selected (GtkFileChooser *chooser)
{
GSList *uris = gtk_file_chooser_get_uris (chooser);
GSList *uris = gtk_file_chooser_get_files (chooser);
GSList *tmp_list;
g_print ("Selection changed :\n");
for (tmp_list = uris; tmp_list; tmp_list = tmp_list->next)
{
gchar *uri = tmp_list->data;
g_print (" %s\n", uri);
GFile *file = tmp_list->data;
char *uri = g_file_get_uri (file);
g_print (" %s\n", uri ? uri : "(null)");
g_free (uri);
}
g_print ("\n");
g_slist_free (uris);
g_slist_free_full (uris, g_object_unref);
}
static void
@@ -79,7 +89,7 @@ response_cb (GtkDialog *dialog,
{
GSList *list;
list = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (dialog));
list = gtk_file_chooser_get_files (GTK_FILE_CHOOSER (dialog));
if (list)
{
@@ -89,11 +99,13 @@ response_cb (GtkDialog *dialog,
for (l = list; l; l = l->next)
{
g_print ("%s\n", (char *) l->data);
g_free (l->data);
GFile *file = l->data;
char *uri = g_file_get_uri (file);
g_print (" %s\n", uri ? uri : "(null)");
g_free (uri);
}
g_slist_free (list);
g_slist_free_full (list, g_object_unref);
}
else
g_print ("No selected files\n");
@@ -246,102 +258,12 @@ my_new_from_file_at_size (const char *filename,
return pixbuf;
}
#if 0
static char *
format_time (time_t t)
{
gchar buf[128];
struct tm tm_buf;
time_t now = time (NULL);
const char *format;
if (abs (now - t) < 24*60*60)
format = "%X";
else
format = "%x";
localtime_r (&t, &tm_buf);
if (strftime (buf, sizeof (buf), format, &tm_buf) == 0)
return g_strdup ("<unknown>");
else
return g_strdup (buf);
}
static char *
format_size (gint64 size)
{
if (size < (gint64)1024)
return g_strdup_printf ("%d bytes", (gint)size);
else if (size < (gint64)1024*1024)
return g_strdup_printf ("%.1f K", size / (1024.));
else if (size < (gint64)1024*1024*1024)
return g_strdup_printf ("%.1f M", size / (1024.*1024.));
else
return g_strdup_printf ("%.1f G", size / (1024.*1024.*1024.));
}
static void
update_preview_cb (GtkFileChooser *chooser)
{
gchar *filename = gtk_file_chooser_get_preview_filename (chooser);
gboolean have_preview = FALSE;
if (filename)
{
GdkPixbuf *pixbuf;
GError *error = NULL;
pixbuf = my_new_from_file_at_size (filename, 128, 128, &error);
if (pixbuf)
{
gtk_image_set_from_pixbuf (GTK_IMAGE (preview_image), pixbuf);
g_object_unref (pixbuf);
gtk_widget_show (preview_image);
gtk_widget_hide (preview_label);
have_preview = TRUE;
}
else
{
struct stat buf;
if (stat (filename, &buf) == 0)
{
gchar *preview_text;
gchar *size_str;
gchar *modified_time;
size_str = format_size (buf.st_size);
modified_time = format_time (buf.st_mtime);
preview_text = g_strdup_printf ("<i>Modified:</i>\t%s\n"
"<i>Size:</i>\t%s\n",
modified_time,
size_str);
gtk_label_set_markup (GTK_LABEL (preview_label), preview_text);
g_free (modified_time);
g_free (size_str);
g_free (preview_text);
gtk_widget_hide (preview_image);
gtk_widget_show (preview_label);
have_preview = TRUE;
}
}
g_free (filename);
if (error)
g_error_free (error);
}
gtk_file_chooser_set_preview_widget_active (chooser, have_preview);
}
#endif
static void
set_current_folder (GtkFileChooser *chooser,
const char *name)
{
if (!gtk_file_chooser_set_current_folder (chooser, name))
GFile *file = g_file_new_for_path (name);
if (!gtk_file_chooser_set_current_folder (chooser, file, NULL))
{
GtkWidget *dialog;
@@ -354,6 +276,7 @@ set_current_folder (GtkFileChooser *chooser,
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
g_object_unref (file);
}
static void
@@ -374,7 +297,8 @@ static void
set_filename (GtkFileChooser *chooser,
const char *name)
{
if (!gtk_file_chooser_set_filename (chooser, name))
GFile *file = g_file_new_for_path (name);
if (!gtk_file_chooser_set_file (chooser, file, NULL))
{
GtkWidget *dialog;
@@ -387,6 +311,7 @@ set_filename (GtkFileChooser *chooser,
gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
g_object_unref (file);
}
static void
@@ -409,7 +334,7 @@ get_selection_cb (GtkButton *button,
{
GSList *selection;
selection = gtk_file_chooser_get_uris (chooser);
selection = gtk_file_chooser_get_files (chooser);
g_print ("Selection: ");
@@ -421,16 +346,19 @@ get_selection_cb (GtkButton *button,
for (l = selection; l; l = l->next)
{
char *uri = l->data;
GFile *file = l->data;
char *uri = g_file_get_uri (file);
g_print ("%s\n", uri);
g_free (uri);
if (l->next)
g_print (" ");
}
}
g_slist_free_full (selection, g_free);
g_slist_free_full (selection, g_object_unref);
}
static void
@@ -471,55 +399,6 @@ notify_multiple_cb (GtkWidget *dialog,
gtk_widget_set_sensitive (button, multiple);
}
static GtkFileChooserConfirmation
confirm_overwrite_cb (GtkFileChooser *chooser,
gpointer data)
{
GtkWidget *dialog;
GtkWidget *button;
int response;
GtkFileChooserConfirmation conf;
dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (chooser))),
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_NONE,
"What do you want to do?");
button = gtk_button_new_with_label ("Use the stock confirmation dialog");
gtk_widget_show (button);
gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, 1);
button = gtk_button_new_with_label ("Type a new file name");
gtk_widget_show (button);
gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, 2);
button = gtk_button_new_with_label ("Accept the file name");
gtk_widget_show (button);
gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, 3);
response = gtk_dialog_run (GTK_DIALOG (dialog));
switch (response)
{
case 1:
conf = GTK_FILE_CHOOSER_CONFIRMATION_CONFIRM;
break;
case 3:
conf = GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME;
break;
default:
conf = GTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN;
break;
}
gtk_widget_destroy (dialog);
return conf;
}
int
main (int argc, char **argv)
{
@@ -530,15 +409,14 @@ main (int argc, char **argv)
GtkFileFilter *filter;
gboolean force_rtl = FALSE;
gboolean multiple = FALSE;
gboolean local_only = FALSE;
char *action_arg = NULL;
char *initial_filename = NULL;
char *initial_folder = NULL;
GFile *file;
GError *error = NULL;
GOptionEntry options[] = {
{ "action", 'a', 0, G_OPTION_ARG_STRING, &action_arg, "Filechooser action", "ACTION" },
{ "multiple", 'm', 0, G_OPTION_ARG_NONE, &multiple, "Select multiple", NULL },
{ "local-only", 'l', 0, G_OPTION_ARG_NONE, &local_only, "Local only", NULL },
{ "right-to-left", 'r', 0, G_OPTION_ARG_NONE, &force_rtl, "Force right-to-left layout.", NULL },
{ "initial-filename", 'f', 0, G_OPTION_ARG_FILENAME, &initial_filename, "Initial filename to select", "FILENAME" },
{ "initial-folder", 'F', 0, G_OPTION_ARG_FILENAME, &initial_folder, "Initial folder to show", "FILENAME" },
@@ -578,11 +456,9 @@ main (int argc, char **argv)
action = GTK_FILE_CHOOSER_ACTION_SAVE;
else if (! strcmp ("select_folder", action_arg))
action = GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER;
else if (! strcmp ("create_folder", action_arg))
action = GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER;
else
{
g_print ("--action must be one of \"open\", \"save\", \"select_folder\", \"create_folder\"\n");
g_print ("--action must be one of \"open\", \"save\", \"select_folder\"\n");
return 1;
}
@@ -592,7 +468,6 @@ main (int argc, char **argv)
dialog = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG,
"action", action,
"select-multiple", multiple,
"local-only", local_only,
NULL);
switch (action)
@@ -606,7 +481,6 @@ main (int argc, char **argv)
NULL);
break;
case GTK_FILE_CHOOSER_ACTION_SAVE:
case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER:
gtk_window_set_title (GTK_WINDOW (dialog), "Save a file");
gtk_dialog_add_buttons (GTK_DIALOG (dialog),
_("_Cancel"), GTK_RESPONSE_CANCEL,
@@ -622,8 +496,6 @@ main (int argc, char **argv)
G_CALLBACK (print_current_folder), NULL);
g_signal_connect (dialog, "response",
G_CALLBACK (response_cb), &done);
g_signal_connect (dialog, "confirm-overwrite",
G_CALLBACK (confirm_overwrite_cb), NULL);
/* Filters */
filter = gtk_file_filter_new ();
@@ -660,27 +532,7 @@ main (int argc, char **argv)
gtk_file_filter_add_pixbuf_formats (filter);
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
#if 0
/* Preview widget */
/* THIS IS A TERRIBLE PREVIEW WIDGET, AND SHOULD NOT BE COPIED AT ALL.
*/
preview_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (dialog), preview_vbox);
preview_label = gtk_label_new (NULL);
gtk_container_add (GTK_CONTAINER (preview_vbox), preview_label, TRUE, TRUE, 0);
g_object_set (preview_label, "margin", 6, NULL);
preview_image = gtk_image_new ();
gtk_container_add (GTK_CONTAINER (preview_vbox), preview_image, TRUE, TRUE, 0);
g_object_set (preview_image, "margin", 6, NULL);
update_preview_cb (GTK_FILE_CHOOSER (dialog));
g_signal_connect (dialog, "update-preview",
G_CALLBACK (update_preview_cb), NULL);
#endif
/* Extra widget */
/* Choices */
gtk_file_chooser_add_choice (GTK_FILE_CHOOSER (dialog), "choice1",
"Choose one:",
@@ -690,12 +542,13 @@ main (int argc, char **argv)
/* Shortcuts */
gtk_file_chooser_add_shortcut_folder_uri (GTK_FILE_CHOOSER (dialog),
"file:///usr/share/pixmaps",
NULL);
gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog),
g_get_user_special_dir (G_USER_DIRECTORY_MUSIC),
NULL);
file = g_file_new_for_uri ("file:///usr/share/pixmaps");
gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog), file, NULL);
g_object_unref (file);
file = g_file_new_for_path (g_get_user_special_dir (G_USER_DIRECTORY_MUSIC));
gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (dialog), file, NULL);
g_object_unref (file);
/* Initial filename or folder */

View File

@@ -45,23 +45,31 @@ static void
print_selected_path_clicked_cb (GtkWidget *button,
gpointer user_data)
{
gchar *folder, *filename;
GFile *folder, *filename;
char *folder_uri, *filename_uri;
folder = gtk_file_chooser_get_current_folder (user_data);
filename = gtk_file_chooser_get_filename (user_data);
filename = gtk_file_chooser_get_file (user_data);
folder_uri = g_file_get_uri (folder);
filename_uri = g_file_get_uri (filename);
g_message ("Currently Selected:\n\tFolder: `%s'\n\tFilename: `%s'\nDone.\n",
folder, filename);
g_free (folder);
g_free (filename);
folder_uri, filename_uri);
g_free (folder_uri);
g_free (filename_uri);
g_object_unref (folder);
g_object_unref (filename);
}
static void
add_pwds_parent_as_shortcut_clicked_cb (GtkWidget *button,
gpointer user_data)
{
GFile *path = g_file_new_for_path (gtk_src_dir);
GError *err = NULL;
if (!gtk_file_chooser_add_shortcut_folder (user_data, gtk_src_dir, &err))
if (!gtk_file_chooser_add_shortcut_folder (user_data, path, &err))
{
g_message ("Couldn't add `%s' as shortcut folder: %s", gtk_src_dir,
err->message);
@@ -71,15 +79,18 @@ add_pwds_parent_as_shortcut_clicked_cb (GtkWidget *button,
{
g_message ("Added `%s' as shortcut folder.", gtk_src_dir);
}
g_object_unref (path);
}
static void
del_pwds_parent_as_shortcut_clicked_cb (GtkWidget *button,
gpointer user_data)
{
GFile *path = g_file_new_for_path (gtk_src_dir);
GError *err = NULL;
if (!gtk_file_chooser_remove_shortcut_folder (user_data, gtk_src_dir, &err))
if (!gtk_file_chooser_remove_shortcut_folder (user_data, path, &err))
{
g_message ("Couldn't remove `%s' as shortcut folder: %s", gtk_src_dir,
err->message);
@@ -89,6 +100,8 @@ del_pwds_parent_as_shortcut_clicked_cb (GtkWidget *button,
{
g_message ("Removed `%s' as shortcut folder.", gtk_src_dir);
}
g_object_unref (path);
}
static void
@@ -155,55 +168,59 @@ static void
chooser_current_folder_changed_cb (GtkFileChooser *chooser,
gpointer user_data)
{
gchar *folder, *filename;
GFile *folder, *filename;
char *folder_uri, *filename_uri;
folder = gtk_file_chooser_get_current_folder_uri (chooser);
filename = gtk_file_chooser_get_uri (chooser);
folder = gtk_file_chooser_get_current_folder (chooser);
filename = gtk_file_chooser_get_file (chooser);
folder_uri = g_file_get_uri (folder);
filename_uri = g_file_get_uri (filename);
g_message ("%s::current-folder-changed\n\tFolder: `%s'\n\tFilename: `%s'\nDone.\n",
G_OBJECT_TYPE_NAME (chooser), folder, filename);
g_free (folder);
g_free (filename);
G_OBJECT_TYPE_NAME (chooser), folder_uri, filename_uri);
g_free (folder_uri);
g_free (filename_uri);
g_object_unref (folder);
g_object_unref (filename);
}
static void
chooser_selection_changed_cb (GtkFileChooser *chooser,
gpointer user_data)
{
gchar *filename;
GFile *filename;
char *uri;
filename = gtk_file_chooser_get_uri (chooser);
filename = gtk_file_chooser_get_file (chooser);
uri = g_file_get_uri (filename);
g_message ("%s::selection-changed\n\tSelection:`%s'\nDone.\n",
G_OBJECT_TYPE_NAME (chooser), filename);
g_free (filename);
G_OBJECT_TYPE_NAME (chooser), uri);
g_free (uri);
g_object_unref (filename);
}
static void
chooser_file_activated_cb (GtkFileChooser *chooser,
gpointer user_data)
{
gchar *folder, *filename;
GFile *folder, *filename;
char *folder_uri, *filename_uri;
folder = gtk_file_chooser_get_current_folder_uri (chooser);
filename = gtk_file_chooser_get_uri (chooser);
folder = gtk_file_chooser_get_current_folder (chooser);
filename = gtk_file_chooser_get_file (chooser);
folder_uri = g_file_get_uri (folder);
filename_uri = g_file_get_uri (filename);
g_message ("%s::file-activated\n\tFolder: `%s'\n\tFilename: `%s'\nDone.\n",
G_OBJECT_TYPE_NAME (chooser), folder, filename);
g_free (folder);
g_free (filename);
}
G_OBJECT_TYPE_NAME (chooser), folder_uri, filename_uri);
g_free (folder_uri);
g_free (filename_uri);
static void
chooser_update_preview_cb (GtkFileChooser *chooser,
gpointer user_data)
{
gchar *filename;
filename = gtk_file_chooser_get_preview_uri (chooser);
if (filename != NULL)
{
g_message ("%s::update-preview\n\tPreview Filename: `%s'\nDone.\n",
G_OBJECT_TYPE_NAME (chooser), filename);
g_free (filename);
}
g_object_unref (folder);
g_object_unref (filename);
}
static void
@@ -214,6 +231,7 @@ add_new_filechooser_button (const gchar *mnemonic,
GtkSizeGroup *label_group)
{
GtkWidget *hbox, *label, *chooser, *button;
GFile *path;
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
gtk_container_add (GTK_CONTAINER (group_box), hbox);
@@ -227,14 +245,17 @@ add_new_filechooser_button (const gchar *mnemonic,
" - testfilechooserbutton", NULL),
action);
gtk_widget_set_hexpand (chooser, TRUE);
gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (chooser), gtk_src_dir, NULL);
gtk_file_chooser_remove_shortcut_folder (GTK_FILE_CHOOSER (chooser), gtk_src_dir, NULL);
path = g_file_new_for_path (gtk_src_dir);
gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (chooser), path, NULL);
gtk_file_chooser_remove_shortcut_folder (GTK_FILE_CHOOSER (chooser), path, NULL);
g_object_unref (path);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), chooser);
g_signal_connect (chooser, "current-folder-changed",
G_CALLBACK (chooser_current_folder_changed_cb), NULL);
g_signal_connect (chooser, "selection-changed", G_CALLBACK (chooser_selection_changed_cb), NULL);
g_signal_connect (chooser, "file-activated", G_CALLBACK (chooser_file_activated_cb), NULL);
g_signal_connect (chooser, "update-preview", G_CALLBACK (chooser_update_preview_cb), NULL);
gtk_container_add (GTK_CONTAINER (hbox), chooser);
button = gtk_button_new_with_label ("Tests");

View File

@@ -5709,14 +5709,17 @@ native_response (GtkNativeDialog *self,
char *response;
GtkFileFilter *filter;
uris = gtk_file_chooser_get_uris (GTK_FILE_CHOOSER (self));
uris = gtk_file_chooser_get_files (GTK_FILE_CHOOSER (self));
filter = gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (self));
s = g_string_new ("");
for (l = uris; l != NULL; l = l->next)
{
g_string_prepend (s, l->data);
char *uri = g_file_get_uri (l->data);
g_string_prepend (s, uri);
g_string_prepend (s, "\n");
g_free (uri);
}
g_slist_free_full (uris, g_object_unref);
switch (response_id)
{
@@ -5775,33 +5778,6 @@ native_multi_select_toggle (GtkWidget *checkbutton,
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(checkbutton)));
}
static void
native_overwrite_confirmation_toggle (GtkWidget *checkbutton,
GtkFileChooserNative *native)
{
gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (native),
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(checkbutton)));
}
static void
native_extra_widget_toggle (GtkWidget *checkbutton,
GtkFileChooserNative *native)
{
gboolean extra_widget = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(checkbutton));
if (extra_widget)
{
GtkWidget *extra = gtk_check_button_new_with_label ("Extra toggle");
gtk_widget_show (extra);
gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (native), extra);
}
else
{
gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (native), NULL);
}
}
static void
native_visible_notify_show (GObject *object,
GParamSpec *pspec,
@@ -5826,12 +5802,12 @@ native_visible_notify_hide (GObject *object,
gtk_widget_set_sensitive (hide_button, visible);
}
static char *
static GFile *
get_some_file (void)
{
GFile *dir = g_file_new_for_path (g_get_current_dir ());
GFileEnumerator *e;
char *res = NULL;
GFile *res = NULL;
e = g_file_enumerate_children (dir, "*", 0, NULL, NULL);
if (e)
@@ -5846,8 +5822,7 @@ get_some_file (void)
if (g_file_info_get_file_type (info) == G_FILE_TYPE_REGULAR)
{
GFile *child = g_file_enumerator_get_child (e, info);
res = g_file_get_path (child);
g_object_unref (child);
res = g_steal_pointer (&child);
}
g_object_unref (info);
}
@@ -5877,14 +5852,12 @@ native_action_changed (GtkWidget *combo,
(GtkFileChooserAction) i);
if (i == GTK_FILE_CHOOSER_ACTION_SAVE ||
i == GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER)
if (i == GTK_FILE_CHOOSER_ACTION_SAVE)
{
if (save_as)
{
char *file = get_some_file ();
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (native), file);
g_free (file);
GFile *file = get_some_file ();
gtk_file_chooser_set_file (GTK_FILE_CHOOSER (native), file, NULL);
}
else
gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (native), "newname.txt");
@@ -5962,6 +5935,8 @@ create_native_dialogs (GtkWidget *widget)
if (!window)
{
GFile *path;
window = gtk_window_new ();
gtk_window_set_display (GTK_WINDOW (window),
gtk_widget_get_display (widget));
@@ -5974,9 +5949,9 @@ create_native_dialogs (GtkWidget *widget)
g_signal_connect_swapped (G_OBJECT (window), "destroy", G_CALLBACK (destroy_native), native);
gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (native),
g_get_current_dir (),
NULL);
path = g_file_new_for_path (g_get_current_dir ());
gtk_file_chooser_add_shortcut_folder (GTK_FILE_CHOOSER (native), path, NULL);
g_object_unref (path);
gtk_window_set_title (GTK_WINDOW(window), "Native dialog parent");
@@ -6020,16 +5995,6 @@ create_native_dialogs (GtkWidget *widget)
G_CALLBACK (native_multi_select_toggle), native);
gtk_container_add (GTK_CONTAINER (box), check_button);
check_button = gtk_check_button_new_with_label ("Confirm overwrite");
g_signal_connect (check_button, "toggled",
G_CALLBACK (native_overwrite_confirmation_toggle), native);
gtk_container_add (GTK_CONTAINER (box), check_button);
check_button = gtk_check_button_new_with_label ("Extra widget");
g_signal_connect (check_button, "toggled",
G_CALLBACK (native_extra_widget_toggle), native);
gtk_container_add (GTK_CONTAINER (box), check_button);
show_button = gtk_button_new_with_label ("Show");
hide_button = gtk_button_new_with_label ("Hide");
gtk_widget_set_sensitive (hide_button, FALSE);

View File

@@ -69,7 +69,6 @@ list_ignore_properties (gboolean buglist)
{ "GtkColorSelection", "current-color", (void*) NULL, }, /* not a valid boxed color */
{ "GtkFileChooserButton", "select-multiple", (void*) MATCH_ANY_VALUE }, /* property disabled */
{ "GtkFileChooserButton", "action", (void*) GTK_FILE_CHOOSER_ACTION_SAVE },
{ "GtkFileChooserButton", "action", (void*) GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER },
{ "GtkFileChooserWidget", "select-multiple", (void*) 0x1 }, /* property conflicts */
{ "GtkFileChooserDialog", "select-multiple", (void*) MATCH_ANY_VALUE }, /* property disabled */
{ "GtkTextView", "overwrite", (void*) MATCH_ANY_VALUE }, /* needs text buffer */
@@ -81,9 +80,6 @@ list_ignore_properties (gboolean buglist)
static const IgnoreProperty bug_properties[] = {
{ "GtkComboBox", "active", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers NULL model bug */
{ "GtkCTree", "spacing", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers signedness bug */
{ "GtkFileChooserButton", "local-only", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers NULL path assertion */
{ "GtkFileChooserDialog", "local-only", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers NULL path assertion */
{ "GtkFileChooserWidget", "local-only", (void*) MATCH_ANY_VALUE }, /* FIXME: triggers NULL path assertion */
{ "GtkText", "text-position", (void*) MATCH_ANY_VALUE }, /* FIXME: segfaults, fix property minimum/maximum */
{ NULL, NULL, NULL }
};