aboutsummaryrefslogtreecommitdiffstats
path: root/src/bookmarks/ephy-bookmarks-ui.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bookmarks/ephy-bookmarks-ui.c')
-rw-r--r--src/bookmarks/ephy-bookmarks-ui.c471
1 files changed, 256 insertions, 215 deletions
diff --git a/src/bookmarks/ephy-bookmarks-ui.c b/src/bookmarks/ephy-bookmarks-ui.c
index ae801ff36..e60761913 100644
--- a/src/bookmarks/ephy-bookmarks-ui.c
+++ b/src/bookmarks/ephy-bookmarks-ui.c
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2005 Peter Harvey
+ * Copyright (C) 2006 Christian Persch
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -39,10 +40,12 @@
#include "ephy-debug.h"
#include "ephy-file-helpers.h"
#include "ephy-gui.h"
+#include "ephy-stock-icons.h"
#include "egg-editable-toolbar.h"
#include <string.h>
#include <glib/gi18n.h>
+#include <gtk/gtkmain.h>
#define BM_WINDOW_DATA_KEY "bookmarks-window-data"
@@ -52,12 +55,15 @@ typedef struct
guint toolbar_menu;
} BookmarksWindowData;
-
+enum
+{
+ RESPONSE_SHOW_PROPERTIES = 1,
+ RESPONSE_NEW_BOOKMARK = 2
+};
static GString * bookmarks_menu_string = 0;
static GHashTable *properties_dialogs = 0;
-
static GtkAction *
find_action (GtkUIManager *manager, const char *name)
{
@@ -99,35 +105,51 @@ activate_bookmarks_menu (GtkAction *action, EphyWindow *window)
}
static void
-activate_bookmark_properties (GtkAction *action, EggEditableToolbar *etoolbar)
+activate_bookmark_properties (GtkAction *action,
+ EggEditableToolbar *etoolbar)
{
- GtkWidget *widget = gtk_widget_get_ancestor
- (egg_editable_toolbar_get_selected (etoolbar), GTK_TYPE_TOOL_ITEM);
- GtkAction *baction = widget ? g_object_get_data (G_OBJECT (widget), "gtk-action") : NULL;
+ GtkAction *baction;
+ GtkWidget *widget;
+
+ widget = gtk_widget_get_ancestor (egg_editable_toolbar_get_selected (etoolbar),
+ GTK_TYPE_TOOL_ITEM);
+ baction = widget ? g_object_get_data (G_OBJECT (widget), "gtk-action") : NULL;
g_return_if_fail (EPHY_IS_BOOKMARK_ACTION (baction));
- ephy_bookmarks_ui_show_bookmark (GTK_WIDGET (etoolbar),
- ephy_bookmark_action_get_bookmark
- (EPHY_BOOKMARK_ACTION (baction)));
+
+ ephy_bookmarks_ui_show_bookmark (ephy_bookmark_action_get_bookmark
+ (EPHY_BOOKMARK_ACTION (baction)));
}
static void
-activate_bookmark_open_tab (GtkAction *action, EggEditableToolbar *etoolbar)
+activate_bookmark_open_tab (GtkAction *action,
+ EggEditableToolbar *etoolbar)
{
- GtkWidget *widget = gtk_widget_get_ancestor
- (egg_editable_toolbar_get_selected (etoolbar), GTK_TYPE_TOOL_ITEM);
- GtkAction *baction = widget ? g_object_get_data (G_OBJECT (widget), "gtk-action") : NULL;
+ GtkAction *baction;
+ GtkWidget *widget;
+
+ widget = gtk_widget_get_ancestor (egg_editable_toolbar_get_selected (etoolbar),
+ GTK_TYPE_TOOL_ITEM);
+ baction = widget ? g_object_get_data (G_OBJECT (widget), "gtk-action") : NULL;
g_return_if_fail (EPHY_IS_BOOKMARK_ACTION (baction));
- ephy_bookmark_action_activate (EPHY_BOOKMARK_ACTION (baction), widget, EPHY_LINK_NEW_TAB);
+
+ ephy_bookmark_action_activate (EPHY_BOOKMARK_ACTION (baction), widget,
+ EPHY_LINK_NEW_TAB);
}
static void
-activate_bookmark_open_window (GtkAction *action, EggEditableToolbar *etoolbar)
+activate_bookmark_open_window (GtkAction *action,
+ EggEditableToolbar *etoolbar)
{
- GtkWidget *widget = gtk_widget_get_ancestor
- (egg_editable_toolbar_get_selected (etoolbar), GTK_TYPE_TOOL_ITEM);
- GtkAction *baction = widget ? g_object_get_data (G_OBJECT (widget), "gtk-action") : NULL;
+ GtkAction *baction;
+ GtkWidget *widget;
+
+ widget = gtk_widget_get_ancestor (egg_editable_toolbar_get_selected (etoolbar),
+ GTK_TYPE_TOOL_ITEM);
+ baction = widget ? g_object_get_data (G_OBJECT (widget), "gtk-action") : NULL;
g_return_if_fail (EPHY_IS_BOOKMARK_ACTION (baction));
- ephy_bookmark_action_activate (EPHY_BOOKMARK_ACTION (baction), widget, EPHY_LINK_NEW_WINDOW);
+
+ ephy_bookmark_action_activate (EPHY_BOOKMARK_ACTION (baction), widget,
+ EPHY_LINK_NEW_WINDOW);
}
static void
@@ -135,49 +157,67 @@ selected_bookmark_action (EggEditableToolbar *etoolbar,
GParamSpec *pspec,
GtkAction *action)
{
- GtkWidget *widget = gtk_widget_get_ancestor (egg_editable_toolbar_get_selected (etoolbar),
- GTK_TYPE_TOOL_ITEM);
- GtkAction *baction = widget ? g_object_get_data (G_OBJECT (widget), "gtk-action") : NULL;
+ GtkAction *baction;
+ GtkWidget *widget;
+
+ widget = gtk_widget_get_ancestor (egg_editable_toolbar_get_selected (etoolbar),
+ GTK_TYPE_TOOL_ITEM);
+ baction = widget ? g_object_get_data (G_OBJECT (widget), "gtk-action") : NULL;
+
gtk_action_set_visible (action, EPHY_IS_BOOKMARK_ACTION (baction));
}
static void
erase_bookmarks_menu (EphyWindow *window)
{
- BookmarksWindowData *data = g_object_get_data (G_OBJECT (window), BM_WINDOW_DATA_KEY);
- GtkUIManager *manager = GTK_UI_MANAGER (ephy_window_get_ui_manager (window));
-
+ BookmarksWindowData *data;
+ GtkUIManager *manager;
+
+ manager = GTK_UI_MANAGER (ephy_window_get_ui_manager (window));
+ data = g_object_get_data (G_OBJECT (window), BM_WINDOW_DATA_KEY);
+
if (data != NULL && data->bookmarks_menu != 0)
{
gtk_ui_manager_remove_ui (manager, data->bookmarks_menu);
data->bookmarks_menu = 0;
}
+
g_string_truncate (bookmarks_menu_string, 0);
}
static void
-tree_changed_cb (EphyBookmarks *bookmarks, EphyWindow *window)
+tree_changed_cb (EphyBookmarks *bookmarks,
+ EphyWindow *window)
{
erase_bookmarks_menu (window);
}
static void
-node_added_cb (EphyNode *parent, EphyNode *child, EphyWindow *window)
+node_added_cb (EphyNode *parent,
+ EphyNode *child,
+ EphyWindow *window)
{
erase_bookmarks_menu (window);
}
static void
-node_changed_cb (EphyNode *parent, EphyNode *child, guint property_id, EphyWindow *window)
+node_changed_cb (EphyNode *parent,
+ EphyNode *child,
+ guint property_id,
+ EphyWindow *window)
{
- if (property_id == EPHY_NODE_KEYWORD_PROP_NAME || property_id == EPHY_NODE_BMK_PROP_TITLE)
+ if (property_id == EPHY_NODE_KEYWORD_PROP_NAME ||
+ property_id == EPHY_NODE_BMK_PROP_TITLE)
{
erase_bookmarks_menu (window);
}
}
static void
-node_removed_cb (EphyNode *parent, EphyNode *child, guint index, EphyWindow *window)
+node_removed_cb (EphyNode *parent,
+ EphyNode *child,
+ guint index,
+ EphyWindow *window)
{
erase_bookmarks_menu (window);
}
@@ -185,47 +225,51 @@ node_removed_cb (EphyNode *parent, EphyNode *child, guint index, EphyWindow *win
void
ephy_bookmarks_ui_attach_window (EphyWindow *window)
{
- EphyBookmarks *eb = ephy_shell_get_bookmarks (ephy_shell);
- EphyNode *bookmarks = ephy_bookmarks_get_bookmarks (eb);
- EphyNode *topics = ephy_bookmarks_get_keywords (eb);
-
- BookmarksWindowData *data = g_object_get_data (G_OBJECT (window), BM_WINDOW_DATA_KEY);
- GtkUIManager *manager = GTK_UI_MANAGER (ephy_window_get_ui_manager (window));
- EggEditableToolbar *etoolbar = EGG_EDITABLE_TOOLBAR (ephy_window_get_toolbar (window));
+ EphyBookmarks *eb;
+ EphyNode *bookmarks;
+ EphyNode *topics;
+ BookmarksWindowData *data;
+ GtkUIManager *manager;
+ EggEditableToolbar *etoolbar;
GtkActionGroup *actions;
GtkAction *action;
- g_return_if_fail (data == 0);
+ eb = ephy_shell_get_bookmarks (ephy_shell);
+ bookmarks = ephy_bookmarks_get_bookmarks (eb);
+ topics = ephy_bookmarks_get_keywords (eb);
+ data = g_object_get_data (G_OBJECT (window), BM_WINDOW_DATA_KEY);
+ g_return_if_fail (data == NULL);
+
+ manager = GTK_UI_MANAGER (ephy_window_get_ui_manager (window));
+ etoolbar = EGG_EDITABLE_TOOLBAR (ephy_window_get_toolbar (window));
+
data = g_new0 (BookmarksWindowData, 1);
g_object_set_data_full (G_OBJECT (window), BM_WINDOW_DATA_KEY, data, g_free);
-
/* Create the self-maintaining action groups for bookmarks and topics */
actions = ephy_bookmark_group_new (bookmarks);
- gtk_ui_manager_insert_action_group (manager, actions, 0);
+ gtk_ui_manager_insert_action_group (manager, actions, -1);
g_signal_connect_object (G_OBJECT (actions), "open-link",
G_CALLBACK (ephy_link_open), G_OBJECT (window),
G_CONNECT_SWAPPED | G_CONNECT_AFTER);
g_object_unref (G_OBJECT (actions));
actions = ephy_topic_group_new (topics, manager);
- gtk_ui_manager_insert_action_group (manager, actions, 0);
+ gtk_ui_manager_insert_action_group (manager, actions, -1);
g_object_unref (G_OBJECT (actions));
actions = ephy_open_tabs_group_new (topics);
- gtk_ui_manager_insert_action_group (manager, actions, 0);
- g_signal_connect_object (G_OBJECT (actions), "open-link",
+ gtk_ui_manager_insert_action_group (manager, actions, -1);
+ g_signal_connect_object (actions, "open-link",
G_CALLBACK (ephy_link_open), G_OBJECT (window),
G_CONNECT_SWAPPED | G_CONNECT_AFTER);
- g_object_unref (G_OBJECT (actions));
-
+ g_object_unref (actions);
/* Create and add an action group specifically foor bookmarks on the toolbar */
actions = gtk_action_group_new ("BookmarkToolbarActions");
gtk_ui_manager_insert_action_group (manager, actions, 0);
- g_object_unref (G_OBJECT (actions));
+ g_object_unref (actions);
-
/* Add factory actions */
action = ephy_topic_factory_action_new ("AddTopicToToolbar");
gtk_action_group_add_action (actions, action);
@@ -234,48 +278,48 @@ ephy_bookmarks_ui_attach_window (EphyWindow *window)
action = ephy_bookmark_factory_action_new ("AddBookmarkToToolbar");
gtk_action_group_add_action (actions, action);
g_object_unref (action);
-
-
+
/* Add the dynamic 'related topic' action */
action = ephy_related_action_new (EPHY_LINK (window), manager, "RelatedTopic");
gtk_action_group_add_action (actions, action);
g_object_unref (action);
-
-
+
/* Add popup menu actions that are specific to the bookmark widgets */
action = gtk_action_new ("ToolbarBookmarkProperties", _("Properties"),
_("Show properties for this bookmark"), GTK_STOCK_PROPERTIES);
- g_signal_connect_object (G_OBJECT (action), "activate",
+ g_signal_connect_object (action, "activate",
G_CALLBACK (activate_bookmark_properties),
G_OBJECT (etoolbar), 0);
- g_signal_connect_object (G_OBJECT (etoolbar), "notify::selected",
+ g_signal_connect_object (etoolbar, "notify::selected",
G_CALLBACK (selected_bookmark_action),
G_OBJECT (action), 0);
gtk_action_group_add_action (actions, action);
g_object_unref (action);
-
+
+ /* FIXME ngettext */
action = gtk_action_new ("ToolbarBookmarkOpenInTab", _("Open in New _Tab"),
_("Open this bookmark in a new tab"), NULL);
- g_signal_connect_object (G_OBJECT (action), "activate",
+ g_signal_connect_object (action, "activate",
G_CALLBACK (activate_bookmark_open_tab),
G_OBJECT (etoolbar), 0);
- g_signal_connect_object (G_OBJECT (etoolbar), "notify::selected",
+ g_signal_connect_object (etoolbar, "notify::selected",
G_CALLBACK (selected_bookmark_action),
G_OBJECT (action), 0);
gtk_action_group_add_action (actions, action);
g_object_unref (action);
-
+
+ /* FIXME ngettext */
action = gtk_action_new ("ToolbarBookmarkOpenInWindow", _("Open in New _Window"),
_("Open this bookmark in a new window"), NULL);
- g_signal_connect_object (G_OBJECT (action), "activate",
+ g_signal_connect_object (action, "activate",
G_CALLBACK (activate_bookmark_open_window),
G_OBJECT (etoolbar), 0);
- g_signal_connect_object (G_OBJECT (etoolbar), "notify::selected",
+ g_signal_connect_object (etoolbar, "notify::selected",
G_CALLBACK (selected_bookmark_action),
G_OBJECT (action), 0);
gtk_action_group_add_action (actions, action);
g_object_unref (action);
-
+
data->toolbar_menu = gtk_ui_manager_add_ui_from_string (manager,
"<popup name=\"ToolbarPopup\">"
"<separator/>"
@@ -285,7 +329,6 @@ ephy_bookmarks_ui_attach_window (EphyWindow *window)
"<menuitem action=\"ToolbarBookmarkProperties\"/>"
"</popup>", -1, NULL);
-
/* Add signal handlers for the bookmark database */
ephy_node_signal_connect_object (bookmarks, EPHY_NODE_CHILD_ADDED,
(EphyNodeCallback)node_added_cb,
@@ -293,14 +336,14 @@ ephy_bookmarks_ui_attach_window (EphyWindow *window)
ephy_node_signal_connect_object (topics, EPHY_NODE_CHILD_ADDED,
(EphyNodeCallback)node_added_cb,
G_OBJECT (window));
-
+
ephy_node_signal_connect_object (bookmarks, EPHY_NODE_CHILD_REMOVED,
(EphyNodeCallback)node_removed_cb,
G_OBJECT (window));
ephy_node_signal_connect_object (topics, EPHY_NODE_CHILD_REMOVED,
(EphyNodeCallback)node_removed_cb,
G_OBJECT (window));
-
+
ephy_node_signal_connect_object (bookmarks, EPHY_NODE_CHILD_CHANGED,
(EphyNodeCallback)node_changed_cb,
G_OBJECT (window));
@@ -308,15 +351,14 @@ ephy_bookmarks_ui_attach_window (EphyWindow *window)
(EphyNodeCallback)node_changed_cb,
G_OBJECT (window));
- g_signal_connect_object (G_OBJECT (eb), "tree_changed",
+ g_signal_connect_object (eb, "tree_changed",
G_CALLBACK (tree_changed_cb),
G_OBJECT (window), 0);
-
-
+
/* Setup empty menu strings and add signal handlers to build the menus on demand */
if (!bookmarks_menu_string) bookmarks_menu_string = g_string_new ("");
action = find_action (manager, "Bookmarks");
- g_signal_connect_object (G_OBJECT (action), "activate",
+ g_signal_connect_object (action, "activate",
G_CALLBACK (activate_bookmarks_menu),
G_OBJECT (window), 0);
}
@@ -370,35 +412,26 @@ static void
properties_dialog_destroy_cb (EphyBookmarkProperties *dialog,
gpointer user_data)
{
- g_hash_table_remove (properties_dialogs, ephy_bookmark_properties_get_node (dialog));
+ g_hash_table_remove (properties_dialogs,
+ ephy_bookmark_properties_get_node (dialog));
}
static void
-add_bookmark (GtkWidget *parent,
- const char *location,
+add_bookmark (const char *location,
const char *title)
{
- GtkWidget *dialog;
EphyBookmarks *bookmarks;
EphyNode *bookmark;
- bookmarks = ephy_shell_get_bookmarks (ephy_shell);
+ bookmarks = ephy_shell_get_bookmarks (ephy_shell_get_default ());
bookmark = ephy_bookmarks_add (bookmarks, title, location);
if (properties_dialogs == 0)
{
properties_dialogs = g_hash_table_new (g_direct_hash, g_direct_equal);
}
-
- dialog = ephy_bookmark_properties_new (bookmarks, bookmark, TRUE);
- if (parent != NULL) gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
-
- g_signal_connect (dialog, "destroy",
- G_CALLBACK (properties_dialog_destroy_cb), bookmarks);
- g_hash_table_insert (properties_dialogs,
- bookmark, dialog);
-
- gtk_window_present (GTK_WINDOW (dialog));
+
+ ephy_bookmarks_ui_show_bookmark (bookmark);
}
static void
@@ -406,18 +439,19 @@ duplicate_bookmark_response_cb (GtkWidget *dialog,
int response,
EphyNode *node)
{
- GtkWidget *parent;
- parent = GTK_WIDGET (gtk_window_get_transient_for (GTK_WINDOW (dialog)));
-
- if (response == GTK_RESPONSE_ACCEPT)
+ if (response == RESPONSE_SHOW_PROPERTIES)
{
- ephy_bookmarks_ui_show_bookmark (parent, node);
+ ephy_bookmarks_ui_show_bookmark (node);
}
- else if (response == GTK_RESPONSE_REJECT)
+ else if (response == RESPONSE_NEW_BOOKMARK)
{
- const char *location = g_object_get_data (G_OBJECT (dialog), "location");
- const char *title = g_object_get_data (G_OBJECT (dialog), "title");
- add_bookmark (parent, location, title);
+ const char *location;
+ const char *title;
+
+ location = g_object_get_data (G_OBJECT (dialog), "location");
+ title = g_object_get_data (G_OBJECT (dialog), "title");
+
+ add_bookmark (location, title);
}
gtk_widget_destroy (dialog);
@@ -444,60 +478,64 @@ ephy_bookmarks_ui_add_bookmark (GtkWidget *parent,
if (bookmark != NULL)
{
GtkWidget *button, *dialog;
- char *str;
-
- dialog = gtk_message_dialog_new_with_markup
- (GTK_WINDOW (parent), GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_INFO, GTK_BUTTONS_NONE,
- "<span weight=\"bold\" size=\"larger\">%s</span>",
- _("Bookmark exists"));
-
- str = g_strdup_printf
- (_("You already have a bookmark titled “%s” for this page."),
- "<span weight=\"bold\">%s</span>");
-
- gtk_message_dialog_format_secondary_markup
- (GTK_MESSAGE_DIALOG (dialog), str,
- ephy_node_get_property_string (bookmark, EPHY_NODE_BMK_PROP_TITLE));
-
- g_free (str);
+
+ dialog = gtk_message_dialog_new
+ (GTK_WINDOW (parent),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO, GTK_BUTTONS_NONE,
+ _("Bookmark exists"));
+
+ gtk_message_dialog_format_secondary_text
+ (GTK_MESSAGE_DIALOG (dialog),
+ _("You already have a bookmark titled “%s” for this page."),
+ ephy_node_get_property_string (bookmark, EPHY_NODE_BMK_PROP_TITLE));
+
+ if (parent != NULL)
+ {
+ gtk_window_group_add_window (ephy_gui_ensure_window_group (GTK_WINDOW (parent)),
+ GTK_WINDOW (dialog));
+ }
button = gtk_dialog_add_button (GTK_DIALOG (dialog),
- _("_Create New"), GTK_RESPONSE_REJECT);
+ _("_Create New"),
+ RESPONSE_NEW_BOOKMARK);
gtk_button_set_image (GTK_BUTTON (button),
gtk_image_new_from_stock
- (GTK_STOCK_NEW, GTK_ICON_SIZE_BUTTON));
+ (STOCK_BOOKMARK, GTK_ICON_SIZE_BUTTON));
button = gtk_dialog_add_button (GTK_DIALOG (dialog),
- _("_View Properties"), GTK_RESPONSE_ACCEPT);
+ _("_View Properties"),
+ RESPONSE_SHOW_PROPERTIES);
gtk_button_set_image (GTK_BUTTON (button),
gtk_image_new_from_stock
(GTK_STOCK_PROPERTIES, GTK_ICON_SIZE_BUTTON));
gtk_dialog_add_button (GTK_DIALOG (dialog),
- GTK_STOCK_OK, GTK_RESPONSE_OK);
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
+ GTK_STOCK_OK,
+ GTK_RESPONSE_OK);
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
gtk_window_set_title (GTK_WINDOW (dialog), _("Bookmark Exists"));
gtk_window_set_icon_name (GTK_WINDOW (dialog), "web-browser");
- g_object_set_data_full (G_OBJECT (dialog), "location", g_strdup (location), g_free);
- g_object_set_data_full (G_OBJECT (dialog), "title", g_strdup (title), g_free);
+ g_object_set_data_full (G_OBJECT (dialog), "location",
+ g_strdup (location), g_free);
+ g_object_set_data_full (G_OBJECT (dialog), "title",
+ g_strdup (title), g_free);
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (duplicate_bookmark_response_cb),
- bookmark);
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (duplicate_bookmark_response_cb), bookmark);
ephy_node_signal_connect_object (bookmark, EPHY_NODE_DESTROY,
(EphyNodeCallback) dialog_node_destroy_cb,
G_OBJECT (dialog));
-
- gtk_window_present (GTK_WINDOW (dialog));
+
+ gtk_window_present_with_time (GTK_WINDOW (dialog),
+ gtk_get_current_event_time ());
}
else
{
- add_bookmark (parent, location, title);
+ add_bookmark (location, title);
}
}
@@ -530,19 +568,15 @@ ephy_bookmarks_ui_find_topic (const char *name)
}
static void
-add_topic_changed_cb (GtkEditable *editable,
+add_topic_changed_cb (GtkEntry *entry,
GtkDialog *dialog)
{
- const char *title = gtk_entry_get_text (GTK_ENTRY (editable));
- gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_OK, *title != 0);
-}
+ const char *title;
-static void
-duplicate_topic_response_cb (GtkWidget *dialog,
- int response,
- EphyNode *node)
-{
- gtk_widget_destroy (dialog);
+ title = gtk_entry_get_text (entry);
+
+ gtk_dialog_set_response_sensitive (dialog, GTK_RESPONSE_ACCEPT,
+ title[0] != '\0');
}
static void
@@ -550,48 +584,53 @@ add_topic_response_cb (GtkWidget *dialog,
int response,
EphyNode *bookmark)
{
- if (response == GTK_RESPONSE_OK)
- {
- EphyBookmarks *bookmarks;
- GtkEntry *entry;
- EphyNode *topic;
- const char *name;
-
- entry = g_object_get_data (G_OBJECT (dialog), "name");
- name = gtk_entry_get_text (entry);
- g_return_if_fail (name && *name);
-
- topic = ephy_bookmarks_ui_find_topic (name);
- if (topic != NULL)
- {
- GtkWidget *message;
- char *str = g_strdup_printf
- (_("You already have a topic named “%s”.\nPlease use a new topic name."),
- "<span weight=\"bold\">%s</span>");
-
- message = gtk_message_dialog_new_with_markup
- (GTK_WINDOW (dialog), GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, str,
- ephy_node_get_property_string (topic, EPHY_NODE_KEYWORD_PROP_NAME));
-
- g_free (str);
-
- g_signal_connect (message, "response",
- G_CALLBACK (duplicate_topic_response_cb),
- bookmark);
+ EphyBookmarks *bookmarks;
+ GtkEntry *entry;
+ EphyNode *topic;
+ const char *name;
+
+ if (response != GTK_RESPONSE_ACCEPT)
+ {
+ gtk_widget_destroy (dialog);
+ return;
+ }
+
+ entry = g_object_get_data (G_OBJECT (dialog), "name");
+ name = gtk_entry_get_text (entry);
+ g_return_if_fail (name != NULL && name[0] != '\0');
- gtk_window_group_add_window
- (ephy_gui_ensure_window_group (GTK_WINDOW (dialog)), GTK_WINDOW (message));
- gtk_window_present (GTK_WINDOW (message));
-
- return;
- }
-
+ topic = ephy_bookmarks_ui_find_topic (name);
+ if (topic != NULL)
+ {
+ GtkWidget *message;
+
+ message = gtk_message_dialog_new
+ (GTK_WINDOW (dialog),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
+ _("You already have a topic named “%s”"),
+ ephy_node_get_property_string (topic, EPHY_NODE_KEYWORD_PROP_NAME));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (message),
+ "%s",
+ _("Please use a different topic name."));
+
+ g_signal_connect (message, "response",
+ G_CALLBACK (gtk_widget_destroy), NULL);
+
+ gtk_window_group_add_window
+ (ephy_gui_ensure_window_group (GTK_WINDOW (dialog)),
+ GTK_WINDOW (message));
+
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+ gtk_window_present_with_time (GTK_WINDOW (message),
+ gtk_get_current_event_time ());
- bookmarks = ephy_shell_get_bookmarks (ephy_shell);
- topic = ephy_bookmarks_add_keyword (bookmarks, name);
- ephy_bookmarks_set_keyword (bookmarks, topic, bookmark);
+ return;
}
+
+ bookmarks = ephy_shell_get_bookmarks (ephy_shell);
+ topic = ephy_bookmarks_add_keyword (bookmarks, name);
+ ephy_bookmarks_set_keyword (bookmarks, topic, bookmark);
gtk_widget_destroy (dialog);
}
@@ -604,28 +643,31 @@ ephy_bookmarks_ui_add_topic (GtkWidget *parent,
GtkContainer *container;
GList *children;
+ g_assert (parent != NULL);
+
if (bookmark != NULL)
{
- char *str = g_strdup_printf
- ("<span weight=\"bold\" size=\"larger\">%s</span>", _("New topic for “%s”"));
-
- dialog = gtk_message_dialog_new_with_markup
- (GTK_WINDOW (parent), GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
- str, ephy_node_get_property_string (bookmark, EPHY_NODE_BMK_PROP_TITLE));
-
- g_free (str);
+ dialog = gtk_message_dialog_new
+ (GTK_WINDOW (parent),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ _("New topic for “%s”"),
+ ephy_node_get_property_string (bookmark, EPHY_NODE_BMK_PROP_TITLE));
}
else
{
- dialog = gtk_message_dialog_new_with_markup
- (GTK_WINDOW (parent), GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
- "<span weight=\"bold\" size=\"larger\">%s</span>", _("New topic"));
+ dialog = gtk_message_dialog_new
+ (GTK_WINDOW (parent),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION,
+ GTK_BUTTONS_NONE,
+ _("New topic"));
}
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
- _("Enter a unique name for the topic."));
+ "%s",
+ _("Enter a unique name for the topic."));
hbox = gtk_hbox_new (FALSE, 12);
gtk_widget_show (hbox);
@@ -639,58 +681,58 @@ ephy_bookmarks_ui_add_topic (GtkWidget *parent,
gtk_widget_show (label);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
- gtk_box_pack_start (GTK_BOX (hbox), entry, FALSE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0);
/* Get the hbox which is the first child of the main vbox */
children = gtk_container_get_children (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox));
container = GTK_CONTAINER (children->data);
g_list_free (children);
-
+
/* Get the vbox which is the second child of the hbox */
children = gtk_container_get_children (container);
container = GTK_CONTAINER (children->next->data);
g_list_free (children);
-
- gtk_container_add (container, hbox);
+ gtk_box_pack_start (GTK_BOX (container), hbox, FALSE, FALSE, 0);
+
g_object_set_data (G_OBJECT (dialog), "name", entry);
-
+
gtk_dialog_add_button (GTK_DIALOG (dialog),
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
gtk_dialog_add_button (GTK_DIALOG (dialog),
- _("Create"), GTK_RESPONSE_OK);
- gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
-
+ _("Create"), GTK_RESPONSE_ACCEPT);
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
+
gtk_window_set_title (GTK_WINDOW (dialog), _("New Topic"));
gtk_window_set_icon_name (GTK_WINDOW (dialog), "web-browser");
-
- g_signal_connect (G_OBJECT (dialog),
- "response",
- G_CALLBACK (add_topic_response_cb),
- bookmark);
-
- g_signal_connect (G_OBJECT (entry),
- "changed",
- G_CALLBACK (add_topic_changed_cb),
- dialog);
-
- add_topic_changed_cb (GTK_EDITABLE (entry), GTK_DIALOG (dialog));
-
+
+ g_signal_connect (dialog, "response",
+ G_CALLBACK (add_topic_response_cb), bookmark);
+
+ add_topic_changed_cb (GTK_ENTRY (entry), GTK_DIALOG (dialog));
+ g_signal_connect (entry, "changed",
+ G_CALLBACK (add_topic_changed_cb), dialog);
+
ephy_node_signal_connect_object (bookmark, EPHY_NODE_DESTROY,
(EphyNodeCallback) dialog_node_destroy_cb,
G_OBJECT (dialog));
-
+
gtk_window_group_add_window
- (ephy_gui_ensure_window_group (GTK_WINDOW (parent)), GTK_WINDOW (dialog));
- gtk_window_present (GTK_WINDOW (dialog));
+ (ephy_gui_ensure_window_group (GTK_WINDOW (parent)),
+ GTK_WINDOW (dialog));
+
+ gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
+ gtk_window_present_with_time (GTK_WINDOW (dialog),
+ gtk_get_current_event_time ());
}
void
-ephy_bookmarks_ui_show_bookmark (GtkWidget *parent,
- EphyNode *bookmark)
+ephy_bookmarks_ui_show_bookmark (EphyNode *bookmark)
{
- EphyBookmarks *bookmarks = ephy_shell_get_bookmarks (ephy_shell);
+ EphyBookmarks *bookmarks;
GtkWidget *dialog;
+ bookmarks = ephy_shell_get_bookmarks (ephy_shell_get_default ());
+
g_return_if_fail (EPHY_IS_BOOKMARKS (bookmarks));
g_return_if_fail (EPHY_IS_NODE (bookmark));
@@ -711,9 +753,8 @@ ephy_bookmarks_ui_show_bookmark (GtkWidget *parent,
bookmark, dialog);
}
- parent = gtk_widget_get_ancestor (parent, GTK_TYPE_WINDOW);
- if (parent != NULL) gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
- gtk_window_present (GTK_WINDOW (dialog));
+ gtk_window_present_with_time (GTK_WINDOW (dialog),
+ gtk_get_current_event_time ());
}
/* Below this line we have functions relating to toolbar code */