mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Scott Oonk's patch to allows selection of the last character in a
cell. Also fix selection/highlighting of multi-byte characters. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@11893 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
a5b0d74d41
commit
ec8389b6d5
@ -1,5 +1,9 @@
|
|||||||
2005-11-09 Scott Oonk <scott.oonk@gmail.com>
|
2005-11-09 Scott Oonk <scott.oonk@gmail.com>
|
||||||
|
|
||||||
|
* src/register/register-gnome/gnucash-item-edit.c: This patch
|
||||||
|
allows selection of the last character in a cell. Also fix
|
||||||
|
selection/highlighting of multi-byte characters.
|
||||||
|
|
||||||
* src/register/register-gnome/gnucash-sheet.c: This patch
|
* src/register/register-gnome/gnucash-sheet.c: This patch
|
||||||
simplifies the keyboard selection in gnucash-sheet. Fixes a
|
simplifies the keyboard selection in gnucash-sheet. Fixes a
|
||||||
problem where selection does not work correctly when holding
|
problem where selection does not work correctly when holding
|
||||||
|
@ -132,7 +132,7 @@ gnc_item_edit_draw_info (GncItemEdit *item_edit, int x, int y, TextDrawInfo *inf
|
|||||||
|
|
||||||
int xd, yd, wd, hd, dx, dy;
|
int xd, yd, wd, hd, dx, dy;
|
||||||
int start_pos, end_pos;
|
int start_pos, end_pos;
|
||||||
int toggle_space, cursor_pos;
|
int toggle_space, cursor_pos, cursor_byte_pos;
|
||||||
const gchar *text;
|
const gchar *text;
|
||||||
PangoRectangle strong_pos;
|
PangoRectangle strong_pos;
|
||||||
PangoAttribute *attr;
|
PangoAttribute *attr;
|
||||||
@ -162,28 +162,37 @@ gnc_item_edit_draw_info (GncItemEdit *item_edit, int x, int y, TextDrawInfo *inf
|
|||||||
info->fg_color2 = &gn_white;
|
info->fg_color2 = &gn_white;
|
||||||
|
|
||||||
editable = GTK_EDITABLE (item_edit->editor);
|
editable = GTK_EDITABLE (item_edit->editor);
|
||||||
cursor_pos = gtk_editable_get_position (editable);
|
|
||||||
gtk_editable_get_selection_bounds (editable, &start_pos, &end_pos);
|
|
||||||
|
|
||||||
text = gtk_entry_get_text (GTK_ENTRY (item_edit->editor));
|
text = gtk_entry_get_text (GTK_ENTRY (item_edit->editor));
|
||||||
|
cursor_pos = gtk_editable_get_position (editable);
|
||||||
|
cursor_byte_pos = g_utf8_offset_to_pointer (text, cursor_pos) - text;
|
||||||
|
|
||||||
|
gtk_editable_get_selection_bounds (editable, &start_pos, &end_pos);
|
||||||
|
|
||||||
info->layout = gtk_widget_create_pango_layout (GTK_WIDGET (item_edit->sheet), text);
|
info->layout = gtk_widget_create_pango_layout (GTK_WIDGET (item_edit->sheet), text);
|
||||||
|
|
||||||
/* Selection */
|
/* Selection */
|
||||||
attr_list = pango_attr_list_new ();
|
if (start_pos != end_pos)
|
||||||
|
{
|
||||||
|
gint start_byte_pos, end_byte_pos;
|
||||||
|
|
||||||
attr = pango_attr_foreground_new (0xffff, 0xffff, 0xffff);
|
start_byte_pos = g_utf8_offset_to_pointer (text, start_pos) - text;
|
||||||
attr->start_index = start_pos;
|
end_byte_pos = g_utf8_offset_to_pointer (text, end_pos) - text;
|
||||||
attr->end_index = end_pos;
|
|
||||||
pango_attr_list_insert (attr_list, attr);
|
|
||||||
|
|
||||||
attr = pango_attr_background_new (0x0, 0x0, 0x0);
|
|
||||||
attr->start_index = start_pos;
|
|
||||||
attr->end_index = end_pos;
|
|
||||||
pango_attr_list_insert (attr_list, attr);
|
|
||||||
|
|
||||||
pango_layout_set_attributes (info->layout, attr_list);
|
attr_list = pango_attr_list_new ();
|
||||||
pango_attr_list_unref (attr_list);
|
|
||||||
|
attr = pango_attr_foreground_new (0xffff, 0xffff, 0xffff);
|
||||||
|
attr->start_index = start_byte_pos;
|
||||||
|
attr->end_index = end_byte_pos;
|
||||||
|
pango_attr_list_insert (attr_list, attr);
|
||||||
|
|
||||||
|
attr = pango_attr_background_new (0x0, 0x0, 0x0);
|
||||||
|
attr->start_index = start_byte_pos;
|
||||||
|
attr->end_index = end_byte_pos;
|
||||||
|
pango_attr_list_insert (attr_list, attr);
|
||||||
|
|
||||||
|
pango_layout_set_attributes (info->layout, attr_list);
|
||||||
|
pango_attr_list_unref (attr_list);
|
||||||
|
}
|
||||||
|
|
||||||
gnc_item_edit_get_pixel_coords (item_edit, &xd, &yd, &wd, &hd);
|
gnc_item_edit_get_pixel_coords (item_edit, &xd, &yd, &wd, &hd);
|
||||||
|
|
||||||
@ -225,7 +234,7 @@ gnc_item_edit_draw_info (GncItemEdit *item_edit, int x, int y, TextDrawInfo *inf
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
pango_layout_get_cursor_pos (info->layout, cursor_pos, NULL, &strong_pos);
|
pango_layout_get_cursor_pos (info->layout, cursor_byte_pos, &strong_pos, NULL);
|
||||||
info->cursor = strong_pos;
|
info->cursor = strong_pos;
|
||||||
|
|
||||||
if (info->hatching)
|
if (info->hatching)
|
||||||
@ -753,14 +762,17 @@ gnc_item_edit_set_cursor_pos (GncItemEdit *item_edit,
|
|||||||
// get the text index for the mouse position into pos
|
// get the text index for the mouse position into pos
|
||||||
{
|
{
|
||||||
PangoLayout *layout;
|
PangoLayout *layout;
|
||||||
int textIndex, textTrailing;
|
int textByteIndex, textIndex, textTrailing;
|
||||||
gboolean insideText;
|
gboolean insideText;
|
||||||
|
const gchar *text;
|
||||||
|
|
||||||
layout = gtk_entry_get_layout( GTK_ENTRY(item_edit->editor) );
|
layout = gtk_entry_get_layout( GTK_ENTRY(item_edit->editor) );
|
||||||
|
text = pango_layout_get_text (layout);
|
||||||
insideText = pango_layout_xy_to_index( layout,
|
insideText = pango_layout_xy_to_index( layout,
|
||||||
(x - o_x) * PANGO_SCALE, 10 * PANGO_SCALE,
|
((x - o_x) - CELL_HPADDING) * PANGO_SCALE, 10 * PANGO_SCALE,
|
||||||
&textIndex, &textTrailing );
|
&textByteIndex, &textTrailing );
|
||||||
pos = textIndex;
|
textIndex = (int) g_utf8_pointer_to_offset (text, text + textByteIndex);
|
||||||
|
pos = textIndex + textTrailing;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (extend_selection)
|
if (extend_selection)
|
||||||
@ -1722,5 +1734,3 @@ gnc_item_edit_selection_received (GncItemEdit *item_edit,
|
|||||||
c-basic-offset: 8
|
c-basic-offset: 8
|
||||||
End:
|
End:
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user