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

@ -1,3 +1,20 @@
2001-03-30 Dan Winship <danw@ximian.com>
* 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.
2001-03-29 Kjartan Maraas <kmaraas@gnome.org>
* e-component-registry.c: Remove/replace unneeded includes and

View File

@ -40,6 +40,8 @@ module Evolution {
void unsetOwner ()
raises (NotOwned);
void debug (in string log_path);
/* FIXME: We might want more exceptions here. */
exception NotFound {};
exception UnsupportedType {};

View File

@ -38,6 +38,8 @@
#include "evolution-shell-component-client.h"
extern char *debug_log;
#define PARENT_TYPE BONOBO_OBJECT_CLIENT_TYPE
static BonoboObjectClass *parent_class = NULL;
@ -471,6 +473,9 @@ evolution_shell_component_client_set_owner (EvolutionShellComponentClient *shell
result = corba_exception_to_result (&ev);
if (result == EVOLUTION_SHELL_COMPONENT_OK && debug_log)
GNOME_Evolution_ShellComponent_debug (bonobo_object_corba_objref (BONOBO_OBJECT (shell_component_client)), debug_log, &ev);
CORBA_exception_free (&ev);
return result;

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;

View File

@ -129,6 +129,7 @@ struct _EvolutionShellComponentClass {
EvolutionShellClient *shell_client,
const char *evolution_homedir);
void (* owner_unset) (EvolutionShellComponent *shell_component);
void (* debug) (EvolutionShellComponent *shell_component);
};

View File

@ -22,6 +22,7 @@
*/
#include <config.h>
#include <fcntl.h>
#include <glib.h>
#include <gtk/gtkmain.h>
#include <gtk/gtklabel.h>
@ -50,6 +51,7 @@
static EShell *shell = NULL;
static char *evolution_directory = NULL;
static gboolean no_splash = FALSE;
char *debug_log = NULL;
static void
@ -180,7 +182,8 @@ int
main (int argc, char **argv)
{
struct poptOption options[] = {
{ "no-splash", '\0', POPT_ARG_NONE, &no_splash, 0, N_("Disable."), NULL },
{ "no-splash", '\0', POPT_ARG_NONE, &no_splash, 0, N_("Disable splash screen"), NULL },
{ "debug", '\0', POPT_ARG_STRING, &debug_log, 0, N_("Send the debugging output of all components to a file."), NULL },
{ NULL, '\0', POPT_ARG_INCLUDE_TABLE, &oaf_popt_options, 0, NULL, NULL },
POPT_AUTOHELP
{ NULL, '\0', 0, NULL, 0, NULL, NULL }
@ -190,6 +193,19 @@ main (int argc, char **argv)
textdomain (PACKAGE);
gnome_init_with_popt_table ("Evolution", VERSION, argc, argv, options, 0, NULL);
if (debug_log) {
int fd;
fd = open (debug_log, O_WRONLY | O_CREAT | O_TRUNC, 0600);
if (fd) {
dup2 (fd, STDOUT_FILENO);
dup2 (fd, STDERR_FILENO);
close (fd);
} else
g_warning ("Could not set up debugging output file.");
}
oaf_init (argc, argv);
glade_gnome_init ();