For some reason, adding a LTR/RTL Override unicode character before a
MinionPro string increases the ascent of the line.
This creates vertical offset issues when painting if the ascent used
as reference is the one of the font. Use the QTextLine ascent instead
for better results.
This is a followup to 1bed76e2a.
Fixes (reopened) ticket #11284.
Fixes ticket #10532.
Fixes ticket #10767.
(cherry picked from commit d8498d4785)
We need to do this unconditionally, since there is no (trivial and non-
awkward) way to update it when the bibliography paragraphs are modified.
Fixes: #4899
(cherry picked from commit 35534231d4)
When blinking the caret, it looks like a cool idea to only update the
small rectangle containing the caret. Actually it is an awful idea, since
the paint event will paint some rows, and these rows will not be
properly painted outside of the small rectangle. Unfortunately, the
painter will skip those "painted" rows on next paint events.
This leads to painting errors that depend on the ordering of "real"
and "caret" paint events. This is the reason why they only appeared
with split screens.
Quote of the day: ``The real problem is that programmers have spent far
too much time worrying about efficiency in the wrong places and at the
wrong times; premature optimization is the root of all evil (or at
least most of it) in programming.''
-- Donald Knuth, The Art of Computer Programming.
Fixes bug #11354.
(cherry picked from commit fba9f5b9e8)
Eventually, all overridden virtual methods should be marked properly.
Currently, clang only warns about those in classes that already use
override in at least one place (which was the case dor GuiApplication).
(cherry picked from commit c8f4b68423)
We need to bail out here early since otherwise the cache is prematurely
set to valid even if it is invalid with the bibliography environment.
The following checks (for timestamps of bib files) are only targeted
at bib(la)tex.
The fix is already in master.
We used to need a hack to set the size of the layout combo, but
the code was changed in Qt 4.5 or so. Hence the appearance of this
bug in 2009. We can now just remove this hack, and all seems to
work correctly.
(cherry picked from commit d7f4346a19)
I'm not entirely happy with this way of doing it. It seems messy.
But there is not another clear option right now.
(cherry picked from commit 4f0ccae399)
We need to load the master document before applying the params, since
otherwise the TOC reset (and other things) happen before the master
has been loaded (and set as parent).
(cherry picked from commit ac3693c04f)
When selecting text, in some cases a DocIterator could be forwarded
to a (non-existant) paragraph after the end. The critical part of
this fix is to break the loop at the correct place. The following
are additional improvements:
- increase readability by defining a bool named "in_last_par"
- use cur.selectionEnd().pit() instead of cur.selectionEnd().paragraph().id()
- use it.lastpos() instead of it.paragraph().size()
This commit fixes a regression introduced by 23de5e5e, and reported
at #11204.
Thanks to Jürgen and JMarc.
(cherry picked from commit d12798759a)
In the context menu for a selection, we now only show the options
"Accept Change" and "Reject Change" if there is actually a change in
the selection. Similarly, in the toolbar, the buttons are only
enabled when there is a change in the selection.
This fixes#10338.
(cherry picked from commit 23de5e5e19)
Spaces are now conserved when they surround current cursor. Examples:
abc | def
becomes
abc | def
after DEPM and
abc |
is kept as it is.
Fixes ticket #11412.
(cherry picked from commit dff0c5729e)
Enclose in braces an optional argument of a math macro when it
starts with an incomplete script inset or ends with a delimiter
size-modifier macro.
(cherry picked from commit 2dcb730026)
Make MathData::setBuffer set the buffer of insets that it contains.
Remove corresponding code from InsetMathNest.
update the buffer() property in the following tabular-feature
actions : copy-row, add-row, copy-col, add-col.
(cherry picked from commit 837bcbb043)
The backslash is the escape character used in our parser. Hence,
when used as a path separator on Windows, it has to be itself
escaped or the path enclosed in either double or single quotes.
Windows users are maybe trained to quote paths containing spaces
but not paths with backslashes. So, we automatically escape the
backslashes when they are not already enclosed in quotes.
(cherry picked from commit 4c9df62c6c)
https://marc.info/?l=lyx-devel&m=154458979925296&w=2
This is related to the fix for #9158 and the caching of bibfile
information. On Windows, it is incredibly slow to run kpsewhich,
which we do to check where files actually are, so as to get info
about them (e.g., timestamps). So we have started to cache that
as a map. The map is supposed to be invalidated when various
things happen, but an oversight was causing it to be invalidated
on every cut operation. This is because cutting uses a temporary
Buffer, and the operations on it were affecting the *global* cache
of biblio file info. (It makes sense to have a global cache, since
these files are not document-specific.) Basically, we have to update
the list of bibfiles in that temporary Buffer---but that is one of
the things that invalidated the cache. The solution is only to
invalidate the cache if the list of bibfiles has actually changed
(a sensible idea anyway). The only time that will happen in the
temporary Buffer is when the copied information contains a BibTeX
inset. That should be fairly rare.
The boost signal was sent synchronously, and so made the Qt signal to be posted
in FileMonitor::changed after the boost signal returned, so after the sender was
possibly destroyed.
The solution is to make the boost signal asynchronous using the Qt event loop.
Thanks to Scott Kostyshak for the report and MWE.
(cherry picked from commit 131f4b92ba)
With Qt 5.11 at least, RtL text will be drawn RtL even when the
(undocumented) flag Qt::TextForceLeftToRight is applied to the
QTextLayout object. This creates selection issues for Hebrew text
marked as English.
The solution is to do the same as in breakAt_helper, that is prepend
the string with a direction override unicode character.
Doing this requires to introduce a TEXTLAYOUT_OFFSET constant that has
to be used wisely to account for this extra character.
Fixes bug #11284.
(cherry picked from commit 1bed76e2a1)
As of LaTeX2e 2018, characters are made active earlier, which results
in new expansion problems.
Following a suggestion of Markus Kohm (pc) and the TL mailing list [1],
we embrace non-ASCII input paths in \detokenize. This relies on e-tex,
but I think we can assume this is nowadays available everywhere.
[1] http://tug.org/pipermail/tex-live/2018-May/041691.htmlFixes: #11146
(cherry picked from commit 8bd65041f2)
When deciding how to strike out deleted math in change-tracking
mode, differentiate only on begin-of-line or not, and not on
after-paragraph-break or not.
The assumption that a new paragraph is always started after a
float seems to be not true and was causing this bug.
(cherry picked from commit bd21aa99d2)
This is a fixup to 4ecbff00. When a file is loaded and the cursor is
set, it is required to first compute metrics to be able to scroll the
screen correctly.
Fixes bug #11377.
(cherry picked from commit 2dc84b69d5)
When using QTextDocument to check the natutal size of a text, one has
to remove the text margin, which is not useful here.
Fixes bug #11353.
(cherry picked from commit 7db99672e6)
Instead of "Save" (permanently) and "Apply" (temporarily), OK and Apply
now always save permanently, unless the new checkbox "Apply to current
session only" is checked.
Addresses: #10016
(cherry picked from commit c7bdb3b342)
If we were not ready to paint the screen, this does not mean that we
should give up on repainting, just potpone it.
I thought that it was bad to call update() in the paint event, but I
cannot find reference to this anymore and everything seems to work as
intended.
Fixes part of bug #11323.
(cherry picked from commit 38f09c177b)
(cherry picked from commit 2617a4dd50)
When a raster image with an advertised pixel density different
from 72 dpi is included in a latex file, the output image dimensions
are scaled by the ratio 72/pixel_density. Hence, if a clipping
bounding box is specified, it has to be scaled by the same ratio,
otherwise the images will be clipped differently on screen and output.
Here we use the extractbb command (present in any TeX distribution)
to ask about the output dimensions of the image as dictated by the
pixel density and compute the scaling ratio by the knowledge of the
actual dimensions. If, for whatever reason, extractbb is not found,
everything goes as before, because the clipping bounding box will
simply not be corrected.
(cherry picked from commit 380f34a114)
On Windows, start viewers in detached processes in order to avoid
a crash of the QProcess destructor when their thread terminates.
The opening of a console window is avoided by redirecting to the
null device all standard I/O channels.
If an RTL language is set via environment in polyglossia, only a nested
\\text<lang> command will reset the direction for LTR languages
Fixes rest of # 10111.
(cherry picked from commit 2d4ac90fd2)
This avoids failures when running install_name_tool on Mac when creating relocatable binaries using the bundled private frameworks.
(cherry picked from commit d9c0807227)
This can happen when the inset that contains the cursor is outside of
the screen.
THis is only a workaround. The real solution would be a
processUpdateFlags(FitCursor) call, but the code is not ready for that
yet.
Fixes bug #11296.
(cherry picked from commit 17576fb83b)
We do not know what to do with horizontal scrolling events, so we ignore them.
Note that the code has to be different between Qt4 and Qt5.
Fixes bug #11257.
(cherry picked from commit 2cfbc5ecf6)
1/ Handle space in color name in set-color (with quoting)
2/ read properly branch inset which name has a space
Fixes bug #11108.
(cherry picked from commit 819cf53c22)
Now any sequence of spaces around old cursor will be removed, even at
start or end of paragraph. Sequences of more than 2 characters are
also taken into account.
The version of DEPM which acts on a sequence of paragraphs is also
rewritten to match the local one.
(cherry picked from commit 20976e81fb)
(cherry picked from commit c54fe6c584)
The part of code that removed space at start of paragraph have been
there forever, but its intent is unclear. For example, cutting text at
the end of a paragraph will lead to remove space at the start of this
same paragraph.
The removal of this functionality is offset by a rewrite of DEPM that
makes it more thorough.
Fixes bug #10503.
(cherry picked from commit e4dba53232)
Also fix a glitch in non-refstyle import (getOpt() returns the option
with delimiter, so do not add them in ERT once more)
Candidate for stable
(cherry picked from commit faf40fb408)
1. Do not attempt to mix diverging btUnits (e.g., chapters and sections).
2. use parse_text to properly parse the contents.
(cherry picked from commit 68d48b0015)
Make sure that the blue language underline is not below the bottom of
the row. Otherwise, it can disappear when the next row is painted.
(cherry picked from commit 8e9e050670)
This gives a better idea of the TeX output, even though the thicknesses are
not correct. Like in LaTeX, this happens only for full top/bottom rules.
(cherry picked from commit 8651cd89f6)
(cherry picked from commit 84328c8538)
QKeySequence returns special characters for keys on the mac rather than
textual key names (as on other OSes).
Since these symbols are not included in many fonts, we re-translate them
to textual names
Fixes: #10641
(cherry picked from commit 5f45b3ed9c)
The goal of this patch is to make "self-insert <string>" act as a
sequence of individual self-insert calls. Once it is done, the
insertion of the commit string in GuiWorkArea can use that, which
fixes the issues described in bug 11183.
1/ in InsetMathNest, SELF_INSERT is rewritten to be a proper loop of
interpretChar, instead of inserting the string as characters. This
solves the issue of interpreting ^ properly.
2/ the text version does not need to be changed (the loop is rewritten
using a range, though).
3/ Then {{{GuiWorkArea::inputMethodEvent}}} is changed to invoke
directly self-insert. This removes the update issues.
Fixes bug 11183.
(cherry picked from commit ad5548cfe3)
A new UNDECIDED state is used if multiple cells with differing border
settings are selected.
This prevents additional borders to be set without being asked.
Fixes: #10010
(cherry picked from commit 99aefa5fd2)
Rather than checking for hardcoded title commands such as \maketitle,
use the titlename and titletype as defined in the layout.
This now also includes title environments.
Fixes part of #6461
(cherry picked from commit 429edc0a59)
Also, use EuropeanNumberSeparator information rather than relying on an
own (incomplete) list of number separators.
Fixes: #4057
(cherry picked from commit 611df441b6)
Minted does not have a language option but it is possible to enter
this option in the LyX interface for compatibility with the listings
package, and also for letting to enter a language not present in the
gui. So, this option is only used for properly specifying a language
in a listing, unless it is entered in the document settings dialog.
This case was not foreseen and thus the option was being passed to
the package as is, causing havoc. With this commit the option is
still available but is used to set a default language for a new
listing in place of the default "tex" language used so far.
(cherry picked from commit 16ca5290c0)
The problem with the previous attempt was that, every time through
updateBuffer, we looked up the file location using kpsewhich, which
took too long on Windows. The new solution is to cache that info, and
to look it up only when we need it.
Previously, this info would have been re-read whenever we parsed the
bibfiles. So we re-read it now whenever the bibinfo cache is invalid,
which is less often, but should be good enough. We can add more such
re-reads if need be.
(cherry picked from commit 6014492699)
These are not really right. Things are hardcoded that probably should
not be. These are marked (hopefully) with "# RKH" comments. Possibly
what's needed is another flag? Anyway, help welcome.
On some recent Windows versions, GetLastError() may also return
NO_ERROR instead of ERROR_IO_PENDING during an overlapped write
operation to a pipe. This was confusing the state machine in
Server.cpp so that replies to commands were scheduled but were
never actually output.
(cherry picked from commit cf5f2661dc)
Qt 5.2 introduces the possibility to place a checkbox on a QMessageBox,
so we need no longer to use our own crude dialog.
(cherry picked from commit 0148ef7e6c)
Apparently, a new paragraph is started after a float even if
no blank line is actually present. So, account for this fact.
(cherry picked from commit f6922b8c88)
This is detected when an undo group is open and contains at east one
element. This means indeed that changes are in progress. Note that the
group is in general opened in GuiApplication::dispatch. The code there
is changed to ensure that the group is closed before updating the
screen.
This patch is experimental. It is expected to be replaced in master by
a more complete solution. It could in the meantime be backported to 2.3.x.
Fixes bug #11159.
(cherry picked from commit c7496a11b2)
(cherry picked from commit 4d0c43f9aa)
The problem is that popping dialogs during reload can cause paint
events for which we are not ready. If this does not work, then we
can introduce a new flag, besides 'busy', for that case. But busy
does not seem to be used very widely, so hopefully this works.
Note that when paintEvent is triggered on macOS, the least we can do
is to copy our backing store to the screen.
(cherry picked from commit 19e6977b5b)
(cherry picked from commit d03deeca0c)
Completion uses a complicated async scheme based on timers to update
itself. This is probably not necessary anymore and is fragile to
event order changes.
This is what happens with the new painting scheme. Therefore the
asyncHideXXX() methods have to be made more robust and detect whether
completion state has changed by the time they are triggered.
(cherry picked from commit f1ea7fee5c)
When an image has to be loaded a second time and the cache
is not used or the image is not in the cache, its preview is
going to be regenerated again. Hence, if the same image
appears more than once on screen, avoid requesting simultaneous
generation of the same preview.
See also this thread:
https://www.mail-archive.com/lyx-devel@lists.lyx.org/msg205057.html
The code in 90cfe4ec3 only handled the cells which metrics are
computed directly, and missed those who were linearized inside a MathRow.
To fix this, we use the fact that all the positions in a math row have
the same height and make MathRow::metrics return a boolean indicating
whether it contains a caret for a given bufferview.
Fixes bug #11153.
(cherry picked from commit a3868e40a4)
It is better to handle SinglePar before FitCursor, since the later
requires correct metrics at cursor position.
Fixes bug #11139 and probably #11125.
(cherry picked from commit 7f83d26934)
Compute a height from current font and current cell vertical
dimensions in MathData::metrics(), because this is where current font
is known.
Introduce BufferView::setCaretAscentDescent to remember this value.
This mechanism is not used for text because Cursor::current_font is
restored by undo, and the caret height would not be changed then. But
in principle it is doable.
(cherry picked from commit 90cfe4ec3b)
When computing a cell metrics, it is now possible to specify whether it
is tight (at least as tall as 'x') or not (as tall as the max height of
the font).
Use this to make sure that grid insets have large enough cells. It
will probably appear that other cells needn't be tight. Currently, the
only cell which is known to be tight is the nucleus of the root inset.
Others should be examined one by one. It might be that the default of
MathData::metrics tight parameter should be `false'.
Fixes bug #11050.
(cherry picked from commit 7bcb78a778)
The value used here is the x height. It would be nice to see what the
TeXbook really says.
This makes a big difference with \tilde{.}, for example.
(cherry picked from commit 6df8c42e59)
It surprises me a bit that the code is different in this case
from the case when EXPORT_in_THREAD is not set. I should check
to see if there's a problem in the other case, too.
(cherry picked from commit 0fc50a2637)
This commit fixes an issue where the menu option "Insert Separated
Frame Below" would show up twice, with one instance disabled. This
occurred when there was a "Standard" environment nested in a
"Frame". With this commit, the duplicate instance is removed.
(cherry picked from commit 4f7a5f8c3e)
The new code is much simpler: what it does is, after redrawing has
been done, to mark the cursor row as changed, so that it will be
repainted on next paint event.
This avoids some crashes at the price of possibly repainting the row
when it was not necessary.
(cherry picked from commit 2f1eb35b86)
When the cursor is inside a subscript that may become empty, metrics
issues can happen. This patch fixes the issue, although it is not
clear to see what the problem is.
Still, requesting a metrics update also in the case where the macro
mode is canceled makes sense.
Fixes bug #11125.
(cherry picked from commit 68ec34e603)
The idea here is to force commands to be run syncrhonously when
they are launched via "command-sequence" or "repeat". We do this
by using a new flag in FuncRequest.
(cherry picked from commit 2477493cf5)
For some reason, special code was added for LFUN_INDEX_INSERT
when it was not actually needed. So just delete it.
(cherry picked from commit 83356ab9fe)
Spaces are, amazingly, allowed at the end of bibliography keys. So we
introduce a new parameter allowing getVectorFromString not to trim
whitespace, and then use it.
For some reason, this seems not actually to have been backported
to 2.3.x.
Along the lines suggested by JMarc, we now collect the list of bibfiles
in use in the updateBuffer routines. This actually does simplify the code
quite a bit. See the discussion there for reasons to go this way.
(cherry picked from commit 8b9d1b8601)
If a master document is compiled and has errors, and then a child is
compiled without error, the errors from the master compilation were
shown.
The setup of the relevant code is the following:
processingThreadFinished() calls errors(). errors() makes the
assumption that if it is called, there must have been an error
somewhere.
The logic of the setup is the following:
processingThreadFinished() knows whether there was an error on
the most recent preview/export, although it doesn't know whether
the error is from master or child (i.e. does not know whether the
user was compiling the child, or whether master-buffer-view was
called). Inside error(), if there is no error in the child, it is
assumed the error is from master.
For the above logic to work, errors() should only be called if there
was an error.
This commit fixes#11106 and preserves the fix to #7330.
(cherry picked from commit 8d2b121ef5)
This change is made in response to Ticket 10992.
The change made is consistent with those captured in Ticket 9966.
(cherry picked from commit 869e2fe9b9)
This is mandatory for some features (such as bookmarks,pdfusetitle)
to work, and only a handful of drivers can be auto-detected by hyperref.
Fixes: #6418
(cherry picked from commit 33bfbf89c4)
Things like
pdfpagemode=UseOutlines%None,UseOutlines,UseThumbs,FullScreen
was not imported correctly (the comment was not stripped)
Fixes the rest of #5737
(cherry picked from commit 820ec38da7)
Add a new LyXRC variable use_native_filedialog (true by default) that
allows to select the kind of FileDialog we want at runtime.
(cherry picked from commit af795b80d8)
* Describe the viewport/bb situation more accurate
* Use generic term "coordinates", since bb and viewport are flavor-specific
* Add some tooltips
* Increase the width of the options widget.
(cherry picked from commit c462fadff5)
As of enchant 2.x, it is required to create a Broker instance instead
of relying on a static one provided by the library.
Add autoconf and cmake (courtesy of Kornel) tests that check whether
one can indeed instantiate a Broker object, and act on the result in a
new broker() helper function.
Fixes bug #10986.
(cherry picked from commit 63a4e82874)
- the column width must be as wide as the column header text
- also center the radiobuttons in the table
- also use alternating colors for the table rows
(cherry picked from commit a69f1a9e16)
Some classes provide a \bibliographystyle, so we must not output any
\bibliographystyle if none is set in the TeX file.
Fixes: #10673
(cherry picked from commit ed331bedd6)
Add a `cancel' boolean to macroModeClose() that just removes all trace
of what has been entered instead of finalizing it.
When entering a macro in mathed, let LFUN_ESCAPE invoke
macroModeClose(true). The new semantics of LFUN_ESCAPE in mathed is
thus to abort the input of a macro name.
Fixes bug #9251.
(cherry picked from commit 9296344b9a)
As of v. 1.7.7, chktex has four exit values. Only consider the program
failed with EXIT_FAILURE (1). This is backwards compatible to chktex
up to v. 1.7.5 and later patched versions included in TeXLive, where
there was the distinction EXIT_FAILURE (program failed) and EXIT_SUCCESS
(program successfully run, with or without something to report).
Note that ChkTeX v. 1.7.5 and 1.7.6 vanilla (as included in MikTeX) also
returned EXITE_FAILURE if ChkTeX found something to report.
We do not, and never did, support this case.
Fixes: #9989 (after ChkTeX 1.7.7. is released).
(cherry picked from commit 0d806799aa)
Since CheckTeX itself processes the tex file, a synchronous run with
a TeX process can lead to all sorts of conflicts, including crashes.
Fixes: #7434.
(cherry picked from commit 71fea63326)
I am rather irritated we didn't do this already, since synchronous runs
with BUFFER_VIEW or BUFFER_UPDATE leads to all sorts of problems,
including crashes.
Fixes the crash in #8338 (but not the bug itself).
(cherry picked from commit 1437ae3f9c)
This is needed for cases where the temp file has to be manually removed
at some point (e.g., if temp files are used as conversion target, and
the initial file only serves as a placeholder), since QTemporaryFile
objects cannot be manually removed at least on Windows (they are always
kept open internally even after close()). See
http://lists.qt-project.org/pipermail/interest/2013-August/008352.html
In order to avoid race conditions due to duplicate names (the issue why
the old method was removed), we record all used temp file names.
Fixes: #9139
(cherry picked from commit 9e2928be68)