cmdassist/src/pre-dialog.c
author asano
Mon, 27 Sep 2010 19:04:59 +0900
changeset 31 4d19a4859e94
parent 22 c5c842f9ed91
permissions -rw-r--r--
(for Jeffrey Chen) cmdassistant crash issue with Help invocation

/*
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
*/

/*
#
# Copyright (c) 2010. Oracle and/or its affiliates. All rights reserved.
# Use is subject to license terms.
#
*/

#include <gtk/gtk.h>
#include <glib.h>
#include <glib/gi18n.h>
#include <gconf/gconf-client.h>
#include <libgnomeui/gnome-help.h>

#include "service/service.h"
#include "common.h"
#include "pre-dialog.h"
#include "../config.h"

enum {CHECK_COLUMN, DOC_COLUMN, DES_COLUMN, N_COLUMNS };

extern cmdassist_config pre_conf;

typedef struct {
	GtkWidget* criteria_panel_command;
	GtkWidget* criteria_panel_docTitle;
	GtkWidget* criteria_panel_content;
	GtkWidget* criteria_panel_entry_size;

	GtkWidget* system_panel_combobox_language;
	GtkWidget* system_panel_input_url;

	GtkWidget* doc_panel_tree;

	cmdassist_config* conf;
} preDialog;

static void 
gen_doc_list(gchar* str, gchar* doc_list){
	strcat(doc_list, str);
	strcat(doc_list, "##");
}

void load_config(cmdassist_config *conf) {

	GConfClient *gconf_client;
	gconf_client = gconf_client_get_default ();
	if(!gconf_client_dir_exists(gconf_client, 
               		        CMDASSIST_GCONF_DIR,
				NULL)) {
		debug_printf("Create Dir\n");
		gconf_client_add_dir (gconf_client,
               		         CMDASSIST_GCONF_DIR,
                       		 GCONF_CLIENT_PRELOAD_ONELEVEL,
                        	 NULL);
	}
	
	conf->criteria.command = gconf_client_get_bool(gconf_client, CMDASSIST_GCONF_SEARCH_COMMAND, NULL) ? TRUE : FALSE;

	conf->criteria.title = gconf_client_get_bool(gconf_client, CMDASSIST_GCONF_SEARCH_TITLE, NULL) ? TRUE : FALSE;

	conf->criteria.content = gconf_client_get_bool(gconf_client, CMDASSIST_GCONF_SEARCH_CONTENT, NULL) ? TRUE : FALSE;
	
	gdouble	result_size = gconf_client_get_float(gconf_client, CMDASSIST_GCONF_RESULT_SIZE, NULL);
	conf->criteria.result_size = (gconf_client_get_float(gconf_client, CMDASSIST_GCONF_RESULT_SIZE, NULL) == 0) ? 20.0 : result_size;
	
	conf->system.languageID = gconf_client_get_int(gconf_client, CMDASSIST_GCONF_SYSTEM_LANGUAGEID, NULL);
	if(conf->system.languageID != 0) {
		gchar *conf_str = gconf_client_get_string(gconf_client, CMDASSIST_GCONF_SYSTEM_LANGUAGE, NULL);
		strcpy(conf->system.language, conf_str);
		g_free(conf_str);
	}

	gchar *wsdl = NULL;
	wsdl = gconf_client_get_string(gconf_client, CMDASSIST_GCONF_SYSTEM_WSDL, NULL);
	if(wsdl != NULL) {
		strcpy(conf->system.wsdl, wsdl);
	} else {
		strcpy(conf->system.wsdl, CMDASSIST_WSDL);
	}
	g_free(wsdl);

	//conf->system.isServiceValid = FALSE;

	GSList *doc_list = NULL;
	doc_list = gconf_client_get_list(gconf_client, CMDASSIST_GCONF_DOC_LIST, GCONF_VALUE_STRING, NULL);

	strcpy(conf->doc.docs, "\0"); 
	g_list_foreach (doc_list, (GFunc)gen_doc_list, conf->doc.docs);

	g_list_foreach (doc_list, (GFunc)g_free, NULL);
	g_slist_free(doc_list);

	if(strlen(conf->doc.docs) == 0) {
		strcpy(conf->doc.docs, "solbook##manpage");
	}

	//Unref this gobject
	g_object_unref(gconf_client);
}

static void
add_to_list(cmd_doc_list *doc, preDialog *priv)
{
	GtkListStore *store;
	GtkTreeIter iter;
	gboolean is = FALSE;

	store = GTK_LIST_STORE(gtk_tree_view_get_model
		(GTK_TREE_VIEW(priv->doc_panel_tree)));


	if(strstr(priv->conf->doc.docs, doc->doc_name)) {
		is = TRUE;
	}
	gtk_list_store_append(store, &iter);
	gtk_list_store_set(store, &iter, CHECK_COLUMN, is, DOC_COLUMN, doc->doc_name, DES_COLUMN, doc->doc_des, -1);

}

static void
setConfValues(preDialog *priv) {
	cmdassist_config* conf = priv->conf;
	GtkTextBuffer *buffer;

	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(priv->criteria_panel_command), conf->criteria.command);
	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(priv->criteria_panel_docTitle), conf->criteria.title);
	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(priv->criteria_panel_content), conf->criteria.content);

	gtk_spin_button_set_value (GTK_SPIN_BUTTON(priv->criteria_panel_entry_size), conf->criteria.result_size);

	gtk_combo_box_set_active(GTK_COMBO_BOX(priv->system_panel_combobox_language), conf->system.languageID);
	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(priv->system_panel_input_url));
	gtk_text_buffer_set_text(buffer, conf->system.wsdl, strlen(conf->system.wsdl));

	GList *doc_list = NULL;
        if(pre_conf.system.isServiceValid) {
		doc_list = get_doc_list(doc_list, conf);	
	} else {
		cmd_doc_list *doc = g_malloc(sizeof(cmd_doc_list));
		strcpy(doc->doc_name, "solbook");
		strcpy(doc->doc_des, "Solaris Book");
		doc_list = g_list_append(doc_list, doc);
		cmd_doc_list *doc1 = g_malloc(sizeof(cmd_doc_list));
		strcpy(doc1->doc_name, "manpage");
		strcpy(doc1->doc_des, "Solaris manpage");
		doc_list = g_list_append(doc_list, doc1);
	}

	g_list_foreach(doc_list, add_to_list, priv);
	g_list_foreach (doc_list, (GFunc)g_free, NULL);
	g_list_free(doc_list);
}

static void
saveConfValues(GtkWidget *widget, gpointer userdata){
	GConfClient *gconf_client;
	gconf_client = gconf_client_get_default ();
	preDialog *priv = userdata;

	gboolean criteria = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->criteria_panel_command));
	gconf_client_set_bool (gconf_client,
                               CMDASSIST_GCONF_SEARCH_COMMAND,
				criteria,
				NULL);
	criteria = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->criteria_panel_docTitle));
	gconf_client_set_bool (gconf_client,
                               CMDASSIST_GCONF_SEARCH_TITLE,
				criteria,
				NULL);
	criteria = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(priv->criteria_panel_content));
	gconf_client_set_bool (gconf_client,
                               CMDASSIST_GCONF_SEARCH_CONTENT,
				criteria,
				NULL);

	gdouble result_size = gtk_spin_button_get_value (priv->criteria_panel_entry_size);
	gconf_client_set_float (gconf_client,
                               CMDASSIST_GCONF_RESULT_SIZE,
				result_size,
				NULL);
	

	const gint system_languageID =  gtk_combo_box_get_active(GTK_COMBO_BOX(priv->system_panel_combobox_language));
	gconf_client_set_int (gconf_client,
                               CMDASSIST_GCONF_SYSTEM_LANGUAGEID,
                                system_languageID,
                                NULL);
	const gchar *system_language =  gtk_combo_box_get_active_text(GTK_COMBO_BOX(priv->system_panel_combobox_language));
	gconf_client_set_string(gconf_client,
                               CMDASSIST_GCONF_SYSTEM_LANGUAGE,
                                system_language,
                                NULL);

	GtkTextBuffer *buffer;
	GtkTextIter start, end;
        buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(priv->system_panel_input_url));
	gtk_text_buffer_get_bounds(GTK_TEXT_BUFFER(buffer), &start, &end);
	const gchar *system_url =  gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
	if(strlen(system_url) == 0) {
		gconf_client_set_string(gconf_client,
                               CMDASSIST_GCONF_SYSTEM_WSDL,
                                CMDASSIST_WSDL,
                                NULL);
	} else {
		gconf_client_set_string(gconf_client,
                               CMDASSIST_GCONF_SYSTEM_WSDL,
                                system_url,
                                NULL);
	}

	GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW(priv->doc_panel_tree));
	GtkTreeIter iter;
	GSList *doc_list = NULL;
	gchar *str = NULL;
	gboolean is_checked;
	if(gtk_tree_model_get_iter_first (model, &iter)) {
		gtk_tree_model_get (model, &iter, 1, &str, 0, &is_checked, -1);
		if(is_checked) {
			doc_list = g_list_append(doc_list, str);
		}
	}
	while(gtk_tree_model_iter_next (model, &iter)) {
		gtk_tree_model_get (model, &iter, 1, &str, 0, &is_checked, -1);
		if(is_checked) {
			doc_list = g_list_append(doc_list, str);
		}
	}

	gconf_client_set_list (gconf_client,
                           CMDASSIST_GCONF_DOC_LIST,
			   GCONF_VALUE_STRING,
                           doc_list,
                           NULL);

	g_list_foreach (doc_list, (GFunc)g_free, NULL);
	g_list_free(doc_list);

	//Unref this gobject
	g_object_unref(gconf_client);

	//load the configuration
	load_config(&pre_conf);
}

static void
item_toggled (GtkCellRendererToggle *cell,
	      gchar                 *path_str,
	      gpointer               data)
{
	GtkTreeModel *model = gtk_tree_view_get_model (data);
	GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
	GtkTreeIter iter;
	gboolean toggle_item;

	gint *column;

	column = 0;

	/* get toggled iter */
	gtk_tree_model_get_iter (model, &iter, path);
	gtk_tree_model_get (model, &iter, column, &toggle_item, -1);

	toggle_item ^= 1;

	/* set new value */
	gtk_list_store_set (GTK_LIST_STORE (model), &iter, column,
			toggle_item, -1);

	/* clean up */
	gtk_tree_path_free (path);

}

static void
init_doc_tree(GtkWidget *list)
{

	GtkCellRenderer *renderer;
	GtkTreeViewColumn *column_toggle;
	GtkTreeViewColumn *column_doc;
	GtkTreeViewColumn *column_des;
	GtkListStore *store;

	renderer = gtk_cell_renderer_toggle_new();
	column_toggle = gtk_tree_view_column_new_with_attributes(_("Check"),
		renderer, "active", CHECK_COLUMN, NULL);

	gtk_tree_view_column_set_clickable (GTK_TREE_VIEW_COLUMN (column_toggle), TRUE);
	g_signal_connect (renderer, "toggled", G_CALLBACK (item_toggled), list);
	gtk_tree_view_append_column(GTK_TREE_VIEW(list), column_toggle);

	renderer = gtk_cell_renderer_text_new();
	column_doc = gtk_tree_view_column_new_with_attributes(_("Document"),
		renderer, "text", DOC_COLUMN, NULL);
	gtk_tree_view_append_column(GTK_TREE_VIEW(list), column_doc);

	renderer = gtk_cell_renderer_text_new();
	column_des = gtk_tree_view_column_new_with_attributes(_("Description"),
		renderer, "text", DES_COLUMN, NULL);
	gtk_tree_view_append_column(GTK_TREE_VIEW(list), column_des);

	store = gtk_list_store_new(N_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING);
	gtk_tree_view_set_model(GTK_TREE_VIEW(list), GTK_TREE_MODEL(store));

	g_object_unref(store);
}

static void
response_cb (GtkDialog *dialog,
             gint       response_id,
             gpointer   user_data)
{
	gchar *err = NULL;
	GError *error;

	switch (response_id) {
	case GTK_RESPONSE_HELP:
		error = NULL;
		/* replacing gnome_help_display with gnome_help_display_uri */
		/* gnome_help_display ("CommandAssistant", "command-assistant-preferences", &error); */
		gchar* name = g_strdup_printf ("%s%s/C/CommandAssistant.xml", "ghelp://", CMDASSIST_HELPDIR);
		gnome_help_display_uri(name, &error);
		g_free(name);

		if (error) {
			GtkWidget *dialog;
			dialog = gtk_message_dialog_new (NULL,
                                                0,
                                                GTK_MESSAGE_ERROR,
                                                GTK_BUTTONS_CLOSE,
                                                _("Could not display help for the "
                                                "Command Assistant.\n"
                                                "%s"),
                                                error->message);
			g_signal_connect_swapped (dialog, "response",
                                        G_CALLBACK (gtk_widget_destroy),
                                        dialog);
			gtk_widget_show (dialog);
			g_error_free (error);
		}
	break;
	case GTK_RESPONSE_ACCEPT:
		saveConfValues(NULL, user_data);
	break;
	default:
	gtk_widget_hide (GTK_WIDGET (dialog));
	break;
	}
}


void create_pre_dialog ()
{
	preDialog priv; 

	GtkWidget* dialog;
	GtkWidget* scrolledwindow;
	GtkWidget* tab_panel;

	GdkPixbuf *icon;
	gchar* icon_name;

	GtkWidget* criteria_panel_vbox;
	GtkWidget* criteria_panel_title;
	GtkWidget* criteria_panel_label;
	GtkWidget* criteria_panel_hsep;
	GtkWidget* criteria_panel_label_size;

	GtkWidget* system_panel_vbox;
	GtkWidget* system_panel_title;
	GtkWidget* system_panel_frame;
	GtkWidget* system_panel_hsep;

	GtkWidget* system_panel_label;
	GtkWidget* system_panel_label_language;
	GtkWidget* system_panel_combobox_language;
	GtkWidget* system_panel_hbox_language;
	GtkWidget* system_panel_input_url;
	GtkWidget* system_panel_hbox_url;
	GtkWidget* system_panel_frame_url;

	GtkWidget* doc_panel_title;
	GtkWidget* doc_panel_treeview_label;
	GtkWidget* doc_panel_vbox;
	GtkWidget* doc_panel_hbox;
	GtkWidget* doc_panel_treeview;
	GtkWidget* doc_panel_refresh;
	GtkWidget* sw;

	GtkWidget* criteria_panel_command;
	GtkWidget* criteria_panel_docTitle;
	GtkWidget* criteria_panel_content;
	GtkWidget* criteria_panel_entry_size;

	dialog = gtk_dialog_new();
	gtk_container_set_border_width (GTK_CONTAINER (dialog), 5);
	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 2);
	gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
	gtk_window_set_title (GTK_WINDOW (dialog), _("Preferences"));

        icon_name = g_strdup_printf ("%s/command_assistant_applet.png", CMDASSIST_PIXDIR);
        icon = gdk_pixbuf_new_from_file (icon_name, NULL);
        g_free(icon_name);
	gtk_window_set_icon (GTK_WINDOW (dialog), icon);


	tab_panel = gtk_notebook_new();
	gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(dialog)->vbox), tab_panel);

	gtk_dialog_add_button (GTK_DIALOG (dialog),
		"gtk-help",
		GTK_RESPONSE_HELP);
	gtk_dialog_add_button (GTK_DIALOG (dialog),
		"gtk-close",
		GTK_RESPONSE_ACCEPT);

	//Create Criteria Panel
	criteria_panel_title = gtk_label_new(_("Criteria"));
	criteria_panel_label = gtk_label_new (NULL);
	gtk_label_set_markup(criteria_panel_label, _("Please Select The Criteria:"));
	gtk_misc_set_alignment (criteria_panel_label, 0, 0.5);
	//gtk_misc_set_padding (criteria_panel_label, 0, 10);
	criteria_panel_vbox = gtk_vbox_new (FALSE, 20);
	gtk_container_set_border_width (GTK_CONTAINER (criteria_panel_vbox), 10);
	gtk_box_set_spacing (GTK_BOX (criteria_panel_vbox), 4);
	gtk_notebook_append_page(GTK_NOTEBOOK(tab_panel), criteria_panel_vbox, criteria_panel_title);
	gtk_box_pack_start (GTK_BOX(criteria_panel_vbox), criteria_panel_label, FALSE, FALSE, 5);
	criteria_panel_command = gtk_check_button_new_with_label(_("Only Search for Command"));
	gtk_box_pack_start (GTK_BOX(criteria_panel_vbox), criteria_panel_command, FALSE, FALSE, 5);
	criteria_panel_docTitle = gtk_check_button_new_with_label(_("Only Search for Document Title"));
	gtk_box_pack_start (GTK_BOX(criteria_panel_vbox), criteria_panel_docTitle, FALSE, FALSE, 5);
	criteria_panel_content = gtk_check_button_new_with_label(_("Only Search for Document Content"));
	gtk_box_pack_start (GTK_BOX(criteria_panel_vbox), criteria_panel_content, FALSE, FALSE, 5);

	criteria_panel_hsep = gtk_hseparator_new ();
	gtk_box_pack_start (GTK_BOX(criteria_panel_vbox), criteria_panel_hsep, FALSE, FALSE, 5);
	criteria_panel_label_size = gtk_label_new (NULL);
	gtk_label_set_markup(criteria_panel_label_size, _("Please Select Maximum Result Number: "));
	gtk_box_pack_start (GTK_BOX(criteria_panel_vbox), criteria_panel_label_size, FALSE, FALSE, 5);
	gtk_misc_set_alignment (criteria_panel_label_size, 0, 0.5);
	GtkAdjustment *spinner_adj = (GtkAdjustment *) gtk_adjustment_new (50.0, 10.0, 50.0, 5.0, 5.0, 0.0);
	criteria_panel_entry_size = gtk_spin_button_new (spinner_adj, 1.0, 0);
	gtk_box_pack_start (GTK_BOX(criteria_panel_vbox), criteria_panel_entry_size, FALSE, FALSE, 5);


	//Create System Panel
	system_panel_title = gtk_label_new(_("System"));
	system_panel_vbox = gtk_vbox_new (FALSE, 10);
	gtk_box_set_spacing (GTK_BOX (system_panel_vbox), 4);
	gtk_container_set_border_width (GTK_CONTAINER (system_panel_vbox), 10);
	gtk_notebook_append_page(GTK_NOTEBOOK(tab_panel), system_panel_vbox, system_panel_title);

	system_panel_label_language = gtk_label_new(_("Default language:"));
	system_panel_combobox_language = gtk_combo_box_new_text();
	gtk_combo_box_append_text(system_panel_combobox_language, _("System Default Language"));
	gtk_combo_box_append_text(system_panel_combobox_language, "Japanese");
	system_panel_hbox_language = gtk_hbox_new (FALSE, 10);

	system_panel_input_url = gtk_text_view_new();
	system_panel_frame_url = gtk_frame_new(_("Web Service:"));
	gtk_container_add(GTK_CONTAINER(system_panel_frame_url), system_panel_input_url);

	gtk_widget_set_usize(system_panel_input_url, 20, 65);
	gtk_text_view_set_pixels_above_lines(GTK_TEXT_VIEW(system_panel_input_url), 8);
	gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(system_panel_input_url), GTK_WRAP_CHAR);
	system_panel_hbox_url = gtk_hbox_new(FALSE, 10);

	gtk_box_pack_start (GTK_BOX(system_panel_hbox_language), system_panel_label_language, FALSE, FALSE, 10);
	gtk_box_pack_end (GTK_BOX(system_panel_hbox_language), system_panel_combobox_language, TRUE, TRUE, 10);
	//gtk_box_pack_start (GTK_BOX(system_panel_hbox_url), system_panel_label_url, FALSE, FALSE, 10);
	gtk_box_pack_end (GTK_BOX(system_panel_hbox_url), system_panel_frame_url, TRUE, TRUE, 10);
	gtk_box_pack_start (GTK_BOX(system_panel_vbox), system_panel_hbox_language, FALSE, FALSE, 20);
	system_panel_hsep = gtk_hseparator_new ();
	gtk_box_pack_start (GTK_BOX(system_panel_vbox), system_panel_hsep, FALSE, FALSE, 5);
	gtk_box_pack_start (GTK_BOX(system_panel_vbox), system_panel_hbox_url, FALSE, FALSE, 20);

	//Create Doc Panel
	doc_panel_title = gtk_label_new(_("Documents"));
	doc_panel_vbox = gtk_vbox_new (FALSE, 0);
	gtk_container_set_border_width (GTK_CONTAINER (doc_panel_vbox), 10);
	gtk_box_set_spacing (GTK_BOX (doc_panel_vbox), 4);
	gtk_notebook_append_page(GTK_NOTEBOOK(tab_panel), doc_panel_vbox, doc_panel_title);

	sw = gtk_scrolled_window_new (NULL, NULL);
	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw),
		GTK_SHADOW_ETCHED_IN);
	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
		GTK_POLICY_AUTOMATIC,
		GTK_POLICY_AUTOMATIC);


	doc_panel_treeview_label = gtk_label_new(NULL);
	gtk_label_set_markup(doc_panel_treeview_label, _("Available Documents List"));
	doc_panel_treeview = gtk_tree_view_new();
	gtk_container_add (GTK_CONTAINER (sw), doc_panel_treeview);

	doc_panel_refresh = gtk_button_new_with_label(_("Refresh From Server"));
	gtk_box_pack_start (GTK_BOX(doc_panel_vbox), doc_panel_treeview_label, FALSE, FALSE, 0);
	gtk_box_pack_start (GTK_BOX(doc_panel_vbox), sw, TRUE, TRUE, 0);
	doc_panel_hbox = gtk_hbox_new (FALSE, 0);
	gtk_box_pack_start (GTK_BOX(doc_panel_hbox), doc_panel_refresh, FALSE, FALSE, 0);
	gtk_box_pack_start (GTK_BOX(doc_panel_vbox), doc_panel_hbox, FALSE, FALSE, 0);
	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (doc_panel_treeview), TRUE);

	init_doc_tree(doc_panel_treeview);

	priv.criteria_panel_command = criteria_panel_command;
	priv.criteria_panel_docTitle = criteria_panel_docTitle;
	priv.criteria_panel_content = criteria_panel_content;
	priv.system_panel_combobox_language = system_panel_combobox_language;
	priv.system_panel_input_url = system_panel_input_url;
	priv.doc_panel_tree = doc_panel_treeview;
	priv.criteria_panel_entry_size = criteria_panel_entry_size;
	priv.conf = &pre_conf;

	load_config(&pre_conf);
	setConfValues( &priv);

	gtk_window_set_default_size (GTK_WINDOW (dialog), 400, 300);
	gtk_widget_show_all (dialog);

	g_signal_connect (dialog, "response",
		G_CALLBACK (response_cb),
		&priv);

	gtk_dialog_run (GTK_DIALOG (dialog));
	gtk_widget_destroy (dialog);   
}