[Cxplorer-cvs 01159] CVS update: cxplorer/src

Back to archive index

Yasumichi Akahoshi yasum****@users*****
2005年 5月 19日 (木) 12:11:40 JST


Index: cxplorer/src/cxplorer-window.c
diff -u cxplorer/src/cxplorer-window.c:1.59 cxplorer/src/cxplorer-window.c:1.60
--- cxplorer/src/cxplorer-window.c:1.59	Thu May 19 11:27:19 2005
+++ cxplorer/src/cxplorer-window.c	Thu May 19 12:11:39 2005
@@ -85,9 +85,9 @@
 static void cxplorer_window_instance_init (GTypeInstance * instance,
 					   gpointer g_class);
 static void cxplorer_window_sendto_menu_init (CxplorerWindow *self);
-static GtkWidget* cxplorer_window_menu_item_new_from_sendto (const gchar *caption, const gchar *command, gpointer user_data);
+static GSList* cxplorer_window_menu_item_new_from_sendto (const gchar *caption, const gchar *command, gpointer user_data);
 static void cxplorer_window_bookmark_menu_init (CxplorerWindow *self);
-static GtkWidget* cxplorer_window_menu_item_new_from_bookmark (const gchar *key, const gchar *value, gpointer user_data);
+static GSList* cxplorer_window_menu_item_new_from_bookmark (const gchar *key, const gchar *value, gpointer user_data);
 static void cxplorer_window_dispose (GObject * obj);
 static void cxplorer_window_finalize (GObject * obj);
 static void cxplorer_window_entry_activate (GtkWidget *widget, gpointer user_data);
@@ -213,7 +213,7 @@
 		g_free (filter);
 	}
 
-	private->dynamic_widgets = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+	private->dynamic_widgets = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify)g_slist_free);
 	vbox = gtk_vbox_new (FALSE, 0);
 	gtk_container_add (GTK_CONTAINER (self), vbox);
 
@@ -320,9 +320,9 @@
 static void cxplorer_window_sendto_menu_init (CxplorerWindow *self)
 {
 	CxplorerWindowPrivate *private = CXPLORER_WINDOW_GET_PRIVATE (self);
-	GtkWidget *menu_item;
 	GSList *sendto_list;
 	GSList *node;
+	GSList *widget_list = NULL;
 	GConfEntry *entry;
 	GConfValue *value;
 	gchar *key;
@@ -336,13 +336,13 @@
 		value = gconf_entry_get_value (entry);
 		if (value && value->type == GCONF_VALUE_PAIR)
 		{
-			menu_item = cxplorer_window_menu_item_new_from_sendto (
+			widget_list = cxplorer_window_menu_item_new_from_sendto (
 					gconf_value_get_string(gconf_value_get_car(value)),
 					gconf_value_get_string(gconf_value_get_cdr(value)),
 					self);
-			if (menu_item)
+			if (widget_list)
 			{
-				g_hash_table_insert (private->dynamic_widgets, key, menu_item);
+				g_hash_table_insert (private->dynamic_widgets, key, widget_list);
 			}
 		}
 		gconf_entry_free (entry);
@@ -360,12 +360,13 @@
  * @param [in] user_data CxplorerWindow
  * \endif
  */
-static GtkWidget* cxplorer_window_menu_item_new_from_sendto (const gchar *caption, const gchar *command, gpointer user_data)
+static GSList* cxplorer_window_menu_item_new_from_sendto (const gchar *caption, const gchar *command, gpointer user_data)
 {
 	CxplorerWindowPrivate *private = CXPLORER_WINDOW_GET_PRIVATE (user_data);
 	GtkWidget *menu;
 	GtkWidget *menuitem = NULL;
 	GtkWidget *senditem = NULL;
+	GSList *widget_list = NULL;
 	const gchar *path[] = {
 		"/menubar/FileMenu/SendMenu",
 		"/popup/SendMenu",
@@ -375,7 +376,6 @@
 	g_return_val_if_fail (caption != NULL, NULL);
 	g_return_val_if_fail (command != NULL, NULL);
 
-
 	for (idx=0; idx<G_N_ELEMENTS(path); idx++)
 	{
 		if((menuitem = gtk_ui_manager_get_widget (private->ui_manager, path[idx])) != NULL)
@@ -384,12 +384,14 @@
 			g_object_set_data (G_OBJECT (senditem), "config_value", g_strdup(command));
 			g_signal_connect (senditem, "activate", G_CALLBACK(cxplorer_window_sendto_activate), user_data);
 			gtk_widget_show (senditem);
+			widget_list = g_slist_prepend (widget_list, senditem);
+
 			menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menuitem));
 			gtk_container_add (GTK_CONTAINER(menu), senditem);
 		}
 	}
 
-	return senditem;
+	return widget_list;
 }
 
 /**
@@ -400,9 +402,9 @@
 static void cxplorer_window_bookmark_menu_init (CxplorerWindow *self)
 {
 	CxplorerWindowPrivate *private = CXPLORER_WINDOW_GET_PRIVATE (self);
-	GtkWidget *menu_item;
 	GSList *bookmark_list;
 	GSList *node;
+	GSList *widget_list = NULL;
 	GConfEntry *entry;
 	GConfValue *value;
 	gchar *key;
@@ -416,13 +418,13 @@
 		value = gconf_entry_get_value (entry);
 		if (value && value->type == GCONF_VALUE_PAIR)
 		{
-			menu_item = cxplorer_window_menu_item_new_from_bookmark (
+			widget_list = cxplorer_window_menu_item_new_from_bookmark (
 					gconf_value_get_string(gconf_value_get_car(value)),
 					gconf_value_get_string(gconf_value_get_cdr(value)),
 					self);
-			if (menu_item)
+			if (widget_list)
 			{
-				g_hash_table_insert (private->dynamic_widgets, key, menu_item);
+				g_hash_table_insert (private->dynamic_widgets, key, widget_list);
 			}
 		}
 		gconf_entry_free (entry);
@@ -440,11 +442,12 @@
  * @param [in] user_data CxplorerWindow
  * \endif
  */
-static GtkWidget *cxplorer_window_menu_item_new_from_bookmark (const gchar *key, const gchar *value, gpointer user_data)
+static GSList *cxplorer_window_menu_item_new_from_bookmark (const gchar *key, const gchar *value, gpointer user_data)
 {
 	CxplorerWindowPrivate *private = CXPLORER_WINDOW_GET_PRIVATE (user_data);
 	GtkWidget *menu;
 	GtkWidget *menuitem = NULL;
+	GSList *widget_list = NULL;
 
 	g_return_val_if_fail (key != NULL, NULL);
 	g_return_val_if_fail (value != NULL, NULL);
@@ -457,9 +460,10 @@
 		gtk_container_add (GTK_CONTAINER(menu), menuitem);
 		g_signal_connect (menuitem, "activate", G_CALLBACK(cxplorer_window_user_bookmark_activate), user_data);
 		gtk_widget_show (menuitem);
+		widget_list = g_slist_prepend (widget_list, menuitem);
 	}
 
-	return	menuitem;
+	return	widget_list;
 }
 
 static void cxplorer_window_dispose (GObject * obj)
@@ -883,7 +887,7 @@
 {
 	CxplorerWindowPrivate *private = CXPLORER_WINDOW_GET_PRIVATE (user_data);
 	GtkWidget *dialog;
-	GtkWidget *menu_item;
+	GSList *widget_list = NULL;
 	gchar *cur_dir;
 	gchar *dir_utf8;
 	gchar *message;
@@ -905,8 +909,8 @@
 
 		/* ブックマーク名とディレクトリ名のペアを登録する */
 		gconf_client_set_pair (private->client, bookmark_key, GCONF_VALUE_STRING, GCONF_VALUE_STRING, &alias, &dir_utf8, NULL);
-		menu_item = cxplorer_window_menu_item_new_from_bookmark (alias, cur_dir, user_data);
-		g_hash_table_insert (private->dynamic_widgets, bookmark_key, menu_item);
+		widget_list = cxplorer_window_menu_item_new_from_bookmark (alias, cur_dir, user_data);
+		g_hash_table_insert (private->dynamic_widgets, bookmark_key, widget_list);
 		g_free (alias);
 		g_free (bookmark_name);
 	}
@@ -992,51 +996,55 @@
 {
 	CxplorerWindow *self = CXPLORER_WINDOW (user_data);
 	CxplorerWindowPrivate *private = CXPLORER_WINDOW_GET_PRIVATE (user_data);
+	GSList *widget_list;
+	GSList *node;
 	GtkWidget *menu_item;
 	GtkWidget *label;
 	gchar *dir;
 
-	if (private)
-	{
-		g_print ("private valid.\n");
-	}
-	g_print ("%s was changed.\n", key);
 	if (value == NULL)
 	{
-		menu_item = g_hash_table_lookup (private->dynamic_widgets, key);
-		gtk_widget_destroy (menu_item);
+		widget_list = g_hash_table_lookup (private->dynamic_widgets, key);
+		for (node = widget_list; node != NULL; node = node->next)
+		{
+			gtk_widget_destroy (GTK_WIDGET(node->data));
+		}
 		g_hash_table_remove (private->dynamic_widgets, key);
 	}
 	else if (value->type == GCONF_VALUE_PAIR)
 	{
-		menu_item = g_hash_table_lookup (private->dynamic_widgets, key);
-		if (menu_item)
+		widget_list = g_hash_table_lookup (private->dynamic_widgets, key);
+		if (widget_list)
 		{
-			label = gtk_bin_get_child (GTK_BIN(menu_item));
-			gtk_label_set_text (GTK_LABEL(label), gconf_value_get_string(gconf_value_get_car(value)));
-			g_object_set_data (G_OBJECT(menu_item), "config_value", g_strdup(gconf_value_get_string(gconf_value_get_cdr(value))));
+			for (node = widget_list; node != NULL; node = node->next)
+			{
+				menu_item = GTK_WIDGET(node->data);
+				label = gtk_bin_get_child (GTK_BIN(menu_item));
+				gtk_label_set_text (GTK_LABEL(label), gconf_value_get_string(gconf_value_get_car(value)));
+				g_object_set_data (G_OBJECT(menu_item), "config_value", g_strdup(gconf_value_get_string(gconf_value_get_cdr(value))));
+			}
 		}
 		else
 		{
 			dir = g_path_get_dirname (key);
 			if (strcmp(dir, BOOKMARK_GCONF_DIR) == 0)
 			{
-				menu_item = cxplorer_window_menu_item_new_from_bookmark (
+				widget_list = cxplorer_window_menu_item_new_from_bookmark (
 						gconf_value_get_string(gconf_value_get_car(value)),
 						gconf_value_get_string(gconf_value_get_cdr(value)),
 						self);
 			}
 			else if (strcmp(dir, SENDTO_GCONF_DIR) == 0)
 			{
-				menu_item = cxplorer_window_menu_item_new_from_sendto (
+				widget_list = cxplorer_window_menu_item_new_from_sendto (
 						gconf_value_get_string(gconf_value_get_car(value)),
 						gconf_value_get_string(gconf_value_get_cdr(value)),
 						self);
 			}
 
-			if (menu_item)
+			if (widget_list)
 			{
-				g_hash_table_insert (private->dynamic_widgets, g_strdup(key), menu_item);
+				g_hash_table_insert (private->dynamic_widgets, g_strdup(key), widget_list);
 			}
 
 			g_free (dir);


Cxplorer-cvs メーリングリストの案内
Back to archive index