diff --git a/doc/users/next_whats_new/default_filename_suffix.rst b/doc/users/next_whats_new/default_filename_suffix.rst new file mode 100644 index 000000000000..0f8730b421e0 --- /dev/null +++ b/doc/users/next_whats_new/default_filename_suffix.rst @@ -0,0 +1,13 @@ +Stop adding a suffix to suggest unique file name +------------------------------------------------ + +Previously, when saving a figure to a file using the GUI's +save dialog box, if the default filename (based on the +figure window title) already existed on disk, Matplotlib +would append a suffix (e.g. `Figure_1-1.png`), preventing +the dialog from prompting to overwrite the file. This +behaviour has been removed. Now if the file name exists on +disk, the user is prompted whether or not to overwrite it. +This eliminates guesswork, and allows intentional +overwriting, especially when the figure name has been +manually set using `fig.canvas.set_window_title()`. diff --git a/lib/matplotlib/backend_bases.py b/lib/matplotlib/backend_bases.py index fc92f6dd1869..0000f3416a01 100644 --- a/lib/matplotlib/backend_bases.py +++ b/lib/matplotlib/backend_bases.py @@ -2275,17 +2275,6 @@ def get_default_filename(self): default_basename = default_basename.replace(' ', '_') default_filetype = self.get_default_filetype() default_filename = default_basename + '.' + default_filetype - - save_dir = os.path.expanduser(rcParams['savefig.directory']) - - # ensure non-existing filename in save dir - i = 1 - while os.path.isfile(os.path.join(save_dir, default_filename)): - # attach numerical count to basename - default_filename = ( - '{}-{}.{}'.format(default_basename, i, default_filetype)) - i += 1 - return default_filename def switch_backends(self, FigureCanvasClass): diff --git a/lib/matplotlib/backends/backend_gtk3.py b/lib/matplotlib/backends/backend_gtk3.py index 0bbab45c0a8b..e5dcb4cbb3aa 100644 --- a/lib/matplotlib/backends/backend_gtk3.py +++ b/lib/matplotlib/backends/backend_gtk3.py @@ -592,6 +592,7 @@ def __init__(self, ): super().__init__(title, parent, action, buttons) self.set_default_response(Gtk.ResponseType.OK) + self.set_do_overwrite_confirmation(True) if not path: path = os.getcwd() diff --git a/lib/matplotlib/tests/test_backend_bases.py b/lib/matplotlib/tests/test_backend_bases.py index 0ab7e67a7666..3d0142f8996e 100644 --- a/lib/matplotlib/tests/test_backend_bases.py +++ b/lib/matplotlib/tests/test_backend_bases.py @@ -60,20 +60,3 @@ def test_get_default_filename(): assert filename == 'image.png' finally: shutil.rmtree(test_dir) - - -def test_get_default_filename_already_exists(): - # From #3068: Suggest non-existing default filename - try: - test_dir = tempfile.mkdtemp() - plt.rcParams['savefig.directory'] = test_dir - fig = plt.figure() - canvas = FigureCanvasBase(fig) - - # create 'image.png' in figure's save dir - open(os.path.join(test_dir, 'image.png'), 'w').close() - - filename = canvas.get_default_filename() - assert filename == 'image-1.png' - finally: - shutil.rmtree(test_dir)