diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bookmarks/ephy-bookmarks-editor.c | 170 | ||||
-rw-r--r-- | src/bookmarks/ephy-bookmarks.c | 6 | ||||
-rw-r--r-- | src/bookmarks/ephy-node-view.c | 18 | ||||
-rw-r--r-- | src/bookmarks/ephy-node-view.h | 3 | ||||
-rw-r--r-- | src/ephy-window.c | 5 |
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)) |