aboutsummaryrefslogtreecommitdiffstats
path: root/widgets/text
diff options
context:
space:
mode:
authorChristopher James Lahey <clahey@ximian.com>2002-02-07 18:22:59 +0800
committerChris Lahey <clahey@src.gnome.org>2002-02-07 18:22:59 +0800
commit9f1ac34671b0446c8eb8855e0aca62d5b69840b0 (patch)
treeca6f4d720aa6642ddd43c348adb92cb1e5ba0327 /widgets/text
parent6190f4f6879d8533bdb97a7baba33773a6d71d6c (diff)
downloadgsoc2013-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.c101
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;