]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.C
Updates from Bennett and myself.
[lyx.git] / src / BufferView.C
index a9148643b7dabfdb4623d7007f93a903f0f999d8..7ef433cd14b1d5a91c0d30bf9e66f129cc89f7fb 100644 (file)
@@ -197,9 +197,6 @@ void BufferView::setBuffer(Buffer * b)
                }
        }
 
-       // FIXME: in principle, a simple call to updateMetrics(false) should
-       // be enough here. But, for unknown reason, it seems that only the line
-       // of the cursor is updated in the CoordCache.
        if (buffer_)
                updateMetrics(false);    
 
@@ -212,7 +209,7 @@ bool BufferView::loadLyXFile(string const & filename, bool tolastfiles)
 {
        // Get absolute path of file and add ".lyx"
        // to the filename if necessary
-       string s = fileSearch(string(), filename, "lyx");
+       string s = fileSearch(string(), filename, "lyx").absFilename();
 
        bool const found = !s.empty();
 
@@ -282,7 +279,9 @@ bool BufferView::loadLyXFile(string const & filename, bool tolastfiles)
                                if (it.pit() == pit) {
                                        // restored pos may be bigger than it->size
                                        setCursor(makeDocIterator(it, min(pos, it->size())));
-                                       update(Update::FitCursor);
+                                       // No need to update the metrics if fitCursor returns false.
+                                       if (fitCursor())
+                                               updateMetrics(false);
                                        break;
                                }
                }
@@ -376,6 +375,14 @@ std::pair<bool, bool> BufferView::update(Update::flags flags)
                return make_pair(false, false);
        }
 
+       if (flags == Update::FitCursor) {
+               bool const fit_cursor = fitCursor();
+               if (fit_cursor)
+                       updateMetrics(false);
+               // tell the frontend to update the screen.
+               return make_pair(fit_cursor, false);
+       }
+
        bool full_metrics = flags & Update::Force;
        if (flags & Update::MultiParSel)
                full_metrics |= multiParSel();
@@ -646,7 +653,11 @@ FuncStatus BufferView::getStatus(FuncRequest const & cmd)
        case LFUN_CHANGE_NEXT:
        case LFUN_ALL_CHANGES_ACCEPT:
        case LFUN_ALL_CHANGES_REJECT:
-               flag.enabled(buffer_); // FIXME: Change tracking (MG)
+               // TODO: context-sensitive enabling of LFUNs
+               // In principle, these command should only be enabled if there
+               // is a change in the document. However, without proper
+               // optimizations, this will inevitably result in poor performance.
+               flag.enabled(buffer_);
                break;
 
        case LFUN_BUFFER_TOGGLE_COMPRESSION: {
@@ -1376,7 +1387,7 @@ void BufferView::menuInsertLyXFile(string const & filenm)
 
        // Get absolute path of file and add ".lyx"
        // to the filename if necessary
-       filename = fileSearch(string(), filename, "lyx");
+       filename = fileSearch(string(), filename, "lyx").absFilename();
 
        docstring const disp_fn = makeDisplayPath(filename);
        // emit message signal.