aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shell/ChangeLog19
-rw-r--r--shell/GNOME_Evolution_TestComponent.oaf26
-rw-r--r--shell/Makefile.am2
-rw-r--r--shell/e-shell-settings-dialog.c170
-rw-r--r--shell/e-shell-settings-dialog.h67
-rw-r--r--shell/e-shell-view-menu.c50
-rw-r--r--shell/e-storage-set-view.c2
-rw-r--r--shell/evolution-test-component.c45
8 files changed, 367 insertions, 14 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog
index 609a356c5b..8e52e37c60 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,3 +1,22 @@
+2002-03-07 Ettore Perazzoli <ettore@ximian.com>
+
+ * evolution-test-component.c (create_configuration_page): New
+ function to create a test configuration page for the test
+ component.
+ (configuration_control_factory_fn): Factory function for the
+ configuration controls.
+ (register_configuration_control_factory): New function to register
+ the factory.
+ (main): Call it.
+
+ * e-shell-view-menu.c: Add verb "Settings".
+ (command_settings): Implementation for the "Settings" verb.
+
+ * GNOME_Evolution_TestComponent.oaf: Add a configuration control.
+
+ * e-shell-settings-dialog.c: New.
+ * e-shell-settings-dialog.h: New.
+
2002-03-07 Dan Winship <danw@ximian.com>
Addendum to previous commit: Remove "storage_selected" vs
diff --git a/shell/GNOME_Evolution_TestComponent.oaf b/shell/GNOME_Evolution_TestComponent.oaf
index d5ef5333be..ce42825943 100644
--- a/shell/GNOME_Evolution_TestComponent.oaf
+++ b/shell/GNOME_Evolution_TestComponent.oaf
@@ -10,6 +10,32 @@
<oaf_attribute name="description" type="string"
value="Evolution test component."/>
+
+</oaf_server>
+
+<oaf_server iid="OAFIID:GNOME_Evolution_TestComponent_ConfigurationControlFactory"
+ type="exe"
+ location="evolution-test-component">
+
+ <oaf_attribute name="repo_ids" type="stringv">
+ <item value="IDL:GNOME/ObjectFactory:1.0"/>
+ </oaf_attribute>
+
+ <oaf_attribute name="description" type="string"
+ value="Factory for the configuration controls for the test component."/>
+
+</oaf_server>
+
+<oaf_server iid="OAFIID:GNOME_Evolution_TestComponent_ConfigurationControl"
+ type="factory"
+ location="OAFIID:GNOME_Evolution_TestComponent_ConfigurationControlFactory">
+
+ <oaf_attribute name="evolution:config_item:title" type="string"
+ value="Test Component configuration"/>
+
+ <oaf_attribute name="evolution:config_item:description" type="string"
+ value="This allows you to configure the Test Component"/>
+
</oaf_server>
</oaf_info>
diff --git a/shell/Makefile.am b/shell/Makefile.am
index 35cea451f8..f4dde8f2d7 100644
--- a/shell/Makefile.am
+++ b/shell/Makefile.am
@@ -134,6 +134,8 @@ evolution_SOURCES = \
e-shell-importer.h \
e-shell-offline-handler.c \
e-shell-offline-handler.h \
+ e-shell-settings-dialog.c \
+ e-shell-settings-dialog.h \
e-shell-startup-wizard.c \
e-shell-startup-wizard.h \
e-shell-user-creatable-items-handler.c \
diff --git a/shell/e-shell-settings-dialog.c b/shell/e-shell-settings-dialog.c
new file mode 100644
index 0000000000..139344fbe1
--- /dev/null
+++ b/shell/e-shell-settings-dialog.c
@@ -0,0 +1,170 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/* e-shell-settings-dialog.c
+ *
+ * Copyright (C) 2002 Ximian, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Author: Ettore Perazzoli <ettore@ximian.com>
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "e-shell-settings-dialog.h"
+
+#include <gal/util/e-util.h>
+
+#include <bonobo/bonobo-widget.h>
+
+#include <liboaf/liboaf.h>
+
+#include <string.h>
+
+
+#define PARENT_TYPE e_multi_config_dialog_get_type ()
+static EMultiConfigDialogClass *parent_class = NULL;
+
+
+static GSList *
+get_language_list (void)
+{
+ const char *env;
+ const char *p;
+
+ env = g_getenv ("LANGUAGE");
+ if (env == NULL) {
+ env = g_getenv ("LANG");
+ if (env == NULL)
+ return NULL;
+ }
+
+ p = strchr (env, '=');
+ if (p != NULL)
+ return g_slist_prepend (NULL, (void *) (p + 1));
+ else
+ return g_slist_prepend (NULL, (void *) env);
+}
+
+static void
+load_pages (EShellSettingsDialog *dialog)
+{
+ OAF_ServerInfoList *control_list;
+ CORBA_Environment ev;
+ GSList *language_list;
+ int i;
+
+ CORBA_exception_init (&ev);
+
+ control_list = oaf_query ("defined(evolution:config_item:title)", NULL, &ev);
+ if (ev._major != CORBA_NO_EXCEPTION || control_list == NULL) {
+ g_warning ("Cannot load configuration pages -- %s", ev._repo_id);
+ CORBA_exception_free (&ev);
+ return;
+ }
+
+ language_list = get_language_list ();
+
+ for (i = 0; i < control_list->_length; i ++) {
+ CORBA_Object corba_object;
+ OAF_ServerInfo *info;
+ const char *title;
+ const char *description;
+ const char *icon_path;
+ GdkPixbuf *icon;
+
+ info = & control_list->_buffer[i];
+
+ title = oaf_server_info_prop_lookup (info, "evolution:config_item:title", language_list);
+ description = oaf_server_info_prop_lookup (info, "evolution:config_item:description", language_list);
+ icon_path = oaf_server_info_prop_lookup (info, "evolution:config_item:icon_path", language_list);
+
+ if (icon_path == NULL)
+ icon = NULL;
+ else
+ icon = gdk_pixbuf_new_from_file (icon_path);
+
+ corba_object = oaf_activate_from_id ((char *) info->iid, 0, NULL, &ev);
+ if (ev._major == CORBA_NO_EXCEPTION) {
+ GtkWidget *widget;
+
+ widget = bonobo_widget_new_control_from_objref (corba_object, CORBA_OBJECT_NIL);
+ e_multi_config_dialog_add_page (E_MULTI_CONFIG_DIALOG (dialog),
+ title, description, icon, widget);
+ }
+
+ if (icon != NULL)
+ gdk_pixbuf_unref (icon);
+ }
+
+ CORBA_free (control_list);
+
+ g_slist_free (language_list);
+
+ CORBA_exception_free (&ev);
+}
+
+
+/* GtkObject methods. */
+
+static void
+impl_destroy (GtkObject *object)
+{
+ EShellSettingsDialog *dialog;
+
+ dialog = E_SHELL_SETTINGS_DIALOG (object);
+
+ /* (Really nothing to do here for now.) */
+
+ (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
+}
+
+
+static void
+class_init (EShellSettingsDialog *class)
+{
+ GtkObjectClass *object_class;
+
+ object_class = GTK_OBJECT_CLASS (class);
+ object_class->destroy = impl_destroy;
+
+ parent_class = gtk_type_class (PARENT_TYPE);
+}
+
+static void
+init (EShellSettingsDialog *dialog)
+{
+ load_pages (dialog);
+
+ gtk_window_set_default_size (GTK_WINDOW (dialog), 600, 450);
+}
+
+
+GtkWidget *
+e_shell_settings_dialog_new (void)
+{
+ EShellSettingsDialog *new;
+
+ new = gtk_type_new (e_shell_settings_dialog_get_type ());
+
+ return GTK_WIDGET (new);
+}
+
+
+E_MAKE_TYPE (e_shell_settings_dialog, "EShellSettingsDialog", EShellSettingsDialog,
+ class_init, init, PARENT_TYPE)
+
diff --git a/shell/e-shell-settings-dialog.h b/shell/e-shell-settings-dialog.h
new file mode 100644
index 0000000000..93d136ac0f
--- /dev/null
+++ b/shell/e-shell-settings-dialog.h
@@ -0,0 +1,67 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/* e-shell-settings-dialog.h
+ *
+ * Copyright (C) 2002 Ximian, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Author: Ettore Perazzoli <ettore@ximian.com>
+ */
+
+#ifndef _E_SHELL_SETTINGS_DIALOG_H_
+#define _E_SHELL_SETTINGS_DIALOG_H_
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "e-multi-config-dialog.h"
+
+#ifdef __cplusplus
+extern "C" {
+#pragma }
+#endif /* __cplusplus */
+
+#define E_TYPE_SHELL_SETTINGS_DIALOG (e_shell_settings_dialog_get_type ())
+#define E_SHELL_SETTINGS_DIALOG(obj) (GTK_CHECK_CAST ((obj), E_TYPE_SHELL_SETTINGS_DIALOG, EShellSettingsDialog))
+#define E_SHELL_SETTINGS_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_SHELL_SETTINGS_DIALOG, EShellSettingsDialogClass))
+#define E_IS_SHELL_SETTINGS_DIALOG(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_SHELL_SETTINGS_DIALOG))
+#define E_IS_SHELL_SETTINGS_DIALOG_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_SHELL_SETTINGS_DIALOG))
+
+
+typedef struct _EShellSettingsDialog EShellSettingsDialog;
+typedef struct _EShellSettingsDialogPrivate EShellSettingsDialogPrivate;
+typedef struct _EShellSettingsDialogClass EShellSettingsDialogClass;
+
+struct _EShellSettingsDialog {
+ EMultiConfigDialog parent;
+
+ EShellSettingsDialogPrivate *priv;
+};
+
+struct _EShellSettingsDialogClass {
+ EMultiConfigDialogClass parent_class;
+};
+
+
+GtkType e_shell_settings_dialog_get_type (void);
+GtkWidget *e_shell_settings_dialog_new (void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _E_SHELL_SETTINGS_DIALOG_H_ */
diff --git a/shell/e-shell-view-menu.c b/shell/e-shell-view-menu.c
index 649e37b016..c72f899bd5 100644
--- a/shell/e-shell-view-menu.c
+++ b/shell/e-shell-view-menu.c
@@ -24,7 +24,25 @@
/* FIXME: This file is a bit of a mess. */
+#ifdef HAVE_CONFIG_H
#include <config.h>
+#endif
+
+#include "e-shell-view-menu.h"
+
+#include "e-shell-folder-creation-dialog.h"
+#include "e-shell-folder-selection-dialog.h"
+
+#include "e-shell-settings-dialog.h"
+
+#include "e-shell-constants.h"
+
+#include "e-shell-importer.h"
+#include "e-shell-about-box.h"
+
+#include "e-shell-folder-commands.h"
+
+#include "evolution-shell-component-utils.h"
#include <glib.h>
@@ -46,19 +64,6 @@
#include <gal/widgets/e-gui-utils.h>
-#include "e-shell-folder-creation-dialog.h"
-#include "e-shell-folder-selection-dialog.h"
-
-#include "e-shell-constants.h"
-
-#include "e-shell-view-menu.h"
-#include "e-shell-importer.h"
-#include "e-shell-about-box.h"
-
-#include "e-shell-folder-commands.h"
-
-#include "evolution-shell-component-utils.h"
-
/* Utility functions. */
@@ -564,6 +569,23 @@ command_new_shortcut (BonoboUIComponent *uih,
/* Tools menu. */
static void
+command_settings (BonoboUIComponent *uih,
+ void *data,
+ const char *path)
+{
+ EShellView *shell_view;
+ GtkWidget *dialog;
+
+ shell_view = E_SHELL_VIEW (data);
+
+ dialog = e_shell_settings_dialog_new ();
+
+ gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (shell_view));
+
+ gtk_widget_show (dialog);
+}
+
+static void
command_pilot_settings (BonoboUIComponent *uih,
void *data,
const char *path)
@@ -624,6 +646,8 @@ BonoboUIVerb folder_verbs [] = {
};
BonoboUIVerb tools_verbs[] = {
+ BONOBO_UI_VERB ("Settings", command_settings),
+
BONOBO_UI_VERB ("PilotSettings", command_pilot_settings),
BONOBO_UI_VERB_END
diff --git a/shell/e-storage-set-view.c b/shell/e-storage-set-view.c
index 5ebc1b50af..8ceb07de26 100644
--- a/shell/e-storage-set-view.c
+++ b/shell/e-storage-set-view.c
@@ -1,7 +1,7 @@
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
/* e-storage-set-view.c
*
- * Copyright (C) 2000, 2001 Ximian, Inc.
+ * Copyright (C) 2000, 2001, 2002 Ximian, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 2 of the GNU General Public
diff --git a/shell/evolution-test-component.c b/shell/evolution-test-component.c
index 8cf0856b88..916bf3c8f7 100644
--- a/shell/evolution-test-component.c
+++ b/shell/evolution-test-component.c
@@ -37,17 +37,60 @@
#define COMPONENT_ID "OAFIID:GNOME_Evolution_TestComponent_ShellComponent"
+#define CONFIGURATION_CONTROL_FACTORY_ID "OAFIID:GNOME_Evolution_TestComponent_ConfigurationControlFactory"
+#define CONFIGURATION_CONTROL_ID "OAFIID:GNOME_Evolution_TestComponent_ConfigurationControl"
+
static const EvolutionShellComponentFolderType folder_types[] = {
{ "test", "/usr/share/pixmaps/gnome-money.png", N_("Test"), N_("Test type"), FALSE, NULL, NULL },
{ NULL }
};
+static BonoboGenericFactory *configuration_control_factory = NULL;
+
static EvolutionShellClient *parent_shell = NULL;
static int timeout_id = 0;
+/* Test the configuration control. */
+
+static BonoboObject *
+create_configuration_page (void)
+{
+ GtkWidget *label;
+
+ label = gtk_label_new ("This is the configuration page for the test component.");
+ gtk_widget_show (label);
+
+ return BONOBO_OBJECT (bonobo_control_new (label));
+}
+
+static BonoboObject *
+configuration_control_factory_fn (BonoboGenericFactory *factory,
+ const char *id,
+ void *closure)
+{
+ if (strcmp (id, CONFIGURATION_CONTROL_ID) == 0) {
+ return create_configuration_page ();
+ } else {
+ g_warning ("Unknown ID in configuration control factory -- %s", id);
+ return NULL;
+ }
+}
+
+static void
+register_configuration_control_factory (void)
+{
+ configuration_control_factory = bonobo_generic_factory_new_multi (CONFIGURATION_CONTROL_FACTORY_ID,
+ configuration_control_factory_fn,
+ NULL);
+
+ if (configuration_control_factory == NULL)
+ g_warning ("Cannot register configuration control factory!");
+}
+
+
/* Test the ::Shortcut interface. */
static void
@@ -344,6 +387,8 @@ main (int argc, char **argv)
if (bonobo_init (orb, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE)
g_error ("Cannot initialize the test component.");
+ register_configuration_control_factory ();
+
register_component ();
bonobo_main ();