[gnumeric] xls: fix escher container lengths.
- From: Morten Welinder <mortenw src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnumeric] xls: fix escher container lengths.
- Date: Wed, 7 Oct 2009 13:09:25 +0000 (UTC)
commit a823e563958f2e0c45591ddf7dbe200c46f44ff3
Author: Morten Welinder <terra gnome org>
Date: Wed Oct 7 09:09:02 2009 -0400
xls: fix escher container lengths.
plugins/excel/ChangeLog | 9 +++++++++
plugins/excel/ms-escher.c | 6 +++---
plugins/excel/ms-excel-write.c | 20 ++++++++++++++++----
3 files changed, 28 insertions(+), 7 deletions(-)
---
diff --git a/plugins/excel/ChangeLog b/plugins/excel/ChangeLog
index 4288ba5..ed0c670 100644
--- a/plugins/excel/ChangeLog
+++ b/plugins/excel/ChangeLog
@@ -1,3 +1,12 @@
+2009-10-07 Morten Welinder <terra gnome org>
+
+ * ms-excel-write.c (excel_write_textbox_v8): Make sure the textbox
+ gets to be part of the container.
+
+ * ms-escher.c (ms_escher_opt_end): Docs were wrong. Do not
+ include own header in length.
+ (ms_escher_opt_add_str_wchar): Fix type error.
+
2009-10-06 Morten Welinder <terra gnome org>
* ms-excel-read.c (ms_sheet_realize_obj): Restore colour reading.
diff --git a/plugins/excel/ms-escher.c b/plugins/excel/ms-escher.c
index 3ff3758..9de5ba6 100644
--- a/plugins/excel/ms-escher.c
+++ b/plugins/excel/ms-escher.c
@@ -2209,8 +2209,8 @@ ms_escher_spcontainer_start (GString *buf)
void
ms_escher_spcontainer_end (GString *buf, gsize marker)
{
- /* Length includes header. */
- gsize len = buf->len - marker;
+ /* Length does not include header. */
+ gsize len = buf->len - marker - 8;
GSF_LE_SET_GUINT32 (buf->str + marker + 4, len);
}
@@ -2263,7 +2263,7 @@ void
ms_escher_opt_add_str_wchar (GString *buf, gsize marker, GString *extra,
guint16 pid, const char *str)
{
- gsize ic;
+ glong ic;
gunichar2 *str16 = g_utf8_to_utf16 (str, -1, NULL, &ic, NULL);
guint8 tmp[6];
diff --git a/plugins/excel/ms-excel-write.c b/plugins/excel/ms-excel-write.c
index f231d22..5cb677a 100644
--- a/plugins/excel/ms-excel-write.c
+++ b/plugins/excel/ms-excel-write.c
@@ -4258,6 +4258,8 @@ excel_write_textbox_v8 (ExcelWriteSheet *esheet, SheetObject *so)
SheetObjectAnchor anchor;
SheetObjectAnchor const *real_anchor = sheet_object_get_anchor (so);
guint8 zero[4] = { 0, 0, 0, 0 };
+ gsf_off_t sppos;
+ guint32 splen;
gsize spmark, optmark;
guint16 flags;
int type;
@@ -4312,7 +4314,7 @@ excel_write_textbox_v8 (ExcelWriteSheet *esheet, SheetObject *so)
spmark = ms_escher_spcontainer_start (escher);
ms_escher_sp (escher, id, shape, 0x00000a00); /* fHaveAnchor+fHaveSpt */
-
+
optmark = ms_escher_opt_start (escher);
extra = g_string_new (NULL);
ms_escher_opt_add_simple (escher, optmark,
@@ -4343,11 +4345,17 @@ excel_write_textbox_v8 (ExcelWriteSheet *esheet, SheetObject *so)
ms_escher_clientdata (escher, NULL, 0);
+ /* At this point we're still missing the textbox below. */
+
ms_escher_spcontainer_end (escher, spmark);
+ sppos = bp->streamPos + 4;
+ splen = GSF_LE_GET_GUINT32 (escher->str + spmark + 4);
+
+ draw_len += escher->len;
+
ms_biff_put_var_write (bp, escher->str, escher->len);
ms_biff_put_commit (bp);
- draw_len += escher->len;
g_string_free (escher, TRUE);
@@ -4359,8 +4367,12 @@ excel_write_textbox_v8 (ExcelWriteSheet *esheet, SheetObject *so)
ms_biff_put_commit (bp);
- if (1 || do_textbox)
- draw_len += excel_write_ClientTextbox (ewb, so);
+ if (1 || do_textbox) {
+ gsize this_len = excel_write_ClientTextbox (ewb, so);
+ draw_len += this_len;
+ splen += this_len;
+ ms_biff_put_abs_write (bp, sppos + 4, &splen, 4);
+ }
return draw_len;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]