aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bookmarks/ephy-bookmarks-editor.c170
-rw-r--r--src/bookmarks/ephy-bookmarks.c6
-rw-r--r--src/bookmarks/ephy-node-view.c18
-rw-r--r--src/bookmarks/ephy-node-view.h3
-rw-r--r--src/ephy-window.c5
5 files changed, 107 insertions, 95 deletions
diff --git a/src/bookmarks/ephy-bookmarks-editor.c b/src/bookmarks/ephy-bookmarks-editor.c
index 51f5081c2..1bdb82399 100644
--- a/src/bookmarks/ephy-bookmarks-editor.c
+++ b/src/bookmarks/ephy-bookmarks-editor.c
@@ -76,9 +76,6 @@ static void ephy_bookmarks_editor_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec);
-static void ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor,
- EphyNode *node,
- EphyNodeView *view);
static void cmd_open_bookmarks_in_tabs (EggAction *action,
EphyBookmarksEditor *editor);
@@ -505,11 +502,69 @@ ephy_bookmarks_editor_node_activated_cb (GtkWidget *view,
}
static void
+ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor,
+ EphyNodeView *view)
+{
+ gboolean rename, delete, properties;
+ gboolean bmk_focus, key_focus;
+ gboolean key_selection, bmk_selection;
+ gboolean key_normal = FALSE;
+ gboolean bmk_multiple_selection;
+ EggActionGroup *action_group;
+ EggAction *action;
+ GList *selected;
+
+ bmk_focus = gtk_widget_is_focus (editor->priv->bm_view);
+ key_focus = gtk_widget_is_focus (editor->priv->key_view);
+
+ bmk_selection = ephy_node_view_has_selection
+ (EPHY_NODE_VIEW (editor->priv->bm_view),
+ &bmk_multiple_selection);
+ key_selection = ephy_node_view_has_selection
+ (EPHY_NODE_VIEW (editor->priv->key_view), NULL);
+
+ selected = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->priv->key_view));
+ if (selected)
+ {
+ EphyNode *node = EPHY_NODE (selected->data);
+ EphyBookmarksKeywordPriority priority;;
+
+ priority = ephy_node_get_property_int
+ (node, EPHY_NODE_KEYWORD_PROP_PRIORITY);
+ if (priority == -1) priority = EPHY_BOOKMARKS_KEYWORD_NORMAL_PRIORITY;
+ key_normal = (priority == EPHY_BOOKMARKS_KEYWORD_NORMAL_PRIORITY);
+ g_list_free (selected);
+ }
+
+ rename = (bmk_focus && bmk_selection && !bmk_multiple_selection) ||
+ (key_selection && key_focus && key_normal);
+ delete = (bmk_focus && bmk_selection) ||
+ (key_selection && key_focus && key_normal);
+ properties = (bmk_focus && bmk_selection && !bmk_multiple_selection);
+
+ action_group = editor->priv->action_group;
+ action = egg_action_group_get_action (action_group, "Rename");
+ g_object_set (action, "sensitive", rename, NULL);
+ action = egg_action_group_get_action (action_group, "Delete");
+ g_object_set (action, "sensitive", delete, NULL);
+ action = egg_action_group_get_action (action_group, "Properties");
+ g_object_set (action, "sensitive", properties, NULL);
+}
+
+static void
ephy_bookmarks_editor_node_selected_cb (EphyNodeView *view,
EphyNode *node,
EphyBookmarksEditor *editor)
{
- ephy_bookmarks_editor_update_menu (editor, node, view);
+ ephy_bookmarks_editor_update_menu (editor, view);
+}
+
+static void
+view_focus_cb (EphyNodeView *view,
+ GdkEventFocus *event,
+ EphyBookmarksEditor *editor)
+{
+ ephy_bookmarks_editor_update_menu (editor, view);
}
static void
@@ -549,7 +604,7 @@ keyword_node_selected_cb (EphyNodeView *view,
EphyBookmarksEditor *editor)
{
EphyNode *bookmarks;
-
+
if (node == NULL)
{
bookmarks = ephy_bookmarks_get_bookmarks (editor->priv->bookmarks);
@@ -559,8 +614,8 @@ keyword_node_selected_cb (EphyNodeView *view,
{
bookmarks_filter (editor, node);
}
- ephy_bookmarks_editor_update_menu (editor, node, view);
+ ephy_bookmarks_editor_update_menu (editor, view);
}
static void
@@ -618,16 +673,15 @@ build_search_box (EphyBookmarksEditor *editor)
g_signal_connect (G_OBJECT (entry), "changed",
G_CALLBACK (search_entry_changed_cb),
editor);
-
+
label = gtk_label_new (NULL);
gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
str = g_strconcat ("<b>", _("_Search:"), "</b>", NULL);
gtk_label_set_markup_with_mnemonic (GTK_LABEL (label), str);
g_free (str);
- gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
+ gtk_label_set_mnemonic_widget (GTK_LABEL (label), entry);
gtk_widget_show (label);
-
gtk_box_pack_start (GTK_BOX (box),
label, FALSE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (box),
@@ -763,6 +817,14 @@ ephy_bookmarks_editor_construct (EphyBookmarksEditor *editor)
G_CALLBACK (keyword_node_selected_cb),
editor);
g_signal_connect (G_OBJECT (key_view),
+ "focus_in_event",
+ G_CALLBACK (view_focus_cb),
+ editor);
+ g_signal_connect (G_OBJECT (key_view),
+ "focus_out_event",
+ G_CALLBACK (view_focus_cb),
+ editor);
+ g_signal_connect (G_OBJECT (key_view),
"show_popup",
G_CALLBACK (keyword_node_show_popup_cb),
editor);
@@ -789,7 +851,7 @@ ephy_bookmarks_editor_construct (EphyBookmarksEditor *editor)
NULL);
gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0);
gtk_widget_show (scrolled_window);
-
+
node = ephy_bookmarks_get_bookmarks (editor->priv->bookmarks);
editor->priv->bookmarks_filter = ephy_node_filter_new ();
@@ -819,6 +881,14 @@ ephy_bookmarks_editor_construct (EphyBookmarksEditor *editor)
G_CALLBACK (ephy_bookmarks_editor_node_selected_cb),
editor);
g_signal_connect (G_OBJECT (bm_view),
+ "focus_in_event",
+ G_CALLBACK (view_focus_cb),
+ editor);
+ g_signal_connect (G_OBJECT (bm_view),
+ "focus_out_event",
+ G_CALLBACK (view_focus_cb),
+ editor);
+ g_signal_connect (G_OBJECT (bm_view),
"show_popup",
G_CALLBACK (ephy_bookmarks_editor_show_popup_cb),
editor);
@@ -919,83 +989,3 @@ ephy_bookmarks_editor_init (EphyBookmarksEditor *editor)
{
editor->priv = g_new0 (EphyBookmarksEditorPrivate, 1);
}
-
-static void
-ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor,
- EphyNode *node,
- EphyNodeView *view)
-{
- int priority;
- gboolean delete, rename, properties;
- EggAction *action;
- EggActionGroup *action_group;
- GList *selection;
-
- g_return_if_fail (editor != NULL);
-
- /* Unselection */
- if (node == NULL)
- {
- selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->priv->bm_view));
- if (!selection)
- {
- rename = delete = properties = FALSE;
- }
- else
- {
- delete = properties = TRUE;
- if (g_list_length (selection) > 1)
- {
- rename = FALSE;
- }
- else
- {
- rename = TRUE;
- }
- }
- g_list_free (selection);
- }
- /* Selection */
- else
- {
- priority = ephy_node_get_property_int (node, EPHY_NODE_KEYWORD_PROP_PRIORITY);
-
- if (priority == EPHY_BOOKMARKS_KEYWORD_ALL_PRIORITY ||
- priority == EPHY_BOOKMARKS_KEYWORD_SPECIAL_PRIORITY)
- {
- delete = rename = properties = FALSE;
- }
- else
- {
- if (view == EPHY_NODE_VIEW (editor->priv->key_view))
- {
- properties = FALSE;
- }
- else
- {
- properties = TRUE;
- }
-
- delete = TRUE;
- selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->priv->bm_view));
- if (g_list_length (selection) > 1)
- {
- rename = FALSE;
- }
- else
- {
- rename = TRUE;
- }
- g_list_free (selection);
- }
-
- }
-
- action_group = editor->priv->action_group;
- action = egg_action_group_get_action (action_group, "Rename");
- g_object_set (action, "sensitive", rename, NULL);
- action = egg_action_group_get_action (action_group, "Delete");
- g_object_set (action, "sensitive", delete, NULL);
- action = egg_action_group_get_action (action_group, "Properties");
- g_object_set (action, "sensitive", properties, NULL);
-}
diff --git a/src/bookmarks/ephy-bookmarks.c b/src/bookmarks/ephy-bookmarks.c
index 7441057d3..cd159994d 100644
--- a/src/bookmarks/ephy-bookmarks.c
+++ b/src/bookmarks/ephy-bookmarks.c
@@ -733,6 +733,12 @@ ephy_bookmarks_add_keyword (EphyBookmarks *eb,
&value);
g_value_unset (&value);
+ g_value_init (&value, G_TYPE_INT);
+ g_value_set_int (&value, EPHY_BOOKMARKS_KEYWORD_NORMAL_PRIORITY);
+ ephy_node_set_property (key, EPHY_NODE_KEYWORD_PROP_PRIORITY,
+ &value);
+ g_value_unset (&value);
+
ephy_node_add_child (eb->priv->keywords, key);
return key;
diff --git a/src/bookmarks/ephy-node-view.c b/src/bookmarks/ephy-node-view.c
index d03de5a09..8c75a40cf 100644
--- a/src/bookmarks/ephy-node-view.c
+++ b/src/bookmarks/ephy-node-view.c
@@ -918,3 +918,21 @@ ephy_node_view_edit (EphyNodeView *view)
g_list_free (rows);
}
+gboolean
+ephy_node_view_has_selection (EphyNodeView *view, gboolean *multiple)
+{
+ GtkTreeSelection *selection;
+ int rows;
+
+ selection = gtk_tree_view_get_selection
+ (GTK_TREE_VIEW (view));
+
+ rows = gtk_tree_selection_count_selected_rows (selection);
+
+ if (multiple)
+ {
+ *multiple = rows > 1;
+ }
+
+ return rows > 0;
+}
diff --git a/src/bookmarks/ephy-node-view.h b/src/bookmarks/ephy-node-view.h
index 7889791bc..1943695a6 100644
--- a/src/bookmarks/ephy-node-view.h
+++ b/src/bookmarks/ephy-node-view.h
@@ -73,6 +73,9 @@ void ephy_node_view_add_icon_column (EphyNodeView *view,
void ephy_node_view_remove (EphyNodeView *view);
+gboolean ephy_node_view_has_selection (EphyNodeView *view,
+ gboolean *multiple);
+
GList *ephy_node_view_get_selection (EphyNodeView *view);
void ephy_node_view_select_all (EphyNodeView *view);
diff --git a/src/ephy-window.c b/src/ephy-window.c
index e5dfa26d4..457c4bd8b 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -923,17 +923,12 @@ void
ephy_window_show (GtkWidget *widget)
{
EphyWindow *window = EPHY_WINDOW(widget);
- EphyTab *tab;
- int w = -1, h = -1;
if (!window->priv->chrome_mask)
{
ephy_window_set_chrome (window, EMBED_CHROME_DEFAULT);
}
- tab = ephy_window_get_active_tab (window);
- if (tab) ephy_tab_get_size (tab, &w, &h);
-
if (!(window->priv->chrome_mask & EMBED_CHROME_OPENASPOPUP) &&
!(window->priv->chrome_mask & EMBED_CHROME_OPENASFULLSCREEN) &&
!GTK_WIDGET_VISIBLE (widget))