aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Persch <chpe@cvs.gnome.org>2004-11-01 22:08:33 +0800
committerChristian Persch <chpe@src.gnome.org>2004-11-01 22:08:33 +0800
commit7214ca07b29a87ecbbee48107767263b4106fe0a (patch)
tree9e1027be90b6ba9cf7f8675e0b70c6ff1fe63341 /src
parent48f101e63e1edd7a6ae5b300638ce31c05c2bef1 (diff)
downloadgsoc2013-epiphany-7214ca07b29a87ecbbee48107767263b4106fe0a.tar
gsoc2013-epiphany-7214ca07b29a87ecbbee48107767263b4106fe0a.tar.gz
gsoc2013-epiphany-7214ca07b29a87ecbbee48107767263b4106fe0a.tar.bz2
gsoc2013-epiphany-7214ca07b29a87ecbbee48107767263b4106fe0a.tar.lz
gsoc2013-epiphany-7214ca07b29a87ecbbee48107767263b4106fe0a.tar.xz
gsoc2013-epiphany-7214ca07b29a87ecbbee48107767263b4106fe0a.tar.zst
gsoc2013-epiphany-7214ca07b29a87ecbbee48107767263b4106fe0a.zip
Make sure there's only one bookmark properties dialogue for each bookmark.
2004-11-01 Christian Persch <chpe@cvs.gnome.org> * src/bookmarks/ephy-bookmark-action.c: (properties_activate_cb), (bookmark_destroy_cb), (ephy_bookmark_action_finalize), (ephy_bookmark_action_init): * src/bookmarks/ephy-bookmark-properties.c: (ephy_bookmark_properties_new), (ephy_bookmark_properties_get_node): * src/bookmarks/ephy-bookmark-properties.h: * src/bookmarks/ephy-bookmarks-editor.c: (show_properties_dialog), (ephy_bookmarks_editor_finalize), (ephy_bookmarks_editor_init): * src/bookmarks/ephy-bookmarks.c: (ephy_bookmarks_init), (ephy_bookmarks_finalize), (ephy_bookmarks_add_keyword), (prop_dialog_destroy_cb), (bookmark_destroyed_cb), (ephy_bookmarks_show_bookmark_properties): * src/bookmarks/ephy-bookmarks.h: Make sure there's only one bookmark properties dialogue for each bookmark. Fixes bug #148398 and also bug #155880 (merged from HEAD).
Diffstat (limited to 'src')
-rw-r--r--src/bookmarks/ephy-bookmark-action.c28
-rw-r--r--src/bookmarks/ephy-bookmark-properties.c7
-rw-r--r--src/bookmarks/ephy-bookmark-properties.h2
-rw-r--r--src/bookmarks/ephy-bookmarks-editor.c34
-rw-r--r--src/bookmarks/ephy-bookmarks.c60
-rw-r--r--src/bookmarks/ephy-bookmarks.h6
6 files changed, 78 insertions, 59 deletions
diff --git a/src/bookmarks/ephy-bookmark-action.c b/src/bookmarks/ephy-bookmark-action.c
index 5abbe7892..b97e82e82 100644
--- a/src/bookmarks/ephy-bookmark-action.c
+++ b/src/bookmarks/ephy-bookmark-action.c
@@ -31,7 +31,6 @@
#include "ephy-dnd.h"
#include "ephy-bookmarksbar.h"
#include "ephy-bookmarks.h"
-#include "ephy-bookmark-properties.h"
#include "ephy-favicon-cache.h"
#include "ephy-shell.h"
#include "ephy-string.h"
@@ -61,7 +60,6 @@ struct EphyBookmarkActionPrivate
gboolean smart_url;
char *icon;
guint cache_handler;
- GtkWidget *prop_dialog;
guint motion_handler;
gint drag_x;
@@ -502,23 +500,15 @@ move_right_activate_cb (GtkWidget *menu, GtkWidget *proxy)
static void
properties_activate_cb (GtkWidget *menu, EphyBookmarkAction *action)
{
- GtkWidget *window, *proxy;
+ GtkWidget *window, *proxy, *dialog;
EphyBookmarks *bookmarks;
- EphyBookmarkActionPrivate *p = action->priv;
bookmarks = ephy_shell_get_bookmarks (ephy_shell);
proxy = g_object_get_data (G_OBJECT (menu), "proxy");
window = gtk_widget_get_toplevel (proxy);
- if (p->prop_dialog == NULL)
- {
- p->prop_dialog = ephy_bookmark_properties_new
- (bookmarks, p->bmk_node, GTK_WINDOW (window));
- g_object_add_weak_pointer (G_OBJECT (p->prop_dialog),
- (gpointer)&p->prop_dialog);
- }
-
- gtk_widget_show (p->prop_dialog);
+ dialog = ephy_bookmarks_show_bookmark_properties
+ (bookmarks, action->priv->bmk_node, window);
}
static void
@@ -691,10 +681,7 @@ connect_proxy (GtkAction *action, GtkWidget *proxy)
static void
bookmark_destroy_cb (EphyNode *node, EphyBookmarkAction *action)
{
- if (action->priv->prop_dialog != NULL)
- {
- gtk_widget_destroy (action->priv->prop_dialog);
- }
+ action->priv->bmk_node = NULL;
}
static void
@@ -777,12 +764,6 @@ ephy_bookmark_action_finalize (GObject *object)
{
EphyBookmarkAction *eba = EPHY_BOOKMARK_ACTION (object);
- if (eba->priv->prop_dialog)
- {
- g_object_remove_weak_pointer (G_OBJECT (eba->priv->prop_dialog),
- (gpointer)&eba->priv->prop_dialog);
- }
-
g_free (eba->priv->location);
g_free (eba->priv->icon);
@@ -952,7 +933,6 @@ ephy_bookmark_action_init (EphyBookmarkAction *action)
action->priv->location = NULL;
action->priv->icon = NULL;
- action->priv->prop_dialog = NULL;
action->priv->cache_handler = 0;
action->priv->motion_handler = 0;
diff --git a/src/bookmarks/ephy-bookmark-properties.c b/src/bookmarks/ephy-bookmark-properties.c
index 53ca199e8..bce1259d0 100644
--- a/src/bookmarks/ephy-bookmark-properties.c
+++ b/src/bookmarks/ephy-bookmark-properties.c
@@ -434,7 +434,7 @@ ephy_bookmark_properties_init (EphyBookmarkProperties *editor)
GtkWidget *
ephy_bookmark_properties_new (EphyBookmarks *bookmarks,
EphyNode *bookmark,
- GtkWindow *parent_window)
+ GtkWidget *parent_window)
{
EphyBookmarkProperties *editor;
@@ -450,7 +450,9 @@ ephy_bookmark_properties_new (EphyBookmarks *bookmarks,
if (parent_window)
{
- gtk_window_set_transient_for (GTK_WINDOW (editor), parent_window);
+ gtk_window_set_transient_for (GTK_WINDOW (editor),
+ GTK_WINDOW (parent_window));
+ gtk_window_set_destroy_with_parent (GTK_WINDOW (editor), TRUE);
}
return GTK_WIDGET (editor);
}
@@ -460,4 +462,3 @@ ephy_bookmark_properties_get_node (EphyBookmarkProperties *properties)
{
return properties->priv->bookmark;
}
-
diff --git a/src/bookmarks/ephy-bookmark-properties.h b/src/bookmarks/ephy-bookmark-properties.h
index 542ab3538..97b393c51 100644
--- a/src/bookmarks/ephy-bookmark-properties.h
+++ b/src/bookmarks/ephy-bookmark-properties.h
@@ -53,7 +53,7 @@ GType ephy_bookmark_properties_get_type (void);
GtkWidget *ephy_bookmark_properties_new (EphyBookmarks *bookmarks,
EphyNode *bookmark,
- GtkWindow *parent_window);
+ GtkWidget *parent_window);
EphyNode *ephy_bookmark_properties_get_node (EphyBookmarkProperties *properties);
diff --git a/src/bookmarks/ephy-bookmarks-editor.c b/src/bookmarks/ephy-bookmarks-editor.c
index 7372a1eae..45843ca82 100644
--- a/src/bookmarks/ephy-bookmarks-editor.c
+++ b/src/bookmarks/ephy-bookmarks-editor.c
@@ -47,7 +47,6 @@
#include <string.h>
#include "ephy-bookmarks-editor.h"
-#include "ephy-bookmark-properties.h"
#include "ephy-bookmarks-import.h"
#include "ephy-node-common.h"
#include "ephy-node-view.h"
@@ -149,7 +148,6 @@ struct EphyBookmarksEditorPrivate
GtkActionGroup *action_group;
int priority_col;
EphyBookmarksBarModel *tb_model;
- GHashTable *props_dialogs;
GtkTreeViewColumn *title_col;
GtkTreeViewColumn *address_col;
@@ -479,31 +477,11 @@ cmd_delete (GtkAction *action,
}
static void
-prop_dialog_destroy_cb (GtkWidget *dialog, EphyBookmarksEditor *editor)
+show_properties_dialog (EphyBookmarksEditor *editor,
+ EphyNode *bookmark)
{
- EphyNode *node;
-
- node = ephy_bookmark_properties_get_node (EPHY_BOOKMARK_PROPERTIES (dialog));
- g_hash_table_remove (editor->priv->props_dialogs, node);
-}
-
-static void
-show_properties_dialog (EphyBookmarksEditor *editor, EphyNode *node)
-{
- GtkWidget *dialog;
-
- dialog = g_hash_table_lookup (editor->priv->props_dialogs, node);
-
- if (!dialog)
- {
- dialog = ephy_bookmark_properties_new
- (editor->priv->bookmarks, node, GTK_WINDOW (editor));
- g_signal_connect (dialog, "destroy",
- G_CALLBACK (prop_dialog_destroy_cb), editor);
- g_hash_table_insert (editor->priv->props_dialogs, node, dialog);
- }
-
- gtk_window_present (GTK_WINDOW (dialog));
+ ephy_bookmarks_show_bookmark_properties
+ (editor->priv->bookmarks, bookmark, GTK_WIDGET (editor));
}
static void
@@ -928,8 +906,6 @@ ephy_bookmarks_editor_finalize (GObject *object)
(gpointer *)&editor->priv->window);
}
- g_hash_table_destroy (editor->priv->props_dialogs);
-
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -1690,8 +1666,6 @@ ephy_bookmarks_editor_init (EphyBookmarksEditor *editor)
{
editor->priv = EPHY_BOOKMARKS_EDITOR_GET_PRIVATE (editor);
- editor->priv->props_dialogs = g_hash_table_new (g_direct_hash,
- g_direct_equal);
editor->priv->tb_model = EPHY_BOOKMARKSBAR_MODEL
(ephy_bookmarks_get_toolbars_model
(ephy_shell_get_bookmarks (ephy_shell)));
diff --git a/src/bookmarks/ephy-bookmarks.c b/src/bookmarks/ephy-bookmarks.c
index ff351272d..cc2a66443 100644
--- a/src/bookmarks/ephy-bookmarks.c
+++ b/src/bookmarks/ephy-bookmarks.c
@@ -34,6 +34,7 @@
#include "ephy-bookmarksbar-model.h"
#include "ephy-bookmarks-export.h"
#include "ephy-bookmarks-import.h"
+#include "ephy-bookmark-properties.h"
#include "ephy-prefs.h"
#include "eel-gconf-extensions.h"
@@ -65,7 +66,7 @@ struct EphyBookmarksPrivate
EphyNode *smartbookmarks;
EphyNode *lower_fav;
double lower_score;
-
+ GHashTable *props_dialogs;
guint disable_bookmark_editing_notifier_id;
};
@@ -691,6 +692,9 @@ ephy_bookmarks_init (EphyBookmarks *eb)
"bookmarks.rdf",
NULL);
+ eb->priv->props_dialogs = g_hash_table_new (g_direct_hash,
+ g_direct_equal);
+
/* Bookmarks */
eb->priv->bookmarks = ephy_node_new_with_id (db, BOOKMARKS_NODE_ID);
g_value_init (&value, G_TYPE_STRING);
@@ -802,6 +806,8 @@ ephy_bookmarks_finalize (GObject *object)
eel_gconf_notification_remove (eb->priv->disable_bookmark_editing_notifier_id);
+ g_hash_table_destroy (eb->priv->props_dialogs);
+
if (eb->priv->save_timeout_id != 0)
{
g_source_remove (eb->priv->save_timeout_id);
@@ -1166,6 +1172,58 @@ ephy_bookmarks_add_keyword (EphyBookmarks *eb,
return key;
}
+
+static void
+prop_dialog_destroy_cb (EphyBookmarkProperties *dialog,
+ EphyBookmarks *bookmarks)
+{
+ EphyNode *bookmark;
+
+ bookmark = ephy_bookmark_properties_get_node (dialog);
+
+ g_hash_table_remove (bookmarks->priv->props_dialogs, bookmark);
+}
+
+static void
+bookmark_destroyed_cb (EphyNode *bookmark,
+ GtkWidget *dialog)
+{
+ gtk_widget_destroy (dialog);
+}
+
+GtkWidget *
+ephy_bookmarks_show_bookmark_properties (EphyBookmarks *bookmarks,
+ EphyNode *bookmark,
+ GtkWidget *parent)
+{
+ GtkWidget *dialog = NULL;
+
+ g_return_val_if_fail (EPHY_IS_BOOKMARKS (bookmarks), NULL);
+ g_return_val_if_fail (EPHY_IS_NODE (bookmark), NULL);
+
+ dialog = g_hash_table_lookup (bookmarks->priv->props_dialogs, bookmark);
+
+
+ if (dialog == NULL)
+ {
+ dialog = ephy_bookmark_properties_new (bookmarks, bookmark, parent);
+
+ ephy_node_signal_connect_object (bookmark,
+ EPHY_NODE_DESTROY,
+ (EphyNodeCallback) bookmark_destroyed_cb,
+ G_OBJECT (dialog));
+
+ g_signal_connect (dialog, "destroy",
+ G_CALLBACK (prop_dialog_destroy_cb), bookmarks);
+ g_hash_table_insert (bookmarks->priv->props_dialogs,
+ bookmark, dialog);
+ }
+
+ gtk_window_present (GTK_WINDOW (dialog));
+
+ return dialog;
+}
+
void
ephy_bookmarks_remove_keyword (EphyBookmarks *eb,
EphyNode *keyword)
diff --git a/src/bookmarks/ephy-bookmarks.h b/src/bookmarks/ephy-bookmarks.h
index 5bf2845af..9321f3da7 100644
--- a/src/bookmarks/ephy-bookmarks.h
+++ b/src/bookmarks/ephy-bookmarks.h
@@ -23,6 +23,7 @@
#define EPHY_BOOKMARKS_H
#include <glib-object.h>
+#include <gtk/gtkwidget.h>
#include "ephy-node.h"
@@ -96,6 +97,11 @@ char *ephy_bookmarks_solve_smart_url (EphyBookmarks *eb,
const char *smart_url,
const char *content);
+GtkWidget *ephy_bookmarks_show_bookmark_properties (EphyBookmarks *bookmarks,
+ EphyNode *bookmark,
+ GtkWidget *parent_window);
+
+
/* Keywords */
EphyNode *ephy_bookmarks_add_keyword (EphyBookmarks *eb,