Commit 53659b16 authored by Iain Holmes's avatar Iain Holmes

Fix crashes, remove gnome.h includes, add a timer check for the RDF summary,...

Fix crashes, remove gnome.h includes, add a timer check for the RDF summary, add a new method to the HTMLView so it can handle funny URIs.

svn path=/trunk/; revision=8224
parent 59cb3688
2001-02-14 Iain Holmes <iain@ximian.com>
* evolution-services/executive-summary-html-view.c
(executive_summary_html_view_destroy): Don't unref the event source.
(impl_GNOME_Evolution_Summary_HTMLView_handleURI): Emit the signal.
(corba_class_init): Hook up the handleURI method.
(executive_summary_html_view_class_init): Create the signal.
* idl/HTMLView.idl: Add the handleURI method.
2001-02-13 Iain Holmes <iain@ximian.com>
* test-service/rdf-summary.c (property_control): Add an update now button.
2001-02-12 Iain Holmes <iain@ximian.com>
* test-service/rdf-summary.c (property_control): Add a "Update" spinner.
(property_action): Only download a new RDF if the URL changed. Use a cached
version otherwise.
2001-02-08 Iain Holmes <iain@ximian.com>
* component/e-summary-url.c (e_summary_url_click): Close and remove the
window on an idle, so that the whole desktop isn't locked by a
GNOME-VFS bug.
2001-02-13 Kjartan Maraas <kmaraas@gnome.org>
* Makefile.am: xml-i18n-tools setup for .oaf.in files.
......
......@@ -26,8 +26,8 @@
#include <config.h>
#endif
#include <bonobo.h>
#include <gnome.h>
#include <bonobo/bonobo-object.h>
#include <bonobo/bonobo-generic-factory.h>
#include "Evolution.h"
#include "evolution-storage.h"
......@@ -106,7 +106,7 @@ component_destroy_cb (GtkObject *object,
}
static void
factory_destroy (BonoboEmbeddable *embeddable,
factory_destroy (BonoboObject *component,
gpointer dummy)
{
running_objects--;
......
......@@ -26,8 +26,13 @@
#include <config.h>
#endif
#include <gnome.h>
#include <bonobo.h>
#include <libgnomeui/gnome-propertybox.h>
#include <libgnomeui/gnome-file-entry.h>
#include <libgnome/gnome-i18n.h>
#include <bonobo/bonobo-selector.h>
#include <stdlib.h> /* For atoi */
#include <liboaf/liboaf.h>
#include <glade/glade.h>
......
......@@ -26,7 +26,6 @@
#include <config.h>
#endif
#include <gnome.h>
#include <bonobo/bonobo-main.h>
#include <bonobo/bonobo-object.h>
#include <bonobo/bonobo-generic-factory.h>
......
......@@ -25,7 +25,9 @@
#include <config.h>
#endif
#include <gnome.h>
#include <stdio.h>
#include <libgnome/gnome-defs.h>
#include <libgnome/gnome-config.h>
#include "e-summary-prefs.h"
#include "e-summary.h"
......
......@@ -25,8 +25,16 @@
#include <config.h>
#endif
#include <gnome.h>
#include <bonobo.h>
#include <bonobo/bonobo-property-control.h>
#include <bonobo/bonobo-event-source.h>
#include <bonobo/bonobo-widget.h>
#include <libgnome/gnome-i18n.h>
#include <libgnome/gnome-url.h>
#include <libgnome/gnome-exec.h>
#include <libgnomeui/gnome-propertybox.h>
#include <stdlib.h>
#include <gtkhtml/gtkhtml.h>
#include <gtkhtml/gtkhtml-stream.h>
......@@ -430,6 +438,23 @@ dialog_destroyed (GtkObject *object,
g_free (dialog);
}
struct _idle_data {
ESummary *esummary;
ESummaryWindow *window;
};
static gboolean
idle_remove_window (gpointer data)
{
struct _idle_data *id = data;
e_summary_remove_window (id->esummary, id->window);
e_summary_queue_rebuild (id->esummary);
g_free (id);
return FALSE;
}
void
e_summary_url_click (GtkWidget *widget,
const char *url,
......@@ -439,6 +464,7 @@ e_summary_url_click (GtkWidget *widget,
char *parsed;
int address;
ESummaryWindow *window;
struct _idle_data *id;
Bonobo_Control control;
Bonobo_Listener corba_listener;
GtkWidget *prefsbox, *control_widget;
......@@ -473,8 +499,15 @@ e_summary_url_click (GtkWidget *widget,
if (window->iid == NULL)
break;
e_summary_remove_window (esummary, window);
e_summary_queue_rebuild (esummary);
id = g_new (struct _idle_data, 1);
id->window = window;
id->esummary = esummary;
/* Close the window on an idle to work around a bug in
gnome-vfs which locks the e_summary_remove_window function
and as gtkhtml has a pointer grab on, this locks the whole
display. GAH! */
g_idle_add (idle_remove_window, id);
break;
case PROTOCOL_CONFIGURE:
......@@ -565,8 +598,15 @@ e_summary_url_click (GtkWidget *widget,
e_summary_queue_rebuild (esummary);
break;
case PROTOCOL_NONE:
case PROTOCOL_OTHER:
/* Pass it to the parent component */
CORBA_exception_init (&ev);
GNOME_Evolution_Summary_HTMLView_handleURI (window->html,
url, &ev);
CORBA_exception_free (&ev);
break;
case PROTOCOL_NONE:
case PROTOCOL_HTTP:
case PROTOCOL_FILE:
default:
......
......@@ -23,13 +23,15 @@
#include <e-summary-util.h>
#include <gnome.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <glib.h>
#include <libgnome/gnome-defs.h>
#include <libgnome/gnome-util.h>
/**
* e_pixmap_file:
* @filename: Filename of pixmap.
......
......@@ -25,8 +25,11 @@
#include <config.h>
#endif
#include <gnome.h>
#include <bonobo.h>
#include <bonobo/bonobo-object.h>
#include <bonobo/bonobo-event-source.h>
#include <bonobo/bonobo-listener.h>
#include <bonobo/bonobo-property-bag.h>
#include <bonobo/bonobo-property-control.h>
#include <gtkhtml/gtkhtml.h>
#include <gtkhtml/gtkhtml-embedded.h>
......@@ -479,7 +482,7 @@ e_summary_rebuild_page (ESummary *esummary)
gtk_layout_freeze (GTK_LAYOUT (priv->html));
e_summary_start_load (esummary);
if (priv->header == NULL) {
if (priv->header == NULL || *priv->header == '\0') {
load_default_header (esummary);
} else {
gtk_html_write (GTK_HTML (priv->html), priv->stream,
......@@ -504,7 +507,6 @@ e_summary_rebuild_page (ESummary *esummary)
for (i = 0; i < numrows; i++) {
GList *window = windows;
g_print ("i: %d/%d\n", i, numrows);
/* Do the same row twice:
Once for the title, once for the contents */
for (j = 0; j < 2; j++) {
......@@ -516,7 +518,6 @@ e_summary_rebuild_page (ESummary *esummary)
limit = MIN (columns, (numwindows - (i * columns)));
for (k = 0; k < limit; k++) {
g_print ("%d of %d\n", k, limit);
if (window == NULL)
break;
......@@ -553,7 +554,7 @@ e_summary_rebuild_page (ESummary *esummary)
}
gtk_html_write (GTK_HTML (priv->html), priv->stream, "</tr></table>", 13);
if (priv->footer == NULL) {
if (priv->footer == NULL || *priv->footer == '\0') {
load_default_footer (esummary);
} else {
gtk_html_write (GTK_HTML (priv->html), priv->stream,
......@@ -658,7 +659,12 @@ e_summary_add_service (ESummary *esummary,
return NULL;
}
window->event_source = Bonobo_Unknown_queryInterface(window->component,
unknown = Bonobo_Unknown_queryInterface (component,
"IDL:Bonobo/PropertyBag:1.0",
&ev);
window->propertybag = (Bonobo_PropertyBag) unknown;
window->event_source = Bonobo_Unknown_queryInterface(window->propertybag,
"IDL:Bonobo/EventSource:1.0", &ev);
if (window->event_source == CORBA_OBJECT_NIL) {
g_warning ("There is no Bonobo::EventSource interface");
......@@ -674,11 +680,6 @@ e_summary_add_service (ESummary *esummary,
listener = bonobo_object_corba_objref (BONOBO_OBJECT (window->listener));
window->listener_id = Bonobo_EventSource_addListener (window->event_source, listener, &ev);
unknown = Bonobo_Unknown_queryInterface (component,
"IDL:Bonobo/PropertyBag:1.0",
&ev);
window->propertybag = (Bonobo_PropertyBag) unknown;
unknown = Bonobo_Unknown_queryInterface (component,
"IDL:Bonobo/PersistStream:1.0",
&ev);
......@@ -693,8 +694,10 @@ e_summary_add_service (ESummary *esummary,
window->title = bonobo_property_bag_client_get_value_string (window->propertybag,
"window_title",
NULL);
g_print ("title: %s\n", window->title);
window->icon = bonobo_property_bag_client_get_value_string (window->propertybag,
"window_icon", NULL);
g_print ("icon: %s\n", window->icon);
CORBA_exception_free (&ev);
priv->window_list = g_list_append (priv->window_list, window);
......@@ -748,7 +751,7 @@ e_summary_window_free (ESummaryWindow *window)
if (ev._major != CORBA_NO_EXCEPTION) {
g_warning ("CORBA ERROR: %s", CORBA_exception_id (&ev));
}
bonobo_object_release_unref (window->event_source, &ev);
bonobo_object_release_unref (window->event_source, &ev);
}
bonobo_object_release_unref (window->propertybag, &ev);
......@@ -756,10 +759,9 @@ e_summary_window_free (ESummaryWindow *window)
bonobo_object_release_unref (window->propertycontrol, &ev);
bonobo_object_unref (BONOBO_OBJECT (window->listener));
bonobo_object_release_unref (window->html, &ev);
bonobo_object_release_unref (window->component, &ev);
CORBA_exception_free (&ev);
g_free (window);
}
......@@ -1211,7 +1213,6 @@ e_summary_save_state (ESummary *esummary,
fullpath = g_strdup_printf("%s/Executive-Summary", path);
g_print ("fullpath: %s\n", fullpath);
/* FIXME: Use RC's rmdir function */
e_summary_rm_dir (fullpath);
storage = bonobo_storage_open (STORAGE_TYPE, fullpath,
......
......@@ -26,7 +26,7 @@
#include <gtk/gtkvbox.h>
#include <bonobo.h>
#include <bonobo/bonobo-object.h>
#include <bonobo/bonobo-listener.h>
#include <bonobo/bonobo-event-source.h>
#include <Evolution.h>
......
......@@ -21,11 +21,13 @@
* Author: Iain Holmes <iain@helixcode.com>
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <gnome.h>
#include <bonobo/bonobo-main.h>
#include <bonobo/bonobo-object-directory.h>
#include <liboaf/liboaf.h>
#include <glade/glade.h>
......@@ -35,7 +37,6 @@
#include "gal/widgets/e-gui-utils.h"
#include "gal/widgets/e-cursors.h"
#include "gal/widgets/e-unicode.h"
#include <libgnomevfs/gnome-vfs.h>
#include "component-factory.h"
......@@ -45,7 +46,7 @@ main (int argc,
char **argv)
{
CORBA_ORB orb;
bindtextdomain (PACKAGE, EVOLUTION_LOCALEDIR);
textdomain (PACKAGE);
......
......@@ -51,7 +51,7 @@ GtkType executive_summary_component_factory_client_get_type (void);
void executive_summary_component_factory_client_construct (ExecutiveSummaryComponentFactoryClient *client,
CORBA_Object corba_object);
ExecutiveSummaryComponentFactoryClient *executive_summary_component_factory_client_new (const char *id);
GNOME_Evolution_Summary_Component executive_summary_component_factory_client_create_view (ExecutiveSummaryComponentFactoryClient *client);
CORBA_Object executive_summary_component_factory_client_create_view (ExecutiveSummaryComponentFactoryClient *client);
#endif
......@@ -42,6 +42,13 @@ static void executive_summary_html_view_class_init (ExecutiveSummaryHtmlViewClas
static BonoboObjectClass *parent_class;
enum {
HANDLE_URI,
LAST_SIGNAL
};
static guint signals[LAST_SIGNAL] = { 0 };
struct _ExecutiveSummaryHtmlViewPrivate {
BonoboEventSource *event_source;
......@@ -88,6 +95,18 @@ impl_GNOME_Evolution_Summary_HTMLView_getHtml (PortableServer_Servant servant,
return CORBA_string_dup (priv->html? priv->html: "");
}
static void
impl_GNOME_Evolution_Summary_HTMLView_handleURI (PortableServer_Servant servant,
CORBA_char *uri,
CORBA_Environment *ev)
{
BonoboObject *bonobo_object;
bonobo_object = bonobo_object_from_servant (servant);
gtk_signal_emit (GTK_OBJECT (bonobo_object), signals[HANDLE_URI], uri);
}
/* GtkObject methods */
static void
executive_summary_html_view_destroy (GtkObject *object)
......@@ -95,13 +114,13 @@ executive_summary_html_view_destroy (GtkObject *object)
ExecutiveSummaryHtmlView *view;
ExecutiveSummaryHtmlViewPrivate *priv;
g_print ("BANG!");
view = EXECUTIVE_SUMMARY_HTML_VIEW (object);
priv = view->private;
if (priv == NULL)
return;
bonobo_object_unref (BONOBO_OBJECT (priv->event_source));
g_free (priv->html);
g_free (priv);
......@@ -124,6 +143,7 @@ corba_class_init (void)
epv = g_new0 (POA_GNOME_Evolution_Summary_HTMLView__epv, 1);
epv->getHtml = impl_GNOME_Evolution_Summary_HTMLView_getHtml;
epv->handleURI = impl_GNOME_Evolution_Summary_HTMLView_handleURI;
vepv = &HTMLView_vepv;
vepv->_base_epv = base_epv;
......@@ -139,6 +159,15 @@ executive_summary_html_view_class_init (ExecutiveSummaryHtmlViewClass *klass)
object_class = GTK_OBJECT_CLASS (klass);
object_class->destroy = executive_summary_html_view_destroy;
signals[HANDLE_URI] = gtk_signal_new ("handle_uri", GTK_RUN_FIRST,
object_class->type,
GTK_SIGNAL_OFFSET (ExecutiveSummaryHtmlViewClass, handle_uri),
gtk_marshal_NONE__POINTER,
GTK_TYPE_NONE, 1,
GTK_TYPE_POINTER);
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
parent_class = gtk_type_class (PARENT_TYPE);
corba_class_init ();
......
......@@ -47,6 +47,9 @@ struct _ExecutiveSummaryHtmlView {
struct _ExecutiveSummaryHtmlViewClass {
BonoboObjectClass parent_class;
void (* handle_uri) (ExecutiveSummaryHtmlView *view,
char *uri);
};
GtkType executive_summary_html_view_get_type (void);
......
......@@ -16,6 +16,8 @@ module Summary {
interface HTMLView : Bonobo::Unknown {
string getHtml ();
void handleURI (in string uri);
};
};
};
......
......@@ -47,6 +47,9 @@ struct _RdfSummary {
GtkWidget *rdf;
GtkWidget *g_limit;
GtkWidget *g_title;
GtkWidget *g_update;
GtkWidget *g_update_container;
GtkAdjustment *adjustment;
char *title;
char *icon;
......@@ -54,10 +57,16 @@ struct _RdfSummary {
int limit;
gboolean showtitle;
gboolean usetimer;
int time;
int timer;
GString *str;
char *buffer;
GnomeVFSAsyncHandle *handle;
xmlDocPtr cache;
};
typedef struct _RdfSummary RdfSummary;
......@@ -279,9 +288,15 @@ view_destroyed (GtkObject *object,
{
RdfSummary *summary = (RdfSummary *) data;
g_warning ("RDF: Point 1");
if (summary->handle)
gnome_vfs_async_cancel (summary->handle);
g_warning ("RDF: Point 2");
if (summary->cache != NULL)
xmlFreeDoc (summary->cache);
g_free (summary->title);
g_free (summary->icon);
g_free (summary);
......@@ -291,6 +306,7 @@ view_destroyed (GtkObject *object,
if (running_views <= 0) {
gtk_main_quit ();
}
g_warning ("RDF: Point 3");
}
/* PersistStream callbacks */
......@@ -320,7 +336,6 @@ load_from_stream (BonoboPersistStream *ps,
return;
}
g_print ("Hydrating with %s\n", str);
doc = xmlParseDoc ((xmlChar *) str);
if (doc == NULL) {
......@@ -361,6 +376,24 @@ load_from_stream (BonoboPersistStream *ps,
continue;
}
if (strcasecmp (children->name, "usetimer") == 0) {
xml_str = xmlNodeListGetString (doc, children->childs, 1);
summary->usetimer = atoi (xml_str);
xmlFree (xml_str);
children = children->next;
continue;
}
if (strcasecmp (children->name, "timer") == 0) {
xml_str = xmlNodeListGetString (doc, children->childs, 1);
summary->timer = atoi (xml_str);
xmlFree (xml_str);
children = children->next;
continue;
}
g_print ("Unknown name: %s\n", children->name);
children = children->next;
}
......@@ -378,7 +411,7 @@ summary_to_string (RdfSummary *summary)
char *tmp_str;
doc = xmlNewDoc ("1.0");
ns = xmlNewGlobalNs (doc, "http://www.helixcode.com", "rdf");
ns = xmlNewGlobalNs (doc, "http://www.ximian.com", "rdf");
doc->root = xmlNewDocNode (doc, ns, "rdf-summary", NULL);
......@@ -391,8 +424,15 @@ summary_to_string (RdfSummary *summary)
xmlNewChild (doc->root, ns, "showtitle", tmp_str);
g_free (tmp_str);
tmp_str = g_strdup_printf ("%d", summary->usetimer);
xmlNewChild (doc->root, ns, "usetimer", tmp_str);
g_free (tmp_str);
tmp_str = g_strdup_printf ("%d", summary->timer);
xmlNewChild (doc->root, ns, "timer", tmp_str);
g_free (tmp_str);
xmlDocDumpMemory (doc, &out_str, &out_len);
g_print ("%s\n", out_str);
return out_str;
}
......@@ -429,12 +469,23 @@ content_types (BonoboPersistStream *ps,
return bonobo_persist_generate_content_types (1, "application/x-rdf-summary");
}
static void
display_doc (RdfSummary *summary)
{
GString *html;
html = g_string_new ("");
tree_walk (summary->cache->root, summary, html);
executive_summary_html_view_set_html (EXECUTIVE_SUMMARY_HTML_VIEW (summary->view), html->str);
g_string_free (html, TRUE);
}
static void
close_callback (GnomeVFSAsyncHandle *handle,
GnomeVFSResult result,
RdfSummary *summary)
{
GString *html;
xmlDocPtr doc;
char *xml;
......@@ -446,6 +497,9 @@ close_callback (GnomeVFSAsyncHandle *handle,
xml = summary->str->str;
g_string_free (summary->str, FALSE);
if (summary->cache != NULL)
xmlFreeDoc (summary->cache);
doc = xmlParseMemory (xml, strlen (xml));
if (doc == NULL) {
char *emsg;
......@@ -468,11 +522,12 @@ close_callback (GnomeVFSAsyncHandle *handle,
}
g_free (xml);
html = g_string_new ("");
tree_walk (doc->root, summary, html);
executive_summary_html_view_set_html (EXECUTIVE_SUMMARY_HTML_VIEW (summary->view), html->str);
g_string_free (html, TRUE);
/* Cache it for later */
summary->cache = doc;
/* Draw it */
display_doc (summary);
}
static void
......@@ -632,9 +687,15 @@ set_prop (BonoboPropertyBag *bag,
}
static void
item_changed (GtkEntry *entry,
item_changed (GtkWidget *widget,
RdfSummary *summary)
{
if (widget == summary->g_update) {
summary->usetimer = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
gtk_widget_set_sensitive (summary->g_update_container,
summary->usetimer);
}
bonobo_property_control_changed (summary->property_control, NULL);
}
......@@ -645,7 +706,7 @@ property_control (BonoboPropertyControl *property_control,
{
BonoboControl *control;
RdfSummary *summary = (RdfSummary *) user_data;
GtkWidget *container, *label, *hbox;
GtkWidget *container, *label, *hbox, *spinner, *button;
char *climit;
container = gtk_vbox_new (FALSE, 2);
......@@ -695,8 +756,46 @@ property_control (BonoboPropertyControl *property_control,
GTK_SIGNAL_FUNC (item_changed), summary);
gtk_box_pack_start (GTK_BOX (hbox), summary->g_title, TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (container), hbox, FALSE, FALSE, 0);
hbox = gtk_hbox_new (FALSE, 2);
/* Update */
hbox = gtk_hbox_new (FALSE, 2);
label = gtk_label_new (_("Update automatically"));
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
summary->g_update = gtk_check_button_new ();
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (summary->g_update),
summary->usetimer);
gtk_signal_connect (GTK_OBJECT (summary->g_update), "toggled",
GTK_SIGNAL_FUNC (item_changed), summary);
gtk_box_pack_start (GTK_BOX (hbox), summary->g_update, TRUE, TRUE, 0);
button = gtk_button_new_with_label (_("Update now"));
gtk_signal_connect (GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (download), summary);
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (container), hbox, FALSE, FALSE, 0);
/* Timer */
hbox = gtk_hbox_new (FALSE, 2);
summary->g_update_container = hbox;
label = gtk_label_new (_("Update every "));
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
summary->adjustment = gtk_adjustment_new (summary->time / 1000 / 60,
0.0, 1000.0, 1.0, 10.0, 1.0);
spinner = gtk_spin_button_new (summary->adjustment, 1.0, 0);
gtk_box_pack_start (GTK_BOX (hbox), spinner, FALSE, FALSE, 0);
label = gtk_label_new (_("minutes"));
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX (container), hbox, FALSE, FALSE, 0);
gtk_widget_set_sensitive (hbox, summary->usetimer);
gtk_widget_show_all (container);
control = bonobo_control_new (container);
......@@ -709,13 +808,30 @@ property_action (GtkObject *property_control,
Bonobo_PropertyControl_Action action,
RdfSummary *summary)
{
gboolean changed = FALSE;
char *old_location;
switch (action) {
case Bonobo_PropertyControl_APPLY:
g_free (summary->location);
old_location = summary->location;
summary->showtitle = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (summary->g_title));
summary->location = g_strdup (gtk_entry_get_text (GTK_ENTRY (summary->rdf)));
if (strcmp (old_location, summary->location) != 0)
changed = TRUE;
summary->limit = atoi (gtk_entry_get_text (GTK_ENTRY (summary->g_limit)));
g_idle_add ((GSourceFunc) download, summary);
summary->time = summary->adjustment->value * 60 * 1000;
if (summary->timer)
gtk_timeout_remove (summary->timer);
summary->timer = gtk_timeout_add (summary->time,
(GSourceFunc)download, summary);
if (changed)
g_idle_add ((GSourceFunc) download, summary);
else
g_idle_add ((GSourceFunc) display_doc, summary);
g_free (old_location);
break;
case Bonobo_PropertyControl_HELP:
......@@ -745,6 +861,13 @@ create_view (ExecutiveSummaryComponentFactory *_factory,
summary->limit = 10;
summary->showtitle = TRUE;
summary->cache = NULL;
summary->usetimer = TRUE;
summary->time = 600000; /* 10 minutes */
summary->timer = gtk_timeout_add (summary->time, (GSourceFunc) download,
summary);
component = executive_summary_component_new ();
gtk_signal_connect (GTK_OBJECT (component), "destroy",
GTK_SIGNAL_FUNC (view_destroyed), summary);
......@@ -776,7 +899,8 @@ create_view (ExecutiveSummaryComponentFactory *_factory,
BONOBO_ARG_STRING, NULL,
"The icon for this component's window", 0);
bonobo_object_add_interface (component, BONOBO_OBJECT(bag));
/* Bonobo::PropertyControl */
property = bonobo_property_control_new_full (property_control, 1,
event_source,
summary);
......@@ -793,7 +917,7 @@ create_view (ExecutiveSummaryComponentFactory *_factory,
bonobo_object_add_interface (component, BONOBO_OBJECT (stream));
running_views++;
gtk_timeout_add (5000, (GSourceFunc) download, summary);