aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--shell/ChangeLog16
-rw-r--r--shell/e-shell-settings-dialog.c78
-rw-r--r--shell/e-shell-settings-dialog.h6
-rw-r--r--shell/e-shell-view-menu.c7
4 files changed, 97 insertions, 10 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog
index 4a1755ce63..8e4276c7eb 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,3 +1,19 @@
+2002-04-06 JP Rosevear <jpr@ximian.com>
+
+ * e-shell-settings-dialog.c (page_new): set type
+ (load_pages): get the oaf property for type and track the page
+ number of the highest priority for each type
+ (destroy_type_entry): destroy hash func
+ (impl_destroy): destroy the hash table
+ (init): create private struct and hash table
+ (e_shell_settings_dialog_show_type): show the page of the given
+ type
+
+ * e-shell-view-menu.c (command_settings): show the page for the
+ current folder type by default
+
+ * e-shell-settings-dialog.h: new proto
+
2002-04-06 Ettore Perazzoli <ettore@ximian.com>
* e-shell-settings-dialog.c (init): Set the title of the dialog.
diff --git a/shell/e-shell-settings-dialog.c b/shell/e-shell-settings-dialog.c
index 64783babd9..1fc2655066 100644
--- a/shell/e-shell-settings-dialog.c
+++ b/shell/e-shell-settings-dialog.c
@@ -44,12 +44,19 @@
static EMultiConfigDialogClass *parent_class = NULL;
+
+struct _EShellSettingsDialogPrivate {
+ GHashTable *types;
+};
+
+
/* Page handling. */
struct _Page {
char *title;
char *description;
GdkPixbuf *icon;
+ OAF_Property *type;
int priority;
EConfigPage *page_widget;
};
@@ -59,6 +66,7 @@ static Page *
page_new (const char *title,
const char *description,
GdkPixbuf *icon,
+ OAF_Property *type,
int priority,
EConfigPage *page_widget)
{
@@ -71,6 +79,7 @@ page_new (const char *title,
page->title = g_strdup (title);
page->description = g_strdup (description);
page->icon = icon;
+ page->type = type;
page->priority = priority;
page->page_widget = page_widget;
@@ -114,13 +123,16 @@ sort_page_list (GList *list)
static void
load_pages (EShellSettingsDialog *dialog)
{
+ EShellSettingsDialogPrivate *priv;
OAF_ServerInfoList *control_list;
CORBA_Environment ev;
GSList *language_list;
GList *page_list;
GList *p;
- int i;
+ int i, j;
+ priv = dialog->priv;
+
CORBA_exception_init (&ev);
control_list = oaf_query ("defined(evolution:config_item:title)", NULL, &ev);
@@ -140,6 +152,7 @@ load_pages (EShellSettingsDialog *dialog)
const char *description;
const char *icon_path;
const char *priority_string;
+ OAF_Property *type;
int priority;
GdkPixbuf *icon;
@@ -148,6 +161,7 @@ load_pages (EShellSettingsDialog *dialog)
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_name", NULL);
+ type = oaf_server_info_prop_find (info, "evolution:config_item:type");
priority_string = oaf_server_info_prop_lookup (info, "evolution:config_item:priority", NULL);
if (icon_path == NULL) {
@@ -164,6 +178,8 @@ load_pages (EShellSettingsDialog *dialog)
}
}
+ if (type != NULL && type->v._d != OAF_P_STRINGV)
+ type = NULL;
if (priority_string == NULL)
priority = 0xffff;
else
@@ -174,7 +190,7 @@ load_pages (EShellSettingsDialog *dialog)
if (! BONOBO_EX (&ev)) {
Page *page;
- page = page_new (title, description, icon, priority,
+ page = page_new (title, description, icon, type, priority,
E_CONFIG_PAGE (e_corba_config_page_new_from_objref (corba_object)));
page_list = g_list_prepend (page_list, page);
@@ -187,7 +203,7 @@ load_pages (EShellSettingsDialog *dialog)
}
page_list = sort_page_list (page_list);
- for (p = page_list; p != NULL; p = p->next) {
+ for (p = page_list, i = 0; p != NULL; p = p->next, i++) {
Page *page;
page = (Page *) p->data;
@@ -198,6 +214,17 @@ load_pages (EShellSettingsDialog *dialog)
page->icon,
page->page_widget);
+ if (page->type != NULL) {
+ GNOME_stringlist list = page->type->v._u.value_stringv;
+
+ for (j = 0; j < list._length; j++) {
+ if (g_hash_table_lookup (priv->types, list._buffer[j]) == NULL)
+ g_hash_table_insert (priv->types, g_strdup (list._buffer[j]),
+ GINT_TO_POINTER (i));
+ }
+ }
+
+
page_free (page);
}
@@ -211,15 +238,28 @@ load_pages (EShellSettingsDialog *dialog)
/* GtkObject methods. */
+static gboolean
+destroy_type_entry (gpointer key, gpointer value, gpointer data)
+{
+ g_free (key);
+
+ return TRUE;
+}
+
static void
impl_destroy (GtkObject *object)
{
EShellSettingsDialog *dialog;
+ EShellSettingsDialogPrivate *priv;
dialog = E_SHELL_SETTINGS_DIALOG (object);
+ priv = dialog->priv;
+
+ g_hash_table_foreach_remove (priv->types, destroy_type_entry, NULL);
+ g_hash_table_destroy (priv->types);
- /* (Really nothing to do here for now.) */
-
+ g_free (priv);
+
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
}
@@ -238,6 +278,13 @@ class_init (EShellSettingsDialog *class)
static void
init (EShellSettingsDialog *dialog)
{
+ EShellSettingsDialogPrivate *priv;
+
+ priv = g_new (EShellSettingsDialogPrivate, 1);
+ priv->types = g_hash_table_new (g_str_hash, g_str_equal);
+
+ dialog->priv = priv;
+
load_pages (dialog);
gtk_window_set_title (GTK_WINDOW (dialog), _("Evolution Settings"));
@@ -246,7 +293,7 @@ init (EShellSettingsDialog *dialog)
GtkWidget *
-e_shell_settings_dialog_new (void)
+e_shell_settings_dialog_new ()
{
EShellSettingsDialog *new;
@@ -255,6 +302,25 @@ e_shell_settings_dialog_new (void)
return GTK_WIDGET (new);
}
+void
+e_shell_settings_dialog_show_type (EShellSettingsDialog *dialog, const char *type)
+{
+ EShellSettingsDialogPrivate *priv;
+ gpointer value;
+ int page;
+
+ g_return_if_fail (dialog != NULL);
+ g_return_if_fail (E_IS_SHELL_SETTINGS_DIALOG (dialog));
+ g_return_if_fail (type != NULL);
+
+ priv = dialog->priv;
+
+ value = g_hash_table_lookup (priv->types, type);
+ page = GPOINTER_TO_INT (value);
+
+ e_multi_config_dialog_show_page (E_MULTI_CONFIG_DIALOG (dialog), page);
+}
+
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
index 93d136ac0f..f01ba36855 100644
--- a/shell/e-shell-settings-dialog.h
+++ b/shell/e-shell-settings-dialog.h
@@ -57,8 +57,10 @@ struct _EShellSettingsDialogClass {
};
-GtkType e_shell_settings_dialog_get_type (void);
-GtkWidget *e_shell_settings_dialog_new (void);
+GtkType e_shell_settings_dialog_get_type (void);
+GtkWidget *e_shell_settings_dialog_new (void);
+void e_shell_settings_dialog_show_type (EShellSettingsDialog *dialog,
+ const char *type);
#ifdef __cplusplus
}
diff --git a/shell/e-shell-view-menu.c b/shell/e-shell-view-menu.c
index f460d427e8..236044ae0c 100644
--- a/shell/e-shell-view-menu.c
+++ b/shell/e-shell-view-menu.c
@@ -589,11 +589,14 @@ command_settings (BonoboUIComponent *uih,
{
EShellView *shell_view;
GtkWidget *dialog;
-
+ const char *type;
+
shell_view = E_SHELL_VIEW (data);
+ type = e_shell_view_get_current_folder_type (shell_view);
dialog = e_shell_settings_dialog_new ();
-
+ e_shell_settings_dialog_show_type (E_SHELL_SETTINGS_DIALOG (dialog), type);
+
gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (shell_view));
gtk_widget_show (dialog);