]> git.lyx.org Git - features.git/commitdiff
Fix part of bug #5942:
authorVincent van Ravesteijn <vfr@lyx.org>
Mon, 7 Jun 2010 21:57:37 +0000 (21:57 +0000)
committerVincent van Ravesteijn <vfr@lyx.org>
Mon, 7 Jun 2010 21:57:37 +0000 (21:57 +0000)
- buffer-switch does open tabs even when open in tabs is disabled;
- buffer-switch open the document in a new tab even if it is already opened in another view.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@34618 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/qt4/GuiView.cpp

index c6139666e2df03808fd6cbeb853aaf04c7e65a38..7823cc9e8ce47f90f7e0df30fc5791c58b501a0a 100644 (file)
@@ -2938,18 +2938,40 @@ void GuiView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
 #endif
                        break;
                }
-               case LFUN_BUFFER_SWITCH:
-                       if (FileName::isAbsolute(to_utf8(cmd.argument()))) {
-                               Buffer * buffer = 
-                                       theBufferList().getBuffer(FileName(to_utf8(cmd.argument())));
-                               if (buffer)
+               case LFUN_BUFFER_SWITCH: {
+                       if (!FileName::isAbsolute(to_utf8(cmd.argument())))
+                               break;
+                       Buffer * buffer = 
+                               theBufferList().getBuffer(FileName(to_utf8(cmd.argument())));
+                       if (!buffer) {
+                               dr.setError(true);
+                               dr.setMessage(_("Document not loaded"));
+                               break;
+                       }
+                       if (workArea(*buffer)) {
+                               setBuffer(buffer);
+                               break;
+                       }
+                       QList<int> const ids = guiApp->viewIds();
+                       int i = 0;
+                       for (; i != ids.size(); ++i) {
+                               GuiView & gv = guiApp->view(ids[i]);
+                               if (gv.workArea(*buffer)) {
+                                       gv.activateWindow();
+                                       gv.setBuffer(buffer);
+                                       break;
+                               }
+                       }
+                       if (i == ids.size()) {
+                               if (!lyxrc.open_buffers_in_tabs && documentBufferView() != 0) {
+                                       lyx::dispatch(FuncRequest(LFUN_WINDOW_NEW));
+                                       lyx::dispatch(cmd);
+                               } else {
                                        setBuffer(buffer);
-                               else {
-                                       dr.setError(true);
-                                       dr.setMessage(_("Document not loaded"));
                                }
                        }
                        break;
+               }
 
                case LFUN_BUFFER_NEXT:
                        gotoNextOrPreviousBuffer(NEXTBUFFER);