Hiroyuki Ikezoe
ikezo****@users*****
Fri Jan 5 20:37:13 JST 2007
Index: kazehakase/src/bookmarks/kz-bookmark-file.c diff -u kazehakase/src/bookmarks/kz-bookmark-file.c:1.23 kazehakase/src/bookmarks/kz-bookmark-file.c:1.24 --- kazehakase/src/bookmarks/kz-bookmark-file.c:1.23 Mon Jan 1 19:35:14 2007 +++ kazehakase/src/bookmarks/kz-bookmark-file.c Fri Jan 5 20:37:13 2007 @@ -18,7 +18,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Id: kz-bookmark-file.c,v 1.23 2007/01/01 10:35:14 ikezoe Exp $ + * $Id: kz-bookmark-file.c,v 1.24 2007/01/05 11:37:13 ikezoe Exp $ */ #include "kz-bookmark-file.h" @@ -46,6 +46,7 @@ SAVE_START_SIGNAL, SAVE_COMPLETED_SIGNAL, ERROR_SIGNAL, + UPDATE_SIGNAL, LAST_SIGNAL }; @@ -139,6 +140,7 @@ klass->load_completed = NULL; klass->save_start = NULL; klass->save_completed = NULL; + klass->update = NULL; g_object_class_install_property( object_class, @@ -272,6 +274,16 @@ g_cclosure_marshal_VOID__STRING, G_TYPE_NONE, 1, G_TYPE_STRING); + kz_bookmark_file_signals[UPDATE_SIGNAL] + = g_signal_new("update", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (KzBookmarkFileClass, + update), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + location_quark = g_quark_from_string("KzBookmarkFile::BookmarkFileLocation"); file_type_quark = g_quark_from_string("KzBookmarkFile::FileType"); interval_quark = g_quark_from_string("KzBookmarkFile::Interval"); Index: kazehakase/src/bookmarks/kz-bookmark-file.h diff -u kazehakase/src/bookmarks/kz-bookmark-file.h:1.9 kazehakase/src/bookmarks/kz-bookmark-file.h:1.10 --- kazehakase/src/bookmarks/kz-bookmark-file.h:1.9 Mon Jan 1 19:35:14 2007 +++ kazehakase/src/bookmarks/kz-bookmark-file.h Fri Jan 5 20:37:13 2007 @@ -18,7 +18,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Id: kz-bookmark-file.h,v 1.9 2007/01/01 10:35:14 ikezoe Exp $ + * $Id: kz-bookmark-file.h,v 1.10 2007/01/05 11:37:13 ikezoe Exp $ */ #ifndef __KZ_BOOKMARK_FILE_H__ @@ -68,6 +68,7 @@ void (*load_completed) (KzBookmarkFile *bookmark_file); void (*save_start) (KzBookmarkFile *bookmark_file); void (*save_completed) (KzBookmarkFile *bookmark_file); + void (*update) (KzBookmarkFile *bookmark_file); void (*error) (KzBookmarkFile *bookmark_file, const gchar *message); Index: kazehakase/src/bookmarks/kz-session.c diff -u kazehakase/src/bookmarks/kz-session.c:1.12 kazehakase/src/bookmarks/kz-session.c:1.13 --- kazehakase/src/bookmarks/kz-session.c:1.12 Fri Jan 5 19:51:46 2007 +++ kazehakase/src/bookmarks/kz-session.c Fri Jan 5 20:37:13 2007 @@ -18,7 +18,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Id: kz-session.c,v 1.12 2007/01/05 10:51:46 ikezoe Exp $ + * $Id: kz-session.c,v 1.13 2007/01/05 11:37:13 ikezoe Exp $ */ #include "kz-session.h" @@ -36,11 +36,7 @@ #define KZ_SESSION_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), KZ_TYPE_SESSION, KzSessionPrivate)) -static void kz_bookmark_insert_child (KzBookmark *bookmark, - KzBookmark *child, - KzBookmark *sibling); -static void kz_bookmark_remove_child (KzBookmark *bookmark, - KzBookmark *child); +static void kz_bookmark_file_update (KzBookmarkFile *bookmark); static void cb_profile_changed (KzProfile *profile, const gchar *section, const gchar *key, @@ -52,14 +48,13 @@ static void kz_session_class_init (KzSessionClass *klass) { - KzBookmarkClass *bookmark_class; + KzBookmarkFileClass *bookmark_file_class; GObjectClass *object_class; - bookmark_class = (KzBookmarkClass *) klass; object_class = (GObjectClass *) klass; + bookmark_file_class = (KzBookmarkFileClass *) klass; - bookmark_class->insert_child = kz_bookmark_insert_child; - bookmark_class->remove_child = kz_bookmark_remove_child; + bookmark_file_class->update = kz_bookmark_file_update; g_type_class_add_private(object_class, sizeof(KzSessionPrivate)); } @@ -147,122 +142,14 @@ } static void -save_session (KzBookmark *session) +kz_bookmark_file_update (KzBookmarkFile *bookmark) { - KzSessionPrivate *priv = KZ_SESSION_GET_PRIVATE(session); + KzSessionPrivate *priv = KZ_SESSION_GET_PRIVATE(bookmark); if (priv->frozen) return; if (priv->auto_save) - kz_bookmark_file_save(KZ_BOOKMARK_FILE(session)); -} - -static void -cb_window_notify (GObject *object, GParamSpec *spec, KzBookmark *session) -{ - save_session(session); -} - -static void -cb_bookmark_notify (GObject *object, GParamSpec *spec, KzBookmark *session) -{ - save_session(session); -} - -static void -cb_tab_notify (GObject *object, GParamSpec *spec, KzBookmark *session) -{ - save_session(session); -} - -static void -cb_insert_child (KzBookmark *folder, KzBookmark *child, KzBookmark *sibling, KzBookmark *session) -{ - g_signal_connect_after(child, "notify", - G_CALLBACK(cb_bookmark_notify), - session); - save_session(session); -} - -static void -cb_remove_child (KzBookmark *folder, KzBookmark *child, KzBookmark *session) -{ - g_signal_handlers_disconnect_by_func - (child, - G_CALLBACK(cb_bookmark_notify), session); - save_session(session); -} - -static void -cb_tab_created (KzBookmark *folder, KzBookmark *child, KzBookmark *sibling, KzBookmark *session) -{ - g_signal_connect_after(child, "insert-child", - G_CALLBACK(cb_insert_child), - session); - g_signal_connect_after(child, "remove-child", - G_CALLBACK(cb_remove_child), - session); - g_signal_connect_after(child, "notify", - G_CALLBACK(cb_tab_notify), - session); - save_session(session); -} - -static void -cb_tab_removed (KzBookmark *folder, KzBookmark *child, KzBookmark *session) -{ - g_signal_handlers_disconnect_by_func - (child, - G_CALLBACK(cb_insert_child), session); - g_signal_handlers_disconnect_by_func - (child, - G_CALLBACK(cb_remove_child), session); - g_signal_handlers_disconnect_by_func - (child, - G_CALLBACK(cb_tab_notify), session); - save_session(session); -} - -static void -kz_bookmark_insert_child (KzBookmark *bookmark, - KzBookmark *child, - KzBookmark *sibling) -{ - if (KZ_BOOKMARK_CLASS (kz_session_parent_class)->insert_child) - KZ_BOOKMARK_CLASS (kz_session_parent_class)->insert_child(bookmark, child, sibling); - /* - * This session folder contains each tab. - * We have to watch each folder. - */ - g_signal_connect_after(child, "insert-child", - G_CALLBACK(cb_tab_created), - bookmark); - g_signal_connect_after(child, "remove-child", - G_CALLBACK(cb_tab_removed), - bookmark); - g_signal_connect_after(child, "notify", - G_CALLBACK(cb_window_notify), - bookmark); - save_session(bookmark); -} - -static void -kz_bookmark_remove_child (KzBookmark *bookmark, KzBookmark *child) -{ - if (KZ_BOOKMARK_CLASS (kz_session_parent_class)->remove_child) - KZ_BOOKMARK_CLASS (kz_session_parent_class)->remove_child(bookmark, child); - - g_signal_handlers_disconnect_by_func - (child, - G_CALLBACK(cb_tab_created), bookmark); - g_signal_handlers_disconnect_by_func - (child, - G_CALLBACK(cb_tab_removed), bookmark); - g_signal_handlers_disconnect_by_func - (child, - G_CALLBACK(cb_window_notify), bookmark); - - save_session(bookmark); + kz_bookmark_file_save(bookmark); } Index: kazehakase/src/bookmarks/kz-xbel.c diff -u kazehakase/src/bookmarks/kz-xbel.c:1.68 kazehakase/src/bookmarks/kz-xbel.c:1.69 --- kazehakase/src/bookmarks/kz-xbel.c:1.68 Fri Jan 6 11:58:42 2006 +++ kazehakase/src/bookmarks/kz-xbel.c Fri Jan 5 20:37:13 2007 @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Id: kz-xbel.c,v 1.68 2006/01/06 02:58:42 makeinu Exp $ + * $Id: kz-xbel.c,v 1.69 2007/01/05 11:37:13 ikezoe Exp $ */ #include "kazehakase.h" @@ -47,15 +47,20 @@ KzBookmark *parent, KzBookmark *sibling); static void kz_xbel_remove_xml_node (KzBookmark *bookmark); -static void kz_xbel_connect_signals (KzBookmark *bookmark); -static void kz_xbel_disconnect_signals (KzBookmark *bookmark); +static void kz_xbel_connect_signals (KzBookmark *bookmark, + gpointer data); +static void kz_xbel_disconnect_signals (KzBookmark *bookmark, + gpointer data); static void cb_bookmark_insert_child (KzBookmark *bookmark, KzBookmark *child, - KzBookmark *sibling); + KzBookmark *sibling, + gpointer data); static void cb_bookmark_remove_child (KzBookmark *bookmark, - KzBookmark *child); + KzBookmark *child, + gpointer data); static void cb_bookmark_notify (GObject *object, - GParamSpec *spec); + GParamSpec *spec, + gpointer data); static void xml_node_set_title (KzXMLNode *parent, const gchar *title); @@ -144,9 +149,9 @@ g_signal_connect(bookmark, "notify", G_CALLBACK(kz_xbel_notify), xml); g_signal_connect_after(bookmark, "insert-child", - G_CALLBACK(cb_bookmark_insert_child), xml); + G_CALLBACK(cb_bookmark_insert_child), bookmark); g_signal_connect_after(bookmark, "remove-child", - G_CALLBACK(cb_bookmark_remove_child), xml); + G_CALLBACK(cb_bookmark_remove_child), bookmark); } @@ -259,6 +264,9 @@ g_free(title); } g_value_unset(&value); + + /* emit update signal */ + g_signal_emit_by_name(object, "update", 0); } @@ -1161,20 +1169,20 @@ static void -kz_xbel_connect_signals (KzBookmark *bookmark) +kz_xbel_connect_signals (KzBookmark *bookmark, gpointer data) { g_signal_connect(bookmark, "notify", - G_CALLBACK(cb_bookmark_notify), NULL); + G_CALLBACK(cb_bookmark_notify), data); if (KZ_IS_BOOKMARK_FILE(bookmark)) return; if (!kz_bookmark_is_folder(bookmark)) return; g_signal_connect_after(bookmark, "insert-child", G_CALLBACK(cb_bookmark_insert_child), - NULL); + data); g_signal_connect_after(bookmark, "remove-child", G_CALLBACK(cb_bookmark_remove_child), - NULL); + data); /* for children */ { @@ -1184,7 +1192,7 @@ for (node = children; node; node = g_list_next(node)) { KzBookmark *child = node->data; - kz_xbel_connect_signals(child); + kz_xbel_connect_signals(child, data); } g_list_free(children); } @@ -1192,21 +1200,21 @@ static void -kz_xbel_disconnect_signals (KzBookmark *bookmark) +kz_xbel_disconnect_signals (KzBookmark *bookmark, gpointer data) { g_signal_handlers_disconnect_by_func (bookmark, - G_CALLBACK(cb_bookmark_notify), NULL); + G_CALLBACK(cb_bookmark_notify), data); if (KZ_IS_BOOKMARK_FILE(bookmark)) return; if (!kz_bookmark_is_folder(bookmark)) return; g_signal_handlers_disconnect_by_func (bookmark, - G_CALLBACK(cb_bookmark_insert_child), NULL); + G_CALLBACK(cb_bookmark_insert_child), data); g_signal_handlers_disconnect_by_func (bookmark, - G_CALLBACK(cb_bookmark_remove_child), NULL); + G_CALLBACK(cb_bookmark_remove_child), data); /* for children */ { @@ -1216,7 +1224,7 @@ for (node = children; node; node = g_list_next(node)) { KzBookmark *child = node->data; - kz_xbel_disconnect_signals(child); + kz_xbel_disconnect_signals(child, data); } g_list_free(children); } @@ -1225,18 +1233,23 @@ static void cb_bookmark_insert_child (KzBookmark *bookmark, - KzBookmark *child, KzBookmark *sibling) + KzBookmark *child, KzBookmark *sibling, + gpointer data) { kz_xbel_insert_xml_node(child, bookmark, sibling); - kz_xbel_connect_signals(child); + kz_xbel_connect_signals(child, data); + + g_signal_emit_by_name(G_OBJECT(data), "update", 0); } static void -cb_bookmark_remove_child (KzBookmark *bookmark, KzBookmark *child) +cb_bookmark_remove_child (KzBookmark *bookmark, KzBookmark *child, gpointer data) { - kz_xbel_disconnect_signals(child); + kz_xbel_disconnect_signals(child, data); kz_xbel_remove_xml_node(child); + + g_signal_emit_by_name(G_OBJECT(data), "update", 0); } @@ -1328,7 +1341,7 @@ static void -cb_bookmark_notify (GObject *object, GParamSpec *pspec) +cb_bookmark_notify (GObject *object, GParamSpec *pspec, gpointer data) { KzBookmark *bookmark; KzXMLNode *node; @@ -1520,6 +1533,7 @@ kz_xml_node_set_attr(metanode, "kz:javascript", str); } g_value_unset(&value); + g_signal_emit_by_name(G_OBJECT(data), "update", 0); }