aboutsummaryrefslogtreecommitdiffstats
path: root/src/bookmarks
diff options
context:
space:
mode:
Diffstat (limited to 'src/bookmarks')
-rw-r--r--src/bookmarks/ephy-bookmarks-editor.c182
-rw-r--r--src/bookmarks/ephy-node-view.c25
-rw-r--r--src/bookmarks/ephy-node-view.h4
-rw-r--r--src/bookmarks/ephy-topics-selector.c42
4 files changed, 204 insertions, 49 deletions
diff --git a/src/bookmarks/ephy-bookmarks-editor.c b/src/bookmarks/ephy-bookmarks-editor.c
index fdbba76c9..39587c4e6 100644
--- a/src/bookmarks/ephy-bookmarks-editor.c
+++ b/src/bookmarks/ephy-bookmarks-editor.c
@@ -58,19 +58,23 @@ static void cmd_open_bookmarks_in_tabs (EggAction *action,
EphyBookmarksEditor *editor);
static void cmd_open_bookmarks_in_browser (EggAction *action,
EphyBookmarksEditor *editor);
-static void cmd_remove_bookmarks (EggAction *action,
+static void cmd_delete (EggAction *action,
EphyBookmarksEditor *editor);
static void cmd_bookmark_properties (EggAction *action,
EphyBookmarksEditor *editor);
static void cmd_add_topic (EggAction *action,
EphyBookmarksEditor *editor);
-static void cmd_remove_topic (EggAction *action,
+static void cmd_rename (EggAction *action,
EphyBookmarksEditor *editor);
-static void cmd_rename_bookmark (EggAction *action,
+static void cmd_close (EggAction *action,
EphyBookmarksEditor *editor);
-static void cmd_rename_topic (EggAction *action,
+static void cmd_cut (EggAction *action,
EphyBookmarksEditor *editor);
-static void cmd_close (EggAction *action,
+static void cmd_copy (EggAction *action,
+ EphyBookmarksEditor *editor);
+static void cmd_paste (EggAction *action,
+ EphyBookmarksEditor *editor);
+static void cmd_select_all (EggAction *action,
EphyBookmarksEditor *editor);
struct EphyBookmarksEditorPrivate
@@ -121,17 +125,23 @@ static EggActionGroupEntry ephy_bookmark_popup_entries [] = {
{ "OpenInTab", N_("Open In New _Tab"), NULL, "<shift><control>O",
NULL, G_CALLBACK (cmd_open_bookmarks_in_tabs), NULL },
- { "RenameBookmark", N_("_Rename Bookmark"), NULL, NULL,
- NULL, G_CALLBACK (cmd_rename_bookmark), NULL },
+ { "Cut", N_("Cu_t"), GTK_STOCK_CUT, "<control>X",
+ NULL, G_CALLBACK (cmd_cut), NULL },
+
+ { "Copy", N_("_Copy"), GTK_STOCK_COPY, "<control>C",
+ NULL, G_CALLBACK (cmd_copy), NULL },
+
+ { "Paste", N_("_Paste"), GTK_STOCK_PASTE, "<control>V",
+ NULL, G_CALLBACK (cmd_paste), NULL },
- { "RenameTopic", N_("R_ename Topic"), NULL, NULL,
- NULL, G_CALLBACK (cmd_rename_topic), NULL },
+ { "SelectAll", N_("Select _All"), NULL, "<control>A",
+ NULL, G_CALLBACK (cmd_select_all), NULL },
- { "RemoveBookmark", N_("_Delete Bookmark"), GTK_STOCK_DELETE, NULL,
- NULL, G_CALLBACK (cmd_remove_bookmarks), NULL },
+ { "Rename", N_("_Rename"), NULL, "F2",
+ NULL, G_CALLBACK (cmd_rename), NULL },
- { "RemoveTopic", N_("D_elete Topic"), NULL, NULL,
- NULL, G_CALLBACK (cmd_remove_topic), NULL },
+ { "Delete", N_("_Delete"), GTK_STOCK_DELETE, NULL,
+ NULL, G_CALLBACK (cmd_delete), NULL },
{ "Properties", N_("_Properties"), GTK_STOCK_PROPERTIES, "<alt>Return",
NULL, G_CALLBACK (cmd_bookmark_properties), NULL },
@@ -154,21 +164,6 @@ cmd_add_topic (EggAction *action,
}
static void
-cmd_remove_topic (EggAction *action,
- EphyBookmarksEditor *editor)
-{
- GList *selection;
-
- selection = ephy_node_view_get_selection (editor->priv->key_view);
- if (selection)
- {
- EphyNode *node = EPHY_NODE (selection->data);
- ephy_bookmarks_remove_keyword (editor->priv->bookmarks, node);
- g_list_free (selection);
- }
-}
-
-static void
cmd_close (EggAction *action,
EphyBookmarksEditor *editor)
{
@@ -176,17 +171,17 @@ cmd_close (EggAction *action,
}
static void
-cmd_rename_topic (EggAction *action,
- EphyBookmarksEditor *editor)
-{
- ephy_node_view_edit (editor->priv->key_view);
-}
-
-static void
-cmd_rename_bookmark (EggAction *action,
- EphyBookmarksEditor *editor)
-{
- ephy_node_view_edit (editor->priv->bm_view);
+cmd_rename (EggAction *action,
+ EphyBookmarksEditor *editor)
+{
+ if (ephy_node_view_has_focus (editor->priv->bm_view))
+ {
+ ephy_node_view_edit (editor->priv->bm_view);
+ }
+ else if (ephy_node_view_has_focus (editor->priv->key_view))
+ {
+ ephy_node_view_edit (editor->priv->key_view);
+ }
}
static GtkWidget *
@@ -261,10 +256,17 @@ cmd_open_bookmarks_in_browser (EggAction *action,
}
static void
-cmd_remove_bookmarks (EggAction *action,
- EphyBookmarksEditor *editor)
+cmd_delete (EggAction *action,
+ EphyBookmarksEditor *editor)
{
- ephy_node_view_remove (editor->priv->bm_view);
+ if (ephy_node_view_has_focus (editor->priv->bm_view))
+ {
+ ephy_node_view_remove (editor->priv->bm_view);
+ }
+ else if (ephy_node_view_has_focus (editor->priv->key_view))
+ {
+ ephy_node_view_remove (editor->priv->key_view);
+ }
}
static void
@@ -290,6 +292,59 @@ cmd_bookmark_properties (EggAction *action,
}
}
+static void
+cmd_cut (EggAction *action,
+ EphyBookmarksEditor *editor)
+{
+ GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor));
+
+ if (GTK_IS_EDITABLE (widget))
+ {
+ gtk_editable_cut_clipboard (GTK_EDITABLE (widget));
+ }
+}
+
+static void
+cmd_copy (EggAction *action,
+ EphyBookmarksEditor *editor)
+{
+ GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor));
+
+ if (GTK_IS_EDITABLE (widget))
+ {
+ gtk_editable_copy_clipboard (GTK_EDITABLE (widget));
+ }
+}
+
+static void
+cmd_paste (EggAction *action,
+ EphyBookmarksEditor *editor)
+{
+ GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor));
+
+ if (GTK_IS_EDITABLE (widget))
+ {
+ gtk_editable_paste_clipboard (GTK_EDITABLE (widget));
+ }
+}
+
+static void
+cmd_select_all (EggAction *action,
+ EphyBookmarksEditor *editor)
+{
+ GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor));
+
+ if (GTK_IS_EDITABLE (widget))
+ {
+ gtk_editable_select_region (GTK_EDITABLE (widget), 0, -1);
+ }
+ else if (ephy_node_view_has_focus (editor->priv->bm_view))
+ {
+ ephy_node_view_select_all (editor->priv->bm_view);
+ }
+}
+
+
GType
ephy_bookmarks_editor_get_type (void)
{
@@ -418,12 +473,12 @@ ephy_bookmarks_editor_show_popup_cb (GtkWidget *view,
EphyBookmarksEditor *editor)
{
GtkWidget *widget;
-
+
widget = egg_menu_merge_get_widget (editor->priv->ui_merge,
"/popups/EphyBookmarkEditorPopup");
gtk_menu_popup (GTK_MENU (widget), NULL, NULL, NULL, NULL, 2,
gtk_get_current_event_time ());
-}
+}
static void
ephy_bookmarks_editor_key_pressed_cb (GtkWidget *view,
@@ -472,6 +527,22 @@ bookmarks_filter (EphyBookmarksEditor *editor,
}
static void
+keyword_node_key_pressed_cb (GtkWidget *view,
+ GdkEventKey *event,
+ EphyBookmarksEditor *editor)
+{
+ switch (event->keyval)
+ {
+ case GDK_Delete:
+ ephy_node_view_remove (editor->priv->key_view);
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void
keyword_node_selected_cb (EphyNodeView *view,
EphyNode *node,
EphyBookmarksEditor *editor)
@@ -490,6 +561,17 @@ keyword_node_selected_cb (EphyNodeView *view,
}
static void
+keyword_node_show_popup_cb (GtkWidget *view, EphyBookmarksEditor *editor)
+{
+ GtkWidget *widget;
+
+ widget = egg_menu_merge_get_widget (editor->priv->ui_merge,
+ "/popups/EphyBookmarkKeywordPopup");
+ gtk_menu_popup (GTK_MENU (widget), NULL, NULL, NULL, NULL, 2,
+ gtk_get_current_event_time ());
+}
+
+static void
search_entry_changed_cb (GtkWidget *entry, EphyBookmarksEditor *editor)
{
char *search_text;
@@ -617,7 +699,7 @@ ephy_bookmarks_editor_construct (EphyBookmarksEditor *editor)
gtk_container_set_border_width (GTK_CONTAINER (hbox), 6);
gtk_container_add (GTK_CONTAINER (editor->priv->menu_dock), hbox);
gtk_widget_show (hbox);
-
+
g_assert (editor->priv->bookmarks);
node = ephy_bookmarks_get_keywords (editor->priv->bookmarks);
@@ -636,10 +718,18 @@ ephy_bookmarks_editor_construct (EphyBookmarksEditor *editor)
gtk_widget_show (GTK_WIDGET (key_view));
editor->priv->key_view = key_view;
g_signal_connect (G_OBJECT (key_view),
+ "key_press_event",
+ G_CALLBACK (keyword_node_key_pressed_cb),
+ editor);
+ g_signal_connect (G_OBJECT (key_view),
"node_selected",
G_CALLBACK (keyword_node_selected_cb),
editor);
-
+ g_signal_connect (G_OBJECT (key_view),
+ "show_popup",
+ G_CALLBACK (keyword_node_show_popup_cb),
+ editor);
+
vbox = gtk_vbox_new (FALSE, 6);
gtk_box_pack_start (GTK_BOX (hbox),
vbox, TRUE, TRUE, 0);
diff --git a/src/bookmarks/ephy-node-view.c b/src/bookmarks/ephy-node-view.c
index 4270d58f2..d3b578179 100644
--- a/src/bookmarks/ephy-node-view.c
+++ b/src/bookmarks/ephy-node-view.c
@@ -22,6 +22,7 @@
#include <gtk/gtktreeviewcolumn.h>
#include <gtk/gtkcellrenderertext.h>
#include <gtk/gtkcellrendererpixbuf.h>
+#include <gtk/gtkwindow.h>
#include <libgnome/gnome-i18n.h>
#include "eggtreemodelfilter.h"
@@ -661,6 +662,30 @@ ephy_node_view_get_selection (EphyNodeView *view)
}
void
+ephy_node_view_select_all (EphyNodeView *view)
+{
+ GtkTreeSelection *sel = gtk_tree_view_get_selection (view->priv->treeview);
+ gtk_tree_selection_select_all (sel);
+}
+
+gboolean
+ephy_node_view_has_focus (EphyNodeView *view)
+{
+ GtkWidget *window;
+ GtkWidget *focused_widget;
+
+ window = gtk_widget_get_toplevel (view->priv->treeview);
+ focused_widget = gtk_window_get_focus (GTK_WINDOW(window));
+
+ if (view->priv->treeview == focused_widget)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void
ephy_node_view_remove (EphyNodeView *view)
{
GList *list;
diff --git a/src/bookmarks/ephy-node-view.h b/src/bookmarks/ephy-node-view.h
index 47b429cd7..ee404d159 100644
--- a/src/bookmarks/ephy-node-view.h
+++ b/src/bookmarks/ephy-node-view.h
@@ -74,6 +74,10 @@ void ephy_node_view_remove (EphyNodeView *view);
GList *ephy_node_view_get_selection (EphyNodeView *view);
+void ephy_node_view_select_all (EphyNodeView *view);
+
+gboolean ephy_node_view_has_focus (EphyNodeView *view);
+
void ephy_node_view_set_browse_mode (EphyNodeView *view);
void ephy_node_view_select_node (EphyNodeView *view,
diff --git a/src/bookmarks/ephy-topics-selector.c b/src/bookmarks/ephy-topics-selector.c
index 4bfbe3681..97023550c 100644
--- a/src/bookmarks/ephy-topics-selector.c
+++ b/src/bookmarks/ephy-topics-selector.c
@@ -23,7 +23,9 @@
#include <gtk/gtkliststore.h>
#include <gtk/gtkcellrenderertoggle.h>
#include <gtk/gtkcellrenderertext.h>
+#include <gtk/gtktreeselection.h>
#include <gtk/gtktreeview.h>
+#include <gdk/gdkkeysyms.h>
static void ephy_topics_selector_class_init (EphyTopicsSelectorClass *klass);
static void ephy_topics_selector_init (EphyTopicsSelector *editor);
@@ -295,6 +297,39 @@ ephy_topics_selector_apply (EphyTopicsSelector *editor)
while (gtk_tree_model_iter_next (model, &iter));
}
+static gboolean
+set_sort_column_id (GtkListStore *model)
+{
+ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model),
+ COL_TOPIC,
+ GTK_SORT_ASCENDING);
+ return FALSE;
+}
+
+static gboolean
+topic_clicked (GtkTreeView *tree_view,
+ GdkEventButton *event,
+ EphyTopicsSelector *selector)
+{
+ GtkTreePath *path;
+
+ if (event->window != gtk_tree_view_get_bin_window (tree_view))
+ return FALSE;
+
+ if (gtk_tree_view_get_path_at_pos (tree_view,
+ (gint) event->x,
+ (gint) event->y,
+ &path, NULL,
+ NULL, NULL))
+ {
+ gchar *path_str = gtk_tree_path_to_string (path);
+ topic_toggled (NULL, path_str, selector);
+ g_free(path_str);
+ }
+
+ return FALSE;
+}
+
static void
ephy_topics_build_ui (EphyTopicsSelector *editor)
{
@@ -308,13 +343,12 @@ ephy_topics_build_ui (EphyTopicsSelector *editor)
treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model));
gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
+ g_idle_add ((GSourceFunc) set_sort_column_id, model);
gtk_widget_show (treeview);
g_object_unref (model);
/* Has topic column */
renderer = gtk_cell_renderer_toggle_new ();
- g_signal_connect (renderer, "toggled",
- G_CALLBACK (topic_toggled), editor);
column = gtk_tree_view_column_new_with_attributes
("", renderer, "active", COL_HAS_TOPIC, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
@@ -323,7 +357,9 @@ ephy_topics_build_ui (EphyTopicsSelector *editor)
column = gtk_tree_view_column_new_with_attributes
("Description", renderer, "text", COL_TOPIC, NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
-
+
+ g_signal_connect (G_OBJECT (treeview), "button_press_event",
+ G_CALLBACK (topic_clicked), editor);
fill_model (editor);
gtk_container_add (GTK_CONTAINER (editor), treeview);