aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/ephy-string.c55
-rw-r--r--lib/ephy-string.h5
-rw-r--r--lib/widgets/eggtreemultidnd.c10
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
{