[kazehakase-svn] [3272] * src/kz-window.c, src/kz-notebook.[ch]: tab_tree is moved into

Back to archive index

svnno****@sourc***** svnno****@sourc*****
Fri Oct 5 14:47:06 JST 2007


Revision: 3272
          http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi?root=kazehakase&view=rev&rev=3272
Author:   ikezoe
Date:     2007-10-05 14:47:06 +0900 (Fri, 05 Oct 2007)

Log Message:
-----------
* src/kz-window.c, src/kz-notebook.[ch]: tab_tree is moved into
KzNotebook.

Modified Paths:
--------------
    kazehakase/trunk/ChangeLog
    kazehakase/trunk/src/kz-notebook.c
    kazehakase/trunk/src/kz-notebook.h
    kazehakase/trunk/src/kz-window.c

Modified: kazehakase/trunk/ChangeLog
===================================================================
--- kazehakase/trunk/ChangeLog	2007-10-05 05:19:49 UTC (rev 3271)
+++ kazehakase/trunk/ChangeLog	2007-10-05 05:47:06 UTC (rev 3272)
@@ -2,6 +2,8 @@
 
 	* src/kz-window.c: Fix "Gtk-CRITICAL **: gtk_selection_data_set:
 	assertion `length <= 0' failed"
+	* src/kz-window.c, src/kz-notebook.[ch]: tab_tree is moved into
+	KzNotebook.
 
 2007-10-04  Hiroyuki Ikezoe  <poinc****@ikezo*****>
 

Modified: kazehakase/trunk/src/kz-notebook.c
===================================================================
--- kazehakase/trunk/src/kz-notebook.c	2007-10-05 05:19:49 UTC (rev 3271)
+++ kazehakase/trunk/src/kz-notebook.c	2007-10-05 05:47:06 UTC (rev 3272)
@@ -42,6 +42,7 @@
 	/* tabs */
 	GList *open_hist;
 	GList *view_hist;
+	GNode *tab_tree;
 
 	GtkWidget *dragged_page;
 };
@@ -132,6 +133,8 @@
 	priv->kz        = NULL;
 	priv->open_hist = NULL;
 	priv->view_hist = NULL;
+	priv->tab_tree  = NULL;
+
 	priv->dragged_page = NULL;
 
 	g_signal_connect(notebook, "page-reordered", 
@@ -462,12 +465,49 @@
 kz_notebook_open_new_tab (KzNotebook *notebook, KzEmbed *embed, KzTabLabel *label)
 {
 	gint pos;
+	GNode *node;
+	KzNotebookPrivate *priv = KZ_NOTEBOOK_GET_PRIVATE(notebook);
 
 	pos = get_insert_tab_position(notebook);
 
-	return kz_notebook_open_new_tab_at_pos(notebook, embed, label, pos);
+	pos = kz_notebook_open_new_tab_at_pos(notebook, embed, label, pos);
+
+	/* root node */
+	if (!priv->tab_tree)
+		priv->tab_tree = g_node_new(NULL);
+	/* insret node */
+	node = g_node_new(embed);
+	g_node_append(priv->tab_tree, node);
+
+	return pos;
 }
 
+gint
+kz_notebook_open_new_tab_with_parent (KzNotebook *notebook, KzEmbed *embed, KzTabLabel *label, KzEmbed *parent)
+{
+	gint pos;
+	GNode *node, *parent_node;
+	KzNotebookPrivate *priv = KZ_NOTEBOOK_GET_PRIVATE(notebook);
+
+	pos = get_insert_tab_position(notebook);
+
+	pos = kz_notebook_open_new_tab_at_pos(notebook, embed, label, pos);
+	
+	/* root node */
+	if (!priv->tab_tree)
+		priv->tab_tree = g_node_new(NULL);
+	/* insret node */
+	node = g_node_new(embed);
+	parent_node = g_node_find(priv->tab_tree,
+				  G_IN_ORDER, G_TRAVERSE_ALL, parent);
+	if (parent_node)
+		g_node_append(parent_node, node);
+	else
+		g_node_append(priv->tab_tree, node);
+
+	return pos;
+}
+
 gboolean
 kz_notebook_close_tab (KzNotebook *notebook, GtkWidget *widget)
 {
@@ -476,6 +516,7 @@
 	GtkWidget *next = NULL;
 	KzNotebookPrivate *priv = KZ_NOTEBOOK_GET_PRIVATE(notebook);
 	KzWindow *kz = priv->kz;
+	GNode *node, *child;
 	GtkWidget *current = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook),
 						       gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)));
 	kztab = KZ_TAB_LABEL(gtk_notebook_get_tab_label(GTK_NOTEBOOK(notebook),
@@ -538,6 +579,22 @@
 
 CLOSE_TAB:
 	priv->view_hist = g_list_remove(priv->view_hist, widget);
+	node = g_node_find(priv->tab_tree,
+			   G_IN_ORDER, G_TRAVERSE_ALL, widget);
+	if (node)
+	{
+		/* move children */
+		child = g_node_first_child(node);
+		while (child)
+		{
+			GNode *next = g_node_next_sibling(child);
+			g_node_unlink(child);
+			g_node_append(priv->tab_tree, child);
+			child = next;
+		}
+
+		g_node_destroy(node);
+	}
 	gtk_widget_destroy(widget);
 
 	if (kz && gtk_notebook_get_n_pages(GTK_NOTEBOOK(notebook)) == 0)
@@ -591,6 +648,7 @@
 {
 	KzTabLabel *new_kztab;
 	KzNotebookPrivate *dest_priv, *src_priv;
+	GNode *node, *child;
 
 	/* create new tab label */
 	dest_priv = KZ_NOTEBOOK_GET_PRIVATE(dest_notebook);
@@ -613,6 +671,32 @@
 						widget);
 	dest_priv->open_hist = g_list_prepend(dest_priv->open_hist,
 					      widget);
+	/* move tab tree */
+	node = g_node_find(src_priv->tab_tree,
+			   G_IN_ORDER, G_TRAVERSE_ALL, widget);
+	if (node)
+	{
+		/* move children */
+		child = g_node_first_child(node);
+		while (child)
+		{
+			GNode *next = g_node_next_sibling(child);
+			g_node_unlink(child);
+			g_node_append(src_priv->tab_tree,
+				      child);
+			child = next;
+		}
+
+		/* move node */
+		g_node_unlink(node);
+		if (!dest_priv->tab_tree)
+			dest_priv->tab_tree = g_node_new(NULL);
+		g_node_append(dest_priv->tab_tree, node);
+	}
+	else
+	{
+		g_warning("KzWindow: cannot find tab node!");
+	}
 	return TRUE;
 }
 
@@ -777,3 +861,9 @@
 	return KZ_NOTEBOOK_GET_PRIVATE(notebook)->dragged_page;
 }
 
+GNode *
+kz_notebook_get_tree (KzNotebook *notebook)
+{
+	return KZ_NOTEBOOK_GET_PRIVATE(notebook)->tab_tree;
+}
+

Modified: kazehakase/trunk/src/kz-notebook.h
===================================================================
--- kazehakase/trunk/src/kz-notebook.h	2007-10-05 05:19:49 UTC (rev 3271)
+++ kazehakase/trunk/src/kz-notebook.h	2007-10-05 05:47:06 UTC (rev 3272)
@@ -39,6 +39,11 @@
 gint        kz_notebook_open_new_tab	      (KzNotebook *notebook,
 					       KzEmbed    *embed,
 					       KzTabLabel *label);
+gint        kz_notebook_open_new_tab_with_parent
+					      (KzNotebook *notebook,
+					       KzEmbed    *embed,
+					       KzTabLabel *label,
+					       KzEmbed    *parent);
 gint        kz_notebook_open_new_tab_at_pos   (KzNotebook *notebook,
 					       KzEmbed    *embed,
 					       KzTabLabel *label,
@@ -69,6 +74,7 @@
 KzTabLabel *kz_notebook_get_sibling_tab_label (KzNotebook *notebook,
 					       KzTabLabel *label);
 GtkWidget  *kz_notebook_get_dragged_page      (KzNotebook *notebook);
+GNode      *kz_notebook_get_tree              (KzNotebook *notebook);
 
 G_END_DECLS
 

Modified: kazehakase/trunk/src/kz-window.c
===================================================================
--- kazehakase/trunk/src/kz-window.c	2007-10-05 05:19:49 UTC (rev 3271)
+++ kazehakase/trunk/src/kz-window.c	2007-10-05 05:47:06 UTC (rev 3272)
@@ -84,7 +84,6 @@
 	
 	/* sidebar */
 	gboolean sidebar_was_shown;
-	GNode *tab_tree;
 };
 #define KZ_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), KZ_TYPE_WINDOW, KzWindowPrivate))
 
@@ -108,12 +107,23 @@
 	{KZ_SHIFT_KEY,"shift"},
 };
 
+enum {
+	TARGET_TEXT_URI_LIST=999
+};
+
 static gboolean key_theme_is_emacs = FALSE;
 
 static gboolean delete_event   (GtkWidget     *widget,
 				GdkEventAny   *event);
 static gboolean key_press_event(GtkWidget     *widget,
 				GdkEventKey   *event);
+static void     drag_data_received
+			       (GtkWidget *widget,
+			        GdkDragContext *context,
+				gint x, gint y,
+				GtkSelectionData *data,
+				guint info,
+				guint time);
 static void     destroy        (GtkObject     *object);
 
 static void     kz_window_append_tab     (KzWindow      *kz,
@@ -306,8 +316,9 @@
 	object_class->destroy = destroy;
 
 	/* GtkWidget signals */
-	widget_class->delete_event    = delete_event;
-	widget_class->key_press_event = key_press_event;
+	widget_class->delete_event       = delete_event;
+	widget_class->key_press_event    = key_press_event;
+	widget_class->drag_data_received = drag_data_received;
 
 	/* KzWindow signals */
 	klass->append_tab = kz_window_append_tab;
@@ -412,8 +423,6 @@
 	
 	priv->sidebar_was_shown = FALSE;
 
-	priv->tab_tree     = NULL;
-
 	kz->tabs            = kz_bookmark_pure_folder_new();
 	kz->closed_tabs     = kz_bookmark_pure_folder_new();
 	kz->history_search  = kz_bookmark_pure_folder_new();
@@ -565,6 +574,8 @@
 		gtk_widget_show(kz->statusbar);
 	}
 
+	gtk_drag_dest_add_uri_targets(GTK_WIDGET(kz));
+
 	/* from Galeon-1.3.18 */
 	/* initialize the listener for the key theme */
 	settings = gtk_settings_get_default();
@@ -827,13 +838,10 @@
 {
 	KzEmbed *kzembed;
 	KzTabLabel *kztab, *sibtab;
-	GNode *node, *parent_node;
-	KzWindowPrivate *priv;
 	
 	g_return_val_if_fail(KZ_IS_WINDOW(kz), NULL);
 	if (url) g_return_val_if_fail(g_utf8_validate(url, strlen(url), NULL), NULL);
 
-	priv = KZ_WINDOW_GET_PRIVATE(kz);
 	kzembed = kz_window_create_embed(kz);
 	kztab = KZ_TAB_LABEL(kz_tab_label_new(kz, kzembed));
 
@@ -849,19 +857,6 @@
 
 	kz_window_set_embed_callbacks(kz, kzembed);
 
-	/* root node */
-	if (!priv->tab_tree)
-		priv->tab_tree = g_node_new(NULL);
-
-	/* insret node */
-	node = g_node_new(kzembed);
-	parent_node = g_node_find(priv->tab_tree,
-				  G_IN_ORDER, G_TRAVERSE_ALL, parent);
-	if (parent_node)
-		g_node_append(parent_node, node);
-	else
-		g_node_append(priv->tab_tree, node);
-
 	g_signal_emit(kz, kz_window_signals[APPEND_TAB_SIGNAL],
 		      0, kzembed, parent);
 
@@ -892,7 +887,6 @@
 	{
 		KzEmbed *kzembed;
 		KzTabLabel *kztab;
-		GNode *node;
 		KzBookmark *child;
 		kzembed = kz_window_create_embed(kz);
 		kztab = KZ_TAB_LABEL(kz_tab_label_new(kz, kzembed));
@@ -903,15 +897,6 @@
 		kz_notebook_open_new_tab_at_pos(KZ_NOTEBOOK(kz->notebook), kzembed, kztab, -1);
 		kz_window_set_embed_callbacks(kz, kzembed);
 		kz_tab_label_set_history(kztab, child);
-
-		/* root node */
-		if (!priv->tab_tree)
-			priv->tab_tree = g_node_new(NULL);
-
-		/* insret node */
-		node = g_node_new(kzembed);
-		g_node_append(priv->tab_tree, node);
-
 	}
 	g_list_free(childtabs);
 
@@ -954,16 +939,11 @@
 	GtkWidget *label;
 	KzEmbed *kzembed;
 	KzTabLabel *new_kztab;
-	GNode *node, *child;
-	KzWindowPrivate *dest_priv, *src_priv;
 
 	g_return_if_fail(KZ_IS_WINDOW(src_kz));
 	g_return_if_fail(KZ_IS_WINDOW(dest_kz));
 	g_return_if_fail(KZ_IS_EMBED(widget));
 
-	dest_priv = KZ_WINDOW_GET_PRIVATE(dest_kz);
-	src_priv = KZ_WINDOW_GET_PRIVATE(src_kz);
-
 	src_notebook = GTK_NOTEBOOK(src_kz->notebook);
 	dest_notebook = GTK_NOTEBOOK(dest_kz->notebook);
 
@@ -989,39 +969,35 @@
 	kz_bookmark_prepend(dest_kz->tabs, new_kztab->history);
 	kz_window_set_embed_callbacks(dest_kz, kzembed);
 
-	/* move tab tree */
-	node = g_node_find(src_priv->tab_tree,
-			   G_IN_ORDER, G_TRAVERSE_ALL, widget);
-	if (node)
+	g_signal_emit(src_kz,
+		      kz_window_signals[REMOVE_TAB_SIGNAL],
+		      0, kzembed);
+	g_signal_emit(dest_kz,
+		      kz_window_signals[APPEND_TAB_SIGNAL],
+		      0, kzembed, NULL);
+}
+
+
+static void
+drag_data_received (GtkWidget *widget,
+                    GdkDragContext *context,
+                    gint x, gint y,
+                    GtkSelectionData *seldata,
+                    guint info,
+                    guint time)
+{
+	if (seldata->target == gdk_atom_intern_static_string("text/uri-list"))
 	{
-		/* move children */
-		child = g_node_first_child(node);
-		while (child)
-		{
-			GNode *next = g_node_next_sibling(child);
-			g_node_unlink(child);
-			g_node_append(src_priv->tab_tree,
-				      child);
-			child = next;
-		}
+		KzWindow *kz = KZ_WINDOW(widget);
+		gchar **strings;
 
-		/* move node */
-		g_node_unlink(node);
-		if (!dest_priv->tab_tree)
-			dest_priv->tab_tree = g_node_new(NULL);
-		g_node_append(dest_priv->tab_tree, node);
-		
-		g_signal_emit(src_kz,
-			      kz_window_signals[REMOVE_TAB_SIGNAL],
-			      0, kzembed);
-		g_signal_emit(dest_kz,
-			      kz_window_signals[APPEND_TAB_SIGNAL],
-			      0, kzembed, NULL);
+		if (seldata->length < 0) return;
+
+		strings = g_strsplit((const gchar*)seldata->data, "\n", 2);
+		kz_window_open_new_tab(kz, strings[0]);
+		g_strfreev(strings);
+		gtk_drag_finish(context, TRUE, FALSE, time);
 	}
-	else
-	{
-		g_warning("KzWindow: cannot find tab node!");
-	}
 }
 
 
@@ -1664,7 +1640,7 @@
 kz_window_get_tree (KzWindow *kz)
 {
 	g_return_val_if_fail(KZ_IS_WINDOW(kz), NULL);
-	return KZ_WINDOW_GET_PRIVATE(kz)->tab_tree;
+	return kz_notebook_get_tree(KZ_NOTEBOOK(kz->notebook));
 }
 
 void
@@ -2151,12 +2127,8 @@
 cb_embed_close_tab (GtkObject *obj, KzWindow *kz)
 {
 	KzEmbed *kzembed;
-	GNode *node, *child;
-	KzWindowPrivate *priv;
 
 	g_return_if_fail(KZ_IS_WINDOW(kz));
-	priv = KZ_WINDOW_GET_PRIVATE(kz);
-	g_return_if_fail(priv->tab_tree);
 
 	kzembed = KZ_EMBED(obj);
 
@@ -2166,22 +2138,6 @@
 	kz_notebook_close_tab(KZ_NOTEBOOK(kz->notebook), GTK_WIDGET(obj));
 	kz_statusbar_set_link_text(KZ_STATUSBAR(kz->statusbar), NULL);
 
-	node = g_node_find(priv->tab_tree,
-			   G_IN_ORDER, G_TRAVERSE_ALL, kzembed);
-	/* probably destroy handler is already called */
-	if (!node) return;
-
-	/* move children */
-	child = g_node_first_child(node);
-	while (child)
-	{
-		GNode *next = g_node_next_sibling(child);
-		g_node_unlink(child);
-		g_node_append(priv->tab_tree, child);
-		child = next;
-	}
-	
-	g_node_destroy(node);
 	g_signal_emit(kz, kz_window_signals[REMOVE_TAB_SIGNAL],
 		      0, kzembed);
 }




More information about the Kazehakase-cvs mailing list
Back to archive index