diff options
Diffstat (limited to 'src/bookmarks/ephy-bookmarks-editor.c')
-rw-r--r-- | src/bookmarks/ephy-bookmarks-editor.c | 170 |
1 files changed, 80 insertions, 90 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); -} |