diff options
Diffstat (limited to 'src/bookmarks/ephy-bookmarks-editor.c')
-rw-r--r-- | src/bookmarks/ephy-bookmarks-editor.c | 2737 |
1 files changed, 1325 insertions, 1412 deletions
diff --git a/src/bookmarks/ephy-bookmarks-editor.c b/src/bookmarks/ephy-bookmarks-editor.c index 9b73e9d66..38529440b 100644 --- a/src/bookmarks/ephy-bookmarks-editor.c +++ b/src/bookmarks/ephy-bookmarks-editor.c @@ -48,169 +48,166 @@ static const GtkTargetEntry topic_drag_dest_types [] = { - { (char *)EPHY_DND_URI_LIST_TYPE, 0, 0 } + { (char *)EPHY_DND_URI_LIST_TYPE, 0, 0 } }; static const GtkTargetEntry bmk_drag_types [] = { - { (char *)EPHY_DND_URL_TYPE, 0, 0 }, - { (char *)EPHY_DND_URI_LIST_TYPE, 0, 1 }, - { (char *)EPHY_DND_TEXT_TYPE, 0, 2 } + { (char *)EPHY_DND_URL_TYPE, 0, 0 }, + { (char *)EPHY_DND_URI_LIST_TYPE, 0, 1 }, + { (char *)EPHY_DND_TEXT_TYPE, 0, 2 } }; static const GtkTargetEntry topic_drag_types [] = { - { (char *)EPHY_DND_TOPIC_TYPE, 0, 0 } + { (char *)EPHY_DND_TOPIC_TYPE, 0, 0 } }; -static const struct -{ - const char *name; - const char *extension; +static const struct { + const char *name; + const char *extension; } -export_formats [] = +export_formats [] = /* Don't add or reoder those entries without updating export_dialog_response_cb too! */ { - { N_("Web (RDF)"), "rdf" }, - { N_("Mozilla (HTML)"), "html" } + { N_("Web (RDF)"), "rdf" }, + { N_("Mozilla (HTML)"), "html" } }; static void ephy_bookmarks_editor_finalize (GObject *object); -static void ephy_bookmarks_editor_dispose (GObject *object); -static void ephy_bookmarks_editor_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -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); - -static void cmd_open_bookmarks_in_tabs (GtkAction *action, - EphyBookmarksEditor *editor); -static void cmd_open_bookmarks_in_browser (GtkAction *action, - EphyBookmarksEditor *editor); -static void cmd_delete (GtkAction *action, - EphyBookmarksEditor *editor); -static void cmd_bookmark_properties (GtkAction *action, - EphyBookmarksEditor *editor); -static void cmd_bookmarks_import (GtkAction *action, - EphyBookmarksEditor *editor); -static void cmd_bookmarks_export (GtkAction *action, - EphyBookmarksEditor *editor); -static void cmd_add_topic (GtkAction *action, - EphyBookmarksEditor *editor); -static void cmd_rename (GtkAction *action, - EphyBookmarksEditor *editor); -static void cmd_close (GtkAction *action, - EphyBookmarksEditor *editor); -static void cmd_cut (GtkAction *action, - EphyBookmarksEditor *editor); -static void cmd_copy (GtkAction *action, - EphyBookmarksEditor *editor); -static void cmd_paste (GtkAction *action, - EphyBookmarksEditor *editor); -static void cmd_select_all (GtkAction *action, - EphyBookmarksEditor *editor); -static void cmd_help_contents (GtkAction *action, - EphyBookmarksEditor *editor); +static void ephy_bookmarks_editor_dispose (GObject *object); +static void ephy_bookmarks_editor_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); +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); + +static void cmd_open_bookmarks_in_tabs (GtkAction *action, + EphyBookmarksEditor *editor); +static void cmd_open_bookmarks_in_browser (GtkAction *action, + EphyBookmarksEditor *editor); +static void cmd_delete (GtkAction *action, + EphyBookmarksEditor *editor); +static void cmd_bookmark_properties (GtkAction *action, + EphyBookmarksEditor *editor); +static void cmd_bookmarks_import (GtkAction *action, + EphyBookmarksEditor *editor); +static void cmd_bookmarks_export (GtkAction *action, + EphyBookmarksEditor *editor); +static void cmd_add_topic (GtkAction *action, + EphyBookmarksEditor *editor); +static void cmd_rename (GtkAction *action, + EphyBookmarksEditor *editor); +static void cmd_close (GtkAction *action, + EphyBookmarksEditor *editor); +static void cmd_cut (GtkAction *action, + EphyBookmarksEditor *editor); +static void cmd_copy (GtkAction *action, + EphyBookmarksEditor *editor); +static void cmd_paste (GtkAction *action, + EphyBookmarksEditor *editor); +static void cmd_select_all (GtkAction *action, + EphyBookmarksEditor *editor); +static void cmd_help_contents (GtkAction *action, + EphyBookmarksEditor *editor); #define RESERVED_STRING N_("Remove from this topic") -struct _EphyBookmarksEditor -{ - GtkWindow parent_instance; - - EphyBookmarks *bookmarks; - GtkWidget *bm_view; - GtkWidget *key_view; - EphyNodeFilter *bookmarks_filter; - GtkWidget *search_entry; - GtkWidget *main_vbox; - GtkWidget *window; - GtkUIManager *ui_merge; - GtkActionGroup *action_group; - int priority_col; - - GtkTreeViewColumn *title_col; - GtkTreeViewColumn *address_col; +struct _EphyBookmarksEditor { + GtkWindow parent_instance; + + EphyBookmarks *bookmarks; + GtkWidget *bm_view; + GtkWidget *key_view; + EphyNodeFilter *bookmarks_filter; + GtkWidget *search_entry; + GtkWidget *main_vbox; + GtkWidget *window; + GtkUIManager *ui_merge; + GtkActionGroup *action_group; + int priority_col; + + GtkTreeViewColumn *title_col; + GtkTreeViewColumn *address_col; }; -enum -{ - PROP_0, - PROP_BOOKMARKS, - LAST_PROP +enum { + PROP_0, + PROP_BOOKMARKS, + LAST_PROP }; static GParamSpec *obj_properties[LAST_PROP]; static const GtkActionEntry ephy_bookmark_popup_entries [] = { - /* Toplevel */ - { "File", NULL, N_("_File") }, - { "Edit", NULL, N_("_Edit") }, - { "View", NULL, N_("_View") }, - { "Help", NULL, N_("_Help") }, - { "PopupAction", NULL, "" }, - - /* File Menu*/ - { "NewTopic", NULL, N_("_New Topic"), "<control>N", - N_("Create a new topic"), - G_CALLBACK (cmd_add_topic) }, - { "OpenInWindow", NULL, N_("Open in New _Window"), "<control>O", - N_("Open the selected bookmark in a new window"), - G_CALLBACK (cmd_open_bookmarks_in_browser) }, - { "OpenInTab", NULL, N_("Open in New _Tab"), "<shift><control>O", - N_("Open the selected bookmark in a new tab"), - G_CALLBACK (cmd_open_bookmarks_in_tabs) }, - { "Rename", NULL, N_("_Rename…"), "F2", - N_("Rename the selected bookmark or topic"), G_CALLBACK (cmd_rename) }, - { "Properties", NULL, N_("_Properties"), "<alt>Return", - N_("View or modify the properties of the selected bookmark"), - G_CALLBACK (cmd_bookmark_properties) }, - { "Import", NULL, N_("_Import Bookmarks…"), NULL, - N_("Import bookmarks from another browser or a bookmarks file"), - G_CALLBACK (cmd_bookmarks_import) }, - { "Export", NULL, N_("_Export Bookmarks…"), NULL, - N_("Export bookmarks to a file"), - G_CALLBACK (cmd_bookmarks_export) }, - { "Close", NULL, N_("_Close"), "<control>W", - N_("Close the bookmarks window"), - G_CALLBACK (cmd_close) }, - - /* Edit Menu */ - { "Cut", NULL, N_("Cu_t"), "<control>X", - N_("Cut the selection"), - G_CALLBACK (cmd_cut) }, - { "Copy", NULL, N_("_Copy"), "<control>C", - N_("Copy the selection"), - G_CALLBACK (cmd_copy) }, - { "Paste", NULL, N_("_Paste"), "<control>V", - N_("Paste the clipboard"), - G_CALLBACK (cmd_paste) }, - { "Delete", NULL, N_("_Delete"), "<control>T", - N_("Delete the selected bookmark or topic"), - G_CALLBACK (cmd_delete) }, - { "SelectAll", NULL, N_("Select _All"), "<control>A", - N_("Select all bookmarks or text"), - G_CALLBACK (cmd_select_all) }, - - /* Help Menu */ - { "HelpContents", NULL, N_("_Contents"), "F1", - N_("Display bookmarks help"), - G_CALLBACK (cmd_help_contents) }, - { "HelpAbout", NULL, N_("_About"), NULL, - N_("Display credits for the web browser creators"), - G_CALLBACK (window_cmd_help_about) }, + /* Toplevel */ + { "File", NULL, N_("_File") }, + { "Edit", NULL, N_("_Edit") }, + { "View", NULL, N_("_View") }, + { "Help", NULL, N_("_Help") }, + { "PopupAction", NULL, "" }, + + /* File Menu*/ + { "NewTopic", NULL, N_("_New Topic"), "<control>N", + N_("Create a new topic"), + G_CALLBACK (cmd_add_topic) }, + { "OpenInWindow", NULL, N_("Open in New _Window"), "<control>O", + N_("Open the selected bookmark in a new window"), + G_CALLBACK (cmd_open_bookmarks_in_browser) }, + { "OpenInTab", NULL, N_("Open in New _Tab"), "<shift><control>O", + N_("Open the selected bookmark in a new tab"), + G_CALLBACK (cmd_open_bookmarks_in_tabs) }, + { "Rename", NULL, N_("_Rename…"), "F2", + N_("Rename the selected bookmark or topic"), G_CALLBACK (cmd_rename) }, + { "Properties", NULL, N_("_Properties"), "<alt>Return", + N_("View or modify the properties of the selected bookmark"), + G_CALLBACK (cmd_bookmark_properties) }, + { "Import", NULL, N_("_Import Bookmarks…"), NULL, + N_("Import bookmarks from another browser or a bookmarks file"), + G_CALLBACK (cmd_bookmarks_import) }, + { "Export", NULL, N_("_Export Bookmarks…"), NULL, + N_("Export bookmarks to a file"), + G_CALLBACK (cmd_bookmarks_export) }, + { "Close", NULL, N_("_Close"), "<control>W", + N_("Close the bookmarks window"), + G_CALLBACK (cmd_close) }, + + /* Edit Menu */ + { "Cut", NULL, N_("Cu_t"), "<control>X", + N_("Cut the selection"), + G_CALLBACK (cmd_cut) }, + { "Copy", NULL, N_("_Copy"), "<control>C", + N_("Copy the selection"), + G_CALLBACK (cmd_copy) }, + { "Paste", NULL, N_("_Paste"), "<control>V", + N_("Paste the clipboard"), + G_CALLBACK (cmd_paste) }, + { "Delete", NULL, N_("_Delete"), "<control>T", + N_("Delete the selected bookmark or topic"), + G_CALLBACK (cmd_delete) }, + { "SelectAll", NULL, N_("Select _All"), "<control>A", + N_("Select all bookmarks or text"), + G_CALLBACK (cmd_select_all) }, + + /* Help Menu */ + { "HelpContents", NULL, N_("_Contents"), "F1", + N_("Display bookmarks help"), + G_CALLBACK (cmd_help_contents) }, + { "HelpAbout", NULL, N_("_About"), NULL, + N_("Display credits for the web browser creators"), + G_CALLBACK (window_cmd_help_about) }, }; static const GtkToggleActionEntry ephy_bookmark_toggle_entries [] = { - /* View Menu */ - { "ViewTitle", NULL, N_("_Title"), NULL, - N_("Show the title column"), NULL, TRUE }, - { "ViewAddress", NULL, N_("Address"), NULL, - N_("Show the address column"), NULL, FALSE } + /* View Menu */ + { "ViewTitle", NULL, N_("_Title"), NULL, + N_("Show the title column"), NULL, TRUE }, + { "ViewAddress", NULL, N_("Address"), NULL, + N_("Show the address column"), NULL, FALSE } }; G_DEFINE_TYPE (EphyBookmarksEditor, ephy_bookmarks_editor, GTK_TYPE_WINDOW) @@ -218,1232 +215,1152 @@ G_DEFINE_TYPE (EphyBookmarksEditor, ephy_bookmarks_editor, GTK_TYPE_WINDOW) static void entry_selection_changed_cb (GtkWidget *widget, GParamSpec *pspec, EphyBookmarksEditor *editor) { - ephy_bookmarks_editor_update_menu (editor); + ephy_bookmarks_editor_update_menu (editor); } static void add_entry_monitor (EphyBookmarksEditor *editor, GtkWidget *entry) { - g_signal_connect (G_OBJECT (entry), - "notify::selection-bound", - G_CALLBACK (entry_selection_changed_cb), - editor); - g_signal_connect (G_OBJECT (entry), - "notify::cursor-position", - G_CALLBACK (entry_selection_changed_cb), - editor); + g_signal_connect (G_OBJECT (entry), + "notify::selection-bound", + G_CALLBACK (entry_selection_changed_cb), + editor); + g_signal_connect (G_OBJECT (entry), + "notify::cursor-position", + G_CALLBACK (entry_selection_changed_cb), + editor); } static void add_text_renderer_monitor (EphyBookmarksEditor *editor) { - GtkWidget *entry; + GtkWidget *entry; - entry = gtk_window_get_focus (GTK_WINDOW (editor)); - g_return_if_fail (GTK_IS_EDITABLE (entry)); + entry = gtk_window_get_focus (GTK_WINDOW (editor)); + g_return_if_fail (GTK_IS_EDITABLE (entry)); - add_entry_monitor (editor, entry); + add_entry_monitor (editor, entry); } static void -cmd_add_topic (GtkAction *action, - EphyBookmarksEditor *editor) +cmd_add_topic (GtkAction *action, + EphyBookmarksEditor *editor) { - EphyNode *node; - - node = ephy_bookmarks_add_keyword (editor->bookmarks, - _("Type a topic")); - gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (editor->key_view))); - ephy_node_view_select_node (EPHY_NODE_VIEW (editor->key_view), node); - ephy_node_view_edit (EPHY_NODE_VIEW (editor->key_view), TRUE); - add_text_renderer_monitor (editor); + EphyNode *node; + + node = ephy_bookmarks_add_keyword (editor->bookmarks, + _("Type a topic")); + gtk_tree_selection_unselect_all (gtk_tree_view_get_selection (GTK_TREE_VIEW (editor->key_view))); + ephy_node_view_select_node (EPHY_NODE_VIEW (editor->key_view), node); + ephy_node_view_edit (EPHY_NODE_VIEW (editor->key_view), TRUE); + add_text_renderer_monitor (editor); } static void -cmd_close (GtkAction *action, - EphyBookmarksEditor *editor) +cmd_close (GtkAction *action, + EphyBookmarksEditor *editor) { - gtk_widget_hide (GTK_WIDGET (editor)); + gtk_widget_hide (GTK_WIDGET (editor)); } static void -cmd_rename (GtkAction *action, - EphyBookmarksEditor *editor) -{ - if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->bm_view))) - { - ephy_node_view_edit (EPHY_NODE_VIEW (editor->bm_view), FALSE); - } - else if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->key_view))) - { - ephy_node_view_edit (EPHY_NODE_VIEW (editor->key_view), FALSE); - } - add_text_renderer_monitor (editor); +cmd_rename (GtkAction *action, + EphyBookmarksEditor *editor) +{ + if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->bm_view))) { + ephy_node_view_edit (EPHY_NODE_VIEW (editor->bm_view), FALSE); + } else if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->key_view))) { + ephy_node_view_edit (EPHY_NODE_VIEW (editor->key_view), FALSE); + } + add_text_renderer_monitor (editor); } static GtkWidget * get_target_window (EphyBookmarksEditor *editor) { - if (editor->window) - { - return editor->window; - } - else - { - return GTK_WIDGET (gtk_application_get_active_window (GTK_APPLICATION (ephy_shell_get_default ()))); - } + if (editor->window) { + return editor->window; + } else { + return GTK_WIDGET (gtk_application_get_active_window (GTK_APPLICATION (ephy_shell_get_default ()))); + } } static void -load_bookmark_in_tab (EphyNode *node, +load_bookmark_in_tab (EphyNode *node, EphyEmbed *embed) { - const char *location; + const char *location; - location = ephy_node_get_property_string (node, - EPHY_NODE_BMK_PROP_LOCATION); - ephy_web_view_load_url (ephy_embed_get_web_view (embed), location); + location = ephy_node_get_property_string (node, + EPHY_NODE_BMK_PROP_LOCATION); + ephy_web_view_load_url (ephy_embed_get_web_view (embed), location); } static void -cmd_open_bookmarks_in_tabs (GtkAction *action, - EphyBookmarksEditor *editor) -{ - EphyWindow *window; - GList *selection; - GList *l; - - window = EPHY_WINDOW (get_target_window (editor)); - selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->bm_view)); - - for (l = selection; l; l = l->next) - { - EphyNode *node = l->data; - EphyEmbed *new_embed; - - new_embed = ephy_shell_new_tab (ephy_shell_get_default (), - window, NULL, - 0); - load_bookmark_in_tab (node, new_embed); - - /* if there was no target window, a new one was opened. Get it - * from the new tab so we open the remaining links in the - * same window. See bug 138343. - */ - if (window == NULL) - { - window = EPHY_WINDOW - (gtk_widget_get_toplevel (GTK_WIDGET (new_embed))); - } - } - - g_list_free (selection); +cmd_open_bookmarks_in_tabs (GtkAction *action, + EphyBookmarksEditor *editor) +{ + EphyWindow *window; + GList *selection; + GList *l; + + window = EPHY_WINDOW (get_target_window (editor)); + selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->bm_view)); + + for (l = selection; l; l = l->next) { + EphyNode *node = l->data; + EphyEmbed *new_embed; + + new_embed = ephy_shell_new_tab (ephy_shell_get_default (), + window, NULL, + 0); + load_bookmark_in_tab (node, new_embed); + + /* if there was no target window, a new one was opened. Get it + * from the new tab so we open the remaining links in the + * same window. See bug 138343. + */ + if (window == NULL) { + window = EPHY_WINDOW + (gtk_widget_get_toplevel (GTK_WIDGET (new_embed))); + } + } + + g_list_free (selection); } static void -cmd_open_bookmarks_in_browser (GtkAction *action, - EphyBookmarksEditor *editor) +cmd_open_bookmarks_in_browser (GtkAction *action, + EphyBookmarksEditor *editor) { - EphyWindow *window; - GList *selection; - GList *l; + EphyWindow *window; + GList *selection; + GList *l; - window = ephy_window_new (); - selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->bm_view)); + window = ephy_window_new (); + selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->bm_view)); - for (l = selection; l; l = l->next) - { - EphyNode *node = l->data; - EphyEmbed *embed; + for (l = selection; l; l = l->next) { + EphyNode *node = l->data; + EphyEmbed *embed; - embed = ephy_shell_new_tab (ephy_shell_get_default (), - window, NULL, 0); - load_bookmark_in_tab (node, embed); - } + embed = ephy_shell_new_tab (ephy_shell_get_default (), + window, NULL, 0); + load_bookmark_in_tab (node, embed); + } - g_list_free (selection); + g_list_free (selection); } -static GtkWidget* -delete_topic_dialog_construct (GtkWindow *parent, - const char *topic) -{ - GtkWidget *dialog; - - dialog = gtk_message_dialog_new (GTK_WINDOW (parent), - GTK_DIALOG_MODAL, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_CANCEL, - _("Delete topic “%s”?"), - topic); - - gtk_window_set_title (GTK_WINDOW (dialog), _("Delete this topic?")); - gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), - _("Deleting this topic will cause all its bookmarks to become " - "uncategorized, unless they also belong to other topics. " - "The bookmarks will not be deleted.")); - gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Delete Topic"), GTK_RESPONSE_ACCEPT); - gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL); - - gtk_window_group_add_window (gtk_window_get_group (GTK_WINDOW (parent)), - GTK_WINDOW (dialog)); - - return dialog; +static GtkWidget * +delete_topic_dialog_construct (GtkWindow *parent, + const char *topic) +{ + GtkWidget *dialog; + + dialog = gtk_message_dialog_new (GTK_WINDOW (parent), + GTK_DIALOG_MODAL, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_CANCEL, + _("Delete topic “%s”?"), + topic); + + gtk_window_set_title (GTK_WINDOW (dialog), _("Delete this topic?")); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), + _("Deleting this topic will cause all its bookmarks to become " + "uncategorized, unless they also belong to other topics. " + "The bookmarks will not be deleted.")); + gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Delete Topic"), GTK_RESPONSE_ACCEPT); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL); + + gtk_window_group_add_window (gtk_window_get_group (GTK_WINDOW (parent)), + GTK_WINDOW (dialog)); + + return dialog; } static void -cmd_delete (GtkAction *action, - EphyBookmarksEditor *editor) -{ - if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->bm_view))) - { - ephy_node_view_remove (EPHY_NODE_VIEW (editor->bm_view)); - } - else if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->key_view))) - { - int priority; - GList *selected; - EphyNode *node; - - selected = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->key_view)); - node = selected->data; - priority = ephy_node_get_property_int (node, EPHY_NODE_KEYWORD_PROP_PRIORITY); - - if (priority == -1) priority = EPHY_NODE_NORMAL_PRIORITY; - - if (priority == EPHY_NODE_NORMAL_PRIORITY) - { - GtkWidget *dialog; - const char *title; - int response; - GPtrArray *children; - - children = ephy_node_get_children(node); - - /* Do not warn if the topic is empty */ - if (children->len == 0) - { - ephy_node_view_remove (EPHY_NODE_VIEW (editor->key_view)); - } - else - { - title = ephy_node_get_property_string (node, EPHY_NODE_KEYWORD_PROP_NAME); - dialog = delete_topic_dialog_construct (GTK_WINDOW (editor), title); - - response = gtk_dialog_run (GTK_DIALOG (dialog)); - - gtk_widget_destroy (dialog); - - if (response == GTK_RESPONSE_ACCEPT) - { - ephy_node_view_remove (EPHY_NODE_VIEW (editor->key_view)); - } - } - } - g_list_free (selected); - } +cmd_delete (GtkAction *action, + EphyBookmarksEditor *editor) +{ + if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->bm_view))) { + ephy_node_view_remove (EPHY_NODE_VIEW (editor->bm_view)); + } else if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->key_view))) { + int priority; + GList *selected; + EphyNode *node; + + selected = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->key_view)); + node = selected->data; + priority = ephy_node_get_property_int (node, EPHY_NODE_KEYWORD_PROP_PRIORITY); + + if (priority == -1) priority = EPHY_NODE_NORMAL_PRIORITY; + + if (priority == EPHY_NODE_NORMAL_PRIORITY) { + GtkWidget *dialog; + const char *title; + int response; + GPtrArray *children; + + children = ephy_node_get_children (node); + + /* Do not warn if the topic is empty */ + if (children->len == 0) { + ephy_node_view_remove (EPHY_NODE_VIEW (editor->key_view)); + } else { + title = ephy_node_get_property_string (node, EPHY_NODE_KEYWORD_PROP_NAME); + dialog = delete_topic_dialog_construct (GTK_WINDOW (editor), title); + + response = gtk_dialog_run (GTK_DIALOG (dialog)); + + gtk_widget_destroy (dialog); + + if (response == GTK_RESPONSE_ACCEPT) { + ephy_node_view_remove (EPHY_NODE_VIEW (editor->key_view)); + } + } + } + g_list_free (selected); + } } static GSList * add_bookmarks_files (const char *dir, - const char *filename, - int max_depth) + const char *filename, + int max_depth) { - GSList *list; - char *path; + GSList *list; + char *path; - path = g_build_filename (g_get_home_dir (), dir, NULL); - list = ephy_file_find (path, filename, max_depth); - g_free (path); + path = g_build_filename (g_get_home_dir (), dir, NULL); + list = ephy_file_find (path, filename, max_depth); + g_free (path); - return list; + return list; } static void -add_bookmarks_source (const char *file, - GtkListStore *store) -{ - GtkTreeIter iter; - char **path; - char *description = NULL; - int len, i; - - path = g_strsplit (file, G_DIR_SEPARATOR_S, -1); - g_return_if_fail (path != NULL); - - len = g_strv_length (path); - - for (i = len - 2; i >= 0 && description == NULL; --i) - { - const char *p = (const char *) path[i]; - - g_return_if_fail (p != NULL); - - if (strcmp (p, "firefox") == 0) - { - const char *profile = NULL, *dot; - - if (path[i+1] != NULL) - { - dot = strchr (path[i+1], '.'); - profile = dot ? dot + 1 : path[i+1]; - } - - if (profile != NULL && strcmp (profile, "default") != 0) - { - /* FIXME: proper i18n after freeze */ - description = g_strdup_printf ("%s “%s”", _("Firefox"), profile); - } - else - { - description = g_strdup (_("Firefox")); - } - } - else if (strcmp (p, ".firefox") == 0) - { - description = g_strdup (_("Firebird")); - } - else if (strcmp (p, ".phoenix") == 0) - { - description = g_strdup (_("Firebird")); - } - else if (strcmp (p, ".mozilla") == 0) - { - /* Translators: The %s is the name of a Mozilla profile. */ - description = g_strdup_printf (_("Mozilla “%s” profile"), path[i+1]); - } - else if (strcmp (p, ".galeon") == 0) - { - description = g_strdup (_("Galeon")); - } - else if (strcmp (p, "konqueror") == 0) - { - description = g_strdup (_("Konqueror")); - } - } - - if (description != NULL) - { - gtk_list_store_append (store, &iter); - gtk_list_store_set (store, &iter, 0, description, 1, file, -1); - - g_free (description); - } - - g_strfreev (path); +add_bookmarks_source (const char *file, + GtkListStore *store) +{ + GtkTreeIter iter; + char **path; + char *description = NULL; + int len, i; + + path = g_strsplit (file, G_DIR_SEPARATOR_S, -1); + g_return_if_fail (path != NULL); + + len = g_strv_length (path); + + for (i = len - 2; i >= 0 && description == NULL; --i) { + const char *p = (const char *)path[i]; + + g_return_if_fail (p != NULL); + + if (strcmp (p, "firefox") == 0) { + const char *profile = NULL, *dot; + + if (path[i + 1] != NULL) { + dot = strchr (path[i + 1], '.'); + profile = dot ? dot + 1 : path[i + 1]; + } + + if (profile != NULL && strcmp (profile, "default") != 0) { + /* FIXME: proper i18n after freeze */ + description = g_strdup_printf ("%s “%s”", _("Firefox"), profile); + } else { + description = g_strdup (_("Firefox")); + } + } else if (strcmp (p, ".firefox") == 0) { + description = g_strdup (_("Firebird")); + } else if (strcmp (p, ".phoenix") == 0) { + description = g_strdup (_("Firebird")); + } else if (strcmp (p, ".mozilla") == 0) { + /* Translators: The %s is the name of a Mozilla profile. */ + description = g_strdup_printf (_("Mozilla “%s” profile"), path[i + 1]); + } else if (strcmp (p, ".galeon") == 0) { + description = g_strdup (_("Galeon")); + } else if (strcmp (p, "konqueror") == 0) { + description = g_strdup (_("Konqueror")); + } + } + + if (description != NULL) { + gtk_list_store_append (store, &iter); + gtk_list_store_set (store, &iter, 0, description, 1, file, -1); + + g_free (description); + } + + g_strfreev (path); } static void import_bookmarks (EphyBookmarksEditor *editor, - const char *filename) -{ - if (ephy_bookmarks_import (editor->bookmarks, filename) == FALSE) - { - GtkWidget *dialog; - char *basename; - - basename = g_filename_display_basename (filename); - dialog = gtk_message_dialog_new (GTK_WINDOW (editor), - GTK_DIALOG_MODAL, - GTK_MESSAGE_ERROR, - GTK_BUTTONS_OK, - _("Import failed")); - - gtk_window_set_title (GTK_WINDOW (dialog), _("Import Failed")); - gtk_message_dialog_format_secondary_text - (GTK_MESSAGE_DIALOG (dialog), - _("The bookmarks from “%s” could not be imported " - "because the file is corrupted or of an " - "unsupported type."), - basename); - - gtk_window_group_add_window (gtk_window_get_group (GTK_WINDOW (editor)), - GTK_WINDOW (dialog)); - - gtk_dialog_run (GTK_DIALOG (dialog)); - - g_free (basename); - gtk_widget_destroy (dialog); - } + const char *filename) +{ + if (ephy_bookmarks_import (editor->bookmarks, filename) == FALSE) { + GtkWidget *dialog; + char *basename; + + basename = g_filename_display_basename (filename); + dialog = gtk_message_dialog_new (GTK_WINDOW (editor), + GTK_DIALOG_MODAL, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_OK, + _("Import failed")); + + gtk_window_set_title (GTK_WINDOW (dialog), _("Import Failed")); + gtk_message_dialog_format_secondary_text + (GTK_MESSAGE_DIALOG (dialog), + _("The bookmarks from “%s” could not be imported " + "because the file is corrupted or of an " + "unsupported type."), + basename); + + gtk_window_group_add_window (gtk_window_get_group (GTK_WINDOW (editor)), + GTK_WINDOW (dialog)); + + gtk_dialog_run (GTK_DIALOG (dialog)); + + g_free (basename); + gtk_widget_destroy (dialog); + } } static void -import_from_file_response_cb (GtkWidget *dialog, - int response, - EphyBookmarksEditor *editor) +import_from_file_response_cb (GtkWidget *dialog, + int response, + EphyBookmarksEditor *editor) { - char *filename; + char *filename; - gtk_widget_hide (dialog); + gtk_widget_hide (dialog); - if (response == GTK_RESPONSE_ACCEPT) - { - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + if (response == GTK_RESPONSE_ACCEPT) { + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); - if (filename != NULL) - { - import_bookmarks (editor, filename); + if (filename != NULL) { + import_bookmarks (editor, filename); - g_free (filename); - } - } + g_free (filename); + } + } - gtk_widget_destroy (dialog); + gtk_widget_destroy (dialog); } static void -import_dialog_response_cb (GtkDialog *dialog, - int response, - EphyBookmarksEditor *editor) -{ - if (response == GTK_RESPONSE_OK) - { - GtkTreeIter iter; - const char *filename; - GtkWidget *combo; - GtkTreeModel *model; - GValue value = { 0, }; - - combo = g_object_get_data (G_OBJECT (dialog), "combo_box"); - model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo)); - gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter); - gtk_tree_model_get_value (model, &iter, 1, &value); - filename = g_value_get_string (&value); - - if (filename == NULL) - { - EphyFileChooser *chooser; - GtkFileFilter *filter; - - chooser = ephy_file_chooser_new (_("Import Bookmarks from File"), - GTK_WIDGET (editor), - GTK_FILE_CHOOSER_ACTION_OPEN, - EPHY_FILE_FILTER_NONE); - - ephy_file_chooser_add_mime_filter - (chooser, - _("Firefox/Mozilla bookmarks"), - "application/x-mozilla-bookmarks", NULL); - - ephy_file_chooser_add_mime_filter - (chooser, _("Galeon/Konqueror bookmarks"), - "application/x-xbel", NULL); - - ephy_file_chooser_add_mime_filter - (chooser, _("Web bookmarks"), - "text/rdf", "application/rdf+xml", NULL); - - filter = ephy_file_chooser_add_pattern_filter (chooser, - _("All files"), - "*", NULL); - - gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (chooser), - filter); - - g_signal_connect (chooser, "response", - G_CALLBACK (import_from_file_response_cb), editor); - - gtk_widget_show (GTK_WIDGET (chooser)); - } - else - { - import_bookmarks (editor, filename); - } - - g_value_unset (&value); - } - - gtk_widget_destroy (GTK_WIDGET (dialog)); +import_dialog_response_cb (GtkDialog *dialog, + int response, + EphyBookmarksEditor *editor) +{ + if (response == GTK_RESPONSE_OK) { + GtkTreeIter iter; + const char *filename; + GtkWidget *combo; + GtkTreeModel *model; + GValue value = { 0, }; + + combo = g_object_get_data (G_OBJECT (dialog), "combo_box"); + model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo)); + gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter); + gtk_tree_model_get_value (model, &iter, 1, &value); + filename = g_value_get_string (&value); + + if (filename == NULL) { + EphyFileChooser *chooser; + GtkFileFilter *filter; + + chooser = ephy_file_chooser_new (_("Import Bookmarks from File"), + GTK_WIDGET (editor), + GTK_FILE_CHOOSER_ACTION_OPEN, + EPHY_FILE_FILTER_NONE); + + ephy_file_chooser_add_mime_filter + (chooser, + _("Firefox/Mozilla bookmarks"), + "application/x-mozilla-bookmarks", NULL); + + ephy_file_chooser_add_mime_filter + (chooser, _("Galeon/Konqueror bookmarks"), + "application/x-xbel", NULL); + + ephy_file_chooser_add_mime_filter + (chooser, _("Web bookmarks"), + "text/rdf", "application/rdf+xml", NULL); + + filter = ephy_file_chooser_add_pattern_filter (chooser, + _("All files"), + "*", NULL); + + gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (chooser), + filter); + + g_signal_connect (chooser, "response", + G_CALLBACK (import_from_file_response_cb), editor); + + gtk_widget_show (GTK_WIDGET (chooser)); + } else { + import_bookmarks (editor, filename); + } + + g_value_unset (&value); + } + + gtk_widget_destroy (GTK_WIDGET (dialog)); } static void -export_format_combo_changed_cb (GtkComboBox *combo, - GtkFileChooser *chooser) -{ - char *filename, *basename, *dot, *newname; - guint i; - gint format; - - filename = gtk_file_chooser_get_filename (chooser); - if (filename == NULL) return; - - basename = g_path_get_basename (filename); - if (basename == NULL || basename[0] == '\0') - { - g_free (filename); - g_free (basename); - return; - } - - format = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); - g_return_if_fail (format >= 0 && (guint)format < G_N_ELEMENTS (export_formats)); - - dot = strrchr (basename, '.'); - if (dot != NULL) - { - for (i = 0; i < G_N_ELEMENTS (export_formats); ++i) - { - if (strcmp (dot + 1, export_formats[i].extension) == 0) - { - *dot = '\0'; - break; - } - } - } - - newname = g_strconcat (basename, ".", - export_formats[format].extension, - NULL); - - gtk_file_chooser_set_current_name (chooser, newname); - - g_free (filename); - g_free (basename); - g_free (newname); +export_format_combo_changed_cb (GtkComboBox *combo, + GtkFileChooser *chooser) +{ + char *filename, *basename, *dot, *newname; + guint i; + gint format; + + filename = gtk_file_chooser_get_filename (chooser); + if (filename == NULL) return; + + basename = g_path_get_basename (filename); + if (basename == NULL || basename[0] == '\0') { + g_free (filename); + g_free (basename); + return; + } + + format = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); + g_return_if_fail (format >= 0 && (guint)format < G_N_ELEMENTS (export_formats)); + + dot = strrchr (basename, '.'); + if (dot != NULL) { + for (i = 0; i < G_N_ELEMENTS (export_formats); ++i) { + if (strcmp (dot + 1, export_formats[i].extension) == 0) { + *dot = '\0'; + break; + } + } + } + + newname = g_strconcat (basename, ".", + export_formats[format].extension, + NULL); + + gtk_file_chooser_set_current_name (chooser, newname); + + g_free (filename); + g_free (basename); + g_free (newname); } static void -export_dialog_response_cb (GtkWidget *dialog, - int response, - EphyBookmarksEditor *editor) +export_dialog_response_cb (GtkWidget *dialog, + int response, + EphyBookmarksEditor *editor) { - GtkWidget *combo; - char *filename; - int format; - - if (response != GTK_RESPONSE_ACCEPT) - { - gtk_widget_destroy (dialog); - return; - } - - filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); - if (filename == NULL) return; - - if (!ephy_gui_check_location_writable (GTK_WIDGET (dialog), filename)) - { - g_free (filename); - return; - } - - combo = g_object_get_data (G_OBJECT (dialog), "format-combo"); - g_return_if_fail (combo != NULL); - - format = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); - g_return_if_fail (format >= 0 && (guint)format < G_N_ELEMENTS (export_formats)); - - gtk_widget_destroy (dialog); - - /* 0 for ephy RDF format, 1 for mozilla HTML format */ - if (format == 0) - { - ephy_bookmarks_export_rdf (editor->bookmarks, filename); - } - else if (format == 1) - { - ephy_bookmarks_export_mozilla (editor->bookmarks, filename); - } - - g_free (filename); + GtkWidget *combo; + char *filename; + int format; + + if (response != GTK_RESPONSE_ACCEPT) { + gtk_widget_destroy (dialog); + return; + } + + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + if (filename == NULL) return; + + if (!ephy_gui_check_location_writable (GTK_WIDGET (dialog), filename)) { + g_free (filename); + return; + } + + combo = g_object_get_data (G_OBJECT (dialog), "format-combo"); + g_return_if_fail (combo != NULL); + + format = gtk_combo_box_get_active (GTK_COMBO_BOX (combo)); + g_return_if_fail (format >= 0 && (guint)format < G_N_ELEMENTS (export_formats)); + + gtk_widget_destroy (dialog); + + /* 0 for ephy RDF format, 1 for mozilla HTML format */ + if (format == 0) { + ephy_bookmarks_export_rdf (editor->bookmarks, filename); + } else if (format == 1) { + ephy_bookmarks_export_mozilla (editor->bookmarks, filename); + } + + g_free (filename); } static void -cmd_bookmarks_export (GtkAction *action, - EphyBookmarksEditor *editor) +cmd_bookmarks_export (GtkAction *action, + EphyBookmarksEditor *editor) { - GtkWidget *dialog, *hbox, *label, *combo; - guint format; - char *filename; - - dialog = GTK_WIDGET (ephy_file_chooser_new (_("Export Bookmarks"), - GTK_WIDGET (editor), - GTK_FILE_CHOOSER_ACTION_SAVE, - EPHY_FILE_FILTER_NONE)); - - gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); - - filename = g_strdup_printf ("%s.%s", _("Bookmarks"), export_formats[0].extension); - gtk_file_chooser_set_current_name - (GTK_FILE_CHOOSER (dialog), filename); - g_free(filename); - - /* Make a format selection combo & label */ - label = gtk_label_new_with_mnemonic (_("File f_ormat:")); - - combo = gtk_combo_box_text_new (); - gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); - - for (format = 0; format < G_N_ELEMENTS (export_formats); ++format) - { - gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), - _(export_formats[format].name)); - } - - g_object_set_data (G_OBJECT (dialog), "format-combo", combo); - g_signal_connect (combo, "changed", - G_CALLBACK (export_format_combo_changed_cb), dialog); - gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); - - hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); - gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0); - gtk_widget_show_all (hbox); - - gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (dialog), hbox); - - gtk_window_group_add_window (gtk_window_get_group (GTK_WINDOW (editor)), - GTK_WINDOW (dialog)); - - g_signal_connect (dialog, "response", - G_CALLBACK (export_dialog_response_cb), editor); - gtk_widget_show (dialog); + GtkWidget *dialog, *hbox, *label, *combo; + guint format; + char *filename; + + dialog = GTK_WIDGET (ephy_file_chooser_new (_("Export Bookmarks"), + GTK_WIDGET (editor), + GTK_FILE_CHOOSER_ACTION_SAVE, + EPHY_FILE_FILTER_NONE)); + + gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); + + filename = g_strdup_printf ("%s.%s", _("Bookmarks"), export_formats[0].extension); + gtk_file_chooser_set_current_name + (GTK_FILE_CHOOSER (dialog), filename); + g_free (filename); + + /* Make a format selection combo & label */ + label = gtk_label_new_with_mnemonic (_("File f_ormat:")); + + combo = gtk_combo_box_text_new (); + gtk_label_set_mnemonic_widget (GTK_LABEL (label), combo); + + for (format = 0; format < G_N_ELEMENTS (export_formats); ++format) { + gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (combo), + _(export_formats[format].name)); + } + + g_object_set_data (G_OBJECT (dialog), "format-combo", combo); + g_signal_connect (combo, "changed", + G_CALLBACK (export_format_combo_changed_cb), dialog); + gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); + + hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0); + gtk_widget_show_all (hbox); + + gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (dialog), hbox); + + gtk_window_group_add_window (gtk_window_get_group (GTK_WINDOW (editor)), + GTK_WINDOW (dialog)); + + g_signal_connect (dialog, "response", + G_CALLBACK (export_dialog_response_cb), editor); + gtk_widget_show (dialog); } static void -cmd_bookmarks_import (GtkAction *action, - EphyBookmarksEditor *editor) -{ - GtkWidget *dialog; - GtkWidget *content_area; - GtkWidget *label; - GtkWidget *vbox; - GtkWidget *combo; - GtkCellRenderer *cell; - GtkListStore *store; - GtkTreeIter iter; - GtkTreeModel *sortmodel; - GSList *files; - - dialog = gtk_dialog_new_with_buttons (_("Import Bookmarks"), - GTK_WINDOW (editor), - GTK_DIALOG_DESTROY_WITH_PARENT, - _("_Cancel"), - GTK_RESPONSE_CANCEL, - _("I_mport"), - GTK_RESPONSE_OK, - NULL); - content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); - - gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); - gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); - gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); - gtk_box_set_spacing (GTK_BOX (content_area), 2); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); - gtk_widget_show (vbox); - gtk_box_pack_start (GTK_BOX (content_area), vbox, - TRUE, TRUE, 0); - - label = gtk_label_new (_("Import bookmarks from:")); - gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); - gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); - gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0); - gtk_widget_show (label); - - store = GTK_LIST_STORE (gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING)); - - files = add_bookmarks_files (FIREFOX_BOOKMARKS_DIR_0, "bookmarks.html", 2); - files = g_slist_concat (add_bookmarks_files (FIREFOX_BOOKMARKS_DIR_1, "bookmarks.html", 2), files); - /* FIREFOX_BOOKMARKS_DIR_2 is subdir of MOZILLA_BOOKMARKS_DIR, so don't search it twice */ - files = g_slist_concat (add_bookmarks_files (MOZILLA_BOOKMARKS_DIR, "bookmarks.html", 2), files); - files = g_slist_concat (add_bookmarks_files (GALEON_BOOKMARKS_DIR, "bookmarks.xbel", 0), files); - files = g_slist_concat (add_bookmarks_files (KDE_BOOKMARKS_DIR, "bookmarks.xml", 0), files); - - g_slist_foreach (files, (GFunc) add_bookmarks_source, store); - g_slist_foreach (files, (GFunc) g_free, NULL); - g_slist_free (files); - - gtk_list_store_append (store, &iter); - gtk_list_store_set (store, &iter, 0, _("File"), 1, NULL, -1); - - sortmodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store)); - g_object_unref (store); - - gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sortmodel), 0, GTK_SORT_ASCENDING); - - combo = gtk_combo_box_new (); - gtk_combo_box_set_model(GTK_COMBO_BOX (combo), sortmodel); - g_object_set_data (G_OBJECT (dialog), "combo_box", combo); - g_object_unref (sortmodel); - - cell = gtk_cell_renderer_text_new (); - gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE); - gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), cell, - "text", 0, - NULL); - - gtk_box_pack_start (GTK_BOX (vbox), combo, TRUE, TRUE, 0); - gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); - - gtk_widget_show (combo); - - g_signal_connect (dialog, "response", - G_CALLBACK (import_dialog_response_cb), - editor); - - gtk_widget_show (dialog); +cmd_bookmarks_import (GtkAction *action, + EphyBookmarksEditor *editor) +{ + GtkWidget *dialog; + GtkWidget *content_area; + GtkWidget *label; + GtkWidget *vbox; + GtkWidget *combo; + GtkCellRenderer *cell; + GtkListStore *store; + GtkTreeIter iter; + GtkTreeModel *sortmodel; + GSList *files; + + dialog = gtk_dialog_new_with_buttons (_("Import Bookmarks"), + GTK_WINDOW (editor), + GTK_DIALOG_DESTROY_WITH_PARENT, + _("_Cancel"), + GTK_RESPONSE_CANCEL, + _("I_mport"), + GTK_RESPONSE_OK, + NULL); + content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); + + gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); + gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); + gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); + gtk_box_set_spacing (GTK_BOX (content_area), 2); + + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); + gtk_widget_show (vbox); + gtk_box_pack_start (GTK_BOX (content_area), vbox, + TRUE, TRUE, 0); + + label = gtk_label_new (_("Import bookmarks from:")); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); + gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 0); + gtk_widget_show (label); + + store = GTK_LIST_STORE (gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING)); + + files = add_bookmarks_files (FIREFOX_BOOKMARKS_DIR_0, "bookmarks.html", 2); + files = g_slist_concat (add_bookmarks_files (FIREFOX_BOOKMARKS_DIR_1, "bookmarks.html", 2), files); + /* FIREFOX_BOOKMARKS_DIR_2 is subdir of MOZILLA_BOOKMARKS_DIR, so don't search it twice */ + files = g_slist_concat (add_bookmarks_files (MOZILLA_BOOKMARKS_DIR, "bookmarks.html", 2), files); + files = g_slist_concat (add_bookmarks_files (GALEON_BOOKMARKS_DIR, "bookmarks.xbel", 0), files); + files = g_slist_concat (add_bookmarks_files (KDE_BOOKMARKS_DIR, "bookmarks.xml", 0), files); + + g_slist_foreach (files, (GFunc)add_bookmarks_source, store); + g_slist_foreach (files, (GFunc)g_free, NULL); + g_slist_free (files); + + gtk_list_store_append (store, &iter); + gtk_list_store_set (store, &iter, 0, _("File"), 1, NULL, -1); + + sortmodel = gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (store)); + g_object_unref (store); + + gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (sortmodel), 0, GTK_SORT_ASCENDING); + + combo = gtk_combo_box_new (); + gtk_combo_box_set_model (GTK_COMBO_BOX (combo), sortmodel); + g_object_set_data (G_OBJECT (dialog), "combo_box", combo); + g_object_unref (sortmodel); + + cell = gtk_cell_renderer_text_new (); + gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), cell, TRUE); + gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), cell, + "text", 0, + NULL); + + gtk_box_pack_start (GTK_BOX (vbox), combo, TRUE, TRUE, 0); + gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); + + gtk_widget_show (combo); + + g_signal_connect (dialog, "response", + G_CALLBACK (import_dialog_response_cb), + editor); + + gtk_widget_show (dialog); } static void -cmd_bookmark_properties (GtkAction *action, - EphyBookmarksEditor *editor) +cmd_bookmark_properties (GtkAction *action, + EphyBookmarksEditor *editor) { - GList *selection; - GList *l; + GList *selection; + GList *l; - selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->bm_view)); + selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->bm_view)); - for (l = selection; l; l = l->next) - { - EphyNode *node = l->data; + for (l = selection; l; l = l->next) { + EphyNode *node = l->data; - ephy_bookmarks_ui_show_bookmark (GTK_WINDOW (editor), node); - } + ephy_bookmarks_ui_show_bookmark (GTK_WINDOW (editor), node); + } - g_list_free (selection); + g_list_free (selection); } static void -cmd_cut (GtkAction *action, - EphyBookmarksEditor *editor) +cmd_cut (GtkAction *action, + EphyBookmarksEditor *editor) { - GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor)); + GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor)); - if (GTK_IS_EDITABLE (widget)) - { - gtk_editable_cut_clipboard (GTK_EDITABLE (widget)); - } + if (GTK_IS_EDITABLE (widget)) { + gtk_editable_cut_clipboard (GTK_EDITABLE (widget)); + } } static void -cmd_copy (GtkAction *action, - EphyBookmarksEditor *editor) +cmd_copy (GtkAction *action, + EphyBookmarksEditor *editor) { - GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor)); - - if (GTK_IS_EDITABLE (widget)) - { - gtk_editable_copy_clipboard (GTK_EDITABLE (widget)); - } + GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor)); - else if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->bm_view))) - { - GList *selection; + if (GTK_IS_EDITABLE (widget)) { + gtk_editable_copy_clipboard (GTK_EDITABLE (widget)); + } else if (ephy_node_view_is_target (EPHY_NODE_VIEW (editor->bm_view))) { + GList *selection; - selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->bm_view)); + selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->bm_view)); - if (g_list_length (selection) == 1) - { - const char *tmp; - EphyNode *node = selection->data; - tmp = ephy_node_get_property_string (node, EPHY_NODE_BMK_PROP_LOCATION); - gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD), tmp, -1); - } + if (g_list_length (selection) == 1) { + const char *tmp; + EphyNode *node = selection->data; + tmp = ephy_node_get_property_string (node, EPHY_NODE_BMK_PROP_LOCATION); + gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD), tmp, -1); + } - g_list_free (selection); - } + g_list_free (selection); + } } static void -cmd_paste (GtkAction *action, - EphyBookmarksEditor *editor) +cmd_paste (GtkAction *action, + EphyBookmarksEditor *editor) { - GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor)); + GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor)); - if (GTK_IS_EDITABLE (widget)) - { - gtk_editable_paste_clipboard (GTK_EDITABLE (widget)); - } + if (GTK_IS_EDITABLE (widget)) { + gtk_editable_paste_clipboard (GTK_EDITABLE (widget)); + } } static void -cmd_select_all (GtkAction *action, - EphyBookmarksEditor *editor) +cmd_select_all (GtkAction *action, + EphyBookmarksEditor *editor) { - GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor)); - GtkWidget *bm_view = editor->bm_view; - - if (GTK_IS_EDITABLE (widget)) - { - gtk_editable_select_region (GTK_EDITABLE (widget), 0, -1); - } - else if (ephy_node_view_is_target (EPHY_NODE_VIEW (bm_view))) - { - GtkTreeSelection *sel; - - sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (bm_view)); - gtk_tree_selection_select_all (sel); - } + GtkWidget *widget = gtk_window_get_focus (GTK_WINDOW (editor)); + GtkWidget *bm_view = editor->bm_view; + + if (GTK_IS_EDITABLE (widget)) { + gtk_editable_select_region (GTK_EDITABLE (widget), 0, -1); + } else if (ephy_node_view_is_target (EPHY_NODE_VIEW (bm_view))) { + GtkTreeSelection *sel; + + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (bm_view)); + gtk_tree_selection_select_all (sel); + } } static void -cmd_help_contents (GtkAction *action, - EphyBookmarksEditor *editor) +cmd_help_contents (GtkAction *action, + EphyBookmarksEditor *editor) { - ephy_gui_help (GTK_WIDGET (editor), "bookmark"); + ephy_gui_help (GTK_WIDGET (editor), "bookmark"); } static void ephy_bookmarks_editor_show (GtkWidget *widget) { - EphyBookmarksEditor *editor = EPHY_BOOKMARKS_EDITOR (widget); + EphyBookmarksEditor *editor = EPHY_BOOKMARKS_EDITOR (widget); - gtk_widget_grab_focus (editor->search_entry); + gtk_widget_grab_focus (editor->search_entry); - GTK_WIDGET_CLASS (ephy_bookmarks_editor_parent_class)->show (widget); + GTK_WIDGET_CLASS (ephy_bookmarks_editor_parent_class)->show (widget); } static void ephy_bookmarks_editor_class_init (EphyBookmarksEditorClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - object_class->finalize = ephy_bookmarks_editor_finalize; - object_class->dispose = ephy_bookmarks_editor_dispose; + object_class->finalize = ephy_bookmarks_editor_finalize; + object_class->dispose = ephy_bookmarks_editor_dispose; - object_class->set_property = ephy_bookmarks_editor_set_property; - object_class->get_property = ephy_bookmarks_editor_get_property; + object_class->set_property = ephy_bookmarks_editor_set_property; + object_class->get_property = ephy_bookmarks_editor_get_property; - widget_class->show = ephy_bookmarks_editor_show; + widget_class->show = ephy_bookmarks_editor_show; - obj_properties[PROP_BOOKMARKS] = - g_param_spec_object ("bookmarks", - "Bookmarks set", - "Bookmarks set", - EPHY_TYPE_BOOKMARKS, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); + obj_properties[PROP_BOOKMARKS] = + g_param_spec_object ("bookmarks", + "Bookmarks set", + "Bookmarks set", + EPHY_TYPE_BOOKMARKS, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); - g_object_class_install_properties (object_class, LAST_PROP, obj_properties); + g_object_class_install_properties (object_class, LAST_PROP, obj_properties); } static void ephy_bookmarks_editor_finalize (GObject *object) { - /* FIXME: This should all be done in dispose, not finalize, but got to make sure that's safe. */ - EphyBookmarksEditor *editor = EPHY_BOOKMARKS_EDITOR (object); + /* FIXME: This should all be done in dispose, not finalize, but got to make sure that's safe. */ + EphyBookmarksEditor *editor = EPHY_BOOKMARKS_EDITOR (object); - g_object_unref (G_OBJECT (editor->bookmarks_filter)); + g_object_unref (G_OBJECT (editor->bookmarks_filter)); - g_object_unref (editor->action_group); - g_object_unref (editor->ui_merge); + g_object_unref (editor->action_group); + g_object_unref (editor->ui_merge); - if (editor->window) - { - GtkWidget **window = &editor->window; - g_object_remove_weak_pointer - (G_OBJECT(editor->window), - (gpointer *)window); - } + if (editor->window) { + GtkWidget **window = &editor->window; + g_object_remove_weak_pointer + (G_OBJECT (editor->window), + (gpointer *)window); + } - G_OBJECT_CLASS (ephy_bookmarks_editor_parent_class)->finalize (object); + G_OBJECT_CLASS (ephy_bookmarks_editor_parent_class)->finalize (object); } static void -ephy_bookmarks_editor_node_activated_cb (GtkWidget *view, - EphyNode *node, - EphyBookmarksEditor *editor) +ephy_bookmarks_editor_node_activated_cb (GtkWidget *view, + EphyNode *node, + EphyBookmarksEditor *editor) { - EphyEmbed *embed; + EphyEmbed *embed; - embed = ephy_shell_new_tab (ephy_shell_get_default (), - NULL, NULL, 0); - load_bookmark_in_tab (node, embed); + embed = ephy_shell_new_tab (ephy_shell_get_default (), + NULL, NULL, 0); + load_bookmark_in_tab (node, embed); } static void -ephy_bookmarks_editor_node_middle_clicked_cb (GtkWidget *view, - EphyNode *node, - EphyBookmarksEditor *editor) +ephy_bookmarks_editor_node_middle_clicked_cb (GtkWidget *view, + EphyNode *node, + EphyBookmarksEditor *editor) { - EphyWindow *window; - EphyEmbed *embed; + EphyWindow *window; + EphyEmbed *embed; - window = EPHY_WINDOW (get_target_window (editor)); + window = EPHY_WINDOW (get_target_window (editor)); - embed = ephy_shell_new_tab (ephy_shell_get_default (), - window, NULL, 0); - load_bookmark_in_tab (node, embed); + embed = ephy_shell_new_tab (ephy_shell_get_default (), + window, NULL, 0); + load_bookmark_in_tab (node, embed); } static void ephy_bookmarks_editor_update_menu (EphyBookmarksEditor *editor) { - gboolean open_in_window, open_in_tab, - rename, delete, properties; - const gchar *open_in_window_label, *open_in_tab_label, *copy_label; - gboolean bmk_focus, key_focus; - gboolean key_selection, bmk_selection, single_bmk_selected; - gboolean key_normal = FALSE; - gboolean cut, copy, paste, select_all; - gboolean mutable = TRUE; - gboolean fullscreen_lockdown; - - GtkActionGroup *action_group; - GtkAction *action; - GList *selected; - GtkWidget *focus_widget; - int num_bmk_selected; - - LOG ("Update menu sensitivity"); - - bmk_focus = ephy_node_view_is_target - (EPHY_NODE_VIEW (editor->bm_view)); - key_focus = ephy_node_view_is_target - (EPHY_NODE_VIEW (editor->key_view)); - focus_widget = gtk_window_get_focus (GTK_WINDOW (editor)); - - num_bmk_selected = gtk_tree_selection_count_selected_rows - (gtk_tree_view_get_selection (GTK_TREE_VIEW (editor->bm_view))); - bmk_selection = num_bmk_selected > 0; - single_bmk_selected = num_bmk_selected == 1; - - key_selection = gtk_tree_selection_count_selected_rows - (gtk_tree_view_get_selection (GTK_TREE_VIEW (editor->key_view))) > 0; - - if (GTK_IS_EDITABLE (focus_widget)) - { - gboolean has_selection; - - has_selection = gtk_editable_get_selection_bounds - (GTK_EDITABLE (focus_widget), NULL, NULL); - - cut = has_selection; - copy = has_selection; - paste = TRUE; - select_all = TRUE; - } - else - { - cut = FALSE; - copy = (bmk_focus && single_bmk_selected); - paste = FALSE; - select_all = bmk_focus; - } - - selected = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->key_view)); - if (key_focus && selected) - { - EphyNode *node = selected->data; - int priority; - char name[EPHY_TOPIC_ACTION_NAME_BUFFER_SIZE]; - - priority = ephy_node_get_property_int - (node, EPHY_NODE_KEYWORD_PROP_PRIORITY); - if (priority == -1) priority = EPHY_NODE_NORMAL_PRIORITY; - key_normal = (priority == EPHY_NODE_NORMAL_PRIORITY); - - EPHY_TOPIC_ACTION_NAME_PRINTF (name, node); - } - g_list_free (selected); - - selected = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->bm_view)); - if (bmk_focus && selected) - { - EphyNode *node = selected->data; - char name[EPHY_BOOKMARK_ACTION_NAME_BUFFER_SIZE]; - - if (node == NULL) return; - - mutable = !ephy_node_get_property_boolean (node, EPHY_NODE_BMK_PROP_IMMUTABLE); - - EPHY_BOOKMARK_ACTION_NAME_PRINTF (name, node); - } - g_list_free (selected); - - open_in_window_label = ngettext ("Open in New _Window", - "Open in New _Windows", - num_bmk_selected); - open_in_tab_label = ngettext ("Open in New _Tab", - "Open in New _Tabs", - num_bmk_selected); - - if (bmk_focus) - { - copy_label = _("_Copy Address"); - } - else - { - copy_label = _("_Copy"); - } - - fullscreen_lockdown = g_settings_get_boolean (EPHY_SETTINGS_LOCKDOWN, - EPHY_PREFS_LOCKDOWN_FULLSCREEN); - open_in_window = (bmk_focus && bmk_selection && !fullscreen_lockdown); - open_in_tab = (bmk_focus && bmk_selection); - rename = (bmk_focus && single_bmk_selected && mutable) || - (key_selection && key_focus && key_normal); - delete = (bmk_focus && bmk_selection && mutable) || - (key_selection && key_focus && key_normal); - properties = bmk_focus && single_bmk_selected && mutable; - - action_group = editor->action_group; - action = gtk_action_group_get_action (action_group, "OpenInWindow"); - gtk_action_set_sensitive (action, open_in_window); - g_object_set (action, "label", open_in_window_label, NULL); - action = gtk_action_group_get_action (action_group, "OpenInTab"); - gtk_action_set_sensitive (action, open_in_tab); - g_object_set (action, "label", open_in_tab_label, NULL); - action = gtk_action_group_get_action (action_group, "Rename"); - gtk_action_set_sensitive (action, rename); - action = gtk_action_group_get_action (action_group, "Delete"); - gtk_action_set_sensitive (action, delete); - action = gtk_action_group_get_action (action_group, "Properties"); - gtk_action_set_sensitive (action, properties); - action = gtk_action_group_get_action (action_group, "Cut"); - gtk_action_set_sensitive (action, cut); - action = gtk_action_group_get_action (action_group, "Copy"); - gtk_action_set_sensitive (action, copy); - g_object_set (action, "label", copy_label, NULL); - action = gtk_action_group_get_action (action_group, "Paste"); - gtk_action_set_sensitive (action, paste); - action = gtk_action_group_get_action (action_group, "SelectAll"); - g_object_set (action, "sensitive", select_all, NULL); + gboolean open_in_window, open_in_tab, + rename, delete, properties; + const gchar *open_in_window_label, *open_in_tab_label, *copy_label; + gboolean bmk_focus, key_focus; + gboolean key_selection, bmk_selection, single_bmk_selected; + gboolean key_normal = FALSE; + gboolean cut, copy, paste, select_all; + gboolean mutable = TRUE; + gboolean fullscreen_lockdown; + + GtkActionGroup *action_group; + GtkAction *action; + GList *selected; + GtkWidget *focus_widget; + int num_bmk_selected; + + LOG ("Update menu sensitivity"); + + bmk_focus = ephy_node_view_is_target + (EPHY_NODE_VIEW (editor->bm_view)); + key_focus = ephy_node_view_is_target + (EPHY_NODE_VIEW (editor->key_view)); + focus_widget = gtk_window_get_focus (GTK_WINDOW (editor)); + + num_bmk_selected = gtk_tree_selection_count_selected_rows + (gtk_tree_view_get_selection (GTK_TREE_VIEW (editor->bm_view))); + bmk_selection = num_bmk_selected > 0; + single_bmk_selected = num_bmk_selected == 1; + + key_selection = gtk_tree_selection_count_selected_rows + (gtk_tree_view_get_selection (GTK_TREE_VIEW (editor->key_view))) > 0; + + if (GTK_IS_EDITABLE (focus_widget)) { + gboolean has_selection; + + has_selection = gtk_editable_get_selection_bounds + (GTK_EDITABLE (focus_widget), NULL, NULL); + + cut = has_selection; + copy = has_selection; + paste = TRUE; + select_all = TRUE; + } else { + cut = FALSE; + copy = (bmk_focus && single_bmk_selected); + paste = FALSE; + select_all = bmk_focus; + } + + selected = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->key_view)); + if (key_focus && selected) { + EphyNode *node = selected->data; + int priority; + char name[EPHY_TOPIC_ACTION_NAME_BUFFER_SIZE]; + + priority = ephy_node_get_property_int + (node, EPHY_NODE_KEYWORD_PROP_PRIORITY); + if (priority == -1) priority = EPHY_NODE_NORMAL_PRIORITY; + key_normal = (priority == EPHY_NODE_NORMAL_PRIORITY); + + EPHY_TOPIC_ACTION_NAME_PRINTF (name, node); + } + g_list_free (selected); + + selected = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->bm_view)); + if (bmk_focus && selected) { + EphyNode *node = selected->data; + char name[EPHY_BOOKMARK_ACTION_NAME_BUFFER_SIZE]; + + if (node == NULL) return; + + mutable = !ephy_node_get_property_boolean (node, EPHY_NODE_BMK_PROP_IMMUTABLE); + + EPHY_BOOKMARK_ACTION_NAME_PRINTF (name, node); + } + g_list_free (selected); + + open_in_window_label = ngettext ("Open in New _Window", + "Open in New _Windows", + num_bmk_selected); + open_in_tab_label = ngettext ("Open in New _Tab", + "Open in New _Tabs", + num_bmk_selected); + + if (bmk_focus) { + copy_label = _("_Copy Address"); + } else { + copy_label = _("_Copy"); + } + + fullscreen_lockdown = g_settings_get_boolean (EPHY_SETTINGS_LOCKDOWN, + EPHY_PREFS_LOCKDOWN_FULLSCREEN); + open_in_window = (bmk_focus && bmk_selection && !fullscreen_lockdown); + open_in_tab = (bmk_focus && bmk_selection); + rename = (bmk_focus && single_bmk_selected && mutable) || + (key_selection && key_focus && key_normal); + delete = (bmk_focus && bmk_selection && mutable) || + (key_selection && key_focus && key_normal); + properties = bmk_focus && single_bmk_selected && mutable; + + action_group = editor->action_group; + action = gtk_action_group_get_action (action_group, "OpenInWindow"); + gtk_action_set_sensitive (action, open_in_window); + g_object_set (action, "label", open_in_window_label, NULL); + action = gtk_action_group_get_action (action_group, "OpenInTab"); + gtk_action_set_sensitive (action, open_in_tab); + g_object_set (action, "label", open_in_tab_label, NULL); + action = gtk_action_group_get_action (action_group, "Rename"); + gtk_action_set_sensitive (action, rename); + action = gtk_action_group_get_action (action_group, "Delete"); + gtk_action_set_sensitive (action, delete); + action = gtk_action_group_get_action (action_group, "Properties"); + gtk_action_set_sensitive (action, properties); + action = gtk_action_group_get_action (action_group, "Cut"); + gtk_action_set_sensitive (action, cut); + action = gtk_action_group_get_action (action_group, "Copy"); + gtk_action_set_sensitive (action, copy); + g_object_set (action, "label", copy_label, NULL); + action = gtk_action_group_get_action (action_group, "Paste"); + gtk_action_set_sensitive (action, paste); + action = gtk_action_group_get_action (action_group, "SelectAll"); + g_object_set (action, "sensitive", select_all, NULL); } static gboolean -view_focus_cb (EphyNodeView *view, - GdkEventFocus *event, - EphyBookmarksEditor *editor) +view_focus_cb (EphyNodeView *view, + GdkEventFocus *event, + EphyBookmarksEditor *editor) { - ephy_bookmarks_editor_update_menu (editor); + ephy_bookmarks_editor_update_menu (editor); - return FALSE; + return FALSE; } static void add_focus_monitor (EphyBookmarksEditor *editor, GtkWidget *widget) { - g_signal_connect (G_OBJECT (widget), - "focus_in_event", - G_CALLBACK (view_focus_cb), - editor); - g_signal_connect (G_OBJECT (widget), - "focus_out_event", - G_CALLBACK (view_focus_cb), - editor); + g_signal_connect (G_OBJECT (widget), + "focus_in_event", + G_CALLBACK (view_focus_cb), + editor); + g_signal_connect (G_OBJECT (widget), + "focus_out_event", + G_CALLBACK (view_focus_cb), + editor); } static void remove_focus_monitor (EphyBookmarksEditor *editor, GtkWidget *widget) { - g_signal_handlers_disconnect_by_func (G_OBJECT (widget), - G_CALLBACK (view_focus_cb), - editor); + g_signal_handlers_disconnect_by_func (G_OBJECT (widget), + G_CALLBACK (view_focus_cb), + editor); } static gboolean -ephy_bookmarks_editor_show_popup_cb (GtkWidget *view, - EphyBookmarksEditor *editor) +ephy_bookmarks_editor_show_popup_cb (GtkWidget *view, + EphyBookmarksEditor *editor) { - GtkWidget *widget; + GtkWidget *widget; - widget = gtk_ui_manager_get_widget (editor->ui_merge, - "/EphyBookmarkEditorPopup"); - ephy_node_view_popup (EPHY_NODE_VIEW (view), widget); + widget = gtk_ui_manager_get_widget (editor->ui_merge, + "/EphyBookmarkEditorPopup"); + ephy_node_view_popup (EPHY_NODE_VIEW (view), widget); - return TRUE; + return TRUE; } static void ephy_bookmarks_editor_dispose (GObject *object) { - EphyBookmarksEditor *editor; - GList *selection; + EphyBookmarksEditor *editor; + GList *selection; - g_return_if_fail (object != NULL); - g_return_if_fail (EPHY_IS_BOOKMARKS_EDITOR (object)); + g_return_if_fail (object != NULL); + g_return_if_fail (EPHY_IS_BOOKMARKS_EDITOR (object)); - editor = EPHY_BOOKMARKS_EDITOR (object); + editor = EPHY_BOOKMARKS_EDITOR (object); - if (editor->key_view != NULL) - { - remove_focus_monitor (editor, editor->key_view); - remove_focus_monitor (editor, editor->bm_view); - remove_focus_monitor (editor, editor->search_entry); + if (editor->key_view != NULL) { + remove_focus_monitor (editor, editor->key_view); + remove_focus_monitor (editor, editor->bm_view); + remove_focus_monitor (editor, editor->search_entry); - selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->key_view)); - if (selection == NULL || selection->data == NULL) - { - editor->key_view = NULL; - G_OBJECT_CLASS (ephy_bookmarks_editor_parent_class)->dispose (object); - return; - } + selection = ephy_node_view_get_selection (EPHY_NODE_VIEW (editor->key_view)); + if (selection == NULL || selection->data == NULL) { + editor->key_view = NULL; + G_OBJECT_CLASS (ephy_bookmarks_editor_parent_class)->dispose (object); + return; + } - g_list_free (selection); + g_list_free (selection); - editor->key_view = NULL; - } + editor->key_view = NULL; + } - G_OBJECT_CLASS (ephy_bookmarks_editor_parent_class)->dispose (object); + G_OBJECT_CLASS (ephy_bookmarks_editor_parent_class)->dispose (object); } static void bookmarks_filter (EphyBookmarksEditor *editor, - EphyNode *keyword) -{ - ephy_node_filter_empty (editor->bookmarks_filter); - ephy_node_filter_add_expression (editor->bookmarks_filter, - ephy_node_filter_expression_new (EPHY_NODE_FILTER_EXPRESSION_HAS_PARENT, - keyword), - 0); - ephy_node_filter_done_changing (editor->bookmarks_filter); + EphyNode *keyword) +{ + ephy_node_filter_empty (editor->bookmarks_filter); + ephy_node_filter_add_expression (editor->bookmarks_filter, + ephy_node_filter_expression_new (EPHY_NODE_FILTER_EXPRESSION_HAS_PARENT, + keyword), + 0); + ephy_node_filter_done_changing (editor->bookmarks_filter); } static gboolean -key_pressed_cb (EphyNodeView *view, - GdkEventKey *event, - EphyBookmarksEditor *editor) +key_pressed_cb (EphyNodeView *view, + GdkEventKey *event, + EphyBookmarksEditor *editor) { - GtkAction *action; - - if (event->keyval == GDK_KEY_Delete || event->keyval == GDK_KEY_KP_Delete) - { - action = gtk_action_group_get_action (editor->action_group, "Delete"); - if (gtk_action_get_sensitive (action)) - { - cmd_delete (NULL, editor); - return TRUE; - } - } - - return FALSE; + GtkAction *action; + + if (event->keyval == GDK_KEY_Delete || event->keyval == GDK_KEY_KP_Delete) { + action = gtk_action_group_get_action (editor->action_group, "Delete"); + if (gtk_action_get_sensitive (action)) { + cmd_delete (NULL, editor); + return TRUE; + } + } + + return FALSE; } static void -keyword_node_selected_cb (EphyNodeView *view, - EphyNode *node, - EphyBookmarksEditor *editor) -{ - EphyNode *bookmarks; - - if (node == NULL) - { - bookmarks = ephy_bookmarks_get_bookmarks (editor->bookmarks); - ephy_node_view_select_node (EPHY_NODE_VIEW (editor->key_view), bookmarks); - } - else - { - gtk_entry_set_text (GTK_ENTRY (editor->search_entry), ""); - bookmarks_filter (editor, node); - } +keyword_node_selected_cb (EphyNodeView *view, + EphyNode *node, + EphyBookmarksEditor *editor) +{ + EphyNode *bookmarks; + + if (node == NULL) { + bookmarks = ephy_bookmarks_get_bookmarks (editor->bookmarks); + ephy_node_view_select_node (EPHY_NODE_VIEW (editor->key_view), bookmarks); + } else { + gtk_entry_set_text (GTK_ENTRY (editor->search_entry), ""); + bookmarks_filter (editor, node); + } } static gboolean keyword_node_show_popup_cb (GtkWidget *view, EphyBookmarksEditor *editor) { - GtkWidget *widget; + GtkWidget *widget; - widget = gtk_ui_manager_get_widget (editor->ui_merge, - "/EphyBookmarkKeywordPopup"); - ephy_node_view_popup (EPHY_NODE_VIEW (view), widget); + widget = gtk_ui_manager_get_widget (editor->ui_merge, + "/EphyBookmarkKeywordPopup"); + ephy_node_view_popup (EPHY_NODE_VIEW (view), widget); - return TRUE; + return TRUE; } static void search_entry_changed_cb (GtkWidget *entry, EphyBookmarksEditor *editor) { - EphyNode *all; - const char *search_text; - - g_signal_handlers_block_by_func - (G_OBJECT (editor->key_view), - G_CALLBACK (keyword_node_selected_cb), - editor); - all = ephy_bookmarks_get_bookmarks (editor->bookmarks); - ephy_node_view_select_node (EPHY_NODE_VIEW (editor->key_view), - all); - g_signal_handlers_unblock_by_func - (G_OBJECT (editor->key_view), - G_CALLBACK (keyword_node_selected_cb), - editor); - - search_text = gtk_entry_get_text (GTK_ENTRY (entry)); - - ephy_node_filter_empty (editor->bookmarks_filter); - ephy_node_filter_add_expression (editor->bookmarks_filter, - ephy_node_filter_expression_new (EPHY_NODE_FILTER_EXPRESSION_STRING_PROP_CONTAINS, - EPHY_NODE_BMK_PROP_TITLE, - search_text), - 0); - ephy_node_filter_add_expression (editor->bookmarks_filter, - ephy_node_filter_expression_new (EPHY_NODE_FILTER_EXPRESSION_STRING_PROP_CONTAINS, - EPHY_NODE_BMK_PROP_LOCATION, - search_text), - 0); - ephy_node_filter_add_expression (editor->bookmarks_filter, - ephy_node_filter_expression_new (EPHY_NODE_FILTER_EXPRESSION_STRING_PROP_CONTAINS, - EPHY_NODE_BMK_PROP_KEYWORDS, - search_text), - 0); - ephy_node_filter_done_changing (editor->bookmarks_filter); + EphyNode *all; + const char *search_text; + + g_signal_handlers_block_by_func + (G_OBJECT (editor->key_view), + G_CALLBACK (keyword_node_selected_cb), + editor); + all = ephy_bookmarks_get_bookmarks (editor->bookmarks); + ephy_node_view_select_node (EPHY_NODE_VIEW (editor->key_view), + all); + g_signal_handlers_unblock_by_func + (G_OBJECT (editor->key_view), + G_CALLBACK (keyword_node_selected_cb), + editor); + + search_text = gtk_entry_get_text (GTK_ENTRY (entry)); + + ephy_node_filter_empty (editor->bookmarks_filter); + ephy_node_filter_add_expression (editor->bookmarks_filter, + ephy_node_filter_expression_new (EPHY_NODE_FILTER_EXPRESSION_STRING_PROP_CONTAINS, + EPHY_NODE_BMK_PROP_TITLE, + search_text), + 0); + ephy_node_filter_add_expression (editor->bookmarks_filter, + ephy_node_filter_expression_new (EPHY_NODE_FILTER_EXPRESSION_STRING_PROP_CONTAINS, + EPHY_NODE_BMK_PROP_LOCATION, + search_text), + 0); + ephy_node_filter_add_expression (editor->bookmarks_filter, + ephy_node_filter_expression_new (EPHY_NODE_FILTER_EXPRESSION_STRING_PROP_CONTAINS, + EPHY_NODE_BMK_PROP_KEYWORDS, + search_text), + 0); + ephy_node_filter_done_changing (editor->bookmarks_filter); } static GtkWidget * build_search_box (EphyBookmarksEditor *editor) { - GtkWidget *box; - GtkWidget *entry; - - box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); - gtk_container_set_border_width (GTK_CONTAINER (box), 6); - gtk_widget_show (box); - - entry = gtk_search_entry_new (); - editor->search_entry = entry; - - g_signal_connect (G_OBJECT (entry), "changed", - G_CALLBACK (search_entry_changed_cb), - editor); - add_entry_monitor (editor, entry); - add_focus_monitor (editor, entry); - - gtk_widget_show_all (entry); - - gtk_box_pack_start (GTK_BOX (box), - entry, TRUE, TRUE, 0); - - return box; + GtkWidget *box; + GtkWidget *entry; + + box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); + gtk_container_set_border_width (GTK_CONTAINER (box), 6); + gtk_widget_show (box); + + entry = gtk_search_entry_new (); + editor->search_entry = entry; + + g_signal_connect (G_OBJECT (entry), "changed", + G_CALLBACK (search_entry_changed_cb), + editor); + add_entry_monitor (editor, entry); + add_focus_monitor (editor, entry); + + gtk_widget_show_all (entry); + + gtk_box_pack_start (GTK_BOX (box), + entry, TRUE, TRUE, 0); + + return box; } static void add_widget (GtkUIManager *merge, GtkWidget *widget, EphyBookmarksEditor *editor) { - gtk_box_pack_start (GTK_BOX (editor->main_vbox), - widget, FALSE, FALSE, 0); - gtk_widget_show (widget); + gtk_box_pack_start (GTK_BOX (editor->main_vbox), + widget, FALSE, FALSE, 0); + gtk_widget_show (widget); } static gboolean delete_event_cb (EphyBookmarksEditor *editor) { - gtk_widget_hide (GTK_WIDGET (editor)); + gtk_widget_hide (GTK_WIDGET (editor)); - return TRUE; + return TRUE; } static void -node_dropped_cb (EphyNodeView *view, - EphyNode *node, - const char * const *uris, - EphyBookmarksEditor *editor) +node_dropped_cb (EphyNodeView *view, + EphyNode *node, + const char * const *uris, + EphyBookmarksEditor *editor) { - EphyNode *bmk; - int i; + EphyNode *bmk; + int i; - g_return_if_fail (uris != NULL); + g_return_if_fail (uris != NULL); - for (i = 0; uris[i] != NULL; i++) - { - bmk = ephy_bookmarks_find_bookmark (editor->bookmarks, uris[i]); + for (i = 0; uris[i] != NULL; i++) { + bmk = ephy_bookmarks_find_bookmark (editor->bookmarks, uris[i]); - if (bmk != NULL) - { - ephy_bookmarks_set_keyword (editor->bookmarks, node, bmk); - } - } + if (bmk != NULL) { + ephy_bookmarks_set_keyword (editor->bookmarks, node, bmk); + } + } } /* TODO: Favicons */ @@ -1451,346 +1368,342 @@ node_dropped_cb (EphyNodeView *view, static void provide_favicon (EphyNode *node, GValue *value, gpointer user_data) { - GdkPixbuf *favicon = NULL; + GdkPixbuf *favicon = NULL; - /* TODO: Favicons */ - g_value_init (value, GDK_TYPE_PIXBUF); - g_value_take_object (value, favicon); + /* TODO: Favicons */ + g_value_init (value, GDK_TYPE_PIXBUF); + g_value_take_object (value, favicon); } static void view_selection_changed_cb (GtkWidget *view, EphyBookmarksEditor *editor) { - ephy_bookmarks_editor_update_menu (editor); + ephy_bookmarks_editor_update_menu (editor); } static void provide_keyword_uri (EphyNode *node, GValue *value, gpointer data) { - EphyBookmarks *bookmarks = EPHY_BOOKMARKS_EDITOR (data)->bookmarks; - char *uri; + EphyBookmarks *bookmarks = EPHY_BOOKMARKS_EDITOR (data)->bookmarks; + char *uri; - uri = ephy_bookmarks_get_topic_uri (bookmarks, node); + uri = ephy_bookmarks_get_topic_uri (bookmarks, node); - g_value_init (value, G_TYPE_STRING); - g_value_set_string (value, uri); - g_free (uri); + g_value_init (value, G_TYPE_STRING); + g_value_set_string (value, uri); + g_free (uri); } static void decode_bookmark_uri (EphyNode *node, - GValue *value, - gpointer user_data) + GValue *value, + gpointer user_data) { - const char *url = g_value_get_string (value); - g_value_take_string (value, ephy_uri_decode (url)); + const char *url = g_value_get_string (value); + g_value_take_string (value, ephy_uri_decode (url)); } static void ephy_bookmarks_editor_construct (EphyBookmarksEditor *editor) { - GtkTreeSelection *selection; - GtkWidget *hpaned, *vbox; - GtkWidget *bm_view, *key_view; - GtkWidget *scrolled_window; - EphyNode *node; - GtkUIManager *ui_merge; - GtkActionGroup *action_group; - GtkAction *action; - int col_id, url_col_id, title_col_id; - - ephy_gui_ensure_window_group (GTK_WINDOW (editor)); - - gtk_window_set_title (GTK_WINDOW (editor), _("Bookmarks")); - - g_signal_connect (editor, "delete_event", - G_CALLBACK (delete_event_cb), NULL); - - editor->main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); - gtk_widget_show (editor->main_vbox); - gtk_container_add (GTK_CONTAINER (editor), editor->main_vbox); - - ui_merge = gtk_ui_manager_new (); - g_signal_connect (ui_merge, "add_widget", G_CALLBACK (add_widget), editor); - action_group = gtk_action_group_new ("PopupActions"); - gtk_action_group_set_translation_domain (action_group, NULL); - gtk_action_group_add_actions (action_group, ephy_bookmark_popup_entries, - G_N_ELEMENTS (ephy_bookmark_popup_entries), editor); - gtk_action_group_add_toggle_actions (action_group, ephy_bookmark_toggle_entries, - G_N_ELEMENTS (ephy_bookmark_toggle_entries), editor); - - gtk_ui_manager_insert_action_group (ui_merge, - action_group, 0); - gtk_ui_manager_add_ui_from_resource (ui_merge, - "/org/gnome/epiphany/epiphany-bookmark-editor-ui.xml", - NULL); - gtk_window_add_accel_group (GTK_WINDOW (editor), - gtk_ui_manager_get_accel_group (ui_merge)); - gtk_ui_manager_ensure_update (ui_merge); - - editor->ui_merge = ui_merge; - editor->action_group = action_group; - - hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); - gtk_container_set_border_width (GTK_CONTAINER (hpaned), 0); - gtk_box_pack_end (GTK_BOX (editor->main_vbox), hpaned, - TRUE, TRUE, 0); - gtk_widget_show (hpaned); - - g_assert (editor->bookmarks); - - node = ephy_bookmarks_get_keywords (editor->bookmarks); - - scrolled_window = g_object_new (GTK_TYPE_SCROLLED_WINDOW, - "hadjustment", NULL, - "vadjustment", NULL, - "hscrollbar_policy", GTK_POLICY_AUTOMATIC, - "vscrollbar_policy", GTK_POLICY_AUTOMATIC, - "shadow_type", GTK_SHADOW_IN, - NULL); - gtk_paned_pack1 (GTK_PANED (hpaned), GTK_WIDGET (scrolled_window), FALSE, TRUE); - gtk_widget_show (scrolled_window); - - /* Keywords View */ - key_view = ephy_node_view_new (node, NULL); - add_focus_monitor (editor, key_view); - col_id = ephy_node_view_add_data_column (EPHY_NODE_VIEW (key_view), - G_TYPE_STRING, -1, - provide_keyword_uri, editor); - ephy_node_view_add_column (EPHY_NODE_VIEW (key_view), _("Topics"), - G_TYPE_STRING, - EPHY_NODE_KEYWORD_PROP_NAME, - EPHY_NODE_VIEW_SHOW_PRIORITY | - EPHY_NODE_VIEW_EDITABLE | - EPHY_NODE_VIEW_SEARCHABLE, NULL, NULL); - ephy_node_view_enable_drag_source (EPHY_NODE_VIEW (key_view), - topic_drag_types, - G_N_ELEMENTS (topic_drag_types), - col_id, -1); - ephy_node_view_enable_drag_dest (EPHY_NODE_VIEW (key_view), - topic_drag_dest_types, - G_N_ELEMENTS (topic_drag_dest_types)); - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (key_view)); - gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); - g_signal_connect (G_OBJECT (selection), - "changed", - G_CALLBACK (view_selection_changed_cb), - editor); - ephy_node_view_set_priority (EPHY_NODE_VIEW (key_view), - (EphyNodeViewPriority)EPHY_NODE_KEYWORD_PROP_PRIORITY); - ephy_node_view_set_sort (EPHY_NODE_VIEW (key_view), G_TYPE_STRING, - EPHY_NODE_KEYWORD_PROP_NAME, GTK_SORT_ASCENDING); - gtk_container_add (GTK_CONTAINER (scrolled_window), key_view); - gtk_widget_set_size_request (key_view, 130, -1); - gtk_widget_show (key_view); - editor->key_view = key_view; - g_signal_connect (G_OBJECT (key_view), - "key_press_event", - G_CALLBACK (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), - "node_dropped", - G_CALLBACK (node_dropped_cb), - editor); - g_signal_connect (G_OBJECT (key_view), - "popup_menu", - G_CALLBACK (keyword_node_show_popup_cb), - editor); - - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); - gtk_paned_pack2 (GTK_PANED (hpaned), vbox, TRUE, TRUE); - gtk_widget_show (vbox); - - gtk_box_pack_start (GTK_BOX (editor->main_vbox), - build_search_box (editor), - FALSE, FALSE, 0); - add_focus_monitor (editor, editor->search_entry); - - scrolled_window = g_object_new (GTK_TYPE_SCROLLED_WINDOW, - "hadjustment", NULL, - "vadjustment", NULL, - "hscrollbar_policy", GTK_POLICY_AUTOMATIC, - "vscrollbar_policy", GTK_POLICY_AUTOMATIC, - "shadow_type", GTK_SHADOW_IN, - NULL); - gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0); - gtk_widget_show (scrolled_window); - - node = ephy_bookmarks_get_bookmarks (editor->bookmarks); - editor->bookmarks_filter = ephy_node_filter_new (); - - /* Bookmarks View */ - bm_view = ephy_node_view_new (node, editor->bookmarks_filter); - add_focus_monitor (editor, bm_view); - title_col_id = ephy_node_view_add_column - (EPHY_NODE_VIEW (bm_view), _("Title"), - G_TYPE_STRING, EPHY_NODE_BMK_PROP_TITLE, - EPHY_NODE_VIEW_EDITABLE | - EPHY_NODE_VIEW_SEARCHABLE | - EPHY_NODE_VIEW_SORTABLE | - EPHY_NODE_VIEW_ELLIPSIZED, - provide_favicon, &(editor->title_col)); - gtk_tree_view_column_set_min_width (editor->title_col, 300); - gtk_tree_view_column_set_resizable (editor->title_col, TRUE); - - url_col_id = ephy_node_view_add_column_full - (EPHY_NODE_VIEW (bm_view), _("Address"), - G_TYPE_STRING, EPHY_NODE_BMK_PROP_LOCATION, - EPHY_NODE_VIEW_SORTABLE | - EPHY_NODE_VIEW_ELLIPSIZED, - decode_bookmark_uri, NULL, - NULL, &(editor->address_col)); - gtk_tree_view_column_set_min_width (editor->address_col, 300); - gtk_tree_view_column_set_resizable (editor->address_col, TRUE); - - ephy_node_view_enable_drag_source (EPHY_NODE_VIEW (bm_view), - bmk_drag_types, - G_N_ELEMENTS (bmk_drag_types), - url_col_id, title_col_id); - ephy_node_view_set_sort (EPHY_NODE_VIEW (bm_view), G_TYPE_STRING, - EPHY_NODE_BMK_PROP_TITLE, GTK_SORT_ASCENDING); - gtk_container_add (GTK_CONTAINER (scrolled_window), bm_view); - gtk_widget_show (bm_view); - editor->bm_view = bm_view; - - action = gtk_action_group_get_action (action_group, "ViewTitle"); - g_settings_bind (EPHY_SETTINGS_STATE, - EPHY_PREFS_STATE_BOOKMARKS_VIEW_TITLE, - action, "active", - G_SETTINGS_BIND_DEFAULT); - g_settings_bind (EPHY_SETTINGS_STATE, - EPHY_PREFS_STATE_BOOKMARKS_VIEW_TITLE, - editor->title_col, "visible", - G_SETTINGS_BIND_DEFAULT); - - action = gtk_action_group_get_action (action_group, "ViewAddress"); - g_settings_bind (EPHY_SETTINGS_STATE, - EPHY_PREFS_STATE_BOOKMARKS_VIEW_ADDRESS, - action, "active", - G_SETTINGS_BIND_DEFAULT); - g_settings_bind (EPHY_SETTINGS_STATE, - EPHY_PREFS_STATE_BOOKMARKS_VIEW_ADDRESS, - editor->address_col, "visible", - G_SETTINGS_BIND_DEFAULT); - - g_signal_connect (G_OBJECT (bm_view), - "key_press_event", - G_CALLBACK (key_pressed_cb), - editor); - g_signal_connect (G_OBJECT (bm_view), - "node_activated", - G_CALLBACK (ephy_bookmarks_editor_node_activated_cb), - editor); - g_signal_connect (G_OBJECT (bm_view), - "node_middle_clicked", - G_CALLBACK (ephy_bookmarks_editor_node_middle_clicked_cb), - editor); - g_signal_connect (G_OBJECT (bm_view), - "popup_menu", - G_CALLBACK (ephy_bookmarks_editor_show_popup_cb), - editor); - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (bm_view)); - g_signal_connect (G_OBJECT (selection), - "changed", - G_CALLBACK (view_selection_changed_cb), - editor); - - ephy_initial_state_add_window (GTK_WIDGET(editor), - "bookmarks_editor", - 450, 400, FALSE, - EPHY_INITIAL_STATE_WINDOW_SAVE_SIZE | EPHY_INITIAL_STATE_WINDOW_SAVE_POSITION); - ephy_initial_state_add_paned (GTK_WIDGET (hpaned), - "bookmarks_paned", - 130); - - /* Lockdown settings */ - action = gtk_action_group_get_action (action_group, "Export"); - gtk_action_set_sensitive (action, - g_settings_get_boolean - (EPHY_SETTINGS_LOCKDOWN, - EPHY_PREFS_LOCKDOWN_SAVE_TO_DISK) == FALSE); + GtkTreeSelection *selection; + GtkWidget *hpaned, *vbox; + GtkWidget *bm_view, *key_view; + GtkWidget *scrolled_window; + EphyNode *node; + GtkUIManager *ui_merge; + GtkActionGroup *action_group; + GtkAction *action; + int col_id, url_col_id, title_col_id; + + ephy_gui_ensure_window_group (GTK_WINDOW (editor)); + + gtk_window_set_title (GTK_WINDOW (editor), _("Bookmarks")); + + g_signal_connect (editor, "delete_event", + G_CALLBACK (delete_event_cb), NULL); + + editor->main_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_widget_show (editor->main_vbox); + gtk_container_add (GTK_CONTAINER (editor), editor->main_vbox); + + ui_merge = gtk_ui_manager_new (); + g_signal_connect (ui_merge, "add_widget", G_CALLBACK (add_widget), editor); + action_group = gtk_action_group_new ("PopupActions"); + gtk_action_group_set_translation_domain (action_group, NULL); + gtk_action_group_add_actions (action_group, ephy_bookmark_popup_entries, + G_N_ELEMENTS (ephy_bookmark_popup_entries), editor); + gtk_action_group_add_toggle_actions (action_group, ephy_bookmark_toggle_entries, + G_N_ELEMENTS (ephy_bookmark_toggle_entries), editor); + + gtk_ui_manager_insert_action_group (ui_merge, + action_group, 0); + gtk_ui_manager_add_ui_from_resource (ui_merge, + "/org/gnome/epiphany/epiphany-bookmark-editor-ui.xml", + NULL); + gtk_window_add_accel_group (GTK_WINDOW (editor), + gtk_ui_manager_get_accel_group (ui_merge)); + gtk_ui_manager_ensure_update (ui_merge); + + editor->ui_merge = ui_merge; + editor->action_group = action_group; + + hpaned = gtk_paned_new (GTK_ORIENTATION_HORIZONTAL); + gtk_container_set_border_width (GTK_CONTAINER (hpaned), 0); + gtk_box_pack_end (GTK_BOX (editor->main_vbox), hpaned, + TRUE, TRUE, 0); + gtk_widget_show (hpaned); + + g_assert (editor->bookmarks); + + node = ephy_bookmarks_get_keywords (editor->bookmarks); + + scrolled_window = g_object_new (GTK_TYPE_SCROLLED_WINDOW, + "hadjustment", NULL, + "vadjustment", NULL, + "hscrollbar_policy", GTK_POLICY_AUTOMATIC, + "vscrollbar_policy", GTK_POLICY_AUTOMATIC, + "shadow_type", GTK_SHADOW_IN, + NULL); + gtk_paned_pack1 (GTK_PANED (hpaned), GTK_WIDGET (scrolled_window), FALSE, TRUE); + gtk_widget_show (scrolled_window); + + /* Keywords View */ + key_view = ephy_node_view_new (node, NULL); + add_focus_monitor (editor, key_view); + col_id = ephy_node_view_add_data_column (EPHY_NODE_VIEW (key_view), + G_TYPE_STRING, -1, + provide_keyword_uri, editor); + ephy_node_view_add_column (EPHY_NODE_VIEW (key_view), _("Topics"), + G_TYPE_STRING, + EPHY_NODE_KEYWORD_PROP_NAME, + EPHY_NODE_VIEW_SHOW_PRIORITY | + EPHY_NODE_VIEW_EDITABLE | + EPHY_NODE_VIEW_SEARCHABLE, NULL, NULL); + ephy_node_view_enable_drag_source (EPHY_NODE_VIEW (key_view), + topic_drag_types, + G_N_ELEMENTS (topic_drag_types), + col_id, -1); + ephy_node_view_enable_drag_dest (EPHY_NODE_VIEW (key_view), + topic_drag_dest_types, + G_N_ELEMENTS (topic_drag_dest_types)); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (key_view)); + gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE); + g_signal_connect (G_OBJECT (selection), + "changed", + G_CALLBACK (view_selection_changed_cb), + editor); + ephy_node_view_set_priority (EPHY_NODE_VIEW (key_view), + (EphyNodeViewPriority)EPHY_NODE_KEYWORD_PROP_PRIORITY); + ephy_node_view_set_sort (EPHY_NODE_VIEW (key_view), G_TYPE_STRING, + EPHY_NODE_KEYWORD_PROP_NAME, GTK_SORT_ASCENDING); + gtk_container_add (GTK_CONTAINER (scrolled_window), key_view); + gtk_widget_set_size_request (key_view, 130, -1); + gtk_widget_show (key_view); + editor->key_view = key_view; + g_signal_connect (G_OBJECT (key_view), + "key_press_event", + G_CALLBACK (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), + "node_dropped", + G_CALLBACK (node_dropped_cb), + editor); + g_signal_connect (G_OBJECT (key_view), + "popup_menu", + G_CALLBACK (keyword_node_show_popup_cb), + editor); + + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_paned_pack2 (GTK_PANED (hpaned), vbox, TRUE, TRUE); + gtk_widget_show (vbox); + + gtk_box_pack_start (GTK_BOX (editor->main_vbox), + build_search_box (editor), + FALSE, FALSE, 0); + add_focus_monitor (editor, editor->search_entry); + + scrolled_window = g_object_new (GTK_TYPE_SCROLLED_WINDOW, + "hadjustment", NULL, + "vadjustment", NULL, + "hscrollbar_policy", GTK_POLICY_AUTOMATIC, + "vscrollbar_policy", GTK_POLICY_AUTOMATIC, + "shadow_type", GTK_SHADOW_IN, + NULL); + gtk_box_pack_start (GTK_BOX (vbox), scrolled_window, TRUE, TRUE, 0); + gtk_widget_show (scrolled_window); + + node = ephy_bookmarks_get_bookmarks (editor->bookmarks); + editor->bookmarks_filter = ephy_node_filter_new (); + + /* Bookmarks View */ + bm_view = ephy_node_view_new (node, editor->bookmarks_filter); + add_focus_monitor (editor, bm_view); + title_col_id = ephy_node_view_add_column + (EPHY_NODE_VIEW (bm_view), _("Title"), + G_TYPE_STRING, EPHY_NODE_BMK_PROP_TITLE, + EPHY_NODE_VIEW_EDITABLE | + EPHY_NODE_VIEW_SEARCHABLE | + EPHY_NODE_VIEW_SORTABLE | + EPHY_NODE_VIEW_ELLIPSIZED, + provide_favicon, &(editor->title_col)); + gtk_tree_view_column_set_min_width (editor->title_col, 300); + gtk_tree_view_column_set_resizable (editor->title_col, TRUE); + + url_col_id = ephy_node_view_add_column_full + (EPHY_NODE_VIEW (bm_view), _("Address"), + G_TYPE_STRING, EPHY_NODE_BMK_PROP_LOCATION, + EPHY_NODE_VIEW_SORTABLE | + EPHY_NODE_VIEW_ELLIPSIZED, + decode_bookmark_uri, NULL, + NULL, &(editor->address_col)); + gtk_tree_view_column_set_min_width (editor->address_col, 300); + gtk_tree_view_column_set_resizable (editor->address_col, TRUE); + + ephy_node_view_enable_drag_source (EPHY_NODE_VIEW (bm_view), + bmk_drag_types, + G_N_ELEMENTS (bmk_drag_types), + url_col_id, title_col_id); + ephy_node_view_set_sort (EPHY_NODE_VIEW (bm_view), G_TYPE_STRING, + EPHY_NODE_BMK_PROP_TITLE, GTK_SORT_ASCENDING); + gtk_container_add (GTK_CONTAINER (scrolled_window), bm_view); + gtk_widget_show (bm_view); + editor->bm_view = bm_view; + + action = gtk_action_group_get_action (action_group, "ViewTitle"); + g_settings_bind (EPHY_SETTINGS_STATE, + EPHY_PREFS_STATE_BOOKMARKS_VIEW_TITLE, + action, "active", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind (EPHY_SETTINGS_STATE, + EPHY_PREFS_STATE_BOOKMARKS_VIEW_TITLE, + editor->title_col, "visible", + G_SETTINGS_BIND_DEFAULT); + + action = gtk_action_group_get_action (action_group, "ViewAddress"); + g_settings_bind (EPHY_SETTINGS_STATE, + EPHY_PREFS_STATE_BOOKMARKS_VIEW_ADDRESS, + action, "active", + G_SETTINGS_BIND_DEFAULT); + g_settings_bind (EPHY_SETTINGS_STATE, + EPHY_PREFS_STATE_BOOKMARKS_VIEW_ADDRESS, + editor->address_col, "visible", + G_SETTINGS_BIND_DEFAULT); + + g_signal_connect (G_OBJECT (bm_view), + "key_press_event", + G_CALLBACK (key_pressed_cb), + editor); + g_signal_connect (G_OBJECT (bm_view), + "node_activated", + G_CALLBACK (ephy_bookmarks_editor_node_activated_cb), + editor); + g_signal_connect (G_OBJECT (bm_view), + "node_middle_clicked", + G_CALLBACK (ephy_bookmarks_editor_node_middle_clicked_cb), + editor); + g_signal_connect (G_OBJECT (bm_view), + "popup_menu", + G_CALLBACK (ephy_bookmarks_editor_show_popup_cb), + editor); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (bm_view)); + g_signal_connect (G_OBJECT (selection), + "changed", + G_CALLBACK (view_selection_changed_cb), + editor); + + ephy_initial_state_add_window (GTK_WIDGET (editor), + "bookmarks_editor", + 450, 400, FALSE, + EPHY_INITIAL_STATE_WINDOW_SAVE_SIZE | EPHY_INITIAL_STATE_WINDOW_SAVE_POSITION); + ephy_initial_state_add_paned (GTK_WIDGET (hpaned), + "bookmarks_paned", + 130); + + /* Lockdown settings */ + action = gtk_action_group_get_action (action_group, "Export"); + gtk_action_set_sensitive (action, + g_settings_get_boolean + (EPHY_SETTINGS_LOCKDOWN, + EPHY_PREFS_LOCKDOWN_SAVE_TO_DISK) == FALSE); } void ephy_bookmarks_editor_set_parent (EphyBookmarksEditor *ebe, - GtkWidget *window) -{ - GtkWidget **w; - if (ebe->window) - { - w = &ebe->window; - g_object_remove_weak_pointer - (G_OBJECT(ebe->window), - (gpointer *)w); - } - - ebe->window = window; - w = &ebe->window; - - g_object_add_weak_pointer - (G_OBJECT(ebe->window), - (gpointer *)w); - + GtkWidget *window) +{ + GtkWidget **w; + if (ebe->window) { + w = &ebe->window; + g_object_remove_weak_pointer + (G_OBJECT (ebe->window), + (gpointer *)w); + } + + ebe->window = window; + w = &ebe->window; + + g_object_add_weak_pointer + (G_OBJECT (ebe->window), + (gpointer *)w); } GtkWidget * ephy_bookmarks_editor_new (EphyBookmarks *bookmarks) { - EphyBookmarksEditor *editor; + EphyBookmarksEditor *editor; - g_assert (bookmarks != NULL); + g_assert (bookmarks != NULL); - editor = EPHY_BOOKMARKS_EDITOR (g_object_new - (EPHY_TYPE_BOOKMARKS_EDITOR, - "bookmarks", bookmarks, - NULL)); + editor = EPHY_BOOKMARKS_EDITOR (g_object_new + (EPHY_TYPE_BOOKMARKS_EDITOR, + "bookmarks", bookmarks, + NULL)); - ephy_bookmarks_editor_construct (editor); + ephy_bookmarks_editor_construct (editor); - return GTK_WIDGET (editor); + return GTK_WIDGET (editor); } static void -ephy_bookmarks_editor_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - EphyBookmarksEditor *editor = EPHY_BOOKMARKS_EDITOR (object); - - switch (prop_id) - { - case PROP_BOOKMARKS: - editor->bookmarks = g_value_get_object (value); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } +ephy_bookmarks_editor_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + EphyBookmarksEditor *editor = EPHY_BOOKMARKS_EDITOR (object); + + switch (prop_id) { + case PROP_BOOKMARKS: + editor->bookmarks = g_value_get_object (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void -ephy_bookmarks_editor_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - EphyBookmarksEditor *editor = EPHY_BOOKMARKS_EDITOR (object); - - switch (prop_id) - { - case PROP_BOOKMARKS: - g_value_set_object (value, editor->bookmarks); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } +ephy_bookmarks_editor_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + EphyBookmarksEditor *editor = EPHY_BOOKMARKS_EDITOR (object); + + switch (prop_id) { + case PROP_BOOKMARKS: + g_value_set_object (value, editor->bookmarks); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void |