It turns out that it did not take off since introduced in 2011. It is better to remove it and the associated boost headers (extract.sh was run against boost 1.60 to do the update).
Since we will move away from several boost classes when transitioning to C++11, it is good to start by removing lesser used ones.
It is easier to use instead getVectorFromString for the use we have of this tokenizer. The two places are environment.cpp (path stuff) and qt_helpers (file fileters). The new code is much shorter.
This allow to remove boost/tokenizer.hpp and friends from our boost tree.
Those two functions used two different hackish and buggy
implementation to know when the function is disabled. Replace that by
asking the containing inset whether it accepts inserting display math
inset.
The Reproducible Builds effort (https://wiki.debian.org/ReproducibleBuilds) in Debian (at least) means that 'ar' is built in deterministic mode as default: all timestamps are set to 0.
This is not compatible with the use of the 'u' flag, and therefore ARFLAGS has to be changed from 'cru' to 'cr'.
This gets rid of the harmless but annoying warning
ar: `u' modifier ignored since `D' is the default (see `U')
When in a tabular cell, "this" is just a lone InsetText, while cur.inset() is the whole tabular. This makes a big difference, especially when one wants to count cells.
Georg Baum [Sun, 8 May 2016 12:30:09 +0000 (14:30 +0200)]
Describe cross-compilation with MXE
MXE is really a great project: It provides a cross-compilation environment
for compiling windows binaries using mingw from any unix system, and includes
lots of prepackaged libraries. The latter distinguishes it from the mingw
cross-compilers packaged with some linux distros such as debian.
I was even able to run the resulting lyx.exe using wine!
Georg Baum [Sun, 8 May 2016 11:46:35 +0000 (13:46 +0200)]
Fix packaging for mingw crosscompilation
The standard host triplet for mingw tools is is something like
x86_64-w64-mingw32 on debian and something like x86-64-w64-mingw32.shared for
mxe (http://mxe.cc). Detect windows packaging correctly for these build types.
Georg Baum [Sun, 8 May 2016 10:18:07 +0000 (12:18 +0200)]
Do not redefine WINVER
Compiling different parts of the sources with different WINVER may lead to
subtle and hard to detect problems. Better use the same value everywhere.
The existing error message suggests that this was wanted anyway, and it
fixes a compiler warning when cross-compiling for mingw on linux. Our code
does not require a specific value, only a minimum value of 0x5000, which
means the resulting executable will require at least Windows 2000.
Georg Baum [Sun, 8 May 2016 09:53:34 +0000 (11:53 +0200)]
Configure included hunspell with autotools
The included hunspell should not be used on Linux or OS X, but (depending on
local configuration) it might be needed for crosscompiling a mingw target
from Linux. Now the user can choose whether to use the included hunspell or not.
cmake does already support that.
Now the only other dependency you need to cross-compile for mingw on debian
or ubuntu is qt.
Georg Baum [Sun, 8 May 2016 08:51:51 +0000 (10:51 +0200)]
Fix compiler warnings
Only the ones I understand (DWORD is always unsigned). There are more:
../../src/Server.cpp: In member function ‘bool lyx::LyXComm::pipeServer()’:
../../src/Server.cpp:280:10: warning: enumeration value ‘CONNECTING_STATE’ not handled in switch [-Wswitch]
switch (pipe_[i].state) {
^
../../src/Server.cpp:347:8: warning: ‘success’ may be used uninitialized in this function [-Wmaybe-uninitialized]
&& status == pipe_[i].iobuf.length()) {
^
Georg Baum [Sun, 8 May 2016 08:16:12 +0000 (10:16 +0200)]
Properly check for windres
Use the standard way to check for the resource compiler, as e.g.
libtool does it: AC_CHECK_TOOL does already provide some cross compiling
magic, and we do also get an error now at configure time if windres is not
found.
Georg Baum [Sat, 7 May 2016 10:33:47 +0000 (12:33 +0200)]
Ensure unix line ends for configure.ac
On windows, configure.ac needs to have unix line ends if you want to run
autogen.sh (see #10053). It is no poblem to force unix line ends, since
you need to run autogen.sh under mingw or cygwin shell anyway, and if you
neither have mingw nor cygwin, then configure.ac is of no use for you.
Stephan Witt [Sat, 7 May 2016 07:56:03 +0000 (09:56 +0200)]
Remove special code for Qt5 to manage HiDPI. It's not needed anymore and leads to strange icon scaling problems in mixed resolution environment.
For reference see the screen shots in bug tracker ticket #10114.
Guillaume Munch [Thu, 5 May 2016 21:01:19 +0000 (22:01 +0100)]
Show review toolbar when outputting changes
"Output changes" alters the preamble even in the absence of tracked
changes. Therefore, not being able to notice when it is activated can possibly
yield hard-to-debug compilation failures.
Georg Baum [Thu, 5 May 2016 18:13:56 +0000 (20:13 +0200)]
Make windres configurable
The windres program is typically not called windres for cross compilation.
Now you can call configure with the argument
WINDRES=x86_64-w64-mingw32-windres
in order to use the windres program on a standard debian installation.
Georg Baum [Thu, 5 May 2016 17:43:24 +0000 (19:43 +0200)]
Configure included iconv with autotools
The included iconv should not be used on Linux or OS X, but (depending on
local configuration) it might be needed for crosscompiling a mingw target
from Linux. Now the user can choose whether to use the included iconv or not.
cmake does already support that.
eilseq.m4 was taken from the original libiconv 1.14 package.
Georg Baum [Thu, 5 May 2016 11:05:12 +0000 (13:05 +0200)]
Mingw-w64 build fixes for long long
On mingw-w64, long long (64bit wide) is larger than long (32bit wide).
Therefore we need some more specializations for string, docstring,
otextstream and << overloaded ostream functions. The configuration code
is by me, the source code changes by Shankar Giri Venkita Giri (bug 10053).
This is needed for warning-free compilation with mingw-w64, and does not hurt
for other build configurations. Patch by Shankar Giri Venkita Giri (bug 10053).
Georg Baum [Thu, 5 May 2016 10:46:59 +0000 (12:46 +0200)]
Fix packaging for mingw-64
See bug 10053 for details. Without this, the package is only set correctly
for 32bit mingw.
Thanks Enrico for suggesting this fix and Shankar Giri Venkita Giri for
testing it.
Georg Baum [Fri, 29 Apr 2016 06:21:51 +0000 (08:21 +0200)]
Configure included zlib with autotools
The included zlib should not be used on Linux or OS X, but (depending on
local configuration) it might be needed for crosscompiling a mingw target
from Linux. Now the user can choose whether to use the included zlib or not.
cmake does already support that.
zconf.h.in was taken from the original zlib 1.2.8 package. The generation of
zconf.h was made equivalent to the one generated by cmake.
Günter Milde [Wed, 4 May 2016 21:34:37 +0000 (23:34 +0200)]
More fixes for #9897 (wrong inset-icon size in PDF)
Inset-icons are auto-scaled according to their width.
This is problematic, if converted from SVG
with the bounding box set to content (ignoring the page size)
and the content is not square.
OTOH, ignoring page size is done for good reasons - we usually want just
the drawing area when inserting an image into a document.
An invisible square with fixes this problem.
Some icons had spurious invisible elements outside the page -- leading
to too small results in the PDF. These were removed.
Guillaume Munch [Sat, 30 Jan 2016 23:14:36 +0000 (23:14 +0000)]
Automatically show the review toolbar if the document has tracked changes
(#8738)
For efficiency, we add a new flag to the buffer indicating when changes are
present. This flag is updated at each buffer update, and also when explicitly
requested via a dispatch result flag.
Let getPosNearX take horizontal scrolling into account
If we do not do that, it is not possible to position the cursor after
a long inset with the mouse.
To do this, it is necessary to add the pit information to the Row
object. This is a good idea in any case, and will allow to simplify
some code later on.
The timer logic introduced to solve bug #7138 was not entirely reliable; in
particular it resulted in spurious updates (noticeable by the treeview
collapsing just after one opens a branch, in particular).
This commit cleans up the timer logic. I followed the original design decision
of having an immediate update followed by a delayed update. Now the updates are
appropriately compressed and done after a delay of 2s (as can be noticed with
the treeview still collapsing, unfortunately, but after a more predictable
delay...).
4d1ad336 fixed #9754 but caused perf issues by cancelling the gains of having a
timer (introduced after #7138). This introduces in GuiToc::enableView() a
lightweight check of whether the widget should be updated. The logic is inspired
from GuiViewSource::enableView().
When document settings are modified, a command
inset-forall Branch inset-toggle asign
is run to open as needed all branches. At the end of the said loop,
the cursor is reset to where it was. However, the cur_after undo
element member is not set because it already had a value.
To make this work as expected, it is necessary in LFUN_INSET_FORALL to
reset the cursor before ending the undo group and to insert a dummy
recordUndo call.
Guillaume Munch [Fri, 8 Jan 2016 19:06:50 +0000 (19:06 +0000)]
Simplify class structure in TocBackend
Deriving from std::vector to provide helper functions appears a touch
excessive. Use typedef instead and move helper functions to the base class. New
header Toc.h provided to replace forward-declarations.
Rename InsetMathHull::isTable to allowsTabularFeatures
The old name conflicted with the newly introduced Inset::isTable.
Now the meaning is as follows.
* Inset::isTable() is true when the inset is composed of lines and columns
* InsetMathHull::allowsTabularFeatures is true when the current type of hull allows for tabular-like functions.
Fix horizontal scrolling in full-width collapsable insets
While a one paragraph large collapsable inset (containing for example a tabular) could be very wide and trigger horizontal scrolling, the code that makes collapsable insets wide when they contain several paragraphs would actually make them narrower in this case.
Typical example is a wide tabular and a caption in a table float, where horizontal scrolling would not trigger.
Guillaume Munch [Tue, 22 Mar 2016 21:57:17 +0000 (21:57 +0000)]
LyXToolBox: a QToolBox with minimum size management
The purpose of this custom widget is to allow the use of a QToolBox in a limited
area. The stock QToolBox does not provide a minimum size hint that depends on
the size of the pages; it assumes that there is enough room. This subclass sets
the minimal size of the QToolbox. Without this, the size of the QToolbox is only
determined by values in the ui file and therefore causes portability and
localisation issues. Note that the computation of the minimum size hint depends
on the minimum size hints of the page widgets. Therefore page widgets must have
a layout with layoutSizeContraint = SetMinimumSize or similar.
This is done by implementing the clickable method. It is not possible yet to have the usual left and down arrows, because Qt does not implement them as far as I can see.
Factor the code that triggers row/column selection and fix the logic. Now it is possible to select also at the right of the tabular inset.
When several bufferviews exist for the same inset, the data that depends on the view width have to be BufferView-dependent. While this is the case for several mutable members of InsetCollapsable, some were missing.
This commit makes button_dim_ (renamed from button_dim) and openinlined_ bv-dependent.
Get rid of the hitButton function.
Remove the bv-independent geometry() method and implement editable() explicitely instead.
Avoid narrow boxes when using \width as box width unit
When the box has a special width, one should not consider that as a fixed width. Otherwise, due to implementation quirks, the width will be set on screen as 1 inch.
A better solution would be to actually set the width by taking in account the contents width, height ans total height. This is not very difficult, but I do not know whether it would workout well in the work area.
Guillaume Munch [Tue, 22 Mar 2016 21:57:17 +0000 (21:57 +0000)]
LyXToolBox: a QToolBox with minimum size management
The purpose of this custom widget is to allow the use of a QToolBox in a limited
area. The stock QToolBox does not provide a minimum size hint that depends on
the size of the pages; it assumes that there is enough room. This subclass sets
the minimal size of the QToolbox. Without this, the size of the QToolbox is only
determined by values in the ui file and therefore causes portability and
localisation issues. Note that the computation of the minimum size hint depends
on the minimum size hints of the page widgets. Therefore page widgets must have
a layout with layoutSizeContraint = SetMinimumSize or similar.
Guillaume Munch [Mon, 14 Dec 2015 01:54:27 +0000 (01:54 +0000)]
Sanitize InsetMathHull and add a check for mutability in LFUN_MATH_MUTATE
Remove in particular all comparisons < and >= involving HullType.
Add a guard to make sure that mutate() only operates on types it has been
designed for. Then I figured I could use this new knowledge to give feedback
when math-mutate is not implemented via getStatus(). (To test this, insert a
regexp in Advanced Search & Replace and try to change it into a standard
equation via the contextual menu.)
Guillaume Munch [Sun, 13 Dec 2015 03:32:32 +0000 (03:32 +0000)]
Display the correct horizontal alignment in AMS environments
A longstanding problem... (related: #1861)
The columns in AMS math environments have a fixed alignment (colAlign() in
InsetMathGrid.cpp). We set this alignment for display (Georg's
displayColAlign()) in InsetMathHull and InsetMathSplit. This is done according
to tests and documentation for the various environments.
There is also some mechanical code factoring via colAlign().
Finally, I disable setting the horizontal alignment in InsetMathSplit, which has
no impact on the LaTeX output, and has no longer any impact on the screen. (As
for vertical alignment I discovered that it was in fact customisable for
\aligned & friends! I hope that the more faithful interface will let other
users discover that too.)
Guillaume Munch [Tue, 1 Mar 2016 13:39:43 +0000 (13:39 +0000)]
Do not omit the starting space when copying (#9995)
The offending code appears to have been introduced a long time ago. My
understanding is that it is no longer relevant. Notably, it only appears on copy
and not on cut, which tells us that: 1) it should be safe to remove it, 2) we
should remove it for consistency.
Scott Kostyshak [Mon, 23 May 2016 00:39:46 +0000 (20:39 -0400)]
Fix using system theme icons with Qt 5 (#10052)
With Qt 5, our code did not correctly detect when icons were
available and thus tried to use nonexistent icons.
QIcon::hasThemeIcon(theme_icon) returns true when theme_icon is
empty. We now rely on the behavior that QIcon::isNull() returns true
if the icon is empty.
Stephan Witt [Sat, 16 Apr 2016 20:30:33 +0000 (22:30 +0200)]
Handle activateWindow in LFUN_BUFFER_SWITCH like in saveBufferIfNeeded() and doShowDialog() methods.
This is a requirement on Mac to get the current buffer view topmost after buffer switch.