diff options
author | Dan Winship <danw@src.gnome.org> | 2001-03-31 00:39:46 +0800 |
---|---|---|
committer | Dan Winship <danw@src.gnome.org> | 2001-03-31 00:39:46 +0800 |
commit | bfdcfc7949e01f47ee4d39de425a993033c413b0 (patch) | |
tree | 2c088c5655c9c608fb4756da5f1fd6213b7b5212 /shell/evolution-shell-component.c | |
parent | 911f4543a29d5a5ba99a5b1e6f9a847bc06fb78b (diff) | |
download | gsoc2013-evolution-bfdcfc7949e01f47ee4d39de425a993033c413b0.tar.gz gsoc2013-evolution-bfdcfc7949e01f47ee4d39de425a993033c413b0.tar.zst gsoc2013-evolution-bfdcfc7949e01f47ee4d39de425a993033c413b0.zip |
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
Diffstat (limited to 'shell/evolution-shell-component.c')
-rw-r--r-- | shell/evolution-shell-component.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/shell/evolution-shell-component.c b/shell/evolution-shell-component.c index d76b28a9ae..c29b3b00b7 100644 --- a/shell/evolution-shell-component.c +++ b/shell/evolution-shell-component.c @@ -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; |