Use a GtkDialog instead of a GnomeDialog for reporting errors.

2002-11-07  Jeffrey Stedfast  <fejj@ximian.com>

	* vfolder-rule.c (validate): Use a GtkDialog instead of a
	GnomeDialog for reporting errors.

	* rule-editor.c (rule_add): Use a GtkDialog instead of
	GnomeDialog.
	(rule_edit): Same.
	(add_editor_response): Use a GtkMessageDialog for the error
	reporting instead of a GnomeDialog.
	(edit_editor_response): Same.

	* rule-context.c (rule_context_add_rule_gui): Use a GtkDialog
	instead of a GnomeDialog.

	* filter-rule.c (validate): Use GtkDialog instead of GnomeDialog
	here.

	* filter-input.c (validate): Use GtkDialog instead of GnomeDialog
	here.

	* filter-folder.c (validate): Use GtkDialog instead of GnomeDialog
	here.

	* filter-file.c (validate): Use GtkDialog instead of GnomeDialog
	here.

	* rule-editor.c: Subclass GtkDialog instead of GnomeDialog.

	* filter-datespec.c (validate): Use GtkDialog instead of
	GnomeDialog.
	(button_clicked): Same.

svn path=/trunk/; revision=18651
This commit is contained in:
Jeffrey Stedfast
2002-11-07 23:09:45 +00:00
committed by Jeffrey Stedfast
parent 0783b601b0
commit 59ca4efdbb
12 changed files with 137 additions and 121 deletions

View File

@ -1,5 +1,18 @@
2002-11-07 Jeffrey Stedfast <fejj@ximian.com>
* vfolder-rule.c (validate): Use a GtkDialog instead of a
GnomeDialog for reporting errors.
* rule-editor.c (rule_add): Use a GtkDialog instead of
GnomeDialog.
(rule_edit): Same.
(add_editor_response): Use a GtkMessageDialog for the error
reporting instead of a GnomeDialog.
(edit_editor_response): Same.
* rule-context.c (rule_context_add_rule_gui): Use a GtkDialog
instead of a GnomeDialog.
* filter-rule.c (validate): Use GtkDialog instead of GnomeDialog
here.

View File

@ -176,6 +176,7 @@ validate (FilterElement *fe)
"%s", _("You must choose a date."));
gtk_dialog_run ((GtkDialog *) dialog);
gtk_widget_destroy (dialog);
}
return valid;
@ -391,14 +392,14 @@ set_option_relative (GtkMenu *menu, FilterDatespec *fds)
}
static void
dialog_response (GtkDialog *dialog, int button, FilterDatespec *fds)
dialog_response (GtkWidget *dialog, int button, FilterDatespec *fds)
{
/* FIXME: this may have changed with GtkDialog??? */
if (button != 0)
return;
if (button == GTK_RESPONSE_ACCEPT) {
get_values (fds);
set_button (fds);
}
get_values (fds);
set_button (fds);
gtk_widget_destroy (dialog);
}
static void
@ -414,7 +415,8 @@ button_clicked (GtkButton *button, FilterDatespec *fds)
dialog = (GtkDialog *) gtk_dialog_new ();
gtk_window_set_title ((GtkWindow *) dialog, _("Select a time to compare against"));
gtk_dialog_add_buttons (dialog, GTK_BUTTONS_OK, GTK_BUTTONS_CANCEL, NULL);
gtk_dialog_add_buttons (dialog, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
p->notebook_type = glade_xml_get_widget (gui, "notebook_type");
p->option_type = glade_xml_get_widget (gui, "option_type");

View File

@ -166,6 +166,7 @@ validate (FilterElement *fe)
"%s", _("You must specify a file name."));
gtk_dialog_run ((GtkDialog *) dialog);
gtk_widget_destroy (dialog);
return FALSE;
}
@ -184,6 +185,7 @@ validate (FilterElement *fe)
file->path);
gtk_dialog_run ((GtkDialog *) dialog);
gtk_widget_destroy (dialog);
return FALSE;
}

View File

@ -25,6 +25,7 @@
#include <config.h>
#endif
#include <gtk/gtk.h>
#include <libgnome/gnome-i18n.h>
#include "filter-folder.h"
@ -152,6 +153,7 @@ validate (FilterElement *fe)
"%s", _("You must specify a folder."));
gtk_dialog_run ((GtkDialog *) dialog);
gtk_widget_destroy (dialog);
return FALSE;
}

View File

@ -168,10 +168,11 @@ validate (FilterElement *fe)
if (fi->values && !strcmp (fi->type, "regex")) {
const char *pattern;
regex_t regexpat;
int regerr;
pattern = fi->values->data;
if (regcomp (&regexpat, pattern, REG_EXTENDED | REG_NEWLINE | REG_ICASE)) {
if ((regerr = regcomp (&regexpat, pattern, REG_EXTENDED | REG_NEWLINE | REG_ICASE))) {
size_t reglen;
char *regmsg;
@ -191,6 +192,7 @@ validate (FilterElement *fe)
pattern, regmsg);
gtk_dialog_run ((GtkDialog *) dialog);
gtk_widget_destroy (dialog);
g_free (regmsg);
valid = FALSE;

View File

@ -117,12 +117,8 @@ static void
xml_create (FilterElement *fe, xmlNodePtr node)
{
FilterOption *fo = (FilterOption *) fe;
GConfClient *gconf;
GSList *labels, *l;
FILTER_ELEMENT_CLASS (parent_class)->xml_create (fe, node);
gconf = gconf_client_get_default ();
/* FIXME: probably use gconf_client_get_list() here? */
}

View File

@ -533,6 +533,7 @@ int main(int argc, char **argv)
gtk_box_pack_start ((GtkBox *) dialog->vbox, w, TRUE, TRUE, 0);
gtk_dialog_run ((GtkDialog *) dialog);
gtk_widget_destroy (dialog);
code = g_string_new ("");
filter_part_build_code (ff, code);

View File

@ -218,6 +218,7 @@ validate (FilterRule *fr)
"%s", _("You must name this filter."));
gtk_dialog_run ((GtkDialog *) dialog);
gtk_widget_destroy (dialog);
return FALSE;
}

View File

@ -29,15 +29,8 @@
#include "filter-source.h"
#include <gtk/gtk.h>
#include <gnome.h>
#include <e-util/e-url.h>
#include <e-util/e-sexp.h>
#include <bonobo/bonobo-object.h>
#include <bonobo/bonobo-generic-factory.h>
#include <bonobo/bonobo-context.h>
#include <bonobo/bonobo-moniker-util.h>
#include <bonobo/bonobo-exception.h>
#include <bonobo-conf/bonobo-config-database.h>
#include <camel/camel-url.h>
@ -232,9 +225,9 @@ clone (FilterElement *fe)
}
static void
source_changed (GtkWidget *w, FilterSource *fs)
source_changed (GtkWidget *item, FilterSource *fs)
{
SourceInfo *info = (SourceInfo *) g_object_get_data (w, "source");
SourceInfo *info = (SourceInfo *) g_object_get_data ((GObject *) item, "source");
g_free (fs->priv->current_url);
fs->priv->current_url = g_strdup (info->url);
@ -276,8 +269,8 @@ get_widget (FilterElement *fe)
item = gtk_menu_item_new_with_label (label);
g_free (label);
g_object_set_data (item, "source", info);
g_signal_connect (item, "activate", source_changed, fs);
g_object_set_data ((GObject *) item, "source", info);
g_signal_connect (item, "activate", GTK_SIGNAL_FUNC (source_changed), fs);
gtk_menu_append (GTK_MENU (menu), item);
gtk_widget_show (item);
@ -344,6 +337,7 @@ filter_source_add_source (FilterSource *fs, const char *account_name, const char
static void
filter_source_get_sources (FilterSource *fs)
{
#if 0
Bonobo_ConfigDatabase db;
CORBA_Environment ev;
int i, len;
@ -398,4 +392,5 @@ filter_source_get_sources (FilterSource *fs)
g_free (addr);
g_free (uri);
}
#endif
}

View File

@ -32,7 +32,7 @@
#include <fcntl.h>
#include <errno.h>
#include <libgnomeui/gnome-dialog.h>
#include <gtk/gtk.h>
#include <gal/util/e-xml-utils.h>
@ -125,6 +125,8 @@ rule_context_class_init (RuleContextClass *klass)
RULE_TYPE_CONTEXT,
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (RuleContextClass, rule_removed),
NULL,
NULL,
gtk_marshal_NONE__POINTER,
G_TYPE_NONE, 1, G_TYPE_POINTER);
@ -133,6 +135,8 @@ rule_context_class_init (RuleContextClass *klass)
RULE_TYPE_CONTEXT,
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (RuleContextClass, changed),
NULL,
NULL,
gtk_marshal_NONE__NONE,
G_TYPE_NONE, 0);
}
@ -636,9 +640,9 @@ rule_context_add_rule (RuleContext *rc, FilterRule *new)
}
static void
new_rule_clicked (GtkWidget *dialog, int button, RuleContext *context)
new_rule_response (GtkWidget *dialog, int button, RuleContext *context)
{
if (button == 0) {
if (button == GTK_RESPONSE_ACCEPT) {
FilterRule *rule = g_object_get_data ((GObject *) dialog, "rule");
char *user = g_object_get_data ((GObject *) dialog, "path");
@ -653,39 +657,45 @@ new_rule_clicked (GtkWidget *dialog, int button, RuleContext *context)
rule_context_save (context, user);
}
if (button != -1)
gnome_dialog_close (GNOME_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
/* add a rule, with a gui, asking for confirmation first ... optionally save to path */
void
rule_context_add_rule_gui (RuleContext *rc, FilterRule *rule, const char *title, const char *path)
{
GtkWidget *dialog, *w;
GtkDialog *dialog;
GtkWidget *widget;
d(printf("add rule gui '%s'\n", rule->name));
g_assert (rc);
g_assert (rule);
w = filter_rule_get_widget (rule, rc);
dialog = gnome_dialog_new (title, GNOME_STOCK_BUTTON_OK, GNOME_STOCK_BUTTON_CANCEL, NULL);
gtk_window_set_policy (GTK_WINDOW (dialog), FALSE, TRUE, FALSE);
gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog)->vbox), w, TRUE, TRUE, 0);
gtk_window_set_default_size (GTK_WINDOW (dialog), 600, 400);
gtk_widget_show (w);
widget = filter_rule_get_widget (rule, rc);
gtk_widget_show (widget);
dialog = (GtkDialog *) gtk_dialog_new ();
gtk_dialog_add_buttons (dialog, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
gtk_window_set_title ((GtkWindow *) dialog, title);
gtk_window_set_default_size ((GtkWindow *) dialog, 600, 400);
gtk_window_set_policy ((GtkWindow *) dialog, FALSE, TRUE, FALSE);
gtk_box_pack_start ((GtkBox *) dialog->vbox, widget, TRUE, TRUE, 0);
g_object_set_data_full ((GObject *) dialog, "rule", rule, g_object_unref);
if (path)
g_object_set_data_full ((GObject *) dialog, "path", g_strdup (path), g_free);
g_signal_connect (dialog, "clicked", GTK_SIGNAL_FUNC (new_rule_clicked), rc);
g_signal_connect (dialog, "response", GTK_SIGNAL_FUNC (new_rule_response), rc);
g_object_ref (rc);
g_object_set_data_full ((GObject *) dialog, "context", rc, g_object_unref);
gtk_widget_show (dialog);
gtk_widget_show ((GtkWidget *) dialog);
}
void

View File

@ -208,26 +208,39 @@ create_rule (RuleEditor *re)
}
static void
add_editor_clicked (GtkWidget *dialog, int button, RuleEditor *re)
editor_destroy (GtkWidget *dialog, RuleEditor *re)
{
if (re->edit) {
g_object_unref (re->edit);
re->edit = NULL;
}
re->dialog = NULL;
gtk_widget_set_sensitive (GTK_WIDGET (re), TRUE);
rule_editor_set_sensitive (re);
}
static void
add_editor_response (GtkWidget *dialog, int button, RuleEditor *re)
{
GtkWidget *item;
GList *l = NULL;
switch (button) {
case 0:
if (button == GTK_RESPONSE_ACCEPT) {
if (!filter_rule_validate (re->edit)) {
/* no need to popup a dialog because the validate code does that. */
return;
}
if (rule_context_find_rule (re->context, re->edit->name, re->edit->source)) {
GtkWidget *dialog;
char *what;
dialog = gtk_message_dialog_new ((GtkWindow *) dialog, GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
_("Rule name '%s' is not unique, choose another."),
re->edit->name);
what = g_strdup_printf(_("Rule name '%s' is not unique, choose another"), re->edit->name);
dialog = gnome_ok_dialog (what);
g_free (what);
gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
gtk_dialog_run ((GtkDialog *) dialog);
gtk_widget_destroy (dialog);
return;
}
@ -249,26 +262,9 @@ add_editor_clicked (GtkWidget *dialog, int button, RuleEditor *re)
g_object_ref (re->current);
rule_editor_add_undo (re, RULE_EDITOR_LOG_ADD, re->current,
rule_context_get_rank_rule (re->context, re->current, re->current->source), 0);
case 1:
default:
gnome_dialog_close (GNOME_DIALOG (dialog));
case -1:
if (re->edit) {
g_object_unref (re->edit);
re->edit = NULL;
}
re->dialog = NULL;
gtk_widget_set_sensitive (GTK_WIDGET (re), TRUE);
rule_editor_set_sensitive (re);
}
}
static void
add_editor_destroyed (GtkWidget *w, RuleEditor *re)
{
add_editor_clicked (w, -1, re);
gtk_widget_destroy (dialog);
}
static void
@ -283,31 +279,33 @@ rule_add (GtkWidget *widget, RuleEditor *re)
filter_rule_set_source (re->edit, re->source);
rules = filter_rule_get_widget (re->edit, re->context);
re->dialog = gnome_dialog_new (_("Add Rule"),
GNOME_STOCK_BUTTON_OK,
GNOME_STOCK_BUTTON_CANCEL,
NULL);
re->dialog = gtk_dialog_new ();
gtk_dialog_add_buttons ((GtkDialog *) re->dialog, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
gtk_window_set_title ((GtkWindow *) re->dialog, _("Add Rule"));
gtk_window_set_default_size (GTK_WINDOW (re->dialog), 650, 400);
gtk_window_set_policy (GTK_WINDOW (re->dialog), FALSE, TRUE, FALSE);
gtk_widget_set_parent_window (GTK_WIDGET (re->dialog), GTK_WIDGET (re)->window);
gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (re->dialog)->vbox), rules, TRUE, TRUE, 0);
g_signal_connect (re->dialog, "clicked", GTK_SIGNAL_FUNC (add_editor_clicked), re);
g_signal_connect (re->dialog, "destroy", GTK_SIGNAL_FUNC (add_editor_destroyed), re);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (re->dialog)->vbox), rules, TRUE, TRUE, 0);
g_signal_connect (re->dialog, "response", GTK_SIGNAL_FUNC (add_editor_response), re);
g_signal_connect (re->dialog, "destroy", GTK_SIGNAL_FUNC (editor_destroy), re);
gtk_widget_set_sensitive (GTK_WIDGET (re), FALSE);
gtk_widget_show (re->dialog);
}
static void
edit_editor_clicked (GtkWidget *dialog, int button, RuleEditor *re)
edit_editor_response (GtkWidget *dialog, int button, RuleEditor *re)
{
FilterRule *rule;
GtkWidget *item;
int pos;
switch (button) {
case 0:
if (button == GTK_RESPONSE_ACCEPT) {
if (!filter_rule_validate (re->edit)) {
/* no need to popup a dialog because the validate code does that. */
return;
@ -315,13 +313,13 @@ edit_editor_clicked (GtkWidget *dialog, int button, RuleEditor *re)
rule = rule_context_find_rule (re->context, re->edit->name, re->edit->source);
if (rule != NULL && rule != re->current) {
GtkWidget *dialog;
char *what;
dialog = gtk_message_dialog_new ((GtkWindow *) dialog, GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
_("Rule name '%s' is not unique, choose another."),
re->edit->name);
what = g_strdup_printf (_("Rule name '%s' is not unique, choose another"), re->edit->name);
dialog = gnome_ok_dialog (what);
g_free (what);
gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
gtk_dialog_run ((GtkDialog *) dialog);
gtk_widget_destroy (dialog);
return;
}
@ -336,26 +334,9 @@ edit_editor_clicked (GtkWidget *dialog, int button, RuleEditor *re)
/* replace the old rule with the new rule */
filter_rule_copy (re->current, re->edit);
}
case 1:
default:
gnome_dialog_close (GNOME_DIALOG (dialog));
case -1:
if (re->edit) {
g_object_unref (re->edit);
re->edit = NULL;
}
re->dialog = NULL;
gtk_widget_set_sensitive (GTK_WIDGET (re), TRUE);
rule_editor_set_sensitive (re);
}
}
static void
edit_editor_destroyed (GtkWidget *w, RuleEditor *re)
{
edit_editor_clicked (w, -1, re);
gtk_widget_destroy (dialog);
}
static void
@ -369,17 +350,20 @@ rule_edit (GtkWidget *widget, RuleEditor *re)
re->edit = filter_rule_clone (re->current);
rules = filter_rule_get_widget (re->edit, re->context);
re->dialog = gnome_dialog_new (_("Edit Rule"),
GNOME_STOCK_BUTTON_OK,
GNOME_STOCK_BUTTON_CANCEL,
NULL);
gnome_dialog_set_parent (GNOME_DIALOG (re->dialog), GTK_WINDOW (re));
gtk_window_set_default_size (GTK_WINDOW (re->dialog), 600, 400);
re->dialog = gtk_dialog_new ();
gtk_dialog_add_buttons ((GtkDialog *) re->dialog, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
gtk_window_set_title ((GtkWindow *) re->dialog, _("Edit Rule"));
gtk_window_set_default_size (GTK_WINDOW (re->dialog), 650, 400);
gtk_window_set_policy (GTK_WINDOW (re->dialog), FALSE, TRUE, FALSE);
gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (re->dialog)->vbox), rules, TRUE, TRUE, 0);
g_signal_connect (re->dialog, "clicked", GTK_SIGNAL_FUNC (edit_editor_clicked), re);
g_signal_connect (re->dialog, "destroy", GTK_SIGNAL_FUNC (edit_editor_destroyed), re);
gtk_widget_set_parent_window (GTK_WIDGET (re->dialog), GTK_WIDGET (re)->window);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (re->dialog)->vbox), rules, TRUE, TRUE, 0);
g_signal_connect (re->dialog, "clicked", GTK_SIGNAL_FUNC (edit_editor_response), re);
g_signal_connect (re->dialog, "destroy", GTK_SIGNAL_FUNC (editor_destroy), re);
gtk_widget_set_sensitive (GTK_WIDGET (re), FALSE);
@ -644,14 +628,14 @@ rule_editor_construct (RuleEditor *re, RuleContext *context, GladeXML *gui, cons
gtk_window_set_policy (GTK_WINDOW (re), FALSE, TRUE, FALSE);
w = glade_xml_get_widget (gui, "rule_editor");
gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (re)->vbox), w, TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (re)->vbox), w, TRUE, TRUE, 0);
for (i = 0; i < BUTTON_LAST; i++) {
re->priv->buttons[i] = (GtkButton *) w = glade_xml_get_widget (gui, edit_buttons[i].name);
g_signal_connect (w, "clicked", edit_buttons[i].func, re);
}
re->list = (GtkList *) w = glade_xml_get_widget(gui, "rule_list");
re->list = (GtkList *) w = glade_xml_get_widget (gui, "rule_list");
g_signal_connect (w, "select_child", GTK_SIGNAL_FUNC (select_rule), re);
g_signal_connect (w, "button_press_event", GTK_SIGNAL_FUNC (double_click), re);
@ -659,8 +643,8 @@ rule_editor_construct (RuleEditor *re, RuleContext *context, GladeXML *gui, cons
rule_editor_set_source (re, source);
if (enable_undo) {
gtk_dialog_add_buttons ((GtkDialog *) re, GTK_BUTTONS_OK,
GTK_BUTTONS_CANCEL, NULL);
gtk_dialog_add_buttons ((GtkDialog *) re, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);
} else
gtk_dialog_add_buttons ((GtkDialog *) re, GTK_BUTTONS_OK, NULL);
gtk_dialog_add_buttons ((GtkDialog *) re, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
}

View File

@ -28,8 +28,6 @@
#include <gtk/gtk.h>
#include <glade/glade.h>
#include <libgnome/gnome-i18n.h>
#include <libgnomeui/gnome-dialog.h>
#include <libgnomeui/gnome-dialog-util.h>
#include "vfolder-context.h"
#include "vfolder-rule.h"
@ -202,8 +200,13 @@ validate (FilterRule *fr)
g_return_val_if_fail (fr != NULL, FALSE);
if (!fr->name || !*fr->name) {
dialog = gnome_ok_dialog (_("You must name this vfolder."));
gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
/* FIXME: set a aprent window? */
dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
"%s", _("You must name this vfolder."));
gtk_dialog_run ((GtkDialog *) dialog);
gtk_widget_destroy (dialog);
return 0;
}
@ -211,8 +214,13 @@ validate (FilterRule *fr)
/* We have to have at least one source set in the "specific" case.
Do not translate this string! */
if (fr->source && !strcmp (fr->source, "specific") && VFOLDER_RULE (fr)->sources == NULL) {
dialog = gnome_ok_dialog (_("You need to to specify at least one folder as a source."));
gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
/* FIXME: set a parent window? */
dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
"%s", _("You need to to specify at least one folder as a source."));
gtk_dialog_run ((GtkDialog *) dialog);
gtk_widget_destroy (dialog);
return 0;
}
@ -372,7 +380,7 @@ select_source_with (GtkWidget *widget, struct _source_data *data)
}
static void
source_add(GtkWidget *widget, struct _source_data *data)
source_add (GtkWidget *widget, struct _source_data *data)
{
static const char *allowed_types[] = { "mail/*", NULL };
GNOME_Evolution_Folder *folder;