diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/ephy-string.c | 55 | ||||
-rw-r--r-- | lib/ephy-string.h | 5 | ||||
-rw-r--r-- | lib/widgets/eggtreemultidnd.c | 10 |
3 files changed, 70 insertions, 0 deletions
diff --git a/lib/ephy-string.c b/lib/ephy-string.c index 7ca28cf1f..391b275f8 100644 --- a/lib/ephy-string.c +++ b/lib/ephy-string.c @@ -444,3 +444,58 @@ ephy_strsplit_multiple_delimiters_with_quotes (const gchar *string, return str_array; } + +char * +ephy_str_replace_substring (const char *string, + const char *substring, + const char *replacement) +{ + int substring_length, replacement_length, result_length, remaining_length; + const char *p, *substring_position; + char *result, *result_position; + + g_return_val_if_fail (substring != NULL, g_strdup (string)); + g_return_val_if_fail (substring[0] != '\0', g_strdup (string)); + + if (string == NULL) + { + return NULL; + } + + substring_length = strlen (substring); + replacement_length = replacement == NULL ? 0 : strlen (replacement); + + result_length = strlen (string); + for (p = string; ; p = substring_position + substring_length) + { + substring_position = strstr (p, substring); + if (substring_position == NULL) + { + break; + } + result_length += replacement_length - substring_length; + } + + result = g_malloc (result_length + 1); + + result_position = result; + for (p = string; ; p = substring_position + substring_length) + { + substring_position = strstr (p, substring); + if (substring_position == NULL) + { + remaining_length = strlen (p); + memcpy (result_position, p, remaining_length); + result_position += remaining_length; + break; + } + memcpy (result_position, p, substring_position - p); + result_position += substring_position - p; + memcpy (result_position, replacement, replacement_length); + result_position += replacement_length; + } + g_assert (result_position - result == result_length); + result_position[0] = '\0'; + + return result; +} diff --git a/lib/ephy-string.h b/lib/ephy-string.h index cc60bd638..3c57d08de 100644 --- a/lib/ephy-string.h +++ b/lib/ephy-string.h @@ -57,6 +57,11 @@ char **ephy_strsplit_multiple_delimiters_with_quotes (const gchar *string gint max_tokens, const gchar *quotes); +char *ephy_str_replace_substring (const char *string, + const char *substring, + const char *replacement); + + G_END_DECLS diff --git a/lib/widgets/eggtreemultidnd.c b/lib/widgets/eggtreemultidnd.c index 8be54f442..5215a7bfc 100644 --- a/lib/widgets/eggtreemultidnd.c +++ b/lib/widgets/eggtreemultidnd.c @@ -22,6 +22,7 @@ #include <gtk/gtksignal.h> #include <gtk/gtkwidget.h> #include <gtk/gtkmain.h> +#include <gtk/gtkstock.h> #include "eggtreemultidnd.h" #define EGG_TREE_MULTI_DND_STRING "EggTreeMultiDndString" @@ -325,6 +326,15 @@ egg_tree_multi_drag_motion_event (GtkWidget *widget, priv_data->pressed_button, (GdkEvent*)event); set_context_data (context, path_list); + + if (g_list_length (path_list) > 1) + { + gtk_drag_set_icon_stock (context, GTK_STOCK_DND_MULTIPLE, -2, -2); + } + else + { + gtk_drag_set_icon_stock (context, GTK_STOCK_DND, -2, -2); + } } else { |