]> git.lyx.org Git - features.git/commitdiff
Some InsetTabular and -Text fixes.
authorJürgen Vigna <jug@sad.it>
Wed, 14 Feb 2001 08:38:21 +0000 (08:38 +0000)
committerJürgen Vigna <jug@sad.it>
Wed, 14 Feb 2001 08:38:21 +0000 (08:38 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@1501 a592a061-630c-0410-9148-cb99ea01b6c8

20 files changed:
src/BufferView.C
src/BufferView.h
src/BufferView2.C
src/BufferView_pimpl.C
src/BufferView_pimpl.h
src/ChangeLog
src/bufferview_funcs.C
src/frontends/xforms/FormParagraph.C
src/insets/ChangeLog
src/insets/insetlabel.C
src/insets/insettabular.C
src/insets/insettabular.h
src/insets/insettext.C
src/insets/insettext.h
src/lyx_cb.C
src/lyxfr1.C
src/lyxfunc.C
src/lyxfunc.h
src/tabular.C
src/text2.C

index 1db0214573e3dc662fb9cffd3624ff5623d03164..ef2fdf83dc2a1e26012d80f4e5d47942a47fb4b0 100644 (file)
@@ -235,9 +235,9 @@ bool BufferView::isSavedPosition(unsigned int i)
 }
 
 
-void BufferView::update(UpdateCodes f)
+void BufferView::update(LyXText * text, UpdateCodes f)
 {
-       pimpl_->update(f);
+       pimpl_->update(text, f);
 }
 
 
index 3300eef6bb11dda58eb8b5b0ec821a64fc239bdf..ea2f1e847ecff1cf0fc0bc4aa7e1ea3d2659a460 100644 (file)
@@ -68,7 +68,7 @@ public:
        ///
        void update();
        //
-       void update(UpdateCodes uc);
+       void update(LyXText *, UpdateCodes uc);
        ///
        void updateScrollbar();
        ///
@@ -154,7 +154,7 @@ public:
        ///
        void hfill();
        ///
-       void protectedBlank();
+       void protectedBlank(LyXText *);
        ///
        void newline();
        ///
index 37c6d948b401b52c4828e94ce400ac30c4211590..705885486557c3cecc6375bda449f10346d86e5b 100644 (file)
@@ -219,15 +219,15 @@ bool BufferView::insertInset(Inset * inset, string const & lout,
        
        beforeChange();
        if (!lout.empty()) {
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                text->BreakParagraph(this);
-               update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                
                if (text->cursor.par()->Last()) {
                        text->CursorLeft(this);
                        
                        text->BreakParagraph(this);
-                       update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                       update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                }
 
                pair<bool, LyXTextClass::size_type> lres =
@@ -250,13 +250,13 @@ bool BufferView::insertInset(Inset * inset, string const & lout,
                                   LYX_ALIGN_LAYOUT, 
                                   string(),
                                   0);
-               update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                
                text->current_font.setLatex(LyXFont::OFF);
        }
        
        text->InsertInset(this, inset);
-       update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+       update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
 
        text->UnFreezeUndo();
        return true;
@@ -296,7 +296,7 @@ bool BufferView::gotoLabel(string const & label)
                        beforeChange();
                        text->SetCursor(this, it.getPar(), it.getPos());
                        text->sel_cursor = text->cursor;
-                       update(BufferView::SELECT|BufferView::FITCUR);
+                       update(text, BufferView::SELECT|BufferView::FITCUR);
                        return true;
                }
        }
@@ -409,9 +409,9 @@ void BufferView::openStuff()
                owner()->getMiniBuffer()->Set(_("Open/Close..."));
                hideCursor();
                beforeChange();
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                text->OpenStuff(this);
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                setState();
        }
 }
@@ -423,9 +423,9 @@ void BufferView::toggleFloat()
                owner()->getMiniBuffer()->Set(_("Open/Close..."));
                hideCursor();
                beforeChange();
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                text->ToggleFootnote(this);
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                setState();
        }
 }
@@ -437,11 +437,11 @@ void BufferView::menuUndo()
                owner()->getMiniBuffer()->Set(_("Undo"));
                hideCursor();
                beforeChange();
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                if (!text->TextUndo(this))
                        owner()->getMiniBuffer()->Set(_("No further undo information"));
                else
-                       update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                       update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                setState();
        }
 }
@@ -458,11 +458,11 @@ void BufferView::menuRedo()
                owner()->getMiniBuffer()->Set(_("Redo"));
                hideCursor();
                beforeChange();
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                if (!text->TextRedo(this))
                        owner()->getMiniBuffer()->Set(_("No further redo information"));
                else
-                       update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                       update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                setState();
        }
 }
@@ -472,7 +472,7 @@ void BufferView::hyphenationPoint()
 {
        if (available()) {
                hideCursor();
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                InsetSpecialChar * new_inset = 
                        new InsetSpecialChar(InsetSpecialChar::HYPHENATION);
                insertInset(new_inset);
@@ -484,7 +484,7 @@ void BufferView::ldots()
 {
        if (available())  {
                hideCursor();
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                InsetSpecialChar * new_inset = 
                        new InsetSpecialChar(InsetSpecialChar::LDOTS);
                insertInset(new_inset);
@@ -496,7 +496,7 @@ void BufferView::endOfSentenceDot()
 {
        if (available()) {
                hideCursor();
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                InsetSpecialChar * new_inset = 
                        new InsetSpecialChar(InsetSpecialChar::END_OF_SENTENCE);
                insertInset(new_inset);
@@ -508,7 +508,7 @@ void BufferView::menuSeparator()
 {
        if (available()) {
                hideCursor();
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                InsetSpecialChar * new_inset = 
                        new InsetSpecialChar(InsetSpecialChar::MENU_SEPARATOR);
                insertInset(new_inset);
@@ -520,21 +520,24 @@ void BufferView::newline()
 {
        if (available()) {
                hideCursor();
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                text->InsertChar(this, LyXParagraph::META_NEWLINE);
-               update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
        }
 }
 
 
-void BufferView::protectedBlank()
+void BufferView::protectedBlank(LyXText * lt)
 {
        if (available()) {
                hideCursor();
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(lt, BufferView::SELECT|BufferView::FITCUR);
                InsetSpecialChar * new_inset =
                        new InsetSpecialChar(InsetSpecialChar::PROTECTED_SEPARATOR);
-               insertInset(new_inset);
+               if (!insertInset(new_inset))
+                       delete new_inset;
+               else
+                       updateInset(new_inset, true);
        }
 }
 
@@ -543,9 +546,9 @@ void BufferView::hfill()
 {
        if (available()) {
                hideCursor();
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                text->InsertChar(this, LyXParagraph::META_HFILL);
-               update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
        }
 }
 
@@ -556,7 +559,7 @@ void BufferView::copyEnvironment()
                // clear the selection, even if mark_set
                toggleSelection();
                text->ClearSelection();
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                owner()->getMiniBuffer()->Set(_("Paragraph environment type copied"));
        }
 }
@@ -567,7 +570,7 @@ void BufferView::pasteEnvironment()
        if (available()) {
                text->pasteEnvironmentType(this);
                owner()->getMiniBuffer()->Set(_("Paragraph environment type set"));
-               update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
        }
 }
 
@@ -579,7 +582,7 @@ void BufferView::copy()
                // clear the selection, even if mark_set
                toggleSelection();
                text->ClearSelection();
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                owner()->getMiniBuffer()->Set(_("Copy"));
        }
 }
@@ -588,9 +591,9 @@ void BufferView::cut()
 {
        if (available()) {
                hideCursor();
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
                text->CutSelection(this);
-               update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                owner()->getMiniBuffer()->Set(_("Cut"));
        }
 }
@@ -605,16 +608,16 @@ void BufferView::paste()
        // clear the selection
        toggleSelection();
        text->ClearSelection();
-       update(BufferView::SELECT|BufferView::FITCUR);
+       update(text, BufferView::SELECT|BufferView::FITCUR);
        
        // paste
        text->PasteSelection(this);
-       update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+       update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
        
        // clear the selection 
        toggleSelection();
        text->ClearSelection();
-       update(BufferView::SELECT|BufferView::FITCUR);
+       update(text, BufferView::SELECT|BufferView::FITCUR);
 }
 
 
@@ -625,7 +628,7 @@ void BufferView::gotoInset(std::vector<Inset::Code> const & codes,
    
        hideCursor();
        beforeChange();
-       update(BufferView::SELECT|BufferView::FITCUR);
+       update(text, BufferView::SELECT|BufferView::FITCUR);
 
        string contents;
        if (same_content &&
@@ -651,7 +654,7 @@ void BufferView::gotoInset(std::vector<Inset::Code> const & codes,
                                owner()->getMiniBuffer()->Set(_("No more insets"));
                        }
        }
-       update(BufferView::SELECT|BufferView::FITCUR);
+       update(text, BufferView::SELECT|BufferView::FITCUR);
        text->sel_cursor = text->cursor;
 }
 
@@ -695,7 +698,7 @@ void BufferView::selectLastWord()
        beforeChange();
        text->SelectSelectedWord(this);
        toggleSelection(false);
-       update(BufferView::SELECT|BufferView::FITCUR);
+       update(text, BufferView::SELECT|BufferView::FITCUR);
 }
 
 
@@ -707,7 +710,7 @@ void BufferView::endOfSpellCheck()
        beforeChange();
        text->SelectSelectedWord(this);
        text->ClearSelection();
-       update(BufferView::SELECT|BufferView::FITCUR);
+       update(text, BufferView::SELECT|BufferView::FITCUR);
 }
 
 
@@ -716,11 +719,11 @@ void BufferView::replaceWord(string const & replacestring)
        if (!available()) return;
 
        hideCursor();
-       update(BufferView::SELECT|BufferView::FITCUR);
+       update(text, BufferView::SELECT|BufferView::FITCUR);
    
        /* clear the selection (if there is any) */ 
        toggleSelection(false);
-       update(BufferView::SELECT|BufferView::FITCUR);
+       update(text, BufferView::SELECT|BufferView::FITCUR);
    
        /* clear the selection (if there is any) */ 
        toggleSelection(false);
@@ -732,7 +735,7 @@ void BufferView::replaceWord(string const & replacestring)
        for (string::size_type i = 0; i < replacestring.length() + 1; ++i) {
                text->CursorLeft(this);
        }
-       update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+       update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
 }
 // End of spellchecker stuff
 
@@ -869,12 +872,12 @@ void BufferView::updateInset(Inset * inset, bool mark_dirty)
        // then check the current buffer
        if (available()) {
                hideCursor();
-               update(BufferView::UPDATE);
+               update(text, BufferView::UPDATE);
                if (text->UpdateInset(this, inset)) {
                        if (mark_dirty)
-                               update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                               update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                        else 
-                               update(SELECT);
+                               update(text, SELECT);
                        return;
                }
        }
index 0f049d25c97d5af48f4ef3923ed1cd1bf9e86803..647d208c06e9f81d02f00e13ed471bef92027376 100644 (file)
@@ -21,6 +21,7 @@
 #include "TextCache.h"
 #include "bufferlist.h"
 #include "insets/insetbib.h"
+#include "insets/insettext.h"
 #include "lyx_gui_misc.h"
 #include "lyxrc.h"
 #include "intl.h"
@@ -198,7 +199,7 @@ void BufferView::Pimpl::buffer(Buffer * b)
 void BufferView::Pimpl::resize(int xpos, int ypos, int width, int height)
 {
        workarea_->resize(xpos, ypos, width, height);
-       update(SELECT);
+       update(bv_->text, SELECT);
        redraw();
 }
 
@@ -519,7 +520,7 @@ void BufferView::Pimpl::workAreaMotionNotify(int x, int y, unsigned int state)
        bv_->text->SetCursorFromCoordinates(bv_, x, y + bv_->text->first);
       
        if (!bv_->text->selection)
-               update(BufferView::UPDATE); // Maybe an empty line was deleted
+               update(bv_->text, BufferView::UPDATE); // Maybe an empty line was deleted
       
        bv_->text->SetSelection();
        screen_->ToggleToggle(bv_->text, bv_);
@@ -636,34 +637,48 @@ void BufferView::Pimpl::workAreaButtonPress(int xpos, int ypos,
 void BufferView::Pimpl::doubleClick(int /*x*/, int /*y*/, unsigned int button) 
 {
        // select a word
-       if (buffer_ && !bv_->theLockingInset()) {
-               if (screen_ && button == 1) {
-                       screen_->HideCursor();
-                       screen_->ToggleSelection(bv_->text, bv_);
-                       bv_->text->SelectWord(bv_);
-                       screen_->ToggleSelection(bv_->text, bv_, false);
-                       /* This will fit the cursor on the screen
-                        * if necessary */
-                       update(BufferView::SELECT|BufferView::FITCUR);
-               }
-       }   
+       if (!buffer_)
+           return;
+
+       LyXText * text = bv_->getLyXText();
+
+       if (text->bv_owner && bv_->theLockingInset())
+           return;
+
+       if (screen_ && button == 1) {
+           screen_->HideCursor();
+           screen_->ToggleSelection(text, bv_);
+           text->SelectWord(bv_);
+           screen_->ToggleSelection(text, bv_, false);
+           /* This will fit the cursor on the screen
+            * if necessary */
+           update(text, BufferView::SELECT|BufferView::FITCUR);
+       }
 }
 
 
 void BufferView::Pimpl::tripleClick(int /*x*/, int /*y*/, unsigned int button)
 {
        // select a line
-       if (buffer_ && screen_ && !bv_->theLockingInset() && (button == 1)) {
+       if (buffer_)
+               return;
+
+       LyXText * text = bv_->getLyXText();
+
+       if (text->bv_owner && bv_->theLockingInset())
+           return;
+
+       if (screen_ && (button == 1)) {
                screen_->HideCursor();
-               screen_->ToggleSelection(bv_->text, bv_);
-               bv_->text->CursorHome(bv_);
-               bv_->text->sel_cursor = bv_->text->cursor;
-               bv_->text->CursorEnd(bv_);
-               bv_->text->SetSelection();
-               screen_->ToggleSelection(bv_->text, bv_, false);
+               screen_->ToggleSelection(text, bv_);
+               text->CursorHome(bv_);
+               text->sel_cursor = text->cursor;
+               text->CursorEnd(bv_);
+               text->SetSelection();
+               screen_->ToggleSelection(text, bv_, false);
                /* This will fit the cursor on the screen
                 * if necessary */
-               update(BufferView::SELECT|BufferView::FITCUR);
+               update(text, BufferView::SELECT|BufferView::FITCUR);
        }
 }
 
@@ -1004,20 +1019,23 @@ void BufferView::Pimpl::update()
 // update(1)  -> update(1 + 2 + 4) -> update(7) -> update(SELECT|FITCUR|CHANGE)
 // update(3)  -> update(1)         -> update(1) -> update(SELECT)
 
-void BufferView::Pimpl::update(BufferView::UpdateCodes f)
+void BufferView::Pimpl::update(LyXText * text, BufferView::UpdateCodes f)
 {
        owner_->updateLayoutChoice();
 
-       if (!bv_->text->selection && (f & SELECT)) {
-               bv_->text->sel_cursor = bv_->text->cursor;
+       if (!text->selection && (f & SELECT)) {
+               text->sel_cursor = text->cursor;
        }
 
-       bv_->text->FullRebreak(bv_);
+       text->FullRebreak(bv_);
 
-       update();
+       if (text->inset_owner)
+           bv_->updateInset(text->inset_owner, true);
+       else
+           update();
 
        if ((f & FITCUR)) {
-               fitCursor(bv_->text);
+               fitCursor(text);
        }
 
        if ((f & CHANGE)) {
@@ -1164,7 +1182,7 @@ void BufferView::Pimpl::restorePosition(unsigned int i)
 
        bv_->text->SetCursor(bv_, par,
                             min(par->Last(), saved_positions[i].par_pos));
-       update(BufferView::SELECT|BufferView::FITCUR);
+       update(bv_->text, BufferView::SELECT|BufferView::FITCUR);
        if (i > 0)
                owner_->getMiniBuffer()->Set(_("Moved to bookmark ") + tostr(i));
 }
@@ -1287,7 +1305,7 @@ void BufferView::Pimpl::center()
        } else {
                screen_->Draw(bv_->text, bv_, 0);
        }
-       update(BufferView::SELECT|BufferView::FITCUR);
+       update(bv_->text, BufferView::SELECT|BufferView::FITCUR);
        redraw();
 }
 
@@ -1308,7 +1326,7 @@ void BufferView::Pimpl::pasteClipboard(bool asPara)
        } else {
                bv_->text->InsertStringA(bv_, clip);
        }
-       update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+       update(bv_->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
 }
 
 
index c6cc70a2d44ea7fe1de548d59d9eb65acbfdea4a..00e83429d1db56c0839b2792dffd0b3d2c37eeb0 100644 (file)
@@ -43,7 +43,7 @@ struct BufferView::Pimpl : public Object {
        ///
        void update();
        //
-       void update(BufferView::UpdateCodes);
+       void update(LyXText *, BufferView::UpdateCodes);
        /// Update pixmap of screen
        void updateScreen();
        ///
index 6b8a1aad4e43dc7f74dd70c40c4f0a5b25dbec57..1dd89c6bbcee68af58dc66cd944229025b475c99 100644 (file)
@@ -1,3 +1,26 @@
+2001-02-13  Juergen Vigna  <jug@sad.it>
+
+       * lyxfunc.C (Dispatch): fixed protected blank problem.
+       * BufferView2.C (protectedBlank): added LyxText * parameter.
+
+       * tabular.C (AppendRow): forgot to set row_info of newly added row.
+       (AppendColumn): same as above for column_info.
+
+       * lyxfunc.C (Dispatch): supported some more functions in InsetText.
+       (moveCursorUpdate): use a LyXText param for support of InsetText.
+
+       * BufferView_pimpl.C (doubleClick): added support for InsetText.
+       (tripleClick): ditto
+
+       * lyxfunc.C (LFUN_APPENDIX): changed to use "text" pointer.
+
+       * BufferView_pimpl.C (update): added LyXText param to honor insets.
+
+       * bufferview_funcs.C (ToggleAndShow): fixed for text in insets.
+
+       * text2.C (SetSelection): set correct update status if inset_owner
+       (ToggleFree): ditto
+
 2001-02-12  Lars Gullik Bjønnes  <larsbj@lyx.org>
 
        * tabular.C: remove some commented code.
index 7130348ece2be60db4b4a85b16d967e877bc029d..a3f75752563ddcd4e34b16546b8c554f2d20b8b0 100644 (file)
@@ -38,9 +38,9 @@ void Foot(BufferView * bv)
        bv->owner()->getMiniBuffer()
                ->Set(_("Inserting Footnote..."));
        bv->hideCursor();
-       bv->update(BufferView::SELECT|BufferView::FITCUR);
+       bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
        bv->text->InsertFootnoteEnvironment(bv, LyXParagraph::FOOTNOTE);
-       bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+       bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
 }
 #endif
 
@@ -75,9 +75,9 @@ void Margin(BufferView * bv)
        if (bv->available()) {
                bv->owner()->getMiniBuffer()->Set(_("Inserting margin note..."));
                bv->hideCursor();
-               bv->update(BufferView::SELECT|BufferView::FITCUR);
+               bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
                bv->text->InsertFootnoteEnvironment(bv, LyXParagraph::MARGIN);
-               bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
        }
 }
 #endif
@@ -109,9 +109,9 @@ void Melt(BufferView * bv)
        bv->owner()->getMiniBuffer()->Set(_("Melt"));
        bv->hideCursor();
        bv->beforeChange();
-       bv->update(BufferView::SELECT|BufferView::FITCUR);
+       bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
        bv->text->MeltFootnoteEnvironment(bv);
-       bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+       bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
 }
 #endif
 
@@ -133,14 +133,14 @@ void changeDepth(BufferView * bv, LyXText * text, int decInc)
            return;
        
        bv->hideCursor();
-       bv->update(BufferView::SELECT|BufferView::FITCUR);
+       bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
        if (decInc >= 0)
                text->IncDepth(bv);
        else
                text->DecDepth(bv);
        if (text->inset_owner)
            bv->updateInset((Inset *)text->inset_owner, true);
-       bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+       bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
        bv->owner()->getMiniBuffer()
                ->Set(_("Changed environment depth"
                        " (in possible range, maybe not)"));
@@ -306,18 +306,16 @@ string const CurrentState(BufferView * bv)
 void ToggleAndShow(BufferView * bv, LyXFont const & font)
 {
        if (bv->available()) { 
+               LyXText * text = bv->getLyXText();
+
                bv->hideCursor();
-               bv->update(BufferView::SELECT|BufferView::FITCUR);
-               if (bv->theLockingInset())
-                       bv->theLockingInset()->SetFont(bv, font, toggleall);
-               else
-                       bv->text->ToggleFree(bv, font, toggleall);
-               bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               bv->update(text, BufferView::SELECT|BufferView::FITCUR);
+               text->ToggleFree(bv, font, toggleall);
+               bv->update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
 
                if (font.language() != ignore_language ||
                    font.latex() != LyXFont::IGNORE ||
                    font.number() != LyXFont::IGNORE) {
-                       LyXText * text = bv->getLyXText();
                        LyXCursor & cursor = text->cursor;
                        text->ComputeBidiTables(bv->buffer(), cursor.row());
                        if (cursor.boundary() != 
index 66e2b819e701a5e399fe4f7df3e7e7c5f2c2a576..98072f13aa76772e2b9e5e4029a77788b957b7c8 100644 (file)
@@ -142,8 +142,8 @@ void FormParagraph::apply()
     general_apply();
     extra_apply();
 
-    lv_->view()->update(BufferView::SELECT | BufferView::FITCUR |
-                       BufferView::CHANGE);
+    lv_->view()->update(lv_->view()->text, 
+                       BufferView::SELECT | BufferView::FITCUR | BufferView::CHANGE);
     lv_->buffer()->markDirty();
     setMinibuffer(lv_, _("Paragraph layout set"));
 }
index 1c62dbdd16caa9ea6ec8de1c68b7e159c6195069..08add3e9c6d88e2cf049199055e432abf903748d 100644 (file)
@@ -1,3 +1,13 @@
+2001-02-13  Juergen Vigna  <jug@sad.it>
+
+       * insettext.C (InsertInset): don't move left (is this right?)
+
+       * insettabular.C (LocalDispatch): use of the no_draw variable
+
+       * insettabular.h: new no_draw variable to stop redraw
+
+       * insettabular.C (TabularFeatures): fixed update for alignment change
+
 2001-02-12  John Levon  <moz@compsoc.man.ac.uk>
 
        * insetinclude.C:
index dc507c9752b8466b22a1ee1379d115be9f262e52..cf48ce3d4a1d9c7febe98c6314d2ca9ab55248df 100644 (file)
@@ -60,7 +60,7 @@ void InsetLabel::Edit(BufferView * bv, int, int, unsigned int)
                                bv->redraw();
                                bv->fitCursor(getLyXText(bv));
                        } else
-                               bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                               bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                }
        }
 }
index 067071bbbe2348b6819981d027ee606910a8c809..af83a1b9976e0fd0e42f34690129b72ee7bc5d71 100644 (file)
@@ -126,6 +126,7 @@ InsetTabular::InsetTabular(Buffer const & buf, int rows, int columns)
     actrow = actcell = 0;
     clearSelection();
     need_update = INIT;
+    no_draw = false;
 }
 
 
@@ -140,6 +141,7 @@ InsetTabular::InsetTabular(InsetTabular const & tab, Buffer const & buf)
     actrow = actcell = 0;
     sel_cell_start = sel_cell_end = 0;
     need_update = INIT;
+    no_draw = false;
 }
 
 
@@ -214,6 +216,9 @@ int InsetTabular::width(BufferView *, LyXFont const &) const
 void InsetTabular::draw(BufferView * bv, LyXFont const & font, int baseline,
                        float & x, bool cleared) const
 {
+    if (no_draw)
+       return;
+
     Painter & pain = bv->painter();
     int i, j;
     int nx;
@@ -311,33 +316,6 @@ void InsetTabular::draw(BufferView * bv, LyXFont const & font, int baseline,
            lyxerr[Debug::INSETS] << "ERROR this shouldn't happen\n";
            return;
        }
-//     LyXText::text_status st = bv->text->status;
-#if 0
-       do {
-           float cx = nx + tabular->GetBeginningOfTextInCell(cell);
-           bv->text->status = st;
-           if (need_update == CELL) {
-               // clear before the inset
-               pain.fillRectangle(
-                   nx + 1,
-                   baseline - tabular->GetAscentOfRow(i) + 1,
-                   int(cx - nx - 1),
-                   tabular->GetAscentOfRow(i) +
-                   tabular->GetDescentOfRow(i) - 1);
-               // clear behind the inset
-               pain.fillRectangle(
-                   int(cx + the_locking_inset->width(bv,font) + 1),
-                   baseline - tabular->GetAscentOfRow(i) + 1,
-                   tabular->GetWidthOfColumn(cell) -
-                   tabular->GetBeginningOfTextInCell(cell) -
-                   the_locking_inset->width(bv,font) -
-                   tabular->GetAdditionalWidth(cell) - 1,
-                   tabular->GetAscentOfRow(i) +
-                   tabular->GetDescentOfRow(i) - 1);
-           }
-           tabular->GetCellInset(cell)->draw(bv,font,baseline, cx, false);
-       } while(bv->text->status == LyXText::CHANGED_IN_DRAW);
-#else
        float dx;
        float cx;
        cx = dx = nx + tabular->GetBeginningOfTextInCell(cell);
@@ -364,7 +342,6 @@ void InsetTabular::draw(BufferView * bv, LyXFont const & font, int baseline,
                tabular->GetAscentOfRow(i) +
                tabular->GetDescentOfRow(i) - 1);
        }
-#endif
     }
     x -= ADD_TO_TABULAR_WIDTH;
     x += width(bv, font);
@@ -567,8 +544,8 @@ bool InsetTabular::UnlockInsetInInset(BufferView * bv, UpdatableInset * inset,
     if (the_locking_inset == inset) {
         the_locking_inset->InsetUnlock(bv);
         the_locking_inset = 0;
-       ShowInsetCursor(bv, false);
        UpdateLocal(bv, CELL, false);
+       ShowInsetCursor(bv, false);
         return true;
     }
     if (the_locking_inset->UnlockInsetInInset(bv, inset, lr)) {
@@ -979,18 +956,20 @@ UpdatableInset::RESULT InsetTabular::LocalDispatch(BufferView * bv, int action,
        result = UNDISPATCHED;
        if (the_locking_inset)
            break;
+       no_draw = true;
        if (ActivateCellInset(bv)) {
            result=the_locking_inset->LocalDispatch(bv, action, arg);
-           if (result == DISPATCHED_NOUPDATE)
-               return result;
-           else if (result == DISPATCHED) {
-               the_locking_inset->ToggleInsetCursor(bv);
-               UpdateLocal(bv, CELL, false);
-               the_locking_inset->ToggleInsetCursor(bv);
-               return result;
-           } else {
-               result = UNDISPATCHED;
+           if ((result == UNDISPATCHED) || (result == FINISHED)) {
+               UnlockInsetInInset(bv, the_locking_inset);
+               no_draw = false;
+               the_locking_inset = 0;
+               return UNDISPATCHED;
            }
+           no_draw = false;
+           the_locking_inset->ToggleInsetCursor(bv);
+           UpdateLocal(bv, CELL, false);
+           the_locking_inset->ToggleInsetCursor(bv);
+           return result;
        }
        break;
     }
@@ -1599,10 +1578,7 @@ void InsetTabular::TabularFeatures(BufferView * bv,
            for (j = sel_col_start; j <= sel_col_end; ++j)
                tabular->SetAlignment(tabular->GetCellNumber(i, j), setAlign,
                                      flag);
-       if (hasSelection())
-           UpdateLocal(bv, INIT, true);
-       else
-           UpdateLocal(bv, CELL, true);
+       UpdateLocal(bv, INIT, true);
        break;
     case LyXTabular::M_VALIGN_TOP:
     case LyXTabular::M_VALIGN_BOTTOM:
@@ -1615,10 +1591,7 @@ void InsetTabular::TabularFeatures(BufferView * bv,
            for (j = sel_col_start; j <= sel_col_end; ++j)
                tabular->SetVAlignment(tabular->GetCellNumber(i, j),
                                       setVAlign, flag);
-       if (hasSelection())
-           UpdateLocal(bv, INIT, true);
-       else
-           UpdateLocal(bv, CELL, true);
+       UpdateLocal(bv, INIT, true);
        break;
     case LyXTabular::MULTICOLUMN:
     {
index 6a6ea894a100ac2cc9f7675e89825dc2a6d59823..91a5cfb7df478ad629b9bd4fff53a97ab569824c 100644 (file)
@@ -274,6 +274,8 @@ private:
     ///
     bool no_selection;
     ///
+    bool no_draw;
+    ///
     mutable bool locked;
     ///
     mutable UpdateCodes need_update;
index 1b16607f03356e07051ea6af340be1828028e625..675adc4b4fb26d21693a71de24bfc545fd861e4d 100644 (file)
@@ -450,6 +450,11 @@ void InsetText::update(BufferView * bv, LyXFont const & font, bool reinit)
        TEXT_TO_INSET_OFFSET;
 }
 
+void InsetText::SetUpdateStatus(UpdateCodes what)
+{
+    if (what > need_update)
+       need_update = what;
+}
 
 void InsetText::UpdateLocal(BufferView * bv, UpdateCodes what, bool mark_dirty)
 {
@@ -1334,9 +1339,11 @@ bool InsetText::InsertInset(BufferView * bv, Inset * inset)
     inset->setOwner(this);
     HideInsetCursor(bv);
     TEXT(bv)->InsertInset(bv, inset);
+#if 0
     if ((cpar(bv)->GetChar(cpos(bv)) != LyXParagraph::META_INSET) ||
        (cpar(bv)->GetInset(cpos(bv)) != inset))
        TEXT(bv)->CursorLeft(bv);
+#endif
     TEXT(bv)->selection = 0;
     bv->fitCursor(TEXT(bv));
     UpdateLocal(bv, CURSOR_PAR, true);
index ab32e30352546fc831706ec7c540f41e18039ee8..ce8d3d638674971c65f8f1b72089d697d8e2e44b 100644 (file)
@@ -39,24 +39,26 @@ class LyXScreen;
  */
 class InsetText : public UpdatableInset {
 public:
+    ///
+    /// numbers need because of test if codeA < codeB
     ///
     enum UpdateCodes {
        ///
        NONE = 0,
        ///
-       INIT,
+       CURSOR = 1,
        ///
-       FULL,
+       CLEAR_FRAME = 2,
        ///
-       CURSOR_PAR,
+       DRAW_FRAME = 3,
        ///
-       CURSOR,
+       SELECTION = 4,
        ///
-       SELECTION,
+       CURSOR_PAR = 5,
        ///
-       DRAW_FRAME,
+       FULL = 6,
        ///
-       CLEAR_FRAME
+       INIT = 7
     };
     ///
     enum DrawFrame {
@@ -97,6 +99,8 @@ public:
     ///
     void update(BufferView *, LyXFont const &, bool =false);
     ///
+    void SetUpdateStatus(UpdateCodes);
+    ///
     string const EditMessage() const;
     ///
     void Edit(BufferView *, int, int, unsigned int);
index 17fddc5b186b91c06aba80b8269f15f3ff64fe19..5e951fef58d11705a95815994941fe77518d5a4c 100644 (file)
@@ -510,7 +510,7 @@ void InsertAsciiFile(BufferView * bv, string const & f, bool asParagraph)
                bv->text->InsertStringA(bv, tmpstr);
        else
                bv->text->InsertStringB(bv, tmpstr);
-       bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+       bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
 }
 
 
@@ -878,20 +878,20 @@ void FigureApplyCB(FL_OBJECT *, long)
        }
        
        current_view->hideCursor();
-       current_view->update(BufferView::SELECT|BufferView::FITCUR);
+       current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR);
        current_view->beforeChange();
       
        current_view->text->SetCursorParUndo(current_view->buffer()); 
        current_view->text->FreezeUndo();
 
        current_view->text->BreakParagraph(current_view);
-       current_view->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+       current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
       
        if (current_view->text->cursor.par()->Last()) {
                current_view->text->CursorLeft(current_view);
         
                current_view->text->BreakParagraph(current_view);
-               current_view->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
        }
 
        // The standard layout should always be numer 0;
@@ -922,12 +922,12 @@ void FigureApplyCB(FL_OBJECT *, long)
        }
 #endif
        
-       current_view->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+       current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
       
        Inset * new_inset = new InsetFig(100, 100, *buffer);
        current_view->insertInset(new_inset);
        new_inset->Edit(current_view, 0, 0, 0);
-       current_view->update(BufferView::SELECT|BufferView::FITCUR);
+       current_view->update(current_view->text, BufferView::SELECT|BufferView::FITCUR);
        current_view->owner()->getMiniBuffer()->Set(_("Figure inserted"));
        current_view->text->UnFreezeUndo();
        current_view->setState();
index 20734ff10c82aa90dc7841d20ba5b65ca90051e0..909bf3ff93bd762a8745e331b45a419d61e1bb63 100644 (file)
@@ -129,7 +129,7 @@ void LyXFindReplace::SearchReplaceCB()
        string const replacestring = SF.ReplaceString();
 
        bv->hideCursor();
-       bv->update(BufferView::SELECT|BufferView::FITCUR);
+       bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
 
        LyXText * ltCur = bv->text;     
        if (ltCur->selection) {
@@ -139,7 +139,7 @@ void LyXFindReplace::SearchReplaceCB()
                        ReplaceSelectionWithString(bv, replacestring);
                bv->text->
                        SetSelectionOverString(bv, replacestring);
-               bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
        }
        
        // jump to next match:
@@ -176,13 +176,13 @@ void LyXFindReplace::SearchReplaceAllCB()
        do {
                ltCur = bv->text;       
                if (ltCur->selection) {
-                       bv->update(BufferView::SELECT|BufferView::FITCUR);
+                       bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
                        bv->toggleSelection(false);
                        bv->text->
                                ReplaceSelectionWithString(bv, replacestring);
                        bv->text->
                                SetSelectionOverString(bv, replacestring);
-                       bv->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); 
+                       bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE); 
                        ++replace_count;
                }
        } while (SearchCB(true));
@@ -211,7 +211,7 @@ bool LyXFindReplace::SearchCB(bool fForward)
                return false;
    
        bv->hideCursor();
-       bv->update(BufferView::SELECT|BufferView::FITCUR);
+       bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
        LyXText * ltCur = bv->text;
        if (ltCur->selection) 
                ltCur->cursor = fForward ? ltCur->sel_end_cursor :
@@ -222,7 +222,7 @@ bool LyXFindReplace::SearchCB(bool fForward)
    
        if (!SF.ValidSearchData() ||
            (fForward ? SearchForward(bv):SearchBackward(bv))) {
-               bv->update(BufferView::SELECT|BufferView::FITCUR);
+               bv->update(bv->text, BufferView::SELECT|BufferView::FITCUR);
 
                // clear the selection (if there is any) 
                bv->toggleSelection();
index ff17692e25c14e46df97ad44eea31bc57bc6f80d..b5c65e7f39a3f36a05a9b0fce88dcbdbfbff1096 100644 (file)
@@ -134,13 +134,14 @@ LyXFunc::LyXFunc(LyXView * o)
 // a moveCursorUpdate to some of the functions that updated the cursor, but
 // that did not show its new position.
 inline
-void LyXFunc::moveCursorUpdate(bool selecting)
+void LyXFunc::moveCursorUpdate(LyXText * text, bool selecting)
 {
-       if (selecting || owner->view()->text->mark_set) {
-               owner->view()->text->SetSelection();
-               owner->view()->toggleToggle();
+       if (selecting || text->mark_set) {
+               text->SetSelection();
+               if (text->bv_owner)
+                   owner->view()->toggleToggle();
        }
-       owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+       owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
        owner->view()->showCursor();
        
        /* ---> Everytime the cursor is moved, show the current font state. */
@@ -179,7 +180,7 @@ int LyXFunc::processKeySym(KeySym keysym, unsigned int state)
                        if (tli == tli->GetLockingInset()) {
                                owner->view()->unlockInset(tli);
                                owner->view()->text->CursorRight(owner->view());
-                               moveCursorUpdate(false);
+                               moveCursorUpdate(owner->view()->text, false);
                                owner->showState();
                        } else {
                                tli->UnlockInsetInInset(owner->view(),
@@ -648,20 +649,20 @@ string const LyXFunc::Dispatch(int ac,
                                case LFUN_RIGHT:
                                        if (!owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params)) {
                                                owner->view()->text->CursorRight(owner->view());
-                                               moveCursorUpdate(false);
+                                               moveCursorUpdate(owner->view()->text, false);
                                                owner->showState();
                                        }
                                        return string();
                                case LFUN_LEFT: 
                                        if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params)) {
                                                owner->view()->text->CursorRight(owner->view());
-                                               moveCursorUpdate(false);
+                                               moveCursorUpdate(owner->view()->text, false);
                                                owner->showState();
                                        }
                                        return string();
                                case LFUN_DOWN:
                                        owner->view()->text->CursorDown(owner->view());
-                                       moveCursorUpdate(false);
+                                       moveCursorUpdate(owner->view()->text, false);
                                        owner->showState();
                                        return string();
                                default:
@@ -693,7 +694,7 @@ string const LyXFunc::Dispatch(int ac,
                     ltCur->SearchForward(owner->view(), searched_string))) {
 
                        // ??? What is that ???
-                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+                       owner->view()->update(ltCur, BufferView::SELECT|BufferView::FITCUR);
 
                        // ??? Needed ???
                        // clear the selection (if there is any) 
@@ -704,7 +705,7 @@ string const LyXFunc::Dispatch(int ac,
                        if (action == LFUN_WORDFINDFORWARD ) 
                                owner->view()->text->CursorRightOneWord(owner->view());
                        owner->view()->text->FinishUndo();
-                       moveCursorUpdate(false);
+                       moveCursorUpdate(owner->view()->text, false);
 
                        // ??? Needed ???
                        // set the new selection 
@@ -720,7 +721,8 @@ string const LyXFunc::Dispatch(int ac,
        case LFUN_PREFIX:
        {
                if (owner->view()->available()) {
-                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+                       owner->view()->update(owner->view()->text,
+                                             BufferView::SELECT|BufferView::FITCUR);
                }
                string buf;
                keyseq.print(buf, true);
@@ -766,8 +768,8 @@ string const LyXFunc::Dispatch(int ac,
                
        case LFUN_APPENDIX:
                if (owner->view()->available()) {
-                       owner->view()->text->toggleAppendix(owner->view());
-                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                       text->toggleAppendix(owner->view());
+                       owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                }
                break;
 
@@ -1270,11 +1272,13 @@ string const LyXFunc::Dispatch(int ac,
                if (current_layout != layout.second) {
                        owner->view()->hideCursor();
                        current_layout = layout.second;
-                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+                       owner->view()->update(owner->view()->text,
+                                             BufferView::SELECT|BufferView::FITCUR);
                        owner->view()->text->
                                SetLayout(owner->view(), layout.second);
                        owner->setLayout(layout.second);
-                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                       owner->view()->update(owner->view()->text,
+                                             BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                        owner->view()->setState();
                }
        }
@@ -1379,28 +1383,28 @@ string const LyXFunc::Dispatch(int ac,
                break;
                
        case LFUN_UPCASE_WORD:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                text->ChangeWordCase(owner->view(), LyXText::text_uppercase);
                if (text->inset_owner)
                    owner->view()->updateInset(text->inset_owner, true);
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                break;
                
        case LFUN_LOWCASE_WORD:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                text->ChangeWordCase(owner->view(), LyXText::text_lowercase);
                if (text->inset_owner)
                    owner->view()->updateInset(text->inset_owner, true);
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                break;
                
        case LFUN_CAPITALIZE_WORD:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                text->ChangeWordCase(owner->view(),
                                     LyXText::text_capitalization);
                if (text->inset_owner)
                    owner->view()->updateInset(text->inset_owner, true);
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                break;
                
        case LFUN_INSERT_LABEL:
@@ -1469,7 +1473,7 @@ string const LyXFunc::Dispatch(int ac,
                bool is_rtl = tmptext->cursor.par()->isRightToLeftPar(owner->buffer()->params);
                if (!tmptext->mark_set)
                        owner->view()->beforeChange();
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(owner->view()->text, BufferView::SELECT|BufferView::FITCUR);
                if (is_rtl)
                        tmptext->CursorLeft(owner->view(), false);
                if (tmptext->cursor.pos() < tmptext->cursor.par()->Last()
@@ -1493,7 +1497,7 @@ string const LyXFunc::Dispatch(int ac,
                if (!is_rtl)
                        tmptext->CursorRight(owner->view(), false);
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(false);
+               moveCursorUpdate(owner->view()->text, false);
                owner->showState();
        }
        break;
@@ -1505,7 +1509,7 @@ string const LyXFunc::Dispatch(int ac,
                LyXText * txt = owner->view()->text;
                bool is_rtl = txt->cursor.par()->isRightToLeftPar(owner->buffer()->params);
                if (!txt->mark_set) owner->view()->beforeChange();
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(owner->view()->text, BufferView::SELECT|BufferView::FITCUR);
                LyXCursor cur = txt->cursor;
                if (!is_rtl)
                        txt->CursorLeft(owner->view(), false);
@@ -1534,93 +1538,99 @@ string const LyXFunc::Dispatch(int ac,
                        txt->CursorRight(owner->view(), false);
 
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(false);
+               moveCursorUpdate(owner->view()->text, false);
                owner->showState();
        }
        break;
                
        case LFUN_UP:
-               if (!owner->view()->text->mark_set) owner->view()->beforeChange();
-               owner->view()->update(BufferView::UPDATE);
+               if (!owner->view()->text->mark_set)
+                       owner->view()->beforeChange();
+               owner->view()->update(owner->view()->text, BufferView::UPDATE);
                owner->view()->text->CursorUp(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(false);
+               moveCursorUpdate(owner->view()->text, false);
                owner->showState();
                break;
                
        case LFUN_DOWN:
                if (!owner->view()->text->mark_set)
                        owner->view()->beforeChange();
-               owner->view()->update(BufferView::UPDATE);
+               owner->view()->update(owner->view()->text, BufferView::UPDATE);
                owner->view()->text->CursorDown(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(false);
+               moveCursorUpdate(owner->view()->text, false);
                owner->showState();
                break;
 
        case LFUN_UP_PARAGRAPH:
                if (!owner->view()->text->mark_set)
                        owner->view()->beforeChange();
-               owner->view()->update(BufferView::UPDATE);
+               owner->view()->update(owner->view()->text, BufferView::UPDATE);
                owner->view()->text->CursorUpParagraph(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(false);
+               moveCursorUpdate(owner->view()->text, false);
                owner->showState();
                break;
                
        case LFUN_DOWN_PARAGRAPH:
                if (!owner->view()->text->mark_set)
                        owner->view()->beforeChange();
-               owner->view()->update(BufferView::UPDATE);
+               owner->view()->update(owner->view()->text, BufferView::UPDATE);
                owner->view()->text->CursorDownParagraph(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(false);
+               moveCursorUpdate(owner->view()->text, false);
                owner->showState();
                break;
                
        case LFUN_PRIOR:
                if (!text->mark_set)
                    owner->view()->beforeChange();
-               owner->view()->update(BufferView::UPDATE);
+               owner->view()->update(owner->view()->text, BufferView::UPDATE);
                owner->view()->cursorPrevious(text);
                owner->view()->text->FinishUndo();
+#if 0
                if (text->inset_owner)
                    owner->view()->updateInset(text->inset_owner, false);
                else
-                   moveCursorUpdate(false);
+#endif
+                   moveCursorUpdate(text, false);
                owner->showState();
                break;
                
        case LFUN_NEXT:
                if (!text->mark_set)
                        owner->view()->beforeChange();
-               owner->view()->update(BufferView::UPDATE);
+               owner->view()->update(owner->view()->text, BufferView::UPDATE);
                owner->view()->cursorNext(text);
                owner->view()->text->FinishUndo();
+#if 0
                if (text->inset_owner)
                    owner->view()->updateInset(text->inset_owner, false);
                else
-                   moveCursorUpdate(false);
+#endif
+                   moveCursorUpdate(text, false);
                owner->showState();
                break;
                
        case LFUN_HOME:
                if (!owner->view()->text->mark_set)
                        owner->view()->beforeChange();
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(owner->view()->text, BufferView::SELECT|BufferView::FITCUR);
                owner->view()->text->CursorHome(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(false);
+               moveCursorUpdate(owner->view()->text, false);
                owner->showState();
                break;
                
        case LFUN_END:
                if (!owner->view()->text->mark_set)
                        owner->view()->beforeChange();
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR);
                owner->view()->text->CursorEnd(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(false);
+               moveCursorUpdate(owner->view()->text, false);
                owner->showState();
                break;
                
@@ -1628,192 +1638,239 @@ string const LyXFunc::Dispatch(int ac,
        case LFUN_TAB:
                if (!owner->view()->text->mark_set)
                        owner->view()->beforeChange();
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR);
                owner->view()->text->CursorTab(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(false);
+               moveCursorUpdate(owner->view()->text, false);
                owner->showState();
                break;
                
        case LFUN_WORDRIGHT:
                if (!text->mark_set)
                        owner->view()->beforeChange();
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                if (text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
                        text->CursorLeftOneWord(owner->view());
                else
                        text->CursorRightOneWord(owner->view());
                owner->view()->text->FinishUndo();
+#if 0
                if (text->inset_owner)
                    owner->view()->updateInset(text->inset_owner, true);
-               moveCursorUpdate(false);
+#endif
+               moveCursorUpdate(text, false);
                owner->showState();
                break;
                
        case LFUN_WORDLEFT:
                if (!text->mark_set)
                        owner->view()->beforeChange();
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                if (text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
                        text->CursorRightOneWord(owner->view());
                else
                        text->CursorLeftOneWord(owner->view());
                owner->view()->text->FinishUndo();
+#if 0
                if (text->inset_owner)
                    owner->view()->updateInset(text->inset_owner, true);
-               moveCursorUpdate(false);
+#endif
+               moveCursorUpdate(text, false);
                owner->showState();
                break;
                
        case LFUN_BEGINNINGBUF:
                if (!owner->view()->text->mark_set)
                        owner->view()->beforeChange();
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR);
                owner->view()->text->CursorTop(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(false);
+               moveCursorUpdate(owner->view()->text, false);
                owner->showState();
                break;
                
        case LFUN_ENDBUF:
                if (!owner->view()->text->mark_set)
                        owner->view()->beforeChange();
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR);
                owner->view()->text->CursorBottom(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(false);
+               moveCursorUpdate(owner->view()->text, false);
                owner->showState();
                break;
 
       
                /* cursor selection ---------------------------- */
        case LFUN_RIGHTSEL:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR);
                if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
                        owner->view()->text->CursorLeft(owner->view());
                else
                        owner->view()->text->CursorRight(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(true);
+               moveCursorUpdate(owner->view()->text, true);
                owner->showState();
                break;
                
        case LFUN_LEFTSEL:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR);
                if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
                        owner->view()->text->CursorRight(owner->view());
                else
                        owner->view()->text->CursorLeft(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(true);
+               moveCursorUpdate(owner->view()->text, true);
                owner->showState();
                break;
                
        case LFUN_UPSEL:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR);
                owner->view()->text->CursorUp(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(true);
+               moveCursorUpdate(owner->view()->text, true);
                owner->showState();
                break;
                
        case LFUN_DOWNSEL:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR);
                owner->view()->text->CursorDown(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(true);
+               moveCursorUpdate(owner->view()->text, true);
                owner->showState();
                break;
 
        case LFUN_UP_PARAGRAPHSEL:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR);
                owner->view()->text->CursorUpParagraph(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(true);
+               moveCursorUpdate(owner->view()->text, true);
                owner->showState();
                break;
                
        case LFUN_DOWN_PARAGRAPHSEL:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR);
                owner->view()->text->CursorDownParagraph(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(true);
+               moveCursorUpdate(owner->view()->text, true);
                owner->showState();
                break;
                
        case LFUN_PRIORSEL:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                owner->view()->cursorPrevious(text);
                owner->view()->text->FinishUndo();
-               if (text->inset_owner)
+#if 0
+               if (text->inset_owner) {
+                   text->SetSelection();
                    owner->view()->updateInset(text->inset_owner, false);
-               else
-                   moveCursorUpdate(true);
+               } else
+#endif
+                   moveCursorUpdate(text, true);
                owner->showState();
                break;
                
        case LFUN_NEXTSEL:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                owner->view()->cursorNext(text);
                owner->view()->text->FinishUndo();
+#if 0
                if (text->inset_owner)
                    owner->view()->updateInset(text->inset_owner, false);
                else
-                   moveCursorUpdate(true);
+#endif
+                   moveCursorUpdate(text, true);
                owner->showState();
                break;
                
        case LFUN_HOMESEL:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
-               owner->view()->text->CursorHome(owner->view());
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
+               text->CursorHome(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(true);
+#if 0
+               if (text->inset_owner) {
+                   text->SetSelection();
+                   owner->view()->updateInset(text->inset_owner, false);
+               } else
+#endif
+                   moveCursorUpdate(text, true);
                owner->showState();
                break;
                
        case LFUN_ENDSEL:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
-               owner->view()->text->CursorEnd(owner->view());
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
+               text->CursorEnd(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(true);
+#if 0
+               if (text->inset_owner) {
+                   text->SetSelection();
+                   owner->view()->updateInset(text->inset_owner, false);
+               } else
+#endif
+                   moveCursorUpdate(text, true);
                owner->showState();
                break;
                
        case LFUN_WORDRIGHTSEL:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
-               if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
-                       owner->view()->text->CursorLeftOneWord(owner->view());
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
+               if (text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
+                       text->CursorLeftOneWord(owner->view());
                else
-                       owner->view()->text->CursorRightOneWord(owner->view());
+                       text->CursorRightOneWord(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(true);
+#if 0
+               if (text->inset_owner) {
+                   text->SetSelection();
+                   owner->view()->updateInset(text->inset_owner, false);
+               } else
+#endif
+                   moveCursorUpdate(text, true);
                owner->showState();
                break;
                
        case LFUN_WORDLEFTSEL:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                if (owner->view()->text->cursor.par()->isRightToLeftPar(owner->buffer()->params))
-                       owner->view()->text->CursorRightOneWord(owner->view());
+                       text->CursorRightOneWord(owner->view());
                else
-                       owner->view()->text->CursorLeftOneWord(owner->view());
+                       text->CursorLeftOneWord(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(true);
+#if 0
+               if (text->inset_owner) {
+                   text->SetSelection();
+                   owner->view()->updateInset(text->inset_owner, false);
+               } else
+#endif
+                   moveCursorUpdate(text, true);
                owner->showState();
                break;
                
        case LFUN_BEGINNINGBUFSEL:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               if (text->inset_owner)
+                   break;
+               owner->view()->update(owner->view()->text, BufferView::SELECT|BufferView::FITCUR);
                owner->view()->text->CursorTop(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(true);
+               moveCursorUpdate(owner->view()->text, true);
                owner->showState();
                break;
                
        case LFUN_ENDBUFSEL:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               if (text->inset_owner)
+                   break;
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR);
                owner->view()->text->CursorBottom(owner->view());
                owner->view()->text->FinishUndo();
-               moveCursorUpdate(true);
+               moveCursorUpdate(owner->view()->text, true);
                owner->showState();
                break;
 
@@ -1821,40 +1878,43 @@ string const LyXFunc::Dispatch(int ac,
        case LFUN_BREAKLINE:
                owner->view()->beforeChange();
                owner->view()->text->InsertChar(owner->view(), LyXParagraph::META_NEWLINE);
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
-               moveCursorUpdate(false);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               moveCursorUpdate(owner->view()->text, false);
                break;
                
        case LFUN_PROTECTEDSPACE:
        {
                LyXLayout const & style =
                        textclasslist.Style(owner->view()->buffer()->params.textclass,
-                                           owner->view()->text->cursor.par()->GetLayout());
+                                           text->cursor.par()->GetLayout());
 
                if (style.free_spacing) {
-                       owner->view()->text->InsertChar(owner->view(), ' ');
-                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                       text->InsertChar(owner->view(), ' ');
+                       owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                } else {
-                       owner->view()->protectedBlank();
+                       owner->view()->protectedBlank(text);
                }
-               moveCursorUpdate(false);
+               moveCursorUpdate(text, false);
        }
        break;
                
        case LFUN_SETMARK:
                if (text->mark_set) {
                        owner->view()->beforeChange();
-                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+                       owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                        setMessage(N_("Mark removed"));
                } else {
                        owner->view()->beforeChange();
                        text->mark_set = 1;
-                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+                       owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                        setMessage(N_("Mark set"));
                }
                text->sel_cursor = text->cursor;
+#if 0
                if (text->inset_owner)
                    owner->view()->updateInset(text->inset_owner, true);
+#endif
                break;
                
        case LFUN_DELETE:
@@ -1862,14 +1922,15 @@ string const LyXFunc::Dispatch(int ac,
                        owner->view()->text->Delete(owner->view());
                        owner->view()->text->sel_cursor = 
                                owner->view()->text->cursor;
-                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                       owner->view()->update(owner->view()->text,
+                                             BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                        // It is possible to make it a lot faster still
                        // just comment out the line below...
                        owner->view()->showCursor();
                } else {
                        owner->view()->cut();
                }
-               moveCursorUpdate(false);
+               moveCursorUpdate(owner->view()->text, false);
                owner->showState();
                owner->view()->setState();
                break;
@@ -1898,19 +1959,22 @@ string const LyXFunc::Dispatch(int ac,
                                                 cursor.par()->align, 
                                                 cursor.par()->labelwidthstring, 0);
                                        owner->view()->text->CursorLeft(owner->view());
-                                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                                       owner->view()->update(owner->view()->text, 
+                                                             BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                                } else {
                                        owner->view()->text->CursorLeft(owner->view());
                                        owner->view()->text->Delete(owner->view());
                                        owner->view()->text->sel_cursor = 
                                                owner->view()->text->cursor;
-                                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                                       owner->view()->update(owner->view()->text,
+                                                             BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                                }
                        } else {
                                owner->view()->text->Delete(owner->view());
                                owner->view()->text->sel_cursor = 
                                        owner->view()->text->cursor;
-                               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                               owner->view()->update(owner->view()->text,
+                                                     BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                        }
                } else {
                        owner->view()->cut();
@@ -1920,69 +1984,76 @@ string const LyXFunc::Dispatch(int ac,
 
        /* -------> Delete word forward. */
        case LFUN_DELETE_WORD_FORWARD:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                text->DeleteWordForward(owner->view());
+#if 0
                if (text->inset_owner)
                    owner->view()->updateInset(text->inset_owner, true);
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
-               moveCursorUpdate(false);
+#endif
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               moveCursorUpdate(text, false);
                owner->showState();
                break;
 
                /* -------> Delete word backward. */
        case LFUN_DELETE_WORD_BACKWARD:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                text->DeleteWordBackward(owner->view());
+#if 0
                if (text->inset_owner)
                    owner->view()->updateInset(text->inset_owner, true);
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
-               moveCursorUpdate(false);
+#endif
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               moveCursorUpdate(text, false);
                owner->showState();
                break;
                
                /* -------> Kill to end of line. */
        case LFUN_DELETE_LINE_FORWARD:
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                text->DeleteLineForward(owner->view());
+#if 0
                if (text->inset_owner)
                    owner->view()->updateInset(text->inset_owner, true);
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
-               moveCursorUpdate(false);
+#endif
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               moveCursorUpdate(text, false);
                break;
                
                /* -------> Set mark off. */
        case LFUN_MARK_OFF:
                owner->view()->beforeChange();
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                text->sel_cursor = text->cursor;
                setMessage(N_("Mark off"));
+#if 0
                if (text->inset_owner)
                    owner->view()->updateInset(text->inset_owner, true);
+#endif
                break;
 
                /* -------> Set mark on. */
        case LFUN_MARK_ON:
                owner->view()->beforeChange();
-               owner->view()->text->mark_set = 1;
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR);
+               text->mark_set = 1;
+               owner->view()->update(text, BufferView::SELECT|BufferView::FITCUR);
                text->sel_cursor = text->cursor;
+#if 0
                if (text->inset_owner)
                    owner->view()->updateInset(text->inset_owner, true);
+#endif
                setMessage(N_("Mark on"));
                break;
                
        case LFUN_BACKSPACE:
        {
                if (!owner->view()->text->selection) {
-#if 0
-                       if (owner->getIntl()->getTrans()->backspace()) {
-#else
                        if (owner->getIntl()->getTrans().backspace()) {
-#endif
                                owner->view()->text->Backspace(owner->view());
                                owner->view()->text->sel_cursor = 
                                        owner->view()->text->cursor;
-                               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                               owner->view()->update(owner->view()->text,
+                                                     BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                                // It is possible to make it a lot faster still
                                // just comment out the line below...
                                owner->view()->showCursor();
@@ -2014,12 +2085,14 @@ string const LyXFunc::Dispatch(int ac,
                                         VSpace(VSpace::NONE), cursor.par()->added_space_bottom,
                                         cursor.par()->align, 
                                         cursor.par()->labelwidthstring, 0);
-                               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                               owner->view()->update(owner->view()->text,
+                                                     BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                        } else {
                                owner->view()->text->Backspace(owner->view());
                                owner->view()->text->sel_cursor 
                                        = cursor;
-                               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                               owner->view()->update(owner->view()->text,
+                                                     BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                        }
                } else
                        owner->view()->cut();
@@ -2030,7 +2103,8 @@ string const LyXFunc::Dispatch(int ac,
        {
                owner->view()->beforeChange();
                owner->view()->text->BreakParagraph(owner->view(), 0);
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                owner->view()->text->sel_cursor = 
                        owner->view()->text->cursor;
                owner->view()->setState();
@@ -2042,7 +2116,8 @@ string const LyXFunc::Dispatch(int ac,
        {
                owner->view()->beforeChange();
                owner->view()->text->BreakParagraph(owner->view(), 1);
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                owner->view()->text->sel_cursor = 
                        owner->view()->text->cursor;
                owner->view()->setState();
@@ -2078,7 +2153,8 @@ string const LyXFunc::Dispatch(int ac,
                        //owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                }
 
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                owner->view()->text->sel_cursor = cursor;
                owner->view()->setState();
                owner->showState();
@@ -2125,7 +2201,8 @@ string const LyXFunc::Dispatch(int ac,
                if (cur_spacing != new_spacing || cur_value != new_value) {
                        par->spacing.set(new_spacing, new_value);
                        owner->view()->text->RedoParagraph(owner->view());
-                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                       owner->view()->update(owner->view()->text,
+                                             BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                }
        }
        break;
@@ -2133,8 +2210,9 @@ string const LyXFunc::Dispatch(int ac,
        case LFUN_QUOTE:
                owner->view()->beforeChange();
                owner->view()->text->InsertChar(owner->view(), '\"');  // This " matches the single quote in the code
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
-                moveCursorUpdate(false);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                moveCursorUpdate(owner->view()->text, false);
                break;
 
        case LFUN_HTMLURL:
@@ -2442,15 +2520,9 @@ string const LyXFunc::Dispatch(int ac,
                if (keyseq.length == -1 && keyseq.getiso() != 0) 
                        c = keyseq.getiso();
 
-#if 0
-               owner->getIntl()->getTrans()->
-                       deadkey(c, get_accent(action).accent, 
-                               owner->view()->text);
-#else
                owner->getIntl()->getTrans()
                        .deadkey(c, get_accent(action).accent, 
                                owner->view()->text);
-#endif
                
                // Need to reset, in case the minibuffer calls these
                // actions
@@ -2458,7 +2530,8 @@ string const LyXFunc::Dispatch(int ac,
                keyseq.length = 0;
                
                // copied verbatim from do_accent_char
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
 
                owner->view()->text->sel_cursor = 
                        owner->view()->text->cursor;
@@ -2821,7 +2894,8 @@ string const LyXFunc::Dispatch(int ac,
                        break;
                }
                owner->view()->text->InsertFootnoteEnvironment(owner->view(), kind);
-               owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+               owner->view()->update(owner->view()->text,
+                                     BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                owner->view()->setState();
        }
        break;
@@ -2853,11 +2927,12 @@ string const LyXFunc::Dispatch(int ac,
                        owner->view()->text->InsertChar(owner->view(), argument[i]);
                        // This needs to be in the loop, or else we
                        // won't break lines correctly. (Asger)
-                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                       owner->view()->update(owner->view()->text,
+                                             BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                }
                owner->view()->text->sel_cursor = 
                        owner->view()->text->cursor;
-               moveCursorUpdate(false);
+               moveCursorUpdate(owner->view()->text, false);
 
                // real_current_font.number can change so we need to 
                // update the minibuffer
@@ -2894,11 +2969,12 @@ string const LyXFunc::Dispatch(int ac,
                        ::strftime(datetmp, 32, arg.c_str(), now_tm);
                for (int i = 0; i < datetmp_len; i++) {
                        owner->view()->text->InsertChar(owner->view(), datetmp[i]);
-                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                       owner->view()->update(owner->view()->text,
+                                             BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                }
 
                owner->view()->text->sel_cursor = owner->view()->text->cursor;
-               moveCursorUpdate(false);
+               moveCursorUpdate(owner->view()->text, false);
        }
        break;
 
@@ -2976,7 +3052,8 @@ string const LyXFunc::Dispatch(int ac,
                        if (lyxrc.auto_region_delete) {
                                if (owner->view()->text->selection){
                                        owner->view()->text->CutSelection(owner->view(), false);
-                                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                                       owner->view()->update(owner->view()->text,
+                                                             BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                                }
                        }
                        
@@ -3000,11 +3077,12 @@ string const LyXFunc::Dispatch(int ac,
 #endif
                        }
 
-                       owner->view()->update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
+                       owner->view()->update(owner->view()->text,
+                                             BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
 
                        owner->view()->text->sel_cursor = 
                                owner->view()->text->cursor;
-                       moveCursorUpdate(false);
+                       moveCursorUpdate(owner->view()->text, false);
 
                        // real_current_font.number can change so we need to
                        // update the minibuffer
index ae7a8683ec6ddff0100289de6ab14654675c043f..40226d513802bbd8b55a2ee2d5b37cf4d1ca6f0b 100644 (file)
@@ -94,7 +94,7 @@ private:
        ///
        unsigned meta_fake_bit;
        ///
-       void moveCursorUpdate(bool selecting = false);
+       void moveCursorUpdate(LyXText *, bool selecting = false);
        ///
        void setupLocalKeymap();
         ///
index 7f98e397f65ee8ef0a78dfbbbc40ea518e1ae7cb..71adb1843006fa9ab5cf883705da8081b34195a2 100644 (file)
@@ -195,6 +195,8 @@ void LyXTabular::AppendRow(int cell)
 
     row_vector::iterator rit = row_info.begin() + row;
     row_info.insert(rit, rowstruct());
+    // now set the values of the row before
+    row_info[row] = row_info[row+1];
 
 #if 0
     cell_vvector::iterator cit = cell_info.begin() + row;
@@ -246,6 +248,8 @@ void LyXTabular::AppendColumn(int cell)
     int const column = column_of_cell(cell);
     column_vector::iterator cit = column_info.begin() + column + 1;
     column_info.insert(cit, columnstruct());
+    // set the column values of the column before
+    column_info[column+1] = column_info[column];
 
     for (int i = 0; i < rows_; ++i) {
         for (int j = 0; j <= column; ++j) {
@@ -2613,8 +2617,7 @@ int LyXTabular::AsciiPrintCell(Buffer const * buf, ostream & os,
     else
        os << "  ";
 
-#warning What is this supposed to do? (Lgb)
-    return ret * 0; // eh? (Lgb)
+    return ret;
 }
 
 
index 726c4e0c305138ac10fefdc8b6476a86bf513248..2d97a31f71a15441d2dac56d6692a5f1e6b66f51 100644 (file)
@@ -1119,6 +1119,8 @@ bool LyXText::FullRebreak(BufferView * bview)
 // need the selection cursor:
 void LyXText::SetSelection()
 {
+       const bool lsel = selection;
+
        if (!selection) {
                last_sel_cursor = sel_cursor;
                sel_start_cursor = sel_cursor;
@@ -1164,6 +1166,9 @@ void LyXText::SetSelection()
        if (sel_start_cursor.par() == sel_end_cursor.par() && 
            sel_start_cursor.pos() == sel_end_cursor.pos())
                selection = false;
+
+       if (inset_owner && (selection || lsel))
+               inset_owner->SetUpdateStatus(InsetText::SELECTION);
 }
 
 
@@ -1298,6 +1303,8 @@ void LyXText::ToggleFree(BufferView * bview,
                SetCursor(bview, cursor.par(), cursor.pos());
                sel_cursor = cursor;
        }
+       if (inset_owner)
+               inset_owner->SetUpdateStatus(InsetText::CURSOR_PAR);
 }