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:
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
1553
gtk/gtkfilechooser.c
1553
gtk/gtkfilechooser.c
File diff suppressed because it is too large
Load Diff
@@ -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 user’s 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 user’s 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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 }
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user