Commit Graph

200 Commits

Author SHA1 Message Date
Richard Heck
be4646c8ac Whitespace. 2014-11-12 00:01:45 +00:00
Georg Baum
5deaaa3b13 Fix memory errors found by Alfredo with valgrind
BufferParams::setDocumentClass() deletes the old document class of the buffer
and creates a copy of the new one. Therefore, the stored layout pointers in
the paragraphs (actually only one paragraph exists) are dangling afterwards.
Resetting them before setting the document class helps here.
In the long term we need to get rid of BufferParams::setDocumentClass()
completely, this is very ugly.
2014-11-11 20:57:25 +01:00
Jean-Marc Lasgouttes
f58d9f27a2 Erase correctly math multi-cell selection
What a selection spans several cells in mathed, and a deletion occurs though LFUN_CHAR_DELETE_FORWARD for example, only the case of a proper grid was handled. When no such grid exists, all cells between the first and the last index are cleared now.
2014-10-16 16:16:15 +02:00
Richard Heck
54c2ab2732 Possible fix for the mystery crash, which is bug #9049.
Investigation of bug #9236 showed that crash to be due to a Paragraph's
holding a dangling pointer to an old and deleted Layout after the
DocumentClass was reset. Since the backtraces look almost identical, it
seems likely that we have the same problem here.

Since this crash seems almost always to involve tables, I looked at the
code in switchBetweenClasses() and found that the Paragraphs that belong
to "hidden" table cells are not seen by the initial recursion using a
ParIterator: It skips right over them. This was confirmed by test code
suggested by Enrico, with results reported in Trac.

The present patch attempts to deal with this problem in the second
recursion, over Insets. When we see an InsetTabular, we call a new
routine that recurses through the cells, looking for hidden ones. If it
finds a hidden one, it then resets the Layout for the cell's Paragraphs
(there should be only one, but we do not make any assumptions) to the
PlainLayout that belongs to the new DocumentClass. This is good enough,
since such cells never have content.

There is extensive discussion of the patch here:
  https://www.mail-archive.com/lyx-devel@lists.lyx.org/msg185095.html
Additional testing by Enrico and me confirmed the existence of the
dangling pointer.
2014-08-15 10:44:37 -04:00
Richard Heck
96d75db418 Little bit of cleanup. 2014-08-12 13:13:47 -04:00
Georg Baum
f09a9fe2e6 Remove unsafe method FileName::tempName()
FileName::tempName() created a new temp file name by using qt to create a
temporary file with a unique name, and then deleting that file and returning
the name. This was unsafe, since other processes or even other threads of the
running LyX could create files with the same name between deletion and then
using the temp name.
This is fixed by using the TempFile class instead. As a side effect, a few
cases where the temp files were not deleted after usage were fixed as well.
The only place that is still unsafe is createTmpDir().
2014-06-09 13:05:50 +02:00
Richard Heck
0a6ff99f28 Typos and style. 2014-04-21 11:51:59 -04:00
Richard Heck
fdbe775b9f This is the result of an audit of all static variables, looking
for possible thread conflicts, of the sort Georg resolved at
6a30211f. I have made static variables const where possible,
and marked cases that looked potentially problematic with the
comment:
	// FIXME THREAD
Many of these definitely are vulnerable to concurrent access, such
as the static variables declared at the start of output_latex.cpp.
Suppose, e.g., we were outputting latex and also displaying the
source of a different document.

I'd appreciate it if others could grep for "FIXME THREAD" and see
if some of these are harmless, or what.
2014-04-21 11:51:57 -04:00
Georg Baum
270201ed67 Fix bug #8891 (wrong depth of copied text)
This was an obvious thinko: When pasting a paragraph list the depth of the
pasted paragraphs need to be adjusted, so that no paragraph has a negative
depth afterwards. However, the maximum allowed depth was only adjusted after
the second and following pasted paragraphs. Since the computed value was only
used for the subsequent paragrph this meant that the second paragraph did
still use the same maximum allowed depth as the first one, which came from the
paragraph the text as pasted into. This was wrong e.g. in case the outside
paragraph was a standard paragraph (max_depth = 0), and the first pasted
paragraph was an enumeration (max_depth = 1). Therefore, max_depth needs to
be adjusted also after the first pasted paragaph. Since the adjustment is
done aftre max_depth was used for the current paragraph the condition
mentioned in the comment is still met.
2014-02-22 11:02:50 +01:00
Georg Baum
be468136df Silence unwanted error popup on copying
The new HTML clipboard export could cause error message boxes on copying
data to the clipboard (bug #8866). These are now suppressed, like all other
errors which might occur for preparing the clipboard data.
2013-11-12 20:52:35 +01:00
Georg Baum
14a5d07df6 Fix encoding for copying LaTeX from clipboard
If we call tex2lyx on a temporary file created from the clipboard, the
file is always in utf8 encoding, without any temporary changes, even if it
contains encoding changing LaTeX commands. Therefore, we must tell tex2lyx
to use a fixed utf8 encoding for the whole file, and this is done using the
new latexclipboard format. Previously, tex2lyx thought the encoding was
latin1.
As a side effect, the -e option is now also documented in the man page.
2013-11-11 21:52:14 +01:00
Georg Baum
c0ea37f337 Fix image pasting regression
I introduced a regression in c14b9e67 for pasting images:
If an image is on the clipboard both as PNG and HTML with just an url,
but no plain text, pasting would fail. The reason for this was that
text contents was detected (the HTML code), nd preferred, but actually
pasting it resulted in an empty string, since the HTML import could not
handle the url This error was not checked.
The solution is first to try text paste if both text and image content
is present, and then  try image paste if the text failed.
2013-07-13 22:44:20 +02:00
Vincent van Ravesteijn
d9da8dc2c1 Fix assertion: label copy-paste-as-ref in new par
Because the reference got inserted without specifying a font,
Paragraph::fontSpan fired an assertion because the fontlist_ is empty.
2013-05-19 12:48:31 +02:00
Richard Heck
030326466f Set "dryrun" to true for XHTML copying routine. This suppresses
the production of images, etc, making copying even the entire
User's Guide and almost instantaneous operation.
2013-05-04 08:30:56 -04:00
Richard Heck
b4e2a65d50 The update here needs doing no matter what.
This fixes a bug introduced in db358a4315.
2013-05-02 21:21:24 -04:00
Georg Baum
5c63944ec2 Don't ask for creating branches on copying
As discussed on the list. This gets rid of the unwanted message boxes when
copying the complete Userguide.
2013-05-01 13:51:39 +02:00
Vincent van Ravesteijn
e115b006e6 Make sure MarkAsExporting is deleted before buffer
This fixes a crash when cutting something.
2013-04-28 18:51:21 +02:00
Vincent van Ravesteijn
ea118f2da5 Make staticbuffer static again
Otherwise the number of internal buffers in incremented on each cut
action.
2013-04-28 18:51:20 +02:00
Richard Heck
d79225ae98 Remove all messages to user related to assertions. We'll just use
a basic message which is defined in lassert.cpp now.
2013-04-27 17:52:55 -04:00
Kornel Benko
06d72d6ca0 Use doctring as LBUFFER() etc parameters 2013-04-27 21:38:01 +02:00
Kornel Benko
07ca50d905 Strings as parameters to LASSERT should not be translatable.
But empty strings are even worse.
2013-04-27 21:13:32 +02:00
Richard Heck
1b1f8dd235 Audit all the LASSERT calls, and try to do something sensible at
each failure.

There are several places I was not sure what to do. These are marked
by comments beginning "LASSERT:" so they can be found easily. At the
moment, they are at:

Author.cpp:105: // LASSERT: What should we do here?
Author.cpp:121: // LASSERT: What should we do here?
Buffer.cpp:4525:        // LASSERT: Is it safe to continue here, or should we just return?
Cursor.cpp:345:         // LASSERT: Is it safe to continue here, or should we return?
Cursor.cpp:403:         // LASSERT: Is it safe to continue here, or should we return?
Cursor.cpp:1143:                // LASSERT: There have been several bugs around this code, that seem
CursorSlice.cpp:83:     // LASSERT: This should only ever be called from an InsetMath.
CursorSlice.cpp:92:     // LASSERT: This should only ever be called from an InsetMath.
LayoutFile.cpp:303:                     // LASSERT: Why would this fail?
Text.cpp:995:           // LASSERT: Is it safe to continue here?
2013-04-25 17:27:10 -04:00
Georg Baum
928dc03324 Fic crash for repeated pasting from complex docs
Using a cloned buffer was an idea by Richard, and it works well.
2013-04-21 21:16:41 +02:00
Georg Baum
ed2f6a8599 Use MathML on the clipboard for formulas in HTML
This speeds up the copying, and although not many applications understand
MathML currently (MS word is supposed to understand it), their number should
go up in the future.
2013-04-21 21:16:41 +02:00
Richard Heck
db358a4315 Fix bug found by Scott concerning copying XHTML to clipboard. We
needed to updateMacros() before doing the export, which required a
bit of code massaging.
2013-04-20 21:07:07 -04:00
Georg Baum
c14b9e67bc Implement paste from LaTeX and HTML (bug #3096)
As discussed on the list. No automatic contents detection is done, the user
needs to use the special paste menu instead. I used the new TempFile class
for safe temporary file handling.
The documentation would go into section 2.2 of UserGuide.lyx, but I am not
allowed to edit that document.
2013-04-14 19:45:36 +02:00
Georg Baum
0613a218aa Also put HTML on the clipboard when copying
The HTML export is now mature enough so that it can be used to transfer
formatted text to the clipboard. This enhances interoperability e.g. with
office applications.
2013-04-12 22:12:47 +02:00
Lars Gullik Bjønnes
6b2232a29c src/*.cpp: reformatting to increase consistency 2012-10-28 17:42:07 +01:00
Lars Gullik Bjønnes
62394258da WS cleanup, remove extraeneous spaces 2012-10-27 01:25:38 +02:00
Jean-Marc Lasgouttes
ad7deaabeb Fix bug #7956: Assertion When Trying to Paste Into Table
For some unknown reason, the paste code likes to call Cursor::setSelection(), which is not appropriate here since we are not trying to set a selection at this point.
2012-06-04 17:05:43 +02:00
Richard Heck
ead697d4b6 Deal with memory issue reported some time ago in connection with DocumentClass
objects. The problem that led to the leak is that these objects can be held in
memory long after the Buffer that created them is gone, mostly due to their
use in the CutStack. So they were previously held in a storage facility, the
DocumentClassBundle. Unfortunately, they were now being created too often,
especially by cloning. It's not really a leak, because they're accessible, but
we weren't ever destroying them.

This new approach uses a shared_ptr instead.

Thanks to Vincent for pointing out const_pointer_cast.
2012-05-31 12:34:29 -04:00
Jean-Marc Lasgouttes
a756403301 "Performance" fixes suggested by cppcheck
While cppcheck did not turn out any suspicious error messages, using
the "performance" flag highlighted several nitpicks in three categories
 * do not use it++ for iterators, ++it is better
 * do not use size() to test for emptyness, empty() is here
 * do not use "const T" as a function parameter, "const & T" is better

I doubt that any of these is a real performance problem, but the code is cleaner anyway.
2012-05-28 22:42:44 +02:00
Vincent van Ravesteijn
6cf1847b31 New function BufferList::newInternalBuffer
This solves the problem that newBuffer() already use Buffer::isInternal
but there was no chance to set it yet.
2012-05-12 14:36:13 +02:00
Vincent van Ravesteijn
5279d5a8a5 Properly mark a buffer as internal
Checking the extension of the temporary filename doesn't work anymore
since the naming of temporary files was corrected.
2012-05-06 20:12:17 +02:00
Vincent van Ravesteijn
5e4e4b674c Always require a mask to get a temporary filename
If no mask is supplied or the mask is attached to the end of the filename, we end up with unexpected names like
  <system-temp-dir>\lyx_tmpdir.qHp780.vcr780_<mask>
instead of a temporary file in the lyx temporary directory like
  <system-temp-dir>\lyx_tmpdir.qHp780\<mask>.vcr780.
2012-05-03 16:14:37 +02:00
Jean-Marc Lasgouttes
a117a51226 In replaceSelectionWithString, do not select the new string
This is a patch from Scott Kostyshak. The problem it solves is as follows:

1. enable continuous spell check.
2. type a misspelled word and press space so that it has a wavy red underline.
3. right-click and choose a suggested replacement word.
4. press the backspace button.

Result: nothing happens. If you press the backspace button again, then it works as normal.

The selection code was added for the benefit of the spellchecker, but the code has been rewritten since then.
2012-04-18 12:44:31 +02:00
Vincent van Ravesteijn
e409eedc5b Fix more possible crashes due to asInsetRef()
InsetMathHull has no method asInsetRef() and returns therefore 0.

See also 447e0d03.
2012-03-23 23:01:35 +01:00
Tommaso Cucinotta
824d640227 Adding the capability to paste as simple unformatted text.
Documentation (and perhaps menu items) need still to be a bit
clarified in order to distinguish the various paste options
for the average user.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@40060 a592a061-630c-0410-9148-cb99ea01b6c8
2011-10-29 15:42:01 +00:00
Richard Heck
e1b2466faf Fix bug #3821 by allowing insertStringAs* to reset the cursor.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@39752 a592a061-630c-0410-9148-cb99ea01b6c8
2011-09-24 18:21:41 +00:00
Abdelrazak Younes
6056db3212 Header cleanup.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@39300 a592a061-630c-0410-9148-cb99ea01b6c8
2011-07-14 17:00:35 +00:00
Abdelrazak Younes
f9e9956169 Split InsetLabel::updateCommand() into:
* uniqueLabel(docstring & label) to enforce label unicity
 * updateLabel() to update only the label.
 * InsetLabel::updateLabelAndRefs() to update label & refs
 * InsetLabel::updateReferences() to update the references

This fixes bug #7655


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@39250 a592a061-630c-0410-9148-cb99ea01b6c8
2011-07-06 17:40:51 +00:00
Richard Heck
b436d85783 Fix bug #7517. This restores some code removed when we started adding basic layouts we didn't recognize.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@38981 a592a061-630c-0410-9148-cb99ea01b6c8
2011-06-08 00:12:57 +00:00
Richard Heck
60b1a06ac8 Revert previous commit, which committed too much.
This reverts commit 4369e725b17fede013eb26bfd797e917eaf6f4ea.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@38979 a592a061-630c-0410-9148-cb99ea01b6c8
2011-06-07 23:52:22 +00:00
Richard Heck
cd2e50a275 Fix problem with static error list.
It's amazing we haven't seen problems with this before. The basic problem is that buf.errorList("whatever") would always return the same global, static error list, if it did not already exist. So, to a significant extent, there was only one global error list!

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@38978 a592a061-630c-0410-9148-cb99ea01b6c8
2011-06-07 23:45:33 +00:00
Richard Heck
3f27f951cb This is intended to be a pure renaming of the Inset::name() routine,
preparatory to fixing #7080. Note that mathed uses the same routine, but
for a completely different purpose, so I did not rename it there. I have
seen no difference in behavior after testing, e.g., opening and
exporting Math.lyx, and also re-saving it and looking at the diff.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@38109 a592a061-630c-0410-9148-cb99ea01b6c8
2011-03-28 22:33:04 +00:00
Pavel Sanda
9c9abe843f Push r38098 again in
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@38108 a592a061-630c-0410-9148-cb99ea01b6c8
2011-03-28 22:20:41 +00:00
Pavel Sanda
8a53cc7bea revert r38098
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@38099 a592a061-630c-0410-9148-cb99ea01b6c8
2011-03-28 21:06:46 +00:00
Richard Heck
98e317ef1d Improve conversion error message.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@38098 a592a061-630c-0410-9148-cb99ea01b6c8
2011-03-28 20:25:35 +00:00
Jean-Marc Lasgouttes
370044551c Unify handling of pass thru insets and paragraphs by introducing Paragraph::isPassThru. Many lfuns are now disabled in sweave chunks.
Also, fix #7175 (do not output \noindent in passthru pars)


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@37328 a592a061-630c-0410-9148-cb99ea01b6c8
2011-01-26 11:04:42 +00:00
Vincent van Ravesteijn
6eea764ead Cursor: constify.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@37160 a592a061-630c-0410-9148-cb99ea01b6c8
2011-01-10 09:38:20 +00:00