Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 13958b7

Browse filesBrowse files
authored
Merge pull request #13538 from meeseeksmachine/auto-backport-of-pr-12748-on-v3.1.x
Backport PR #12748 on branch v3.1.x (Use the builtin GTK3 FileChooser rather than our custom subclass.)
2 parents 79b3091 + 18a7ca2 commit 13958b7
Copy full SHA for 13958b7

File tree

Expand file treeCollapse file tree

4 files changed

+61
-30
lines changed
Filter options
Expand file treeCollapse file tree

4 files changed

+61
-30
lines changed

‎.flake8

Copy file name to clipboardExpand all lines: .flake8
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ per-file-ignores =
3333
lib/matplotlib/backends/_backend_tk.py: E501
3434
lib/matplotlib/backends/backend_agg.py: E302
3535
lib/matplotlib/backends/backend_cairo.py: E203, E221, E402
36-
lib/matplotlib/backends/backend_gtk3.py: E203, E221, E222, E225, E251, E501
36+
lib/matplotlib/backends/backend_gtk3.py: E203, E221, E225, E251, E501
3737
lib/matplotlib/backends/backend_pgf.py: E731
3838
lib/matplotlib/backends/qt_editor/_formlayout.py: E501
3939
lib/matplotlib/font_manager.py: E203, E221, E251, E501

‎doc/api/next_api_changes/2018-08-17-AL-deprecations.rst

Copy file name to clipboardExpand all lines: doc/api/next_api_changes/2018-08-17-AL-deprecations.rst
+3Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ API deprecations
44
The following API elements are deprecated:
55

66
- ``get_py2exe_datafiles``, ``tk_window_focus``,
7+
- ``backend_gtk3.FileChooserDialog``,
8+
``backend_gtk3.NavigationToolbar2GTK3.get_filechooser``,
9+
``backend_gtk3.SaveFigureGTK3.get_filechooser``,
710
- ``backend_ps.PsBackendHelper``, ``backend_ps.ps_backend_helper``,
811
- ``cbook.iterable``,
912
- ``cbook.get_label``, ``cbook.iterable``,

‎lib/matplotlib/backends/backend_gtk3.py

Copy file name to clipboardExpand all lines: lib/matplotlib/backends/backend_gtk3.py
+53-28Lines changed: 53 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import functools
12
import logging
23
import os
4+
from pathlib import Path
35
import sys
46

57
import matplotlib
@@ -521,6 +523,7 @@ def _init_toolbar(self):
521523

522524
self.show_all()
523525

526+
@cbook.deprecated("3.1")
524527
def get_filechooser(self):
525528
fc = FileChooserDialog(
526529
title='Save the figure',
@@ -532,24 +535,54 @@ def get_filechooser(self):
532535
return fc
533536

534537
def save_figure(self, *args):
535-
chooser = self.get_filechooser()
536-
fname, format = chooser.get_filename_from_user()
537-
chooser.destroy()
538-
if fname:
539-
startpath = os.path.expanduser(rcParams['savefig.directory'])
540-
# Save dir for next time, unless empty str (i.e., use cwd).
541-
if startpath != "":
542-
rcParams['savefig.directory'] = os.path.dirname(fname)
543-
try:
544-
self.canvas.figure.savefig(fname, format=format)
545-
except Exception as e:
546-
error_msg_gtk(str(e), parent=self)
538+
dialog = Gtk.FileChooserDialog(
539+
title="Save the figure",
540+
parent=self.canvas.get_toplevel(),
541+
action=Gtk.FileChooserAction.SAVE,
542+
buttons=(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
543+
Gtk.STOCK_SAVE, Gtk.ResponseType.OK),
544+
)
545+
for name, fmts \
546+
in self.canvas.get_supported_filetypes_grouped().items():
547+
ff = Gtk.FileFilter()
548+
ff.set_name(name)
549+
for fmt in fmts:
550+
ff.add_pattern("*." + fmt)
551+
dialog.add_filter(ff)
552+
if self.canvas.get_default_filetype() in fmts:
553+
dialog.set_filter(ff)
554+
555+
@functools.partial(dialog.connect, "notify::filter")
556+
def on_notify_filter(*args):
557+
name = dialog.get_filter().get_name()
558+
fmt = self.canvas.get_supported_filetypes_grouped()[name][0]
559+
dialog.set_current_name(
560+
str(Path(dialog.get_current_name()).with_suffix("." + fmt)))
561+
562+
dialog.set_current_folder(rcParams["savefig.directory"])
563+
dialog.set_current_name(self.canvas.get_default_filename())
564+
dialog.set_do_overwrite_confirmation(True)
565+
566+
response = dialog.run()
567+
fname = dialog.get_filename()
568+
ff = dialog.get_filter() # Doesn't autoadjust to filename :/
569+
fmt = self.canvas.get_supported_filetypes_grouped()[ff.get_name()][0]
570+
dialog.destroy()
571+
if response == Gtk.ResponseType.CANCEL:
572+
return
573+
# Save dir for next time, unless empty str (which means use cwd).
574+
if rcParams['savefig.directory']:
575+
rcParams['savefig.directory'] = os.path.dirname(fname)
576+
try:
577+
self.canvas.figure.savefig(fname, format=fmt)
578+
except Exception as e:
579+
error_msg_gtk(str(e), parent=self)
547580

548581
def configure_subplots(self, button):
549582
toolfig = Figure(figsize=(6, 3))
550583
canvas = self._get_canvas(toolfig)
551584
toolfig.subplots_adjust(top=0.9)
552-
tool = SubplotTool(self.canvas.figure, toolfig)
585+
tool = SubplotTool(self.canvas.figure, toolfig)
553586

554587
w = int(toolfig.bbox.width)
555588
h = int(toolfig.bbox.height)
@@ -582,6 +615,7 @@ def set_history_buttons(self):
582615
self._gtk_ids['Forward'].set_sensitive(can_forward)
583616

584617

618+
@cbook.deprecated("3.1")
585619
class FileChooserDialog(Gtk.FileChooserDialog):
586620
"""GTK+ file selector which remembers the last file/directory
587621
selected and presents the user with a menu of supported image formats
@@ -777,6 +811,7 @@ def set_message(self, s):
777811

778812
class SaveFigureGTK3(backend_tools.SaveFigureBase):
779813

814+
@cbook.deprecated("3.1")
780815
def get_filechooser(self):
781816
fc = FileChooserDialog(
782817
title='Save the figure',
@@ -788,21 +823,11 @@ def get_filechooser(self):
788823
return fc
789824

790825
def trigger(self, *args, **kwargs):
791-
chooser = self.get_filechooser()
792-
fname, format_ = chooser.get_filename_from_user()
793-
chooser.destroy()
794-
if fname:
795-
startpath = os.path.expanduser(rcParams['savefig.directory'])
796-
if startpath == '':
797-
# explicitly missing key or empty str signals to use cwd
798-
rcParams['savefig.directory'] = startpath
799-
else:
800-
# save dir for next time
801-
rcParams['savefig.directory'] = os.path.dirname(fname)
802-
try:
803-
self.figure.canvas.print_figure(fname, format=format_)
804-
except Exception as e:
805-
error_msg_gtk(str(e), parent=self)
826+
827+
class PseudoToolbar:
828+
canvas = self.figure.canvas
829+
830+
return NavigationToolbar2GTK3.save_figure(PseudoToolbar())
806831

807832

808833
class SetCursorGTK3(backend_tools.SetCursorBase):

‎lib/matplotlib/cbook/deprecation.py

Copy file name to clipboardExpand all lines: lib/matplotlib/cbook/deprecation.py
+4-1Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,10 @@ def deprecate(obj, message=message, name=name, alternative=alternative,
191191
old_doc = obj.__doc__
192192

193193
def finalize(wrapper, new_doc):
194-
obj.__doc__ = new_doc
194+
try:
195+
obj.__doc__ = new_doc
196+
except AttributeError: # Can't set on some extension objects.
197+
pass
195198
obj.__init__ = wrapper
196199
return obj
197200

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.