- if (!(compose->focused_editable && GTK_WIDGET_HAS_FOCUS(compose->focused_editable))) return;
-
- switch (action) {
- case COMPOSE_CALL_GTK_STEXT_MOVE_BEGINNING_OF_LINE:
- gtk_stext_move_beginning_of_line(GTK_STEXT(compose->focused_editable));
- break;
- case COMPOSE_CALL_GTK_STEXT_MOVE_FORWARD_CHARACTER:
- gtk_stext_move_forward_character(GTK_STEXT(compose->focused_editable));
- break;
- case COMPOSE_CALL_GTK_STEXT_MOVE_BACKWARD_CHARACTER:
- gtk_stext_move_backward_character(GTK_STEXT(compose->focused_editable));
- break;
- case COMPOSE_CALL_GTK_STEXT_MOVE_FORWARD_WORD:
- gtk_stext_move_forward_word(GTK_STEXT(compose->focused_editable));
- break;
- case COMPOSE_CALL_GTK_STEXT_MOVE_BACKWARD_WORD:
- gtk_stext_move_backward_word(GTK_STEXT(compose->focused_editable));
- break;
- case COMPOSE_CALL_GTK_STEXT_MOVE_END_OF_LINE:
- gtk_stext_move_end_of_line(GTK_STEXT(compose->focused_editable));
- break;
- case COMPOSE_CALL_GTK_STEXT_MOVE_NEXT_LINE:
- gtk_stext_move_next_line(GTK_STEXT(compose->focused_editable));
- break;
- case COMPOSE_CALL_GTK_STEXT_MOVE_PREVIOUS_LINE:
- gtk_stext_move_previous_line(GTK_STEXT(compose->focused_editable));
- break;
- case COMPOSE_CALL_GTK_STEXT_DELETE_FORWARD_CHARACTER:
- gtk_stext_delete_forward_character(GTK_STEXT(compose->focused_editable));
- break;
- case COMPOSE_CALL_GTK_STEXT_DELETE_BACKWARD_CHARACTER:
- gtk_stext_delete_backward_character(GTK_STEXT(compose->focused_editable));
- break;
- case COMPOSE_CALL_GTK_STEXT_DELETE_FORWARD_WORD:
- gtk_stext_delete_forward_word(GTK_STEXT(compose->focused_editable));
- break;
- case COMPOSE_CALL_GTK_STEXT_DELETE_BACKWARD_WORD:
- gtk_stext_delete_backward_word(GTK_STEXT(compose->focused_editable));
- break;
- case COMPOSE_CALL_GTK_STEXT_DELETE_LINE:
- gtk_stext_delete_line(GTK_STEXT(compose->focused_editable));
- break;
- case COMPOSE_CALL_GTK_STEXT_DELETE_LINE_N:
- gtk_stext_delete_line(GTK_STEXT(compose->focused_editable));
- gtk_stext_delete_forward_character(GTK_STEXT(compose->focused_editable));
- break;
- case COMPOSE_CALL_GTK_STEXT_DELETE_TO_LINE_END:
- gtk_stext_delete_to_line_end(GTK_STEXT(compose->focused_editable));
- break;
- default:
- break;
- }
+ GtkSText *text = GTK_STEXT(compose->text);
+ static struct {
+ void (*do_action) (GtkSText *text);
+ } action_table[] = {
+ {gtk_stext_move_beginning_of_line},
+ {gtk_stext_move_forward_character},
+ {gtk_stext_move_backward_character},
+ {gtk_stext_move_forward_word},
+ {gtk_stext_move_backward_word},
+ {gtk_stext_move_end_of_line},
+ {gtk_stext_move_next_line},
+ {gtk_stext_move_previous_line},
+ {gtk_stext_delete_forward_character},
+ {gtk_stext_delete_backward_character},
+ {gtk_stext_delete_forward_word},
+ {gtk_stext_delete_backward_word},
+ {gtk_stext_delete_line},
+ {gtk_stext_delete_line}, /* gtk_stext_delete_line_n */
+ {gtk_stext_delete_to_line_end}
+ };
+
+ if (!GTK_WIDGET_HAS_FOCUS(text)) return;
+
+ if (action >= COMPOSE_CALL_GTK_STEXT_MOVE_BEGINNING_OF_LINE &&
+ action <= COMPOSE_CALL_GTK_STEXT_DELETE_TO_LINE_END)
+ action_table[action].do_action(text);