mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Introduce jump-back navigation through bookmark 0
http://bugzilla.lyx.org/show_bug.cgi?id=898 http://www.mail-archive.com/lyx-devel@lists.lyx.org/msg147949.html git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@28478 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
d1f83e4942
commit
e59dbac2ed
@ -88,7 +88,7 @@ Menuset
|
||||
#
|
||||
Menu "context-label"
|
||||
Item "Next Cross-Reference|N" "reference-next"
|
||||
Item "Go back to Reference|G" "bookmark-goto 0"
|
||||
Item "Go back|G" "bookmark-goto 0"
|
||||
Separator
|
||||
Item "Copy as Reference|C" "copy-label-as-reference"
|
||||
Separator
|
||||
@ -275,7 +275,7 @@ Menuset
|
||||
Item "Paste" "paste"
|
||||
Submenu "Paste Recent|e" "edit_pasterecent"
|
||||
Separator
|
||||
Item "Jump to Saved Bookmark|B" "bookmark-goto 0"
|
||||
Item "Jump Back to Saved Bookmark|B" "bookmark-goto 0"
|
||||
Separator
|
||||
Item "Move Paragraph Up|o" "paragraph-move-up"
|
||||
Item "Move Paragraph Down|v" "paragraph-move-down"
|
||||
|
@ -218,7 +218,7 @@ struct BufferView::Private
|
||||
Private(BufferView & bv): wh_(0), cursor_(bv),
|
||||
anchor_pit_(0), anchor_ypos_(0),
|
||||
inlineCompletionUniqueChars_(0),
|
||||
last_inset_(0), gui_(0)
|
||||
last_inset_(0), bookmark_edit_position_(0), gui_(0)
|
||||
{}
|
||||
|
||||
///
|
||||
@ -261,6 +261,9 @@ struct BufferView::Private
|
||||
*/
|
||||
Inset * last_inset_;
|
||||
|
||||
// cache for id of the paragraph which was edited the last time
|
||||
int bookmark_edit_position_;
|
||||
|
||||
mutable TextMetricsCache text_metrics_;
|
||||
|
||||
/// Whom to notify.
|
||||
@ -670,6 +673,16 @@ CursorStatus BufferView::cursorStatus(DocIterator const & dit) const
|
||||
}
|
||||
|
||||
|
||||
void BufferView::bookmarkEditPosition()
|
||||
{
|
||||
// Don't eat cpu time for each keystroke
|
||||
if (d->cursor_.paragraph().id() == d->bookmark_edit_position_)
|
||||
return;
|
||||
saveBookmark(0);
|
||||
d->bookmark_edit_position_ = d->cursor_.paragraph().id();
|
||||
}
|
||||
|
||||
|
||||
void BufferView::saveBookmark(unsigned int idx)
|
||||
{
|
||||
// tentatively save bookmark, id and pos will be used to
|
||||
|
@ -289,6 +289,8 @@ public:
|
||||
void insertPlaintextFile(support::FileName const & f, bool asParagraph);
|
||||
///
|
||||
void insertLyXFile(support::FileName const & f);
|
||||
/// save temporary bookmark for jump back navigation
|
||||
void bookmarkEditPosition();
|
||||
|
||||
private:
|
||||
/// noncopyable
|
||||
|
@ -257,15 +257,27 @@ void LyXFunc::gotoBookmark(unsigned int idx, bool openFile, bool switchToBuffer)
|
||||
if (!theBufferList().exists(bm.filename))
|
||||
return;
|
||||
|
||||
// bm can be changed when saving
|
||||
BookmarksSection::Bookmark tmp = bm;
|
||||
|
||||
// Special case idx == 0 used for back-from-back jump navigation
|
||||
if (idx == 0)
|
||||
dispatch(FuncRequest(LFUN_BOOKMARK_SAVE, "0"));
|
||||
|
||||
// if the current buffer is not that one, switch to it.
|
||||
if (lyx_view_->buffer()->fileName() != bm.filename) {
|
||||
if (lyx_view_->buffer()->fileName() != tmp.filename) {
|
||||
if (!switchToBuffer)
|
||||
return;
|
||||
dispatch(FuncRequest(LFUN_BUFFER_SWITCH, file));
|
||||
}
|
||||
|
||||
// moveToPosition try paragraph id first and then paragraph (pit, pos).
|
||||
if (!view()->moveToPosition(bm.bottom_pit, bm.bottom_pos,
|
||||
bm.top_id, bm.top_pos))
|
||||
if (!view()->moveToPosition(tmp.bottom_pit, tmp.bottom_pos,
|
||||
tmp.top_id, tmp.top_pos))
|
||||
return;
|
||||
|
||||
// bm changed
|
||||
if (idx == 0)
|
||||
return;
|
||||
|
||||
// Cursor jump succeeded!
|
||||
|
@ -1385,6 +1385,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
|
||||
|
||||
cur.resetAnchor();
|
||||
moveCursor(cur, false);
|
||||
bv->bookmarkEditPosition();
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user