summaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/filedialogimpl-gtkmm.cpp
diff options
context:
space:
mode:
authorMarc Jeanmougin <marcjeanmougin@free.fr>2018-01-07 12:23:59 +0000
committerMarc Jeanmougin <marcjeanmougin@free.fr>2018-01-07 12:23:59 +0000
commit62417f1a061918e9cff30dfd90b9e565bd7821b7 (patch)
tree65ffa62d885ed270dcf9e43a5032492d6f6962c3 /src/ui/dialog/filedialogimpl-gtkmm.cpp
parentFix for bug 1741625. Visio stencil (.vss) don't load in 0.92+devel ('No resul... (diff)
downloadinkscape-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.cpp22
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);