add a "debug" method to tell a component to output debugging messages to a

* Evolution-ShellComponent.idl: add a "debug" method to tell a
	component to output debugging messages to a given file.

	* main.c (main): Add a "--debug filename" argument, to direct
	debugging output for all components to a file. Redirect the
	shell's stdout/stderr to that file if this argument is used.

	* evolution-shell-component-client.c
	(evolution_shell_component_client_set_owner): If debug_log is set,
	call the component's debug method as well.

	* evolution-shell-component.c (impl_ShellComponent_debug):
	redirect stdout/stderr to the named file and emit a "debug"
	signal.

svn path=/trunk/; revision=9046
This commit is contained in:
Dan Winship
2001-03-30 16:39:46 +00:00
parent 911f4543a2
commit bfdcfc7949
6 changed files with 77 additions and 1 deletions

View File

@ -25,6 +25,8 @@
#include <config.h>
#endif
#include <fcntl.h>
#include <gtk/gtksignal.h>
#include <bonobo/bonobo-object.h>
@ -57,6 +59,7 @@ struct _EvolutionShellComponentPrivate {
enum {
OWNER_SET,
OWNER_UNSET,
DEBUG,
LAST_SIGNAL
};
@ -215,6 +218,29 @@ impl_ShellComponent_unset_owner (PortableServer_Servant servant,
gtk_signal_emit (GTK_OBJECT (shell_component), signals[OWNER_UNSET]);
}
static void
impl_ShellComponent_debug (PortableServer_Servant servant,
const CORBA_char *log_path,
CORBA_Environment *ev)
{
BonoboObject *bonobo_object;
EvolutionShellComponent *shell_component;
int fd;
bonobo_object = bonobo_object_from_servant (servant);
shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object);
fd = open (log_path, O_WRONLY | O_APPEND);
if (!fd)
return;
dup2 (fd, STDOUT_FILENO);
dup2 (fd, STDERR_FILENO);
close (fd);
gtk_signal_emit (GTK_OBJECT (shell_component), signals[DEBUG]);
}
static Bonobo_Control
impl_ShellComponent_create_view (PortableServer_Servant servant,
const CORBA_char *physical_uri,
@ -436,6 +462,14 @@ class_init (EvolutionShellComponentClass *klass)
gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0);
signals[DEBUG]
= gtk_signal_new ("debug",
GTK_RUN_FIRST,
object_class->type,
GTK_SIGNAL_OFFSET (EvolutionShellComponentClass, debug),
gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0);
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
parent_class = gtk_type_class (PARENT_TYPE);
@ -443,6 +477,7 @@ class_init (EvolutionShellComponentClass *klass)
epv->_get_supported_types = impl_ShellComponent__get_supported_types;
epv->setOwner = impl_ShellComponent_set_owner;
epv->unsetOwner = impl_ShellComponent_unset_owner;
epv->debug = impl_ShellComponent_debug;
epv->createView = impl_ShellComponent_create_view;
epv->createFolderAsync = impl_ShellComponent_async_create_folder;
epv->removeFolderAsync = impl_ShellComponent_async_remove_folder;