]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView_pimpl.C
bug 183
[lyx.git] / src / BufferView_pimpl.C
index ef79987295c11db738a4c1e8c20dd5aeacfa2712..cf671b5216472648222c3c519c5acc404f43e424 100644 (file)
@@ -155,6 +155,8 @@ BufferView::Pimpl::Pimpl(BufferView * b, LyXView * o,
                .connect(slot(this, &BufferView::Pimpl::tripleClick));
        workarea_.workAreaKeyPress
                .connect(slot(this, &BufferView::Pimpl::workAreaKeyPress));
+       workarea_.selectionRequested
+               .connect(slot(this, &BufferView::Pimpl::selectionRequested)); 
        
        cursor_timeout.timeout.connect(slot(this,
                                            &BufferView::Pimpl::cursorToggle));
@@ -736,6 +738,15 @@ void BufferView::Pimpl::tripleClick(int /*x*/, int /*y*/, unsigned int button)
 }
 
 
+void BufferView::Pimpl::selectionRequested()
+{
+       string const sel(bv_->getLyXText()->selectionAsString(bv_->buffer(), false)); 
+       if (!sel.empty()) {
+               workarea_.putClipboard(sel);
+       }
+}
+
 void BufferView::Pimpl::enterView()
 {
        if (active() && available()) {
@@ -780,8 +791,15 @@ void BufferView::Pimpl::workAreaButtonRelease(int x, int y,
        if (button == 2)
                return;
 
+       // finish selection
+       if (button == 1) {
+               workarea_.haveSelection(bv_->getLyXText()->selection.set());
+       }
        setState();
        owner_->showState();
+       owner_->updateMenubar();
+       owner_->updateToolbar();
 
        // Did we hit an editable inset?
        if (inset_hit) {
@@ -834,29 +852,6 @@ void BufferView::Pimpl::workAreaButtonRelease(int x, int y,
                return;
        }
 
-#ifdef WITH_WARNINGS
-#warning variable c is set but never used. What is it good for?? (JMarc)
-#warning isnt this code dead ?? "open a float" ??? (jbl)
-#endif
-       // check whether we want to open a float
-       if (bv_->text) {
-               bool hit = false;
-               char c = ' ';
-               if (bv_->text->cursor.pos() <
-                   bv_->text->cursor.par()->size()) {
-                       c = bv_->text->cursor.par()->
-                               getChar(bv_->text->cursor.pos());
-               }
-                       if (bv_->text->cursor.pos() - 1 >= 0) {
-                       c = bv_->text->cursor.par()->
-                               getChar(bv_->text->cursor.pos() - 1);
-               }
-               if (hit == true) {
-                       selection_possible = false;
-                       return;
-               }
-       }
-
        // Maybe we want to edit a bibitem ale970302
        if (bv_->text->cursor.par()->bibkey && x < 20 + 
            bibitemMaxWidth(bv_, textclasslist.
@@ -1459,9 +1454,9 @@ void BufferView::Pimpl::MenuInsertLyXFile(string const & filen)
                FileDialog fileDlg(bv_->owner(),
                                   _("Select LyX document to insert"),
                        LFUN_FILE_INSERT,
-                       make_pair(string(_("Documents")),
+                       make_pair(string(_("Documents|#o#O")),
                                  string(lyxrc.document_path)),
-                       make_pair(string(_("Examples")),
+                       make_pair(string(_("Examples|#E#e")),
                                  string(AddPath(system_lyxdir, "examples"))));
 
                FileDialog::Result result =
@@ -2624,13 +2619,13 @@ bool BufferView::Pimpl::Dispatch(kb_action action, string const & argument)
                        if (cursor.par()->params().spaceTop() == VSpace(VSpace::NONE)) {
                                lt->setParagraph
                                        (bv_,
-                                        cursor.par()->params().lineTop(),      
+                                        cursor.par()->params().lineTop(),
                                         cursor.par()->params().lineBottom(),
-                                        cursor.par()->params().pagebreakTop(), 
+                                        cursor.par()->params().pagebreakTop(),
                                         cursor.par()->params().pagebreakBottom(),
                                         VSpace(VSpace::DEFSKIP), cursor.par()->params().spaceBottom(),
-                                        cursor.par()->params().spacing(), 
-                                        cursor.par()->params().align(), 
+                                        cursor.par()->params().spacing(),
+                                        cursor.par()->params().align(),
                                         cursor.par()->params().labelWidthString(), 1);
                                //update(BufferView::SELECT|BufferView::FITCUR|BufferView::CHANGE);
                        } 
@@ -3279,9 +3274,8 @@ void BufferView::Pimpl::specialChar(InsetSpecialChar::Kind kind)
                update(lt, BufferView::SELECT|BufferView::FITCUR);
                InsetSpecialChar * new_inset = 
                        new InsetSpecialChar(kind);
-               insertInset(new_inset);
-               // Ok, what happens here if we are unable to insert
-               // the inset? Leak it?
+               if (!insertInset(new_inset))
+                       delete new_inset;
        }
 }
 
@@ -3412,8 +3406,7 @@ void BufferView::Pimpl::updateInset(Inset * inset, bool mark_dirty)
                                return;
                        }
                } else if (bv_->theLockingInset()->updateInsetInInset(bv_, inset)) {
-                       if (bv_->text->updateInset(bv_,
-                                                  bv_->theLockingInset())) {
+                       if (bv_->text->updateInset(bv_,  bv_->theLockingInset())) {
                                update();
                                if (mark_dirty){
                                        buffer_->markDirty();
@@ -3467,9 +3460,9 @@ void BufferView::Pimpl::gotoInset(vector<Inset::Code> const & codes,
  
        if (!bv_->text->gotoNextInset(bv_, codes, contents)) {
                if (bv_->text->cursor.pos() 
-                   || bv_->text->cursor.par() != bv_->text->firstParagraph()) {
+                   || bv_->text->cursor.par() != bv_->text->ownerParagraph()) {
                        LyXCursor tmp = bv_->text->cursor;
-                       bv_->text->cursor.par(bv_->text->firstParagraph());
+                       bv_->text->cursor.par(bv_->text->ownerParagraph());
                        bv_->text->cursor.pos(0);
                        if (!bv_->text->gotoNextInset(bv_, codes, contents)) {
                                bv_->text->cursor = tmp;