mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-09-20 08:11:56 +00:00
Fixed bug 2938 (Shouldn't open a zillion Properties windows
without asking first). I generalized this bug to include other multiple-window situations. * src/file-manager/fm-directory-view.h, * src/file-manager/fm-directory-view.c: (get_containing_window): Just moved this function earlier in the file. (fm_directory_view_confirm_multiple_windows): New public function, asks user whether they really want to open some large number of windows. The cutoff point is determined by a constant, currently set to 10. (bonobo_menu_open_in_new_window_callback), (bonobo_menu_open_properties_window_callback), (open_in_new_window_callback), (open_properties_window_callback), (fm_directory_view_activate_files): Confirm before opening lots o' windows. * src/file-manager/fm-search-list-view.c: (reveal_selected_items_callback): Confirm before opening lots o' windows.
This commit is contained in:
parent
220038ab44
commit
471b996bc3
23
ChangeLog
23
ChangeLog
|
@ -1,3 +1,26 @@
|
|||
2000-09-11 John Sullivan <sullivan@eazel.com>
|
||||
|
||||
Fixed bug 2938 (Shouldn't open a zillion Properties windows
|
||||
without asking first). I generalized this bug to include
|
||||
other multiple-window situations.
|
||||
|
||||
* src/file-manager/fm-directory-view.h,
|
||||
* src/file-manager/fm-directory-view.c:
|
||||
(get_containing_window): Just moved this function earlier in
|
||||
the file.
|
||||
(fm_directory_view_confirm_multiple_windows): New public function,
|
||||
asks user whether they really want to open some large number
|
||||
of windows. The cutoff point is determined by a constant,
|
||||
currently set to 10.
|
||||
(bonobo_menu_open_in_new_window_callback),
|
||||
(bonobo_menu_open_properties_window_callback),
|
||||
(open_in_new_window_callback), (open_properties_window_callback),
|
||||
(fm_directory_view_activate_files): Confirm before opening
|
||||
lots o' windows.
|
||||
* src/file-manager/fm-search-list-view.c:
|
||||
(reveal_selected_items_callback): Confirm before opening lots o'
|
||||
windows.
|
||||
|
||||
2000-09-11 Michael Engber <engber@eazel.com>
|
||||
|
||||
* src/nautilus-main.c: (nautilus_main_event_loop_unregister):
|
||||
|
|
|
@ -74,6 +74,7 @@
|
|||
#include "nautilus-trash-monitor.h"
|
||||
|
||||
#define DISPLAY_TIMEOUT_INTERVAL_MSECS 500
|
||||
#define SILENT_WINDOW_OPEN_LIMIT 10
|
||||
|
||||
enum {
|
||||
ADD_FILE,
|
||||
|
@ -369,6 +370,38 @@ viewer_launch_parameters_free (ViewerLaunchParameters *parameters)
|
|||
g_free (parameters);
|
||||
}
|
||||
|
||||
static GtkWindow *
|
||||
get_containing_window (FMDirectoryView *view)
|
||||
{
|
||||
g_assert (FM_IS_DIRECTORY_VIEW (view));
|
||||
|
||||
return GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view)));
|
||||
}
|
||||
|
||||
gboolean
|
||||
fm_directory_view_confirm_multiple_windows (FMDirectoryView *view, int count)
|
||||
{
|
||||
GnomeDialog *dialog;
|
||||
char *prompt;
|
||||
char *title;
|
||||
|
||||
if (count <= SILENT_WINDOW_OPEN_LIMIT) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
prompt = g_strdup_printf (_("This will open %d separate windows. "
|
||||
"Are you sure you want to do this?"), count);
|
||||
title = g_strdup_printf (_("Nautilus: Open %d Windows?"), count);
|
||||
dialog = nautilus_yes_no_dialog (prompt, title,
|
||||
GNOME_STOCK_BUTTON_OK,
|
||||
GNOME_STOCK_BUTTON_CANCEL,
|
||||
get_containing_window (view));
|
||||
g_free (prompt);
|
||||
g_free (title);
|
||||
|
||||
return gnome_dialog_run (dialog) == GNOME_OK;
|
||||
}
|
||||
|
||||
static void
|
||||
bonobo_menu_open_callback (BonoboUIHandler *ui_handler, gpointer callback_data, const char *path)
|
||||
{
|
||||
|
@ -402,19 +435,13 @@ bonobo_menu_open_in_new_window_callback (BonoboUIHandler *ui_handler, gpointer c
|
|||
|
||||
view = FM_DIRECTORY_VIEW (callback_data);
|
||||
selection = fm_directory_view_get_selection (view);
|
||||
g_list_foreach (selection, open_one_in_new_window, view);
|
||||
if (fm_directory_view_confirm_multiple_windows (view, g_list_length (selection))) {
|
||||
g_list_foreach (selection, open_one_in_new_window, view);
|
||||
}
|
||||
|
||||
nautilus_file_list_free (selection);
|
||||
}
|
||||
|
||||
static GtkWindow *
|
||||
get_containing_window (FMDirectoryView *view)
|
||||
{
|
||||
g_assert (FM_IS_DIRECTORY_VIEW (view));
|
||||
|
||||
return GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (view)));
|
||||
}
|
||||
|
||||
static void
|
||||
fm_directory_view_launch_application (GnomeVFSMimeApplication *application,
|
||||
const char *uri,
|
||||
|
@ -697,7 +724,9 @@ bonobo_menu_open_properties_window_callback (BonoboUIHandler *ui_handler, gpoint
|
|||
*/
|
||||
g_assert (selection != NULL);
|
||||
|
||||
g_list_foreach (selection, open_one_properties_window, view);
|
||||
if (fm_directory_view_confirm_multiple_windows (view, g_list_length (selection))) {
|
||||
g_list_foreach (selection, open_one_properties_window, view);
|
||||
}
|
||||
|
||||
nautilus_file_list_free (selection);
|
||||
}
|
||||
|
@ -2243,7 +2272,9 @@ open_in_new_window_callback (GtkMenuItem *item, GList *files)
|
|||
|
||||
directory_view = FM_DIRECTORY_VIEW (gtk_object_get_data (GTK_OBJECT (item), "directory_view"));
|
||||
|
||||
g_list_foreach (files, open_one_in_new_window, directory_view);
|
||||
if (fm_directory_view_confirm_multiple_windows (directory_view, g_list_length (files))) {
|
||||
g_list_foreach (files, open_one_in_new_window, directory_view);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2262,7 +2293,9 @@ open_properties_window_callback (GtkMenuItem *item, GList *files)
|
|||
|
||||
directory_view = FM_DIRECTORY_VIEW (gtk_object_get_data (GTK_OBJECT (item), "directory_view"));
|
||||
|
||||
g_list_foreach (files, open_one_properties_window, directory_view);
|
||||
if (fm_directory_view_confirm_multiple_windows (directory_view, g_list_length (files))) {
|
||||
g_list_foreach (files, open_one_properties_window, directory_view);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -3525,6 +3558,7 @@ fm_directory_view_activate_files (FMDirectoryView *view,
|
|||
GList *files)
|
||||
{
|
||||
GList *node;
|
||||
int file_count;
|
||||
gboolean use_new_window;
|
||||
|
||||
g_return_if_fail (FM_IS_DIRECTORY_VIEW (view));
|
||||
|
@ -3535,13 +3569,16 @@ fm_directory_view_activate_files (FMDirectoryView *view,
|
|||
* one special one to replace the current window's contents; we tried this
|
||||
* but it proved mysterious in practice.
|
||||
*/
|
||||
use_new_window = nautilus_g_list_more_than_one_item (files)
|
||||
file_count = g_list_length (files);
|
||||
use_new_window = file_count > 1
|
||||
|| nautilus_preferences_get_boolean
|
||||
(NAUTILUS_PREFERENCES_WINDOW_ALWAYS_NEW, FALSE);
|
||||
|
||||
for (node = files; node != NULL; node = node->next) {
|
||||
fm_directory_view_activate_file
|
||||
(view, node->data, use_new_window);
|
||||
if (!use_new_window || fm_directory_view_confirm_multiple_windows (view, file_count)) {
|
||||
for (node = files; node != NULL; node = node->next) {
|
||||
fm_directory_view_activate_file
|
||||
(view, node->data, use_new_window);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -313,6 +313,8 @@ void fm_directory_view_begin_loading (FMDirectory
|
|||
*/
|
||||
void fm_directory_view_activate_files (FMDirectoryView *view,
|
||||
GList *files);
|
||||
gboolean fm_directory_view_confirm_multiple_windows (FMDirectoryView *view,
|
||||
int window_count);
|
||||
void fm_directory_view_queue_file_change (FMDirectoryView *view,
|
||||
NautilusFile *file);
|
||||
void fm_directory_view_notify_selection_changed (FMDirectoryView *view);
|
||||
|
|
|
@ -540,20 +540,21 @@ reveal_selected_items_callback (gpointer ignored, gpointer user_data)
|
|||
|
||||
selection = fm_directory_view_get_selection (directory_view);
|
||||
|
||||
for (node = selection; node != NULL; node = node->next) {
|
||||
file = NAUTILUS_FILE (node->data);
|
||||
parent_uri = nautilus_file_get_parent_uri (file);
|
||||
if (parent_uri != NULL) {
|
||||
file_as_list = g_list_prepend (NULL, nautilus_file_get_uri (file));
|
||||
nautilus_view_open_in_new_window_and_select
|
||||
(fm_directory_view_get_nautilus_view (directory_view),
|
||||
parent_uri,
|
||||
file_as_list);
|
||||
nautilus_g_list_free_deep (file_as_list);
|
||||
if (fm_directory_view_confirm_multiple_windows (directory_view, g_list_length (selection))) {
|
||||
for (node = selection; node != NULL; node = node->next) {
|
||||
file = NAUTILUS_FILE (node->data);
|
||||
parent_uri = nautilus_file_get_parent_uri (file);
|
||||
if (parent_uri != NULL) {
|
||||
file_as_list = g_list_prepend (NULL, nautilus_file_get_uri (file));
|
||||
nautilus_view_open_in_new_window_and_select
|
||||
(fm_directory_view_get_nautilus_view (directory_view),
|
||||
parent_uri,
|
||||
file_as_list);
|
||||
nautilus_g_list_free_deep (file_as_list);
|
||||
}
|
||||
g_free (parent_uri);
|
||||
}
|
||||
g_free (parent_uri);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
nautilus_file_list_free (selection);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue