New member "component_alias". (component_view_new): Get a new "alias" arg,
* e-shell-window.c (struct _ComponentView): New member "component_alias". (component_view_new): Get a new "alias" arg, set the member in the struct accordingly. (component_view_free): Free ->component_alias. (setup_widgets): Pass the alias from the ComponentInfo to e_component_view(). (switch_view): New utility function. (sidebar_button_selected_callback): Use it. (e_shell_window_switch_to_component): New public function. (e_shell_window_new): Switch to the component whose id is in the /apps/evolution/shell/view_defaults/component_id GConf key. * apps_evolution_shell.schemas: Removed view_defaults/folder_path. New key view_defaults/component_id. * e-component-registry.c (component_info_free): Free ->alias. (component_info_new): Get an "alias" arg and set the member accordingly. (query_components): Remove debugging messages. Get an "evolution:component_alias" property from the component and set the alias from that. * e-component-registry.h (struct _EComponentInfo): New member "alias". svn path=/trunk/; revision=23265
This commit is contained in:
@ -1,3 +1,31 @@
|
||||
2003-11-10 Ettore Perazzoli <ettore@ximian.com>
|
||||
|
||||
* e-shell-window.c (struct _ComponentView): New member
|
||||
"component_alias".
|
||||
(component_view_new): Get a new "alias" arg, set the member in the
|
||||
struct accordingly.
|
||||
(component_view_free): Free ->component_alias.
|
||||
(setup_widgets): Pass the alias from the ComponentInfo to
|
||||
e_component_view().
|
||||
(switch_view): New utility function.
|
||||
(sidebar_button_selected_callback): Use it.
|
||||
(e_shell_window_switch_to_component): New public function.
|
||||
(e_shell_window_new): Switch to the component whose id is in the
|
||||
/apps/evolution/shell/view_defaults/component_id GConf key.
|
||||
|
||||
* apps_evolution_shell.schemas: Removed view_defaults/folder_path.
|
||||
New key view_defaults/component_id.
|
||||
|
||||
* e-component-registry.c (component_info_free): Free ->alias.
|
||||
(component_info_new): Get an "alias" arg and set the member
|
||||
accordingly.
|
||||
(query_components): Remove debugging messages. Get an
|
||||
"evolution:component_alias" property from the component and set
|
||||
the alias from that.
|
||||
|
||||
* e-component-registry.h (struct _EComponentInfo): New member
|
||||
"alias".
|
||||
|
||||
2003-11-07 JP Rosevear <jpr@ximian.com>
|
||||
|
||||
* Makefile.am: make sure the marshal header is in the sources too
|
||||
|
||||
@ -213,13 +213,13 @@
|
||||
</schema>
|
||||
|
||||
<schema>
|
||||
<key>/schemas/apps/evolution/shell/view_defaults/folder_path</key>
|
||||
<applyto>/apps/evolution/shell/view_defaults/folder_path</applyto>
|
||||
<key>/schemas/apps/evolution/shell/view_defaults/component_id</key>
|
||||
<applyto>/apps/evolution/shell/view_defaults/component_id</applyto>
|
||||
<owner>evolution</owner>
|
||||
<type>string</type>
|
||||
<locale name="C">
|
||||
<default>/Summary</default>
|
||||
<short>Path to the folder to be displayed by default</short>
|
||||
<default>mail</default>
|
||||
<short>ID or alias of the component to be shown by default at start-up.</short>
|
||||
</locale>
|
||||
</schema>
|
||||
|
||||
|
||||
@ -53,6 +53,7 @@ struct _EComponentRegistryPrivate {
|
||||
|
||||
static EComponentInfo *
|
||||
component_info_new (const char *id,
|
||||
const char *alias,
|
||||
const char *button_label,
|
||||
int sort_order,
|
||||
GdkPixbuf *button_icon)
|
||||
@ -60,6 +61,7 @@ component_info_new (const char *id,
|
||||
EComponentInfo *info = g_new0 (EComponentInfo, 1);
|
||||
|
||||
info->id = g_strdup (id);
|
||||
info->alias = g_strdup (alias);
|
||||
info->button_label = g_strdup (button_label);
|
||||
info->sort_order = sort_order;
|
||||
|
||||
@ -73,6 +75,7 @@ static void
|
||||
component_info_free (EComponentInfo *info)
|
||||
{
|
||||
g_free (info->id);
|
||||
g_free (info->alias);
|
||||
g_free (info->button_label);
|
||||
|
||||
if (info->iface != NULL)
|
||||
@ -118,6 +121,7 @@ query_components (EComponentRegistry *registry)
|
||||
for (i = 0; i < info_list->_length; i++) {
|
||||
const char *id;
|
||||
const char *label;
|
||||
const char *alias;
|
||||
const char *icon_name;
|
||||
const char *sort_order_string;
|
||||
GdkPixbuf *icon;
|
||||
@ -125,18 +129,16 @@ query_components (EComponentRegistry *registry)
|
||||
|
||||
id = info_list->_buffer[i].iid;
|
||||
label = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:button_label", language_list);
|
||||
if (label == NULL) {
|
||||
g_print ("no label for %s\n", id);
|
||||
if (label == NULL)
|
||||
label = g_strdup (_("Unknown"));
|
||||
}
|
||||
|
||||
alias = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:component_alias", NULL);
|
||||
|
||||
icon_name = bonobo_server_info_prop_lookup (& info_list->_buffer[i], "evolution:button_icon", NULL);
|
||||
if (icon_name == NULL) {
|
||||
icon = NULL;
|
||||
g_print ("no icon for %s\n", id);
|
||||
} else {
|
||||
char *full_path = e_shell_get_icon_path (icon_name, TRUE);
|
||||
g_print ("icon %s\n", full_path);
|
||||
icon = gdk_pixbuf_new_from_file (full_path, NULL);
|
||||
}
|
||||
|
||||
@ -148,7 +150,7 @@ query_components (EComponentRegistry *registry)
|
||||
sort_order = atoi (sort_order_string);
|
||||
|
||||
registry->priv->infos = g_slist_prepend (registry->priv->infos,
|
||||
component_info_new (id, label, sort_order, icon));
|
||||
component_info_new (id, alias, label, sort_order, icon));
|
||||
|
||||
if (icon != NULL)
|
||||
g_object_unref (icon);
|
||||
|
||||
@ -61,6 +61,8 @@ struct _EComponentRegistryClass {
|
||||
struct _EComponentInfo {
|
||||
char *id;
|
||||
|
||||
char *alias;
|
||||
|
||||
/* NULL if not activated. */
|
||||
GNOME_Evolution_Component iface;
|
||||
|
||||
|
||||
@ -44,6 +44,8 @@
|
||||
#include <bonobo/bonobo-ui-util.h>
|
||||
#include <bonobo/bonobo-widget.h>
|
||||
|
||||
#include <gconf/gconf-client.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
|
||||
@ -58,6 +60,7 @@ static GtkWindowClass *parent_class = NULL;
|
||||
struct _ComponentView {
|
||||
int button_id;
|
||||
char *component_id;
|
||||
char *component_alias;
|
||||
|
||||
GtkWidget *sidebar_widget;
|
||||
GtkWidget *view_widget;
|
||||
@ -91,11 +94,12 @@ struct _EShellWindowPrivate {
|
||||
/* ComponentView handling. */
|
||||
|
||||
static ComponentView *
|
||||
component_view_new (const char *id, int button_id)
|
||||
component_view_new (const char *id, const char *alias, int button_id)
|
||||
{
|
||||
ComponentView *view = g_new0 (ComponentView, 1);
|
||||
|
||||
view->component_id = g_strdup (id);
|
||||
view->component_alias = g_strdup (alias);
|
||||
view->button_id = button_id;
|
||||
view->notebook_page_num = -1;
|
||||
|
||||
@ -106,6 +110,7 @@ static void
|
||||
component_view_free (ComponentView *view)
|
||||
{
|
||||
g_free (view->component_id);
|
||||
g_free (view->component_alias);
|
||||
g_free (view);
|
||||
}
|
||||
|
||||
@ -141,9 +146,6 @@ component_view_activate (ComponentView *view)
|
||||
bonobo_control_frame_control_activate (sidebar_control_frame);
|
||||
}
|
||||
|
||||
|
||||
/* Utility functions. */
|
||||
|
||||
static void
|
||||
init_view (EShellWindow *window,
|
||||
ComponentView *view)
|
||||
@ -226,6 +228,34 @@ init_view (EShellWindow *window,
|
||||
bonobo_object_release_unref (component_iface, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
switch_view (EShellWindow *window, ComponentView *component_view)
|
||||
{
|
||||
EShellWindowPrivate *priv = window->priv;
|
||||
GConfClient *gconf_client = gconf_client_get_default ();
|
||||
|
||||
if (component_view->sidebar_widget == NULL) {
|
||||
init_view (window, component_view);
|
||||
} else {
|
||||
if (priv->current_view != NULL)
|
||||
component_view_deactivate (priv->current_view);
|
||||
priv->current_view = component_view;
|
||||
component_view_activate (component_view);
|
||||
|
||||
gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->view_notebook), component_view->notebook_page_num);
|
||||
gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->sidebar_notebook), component_view->notebook_page_num);
|
||||
}
|
||||
|
||||
gconf_client_set_string (gconf_client, "/apps/evolution/shell/view_defaults/component_id",
|
||||
(component_view->component_alias != NULL
|
||||
? component_view->component_alias
|
||||
: component_view->component_id),
|
||||
NULL);
|
||||
|
||||
g_object_unref (gconf_client);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Callbacks. */
|
||||
|
||||
@ -246,21 +276,11 @@ sidebar_button_selected_callback (ESidebar *sidebar,
|
||||
}
|
||||
|
||||
if (component_view == NULL) {
|
||||
g_warning ("Unknown component id %d", button_id);
|
||||
g_warning ("Unknown component button id %d", button_id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (component_view->sidebar_widget == NULL) {
|
||||
init_view (window, component_view);
|
||||
} else {
|
||||
if (priv->current_view != NULL)
|
||||
component_view_deactivate (priv->current_view);
|
||||
priv->current_view = component_view;
|
||||
component_view_activate (component_view);
|
||||
|
||||
gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->view_notebook), component_view->notebook_page_num);
|
||||
gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->sidebar_notebook), component_view->notebook_page_num);
|
||||
}
|
||||
switch_view (window, component_view);
|
||||
}
|
||||
|
||||
|
||||
@ -298,7 +318,7 @@ setup_widgets (EShellWindow *window)
|
||||
button_id = 0;
|
||||
for (p = e_component_registry_peek_list (registry); p != NULL; p = p->next) {
|
||||
EComponentInfo *info = p->data;
|
||||
ComponentView *view = component_view_new (info->id, button_id);
|
||||
ComponentView *view = component_view_new (info->id, info->alias, button_id);
|
||||
|
||||
window->priv->component_views = g_slist_prepend (window->priv->component_views, view);
|
||||
e_sidebar_add_button (E_SIDEBAR (priv->sidebar), info->button_label, info->button_icon, button_id);
|
||||
@ -374,6 +394,8 @@ e_shell_window_new (EShell *shell)
|
||||
EShellWindow *window = g_object_new (e_shell_window_get_type (), NULL);
|
||||
EShellWindowPrivate *priv = window->priv;
|
||||
BonoboUIContainer *ui_container;
|
||||
GConfClient *gconf_client;
|
||||
char *default_component_id;
|
||||
|
||||
if (bonobo_window_construct (BONOBO_WINDOW (window),
|
||||
bonobo_ui_container_new (),
|
||||
@ -406,10 +428,54 @@ e_shell_window_new (EShell *shell)
|
||||
|
||||
gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
|
||||
|
||||
gconf_client = gconf_client_get_default ();
|
||||
default_component_id = gconf_client_get_string (gconf_client,
|
||||
"/apps/evolution/shell/view_defaults/component_id",
|
||||
NULL);
|
||||
g_object_unref (gconf_client);
|
||||
|
||||
if (default_component_id == NULL) {
|
||||
e_shell_window_switch_to_component (window, "mail");
|
||||
} else {
|
||||
e_shell_window_switch_to_component (window, default_component_id);
|
||||
g_free (default_component_id);
|
||||
}
|
||||
|
||||
return GTK_WIDGET (window);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
e_shell_window_switch_to_component (EShellWindow *window, const char *component_id)
|
||||
{
|
||||
EShellWindowPrivate *priv = window->priv;
|
||||
ComponentView *view = NULL;
|
||||
GSList *p;
|
||||
|
||||
g_return_if_fail (E_IS_SHELL_WINDOW (window));
|
||||
g_return_if_fail (component_id != NULL);
|
||||
|
||||
for (p = priv->component_views; p != NULL; p = p->next) {
|
||||
ComponentView *this_view = p->data;
|
||||
|
||||
if (strcmp (this_view->component_id, component_id) == 0
|
||||
|| (this_view->component_alias != NULL
|
||||
&& strcmp (this_view->component_alias, component_id) == 0))
|
||||
{
|
||||
view = p->data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (view == NULL) {
|
||||
g_warning ("Unknown component %s", component_id);
|
||||
return;
|
||||
}
|
||||
|
||||
switch_view (window, view);
|
||||
}
|
||||
|
||||
|
||||
EShell *
|
||||
e_shell_window_peek_shell (EShellWindow *window)
|
||||
{
|
||||
|
||||
@ -54,6 +54,9 @@ GType e_shell_window_get_type (void);
|
||||
|
||||
GtkWidget *e_shell_window_new (EShell *shell);
|
||||
|
||||
void e_shell_window_switch_to_component (EShellWindow *shell,
|
||||
const char *component_id);
|
||||
|
||||
EShell *e_shell_window_peek_shell (EShellWindow *window);
|
||||
BonoboUIComponent *e_shell_window_peek_bonobo_ui_component (EShellWindow *window);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user