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:
John Sullivan 2000-09-11 21:32:19 +00:00
parent 220038ab44
commit 471b996bc3
4 changed files with 92 additions and 29 deletions

View file

@ -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):

View file

@ -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);
}
}
}

View file

@ -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);

View file

@ -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);
}