mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 19:07:45 +00:00
Only show Accept/Reject Change options if relevant
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.
This commit is contained in:
parent
37c9480656
commit
23de5e5e19
@ -263,10 +263,12 @@ public:
|
||||
/// look up change at given pos
|
||||
Change const & lookupChange(pos_type pos) const;
|
||||
|
||||
/// is there a change within the given range ?
|
||||
/// is there a change within the given range (does not
|
||||
/// check contained paragraphs)
|
||||
bool isChanged(pos_type start, pos_type end) const;
|
||||
/// is there an unchanged char at the given pos ?
|
||||
bool isChanged(pos_type pos) const;
|
||||
|
||||
/// is there an insertion at the given pos ?
|
||||
bool isInserted(pos_type pos) const;
|
||||
/// is there a deletion at the given pos ?
|
||||
|
@ -3185,17 +3185,31 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
|
||||
|
||||
case LFUN_CHANGE_ACCEPT:
|
||||
case LFUN_CHANGE_REJECT:
|
||||
// In principle, these LFUNs should only be enabled if there
|
||||
// is a change at the current position/in the current selection.
|
||||
// However, without proper optimizations, this will inevitably
|
||||
// result in unacceptable performance - just imagine a user who
|
||||
// wants to select the complete content of a long document.
|
||||
if (!cur.selection())
|
||||
enable = cur.paragraph().isChanged(cur.pos());
|
||||
else
|
||||
// TODO: context-sensitive enabling of LFUN_CHANGE_ACCEPT/REJECT
|
||||
// for selections.
|
||||
enable = true;
|
||||
else {
|
||||
// will enable if there is a change in the selection
|
||||
enable = false;
|
||||
|
||||
// cheap improvement for efficiency: using cached
|
||||
// buffer variable, if there is no change in the
|
||||
// document, no need to check further.
|
||||
if (!cur.buffer()->areChangesPresent())
|
||||
break;
|
||||
|
||||
for (DocIterator it = cur.selectionBegin(); it < cur.selectionEnd(); it.forwardPar()) {
|
||||
pos_type const beg = it.pos();
|
||||
pos_type end;
|
||||
if (it.paragraph().id() == cur.selectionEnd().paragraph().id())
|
||||
end = cur.selectionEnd().pos();
|
||||
else
|
||||
end = it.paragraph().size();
|
||||
if (beg != end && it.paragraph().isChanged(beg, end)) {
|
||||
enable = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case LFUN_OUTLINE_UP:
|
||||
|
Loading…
Reference in New Issue
Block a user