aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog17
-rw-r--r--embed/ephy-favicon-cache.c1
-rw-r--r--embed/ephy-history.c4
-rw-r--r--lib/ephy-state.c1
-rw-r--r--lib/ephy-types.h14
-rw-r--r--src/bookmarks/ephy-bookmarks-editor.c13
-rw-r--r--src/bookmarks/ephy-bookmarks.c10
-rw-r--r--src/bookmarks/ephy-topic-action.c116
8 files changed, 141 insertions, 35 deletions
diff --git a/ChangeLog b/ChangeLog
index 43fe474a3..3c00cdb9c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2003-05-10 Xan Lopez <xan@masilla.org>
+
+ * embed/ephy-favicon-cache.c:
+ * embed/ephy-history.c: (ephy_history_init):
+ * lib/ephy-node-common.h:
+ * lib/ephy-state.c:
+ * lib/ephy-types.h:
+ * src/bookmarks/ephy-bookmarks-editor.c: (cmd_delete),
+ (ephy_bookmarks_editor_update_menu):
+ * src/bookmarks/ephy-bookmarks.c: (ephy_bookmarks_init),
+ (ephy_bookmarks_add_keyword):
+ * src/bookmarks/ephy-topic-action.c: (sort_bookmarks),
+ (build_bookmarks_menu), (sort_topics), (build_topics_menu):
+
+ Alphabetical sort of bookmarks menu elements, fixes #111315.
+ Also create ephy-node-common.h with some general enums.
+
2003-05-10 Marco Pesenti Gritti <marco@it.gnome.org>
* data/epiphany.schemas.in:
diff --git a/embed/ephy-favicon-cache.c b/embed/ephy-favicon-cache.c
index eae812691..3b3efef40 100644
--- a/embed/ephy-favicon-cache.c
+++ b/embed/ephy-favicon-cache.c
@@ -25,6 +25,7 @@
#include "ephy-embed-persist.h"
#include "ephy-file-helpers.h"
#include "ephy-favicon-cache.h"
+#include "ephy-node-common.h"
#include "ephy-node.h"
#include "ephy-debug.h"
diff --git a/embed/ephy-history.c b/embed/ephy-history.c
index 5ea747080..42bf00d25 100644
--- a/embed/ephy-history.c
+++ b/embed/ephy-history.c
@@ -21,7 +21,7 @@
#include "ephy-file-helpers.h"
#include "ephy-autocompletion-source.h"
#include "ephy-debug.h"
-#include "ephy-node-view.h"
+#include "ephy-node-common.h"
#include <time.h>
#include <string.h>
@@ -420,7 +420,7 @@ ephy_history_init (EphyHistory *eb)
&value);
g_value_unset (&value);
g_value_init (&value, G_TYPE_INT);
- g_value_set_int (&value, EPHY_NODE_VIEW_ALL_PRIORITY);
+ g_value_set_int (&value, EPHY_NODE_ALL_PRIORITY);
ephy_node_set_property (eb->priv->pages,
EPHY_NODE_PAGE_PROP_PRIORITY,
&value);
diff --git a/lib/ephy-state.c b/lib/ephy-state.c
index 55a109d1a..bfab0e916 100644
--- a/lib/ephy-state.c
+++ b/lib/ephy-state.c
@@ -23,6 +23,7 @@
#include "ephy-file-helpers.h"
#include "ephy-node.h"
#include "ephy-types.h"
+#include "ephy-node-common.h"
#include <string.h>
#include <gtk/gtkwindow.h>
diff --git a/lib/ephy-types.h b/lib/ephy-types.h
index c0692d6ff..d0fccafa7 100644
--- a/lib/ephy-types.h
+++ b/lib/ephy-types.h
@@ -32,20 +32,6 @@ typedef enum
#define EPHY_NODE_RESERVED_IDS 100
-/* Ids of the root nodes of history,
- * bookmarks and favicon cache */
-enum
-{
- BOOKMARKS_NODE_ID = 0,
- KEYWORDS_NODE_ID = 1,
- FAVORITES_NODE_ID = 2,
- BMKS_NOTCATEGORIZED_NODE_ID = 3,
- STATES_NODE_ID = 4,
- HOSTS_NODE_ID = 5,
- PAGES_NODE_ID = 6,
- ICONS_NODE_ID = 9
-};
-
G_END_DECLS
#endif
diff --git a/src/bookmarks/ephy-bookmarks-editor.c b/src/bookmarks/ephy-bookmarks-editor.c
index 7427b3075..964fd301c 100644
--- a/src/bookmarks/ephy-bookmarks-editor.c
+++ b/src/bookmarks/ephy-bookmarks-editor.c
@@ -32,6 +32,7 @@
#include "ephy-bookmarks-editor.h"
#include "ephy-bookmark-properties.h"
+#include "ephy-node-common.h"
#include "ephy-node-view.h"
#include "ephy-window.h"
#include "ephy-dnd.h"
@@ -390,7 +391,7 @@ cmd_delete (EggAction *action,
}
else if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->priv->key_view)))
{
- EphyNodeViewPriority priority;
+ EphyNodePriority priority;
GList *selected;
EphyNode *node;
@@ -398,9 +399,9 @@ cmd_delete (EggAction *action,
node = EPHY_NODE (selected->data);
priority = ephy_node_get_property_int (node, EPHY_NODE_KEYWORD_PROP_PRIORITY);
- if (priority == -1) priority = EPHY_NODE_VIEW_NORMAL_PRIORITY;
+ if (priority == -1) priority = EPHY_NODE_NORMAL_PRIORITY;
- if (priority == EPHY_NODE_VIEW_NORMAL_PRIORITY)
+ if (priority == EPHY_NODE_NORMAL_PRIORITY)
{
ephy_node_view_remove (EPHY_NODE_VIEW (editor->priv->key_view));
}
@@ -703,7 +704,7 @@ ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor)
if (key_focus && selected)
{
EphyNode *node = EPHY_NODE (selected->data);
- EphyNodeViewPriority priority;
+ EphyNodePriority priority;
gulong id;
id = ephy_node_get_id (node);
@@ -712,8 +713,8 @@ ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor)
priority = ephy_node_get_property_int
(node, EPHY_NODE_KEYWORD_PROP_PRIORITY);
- if (priority == -1) priority = EPHY_NODE_VIEW_NORMAL_PRIORITY;
- key_normal = (priority == EPHY_NODE_VIEW_NORMAL_PRIORITY);
+ if (priority == -1) priority = EPHY_NODE_NORMAL_PRIORITY;
+ key_normal = (priority == EPHY_NODE_NORMAL_PRIORITY);
g_list_free (selected);
}
diff --git a/src/bookmarks/ephy-bookmarks.c b/src/bookmarks/ephy-bookmarks.c
index f8eb28469..084d8a343 100644
--- a/src/bookmarks/ephy-bookmarks.c
+++ b/src/bookmarks/ephy-bookmarks.c
@@ -22,7 +22,7 @@
#include "ephy-history.h"
#include "ephy-debug.h"
#include "ephy-tree-model-node.h"
-#include "ephy-node-view.h"
+#include "ephy-node-common.h"
#include "ephy-toolbars-model.h"
#include <string.h>
@@ -597,7 +597,7 @@ ephy_bookmarks_init (EphyBookmarks *eb)
eb->priv->keywords = ephy_node_new_with_id (KEYWORDS_NODE_ID);
ephy_node_ref (eb->priv->keywords);
g_value_init (&value, G_TYPE_INT);
- g_value_set_int (&value, EPHY_NODE_VIEW_ALL_PRIORITY);
+ g_value_set_int (&value, EPHY_NODE_ALL_PRIORITY);
ephy_node_set_property (eb->priv->bookmarks,
EPHY_NODE_KEYWORD_PROP_PRIORITY,
&value);
@@ -621,7 +621,7 @@ ephy_bookmarks_init (EphyBookmarks *eb)
&value);
g_value_unset (&value);
g_value_init (&value, G_TYPE_INT);
- g_value_set_int (&value, EPHY_NODE_VIEW_SPECIAL_PRIORITY);
+ g_value_set_int (&value, EPHY_NODE_SPECIAL_PRIORITY);
ephy_node_set_property (eb->priv->favorites,
EPHY_NODE_KEYWORD_PROP_PRIORITY,
&value);
@@ -638,7 +638,7 @@ ephy_bookmarks_init (EphyBookmarks *eb)
&value);
g_value_unset (&value);
g_value_init (&value, G_TYPE_INT);
- g_value_set_int (&value, EPHY_NODE_VIEW_SPECIAL_PRIORITY);
+ g_value_set_int (&value, EPHY_NODE_SPECIAL_PRIORITY);
ephy_node_set_property (eb->priv->notcategorized,
EPHY_NODE_KEYWORD_PROP_PRIORITY,
&value);
@@ -946,7 +946,7 @@ ephy_bookmarks_add_keyword (EphyBookmarks *eb,
g_value_unset (&value);
g_value_init (&value, G_TYPE_INT);
- g_value_set_int (&value, EPHY_NODE_VIEW_NORMAL_PRIORITY);
+ g_value_set_int (&value, EPHY_NODE_NORMAL_PRIORITY);
ephy_node_set_property (key, EPHY_NODE_KEYWORD_PROP_PRIORITY,
&value);
g_value_unset (&value);
diff --git a/src/bookmarks/ephy-topic-action.c b/src/bookmarks/ephy-topic-action.c
index 7e3408336..791c98072 100644
--- a/src/bookmarks/ephy-topic-action.c
+++ b/src/bookmarks/ephy-topic-action.c
@@ -16,6 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
+#include "ephy-node-common.h"
#include "ephy-topic-action.h"
#include "ephy-bookmarks.h"
#include "ephy-shell.h"
@@ -143,6 +144,29 @@ ephy_topic_action_sync_label (EggAction *action, GParamSpec *pspec, GtkWidget *p
gtk_label_set_label (label, action->label);
}
+static int
+sort_bookmarks (gconstpointer a, gconstpointer b)
+{
+ EphyNode *node_a = (EphyNode *)a;
+ EphyNode *node_b = (EphyNode *)b;
+ char *str_a = NULL;
+ char *str_b = NULL;
+ int retval;
+
+ g_return_val_if_fail (EPHY_IS_NODE (node_a), 1);
+ g_return_val_if_fail (EPHY_IS_NODE (node_b), -1);
+
+ str_a = g_utf8_casefold (ephy_node_get_property_string (node_a, EPHY_NODE_BMK_PROP_TITLE),
+ -1);
+ str_b = g_utf8_casefold (ephy_node_get_property_string (node_b, EPHY_NODE_BMK_PROP_TITLE),
+ -1);
+ retval = g_utf8_collate (str_a, str_b);
+ g_free (str_a);
+ g_free (str_b);
+
+ return retval;
+}
+
static GtkWidget *
build_bookmarks_menu (EphyTopicAction *action, EphyNode *node)
{
@@ -150,6 +174,7 @@ build_bookmarks_menu (EphyTopicAction *action, EphyNode *node)
GPtrArray *children;
int i;
EphyFaviconCache *cache;
+ GList *node_list = NULL, *l = NULL;
menu = gtk_menu_new ();
@@ -158,7 +183,15 @@ build_bookmarks_menu (EphyTopicAction *action, EphyNode *node)
children = ephy_node_get_children (node);
- // Show an insensitive "Empty" sub-menu if the topic has no children
+ for (i = 0; i < children->len; ++i)
+ {
+ node_list = g_list_append (node_list,
+ g_ptr_array_index (children, i));
+ }
+
+ g_list_sort (node_list, (GCompareFunc)sort_bookmarks);
+
+ /* Show an insensitive "Empty" sub-menu if the topic has no children */
if (children->len < 1)
{
@@ -166,16 +199,15 @@ build_bookmarks_menu (EphyTopicAction *action, EphyNode *node)
gtk_widget_set_sensitive (item, FALSE);
gtk_widget_show (item);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
-
}
- for (i = 0; i < children->len; i++)
+ for (l = g_list_first (node_list); l != NULL; l = g_list_next (l))
{
EphyNode *kid;
const char *icon_location;
const char *title;
- kid = g_ptr_array_index (children, i);
+ kid = (EphyNode*)l->data;
icon_location = ephy_node_get_property_string
(kid, EPHY_NODE_BMK_PROP_ICON);
@@ -208,18 +240,60 @@ build_bookmarks_menu (EphyTopicAction *action, EphyNode *node)
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
}
ephy_node_thaw (node);
+ g_list_free (node_list);
return menu;
}
+static int
+sort_topics (gconstpointer a, gconstpointer b)
+{
+ EphyNode *node_a = (EphyNode *)a;
+ EphyNode *node_b = (EphyNode *)b;
+ EphyNodePriority priority_a, priority_b;
+ char *str_a = NULL;
+ char *str_b = NULL;
+ int retval;
+
+ g_return_val_if_fail (EPHY_IS_NODE (node_a), 1);
+ g_return_val_if_fail (EPHY_IS_NODE (node_b), -1);
+
+ priority_a = ephy_node_get_property_int (node_a, EPHY_NODE_KEYWORD_PROP_PRIORITY);
+ priority_b = ephy_node_get_property_int (node_b, EPHY_NODE_KEYWORD_PROP_PRIORITY);
+
+ if (priority_a < priority_b)
+ {
+ retval = -1;
+ }
+ else if (priority_a > priority_b)
+ {
+ retval = 1;
+ }
+ else
+ {
+ str_a = g_utf8_casefold (ephy_node_get_property_string (node_a, EPHY_NODE_KEYWORD_PROP_NAME),
+ -1);
+ str_b = g_utf8_casefold (ephy_node_get_property_string (node_b, EPHY_NODE_KEYWORD_PROP_NAME),
+ -1);
+ retval = g_utf8_collate (str_a, str_b);
+ g_free (str_a);
+ g_free (str_b);
+ }
+
+ return retval;
+}
+
static GtkWidget *
build_topics_menu (EphyTopicAction *action, EphyNode *node)
{
- GtkWidget *menu, *item;
+ GtkWidget *menu, *item, *label;
GPtrArray *children;
int i;
EphyBookmarks *bookmarks;
EphyNode *all;
+ EphyNodePriority priority;
+ char *markup_title = NULL;
+ GList *node_list = NULL, *l = NULL;
bookmarks = ephy_shell_get_bookmarks (ephy_shell);
all = ephy_bookmarks_get_bookmarks (bookmarks);
@@ -227,20 +301,45 @@ build_topics_menu (EphyTopicAction *action, EphyNode *node)
menu = gtk_menu_new ();
children = ephy_node_get_children (node);
- for (i = 0; i < children->len; i++)
+
+ for (i = 0; i < children->len; ++i)
+ {
+ node_list = g_list_append (node_list,
+ g_ptr_array_index (children, i));
+ }
+
+ g_list_sort (node_list, (GCompareFunc)sort_topics);
+
+ for (l = g_list_first (node_list); l != NULL; l = g_list_next (l))
{
EphyNode *kid;
const char *title;
GtkWidget *bmk_menu;
- kid = g_ptr_array_index (children, i);
+ kid = (EphyNode*)l->data;
if (kid == all) continue;
title = ephy_node_get_property_string
(kid, EPHY_NODE_KEYWORD_PROP_NAME);
+ priority = ephy_node_get_property_int
+ (kid, EPHY_NODE_KEYWORD_PROP_PRIORITY);
LOG ("Create menu for topic %s", title);
- item = gtk_image_menu_item_new_with_label (title);
+ if (priority == EPHY_NODE_ALL_PRIORITY ||
+ priority == EPHY_NODE_SPECIAL_PRIORITY)
+ {
+ markup_title = g_strconcat ("<b>", title, "</b>", NULL);
+ }
+ else
+ {
+ markup_title = g_strdup (title);
+ }
+ item = gtk_image_menu_item_new_with_label (markup_title);
+ g_free (markup_title);
+
+ label = gtk_bin_get_child (GTK_BIN (item));
+ gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
+
gtk_widget_show (item);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
@@ -249,6 +348,7 @@ build_topics_menu (EphyTopicAction *action, EphyNode *node)
gtk_menu_item_set_submenu (GTK_MENU_ITEM (item), bmk_menu);
}
ephy_node_thaw (node);
+ g_list_free (node_list);
return menu;
}