aboutsummaryrefslogtreecommitdiffstats
path: root/filter/vfolder-rule.c
diff options
context:
space:
mode:
Diffstat (limited to 'filter/vfolder-rule.c')
-rw-r--r--filter/vfolder-rule.c484
1 files changed, 207 insertions, 277 deletions
diff --git a/filter/vfolder-rule.c b/filter/vfolder-rule.c
index efd58b68a9..a521bbb1c0 100644
--- a/filter/vfolder-rule.c
+++ b/filter/vfolder-rule.c
@@ -1,9 +1,8 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
- * Copyright (C) 2000-2002 Ximian Inc.
+ * Copyright (C) 2000 Ximian Inc.
*
* Author: Not Zed <notzed@lostzed.mmc.com.au>
- * Jeffrey Stedfast <fejj@ximian.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 2 of the GNU General Public
@@ -20,16 +19,18 @@
* Boston, MA 02111-1307, USA.
*/
-
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
-
-#include <string.h>
-#include <gtk/gtk.h>
-#include <glade/glade.h>
+#include <glib.h>
+#include <gtk/gtkbox.h>
+#include <gtk/gtklist.h>
+#include <gtk/gtkoptionmenu.h>
+#include <libgnome/gnome-defs.h>
#include <libgnome/gnome-i18n.h>
+#include <libgnomeui/gnome-dialog.h>
+#include <libgnomeui/gnome-dialog-util.h>
+#include <glade/glade.h>
+#include <gal/widgets/e-unicode.h>
#include "vfolder-context.h"
#include "vfolder-rule.h"
@@ -37,83 +38,85 @@
#define d(x) x
-static int validate(FilterRule *);
+static gint validate(FilterRule *);
static int vfolder_eq(FilterRule *fr, FilterRule *cm);
static xmlNodePtr xml_encode(FilterRule *);
-static int xml_decode(FilterRule *, xmlNodePtr, RuleContext *f);
+static int xml_decode(FilterRule *, xmlNodePtr, struct _RuleContext *f);
static void rule_copy (FilterRule *dest, FilterRule *src);
/*static void build_code(FilterRule *, GString *out);*/
-static GtkWidget *get_widget(FilterRule *fr, RuleContext *f);
+static GtkWidget *get_widget(FilterRule *fr, struct _RuleContext *f);
extern EvolutionShellClient *global_shell_client;
-static void vfolder_rule_class_init (VfolderRuleClass *klass);
-static void vfolder_rule_init (VfolderRule *vr);
-static void vfolder_rule_finalise (GObject *obj);
+static void vfolder_rule_class_init (VfolderRuleClass *class);
+static void vfolder_rule_init (VfolderRule *gspaper);
+static void vfolder_rule_finalise (GtkObject *obj);
+#define _PRIVATE(x) (((VfolderRule *)(x))->priv)
-static FilterRuleClass *parent_class = NULL;
+struct _VfolderRulePrivate {
+};
+static FilterRuleClass *parent_class;
-GType
+guint
vfolder_rule_get_type (void)
{
- static GType type = 0;
+ static guint type = 0;
if (!type) {
- static const GTypeInfo info = {
- sizeof (VfolderRuleClass),
- NULL, /* base_class_init */
- NULL, /* base_class_finalize */
- (GClassInitFunc) vfolder_rule_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (VfolderRule),
- 0, /* n_preallocs */
- (GInstanceInitFunc) vfolder_rule_init,
+ GtkTypeInfo type_info = {
+ "VfolderRule",
+ sizeof(VfolderRule),
+ sizeof(VfolderRuleClass),
+ (GtkClassInitFunc)vfolder_rule_class_init,
+ (GtkObjectInitFunc)vfolder_rule_init,
+ (GtkArgSetFunc)NULL,
+ (GtkArgGetFunc)NULL
};
- type = g_type_register_static (FILTER_TYPE_RULE, "VfolderRule", &info, 0);
+ type = gtk_type_unique(filter_rule_get_type (), &type_info);
}
return type;
}
static void
-vfolder_rule_class_init (VfolderRuleClass *klass)
+vfolder_rule_class_init (VfolderRuleClass *class)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- FilterRuleClass *fr_class = (FilterRuleClass *) klass;
-
- parent_class = g_type_class_ref (FILTER_TYPE_RULE);
+ GtkObjectClass *object_class;
+ FilterRuleClass *filter_rule = (FilterRuleClass *)class;
+ object_class = (GtkObjectClass *)class;
+ parent_class = gtk_type_class(filter_rule_get_type ());
+
object_class->finalize = vfolder_rule_finalise;
-
+
/* override methods */
- fr_class->validate = validate;
- fr_class->eq = vfolder_eq;
- fr_class->xml_encode = xml_encode;
- fr_class->xml_decode = xml_decode;
- fr_class->copy = rule_copy;
- /*fr_class->build_code = build_code;*/
- fr_class->get_widget = get_widget;
+ filter_rule->validate = validate;
+ filter_rule->eq = vfolder_eq;
+ filter_rule->xml_encode = xml_encode;
+ filter_rule->xml_decode = xml_decode;
+ filter_rule->copy = rule_copy;
+ /*filter_rule->build_code = build_code;*/
+ filter_rule->get_widget = get_widget;
}
static void
-vfolder_rule_init (VfolderRule *vr)
+vfolder_rule_init (VfolderRule *o)
{
- ;
+ o->priv = g_malloc0(sizeof(*o->priv));
}
static void
-vfolder_rule_finalise (GObject *obj)
+vfolder_rule_finalise(GtkObject *obj)
{
- VfolderRule *vr = (VfolderRule *) obj;
+ VfolderRule *o = (VfolderRule *)obj;
- g_list_foreach (vr->sources, (GFunc) g_free, NULL);
- g_list_free (vr->sources);
+ g_list_foreach (o->sources, (GFunc) g_free, NULL);
+ g_list_free (o->sources);
- G_OBJECT_CLASS (parent_class)->finalize (obj);
+ ((GtkObjectClass *)(parent_class))->finalize(obj);
}
/**
@@ -126,35 +129,35 @@ vfolder_rule_finalise (GObject *obj)
VfolderRule *
vfolder_rule_new (void)
{
- return (VfolderRule *) g_object_new (VFOLDER_TYPE_RULE, NULL, NULL);
+ VfolderRule *o = (VfolderRule *)gtk_type_new(vfolder_rule_get_type ());
+ return o;
}
void
vfolder_rule_add_source (VfolderRule *vr, const char *uri)
{
- g_assert (IS_VFOLDER_RULE (vr));
-
- vr->sources = g_list_append (vr->sources, g_strdup (uri));
-
- filter_rule_emit_changed ((FilterRule *) vr);
+ g_assert(IS_VFOLDER_RULE(vr));
+
+ vr->sources = g_list_append(vr->sources, g_strdup(uri));
+
+ filter_rule_emit_changed((FilterRule *)vr);
}
const char *
vfolder_rule_find_source (VfolderRule *vr, const char *uri)
{
GList *l;
-
- g_assert (IS_VFOLDER_RULE (vr));
-
+
+ g_assert(IS_VFOLDER_RULE(vr));
+
/* only does a simple string or address comparison, should
probably do a decoded url comparison */
l = vr->sources;
while (l) {
- if (l->data == uri || !strcmp (l->data, uri))
+ if (l->data == uri || !strcmp(l->data, uri))
return l->data;
- l = l->next;
+ l = g_list_next(l);
}
-
return NULL;
}
@@ -162,14 +165,14 @@ void
vfolder_rule_remove_source (VfolderRule *vr, const char *uri)
{
char *found;
-
- g_assert (IS_VFOLDER_RULE (vr));
-
- found = (char *) vfolder_rule_find_source (vr, uri);
+
+ g_assert(IS_VFOLDER_RULE(vr));
+
+ found = (char *)vfolder_rule_find_source(vr, uri);
if (found) {
- vr->sources = g_list_remove (vr->sources, found);
- g_free (found);
- filter_rule_emit_changed ((FilterRule *) vr);
+ vr->sources = g_list_remove(vr->sources, found);
+ g_free(found);
+ filter_rule_emit_changed((FilterRule *)vr);
}
}
@@ -177,24 +180,22 @@ const char *
vfolder_rule_next_source (VfolderRule *vr, const char *last)
{
GList *node;
-
+
if (last == NULL) {
node = vr->sources;
} else {
- node = g_list_find (vr->sources, (char *) last);
+ node = g_list_find(vr->sources, (char *)last);
if (node == NULL)
node = vr->sources;
else
- node = g_list_next (node);
+ node = g_list_next(node);
}
-
if (node)
- return (const char *) node->data;
-
+ return (const char *)node->data;
return NULL;
}
-static int
+static gint
validate (FilterRule *fr)
{
GtkWidget *dialog;
@@ -202,13 +203,8 @@ validate (FilterRule *fr)
g_return_val_if_fail (fr != NULL, FALSE);
if (!fr->name || !*fr->name) {
- /* 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);
+ dialog = gnome_ok_dialog (_("You must name this vfolder."));
+ gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
return 0;
}
@@ -216,62 +212,59 @@ 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) {
- /* 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);
-
+ dialog = gnome_ok_dialog (_("You need to specify at least one folder as a source."));
+ gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
+
return 0;
}
- return FILTER_RULE_CLASS (parent_class)->validate (fr);
+ if (FILTER_RULE_CLASS (parent_class)->validate)
+ return FILTER_RULE_CLASS (parent_class)->validate (fr);
+
+ return 1;
}
static int
-list_eq (GList *al, GList *bl)
+list_eq(GList *al, GList *bl)
{
int truth = TRUE;
-
+
while (truth && al && bl) {
char *a = al->data, *b = bl->data;
-
- truth = strcmp (a, b) == 0;
+
+ truth = strcmp(a, b) == 0;
al = al->next;
bl = bl->next;
}
-
+
return truth && al == NULL && bl == NULL;
}
static int
-vfolder_eq (FilterRule *fr, FilterRule *cm)
+vfolder_eq(FilterRule *fr, FilterRule *cm)
{
- return FILTER_RULE_CLASS (parent_class)->eq (fr, cm)
- && list_eq (((VfolderRule *) fr)->sources, ((VfolderRule *) cm)->sources);
+ return ((FilterRuleClass *)(parent_class))->eq(fr, cm)
+ && list_eq(((VfolderRule *)fr)->sources, ((VfolderRule *)cm)->sources);
}
static xmlNodePtr
xml_encode (FilterRule *fr)
{
- VfolderRule *vr = (VfolderRule *) fr;
xmlNodePtr node, set, work;
GList *l;
-
- node = FILTER_RULE_CLASS (parent_class)->xml_encode (fr);
+ VfolderRule *vr = (VfolderRule *)fr;
+
+ node = ((FilterRuleClass *)(parent_class))->xml_encode(fr);
g_assert(node != NULL);
- set = xmlNewNode (NULL, "sources");
- xmlAddChild (node, set);
+ set = xmlNewNode(NULL, "sources");
+ xmlAddChild(node, set);
l = vr->sources;
while (l) {
- work = xmlNewNode (NULL, "folder");
- xmlSetProp (work, "uri", l->data);
- xmlAddChild (set, work);
- l = l->next;
+ work = xmlNewNode(NULL, "folder");
+ xmlSetProp(work, "uri", l->data);
+ xmlAddChild(set, work);
+ l = g_list_next(l);
}
-
return node;
}
@@ -283,20 +276,20 @@ xml_decode (FilterRule *fr, xmlNodePtr node, struct _RuleContext *f)
VfolderRule *vr = (VfolderRule *)fr;
char *uri;
- result = FILTER_RULE_CLASS (parent_class)->xml_decode (fr, node, f);
+ result = ((FilterRuleClass *)(parent_class))->xml_decode(fr, node, f);
if (result != 0)
return result;
-
- set = node->children;
+
+ set = node->childs;
while (set) {
- if (!strcmp (set->name, "sources")) {
- work = set->children;
+ if (!strcmp(set->name, "sources")) {
+ work = set->childs;
while (work) {
- if (!strcmp (work->name, "folder")) {
- uri = xmlGetProp (work, "uri");
+ if (!strcmp(work->name, "folder")) {
+ uri = xmlGetProp(work, "uri");
if (uri) {
- vr->sources = g_list_append (vr->sources, g_strdup (uri));
- xmlFree (uri);
+ vr->sources = g_list_append(vr->sources, g_strdup(uri));
+ xmlFree(uri);
}
}
work = work->next;
@@ -330,7 +323,7 @@ rule_copy (FilterRule *dest, FilterRule *src)
node = node->next;
}
- FILTER_RULE_CLASS (parent_class)->copy (dest, src);
+ ((FilterRuleClass *)(parent_class))->copy (dest, src);
}
@@ -341,11 +334,10 @@ enum {
};
struct _source_data {
- RuleContext *rc;
+ RuleContext *f;
VfolderRule *vr;
const char *current;
- GtkListStore *model;
- GtkTreeView *list;
+ GtkList *list;
GtkButton *buttons[BUTTON_LAST];
};
@@ -356,164 +348,100 @@ static struct {
char *name;
GtkSignalFunc func;
} edit_buttons[] = {
- { "source_add", G_CALLBACK (source_add) },
- { "source_remove", G_CALLBACK (source_remove) },
+ { "source_add", source_add },
+ { "source_remove", source_remove },
};
static void
-set_sensitive (struct _source_data *data)
+set_sensitive(struct _source_data *data)
{
- gtk_widget_set_sensitive ((GtkWidget *) data->buttons[BUTTON_ADD], TRUE);
- gtk_widget_set_sensitive ((GtkWidget *) data->buttons[BUTTON_REMOVE], data->current != NULL);
+ gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_ADD], TRUE);
+ gtk_widget_set_sensitive((GtkWidget *)data->buttons[BUTTON_REMOVE], data->current != NULL);
}
static void
-select_source (GtkWidget *list, struct _source_data *data)
+select_source(GtkWidget *w, GtkWidget *child, struct _source_data *data)
{
- GtkTreeViewColumn *column;
- GtkTreePath *path;
- GtkTreeIter iter;
-
- gtk_tree_view_get_cursor (data->list, &path, &column);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (data->model), &iter, path);
- gtk_tree_path_free (path);
-
- gtk_tree_model_get (GTK_TREE_MODEL (data->model), &iter, 0, &data->current, -1);
-
- set_sensitive (data);
+ data->current = gtk_object_get_data((GtkObject *)child, "source");
+ set_sensitive(data);
}
static void
-select_source_with (GtkWidget *widget, struct _source_data *data)
+select_source_with(GtkWidget *w, struct _source_data *data)
{
- char *source = g_object_get_data ((GObject *) widget, "source");
-
- filter_rule_set_source ((FilterRule *) data->vr, source);
+ char *source = gtk_object_get_data((GtkObject *)w, "source");
+
+ filter_rule_set_source((FilterRule *)data->vr, source);
}
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;
- GtkTreeSelection *selection;
- GtkWidget *window;
- GtkTreeIter iter;
- char *uri;
-
- window = gtk_widget_get_toplevel (widget);
- gtk_widget_set_sensitive (window, FALSE);
-
- evolution_shell_client_user_select_folder (global_shell_client, GTK_WINDOW (window),
- _("Select Folder"), "", allowed_types, &folder);
-
- gtk_widget_set_sensitive (window, TRUE);
-
+ char *def, *uri;
+ GtkListItem *item;
+ GList *l;
+ gchar *s;
+
+ gtk_widget_set_sensitive(widget, FALSE);
+ def = "";
+ evolution_shell_client_user_select_folder (global_shell_client,
+ GTK_WINDOW (gtk_widget_get_toplevel (widget)),
+ _("Select Folder"),
+ def, allowed_types, &folder);
+
+ if (GTK_OBJECT_DESTROYED(widget)) {
+ if (folder)
+ CORBA_free (folder);
+ return;
+ }
+
+ gtk_widget_set_sensitive(widget, TRUE);
+
if (folder) {
uri = g_strdup (folder->physicalUri);
- data->vr->sources = g_list_append (data->vr->sources, uri);
-
- gtk_list_store_append (data->model, &iter);
- gtk_list_store_set (data->model, &iter, 0, uri, -1);
- selection = gtk_tree_view_get_selection (data->list);
- gtk_tree_selection_select_iter (selection, &iter);
+ data->vr->sources = g_list_append(data->vr->sources, uri);
+
+ l = NULL;
+ s = e_utf8_to_gtk_string ((GtkWidget *) data->list, uri);
+ item = (GtkListItem *)gtk_list_item_new_with_label (s);
+ g_free (s);
+ gtk_object_set_data((GtkObject *)item, "source", uri);
+ gtk_widget_show((GtkWidget *)item);
+ l = g_list_append(NULL, item);
+ gtk_list_append_items(data->list, l);
+ gtk_list_select_child(data->list, (GtkWidget *)item);
data->current = uri;
}
-
CORBA_free (folder);
- set_sensitive (data);
+ set_sensitive(data);
}
static void
-source_remove (GtkWidget *widget, struct _source_data *data)
+source_remove(GtkWidget *widget, struct _source_data *data)
{
- GtkTreeSelection *selection;
const char *source;
- GtkTreePath *path;
- GtkTreeIter iter;
int index = 0;
- int n;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (data->list));
-
+ GList *l;
+ GtkListItem *item;
+
source = NULL;
- while ((source = vfolder_rule_next_source (data->vr, source))) {
- path = gtk_tree_path_new ();
- gtk_tree_path_append_index (path, index);
-
- if (gtk_tree_selection_path_is_selected (selection, path)) {
- gtk_tree_model_get_iter (GTK_TREE_MODEL (data->model), &iter, path);
-
- vfolder_rule_remove_source (data->vr, source);
- gtk_list_store_remove (data->model, &iter);
- gtk_tree_path_free (path);
-
- /* now select the next rule */
- n = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (data->model), NULL);
- index = index >= n ? n - 1 : index;
-
- if (index >= 0) {
- path = gtk_tree_path_new ();
- gtk_tree_path_append_index (path, index);
- gtk_tree_model_get_iter (GTK_TREE_MODEL (data->model), &iter, path);
- gtk_tree_path_free (path);
-
- gtk_tree_selection_select_iter (selection, &iter);
- gtk_tree_model_get (GTK_TREE_MODEL (data->model), &iter, 0, &data->current, -1);
- } else {
- data->current = NULL;
- }
-
+ while ((source = vfolder_rule_next_source(data->vr, source))) {
+ if (data->current == source) {
+ vfolder_rule_remove_source(data->vr, source);
+ item = g_list_nth_data(data->list->children, index);
+ l = g_list_append(NULL, item);
+ gtk_list_remove_items(data->list, l);
+ g_list_free(l);
+ data->current = NULL;
break;
}
-
index++;
- gtk_tree_path_free (path);
}
-
- set_sensitive (data);
+ set_sensitive(data);
}
-
-GtkWidget *vfolder_editor_sourcelist_new (char *widget_name, char *string1, char *string2,
- int int1, int int2);
-
-GtkWidget *
-vfolder_editor_sourcelist_new (char *widget_name, char *string1, char *string2, int int1, int int2)
-{
- GtkWidget *table, *scrolled;
- GtkTreeSelection *selection;
- GtkCellRenderer *renderer;
- GtkListStore *model;
-
- scrolled = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
- GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-
- model = gtk_list_store_new (1, G_TYPE_STRING);
- table = gtk_tree_view_new_with_model ((GtkTreeModel *) model);
- gtk_tree_view_set_headers_visible ((GtkTreeView *) table, FALSE);
-
- renderer = gtk_cell_renderer_text_new ();
- gtk_tree_view_insert_column_with_attributes ((GtkTreeView *) table, -1,
- _("VFolder source"), renderer,
- "text", 0, NULL);
-
- selection = gtk_tree_view_get_selection ((GtkTreeView *) table);
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
-
- gtk_container_add (GTK_CONTAINER (scrolled), table);
-
- g_object_set_data ((GObject *) scrolled, "table", table);
- g_object_set_data ((GObject *) scrolled, "model", model);
-
- gtk_widget_show (scrolled);
- gtk_widget_show (table);
-
- return scrolled;
-}
-
-
/* DO NOT internationalise these strings */
const char *source_names[] = {
"specific",
@@ -523,78 +451,80 @@ const char *source_names[] = {
};
static GtkWidget *
-get_widget (FilterRule *fr, RuleContext *rc)
+get_widget(FilterRule *fr, struct _RuleContext *f)
{
- VfolderRule *vr = (VfolderRule *) fr;
- GtkWidget *widget, *frame, *list;
- struct _source_data *data;
- GtkOptionMenu *omenu;
- const char *source;
- GtkTreeIter iter;
+ GtkWidget *widget, *frame, *w;
GladeXML *gui;
+ const char *source;
+ VfolderRule *vr = (VfolderRule *)fr;
+ struct _source_data *data;
int i, row;
GList *l;
- widget = FILTER_RULE_CLASS (parent_class)->get_widget (fr, rc);
+ widget = ((FilterRuleClass *)(parent_class))->get_widget (fr, f);
data = g_malloc0 (sizeof (*data));
- data->rc = rc;
+ data->f = f;
data->vr = vr;
- gui = glade_xml_new (FILTER_GLADEDIR "/filter.glade", "vfolder_source_frame", NULL);
+ gui = glade_xml_new (FILTER_GLADEDIR "/filter.glade", "vfolder_source_frame");
frame = glade_xml_get_widget (gui, "vfolder_source_frame");
-
- g_object_set_data_full ((GObject *) frame, "data", data, g_free);
+
+ gtk_object_set_data_full (GTK_OBJECT (frame), "data", data, g_free);
for (i = 0; i < BUTTON_LAST; i++) {
- data->buttons[i] = (GtkButton *) glade_xml_get_widget (gui, edit_buttons[i].name);
- g_signal_connect (data->buttons[i], "clicked", edit_buttons[i].func, data);
+ data->buttons[i] = (GtkButton *)w = glade_xml_get_widget (gui, edit_buttons[i].name);
+ gtk_signal_connect (GTK_OBJECT (w), "clicked", edit_buttons[i].func, data);
}
- list = glade_xml_get_widget (gui, "source_list");
- data->list = (GtkTreeView *) g_object_get_data ((GObject *) list, "table");
- data->model = (GtkListStore *) g_object_get_data ((GObject *) list, "model");
-
+ w = glade_xml_get_widget (gui, "source_list");
+ data->list = (GtkList *)w;
+ l = NULL;
source = NULL;
while ((source = vfolder_rule_next_source (vr, source))) {
- gtk_list_store_append (data->model, &iter);
- gtk_list_store_set (data->model, &iter, 0, source, -1);
+ GtkListItem *item;
+
+ gchar *s = e_utf8_to_gtk_string (GTK_WIDGET (data->list), source);
+ item = (GtkListItem *)gtk_list_item_new_with_label (s);
+ g_free (s);
+ gtk_object_set_data (GTK_OBJECT (item), "source", (void *)source);
+ gtk_widget_show (GTK_WIDGET (item));
+ l = g_list_append (l, item);
}
+ gtk_list_append_items (data->list, l);
+ gtk_signal_connect (GTK_OBJECT (w), "select_child", select_source, data);
- g_signal_connect (data->list, "cursor-changed", G_CALLBACK (select_source), data);
-
- omenu = (GtkOptionMenu *) glade_xml_get_widget (gui, "source_option");
- l = GTK_MENU_SHELL (omenu->menu)->children;
+ w = glade_xml_get_widget (gui, "source_option");
+ l = GTK_MENU_SHELL (GTK_OPTION_MENU (w)->menu)->children;
i = 0;
row = 0;
while (l) {
- GtkWidget *item = GTK_WIDGET (l->data);
+ GtkWidget *b = GTK_WIDGET (l->data);
/* make sure that the glade is in sync with the source list! */
if (i < sizeof (source_names) / sizeof (source_names[0])) {
- g_object_set_data ((GObject *) item, "source", (char *) source_names[i]);
+ gtk_object_set_data (GTK_OBJECT (b), "source", (char *)source_names[i]);
if (fr->source && strcmp (source_names[i], fr->source) == 0) {
row = i;
}
} else {
g_warning ("Glade file " FILTER_GLADEDIR "/filter.glade out of sync with editor code");
}
-
- g_signal_connect (item, "activate", G_CALLBACK (select_source_with), data);
+ gtk_signal_connect (GTK_OBJECT (b), "activate", select_source_with, data);
i++;
l = l->next;
}
- gtk_option_menu_set_history (omenu, row);
+ gtk_option_menu_set_history (GTK_OPTION_MENU (w), row);
if (fr->source == NULL)
- filter_rule_set_source (fr, (char *) source_names[row]);
+ filter_rule_set_source (fr, (char *)source_names[row]);
set_sensitive (data);
-
- g_object_unref (gui);
-
+
gtk_box_pack_start (GTK_BOX (widget), frame, TRUE, TRUE, 3);
+ gtk_object_unref (GTK_OBJECT (gui));
+
return widget;
}