]> git.lyx.org Git - features.git/commitdiff
Make inset-select-all select all cells only in tables
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Mon, 14 Mar 2016 10:46:28 +0000 (11:46 +0100)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Mon, 9 May 2016 09:15:17 +0000 (11:15 +0200)
inset-select-all has 3 levels
1. select current cell
2. select all cells
3. select inset from outside.

The second level makes sense for tables (text and math), but not for things like a math fraction.

Introduce a new method Inset::isTable() that allows to detect this case properly and skip level 2.

(cherry picked from commit 5de28b9ac6736c791146a1a3ebe7f4826c22a9b7)

src/BufferView.cpp
src/insets/Inset.h
src/insets/InsetTabular.h
src/mathed/InsetMathGrid.h
status.22x

index a158393579f74558e6b74cc9ee8b3c8cd64b3ca2..f304798c82355559ff51b1d7a6018b63a2b96e15 100644 (file)
@@ -1771,21 +1771,25 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
        }
 
 
-       case LFUN_INSET_SELECT_ALL:
-               if (cur.depth() > 1
+       case LFUN_INSET_SELECT_ALL: {
+               // true if all cells are selected
+               bool const all_selected = cur.depth() > 1
                    && cur.selBegin().at_begin()
-                   && cur.selEnd().at_end()) {
-                       // All the contents of the inset if selected.
+                   && cur.selEnd().at_end();
+               // true if some cells are selected
+               bool const cells_selected = cur.depth() > 1
+                   && cur.selBegin().at_cell_begin()
+                       && cur.selEnd().at_cell_end();
+               if (all_selected || (cells_selected && !cur.inset().isTable())) {
+                       // All the contents of the inset if selected, or only at
+                       // least one cell but inset is not a table.
                        // Select the inset from outside.
                        cur.pop();
                        cur.resetAnchor();
                        cur.setSelection(true);
                        cur.posForward();
-               } else if (cur.selBegin().idx() != cur.selEnd().idx()
-                          || (cur.depth() > 1
-                                  && cur.selBegin().at_cell_begin()
-                              && cur.selEnd().at_cell_end())) {
-                       // At least one complete cell is selected.
+               } else if (cells_selected) {
+                       // At least one complete cell is selected and inset is a table.
                        // Select all cells
                        cur.idx() = 0;
                        cur.pos() = 0;
@@ -1805,6 +1809,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                cur.setCurrentFont();
                dr.screenUpdate(Update::Force);
                break;
+       }
 
 
        // This would be in Buffer class if only Cursor did not
index c413f9b4cc2cd47934635ca2b5c56e12b2a003c9..cbcaf518a2fca8838e40136e097e61dfbbcf6e7e 100644 (file)
@@ -347,6 +347,8 @@ public:
        virtual bool clickable(BufferView const &, int, int) const { return false; }
        /// Move one cell backwards
        virtual bool allowsCaptionVariation(std::string const &) const { return false; }
+       // true for insets that have a table structure (InsetMathGrid, InsetTabular)
+       virtual bool isTable() const { return false; }
 
        /// does this contain text that can be change track marked in DVI?
        virtual bool canTrackChanges() const { return false; }
index bb36b7f13da56ac8089779df0bc5b16072cb5553..f63b84af420329812e6c234797ff7079bdcf033f 100644 (file)
@@ -881,6 +881,8 @@ public:
        bool inheritFont() const { return false; }
        ///
        bool allowsCaptionVariation(std::string const &) const;
+       //
+       bool isTable() const { return true; }
        ///
        DisplayType display() const;
        ///
index 7faf938818cb8227a02428b970c57e3c8d7f17db..e9ea396930f3aa466536dd1135f3062393764ca4 100644 (file)
@@ -154,6 +154,8 @@ public:
        InsetMathGrid * asGridInset() { return this; }
        /// identifies GridInset
        InsetMathGrid const * asGridInset() const { return this; }
+       //
+       bool isTable() const { return true; }
        ///
        col_type ncols() const;
        ///
index 1574258800eb9aea2cb3948d80ae33ec73bcf163..df2825567c3d71a89312825e402196b51bd9f208 100644 (file)
@@ -27,6 +27,8 @@ What's new
 
 - Change mouse cursor to indicate row/column selection in tabulars.
 
+- Make inset-select-all select all cells only in tables.
+
 - Automatically show the review toolbar if the document has tracked changes
   (bug 8738), and related UI imrovements.