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);