The attached patch fixes bug http://www.lyx.org/trac/ticket/6057 that LyX allows having header rows
in a longtable without having a first header row. This bug leads to wrong TOC entries for longtables
because longtable expects in every table
\endfirsthead
before
\endhead .
Any objections? If not, this should also go to LyX 1.6.4.
regards Uwe
Index: GuiTabular.cpp
===================================================================
--- GuiTabular.cpp (revision 30407)
+++ GuiTabular.cpp (working copy)
@@ -822,15 +822,20 @@
// first header can only be suppressed when there is a header
firstheaderNoContentsCB->setEnabled(tabular_.haveLTHead()
&& !tabular_.haveLTFirstHead());
-
- //firstheaderStatusCB->setEnabled(
- // !firstheaderNoContentsCB->isChecked());
+ // When there is a header but no first header, set the first header
+ // as empty . Otherwise longtable's caption handling would be broken,
+ // see bug 6057.
+ firstheaderNoContentsCB->setChecked(tabular_.haveLTHead()
+ && !tabular_.haveLTFirstHead());
+
headerBorderAboveCB->setEnabled(funcEnabled(Tabular::SET_LTHEAD));
headerBorderBelowCB->setEnabled(funcEnabled(Tabular::SET_LTHEAD));
headerStatusCB->setEnabled(funcEnabled(Tabular::SET_LTHEAD));
+
footerBorderAboveCB->setEnabled(funcEnabled(Tabular::SET_LTFOOT));
footerBorderBelowCB->setEnabled(funcEnabled(Tabular::SET_LTFOOT));
footerStatusCB->setEnabled(funcEnabled(Tabular::SET_LTFOOT));
+
lastfooterBorderAboveCB->setEnabled(
funcEnabled(Tabular::SET_LTLASTFOOT));
lastfooterBorderBelowCB->setEnabled(
@@ -865,11 +870,8 @@
row_set = tabular_.getRowOfLTFirstHead(row, ltt);
// check if setting a first header is allowed
- // additionally check firstheaderNoContentsCB because when this is
- // the case a first header makes no sense
firstheaderStatusCB->setEnabled(
- funcEnabled(Tabular::SET_LTFIRSTHEAD)
- && !firstheaderNoContentsCB->isChecked());
+ funcEnabled(Tabular::SET_LTFIRSTHEAD));
firstheaderStatusCB->setChecked(row_set);
if (ltt.set && (!ltt.empty || !use_empty)) {
firstheaderBorderAboveCB->setChecked(ltt.topDL);
@@ -879,10 +881,6 @@
firstheaderBorderBelowCB->setEnabled(false);
firstheaderBorderAboveCB->setChecked(false);
firstheaderBorderBelowCB->setChecked(false);
- if (use_empty) {
- if (ltt.empty)
- firstheaderStatusCB->setEnabled(false);
- }
}
row_set = tabular_.getRowOfLTFoot(row, ltt);
@@ -974,6 +972,12 @@
set(Tabular::SET_PWIDTH, width);
}
+ // When there is a header but no first header, set the first header
+ // as empty . Otherwise longtable's caption handling would be broken,
+ // see bug 6057.
+ if (tabular_.haveLTHead() && !tabular_.haveLTFirstHead())
+ set(Tabular::SET_LTFIRSTHEAD, "empty");
+
/* DO WE NEED THIS?
switch (topspaceCO->currentIndex()) {
case 0: