484a237002
Since mutter@33088d59 the cursor we receive from mutter already is a character index while the code here still treated it like a byte offset. Further the code to detect the previous word position was treating the cursor parameter already like a character index, while passing the cursor that was prior to that commit a byte offset. The function also had some unreachable and redundant code paths. The pos < 0 case can never be reached due to the max(). Also the regex already ensures that all whitespace is considered, so the code to remove spaces not actually do anything except when deleting the first word in the text, in which it would cause the first character to not get deleted. Also it was not handling characters with more than 2 bytes correctly. In the presence of these JS string functions, such as search(), can not be considered to operate on character indices anymore but rather the number of UTF-16 byte pairs. Issues with this can be avoided by using iterators, which unlike anything else iterate on characters, not byte pairs and by not using the results returned by JS string functions for anything but JS strings. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2746>