diff options
| author | Marc Jeanmougin <marcjeanmougin@free.fr> | 2018-01-07 12:23:59 +0000 |
|---|---|---|
| committer | Marc Jeanmougin <marcjeanmougin@free.fr> | 2018-01-07 12:23:59 +0000 |
| commit | 62417f1a061918e9cff30dfd90b9e565bd7821b7 (patch) | |
| tree | 65ffa62d885ed270dcf9e43a5032492d6f6962c3 /src/ui/dialog/filedialogimpl-gtkmm.cpp | |
| parent | Fix for bug 1741625. Visio stencil (.vss) don't load in 0.92+devel ('No resul... (diff) | |
| download | inkscape-62417f1a061918e9cff30dfd90b9e565bd7821b7.tar.gz inkscape-62417f1a061918e9cff30dfd90b9e565bd7821b7.zip | |
Improve FileSave dialog
Diffstat (limited to 'src/ui/dialog/filedialogimpl-gtkmm.cpp')
| -rw-r--r-- | src/ui/dialog/filedialogimpl-gtkmm.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/ui/dialog/filedialogimpl-gtkmm.cpp b/src/ui/dialog/filedialogimpl-gtkmm.cpp index 86ad8649d..c8c508ee3 100644 --- a/src/ui/dialog/filedialogimpl-gtkmm.cpp +++ b/src/ui/dialog/filedialogimpl-gtkmm.cpp @@ -948,6 +948,7 @@ FileSaveDialogImplGtk::FileSaveDialogImplGtk(Gtk::Window &parentWindow, const Gl (save_method == Inkscape::Extension::FILE_SAVE_METHOD_SAVE_COPY) ? "/dialogs/save_copy" : "/dialogs/save_as") , save_method(save_method) + , fromCB(false) { FileSaveDialog::myDocTitle = docTitle; @@ -1014,6 +1015,8 @@ FileSaveDialogImplGtk::FileSaveDialogImplGtk(Gtk::Window &parentWindow, const Gl fileNameEntry->signal_activate().connect( sigc::mem_fun(*this, &FileSaveDialogImplGtk::fileNameEntryChangedCallback)); } + signal_selection_changed().connect( + sigc::mem_fun(*this, &FileSaveDialogImplGtk::fileNameChanged)); // Let's do more customization std::vector<Gtk::Expander *> expanders; @@ -1102,10 +1105,27 @@ void FileSaveDialogImplGtk::fileTypeChangedCallback() auto filter = Gtk::FileFilter::create(); filter->add_pattern(type.pattern); set_filter(filter); + + if (fromCB) { + //do not update if called from a name change + fromCB = false; + return; + } updateNameAndExtension(); } +void FileSaveDialogImplGtk::fileNameChanged() { + Glib::ustring name = get_filename(); + Glib::ustring::size_type pos = name.rfind('.'); + if ( pos == Glib::ustring::npos ) return; + Glib::ustring ext = name.substr( pos ).casefold(); + if (extension && Glib::ustring(dynamic_cast<Inkscape::Extension::Output *>(extension)->get_extension()).casefold() == ext ) return; + if (knownExtensions.find(ext) == knownExtensions.end()) return; + fromCB = true; + fileTypeComboBox.set_active_text(_(knownExtensions[ext]->get_filetypename())); +} + void FileSaveDialogImplGtk::addFileType(Glib::ustring name, Glib::ustring pattern) { //#Let user choose @@ -1139,7 +1159,7 @@ void FileSaveDialogImplGtk::createFileTypeMenu() type.name = (_(omod->get_filetypename())); type.pattern = "*"; Glib::ustring extension = omod->get_extension(); - knownExtensions.insert(extension.casefold()); + knownExtensions.insert(std::pair<Glib::ustring, Inkscape::Extension::Output*>(extension.casefold(), omod)); fileDialogExtensionToPattern(type.pattern, extension); type.extension = omod; fileTypeComboBox.append(type.name); |
