Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
96307570
Commit
96307570
authored
Oct 29, 2020
by
Huw Davies
Committed by
Alexandre Julliard
Oct 29, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
riched20: Use cell ptrs in the table tab handler.
Signed-off-by:
Huw Davies
<
huw@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
77895ecd
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
52 additions
and
60 deletions
+52
-60
editor.c
dlls/riched20/editor.c
+3
-3
editor.h
dlls/riched20/editor.h
+1
-1
table.c
dlls/riched20/table.c
+48
-56
No files found.
dlls/riched20/editor.c
View file @
96307570
...
...
@@ -2799,7 +2799,7 @@ static LRESULT ME_Char(ME_TextEditor *editor, WPARAM charCode,
!
(
ctrl_is_down
&&
!
editor
->
bEmulateVersion10
))
{
ME_DisplayItem
*
para
;
BOOL
bSelectedR
ow
=
FALSE
;
BOOL
selected_r
ow
=
FALSE
;
para
=
cursor
.
pPara
;
if
(
ME_IsSelection
(
editor
)
&&
...
...
@@ -2808,11 +2808,11 @@ static LRESULT ME_Char(ME_TextEditor *editor, WPARAM charCode,
para
->
member
.
para
.
prev_para
->
type
==
diParagraph
)
{
para
=
para
->
member
.
para
.
prev_para
;
bSelectedR
ow
=
TRUE
;
selected_r
ow
=
TRUE
;
}
if
(
ME_IsInTable
(
para
))
{
ME_TabPressedInTable
(
editor
,
bSelectedRow
);
table_handle_tab
(
editor
,
selected_row
);
ME_CommitUndo
(
editor
);
return
0
;
}
...
...
dlls/riched20/editor.h
View file @
96307570
...
...
@@ -297,6 +297,7 @@ ME_Paragraph *cell_first_para( ME_Cell *cell ) DECLSPEC_HIDDEN;
ME_Cell
*
cell_next
(
ME_Cell
*
cell
)
DECLSPEC_HIDDEN
;
ME_Cell
*
cell_prev
(
ME_Cell
*
cell
)
DECLSPEC_HIDDEN
;
ME_Paragraph
*
table_append_row
(
ME_TextEditor
*
editor
,
ME_Paragraph
*
table_row
)
DECLSPEC_HIDDEN
;
void
table_handle_tab
(
ME_TextEditor
*
editor
,
BOOL
selected_row
)
DECLSPEC_HIDDEN
;
ME_Paragraph
*
table_insert_cell
(
ME_TextEditor
*
editor
,
ME_Cursor
*
cursor
)
DECLSPEC_HIDDEN
;
ME_Paragraph
*
table_insert_row_end
(
ME_TextEditor
*
editor
,
ME_Cursor
*
cursor
)
DECLSPEC_HIDDEN
;
ME_Paragraph
*
table_insert_row_start
(
ME_TextEditor
*
editor
,
ME_Cursor
*
cursor
)
DECLSPEC_HIDDEN
;
...
...
@@ -308,7 +309,6 @@ ME_Cell *table_row_end_cell( ME_Paragraph *para ) DECLSPEC_HIDDEN;
ME_Cell
*
table_row_first_cell
(
ME_Paragraph
*
para
)
DECLSPEC_HIDDEN
;
ME_Paragraph
*
table_row_start
(
ME_Paragraph
*
para
)
DECLSPEC_HIDDEN
;
void
ME_CheckTablesForCorruption
(
ME_TextEditor
*
editor
)
DECLSPEC_HIDDEN
;
void
ME_TabPressedInTable
(
ME_TextEditor
*
editor
,
BOOL
bSelectedRow
)
DECLSPEC_HIDDEN
;
void
ME_MoveCursorFromTableRowStartParagraph
(
ME_TextEditor
*
editor
)
DECLSPEC_HIDDEN
;
struct
RTFTable
*
ME_MakeTableDef
(
ME_TextEditor
*
editor
)
DECLSPEC_HIDDEN
;
void
ME_InitTableDef
(
ME_TextEditor
*
editor
,
struct
RTFTable
*
tableDef
)
DECLSPEC_HIDDEN
;
...
...
dlls/riched20/table.c
View file @
96307570
...
...
@@ -481,30 +481,27 @@ ME_Paragraph* table_append_row( ME_TextEditor *editor, ME_Paragraph *table_row )
}
/* Selects the next table cell or appends a new table row if at end of table */
static
void
ME_SelectOrInsertNextCell
(
ME_TextEditor
*
editor
,
ME_DisplayItem
*
run
)
static
void
table_select_next_cell_or_append
(
ME_TextEditor
*
editor
,
ME_Run
*
run
)
{
ME_Paragraph
*
para
=
run
->
member
.
run
.
para
;
ME_Paragraph
*
para
=
run
->
para
;
ME_Cell
*
cell
;
int
i
;
assert
(
run
&&
run
->
type
==
diRun
);
assert
(
ME_IsInTable
(
run
));
assert
(
para_in_table
(
para
)
);
if
(
!
editor
->
bEmulateVersion10
)
/* v4.1 */
{
ME_DisplayItem
*
cell
;
/* Get the initial cell */
if
(
para
->
nFlags
&
MEPF_ROWSTART
)
cell
=
para_next
(
para
)
->
pCell
;
else
if
(
para
->
nFlags
&
MEPF_ROWEND
)
cell
=
para_prev
(
para
)
->
pCell
;
else
cell
=
para
->
pCell
;
assert
(
cell
);
if
(
para
->
nFlags
&
MEPF_ROWSTART
)
cell
=
para_cell
(
para_next
(
para
)
);
else
if
(
para
->
nFlags
&
MEPF_ROWEND
)
cell
=
para_cell
(
para_prev
(
para
)
);
else
cell
=
para_cell
(
para
);
/* Get the next cell. */
if
(
cell
->
member
.
cell
.
next_cell
&&
cell
->
member
.
cell
.
next_cell
->
member
.
cell
.
next_cell
)
if
(
cell_next
(
cell
)
&&
cell_next
(
cell_next
(
cell
)
))
cell
=
cell_next
(
cell
);
else
{
cell
=
cell
->
member
.
cell
.
next_cell
;
}
else
{
para
=
para_next
(
table_row_end
(
&
ME_FindItemFwd
(
cell
,
diParagraph
)
->
member
.
para
)
);
if
(
para
->
nFlags
&
MEPF_ROWSTART
)
cell
=
para_next
(
para
)
->
pCell
;
para
=
para_next
(
table_row_end
(
para
)
);
if
(
para
->
nFlags
&
MEPF_ROWSTART
)
cell
=
para_cell
(
para_next
(
para
)
);
else
{
/* Insert row */
...
...
@@ -521,38 +518,32 @@ static void ME_SelectOrInsertNextCell( ME_TextEditor *editor, ME_DisplayItem *ru
}
}
/* Select cell */
editor
->
pCursors
[
1
].
p
Run
=
ME_FindItemFwd
(
cell
,
diRun
);
editor
->
pCursors
[
1
].
p
Para
=
ME_GetParagraph
(
editor
->
pCursors
[
1
].
pRun
);
editor
->
pCursors
[
1
].
p
Para
=
para_get_di
(
cell_first_para
(
cell
)
);
editor
->
pCursors
[
1
].
p
Run
=
run_get_di
(
para_first_run
(
&
editor
->
pCursors
[
1
].
pPara
->
member
.
para
)
);
editor
->
pCursors
[
1
].
nOffset
=
0
;
assert
(
editor
->
pCursors
[
0
].
pRun
);
cell
=
cell
->
member
.
cell
.
next_cell
;
editor
->
pCursors
[
0
].
pRun
=
ME_FindItemBack
(
cell
,
diRun
);
editor
->
pCursors
[
0
].
pPara
=
ME_GetParagraph
(
editor
->
pCursors
[
0
].
pRun
);
editor
->
pCursors
[
0
].
pPara
=
para_get_di
(
cell_end_para
(
cell
)
);
editor
->
pCursors
[
0
].
pRun
=
run_get_di
(
para_end_run
(
&
editor
->
pCursors
[
0
].
pPara
->
member
.
para
)
);
editor
->
pCursors
[
0
].
nOffset
=
0
;
assert
(
editor
->
pCursors
[
1
].
pRun
);
}
else
/* v1.0 - 3.0 */
{
if
(
run
->
member
.
run
.
nFlags
&
MERF_ENDPARA
&&
ME_IsInTable
(
ME_FindItemFwd
(
run
,
diParagraphOrEnd
)))
if
(
run
->
nFlags
&
MERF_ENDPARA
&&
para_in_table
(
para_next
(
para
)
))
{
run
=
ME_FindItemFwd
(
run
,
diRun
);
run
=
run_next_all_paras
(
run
);
assert
(
run
);
}
for
(
i
=
0
;
i
<
2
;
i
++
)
{
while
(
!
(
run
->
member
.
run
.
nFlags
&
MERF_TAB
))
while
(
!
(
run
->
nFlags
&
MERF_TAB
))
{
run
=
ME_FindItemFwd
(
run
,
diRunOrParagraphOrEnd
);
if
(
run
->
type
!=
diRun
)
if
(
!
run_next
(
run
))
{
para
=
&
run
->
member
.
para
;
para
=
para_next
(
run
->
para
)
;
if
(
para_in_table
(
para
))
{
run
=
run_get_di
(
para_first_run
(
para
)
);
assert
(
run
);
run
=
para_first_run
(
para
);
editor
->
pCursors
[
0
].
pPara
=
para_get_di
(
para
);
editor
->
pCursors
[
0
].
pRun
=
run
;
editor
->
pCursors
[
0
].
pRun
=
run
_get_di
(
run
)
;
editor
->
pCursors
[
0
].
nOffset
=
0
;
i
=
1
;
}
...
...
@@ -569,18 +560,18 @@ static void ME_SelectOrInsertNextCell( ME_TextEditor *editor, ME_DisplayItem *ru
return
;
}
}
else
run
=
run_next
(
run
);
}
if
(
i
==
0
)
run
=
ME_FindItemFwd
(
run
,
diRun
);
editor
->
pCursors
[
i
].
pRun
=
run
;
editor
->
pCursors
[
i
].
pPara
=
ME_GetParagraph
(
run
);
if
(
i
==
0
)
run
=
run_next_all_paras
(
run
);
editor
->
pCursors
[
i
].
pRun
=
run_get_di
(
run
);
editor
->
pCursors
[
i
].
pPara
=
para_get_di
(
run
->
para
);
editor
->
pCursors
[
i
].
nOffset
=
0
;
}
}
}
void
ME_TabPressedInTable
(
ME_TextEditor
*
editor
,
BOOL
bSelectedRow
)
void
table_handle_tab
(
ME_TextEditor
*
editor
,
BOOL
selected_row
)
{
/* FIXME: Shift tab should move to the previous cell. */
ME_Cursor
fromCursor
,
toCursor
;
...
...
@@ -593,7 +584,9 @@ void ME_TabPressedInTable(ME_TextEditor *editor, BOOL bSelectedRow)
{
fromCursor
=
editor
->
pCursors
[
0
];
toCursor
=
editor
->
pCursors
[
1
];
}
else
{
}
else
{
fromCursor
=
editor
->
pCursors
[
1
];
toCursor
=
editor
->
pCursors
[
0
];
}
...
...
@@ -604,29 +597,28 @@ void ME_TabPressedInTable(ME_TextEditor *editor, BOOL bSelectedRow)
{
editor
->
pCursors
[
0
]
=
toCursor
;
editor
->
pCursors
[
1
]
=
toCursor
;
}
else
{
ME_SelectOrInsertNextCell
(
editor
,
toCursor
.
pRun
);
}
}
else
{
/* v1.0 - 3.0 */
if
(
!
ME_IsInTable
(
fromCursor
.
pRun
))
{
else
table_select_next_cell_or_append
(
editor
,
&
toCursor
.
pRun
->
member
.
run
);
}
else
/* v1.0 - 3.0 */
{
if
(
!
ME_IsInTable
(
fromCursor
.
pRun
))
{
editor
->
pCursors
[
0
]
=
fromCursor
;
editor
->
pCursors
[
1
]
=
fromCursor
;
/* FIXME: For some reason the caret is shown at the start of the
* previous paragraph in v1.0 to v3.0 */
}
else
if
((
bSelectedRow
||
!
ME_IsInTable
(
toCursor
.
pRun
)))
{
ME_SelectOrInsertNextCell
(
editor
,
fromCursor
.
pRun
);
}
else
{
if
(
ME_IsSelection
(
editor
)
&&
!
toCursor
.
nOffset
)
{
ME_DisplayItem
*
run
;
run
=
ME_FindItemBack
(
toCursor
.
pRun
,
diRunOrParagraphOrEnd
);
if
(
run
->
type
==
diRun
&&
run
->
member
.
run
.
nFlags
&
MERF_TAB
)
ME_SelectOrInsertNextCell
(
editor
,
run
);
else
ME_SelectOrInsertNextCell
(
editor
,
toCursor
.
pRun
);
}
else
{
ME_SelectOrInsertNextCell
(
editor
,
toCursor
.
pRun
);
}
}
else
if
((
selected_row
||
!
para_in_table
(
&
toCursor
.
pPara
->
member
.
para
)))
table_select_next_cell_or_append
(
editor
,
&
fromCursor
.
pRun
->
member
.
run
);
else
{
ME_Run
*
run
=
run_prev
(
&
toCursor
.
pRun
->
member
.
run
);
if
(
ME_IsSelection
(
editor
)
&&
!
toCursor
.
nOffset
&&
run
&&
run
->
nFlags
&
MERF_TAB
)
table_select_next_cell_or_append
(
editor
,
run
);
else
table_select_next_cell_or_append
(
editor
,
&
toCursor
.
pRun
->
member
.
run
);
}
}
ME_InvalidateSelection
(
editor
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment