Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
emacs
emacs
Commits
86282aab
Commit
86282aab
authored
Sep 22, 2010
by
Kenichi Handa
Browse files
Fix position calculation on mouse click within bidi-reordered composition.
parent
d19e096e
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
44 additions
and
13 deletions
+44
-13
src/ChangeLog
src/ChangeLog
+12
-0
src/dispnew.c
src/dispnew.c
+16
-0
src/xdisp.c
src/xdisp.c
+16
-13
No files found.
src/ChangeLog
View file @
86282aab
2010-09-22 Kenichi Handa <handa@m17n.org>
* xdisp.c (compute_stop_pos): Call composition_compute_stop_pos
only if we are not at a composition.
(set_iterator_to_next): Give it->end_charpos to
composition_compute_stop_pos.
(set_iterator_to_next, next_element_from_buffer): Likewise.
* dispnew.c (buffer_posn_from_coords): Fix position when the
current display element is a grapheme cluster in bidi-reordered
region.
2010-09-21 Dan Nicolaescu <dann@ics.uci.edu>
* emacs.c: Do not include sys/ioctl.h, not needed.
...
...
src/dispnew.c
View file @
86282aab
...
...
@@ -5420,6 +5420,22 @@ buffer_posn_from_coords (struct window *w, int *x, int *y, struct display_pos *p
if (STRINGP (it.string))
string = it.string;
*pos = it.current;
if (it.what == IT_COMPOSITION
&& it.cmp_it.nchars > 1
&& it.cmp_it.reversed_p)
{
/* The current display element is a grapheme cluster in a
composition. In that case, we need the position of the first
character of the cluster. But, as it.cmp_it.reversed_p is 1,
it.current points to the last character of the cluster, thus
we must move back to the first character of the same
cluster. */
CHARPOS (pos->pos) -= it.cmp_it.nchars - 1;
if (STRINGP (it.string))
BYTEPOS (pos->pos) = string_char_to_byte (string, CHARPOS (pos->pos));
else
BYTEPOS (pos->pos) = CHAR_TO_BYTE (CHARPOS (pos->pos));
}
#ifdef HAVE_WINDOW_SYSTEM
if (it.what == IT_IMAGE)
...
...
src/xdisp.c
View file @
86282aab
...
...
@@ -3177,7 +3177,7 @@ compute_stop_pos (struct it *it)
{
register INTERVAL iv, next_iv;
Lisp_Object object, limit, position;
EMACS_INT charpos, bytepos
, stoppos
;
EMACS_INT charpos, bytepos;
/* If nowhere else, stop at the end. */
it->stop_charpos = it->end_charpos;
...
...
@@ -3267,12 +3267,15 @@ compute_stop_pos (struct it *it)
}
}
if (it->bidi_p && it->bidi_it.scan_dir < 0)
stoppos = -1;
else
stoppos = it->stop_charpos;
composition_compute_stop_pos (&it->cmp_it, charpos, bytepos,
stoppos, it->string);
if (it->cmp_it.id < 0)
{
EMACS_INT stoppos = it->end_charpos;
if (it->bidi_p && it->bidi_it.scan_dir < 0)
stoppos = -1;
composition_compute_stop_pos (&it->cmp_it, charpos, bytepos,
stoppos, it->string);
}
xassert (STRINGP (it->string)
|| (it->stop_charpos >= BEGV
...
...
@@ -6126,7 +6129,7 @@ set_iterator_to_next (struct it *it, int reseat_p)
it->cmp_it.id = -1;
composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it),
IT_BYTEPOS (*it),
it->
stop
_charpos, Qnil);
it->
end
_charpos, Qnil);
}
}
else if (! it->cmp_it.reversed_p)
...
...
@@ -6149,7 +6152,7 @@ set_iterator_to_next (struct it *it, int reseat_p)
{
/* No more grapheme clusters in this composition.
Find the next stop position. */
EMACS_INT stop = it->
stop
_charpos;
EMACS_INT stop = it->
end
_charpos;
if (it->bidi_it.scan_dir < 0)
/* Now we are scanning backward and don't know
where to stop. */
...
...
@@ -6177,7 +6180,7 @@ set_iterator_to_next (struct it *it, int reseat_p)
{
/* No more grapheme clusters in this composition.
Find the next stop position. */
EMACS_INT stop = it->
stop
_charpos;
EMACS_INT stop = it->
end
_charpos;
if (it->bidi_it.scan_dir < 0)
/* Now we are scanning backward and don't know
where to stop. */
...
...
@@ -6210,7 +6213,7 @@ set_iterator_to_next (struct it *it, int reseat_p)
{
/* As the scan direction was changed, we must
re-compute the stop position for composition. */
EMACS_INT stop = it->
stop
_charpos;
EMACS_INT stop = it->
end
_charpos;
if (it->bidi_it.scan_dir < 0)
stop = -1;
composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it),
...
...
@@ -6288,7 +6291,7 @@ set_iterator_to_next (struct it *it, int reseat_p)
composition_compute_stop_pos (&it->cmp_it,
IT_STRING_CHARPOS (*it),
IT_STRING_BYTEPOS (*it),
it->
stop
_charpos, it->string);
it->
end
_charpos, it->string);
}
}
else
...
...
@@ -6705,7 +6708,7 @@ next_element_from_buffer (struct it *it)
IT_BYTEPOS (*it) = it->bidi_it.bytepos;
SET_TEXT_POS (it->position, IT_CHARPOS (*it), IT_BYTEPOS (*it));
{
EMACS_INT stop = it->
stop
_charpos;
EMACS_INT stop = it->
end
_charpos;
if (it->bidi_it.scan_dir < 0)
stop = -1;
composition_compute_stop_pos (&it->cmp_it, IT_CHARPOS (*it),
...
...
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