diff options
author | Marco Pesenti Gritti <marco@it.gnome.org> | 2003-01-03 04:24:53 +0800 |
---|---|---|
committer | Marco Pesenti Gritti <mpeseng@src.gnome.org> | 2003-01-03 04:24:53 +0800 |
commit | 71219970c53e84d98edc9ac59ef22c8b07fdffa8 (patch) | |
tree | ba834d7cb70b834e38a8de16c0a05c3a0b008b0f | |
parent | 2dd166055fa8702ad52df80d2927f8560b4f73f6 (diff) | |
download | gsoc2013-epiphany-71219970c53e84d98edc9ac59ef22c8b07fdffa8.tar gsoc2013-epiphany-71219970c53e84d98edc9ac59ef22c8b07fdffa8.tar.gz gsoc2013-epiphany-71219970c53e84d98edc9ac59ef22c8b07fdffa8.tar.bz2 gsoc2013-epiphany-71219970c53e84d98edc9ac59ef22c8b07fdffa8.tar.lz gsoc2013-epiphany-71219970c53e84d98edc9ac59ef22c8b07fdffa8.tar.xz gsoc2013-epiphany-71219970c53e84d98edc9ac59ef22c8b07fdffa8.tar.zst gsoc2013-epiphany-71219970c53e84d98edc9ac59ef22c8b07fdffa8.zip |
Use gtk icons for dnd. Basic implementation of bookmarks importing. Still
2003-01-02 Marco Pesenti Gritti <marco@it.gnome.org>
* lib/ephy-string.c: (ephy_str_replace_substring):
* lib/ephy-string.h:
* lib/widgets/eggtreemultidnd.c:
(egg_tree_multi_drag_motion_event):
* src/bookmarks/Makefile.am:
Use gtk icons for dnd.
Basic implementation of bookmarks importing. Still
not used but functional.
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | lib/ephy-string.c | 55 | ||||
-rw-r--r-- | lib/ephy-string.h | 5 | ||||
-rw-r--r-- | lib/widgets/eggtreemultidnd.c | 10 | ||||
-rw-r--r-- | src/bookmarks/Makefile.am | 14 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmarks-import.c | 93 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmarks-import.h | 31 |
7 files changed, 215 insertions, 5 deletions
@@ -1,3 +1,15 @@ +2003-01-02 Marco Pesenti Gritti <marco@it.gnome.org> + + * lib/ephy-string.c: (ephy_str_replace_substring): + * lib/ephy-string.h: + * lib/widgets/eggtreemultidnd.c: + (egg_tree_multi_drag_motion_event): + * src/bookmarks/Makefile.am: + + Use gtk icons for dnd. + Basic implementation of bookmarks importing. Still + not used but functional. + 2003-01-01 Marco Pesenti Gritti <marco@it.gnome.org> * embed/Makefile.am: 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 { diff --git a/src/bookmarks/Makefile.am b/src/bookmarks/Makefile.am index 4dd24c1bd..098462cfa 100644 --- a/src/bookmarks/Makefile.am +++ b/src/bookmarks/Makefile.am @@ -19,13 +19,17 @@ noinst_LTLIBRARIES = libephybookmarks.la libephybookmarks_la_SOURCES = \ ephy-bookmarks.c \ ephy-bookmarks.h \ - ephy-tree-model-node.c \ - ephy-tree-model-node.h \ - ephy-node-view.c \ - ephy-node-view.h \ ephy-bookmarks-editor.c \ ephy-bookmarks-editor.h \ + ephy-bookmarks-import.c \ + ephy-bookmarks-import.h \ ephy-keywords-entry.c \ ephy-keywords-entry.h \ ephy-new-bookmark.c \ - ephy-new-bookmark.h + ephy-new-bookmark.h \ + ephy-node-view.c \ + ephy-node-view.h \ + ephy-tree-model-node.c \ + ephy-tree-model-node.h + + diff --git a/src/bookmarks/ephy-bookmarks-import.c b/src/bookmarks/ephy-bookmarks-import.c new file mode 100644 index 000000000..19eaecc0b --- /dev/null +++ b/src/bookmarks/ephy-bookmarks-import.c @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2003 Marco Pesenti Gritti + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include <glib.h> +#include <libxml/HTMLtree.h> +#include <string.h> + +#include "ephy-bookmarks-import.h" +#include "ephy-string.h" + +static char * +build_keyword (const char *folder) +{ + return ephy_str_replace_substring (folder, " ", "_"); +} + +static void +mozilla_parse_bookmarks (EphyBookmarks *bookmarks, + htmlNodePtr node, + char **keyword) +{ + htmlNodePtr child = node; + + while (child != NULL) + { + if (xmlStrEqual (child->name, "h3")) + { + xmlChar *tmp; + + tmp = xmlNodeGetContent (child); + g_free (*keyword); + *keyword = build_keyword (tmp); + xmlFree (tmp); + } + else if (xmlStrEqual (child->name, "a")) + { + xmlChar *title, *url; + + title = xmlNodeGetContent (child); + url = xmlGetProp (child, "href"); + ephy_bookmarks_add (bookmarks, + title, + url, + NULL, + *keyword); + xmlFree (title); + xmlFree (url); + } + + mozilla_parse_bookmarks (bookmarks, + child->children, + keyword); + child = child->next; + } +} + +gboolean +ephy_bookmarks_import_mozilla (EphyBookmarks *bookmarks, + const char *filename) +{ + htmlDocPtr doc; + htmlNodePtr child; + char *keyword = NULL; + + if (g_file_test (filename, G_FILE_TEST_EXISTS) == FALSE) + return FALSE; + + doc = htmlParseFile (filename, "UTF-8"); + g_assert (doc != NULL); + + child = doc->children; + mozilla_parse_bookmarks (bookmarks, child, &keyword); + + g_free (keyword); + xmlFreeDoc (doc); + + return TRUE; +} diff --git a/src/bookmarks/ephy-bookmarks-import.h b/src/bookmarks/ephy-bookmarks-import.h new file mode 100644 index 000000000..3280af4c1 --- /dev/null +++ b/src/bookmarks/ephy-bookmarks-import.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2003 Marco Pesenti Gritti + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef EPHY_BOOKMARKS_IMPORT_H +#define EPHY_BOOKMARKS_IMPORT_H + +#include "ephy-bookmarks.h" + +G_BEGIN_DECLS + +gboolean ephy_bookmarks_import_mozilla (EphyBookmarks *bookmarks, + const char *filename); + +G_END_DECLS + +#endif |