diff options
author | Christopher James Lahey <clahey@ximian.com> | 2002-02-07 18:22:59 +0800 |
---|---|---|
committer | Chris Lahey <clahey@src.gnome.org> | 2002-02-07 18:22:59 +0800 |
commit | 9f1ac34671b0446c8eb8855e0aca62d5b69840b0 (patch) | |
tree | ca6f4d720aa6642ddd43c348adb92cb1e5ba0327 /widgets/text | |
parent | 6190f4f6879d8533bdb97a7baba33773a6d71d6c (diff) | |
download | gsoc2013-evolution-9f1ac34671b0446c8eb8855e0aca62d5b69840b0.tar.gz gsoc2013-evolution-9f1ac34671b0446c8eb8855e0aca62d5b69840b0.tar.zst gsoc2013-evolution-9f1ac34671b0446c8eb8855e0aca62d5b69840b0.zip |
Bumped the version number to 0.19.99.5.
2002-02-07 Christopher James Lahey <clahey@ximian.com>
* configure.in: Bumped the version number to 0.19.99.5.
* gal/Makefile.am (libgal_la_LIBADD): Added
menus/gal-view-instance-save-as-dialog.lo.
* gal/e-text/e-text.c (next_word): Contains refactored code from
the E_TEP_FORWARD_WORD case of e_text_command.
(e_text_command): Implemented E_TEP_CAPS.
From gal/menus/ChangeLog:
2002-02-07 Christopher James Lahey <clahey@ximian.com>
* Makefile.am (glade_DATA): Added
gal-view-instance-save-as-dialog.glade.
(libgalmenus_la_SOURCES): Added
gal-view-instance-save-as-dialog.c.
(libgalmenusinclude_HEADERS): Added
gal-view-instance-save-as-dialog.h.
* gal-view-collection.c, gal-view-collection.h
(gal_view_collection_append_with_title): Added this new version of
the append function that sets the title and returns the new id as
well.
(gal_view_collection_set_nth_view): Added this function to save
over another view.
(gal_view_collection_get_default_view,
gal_view_collection_set_default_view): Added the concept of a
default view for GalViewCollections.
* gal-view-etable.c, gal-view-etable.h
(gal_view_etable_attach_table, gal_view_etable_attach_tree,
gal_view_etable_detach): Added functions to set the state of a
table or tree and then send GalView "changed" signals whenever
that state changes.
(gal_view_etable_set_state): New function to set the ETableState
of a GalViewETable.
* gal-view-instance-save-as-dialog.c,
gal-view-instance-save-as-dialog.glade,
gal-view-instance-save-as-dialog.h: New dialog to save the current
custom view as a named view.
* gal-view-instance.c, gal-view-instance.h
(gal_view_instance_set_custom_view): New function to set the state
of an instance to custom view and set the custom view to a
particular GalView.
(gal_view_instance_exists): New function to check if this
particular instance has ever been opened before. Use before
gal_view_instance_load.
(gal_view_instance_save_as): New function to open a save as
dialog.
(gal_view_instance_load): Added this function which used to be
part of _construct. This function can be called multiple times,
and those extra times will be ignored. This is so you can set a
default view before loading.
(gal_view_instance_get_default_view,
gal_view_instance_set_default_view): Set the default view for this
instance. If unset, this falls back to the default view for the
corresponding GalViewCollection.
svn path=/trunk/; revision=15590
Diffstat (limited to 'widgets/text')
-rw-r--r-- | widgets/text/e-text.c | 101 |
1 files changed, 79 insertions, 22 deletions
diff --git a/widgets/text/e-text.c b/widgets/text/e-text.c index 4439a3e9bf..2dc03d9a25 100644 --- a/widgets/text/e-text.c +++ b/widgets/text/e-text.c @@ -3299,6 +3299,31 @@ e_text_event (GnomeCanvasItem *item, GdkEvent *event) /* fixme: */ static int +next_word (EText *text, int start) +{ + char *p; + int length; + + length = strlen (text->text); + + if (start >= length) { + return length; + } else { + p = g_utf8_next_char (text->text + start); + + while (p && *p && g_unichar_validate (g_utf8_get_char (p))) { + gunichar unival = g_utf8_get_char (p); + if (g_unichar_isspace (unival)) { + return p - text->text; + } else + p = g_utf8_next_char (p); + } + } + + return p - text->text; +} + +static int _get_position(EText *text, ETextEventProcessorCommand *command) { int length, obj_num; @@ -3393,28 +3418,7 @@ _get_position(EText *text, ETextEventProcessorCommand *command) break; case E_TEP_FORWARD_WORD: - new_pos = -1; - length = strlen (text->text); - - if (text->selection_end >= length) { - new_pos = length; - } else { - - p = g_utf8_next_char (text->text + text->selection_end); - - while (p && *p && g_unichar_validate (g_utf8_get_char (p))) { - unival = g_utf8_get_char (p); - if (g_unichar_isspace (unival)) { - new_pos = p - text->text; - p = NULL; - } else - p = g_utf8_next_char (p); - } - } - - if (new_pos == -1) - new_pos = p - text->text; - + new_pos = next_word (text, text->selection_end); break; case E_TEP_BACKWARD_WORD: @@ -3586,6 +3590,50 @@ _insert(EText *text, char *string, int value) } static void +capitalize (EText *text, int start, int end, ETextEventProcessorCaps type) +{ + gboolean first = TRUE; + const char *p = text->text + start; + const char *text_end = text->text + end; + char *new_text = g_new0 (char, g_utf8_strlen (text->text + start, start - end) * 6); + char *output = new_text; + + while (p && *p && p < text_end && g_unichar_validate (g_utf8_get_char (p))) { + gunichar unival = g_utf8_get_char (p); + gunichar newval = unival; + + switch (type) { + case E_TEP_CAPS_UPPER: + newval = g_unichar_toupper (unival); + break; + case E_TEP_CAPS_LOWER: + newval = g_unichar_tolower (unival); + break; + case E_TEP_CAPS_TITLE: + if (g_unichar_isalpha (unival)) { + if (first) + newval = g_unichar_totitle (unival); + else + newval = g_unichar_tolower (unival); + first = FALSE; + } else { + first = TRUE; + } + break; + } + g_unichar_to_utf8 (newval, output); + output = g_utf8_next_char (output); + + p = g_utf8_next_char (p); + } + *output = 0; + + e_text_model_delete (text->model, start, end - start); + e_text_model_insert (text->model, start, new_text); + g_free (new_text); +} + +static void e_text_command(ETextEventProcessor *tep, ETextEventProcessorCommand *command, gpointer data) { EText *text = E_TEXT(data); @@ -3678,6 +3726,15 @@ e_text_command(ETextEventProcessor *tep, ETextEventProcessorCommand *command, gp gnome_canvas_item_ungrab (GNOME_CANVAS_ITEM(text), command->time); scroll = FALSE; break; + case E_TEP_CAPS: + if (text->selection_start == text->selection_end) { + capitalize (text, text->selection_start, next_word (text, text->selection_start), command->value); + } else { + int selection_start = MIN (text->selection_start, text->selection_end); + int selection_end = text->selection_start + text->selection_end - selection_start; /* Slightly faster than MAX */ + capitalize (text, selection_start, selection_end, command->value); + } + break; case E_TEP_NOP: scroll = FALSE; break; |