rgh...@lyx.org wrote:
Author: rgheck
Date: Wed Mar 25 15:34:42 2009
New Revision: 28900
URL: http://lyx.lyx.org/trac/changeset/28900

Log:
Make LFUN_BUFFER_NEXT and _PREVIOUS skip documents that are open
but not shown.

OK for branch?

Also, Jurgen, can you have a look at r28896 and see what you think? (svn diff -c 28896 will get you a diff, if you don't have it otherwise.)

rh


Modified:
   lyx-devel/trunk/src/frontends/qt4/GuiView.cpp
   lyx-devel/trunk/src/frontends/qt4/GuiView.h

Modified: lyx-devel/trunk/src/frontends/qt4/GuiView.cpp
==============================================================================
--- lyx-devel/trunk/src/frontends/qt4/GuiView.cpp       Wed Mar 25 13:49:52 
2009        (r28899)
+++ lyx-devel/trunk/src/frontends/qt4/GuiView.cpp       Wed Mar 25 15:34:42 
2009        (r28900)
@@ -1928,6 +1928,28 @@
 }
+void GuiView::gotoNextOrPreviousBuffer(NextOrPrevious np)
+{
+       Buffer * const curbuf = buffer();
+       Buffer * nextbuf = curbuf;
+       while (true) {
+               if (np == NEXTBUFFER)
+                       nextbuf = theBufferList().next(nextbuf);
+               else
+                       nextbuf = theBufferList().previous(nextbuf);
+               if (nextbuf == curbuf)
+                       break;
+               if (nextbuf == 0) {
+                       nextbuf = curbuf;
+                       break;
+               }
+               if (workArea(*nextbuf))
+                       break;
+       }
+       setBuffer(nextbuf);
+}
+
+
 bool GuiView::dispatch(FuncRequest const & cmd)
 {
        BufferView * bv = view();
@@ -1946,11 +1968,11 @@
                        break;
case LFUN_BUFFER_NEXT:
-                       setBuffer(theBufferList().next(buffer()));
+                       gotoNextOrPreviousBuffer(NEXTBUFFER);
                        break;
case LFUN_BUFFER_PREVIOUS:
-                       setBuffer(theBufferList().previous(buffer()));
+                       gotoNextOrPreviousBuffer(PREVBUFFER);
                        break;
case LFUN_COMMAND_EXECUTE: {

Modified: lyx-devel/trunk/src/frontends/qt4/GuiView.h
==============================================================================
--- lyx-devel/trunk/src/frontends/qt4/GuiView.h Wed Mar 25 13:49:52 2009        
(r28899)
+++ lyx-devel/trunk/src/frontends/qt4/GuiView.h Wed Mar 25 15:34:42 2009        
(r28900)
@@ -295,6 +295,12 @@
        bool saveBuffer(Buffer & b);
        ///
        bool closeBuffer(Buffer & buf, bool tolastopened = false);
+       enum NextOrPrevious {
+               NEXTBUFFER,
+               PREVBUFFER
+       };
+       ///
+       void gotoNextOrPreviousBuffer(NextOrPrevious np);
///
        Inset * getOpenInset(std::string const & name) const;

Reply via email to