from_utf8(buffer_->fileName())));
// if inzip_name is an absolute path, use filename only to avoid
// leaking of filesystem information in inzip_name
- if (absolutePath(inzip_name) || prefixIs(inzip_name, ".."))
- inzip_name = onlyFilename(inzip_name);
+ // The second case covers cases '../path/file' and '.'
+ if (absolutePath(inzip_name) || prefixIs(inzip_name, "."))
+ inzip_name = onlyFilename(abs_filename);
// if this name has been used...
// use _1_name, _2_name etc
string tmp = inzip_name;
namespace frontend {
ControlEmbeddedFiles::ControlEmbeddedFiles(Dialog & parent)
- : Dialog::Controller(parent), embedded_files(NULL)
+ : Dialog::Controller(parent)
{}
+EmbeddedFiles & ControlEmbeddedFiles::embeddedFiles()
+{
+ return kernel().buffer().embeddedFiles();
+}
+
+
bool ControlEmbeddedFiles::initialiseParams(string const &)
{
return true;
{
// copy buffer embeddedFiles to a local copy
kernel().buffer().embeddedFiles().update();
- embedded_files = &kernel().buffer().embeddedFiles();
+ kernel().buffer().embeddingChanged();
}
///
virtual ~ControlEmbeddedFiles() {}
///
- EmbeddedFiles const & embeddedFiles() const { return *embedded_files; }
- EmbeddedFiles & embeddedFiles() { return *embedded_files; }
+ EmbeddedFiles & embeddedFiles();
///
virtual bool initialiseParams(std::string const &);
/// obtain embedded files from buffer
bool extract(EmbeddedFile const & item);
protected:
- // directly handle buffer embedded files
- EmbeddedFiles * embedded_files;
//
std::string message_;
};
: form_(form)
{
setupUi(this);
-
- form_->updateEmbeddedFiles();
-
- EmbeddedFiles const & files = form_->embeddedFiles();
- enableCB->setChecked(files.enabled());
- EmbeddedFiles::EmbeddedFileList::const_iterator it = files.begin();
- EmbeddedFiles::EmbeddedFileList::const_iterator it_end = files.end();
- for (; it != it_end; ++it) {
- QListWidgetItem * item = new QListWidgetItem(toqstr(it->inzipName()));
- if (!it->valid())
- item->setTextColor(INVALID_COLOR);
- else if(it->status() == EmbeddedFile::AUTO)
- item->setTextColor(AUTO_COLOR);
- else if(it->status() == EmbeddedFile::EMBEDDED)
- item->setTextColor(EMBEDDED_COLOR);
- else
- item->setTextColor(EXTERNAL_COLOR);
- filesLW->addItem(item);
- }
- filesLW->setCurrentRow(0);
//
update();
}
void GuiEmbeddedFilesDialog::update()
{
+ filesLW->clear();
+
+ //
EmbeddedFiles const & files = form_->embeddedFiles();
-
+ EmbeddedFiles::EmbeddedFileList::const_iterator it = files.begin();
+ EmbeddedFiles::EmbeddedFileList::const_iterator it_end = files.end();
+ for (; it != it_end; ++it) {
+ QListWidgetItem * item = new QListWidgetItem(toqstr(it->inzipName()));
+ if (!it->valid())
+ item->setTextColor(INVALID_COLOR);
+ else if(it->status() == EmbeddedFile::AUTO)
+ item->setTextColor(AUTO_COLOR);
+ else if(it->status() == EmbeddedFile::EMBEDDED)
+ item->setTextColor(EMBEDDED_COLOR);
+ else
+ item->setTextColor(EXTERNAL_COLOR);
+ filesLW->addItem(item);
+ }
+ //
bool enabled = files.enabled();
enableCB->setChecked(enabled);
statusGB->setEnabled(enabled);
- filesLW->setEnabled(enabled);
fullpathLE->setEnabled(enabled);
}
// embedded files. Otherwise, embedded files will be lost!!!
//
form_->embeddedFiles().enable(enable);
- update();
// immediately post the change to buffer (and bufferView)
if (enable)
form_->setMessage("Enable file embedding");