commit 5de28b9ac6736c791146a1a3ebe7f4826c22a9b7
Author: Jean-Marc Lasgouttes <[email protected]>
Date: Mon Mar 14 11:46:28 2016 +0100
Make inset-select-all select all cells only in tables
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.
diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index 56ecd94..414dbf2 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -1777,21 +1777,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;
@@ -1811,6 +1815,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
diff --git a/src/insets/Inset.h b/src/insets/Inset.h
index c413f9b..cbcaf51 100644
--- a/src/insets/Inset.h
+++ b/src/insets/Inset.h
@@ -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; }
diff --git a/src/insets/InsetTabular.h b/src/insets/InsetTabular.h
index 6b60e44..5b5f836 100644
--- a/src/insets/InsetTabular.h
+++ b/src/insets/InsetTabular.h
@@ -881,6 +881,8 @@ public:
bool inheritFont() const { return false; }
///
bool allowsCaptionVariation(std::string const &) const;
+ //
+ bool isTable() const { return true; }
///
DisplayType display() const;
///
diff --git a/src/mathed/InsetMathGrid.h b/src/mathed/InsetMathGrid.h
index 7faf938..e9ea396 100644
--- a/src/mathed/InsetMathGrid.h
+++ b/src/mathed/InsetMathGrid.h
@@ -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;
///