mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Revert r18638, "Bug #605802: Fix input of Japanese characters..."
Unfortunately this changes the behaviour in the amount entry cell of the register significantly: The string seems to be evaluated into a number right after each keypress, which means one cannot enter arithmetic expressions anymore as they will cause immediate error messages as long as they are not complete. Hence, the patch needs more work. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@18651 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
2e2bc83822
commit
83ab0dfb4f
@ -185,9 +185,7 @@ gnc_item_edit_draw_info (GncItemEdit *item_edit, int x, int y, TextDrawInfo *inf
|
||||
PangoRectangle strong_pos;
|
||||
PangoAttribute *attr;
|
||||
PangoAttrList *attr_list;
|
||||
GnucashSheet *sheet;
|
||||
|
||||
sheet = GNUCASH_SHEET (item_edit->sheet);
|
||||
style = item_edit->style;
|
||||
table = item_edit->sheet->table;
|
||||
|
||||
@ -235,17 +233,6 @@ gnc_item_edit_draw_info (GncItemEdit *item_edit, int x, int y, TextDrawInfo *inf
|
||||
|
||||
info->layout = gtk_widget_create_pango_layout (GTK_WIDGET (item_edit->sheet), text);
|
||||
|
||||
/* IMContext attributes*/
|
||||
if (sheet->preedit_length && sheet->preedit_attrs != NULL) {
|
||||
PangoAttrList *tmp_attrs = pango_attr_list_new ();
|
||||
pango_attr_list_splice (tmp_attrs, sheet->preedit_attrs,
|
||||
g_utf8_offset_to_pointer (text, sheet->preedit_start_position) - text ,
|
||||
g_utf8_offset_to_pointer (text, sheet->preedit_start_position + sheet->preedit_char_length) - text);
|
||||
pango_layout_set_attributes (info->layout, tmp_attrs);
|
||||
pango_attr_list_unref (tmp_attrs);
|
||||
}
|
||||
|
||||
|
||||
/* Selection */
|
||||
if (start_pos != end_pos)
|
||||
{
|
||||
@ -310,17 +297,6 @@ gnc_item_edit_draw_info (GncItemEdit *item_edit, int x, int y, TextDrawInfo *inf
|
||||
info->hatch_rect.height = hd;
|
||||
}
|
||||
|
||||
/* Calcurate IMContext aux window position */
|
||||
{
|
||||
gint xoff, yoff;
|
||||
GdkRectangle rect;
|
||||
rect = info->cursor_rect;
|
||||
gnome_canvas_get_scroll_offsets(GNOME_CANVAS(sheet), &xoff, &yoff);
|
||||
rect.x += (x - xoff);
|
||||
rect.y += (y - yoff);
|
||||
gtk_im_context_set_cursor_location (sheet->im_context, &rect);
|
||||
}
|
||||
|
||||
gnc_item_edit_update_offset (item_edit, info);
|
||||
}
|
||||
|
||||
|
@ -83,17 +83,6 @@ static void gnucash_sheet_deactivate_cursor_cell (GnucashSheet *sheet);
|
||||
static void gnucash_sheet_activate_cursor_cell (GnucashSheet *sheet,
|
||||
gboolean changed_cells);
|
||||
static void gnucash_sheet_stop_editing (GnucashSheet *sheet);
|
||||
static void gnucash_sheet_im_context_reset (GnucashSheet *sheet);
|
||||
static void gnucash_sheet_commit_cb (GtkIMContext *context, const gchar *str,
|
||||
GnucashSheet *sheet);
|
||||
static void gnucash_sheet_preedit_changed_cb (GtkIMContext *context,
|
||||
GnucashSheet *sheet);
|
||||
static gboolean gnucash_sheet_retrieve_surrounding_cb (GtkIMContext *context,
|
||||
GnucashSheet *sheet);
|
||||
static gboolean gnucash_sheet_delete_surrounding_cb (GtkIMContext *context,
|
||||
gint offset,
|
||||
gint n_chars,
|
||||
GnucashSheet *sheet);
|
||||
|
||||
|
||||
/** Implementation *****************************************************/
|
||||
@ -202,41 +191,20 @@ gnucash_sheet_hide_editing_cursor (GnucashSheet *sheet)
|
||||
static void
|
||||
gnucash_sheet_stop_editing (GnucashSheet *sheet)
|
||||
{
|
||||
|
||||
if (sheet->insert_signal != 0)
|
||||
g_signal_handler_disconnect (G_OBJECT(sheet->entry),
|
||||
sheet->insert_signal);
|
||||
if (sheet->delete_signal != 0)
|
||||
g_signal_handler_disconnect (G_OBJECT(sheet->entry),
|
||||
sheet->delete_signal);
|
||||
if (sheet->commit_signal != 0)
|
||||
g_signal_handler_disconnect (G_OBJECT(sheet->im_context),
|
||||
sheet->commit_signal);
|
||||
if (sheet->preedit_changed_signal != 0)
|
||||
g_signal_handler_disconnect (G_OBJECT(sheet->im_context),
|
||||
sheet->preedit_changed_signal);
|
||||
if (sheet->retrieve_surrounding_signal != 0)
|
||||
g_signal_handler_disconnect (G_OBJECT(sheet->im_context),
|
||||
sheet->retrieve_surrounding_signal);
|
||||
if (sheet->delete_surrounding_signal != 0)
|
||||
g_signal_handler_disconnect (G_OBJECT(sheet->im_context),
|
||||
sheet->delete_surrounding_signal);
|
||||
|
||||
sheet->insert_signal = 0;
|
||||
sheet->delete_signal = 0;
|
||||
sheet->commit_signal = 0;
|
||||
sheet->preedit_changed_signal = 0;
|
||||
sheet->retrieve_surrounding_signal = 0;
|
||||
sheet->delete_surrounding_signal = 0;
|
||||
|
||||
gnucash_sheet_im_context_reset(sheet);
|
||||
|
||||
gnucash_sheet_hide_editing_cursor (sheet);
|
||||
|
||||
sheet->editing = FALSE;
|
||||
sheet->input_cancelled = FALSE;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -302,7 +270,6 @@ gnucash_sheet_activate_cursor_cell (GnucashSheet *sheet,
|
||||
gnucash_sheet_redraw_block (sheet, virt_loc.vcell_loc);
|
||||
else
|
||||
{
|
||||
gnucash_sheet_im_context_reset(sheet);
|
||||
gnucash_sheet_start_editing_at_cursor (sheet);
|
||||
|
||||
gtk_editable_set_position (editable, cursor_pos);
|
||||
@ -690,15 +657,9 @@ gnucash_sheet_finalize (GObject *object)
|
||||
if (G_OBJECT_CLASS (sheet_parent_class)->finalize)
|
||||
(*G_OBJECT_CLASS (sheet_parent_class)->finalize)(object);
|
||||
|
||||
/* Clean up IMContext and unref */
|
||||
gnucash_sheet_im_context_reset(sheet);
|
||||
g_object_unref (sheet->im_context);
|
||||
|
||||
|
||||
/* This has to come after the parent destroy, so the item edit
|
||||
destruction can do its disconnects. */
|
||||
g_object_unref (sheet->entry);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -713,8 +674,6 @@ gnucash_sheet_realize (GtkWidget *widget)
|
||||
window = widget->window;
|
||||
gdk_window_set_back_pixmap (GTK_LAYOUT (widget)->bin_window,
|
||||
NULL, FALSE);
|
||||
gtk_im_context_set_client_window( GNUCASH_SHEET (widget)->im_context,
|
||||
window);
|
||||
}
|
||||
|
||||
|
||||
@ -983,59 +942,24 @@ gnucash_sheet_insert_cb (GtkWidget *widget,
|
||||
|
||||
g_signal_stop_emission_by_name (G_OBJECT(sheet->entry),
|
||||
"insert_text");
|
||||
|
||||
}
|
||||
else if (retval == NULL)
|
||||
{
|
||||
retval = old_text;
|
||||
|
||||
/* reset IMContext if disallowed chars and clear preedit*/
|
||||
gnucash_sheet_im_context_reset(sheet);
|
||||
/* the entry was disallowed, so we stop the insert signal */
|
||||
g_signal_stop_emission_by_name (G_OBJECT (sheet->entry),
|
||||
"insert_text");
|
||||
}
|
||||
|
||||
/* sync cursor position and selection to preedit if it exists */
|
||||
if (sheet->preedit_length) {
|
||||
gtk_editable_set_position (editable,
|
||||
sheet->preedit_start_position
|
||||
+ sheet->preedit_cursor_position);
|
||||
}
|
||||
else if (*position < 0)
|
||||
if (*position < 0)
|
||||
*position = g_utf8_strlen(retval, -1);
|
||||
|
||||
#if GTK_ALLOWED_SELECTION_WITHIN_INSERT_SIGNAL
|
||||
if (sheet->preedit_length
|
||||
&& sheet->preedit_selection_length != 0) {
|
||||
gtk_editable_select_region (editable,
|
||||
sheet->preedit_start_position
|
||||
+ sheet->preedit_char_length,
|
||||
sheet->preedit_start_position
|
||||
+ sheet->preedit_char_length
|
||||
+ sheet->preedit_selection_length);
|
||||
}
|
||||
else
|
||||
gtk_editable_select_region (editable, start_sel, end_sel);
|
||||
#else
|
||||
if (sheet->preedit_length
|
||||
&& sheet->preedit_selection_length != 0) {
|
||||
{
|
||||
select_info *info;
|
||||
|
||||
info = g_malloc(sizeof(*info));
|
||||
info->editable = editable;
|
||||
info->start_sel = sheet->preedit_start_position
|
||||
+ sheet->preedit_char_length;
|
||||
info->end_sel = sheet->preedit_start_position
|
||||
+ sheet->preedit_char_length
|
||||
+ sheet->preedit_selection_length;
|
||||
g_timeout_add(/*ASAP*/ 1,
|
||||
(GSourceFunc)gnucash_sheet_select_data_cb,
|
||||
info);
|
||||
|
||||
} else if (start_sel != end_sel) {
|
||||
select_info *info;
|
||||
|
||||
if (start_sel != end_sel) {
|
||||
info = g_malloc(sizeof(*info));
|
||||
info->editable = editable;
|
||||
info->start_sel = start_sel;
|
||||
@ -1044,8 +968,8 @@ gnucash_sheet_insert_cb (GtkWidget *widget,
|
||||
(GSourceFunc)gnucash_sheet_select_data_cb,
|
||||
info);
|
||||
}
|
||||
#endif /* GTK_ALLOWED_SELECTION_WITHIN_INSERT_SIGNAL */
|
||||
|
||||
}
|
||||
#endif
|
||||
g_string_free (new_text_gs, TRUE);
|
||||
g_string_free (change_text_gs, TRUE);
|
||||
}
|
||||
@ -1146,27 +1070,9 @@ gnucash_sheet_delete_cb (GtkWidget *widget,
|
||||
"delete_text");
|
||||
}
|
||||
|
||||
|
||||
/* sync cursor position and selection to preedit if it exists */
|
||||
if (sheet->preedit_length) {
|
||||
gtk_editable_set_position (editable,
|
||||
sheet->preedit_start_position
|
||||
+ sheet->preedit_cursor_position);
|
||||
} else {
|
||||
gtk_editable_set_position (editable, cursor_position);
|
||||
}
|
||||
|
||||
if (sheet->preedit_length
|
||||
&& sheet->preedit_selection_length != 0) {
|
||||
gtk_editable_select_region (editable,
|
||||
sheet->preedit_start_position
|
||||
+ sheet->preedit_char_length,
|
||||
sheet->preedit_start_position
|
||||
+ sheet->preedit_char_length
|
||||
+ sheet->preedit_selection_length);
|
||||
}
|
||||
else if (start_sel != end_sel)
|
||||
gtk_editable_select_region (editable, start_sel, end_sel);
|
||||
if (start_sel != end_sel)
|
||||
gtk_editable_select_region(editable, start_sel, end_sel);
|
||||
|
||||
g_string_free (new_text_gs, TRUE);
|
||||
}
|
||||
@ -1230,7 +1136,6 @@ gnucash_sheet_focus_in_event (GtkWidget *widget, GdkEventFocus *event)
|
||||
(widget, event);
|
||||
|
||||
gnc_item_edit_focus_in (GNC_ITEM_EDIT(sheet->item_editor));
|
||||
gtk_im_context_focus_in(sheet->im_context);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
@ -1244,8 +1149,8 @@ gnucash_sheet_focus_out_event (GtkWidget *widget, GdkEventFocus *event)
|
||||
(*GTK_WIDGET_CLASS (sheet_parent_class)->focus_out_event)
|
||||
(widget, event);
|
||||
|
||||
gtk_im_context_focus_out (sheet->im_context);
|
||||
gnc_item_edit_focus_out (GNC_ITEM_EDIT(sheet->item_editor));
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -1279,27 +1184,8 @@ gnucash_sheet_start_editing_at_cursor (GnucashSheet *sheet)
|
||||
sheet->delete_signal =
|
||||
g_signal_connect(G_OBJECT(sheet->entry), "delete_text",
|
||||
G_CALLBACK(gnucash_sheet_delete_cb), sheet);
|
||||
|
||||
sheet->commit_signal =
|
||||
g_signal_connect (G_OBJECT (sheet->im_context), "commit",
|
||||
G_CALLBACK (gnucash_sheet_commit_cb), sheet);
|
||||
sheet->preedit_changed_signal =
|
||||
g_signal_connect (G_OBJECT (sheet->im_context), "preedit_changed",
|
||||
G_CALLBACK (gnucash_sheet_preedit_changed_cb),
|
||||
sheet);
|
||||
sheet->retrieve_surrounding_signal =
|
||||
g_signal_connect (G_OBJECT (sheet->im_context),
|
||||
"retrieve_surrounding",
|
||||
G_CALLBACK (gnucash_sheet_retrieve_surrounding_cb),
|
||||
sheet);
|
||||
sheet->delete_surrounding_signal =
|
||||
g_signal_connect (G_OBJECT (sheet->im_context), "delete_surrounding",
|
||||
G_CALLBACK (gnucash_sheet_delete_surrounding_cb),
|
||||
sheet);
|
||||
|
||||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
gnucash_motion_event (GtkWidget *widget, GdkEventMotion *event)
|
||||
{
|
||||
@ -1721,9 +1607,6 @@ gnucash_sheet_direct_event(GnucashSheet *sheet, GdkEvent *event)
|
||||
&new_start, &new_end,
|
||||
event);
|
||||
|
||||
/* flag for IMContext */
|
||||
sheet->direct_updated = result;
|
||||
|
||||
changed = FALSE;
|
||||
|
||||
if (new_text != NULL)
|
||||
@ -1762,8 +1645,7 @@ gnucash_sheet_direct_event(GnucashSheet *sheet, GdkEvent *event)
|
||||
}
|
||||
|
||||
static gint
|
||||
gnucash_sheet_key_press_event_internal (GtkWidget *widget, GdkEventKey *event,
|
||||
gboolean is_commit)
|
||||
gnucash_sheet_key_press_event (GtkWidget *widget, GdkEventKey *event)
|
||||
{
|
||||
Table *table;
|
||||
GnucashSheet *sheet;
|
||||
@ -1792,7 +1674,7 @@ gnucash_sheet_key_press_event_internal (GtkWidget *widget, GdkEventKey *event,
|
||||
/* Don't process any keystrokes where a modifier key (Alt,
|
||||
* Meta, etc.) is being held down. This should't include
|
||||
* MOD2, aka NUM LOCK. */
|
||||
if (event->state & (GDK_MOD1_MASK | GDK_MOD3_MASK |
|
||||
if (event->state & (GDK_MOD1_MASK | GDK_MOD3_MASK |
|
||||
GDK_MOD4_MASK | GDK_MOD5_MASK))
|
||||
pass_on = TRUE;
|
||||
|
||||
@ -1889,7 +1771,7 @@ if (event->state & (GDK_MOD1_MASK | GDK_MOD3_MASK |
|
||||
}
|
||||
|
||||
/* Forward the keystroke to the input line */
|
||||
if (pass_on && !is_commit)
|
||||
if (pass_on)
|
||||
return gtk_widget_event (sheet->entry, (GdkEvent *) event);
|
||||
|
||||
abort_move = gnc_table_traverse_update (table, cur_virt_loc,
|
||||
@ -1905,234 +1787,6 @@ if (event->state & (GDK_MOD1_MASK | GDK_MOD3_MASK |
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gint
|
||||
gnucash_sheet_key_press_event (GtkWidget *widget, GdkEventKey *event)
|
||||
{
|
||||
GnucashSheet *sheet;
|
||||
gint result;
|
||||
|
||||
g_return_val_if_fail(widget != NULL, TRUE);
|
||||
g_return_val_if_fail(GNUCASH_IS_SHEET(widget), TRUE);
|
||||
g_return_val_if_fail(event != NULL, TRUE);
|
||||
|
||||
sheet = GNUCASH_SHEET (widget);
|
||||
|
||||
if (gtk_im_context_filter_keypress (sheet->im_context, event)) {
|
||||
sheet->need_im_reset = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
result= gnucash_sheet_key_press_event_internal (widget, event, FALSE);
|
||||
|
||||
sheet->direct_updated = FALSE;
|
||||
return result;
|
||||
}
|
||||
|
||||
static gint
|
||||
gnucash_sheet_key_release_event(GtkWidget *widget, GdkEventKey *event)
|
||||
{
|
||||
GnucashSheet *sheet;
|
||||
|
||||
g_return_val_if_fail(widget != NULL, TRUE);
|
||||
g_return_val_if_fail(GNUCASH_IS_SHEET(widget), TRUE);
|
||||
g_return_val_if_fail(event != NULL, TRUE);
|
||||
|
||||
sheet = GNUCASH_SHEET (widget);
|
||||
|
||||
if(gtk_im_context_filter_keypress (sheet->im_context, event)){
|
||||
sheet->need_im_reset = TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gnucash_sheet_im_context_reset_flags(GnucashSheet *sheet)
|
||||
{
|
||||
sheet->preedit_length = 0;
|
||||
sheet->preedit_char_length = 0;
|
||||
sheet->preedit_start_position = -1;
|
||||
sheet->preedit_cursor_position = 0;
|
||||
sheet->preedit_selection_length = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
gnucash_sheet_im_context_reset(GnucashSheet *sheet)
|
||||
{
|
||||
if (sheet->need_im_reset) {
|
||||
if (sheet->preedit_attrs) {
|
||||
pango_attr_list_unref (sheet->preedit_attrs);
|
||||
sheet->preedit_attrs = NULL;
|
||||
}
|
||||
gtk_im_context_reset (sheet->im_context);
|
||||
sheet->need_im_reset = FALSE;
|
||||
}
|
||||
gnucash_sheet_im_context_reset_flags(sheet);
|
||||
}
|
||||
|
||||
static void
|
||||
gnucash_sheet_commit_cb (GtkIMContext *context, const gchar *str,
|
||||
GnucashSheet *sheet)
|
||||
{
|
||||
GtkEditable *editable;
|
||||
gint tmp_pos, length, sel_start, sel_end;
|
||||
|
||||
g_return_if_fail(strlen(str) > 0);
|
||||
g_return_if_fail(sheet->editing == TRUE);
|
||||
|
||||
editable = GTK_EDITABLE (sheet->entry);
|
||||
|
||||
if(strlen(str) == 1 ) {
|
||||
GdkEvent *event;
|
||||
GdkEventKey *keyevent;
|
||||
|
||||
/* never happen because str is UTF-8 */
|
||||
g_return_if_fail(str[0]> 0);
|
||||
|
||||
/* save cursor and selection */
|
||||
tmp_pos = gtk_editable_get_position(editable);
|
||||
gtk_editable_get_selection_bounds (editable, &sel_start, &sel_end);
|
||||
|
||||
/* Reconstruct keyevent and call key_press_event_internal
|
||||
* to enable accellaration key.
|
||||
* */
|
||||
event = gdk_event_new (GDK_KEY_PRESS);
|
||||
keyevent = (GdkEventKey *) event;
|
||||
keyevent->keyval = gdk_unicode_to_keyval(str[0]);
|
||||
gnucash_sheet_key_press_event_internal((GtkWidget*) sheet, keyevent, TRUE);
|
||||
gdk_event_free(event);
|
||||
|
||||
if( sheet->direct_updated ) {
|
||||
sheet->direct_updated = FALSE;
|
||||
gnucash_sheet_im_context_reset(sheet);
|
||||
return;
|
||||
} else {
|
||||
/* restore cursor and selection */
|
||||
gtk_editable_set_position(editable, tmp_pos);
|
||||
gtk_editable_select_region(editable, sel_start, sel_end);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (gtk_editable_get_selection_bounds (editable, &sel_start, &sel_end)){
|
||||
if (sel_start != sel_end) {
|
||||
gtk_editable_delete_selection (editable);
|
||||
sheet->preedit_selection_length = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* delete preedit string from editable*/
|
||||
if (sheet->preedit_length){
|
||||
gtk_editable_delete_text (editable, sheet->preedit_start_position,
|
||||
sheet->preedit_start_position + sheet->preedit_char_length);
|
||||
|
||||
}
|
||||
|
||||
tmp_pos = (sheet->preedit_start_position == -1)?
|
||||
gtk_editable_get_position (editable)
|
||||
:sheet->preedit_start_position;
|
||||
gtk_editable_insert_text (editable, str, strlen (str), &tmp_pos);
|
||||
gtk_editable_set_position (editable, tmp_pos);
|
||||
|
||||
gnucash_sheet_im_context_reset_flags(sheet);
|
||||
}
|
||||
|
||||
static void
|
||||
gnucash_sheet_preedit_changed_cb (GtkIMContext *context, GnucashSheet *sheet)
|
||||
{
|
||||
gchar *preedit_string;
|
||||
GtkEditable *editable;
|
||||
|
||||
g_return_if_fail(context != NULL);
|
||||
g_return_if_fail(sheet->editing == TRUE);
|
||||
|
||||
editable = GTK_EDITABLE (sheet->entry);
|
||||
|
||||
/* save preedit start position and selection */
|
||||
if(sheet->preedit_length == 0) {
|
||||
int start_pos, end_pos;
|
||||
if ( gtk_editable_get_selection_bounds (editable, &start_pos, &end_pos)) {
|
||||
sheet->preedit_start_position = start_pos;
|
||||
sheet->preedit_selection_length = end_pos - start_pos;
|
||||
} else {
|
||||
sheet->preedit_start_position =
|
||||
gtk_editable_get_position (editable);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (sheet->preedit_attrs)
|
||||
pango_attr_list_unref (sheet->preedit_attrs);
|
||||
|
||||
gtk_im_context_get_preedit_string (sheet->im_context, &preedit_string,
|
||||
&sheet->preedit_attrs, &(sheet->preedit_cursor_position));
|
||||
|
||||
if (sheet->preedit_length)
|
||||
gtk_editable_delete_text (editable, sheet->preedit_start_position,
|
||||
sheet->preedit_start_position + sheet->preedit_char_length);
|
||||
|
||||
sheet->preedit_length = strlen (preedit_string);
|
||||
sheet->preedit_char_length = g_utf8_strlen(preedit_string, -1);
|
||||
|
||||
if (sheet->preedit_length) {
|
||||
int tmp_pos = sheet->preedit_start_position;
|
||||
gtk_editable_insert_text (editable, preedit_string, sheet->preedit_length, &tmp_pos);
|
||||
gtk_editable_set_position (editable, sheet->preedit_start_position
|
||||
+ sheet->preedit_cursor_position);
|
||||
|
||||
if( sheet->preedit_selection_length != 0) {
|
||||
gtk_editable_select_region (editable,
|
||||
sheet->preedit_start_position
|
||||
+ sheet->preedit_char_length,
|
||||
sheet->preedit_start_position
|
||||
+ sheet->preedit_char_length
|
||||
+ sheet->preedit_selection_length);
|
||||
}
|
||||
|
||||
} else {
|
||||
gnucash_sheet_im_context_reset_flags(sheet);
|
||||
}
|
||||
|
||||
g_free (preedit_string);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gnucash_sheet_retrieve_surrounding_cb (GtkIMContext *context, GnucashSheet *sheet)
|
||||
{
|
||||
GtkEditable *editable;
|
||||
gchar *surrounding;
|
||||
gint cur_pos;
|
||||
|
||||
editable = GTK_EDITABLE (sheet->entry);
|
||||
surrounding = gtk_editable_get_chars (editable, 0, -1);
|
||||
cur_pos = gtk_editable_get_position (editable);
|
||||
|
||||
gtk_im_context_set_surrounding (context,
|
||||
surrounding, strlen (surrounding),
|
||||
g_utf8_offset_to_pointer (surrounding, cur_pos) - surrounding);
|
||||
|
||||
g_free (surrounding);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gnucash_sheet_delete_surrounding_cb (GtkIMContext *context, gint offset,
|
||||
gint n_chars, GnucashSheet *sheet)
|
||||
{
|
||||
GtkEditable *editable;
|
||||
gint cur_pos;
|
||||
|
||||
editable = GTK_EDITABLE (sheet->entry);
|
||||
cur_pos = gtk_editable_get_position (editable);
|
||||
|
||||
gtk_editable_delete_text (editable,
|
||||
cur_pos + offset,
|
||||
cur_pos + offset + n_chars);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
gnucash_sheet_goto_virt_loc (GnucashSheet *sheet, VirtualLocation virt_loc)
|
||||
@ -2685,7 +2339,6 @@ gnucash_sheet_create_color_hack(GnucashSheet *sheet)
|
||||
g_signal_connect_after(sheet, "realize",
|
||||
G_CALLBACK(gnucash_sheet_realize_entry),
|
||||
sheet->split_color);
|
||||
|
||||
}
|
||||
|
||||
/*************************************************************/
|
||||
@ -2715,7 +2368,6 @@ gnucash_sheet_class_init (GnucashSheetClass *class)
|
||||
widget_class->focus_out_event = gnucash_sheet_focus_out_event;
|
||||
|
||||
widget_class->key_press_event = gnucash_sheet_key_press_event;
|
||||
widget_class->key_release_event = gnucash_sheet_key_release_event;
|
||||
widget_class->button_press_event = gnucash_button_press_event;
|
||||
widget_class->button_release_event = gnucash_button_release_event;
|
||||
widget_class->motion_notify_event = gnucash_motion_event;
|
||||
@ -2760,22 +2412,6 @@ gnucash_sheet_init (GnucashSheet *sheet)
|
||||
sheet->blocks = g_table_new (sizeof (SheetBlock),
|
||||
gnucash_sheet_block_construct,
|
||||
gnucash_sheet_block_destroy, NULL);
|
||||
|
||||
/* setup IMContext */
|
||||
sheet->im_context = gtk_im_multicontext_new ();
|
||||
sheet->preedit_length = 0;
|
||||
sheet->preedit_char_length = 0;
|
||||
sheet->preedit_start_position = -1;
|
||||
sheet->preedit_cursor_position = 0;
|
||||
sheet->preedit_selection_length = 0;
|
||||
sheet->preedit_attrs = NULL;
|
||||
sheet->direct_updated = FALSE;
|
||||
sheet->need_im_reset = FALSE;
|
||||
sheet->commit_signal = 0;
|
||||
sheet->preedit_changed_signal = 0;
|
||||
sheet->retrieve_surrounding_signal = 0;
|
||||
sheet->delete_surrounding_signal = 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -2851,17 +2487,6 @@ gnucash_sheet_new (Table *table)
|
||||
#endif
|
||||
/*gtk_layout_put (GTK_LAYOUT (sheet), sheet->entry, 0, 0);*/
|
||||
|
||||
/* disable IMContext of GtkEntry widget because we handle
|
||||
IMContext on the GnucashSheet widget.
|
||||
{
|
||||
GValue im_name = {0};
|
||||
g_value_init (&im_name, G_TYPE_STRING);
|
||||
g_value_set_static_string (&im_name, "none");
|
||||
g_object_set_property((GObject*) (sheet->entry), "im-module",
|
||||
&im_name);
|
||||
}
|
||||
*/
|
||||
|
||||
/* set up the editor */
|
||||
sheet->item_editor = gnc_item_edit_new(sheet_group, sheet, sheet->entry);
|
||||
|
||||
|
@ -126,23 +126,6 @@ typedef struct
|
||||
|
||||
GFunc moved_cb;
|
||||
gpointer moved_cb_data;
|
||||
|
||||
/* IMContext */
|
||||
GtkIMContext *im_context;
|
||||
gint preedit_length; /* num of bytes */
|
||||
gint preedit_char_length; /* num of chars in UTF-8 */
|
||||
gint preedit_start_position; /* save preedit start position *
|
||||
* combined with selection start */
|
||||
gint preedit_cursor_position; /* save preedit cursor position */
|
||||
gint preedit_selection_length;
|
||||
PangoAttrList *preedit_attrs;
|
||||
gboolean direct_updated;
|
||||
gboolean need_im_reset;
|
||||
guint commit_signal;
|
||||
guint preedit_changed_signal;
|
||||
guint retrieve_surrounding_signal;
|
||||
guint delete_surrounding_signal;
|
||||
|
||||
} GnucashSheet;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user