Kouhei Sutou
kous****@users*****
Sat Jan 20 14:09:01 JST 2007
Index: kazehakase/src/bookmarks/kz-bookmark-tab-menu.c
diff -u kazehakase/src/bookmarks/kz-bookmark-tab-menu.c:1.10 kazehakase/src/bookmarks/kz-bookmark-tab-menu.c:1.11
--- kazehakase/src/bookmarks/kz-bookmark-tab-menu.c:1.10 Sun Dec 31 10:59:41 2006
+++ kazehakase/src/bookmarks/kz-bookmark-tab-menu.c Sat Jan 20 14:09:01 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-tab-menu.c,v 1.10 2006/12/31 01:59:41 ikezoe Exp $
+ * $Id: kz-bookmark-tab-menu.c,v 1.11 2007/01/20 05:09:01 kous Exp $
*/
#include "kz-bookmark-tab-menu.h"
@@ -405,6 +405,38 @@
kz_bookmark_menu_append_tab_menuitems(shell, kz, item);
}
+static GList *
+cb_folder_get_children (KzBookmark *item, GtkMenuShell *shell)
+{
+ GList *child, *children = NULL, *last_children = NULL;
+
+ for (child = shell->children; child; child = g_list_next(child))
+ {
+ KzBookmark *bookmark;
+ bookmark = g_object_get_data(G_OBJECT(child->data),
+ KZ_BOOKMARK_TAB_MENU_BOOKMARK_KEY);
+ if (!children)
+ {
+ children = g_list_append(children, bookmark);
+ last_children = children;
+ }
+ else
+ {
+ GList *result;
+ result = g_list_append(last_children, bookmark);
+ last_children = g_list_next(result);
+ }
+ }
+
+ return children;
+}
+
+static gboolean
+cb_folder_has_children (KzBookmark *item, GtkMenuShell *shell)
+{
+ return shell->children != NULL;
+}
+
static void
folder_weak_ref (gpointer data, GObject *obj)
@@ -435,6 +467,12 @@
g_signal_connect_after(folder, "children-reordered",
G_CALLBACK(cb_folder_reordered),
shell);
+ g_signal_connect_after(folder, "get-children",
+ G_CALLBACK(cb_folder_get_children),
+ shell);
+ g_signal_connect_after(folder, "has-children",
+ G_CALLBACK(cb_folder_has_children),
+ shell);
g_signal_connect(shell, "destroy",
G_CALLBACK(cb_root_menu_destroy), folder);
@@ -457,6 +495,14 @@
(folder,
G_CALLBACK(cb_folder_reordered),
shell);
+ g_signal_handlers_disconnect_by_func
+ (folder,
+ G_CALLBACK(cb_folder_get_children),
+ shell);
+ g_signal_handlers_disconnect_by_func
+ (folder,
+ G_CALLBACK(cb_folder_has_children),
+ shell);
g_object_weak_unref(G_OBJECT(folder), folder_weak_ref, shell);
}
Index: kazehakase/src/bookmarks/kz-bookmark.c
diff -u kazehakase/src/bookmarks/kz-bookmark.c:1.82 kazehakase/src/bookmarks/kz-bookmark.c:1.83
--- kazehakase/src/bookmarks/kz-bookmark.c:1.82 Sat Dec 2 18:57:25 2006
+++ kazehakase/src/bookmarks/kz-bookmark.c Sat Jan 20 14:09:01 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.c,v 1.82 2006/12/02 09:57:25 ikezoe Exp $
+ * $Id: kz-bookmark.c,v 1.83 2007/01/20 05:09:01 kous Exp $
*/
#include "kz-bookmark.h"
@@ -37,6 +37,8 @@
REMOVE_CHILD_SIGNAL,
MOVE_CHILD_SIGNAL,
CHILDREN_REORDERED_SIGNAL,
+ GET_CHILDREN_SIGNAL,
+ HAS_CHILDREN_SIGNAL,
LAST_SIGNAL
};
@@ -74,6 +76,8 @@
KzBookmark *sibling);
static void kz_bookmark_real_remove_child (KzBookmark *bookmark,
KzBookmark *child);
+static GList *kz_bookmark_real_get_children (KzBookmark *bookmark);
+static gboolean kz_bookmark_real_has_children (KzBookmark *bookmark);
static gint kz_bookmark_signals[LAST_SIGNAL] = {0};
@@ -110,6 +114,8 @@
klass->remove_child = kz_bookmark_real_remove_child;
klass->move_child = NULL; /* kz_bookmark_real_move_child; */
klass->children_reordered = NULL;
+ klass->get_children = kz_bookmark_real_get_children;
+ klass->has_children = kz_bookmark_real_has_children;
g_object_class_install_property(
object_class,
@@ -290,6 +296,24 @@
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+ kz_bookmark_signals[GET_CHILDREN_SIGNAL]
+ = g_signal_new ("get-children",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (KzBookmarkClass, get_children),
+ NULL, NULL,
+ _kz_marshal_POINTER__VOID,
+ G_TYPE_POINTER, 0);
+
+ kz_bookmark_signals[HAS_CHILDREN_SIGNAL]
+ = g_signal_new ("has-children",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (KzBookmarkClass, has_children),
+ NULL, NULL,
+ _kz_marshal_BOOLEAN__VOID,
+ G_TYPE_BOOLEAN, 0);
+
/* FIXME! add other properties */
/*
* candidates:
@@ -898,13 +922,11 @@
}
-GList *
-kz_bookmark_get_children (KzBookmark *bookmark)
+static GList *
+kz_bookmark_real_get_children (KzBookmark *bookmark)
{
GList *list;
- g_return_val_if_fail(KZ_IS_BOOKMARK(bookmark), NULL);
-
list = g_object_get_qdata(G_OBJECT(bookmark), children_quark);
if (list)
@@ -913,14 +935,25 @@
return NULL;
}
+GList *
+kz_bookmark_get_children (KzBookmark *bookmark)
+{
+ GList *result;
-gboolean
-kz_bookmark_has_children (KzBookmark *bookmark)
+ g_return_val_if_fail(KZ_IS_BOOKMARK(bookmark), NULL);
+
+ g_signal_emit(bookmark,
+ kz_bookmark_signals[GET_CHILDREN_SIGNAL], 0,
+ &result);
+ return result;
+}
+
+
+static gboolean
+kz_bookmark_real_has_children (KzBookmark *bookmark)
{
GList *list;
- g_return_val_if_fail(KZ_IS_BOOKMARK(bookmark), FALSE);
-
list = g_object_get_qdata(G_OBJECT(bookmark), children_quark);
if (list)
@@ -929,6 +962,18 @@
return FALSE;
}
+gboolean
+kz_bookmark_has_children (KzBookmark *bookmark)
+{
+ gboolean result;
+
+ g_return_val_if_fail(KZ_IS_BOOKMARK(bookmark), FALSE);
+
+ g_signal_emit(bookmark,
+ kz_bookmark_signals[HAS_CHILDREN_SIGNAL], 0,
+ &result);
+ return result;
+}
KzBookmark *
kz_bookmark_next (KzBookmark *bookmark)
Index: kazehakase/src/bookmarks/kz-bookmark.h
diff -u kazehakase/src/bookmarks/kz-bookmark.h:1.36 kazehakase/src/bookmarks/kz-bookmark.h:1.37
--- kazehakase/src/bookmarks/kz-bookmark.h:1.36 Sun Apr 23 23:42:25 2006
+++ kazehakase/src/bookmarks/kz-bookmark.h Sat Jan 20 14:09:01 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.h,v 1.36 2006/04/23 14:42:25 kous Exp $
+ * $Id: kz-bookmark.h,v 1.37 2007/01/20 05:09:01 kous Exp $
*/
#ifndef __KZ_BOOKMARK_H__
@@ -73,6 +73,9 @@
KzBookmark *parent,
KzBookmark *sibling);
void (*children_reordered) (KzBookmark *boomark);
+
+ GList *(*get_children) (KzBookmark *boomark);
+ gboolean (*has_children) (KzBookmark *boomark);
};