Reorganized the shell to allow dynamic registration of storages and
folder types, and changed all the components to work with the new setup. svn path=/trunk/; revision=3199
This commit is contained in:
@ -1,3 +1,15 @@
|
||||
2000-05-25 Ettore Perazzoli <ettore@helixcode.com>
|
||||
|
||||
* gui/component/addressbook.c (addressbook_factory_new_control):
|
||||
New function.
|
||||
(addressbook_factory): Use it.
|
||||
|
||||
* Makefile.am (evolution_addressbook_LDADD): Link with
|
||||
`evolution-shell-component.o' from the shell directory.
|
||||
|
||||
* gui/component/addressbook-component.c: New.
|
||||
* gui/component/addressbook-component.h: New.
|
||||
|
||||
2000-05-23 Christopher James Lahey <clahey@helixcode.com>
|
||||
|
||||
* Makefile.am: Switched printing and gui.
|
||||
|
||||
@ -27,4 +27,30 @@
|
||||
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component-factory:addressbook:dbf3bba0-4b0a-4f07-899b-1ec56fdf38a0"
|
||||
type="exe"
|
||||
location="evolution-addressbook">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:GNOME/GenericFactory:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Factory for the Evolution addressbook component."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component:addressbook:b7a26547-7014-4bb5-98ab-2bcac2bb55ca"
|
||||
type="factory"
|
||||
location="OAFIID:evolution-shell-component-factory:addressbook:dbf3bba0-4b0a-4f07-899b-1ec56fdf38a0">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Evolution/ShellComponent:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Evolution component for handling contacts."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
</oaf_info>
|
||||
|
||||
@ -27,4 +27,30 @@
|
||||
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component-factory:addressbook:dbf3bba0-4b0a-4f07-899b-1ec56fdf38a0"
|
||||
type="exe"
|
||||
location="evolution-addressbook">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:GNOME/GenericFactory:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Factory for the Evolution addressbook component."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component:addressbook:b7a26547-7014-4bb5-98ab-2bcac2bb55ca"
|
||||
type="factory"
|
||||
location="OAFIID:evolution-shell-component-factory:addressbook:dbf3bba0-4b0a-4f07-899b-1ec56fdf38a0">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Evolution/ShellComponent:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Evolution component for handling contacts."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
</oaf_info>
|
||||
|
||||
@ -6,6 +6,9 @@ INCLUDES = \
|
||||
$(EXTRA_GNOME_CFLAGS) \
|
||||
$(GNOME_INCLUDEDIR) \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_builddir) \
|
||||
-I$(top_srcdir)/shell \
|
||||
-I$(top_builddir)/shell \
|
||||
-I$(top_srcdir)/widgets/e-text \
|
||||
-I$(top_srcdir)/widgets/e-table \
|
||||
-I$(top_srcdir)/addressbook/gui/minicard \
|
||||
@ -27,11 +30,21 @@ evolution_addressbook_SOURCES = \
|
||||
e-ldap-server-dialog.h \
|
||||
e-addressbook-model.c \
|
||||
e-addressbook-model.h \
|
||||
addressbook-component.c \
|
||||
addressbook-component.h \
|
||||
addressbook-factory.c \
|
||||
addressbook.c \
|
||||
addressbook.h
|
||||
|
||||
# FIXME We should make a libeshell library instead of this gross hack.
|
||||
SHELL_OBJS = \
|
||||
$(top_builddir)/shell/Evolution-common.o \
|
||||
$(top_builddir)/shell/Evolution-stubs.o \
|
||||
$(top_builddir)/shell/Evolution-skels.o \
|
||||
$(top_builddir)/shell/evolution-shell-component.o
|
||||
|
||||
evolution_addressbook_LDADD = \
|
||||
$(SHELL_OBJS) \
|
||||
$(EXTRA_GNOME_LIBS) \
|
||||
$(BONOBO_HTML_GNOME_LIBS) \
|
||||
$(top_builddir)/addressbook/gui/minicard/libeminicard.a \
|
||||
|
||||
99
addressbook/gui/component/addressbook-component.c
Normal file
99
addressbook/gui/component/addressbook-component.c
Normal file
@ -0,0 +1,99 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* addressbook-component.c
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <bonobo.h>
|
||||
|
||||
#include "evolution-shell-component.h"
|
||||
|
||||
#include "addressbook-component.h"
|
||||
|
||||
|
||||
#ifdef USING_OAF
|
||||
#define COMPONENT_FACTORY_ID "OAFIID:evolution-shell-component-factory:addressbook:dbf3bba0-4b0a-4f07-899b-1ec56fdf38a0"
|
||||
#else
|
||||
#define COMPONENT_FACTORY_ID "evolution-shell-component-factory:addressbook"
|
||||
#endif
|
||||
|
||||
static BonoboGenericFactory *factory = NULL;
|
||||
|
||||
static const EvolutionShellComponentFolderType folder_types[] = {
|
||||
{ "contacts", "evolution-contacts.png" },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
/* EvolutionShellComponent methods and signals. */
|
||||
|
||||
static BonoboControl *
|
||||
create_view (EvolutionShellComponent *shell_component,
|
||||
const char *physical_uri,
|
||||
void *closure)
|
||||
{
|
||||
BonoboControl *control;
|
||||
|
||||
control = addressbook_factory_new_control ();
|
||||
bonobo_control_set_property (control, "folder_uri", physical_uri, NULL);
|
||||
|
||||
return control;
|
||||
}
|
||||
|
||||
static void
|
||||
owner_set_cb (EvolutionShellComponent *shell_component,
|
||||
Evolution_Shell shell_interface)
|
||||
{
|
||||
g_print ("addressbook: Yeeeh! We have an owner!\n"); /* FIXME */
|
||||
}
|
||||
|
||||
|
||||
/* The factory function. */
|
||||
|
||||
static BonoboObject *
|
||||
factory_fn (BonoboGenericFactory *factory,
|
||||
void *closure)
|
||||
{
|
||||
EvolutionShellComponent *shell_component;
|
||||
|
||||
shell_component = evolution_shell_component_new (folder_types, create_view, NULL);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (shell_component), "owner_set",
|
||||
GTK_SIGNAL_FUNC (owner_set_cb), NULL);
|
||||
|
||||
return BONOBO_OBJECT (shell_component);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
addressbook_component_factory_init (void)
|
||||
{
|
||||
if (factory != NULL)
|
||||
return;
|
||||
|
||||
factory = bonobo_generic_factory_new (COMPONENT_FACTORY_ID, factory_fn, NULL);
|
||||
|
||||
if (factory == NULL)
|
||||
g_error ("Cannot initialize the Evolution addressbook factory.");
|
||||
}
|
||||
29
addressbook/gui/component/addressbook-component.h
Normal file
29
addressbook/gui/component/addressbook-component.h
Normal file
@ -0,0 +1,29 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* addressbook-component.h
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifndef _ADDRESSBOOK_COMPONENT_H
|
||||
#define _ADDRESSBOOK_COMPONENT_H
|
||||
|
||||
void addressbook_component_factory_init (void);
|
||||
|
||||
#endif /* _ADDRESSBOOK_COMPONENT_H */
|
||||
@ -15,6 +15,7 @@
|
||||
#include <e-util/e-cursors.h>
|
||||
|
||||
#include "addressbook.h"
|
||||
#include "addressbook-component.h"
|
||||
|
||||
#ifdef USING_OAF
|
||||
|
||||
@ -65,7 +66,13 @@ main (int argc, char **argv)
|
||||
|
||||
init_bonobo (argc, argv);
|
||||
|
||||
/* FIXME: Messy names here. This file should be `main.c'. `addressbook.c' should
|
||||
be `addressbook-control-factory.c' and the functions should be called
|
||||
`addressbook_control_factory_something()'. And `addressbook-component.c'
|
||||
should be `addressbook-component-factory.c'. */
|
||||
|
||||
addressbook_factory_init ();
|
||||
addressbook_component_factory_init ();
|
||||
|
||||
e_cursors_init();
|
||||
|
||||
|
||||
@ -822,8 +822,8 @@ change_view_type (AddressbookView *view, AddressbookViewType view_type)
|
||||
}
|
||||
|
||||
|
||||
static BonoboObject *
|
||||
addressbook_factory (BonoboGenericFactory *Factory, void *closure)
|
||||
BonoboControl *
|
||||
addressbook_factory_new_control (void)
|
||||
{
|
||||
AddressbookView *view;
|
||||
|
||||
@ -863,7 +863,13 @@ addressbook_factory (BonoboGenericFactory *Factory, void *closure)
|
||||
gtk_signal_connect (GTK_OBJECT (view->control), "activate",
|
||||
control_activate_cb, view);
|
||||
|
||||
return BONOBO_OBJECT (view->control);
|
||||
return view->control;
|
||||
}
|
||||
|
||||
static BonoboObject *
|
||||
addressbook_factory (BonoboGenericFactory *Factory, void *closure)
|
||||
{
|
||||
return BONOBO_OBJECT (addressbook_factory_new_control ());
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@ -9,3 +9,15 @@ type=factory
|
||||
repo_id=IDL:BonoboControl/addressbook-control:1.0 IDL:GNOME/Control:1.0
|
||||
description=A sample Bonobo control which displays an addressbook.
|
||||
location_info=control-factory:addressbook
|
||||
|
||||
[evolution-shell-component-factory:addressbook]
|
||||
type=exe
|
||||
repo_id=IDL:GNOME/GenericFactory:1.0
|
||||
description=Factory for the Evolution addressbook component.
|
||||
location_info=evolution-addressbook
|
||||
|
||||
[evolution-shell-component:addressbook]
|
||||
type=factory
|
||||
repo_id=IDL:Evolution/ShellComponent:1.0
|
||||
description=Evolution component for handling contacts.
|
||||
location_info=evolution-shell-component-factory:addressbook
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
|
||||
#include <bonobo/bonobo-control.h>
|
||||
|
||||
void addressbook_factory_init (void);
|
||||
BonoboControl *addressbook_factory_new_control (void);
|
||||
void addressbook_factory_init (void);
|
||||
|
||||
#endif /* __ADDRESSBOOK_H__ */
|
||||
|
||||
@ -27,4 +27,30 @@
|
||||
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component-factory:addressbook:dbf3bba0-4b0a-4f07-899b-1ec56fdf38a0"
|
||||
type="exe"
|
||||
location="evolution-addressbook">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:GNOME/GenericFactory:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Factory for the Evolution addressbook component."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component:addressbook:b7a26547-7014-4bb5-98ab-2bcac2bb55ca"
|
||||
type="factory"
|
||||
location="OAFIID:evolution-shell-component-factory:addressbook:dbf3bba0-4b0a-4f07-899b-1ec56fdf38a0">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Evolution/ShellComponent:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Evolution component for handling contacts."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
</oaf_info>
|
||||
|
||||
@ -1,3 +1,25 @@
|
||||
2000-05-25 Ettore Perazzoli <ettore@helixcode.com>
|
||||
|
||||
* gui/evolution-calendar-control.c: Removed.
|
||||
|
||||
* gui/main.c: New.
|
||||
|
||||
* gui/control-factory.c: New.
|
||||
* gui/control-factory.h: New.
|
||||
|
||||
* gui/calendar-component-factory.c: New.
|
||||
* gui/calendar-component-factory.c: New.
|
||||
|
||||
* gui/evolution-calendar-control.c (calendar_control_factory):
|
||||
Renamed from `calendar_factory'.
|
||||
(calendar_control_factory_init): Renamed from
|
||||
`calendar_factory_init'.
|
||||
|
||||
* gui/Makefile.am: Link with the files from `$(builddir)/shell'.
|
||||
|
||||
* gui/evolution-calendar.gnorba: New.
|
||||
* gui/evolution-calendar.oafinfo: New.
|
||||
|
||||
2000-05-24 Christopher James Lahey <clahey@helixcode.com>
|
||||
|
||||
* gui/Makefile.am: Added libepaned.a.
|
||||
|
||||
29
calendar/gui/GNOME_Evolution_Calendar.oaf.in
Normal file
29
calendar/gui/GNOME_Evolution_Calendar.oaf.in
Normal file
@ -0,0 +1,29 @@
|
||||
<oaf_info>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component-factory:evolution-calendar:cba77062-1466-4aac-8ce7-b019eaf2e921"
|
||||
type="exe"
|
||||
location="evolution-calendar">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Bonobo/GenericFactory:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Factory for the Evolution calendar component."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component:evolution-calendar:2eb9eb63-d305-4918-9c35-faae5db19e51"
|
||||
type="factory"
|
||||
location="OAFIID:evolution-shell-component-factory:evolution-calendar:cba77062-1466-4aac-8ce7-b019eaf2e921">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Evolution/ShellComponent:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Evolution component for handling the calendar."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
</oaf_info>
|
||||
29
calendar/gui/GNOME_Evolution_Calendar.oafinfo
Normal file
29
calendar/gui/GNOME_Evolution_Calendar.oafinfo
Normal file
@ -0,0 +1,29 @@
|
||||
<oaf_info>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component-factory:evolution-calendar:cba77062-1466-4aac-8ce7-b019eaf2e921"
|
||||
type="exe"
|
||||
location="evolution-calendar">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Bonobo/GenericFactory:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Factory for the Evolution calendar component."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component:evolution-calendar:2eb9eb63-d305-4918-9c35-faae5db19e51"
|
||||
type="factory"
|
||||
location="OAFIID:evolution-shell-component-factory:evolution-calendar:cba77062-1466-4aac-8ce7-b019eaf2e921">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Evolution/ShellComponent:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Evolution component for handling the calendar."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
</oaf_info>
|
||||
29
calendar/gui/GNOME_Evolution_Calendar_gnomecal.oaf.in
Normal file
29
calendar/gui/GNOME_Evolution_Calendar_gnomecal.oaf.in
Normal file
@ -0,0 +1,29 @@
|
||||
<oaf_info>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component-factory:evolution-calendar:cba77062-1466-4aac-8ce7-b019eaf2e921"
|
||||
type="exe"
|
||||
location="evolution-calendar">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Bonobo/GenericFactory:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Factory for the Evolution calendar component."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component:evolution-calendar:2eb9eb63-d305-4918-9c35-faae5db19e51"
|
||||
type="factory"
|
||||
location="OAFIID:evolution-shell-component-factory:evolution-calendar:cba77062-1466-4aac-8ce7-b019eaf2e921">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Evolution/ShellComponent:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Evolution component for handling the calendar."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
</oaf_info>
|
||||
29
calendar/gui/GNOME_Evolution_Calendar_gnomecal.oafinfo
Normal file
29
calendar/gui/GNOME_Evolution_Calendar_gnomecal.oafinfo
Normal file
@ -0,0 +1,29 @@
|
||||
<oaf_info>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component-factory:evolution-calendar:cba77062-1466-4aac-8ce7-b019eaf2e921"
|
||||
type="exe"
|
||||
location="evolution-calendar">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Bonobo/GenericFactory:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Factory for the Evolution calendar component."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component:evolution-calendar:2eb9eb63-d305-4918-9c35-faae5db19e51"
|
||||
type="factory"
|
||||
location="OAFIID:evolution-shell-component-factory:evolution-calendar:cba77062-1466-4aac-8ce7-b019eaf2e921">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Evolution/ShellComponent:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Evolution component for handling the calendar."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
</oaf_info>
|
||||
@ -7,6 +7,8 @@ CPPFLAGS = \
|
||||
|
||||
INCLUDES = \
|
||||
-DG_LOG_DOMAIN=\"calendar-gui\" \
|
||||
-I$(top_builddir)/shell \
|
||||
-I$(top_srcdir)/shell \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_srcdir)/calendar \
|
||||
-I$(top_srcdir)/libical/src/libical \
|
||||
@ -39,6 +41,10 @@ evolution_calendar_SOURCES = \
|
||||
alarm.h \
|
||||
calendar-commands.c \
|
||||
calendar-commands.h \
|
||||
control-factory.c \
|
||||
control-factory.h \
|
||||
component-factory.c \
|
||||
component-factory.h \
|
||||
e-day-view-main-item.c \
|
||||
e-day-view-main-item.h \
|
||||
e-day-view-time-item.c \
|
||||
@ -59,7 +65,6 @@ evolution_calendar_SOURCES = \
|
||||
event-editor.h \
|
||||
event-editor-utils.c \
|
||||
event-editor-utils.h \
|
||||
evolution-calendar-control.c \
|
||||
getdate.y \
|
||||
gncal-todo.c \
|
||||
gncal-todo.h \
|
||||
@ -70,6 +75,7 @@ evolution_calendar_SOURCES = \
|
||||
goto.c \
|
||||
layout.c \
|
||||
layout.h \
|
||||
main.c \
|
||||
mark.c \
|
||||
mark.h \
|
||||
popup-menu.c \
|
||||
@ -78,7 +84,15 @@ evolution_calendar_SOURCES = \
|
||||
print.h \
|
||||
prop.c
|
||||
|
||||
# FIXME We should make a libeshell library instead of this gross hack.
|
||||
SHELL_OBJS = \
|
||||
$(top_builddir)/shell/Evolution-common.o \
|
||||
$(top_builddir)/shell/Evolution-stubs.o \
|
||||
$(top_builddir)/shell/Evolution-skels.o \
|
||||
$(top_builddir)/shell/evolution-shell-component.o
|
||||
|
||||
evolution_calendar_LDADD = \
|
||||
$(SHELL_OBJS) \
|
||||
$(EXTRA_GNOME_LIBS) \
|
||||
$(BONOBO_HTML_GNOME_LIBS) \
|
||||
$(top_builddir)/widgets/e-text/libetext.a \
|
||||
@ -89,10 +103,10 @@ evolution_calendar_LDFLAGS = `gnome-config --libs gdk_pixbuf`
|
||||
|
||||
if USING_OAF
|
||||
oafdir = $(datadir)/oaf
|
||||
oaf_DATA = calendar-control.oafinfo
|
||||
oaf_DATA = calendar-control.oafinfo evolution-calendar.oafinfo
|
||||
else
|
||||
gnorbadir = $(sysconfdir)/CORBA/servers
|
||||
gnorba_DATA = calendar-control.gnorba
|
||||
gnorba_DATA = calendar-control.gnorba evolution-calendar.gnorba
|
||||
endif
|
||||
|
||||
EXTRA_DIST = \
|
||||
|
||||
96
calendar/gui/calendar-component.c
Normal file
96
calendar/gui/calendar-component.c
Normal file
@ -0,0 +1,96 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* component-factory.c
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <bonobo.h>
|
||||
|
||||
#include "evolution-shell-component.h"
|
||||
|
||||
#include "component-factory.h"
|
||||
|
||||
|
||||
#ifdef USING_OAF
|
||||
#define COMPONENT_FACTORY_ID "OAFIID:evolution-shell-component-factory:evolution-calendar:cba77062-1466-4aac-8ce7-b019eaf2e921"
|
||||
#else
|
||||
#define COMPONENT_FACTORY_ID "evolution-shell-component-factory:evolution-calendar"
|
||||
#endif
|
||||
|
||||
static BonoboGenericFactory *factory = NULL;
|
||||
|
||||
static const EvolutionShellComponentFolderType folder_types[] = {
|
||||
{ "calendar", "evolution-calendar.png" },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
/* EvolutionShellComponent methods and signals. */
|
||||
|
||||
static BonoboControl *
|
||||
create_view (EvolutionShellComponent *shell_component,
|
||||
const char *physical_uri,
|
||||
void *closure)
|
||||
{
|
||||
/* FIXME: The calendar has no way to specify the physical URI. */
|
||||
|
||||
return control_factory_new_control ();
|
||||
}
|
||||
|
||||
static void
|
||||
owner_set_cb (EvolutionShellComponent *shell_component,
|
||||
Evolution_Shell shell_interface)
|
||||
{
|
||||
g_print ("evolution-calendar: Yeeeh! We have an owner!\n"); /* FIXME */
|
||||
}
|
||||
|
||||
|
||||
/* The factory function. */
|
||||
|
||||
static BonoboObject *
|
||||
factory_fn (BonoboGenericFactory *factory,
|
||||
void *closure)
|
||||
{
|
||||
EvolutionShellComponent *shell_component;
|
||||
|
||||
shell_component = evolution_shell_component_new (folder_types, create_view, NULL);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (shell_component), "owner_set",
|
||||
GTK_SIGNAL_FUNC (owner_set_cb), NULL);
|
||||
|
||||
return BONOBO_OBJECT (shell_component);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
component_factory_init (void)
|
||||
{
|
||||
if (factory != NULL)
|
||||
return;
|
||||
|
||||
factory = bonobo_generic_factory_new (COMPONENT_FACTORY_ID, factory_fn, NULL);
|
||||
|
||||
if (factory == NULL)
|
||||
g_error ("Cannot initialize Evolution's calendar component.");
|
||||
}
|
||||
29
calendar/gui/calendar-component.h
Normal file
29
calendar/gui/calendar-component.h
Normal file
@ -0,0 +1,29 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* component-factory.h
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifndef _COMPONENT_FACTORY_H_
|
||||
#define _COMPONENT_FACTORY_H_
|
||||
|
||||
void component_factory_init (void);
|
||||
|
||||
#endif /* _COMPONENT_FACTORY_H_ */
|
||||
96
calendar/gui/component-factory.c
Normal file
96
calendar/gui/component-factory.c
Normal file
@ -0,0 +1,96 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* component-factory.c
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <bonobo.h>
|
||||
|
||||
#include "evolution-shell-component.h"
|
||||
|
||||
#include "component-factory.h"
|
||||
|
||||
|
||||
#ifdef USING_OAF
|
||||
#define COMPONENT_FACTORY_ID "OAFIID:evolution-shell-component-factory:evolution-calendar:cba77062-1466-4aac-8ce7-b019eaf2e921"
|
||||
#else
|
||||
#define COMPONENT_FACTORY_ID "evolution-shell-component-factory:evolution-calendar"
|
||||
#endif
|
||||
|
||||
static BonoboGenericFactory *factory = NULL;
|
||||
|
||||
static const EvolutionShellComponentFolderType folder_types[] = {
|
||||
{ "calendar", "evolution-calendar.png" },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
/* EvolutionShellComponent methods and signals. */
|
||||
|
||||
static BonoboControl *
|
||||
create_view (EvolutionShellComponent *shell_component,
|
||||
const char *physical_uri,
|
||||
void *closure)
|
||||
{
|
||||
/* FIXME: The calendar has no way to specify the physical URI. */
|
||||
|
||||
return control_factory_new_control ();
|
||||
}
|
||||
|
||||
static void
|
||||
owner_set_cb (EvolutionShellComponent *shell_component,
|
||||
Evolution_Shell shell_interface)
|
||||
{
|
||||
g_print ("evolution-calendar: Yeeeh! We have an owner!\n"); /* FIXME */
|
||||
}
|
||||
|
||||
|
||||
/* The factory function. */
|
||||
|
||||
static BonoboObject *
|
||||
factory_fn (BonoboGenericFactory *factory,
|
||||
void *closure)
|
||||
{
|
||||
EvolutionShellComponent *shell_component;
|
||||
|
||||
shell_component = evolution_shell_component_new (folder_types, create_view, NULL);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (shell_component), "owner_set",
|
||||
GTK_SIGNAL_FUNC (owner_set_cb), NULL);
|
||||
|
||||
return BONOBO_OBJECT (shell_component);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
component_factory_init (void)
|
||||
{
|
||||
if (factory != NULL)
|
||||
return;
|
||||
|
||||
factory = bonobo_generic_factory_new (COMPONENT_FACTORY_ID, factory_fn, NULL);
|
||||
|
||||
if (factory == NULL)
|
||||
g_error ("Cannot initialize Evolution's calendar component.");
|
||||
}
|
||||
29
calendar/gui/component-factory.h
Normal file
29
calendar/gui/component-factory.h
Normal file
@ -0,0 +1,29 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* component-factory.h
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifndef _COMPONENT_FACTORY_H_
|
||||
#define _COMPONENT_FACTORY_H_
|
||||
|
||||
void component_factory_init (void);
|
||||
|
||||
#endif /* _COMPONENT_FACTORY_H_ */
|
||||
193
calendar/gui/control-factory.c
Normal file
193
calendar/gui/control-factory.c
Normal file
@ -0,0 +1,193 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* control-factory.c
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <config.h>
|
||||
#include <gnome.h>
|
||||
#include <glade/glade.h>
|
||||
#include <bonobo.h>
|
||||
#include <bonobo/bonobo-control.h>
|
||||
#include <glade/glade.h>
|
||||
|
||||
#ifdef USING_OAF
|
||||
#include <liboaf/liboaf.h>
|
||||
#else
|
||||
#include <libgnorba/gnorba.h>
|
||||
#endif
|
||||
|
||||
#include <cal-util/timeutil.h>
|
||||
#include <gui/alarm.h>
|
||||
#include <gui/eventedit.h>
|
||||
#include <gui/gnome-cal.h>
|
||||
#include <gui/calendar-commands.h>
|
||||
|
||||
#include "control-factory.h"
|
||||
|
||||
#define PROPERTY_CALENDAR_URI "folder_uri"
|
||||
|
||||
#define PROPERTY_CALENDAR_URI_IDX 1
|
||||
|
||||
#ifdef USING_OAF
|
||||
#define CONTROL_FACTORY_ID "OAFIID:control-factory:calendar:f4f90989-0f50-4af2-ad94-8bbdf331f0bc"
|
||||
#else
|
||||
#define CONTROL_FACTORY_ID "control-factory:calendar"
|
||||
#endif
|
||||
|
||||
|
||||
CORBA_Environment ev;
|
||||
CORBA_ORB orb;
|
||||
|
||||
|
||||
static void
|
||||
control_activate_cb (BonoboControl *control,
|
||||
gboolean activate,
|
||||
gpointer user_data)
|
||||
{
|
||||
if (activate)
|
||||
calendar_control_activate (control, user_data);
|
||||
else
|
||||
calendar_control_deactivate (control);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
get_prop (BonoboPropertyBag *bag,
|
||||
BonoboArg *arg,
|
||||
guint arg_id,
|
||||
gpointer user_data)
|
||||
{
|
||||
/*GnomeCalendar *gcal = user_data;*/
|
||||
|
||||
switch (arg_id) {
|
||||
|
||||
case PROPERTY_CALENDAR_URI_IDX:
|
||||
/*
|
||||
if (fb && fb->uri)
|
||||
BONOBO_ARG_SET_STRING (arg, fb->uri);
|
||||
else
|
||||
BONOBO_ARG_SET_STRING (arg, "");
|
||||
*/
|
||||
break;
|
||||
|
||||
default:
|
||||
g_warning ("Unhandled arg %d\n", arg_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
set_prop (BonoboPropertyBag *bag,
|
||||
const BonoboArg *arg,
|
||||
guint arg_id,
|
||||
gpointer user_data)
|
||||
{
|
||||
GnomeCalendar *gcal = user_data;
|
||||
char *filename;
|
||||
|
||||
switch (arg_id) {
|
||||
|
||||
case PROPERTY_CALENDAR_URI_IDX:
|
||||
printf ("set_prop: '%s'\n", BONOBO_ARG_GET_STRING (arg));
|
||||
filename = g_strdup_printf ("%s/calendar.vcf",
|
||||
BONOBO_ARG_GET_STRING (arg));
|
||||
calendar_set_uri (gcal, filename);
|
||||
g_free (filename);
|
||||
break;
|
||||
|
||||
default:
|
||||
g_warning ("Unhandled arg %d\n", arg_id);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
calendar_properties_init (GnomeCalendar *gcal)
|
||||
{
|
||||
gcal->properties = bonobo_property_bag_new (get_prop, set_prop, gcal);
|
||||
|
||||
bonobo_property_bag_add (gcal->properties,
|
||||
PROPERTY_CALENDAR_URI,
|
||||
PROPERTY_CALENDAR_URI_IDX,
|
||||
BONOBO_ARG_STRING,
|
||||
NULL,
|
||||
_("The URI that the calendar will display"),
|
||||
0);
|
||||
|
||||
bonobo_control_set_property_bag (gcal->control, gcal->properties);
|
||||
}
|
||||
|
||||
|
||||
static BonoboControl *
|
||||
create_control (void)
|
||||
{
|
||||
BonoboControl *control;
|
||||
GnomeCalendar *cal;
|
||||
|
||||
cal = new_calendar (full_name, NULL, NULL, 0);
|
||||
gtk_widget_show (GTK_WIDGET (cal));
|
||||
|
||||
control = bonobo_control_new (GTK_WIDGET (cal));
|
||||
cal->control = control;
|
||||
|
||||
calendar_properties_init (cal);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (control), "activate",
|
||||
control_activate_cb, cal);
|
||||
|
||||
return control;
|
||||
}
|
||||
|
||||
|
||||
static BonoboObject *
|
||||
control_factory (BonoboGenericFactory *Factory, void *closure)
|
||||
{
|
||||
return BONOBO_OBJECT (create_control ());
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
control_factory_init (void)
|
||||
{
|
||||
static BonoboGenericFactory *factory = NULL;
|
||||
|
||||
if (factory != NULL)
|
||||
return;
|
||||
|
||||
puts ("XXXXXX - initializing calendar factory!!!");
|
||||
|
||||
factory = bonobo_generic_factory_new (CONTROL_FACTORY_ID, control_factory, NULL);
|
||||
|
||||
if (factory == NULL)
|
||||
g_error ("I could not register a Calendar control factory.");
|
||||
}
|
||||
|
||||
|
||||
BonoboControl *
|
||||
control_factory_new_control (void)
|
||||
{
|
||||
return create_control ();
|
||||
}
|
||||
30
calendar/gui/control-factory.h
Normal file
30
calendar/gui/control-factory.h
Normal file
@ -0,0 +1,30 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* control-factory.c
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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: Federico Mena Quintero
|
||||
*/
|
||||
|
||||
#ifndef _CONTROL_FACTORY_H_
|
||||
#define _CONTROL_FACTORY_H_
|
||||
|
||||
void control_factory_init (void);
|
||||
BonoboControl *control_factory_new_control (void);
|
||||
|
||||
#endif /* _CONTROL_FACTORY_H_ */
|
||||
@ -24,9 +24,9 @@
|
||||
#define PROPERTY_CALENDAR_URI_IDX 1
|
||||
|
||||
#ifdef USING_OAF
|
||||
#define CONTROL_FACTORY_ID "OAFIID:control-factory:calendar:f4f90989-0f50-4af2-ad94-8bbdf331f0bc"
|
||||
#define CONTROL_FACTORY_ID "OAFIID:control-factory:calendar:f4f90989-0f50-4af2-ad94-8bbdf331f0bc"
|
||||
#else
|
||||
#define CONTROL_FACTORY_ID "control-factory:calendar"
|
||||
#define CONTROL_FACTORY_ID "control-factory:calendar"
|
||||
#endif
|
||||
|
||||
CORBA_Environment ev;
|
||||
@ -138,7 +138,7 @@ calendar_properties_init (GnomeCalendar *gcal)
|
||||
|
||||
|
||||
static BonoboObject *
|
||||
calendar_factory (BonoboGenericFactory *Factory, void *closure)
|
||||
calendar_control_factory (BonoboGenericFactory *Factory, void *closure)
|
||||
{
|
||||
BonoboControl *control;
|
||||
|
||||
@ -160,22 +160,19 @@ calendar_factory (BonoboGenericFactory *Factory, void *closure)
|
||||
|
||||
|
||||
static void
|
||||
calendar_factory_init (void)
|
||||
calendar_control_factory_init (void)
|
||||
{
|
||||
static BonoboGenericFactory *calendar_control_factory = NULL;
|
||||
static BonoboGenericFactory *factory = NULL;
|
||||
|
||||
if (calendar_control_factory != NULL)
|
||||
if (factory != NULL)
|
||||
return;
|
||||
|
||||
puts ("XXXXXX - initializing calendar factory!!!");
|
||||
|
||||
calendar_control_factory =
|
||||
bonobo_generic_factory_new (CONTROL_FACTORY_ID,
|
||||
calendar_factory, NULL);
|
||||
factory = bonobo_generic_factory_new (CONTROL_FACTORY_ID, calendar_control_factory, NULL);
|
||||
|
||||
if (calendar_control_factory == NULL) {
|
||||
g_error ("I could not register a Calendar factory.");
|
||||
}
|
||||
if (factory == NULL)
|
||||
g_error ("I could not register a Calendar control factory.");
|
||||
}
|
||||
|
||||
|
||||
@ -195,7 +192,8 @@ main (int argc, char **argv)
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
calendar_factory_init ();
|
||||
calendar_control_factory_init ();
|
||||
component_factory_init ();
|
||||
|
||||
bonobo_main ();
|
||||
|
||||
|
||||
11
calendar/gui/evolution-calendar.gnorba
Normal file
11
calendar/gui/evolution-calendar.gnorba
Normal file
@ -0,0 +1,11 @@
|
||||
[evolution-shell-component-factory:evolution-calendar]
|
||||
type=exe
|
||||
repo_id=IDL:Bonobo/GenericFactory:1.0
|
||||
description=Factory for the Evolution calendar component.
|
||||
location_info=evolution-calendar
|
||||
|
||||
[evolution-shell-component:evolution-calendar]
|
||||
type=factory
|
||||
repo_id=IDL:Evolution/ShellComponent:1.0
|
||||
description=Evolution component for handling the calendar.
|
||||
location_info=evolution-shell-component-factory:evolution-calendar
|
||||
29
calendar/gui/evolution-calendar.oafinfo
Normal file
29
calendar/gui/evolution-calendar.oafinfo
Normal file
@ -0,0 +1,29 @@
|
||||
<oaf_info>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component-factory:evolution-calendar:cba77062-1466-4aac-8ce7-b019eaf2e921"
|
||||
type="exe"
|
||||
location="evolution-calendar">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Bonobo/GenericFactory:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Factory for the Evolution calendar component."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component:evolution-calendar:2eb9eb63-d305-4918-9c35-faae5db19e51"
|
||||
type="factory"
|
||||
location="OAFIID:evolution-shell-component-factory:evolution-calendar:cba77062-1466-4aac-8ce7-b019eaf2e921">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Evolution/ShellComponent:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Evolution component for handling the calendar."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
</oaf_info>
|
||||
93
calendar/gui/main.c
Normal file
93
calendar/gui/main.c
Normal file
@ -0,0 +1,93 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* control-factory.c
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <gnome.h>
|
||||
#include <glade/glade.h>
|
||||
#include <bonobo.h>
|
||||
#include <bonobo/bonobo-control.h>
|
||||
#include <glade/glade.h>
|
||||
|
||||
#ifdef USING_OAF
|
||||
#include <liboaf/liboaf.h>
|
||||
#else
|
||||
#include <libgnorba/gnorba.h>
|
||||
#endif
|
||||
|
||||
#include <cal-util/timeutil.h>
|
||||
#include <gui/alarm.h>
|
||||
#include <gui/eventedit.h>
|
||||
#include <gui/gnome-cal.h>
|
||||
#include <gui/calendar-commands.h>
|
||||
|
||||
|
||||
static void
|
||||
init_bonobo (int *argc, char **argv)
|
||||
{
|
||||
#ifdef USING_OAF
|
||||
/* FIXME: VERSION instead of "0.0". */
|
||||
gnome_init_with_popt_table ("evolution-calendar", "0.0",
|
||||
*argc, argv, oaf_popt_options,
|
||||
0, NULL);
|
||||
oaf_init (*argc, argv);
|
||||
#else
|
||||
CORBA_Environment ev;
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
gnome_CORBA_init_with_popt_table (
|
||||
"evolution-calendar", "0.0",
|
||||
argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev);
|
||||
CORBA_exception_free (&ev);
|
||||
#endif
|
||||
|
||||
if (bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE)
|
||||
g_error (_("Could not initialize Bonobo"));
|
||||
|
||||
glade_gnome_init ();
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
init_bonobo (&argc, argv);
|
||||
glade_gnome_init ();
|
||||
alarm_init ();
|
||||
|
||||
init_calendar ();
|
||||
|
||||
//g_log_set_always_fatal ((GLogLevelFlags) 0xFFFF);
|
||||
g_log_set_always_fatal (G_LOG_LEVEL_ERROR |
|
||||
G_LOG_LEVEL_CRITICAL |
|
||||
G_LOG_LEVEL_WARNING);
|
||||
|
||||
control_factory_init ();
|
||||
component_factory_init ();
|
||||
|
||||
bonobo_main ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1,3 +1,23 @@
|
||||
2000-05-25 Ettore Perazzoli <ettore@helixcode.com>
|
||||
|
||||
* main.c (main): Initialize the component factory.
|
||||
|
||||
* Makefile.am (evolution_mail_LDADD): Link with
|
||||
`evolution-shell-component.o' from the shell directory.
|
||||
|
||||
* evolution-mail.oafinfo: Updated with the
|
||||
Evolution::ShellComponent OAFIID.
|
||||
|
||||
* evolution-mail.gnorba: Updated with the
|
||||
Evolution::ShellComponent GOAD ID.
|
||||
|
||||
* folder-browser-factory.c (folder_browser_factory_new_control):
|
||||
New function; code moved out from `folder_browser_factory'.
|
||||
(folder_browser_factory): Use it.
|
||||
|
||||
* component-factory.c: New.
|
||||
* component-factory.h: New.
|
||||
|
||||
2000-05-24 Dan Winship <danw@helixcode.com>
|
||||
|
||||
* mail-ops.c (composer_send_cb): connect to and disconnect from
|
||||
|
||||
@ -25,4 +25,30 @@
|
||||
value="Evolution mail folder display component."/>
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component-factory:evolution-mail:0ea887d5-622b-4b8c-b525-18aa1cbe18a6"
|
||||
type="exe"
|
||||
location="evolution-mail">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:GNOME/GenericFactory:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Factory for the Evolution mail component."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component:evolution-mail:d3cb3ed6-a654-4337-8aa0-f443751d6d1b"
|
||||
type="factory"
|
||||
location="OAFIID:evolution-shell-component-factory:evolution-mail:0ea887d5-622b-4b8c-b525-18aa1cbe18a6">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Evolution/ShellComponent:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Evolution component for handling mail."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
</oaf_info>
|
||||
|
||||
@ -25,4 +25,30 @@
|
||||
value="Evolution mail folder display component."/>
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component-factory:evolution-mail:0ea887d5-622b-4b8c-b525-18aa1cbe18a6"
|
||||
type="exe"
|
||||
location="evolution-mail">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:GNOME/GenericFactory:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Factory for the Evolution mail component."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component:evolution-mail:d3cb3ed6-a654-4337-8aa0-f443751d6d1b"
|
||||
type="factory"
|
||||
location="OAFIID:evolution-shell-component-factory:evolution-mail:0ea887d5-622b-4b8c-b525-18aa1cbe18a6">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Evolution/ShellComponent:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Evolution component for handling mail."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
</oaf_info>
|
||||
|
||||
@ -12,6 +12,7 @@ INCLUDES = \
|
||||
-I$(top_srcdir) \
|
||||
-I$(top_srcdir)/camel \
|
||||
-I$(top_builddir)/shell \
|
||||
-I$(top_srcdir)/shell \
|
||||
$(BONOBO_HTML_GNOME_CFLAGS) \
|
||||
-DEVOLUTION_VERSION=\""$(VERSION)"\" \
|
||||
-DEVOLUTION_GLADEDIR=\""$(gladedir)"\" \
|
||||
@ -27,8 +28,17 @@ EVOLUTION_MAIL_CORBA_GENERATED = \
|
||||
Mail-skels.c \
|
||||
Mail-stubs.c
|
||||
|
||||
# FIXME We should make a libeshell library instead of this gross hack.
|
||||
SHELL_OBJS = \
|
||||
$(top_builddir)/shell/Evolution-common.o \
|
||||
$(top_builddir)/shell/Evolution-stubs.o \
|
||||
$(top_builddir)/shell/Evolution-skels.o \
|
||||
$(top_builddir)/shell/evolution-shell-component.o
|
||||
|
||||
evolution_mail_SOURCES = \
|
||||
$(EVOLUTION_MAIL_CORBA_GENERATED) \
|
||||
component-factory.c \
|
||||
component-factory.h \
|
||||
folder-browser.c \
|
||||
folder-browser.h \
|
||||
folder-browser-factory.c \
|
||||
@ -48,9 +58,7 @@ evolution_mail_SOURCES = \
|
||||
|
||||
|
||||
evolution_mail_LDADD = \
|
||||
../shell/Evolution-common.o \
|
||||
../shell/Evolution-stubs.o \
|
||||
../shell/Evolution-skels.o \
|
||||
$(SHELL_OBJS) \
|
||||
../composer/libcomposer.la \
|
||||
$(top_builddir)/widgets/e-paned/libepaned.a \
|
||||
../widgets/e-table/libetable.a \
|
||||
|
||||
112
mail/component-factory.c
Normal file
112
mail/component-factory.c
Normal file
@ -0,0 +1,112 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* component-factory.c
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <bonobo.h>
|
||||
|
||||
#include "evolution-shell-component.h"
|
||||
#include "folder-browser.h"
|
||||
#include "mail.h" /* YUCK FIXME */
|
||||
|
||||
#include "component-factory.h"
|
||||
|
||||
|
||||
#ifdef USING_OAF
|
||||
#define COMPONENT_FACTORY_ID "OAFIID:evolution-shell-component-factory:evolution-mail:0ea887d5-622b-4b8c-b525-18aa1cbe18a6"
|
||||
#else
|
||||
#define COMPONENT_FACTORY_ID "evolution-shell-component-factory:evolution-mail"
|
||||
#endif
|
||||
|
||||
static BonoboGenericFactory *factory = NULL;
|
||||
|
||||
static const EvolutionShellComponentFolderType folder_types[] = {
|
||||
{ "mail", "evolution-inbox.png" },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
||||
/* EvolutionShellComponent methods and signals. */
|
||||
|
||||
static BonoboControl *
|
||||
create_view (EvolutionShellComponent *shell_component,
|
||||
const char *physical_uri,
|
||||
void *closure)
|
||||
{
|
||||
BonoboControl *control;
|
||||
GtkWidget *folder_browser_widget;
|
||||
|
||||
control = folder_browser_factory_new_control ();
|
||||
|
||||
folder_browser_widget = bonobo_control_get_widget (control);
|
||||
|
||||
g_assert (folder_browser_widget != NULL);
|
||||
g_assert (IS_FOLDER_BROWSER (folder_browser_widget));
|
||||
|
||||
/* FIXME: This never fails. :-/ */
|
||||
folder_browser_set_uri (FOLDER_BROWSER (folder_browser_widget), physical_uri);
|
||||
|
||||
return control;
|
||||
}
|
||||
|
||||
static void
|
||||
owner_set_cb (EvolutionShellComponent *shell_component,
|
||||
Evolution_Shell shell_interface)
|
||||
{
|
||||
g_print ("evolution-mail: Yeeeh! We have an owner!\n"); /* FIXME */
|
||||
}
|
||||
|
||||
|
||||
/* The factory function. */
|
||||
|
||||
static BonoboObject *
|
||||
factory_fn (BonoboGenericFactory *factory,
|
||||
void *closure)
|
||||
{
|
||||
EvolutionShellComponent *shell_component;
|
||||
|
||||
shell_component = evolution_shell_component_new (folder_types, create_view, NULL);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (shell_component), "owner_set",
|
||||
GTK_SIGNAL_FUNC (owner_set_cb), NULL);
|
||||
|
||||
return BONOBO_OBJECT (shell_component);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
component_factory_init (void)
|
||||
{
|
||||
if (factory != NULL)
|
||||
return;
|
||||
|
||||
factory = bonobo_generic_factory_new (COMPONENT_FACTORY_ID, factory_fn, NULL);
|
||||
|
||||
if (factory == NULL) {
|
||||
e_notice (NULL, GNOME_MESSAGE_BOX_ERROR,
|
||||
_("Cannot initialize Evolution's mail component."));
|
||||
exit (1);
|
||||
}
|
||||
}
|
||||
29
mail/component-factory.h
Normal file
29
mail/component-factory.h
Normal file
@ -0,0 +1,29 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* component-factory.h
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifndef COMPONENT_FACTORY_H
|
||||
#define COMPONENT_FACTORY_H
|
||||
|
||||
void component_factory_init (void);
|
||||
|
||||
#endif
|
||||
@ -10,4 +10,14 @@ repo_id=IDL:BonoboControl/evolution-mail:1.0 IDL:GNOME/Control:1.0
|
||||
description=Evolution mail folder display component.
|
||||
location_info=control-factory:evolution-mail
|
||||
|
||||
[evolution-shell-component-factory:evolution-mail]
|
||||
type=exe
|
||||
repo_id=IDL:GNOME/GenericFactory:1.0
|
||||
description=Factory for the Evolution mail component.
|
||||
location_info=evolution-mail
|
||||
|
||||
[evolution-shell-component:evolution-mail]
|
||||
type=factory
|
||||
repo_id=IDL:Evolution/ShellComponent:1.0
|
||||
description=Evolution component for handling mail.
|
||||
location_info=evolution-shell-component-factory:evolution-mail
|
||||
|
||||
@ -25,4 +25,30 @@
|
||||
value="Evolution mail folder display component."/>
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component-factory:evolution-mail:0ea887d5-622b-4b8c-b525-18aa1cbe18a6"
|
||||
type="exe"
|
||||
location="evolution-mail">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:GNOME/GenericFactory:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Factory for the Evolution mail component."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
<oaf_server iid="OAFIID:evolution-shell-component:evolution-mail:d3cb3ed6-a654-4337-8aa0-f443751d6d1b"
|
||||
type="factory"
|
||||
location="OAFIID:evolution-shell-component-factory:evolution-mail:0ea887d5-622b-4b8c-b525-18aa1cbe18a6">
|
||||
|
||||
<oaf_attribute name="repo_ids" type="stringv">
|
||||
<item value="IDL:Evolution/ShellComponent:1.0"/>
|
||||
</oaf_attribute>
|
||||
|
||||
<oaf_attribute name="description" type="string"
|
||||
value="Evolution component for handling mail."/>
|
||||
|
||||
</oaf_server>
|
||||
|
||||
</oaf_info>
|
||||
|
||||
@ -127,13 +127,8 @@ control_destroy_cb (BonoboControl *control,
|
||||
gtk_object_destroy (GTK_OBJECT (folder_browser));
|
||||
}
|
||||
|
||||
/*
|
||||
* Creates the Folder Browser, wraps it in a Bonobo Control, and
|
||||
* sets the Bonobo Control properties to point to the Folder Browser
|
||||
* Properties
|
||||
*/
|
||||
static BonoboObject *
|
||||
folder_browser_factory (BonoboGenericFactory *factory, void *closure)
|
||||
BonoboControl *
|
||||
folder_browser_factory_new_control (void)
|
||||
{
|
||||
BonoboControl *control;
|
||||
GtkWidget *folder_browser;
|
||||
@ -160,7 +155,18 @@ folder_browser_factory (BonoboGenericFactory *factory, void *closure)
|
||||
bonobo_control_set_property_bag (control,
|
||||
FOLDER_BROWSER (folder_browser)->properties);
|
||||
|
||||
return BONOBO_OBJECT (control);
|
||||
return control;
|
||||
}
|
||||
|
||||
/*
|
||||
* Creates the Folder Browser, wraps it in a Bonobo Control, and
|
||||
* sets the Bonobo Control properties to point to the Folder Browser
|
||||
* Properties
|
||||
*/
|
||||
static BonoboObject *
|
||||
folder_browser_factory (BonoboGenericFactory *factory, void *closure)
|
||||
{
|
||||
return BONOBO_OBJECT (folder_browser_factory_new_control ());
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@ -22,8 +22,11 @@
|
||||
#include "camel/camel.h"
|
||||
#include "composer/e-msg-composer.h"
|
||||
|
||||
/* FIXME FIXME FIXME this sucks sucks sucks sucks */
|
||||
|
||||
/* folder-browser-factory */
|
||||
void folder_browser_factory_init (void);
|
||||
void folder_browser_factory_init (void);
|
||||
BonoboControl *folder_browser_factory_new_control (void);
|
||||
|
||||
/* mail-config */
|
||||
void mail_config_druid (void);
|
||||
|
||||
@ -6,12 +6,16 @@
|
||||
*
|
||||
* (C) 2000 Helix Code, Inc.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <gnome.h>
|
||||
#include <bonobo/bonobo-main.h>
|
||||
#include <glade/glade.h>
|
||||
|
||||
#include "e-util/e-gui-utils.h"
|
||||
#include "e-util/e-cursors.h"
|
||||
|
||||
#include "component-factory.h"
|
||||
#include "mail.h"
|
||||
|
||||
#ifdef USING_OAF
|
||||
@ -71,12 +75,9 @@ main (int argc, char *argv [])
|
||||
e_cursors_init ();
|
||||
|
||||
folder_browser_factory_init ();
|
||||
component_factory_init ();
|
||||
|
||||
bonobo_main ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -1,3 +1,58 @@
|
||||
2000-05-25 Ettore Perazzoli <ettore@helixcode.com>
|
||||
|
||||
* e-storage-set-view.c (e_storage_set_view_construct): Set the
|
||||
dotted line type again. Dotted is less butt-ugly than continuous.
|
||||
|
||||
* e-shell-view.c (show_error): Display page zero in the notebook.
|
||||
|
||||
* main.c (idle_cb): Renamed from `new_view_idle_cb'. Create the
|
||||
EShell object here, because now the shell depends on the GLib loop
|
||||
to be running for correct operation.
|
||||
(main): Don't create the EShell here.
|
||||
|
||||
* e-storage-set-view.c (get_pixmap_and_mask_for_folder): If the
|
||||
icon is not found, set the returned pixmap and mask to NULL.
|
||||
|
||||
* e-shell.c (e_shell_construct): Added precondition: @corba_object
|
||||
must be non-nil.
|
||||
(e_shell_new): Added precondition: @local_direcory must be
|
||||
non-null.
|
||||
|
||||
* evolution-shell-component.c: New.
|
||||
* evolution-shell-component.h: New.
|
||||
|
||||
* e-shell.c: New member `component_registry' in `EShellPrivate'.
|
||||
(init): Initialize to NULL.
|
||||
(destroy): Unref it.
|
||||
(setup_components): New function to set up the compnent registry
|
||||
and initialize the mail, calendar and addressbook components.
|
||||
(e_shell_construct): Call it.
|
||||
|
||||
* e-storage-set.c: Updated to use EFolderTypeRegistry.
|
||||
* e-storage-set.h: Likewise.
|
||||
* e-shortcuts.c: Likewise.
|
||||
* e-shortcuts.h: Likewise.
|
||||
* e-shell.c: Likewise.
|
||||
|
||||
* e-shell.h: Likewise.
|
||||
* e-shell-view.c: Likewise.
|
||||
* e-shortcuts-view.c: Likewise.
|
||||
* e-storage-set-view.c: Likewise.
|
||||
|
||||
* e-component-registry.c: New.
|
||||
* e-component-registry.h: New.
|
||||
|
||||
* e-folder-type-registry.c: New.
|
||||
* e-folder-type-registry.h: New.
|
||||
|
||||
* e-folder-type-repository.c: Removed.
|
||||
* e-folder-type-repository.h: Removed.
|
||||
|
||||
* Evolution-ShellComponent.idl: New struct `FolderType'; new type
|
||||
`FolderTypeList'. New attribute `supported_types'.
|
||||
(ShellComponent::set_owner): Renamed from `set_shell'.
|
||||
(ShellComponent::create_view): New.
|
||||
|
||||
2000-05-24 Christopher James Lahey <clahey@helixcode.com>
|
||||
|
||||
* e-shell-view.c: Was using the wrong include here.
|
||||
|
||||
@ -11,7 +11,25 @@
|
||||
#include <Bonobo.h>
|
||||
|
||||
module Evolution {
|
||||
interface Shell;
|
||||
|
||||
struct FolderType {
|
||||
string name;
|
||||
string icon_name;
|
||||
};
|
||||
|
||||
typedef sequence<FolderType> FolderTypeList;
|
||||
|
||||
interface ShellComponent : Bonobo::Unknown {
|
||||
void set_shell (in Shell shell);
|
||||
readonly attribute FolderTypeList supported_types;
|
||||
|
||||
/* FIXME can we use an attribute here? */
|
||||
exception AlreadyOwned {};
|
||||
void set_owner (in Shell shell)
|
||||
raises (AlreadyOwned);
|
||||
|
||||
exception NotFound {};
|
||||
Bonobo::Control create_view (in string physical_uri)
|
||||
raises (NotFound);
|
||||
};
|
||||
};
|
||||
|
||||
@ -33,8 +33,8 @@ evolution_SOURCES = \
|
||||
e-corba-storage.h \
|
||||
e-corba-storage-registry.c \
|
||||
e-corba-storage-registry.h \
|
||||
e-folder-type-repository.c \
|
||||
e-folder-type-repository.h \
|
||||
e-folder-type-registry.c \
|
||||
e-folder-type-registry.h \
|
||||
e-folder.c \
|
||||
e-folder.h \
|
||||
e-local-folder.c \
|
||||
@ -43,6 +43,8 @@ evolution_SOURCES = \
|
||||
e-local-storage.h \
|
||||
e-setup.c \
|
||||
e-setup.h \
|
||||
e-component-registry.h \
|
||||
e-component-registry.c \
|
||||
e-shell-constants.h \
|
||||
e-shell-utils.c \
|
||||
e-shell-utils.h \
|
||||
@ -64,6 +66,8 @@ evolution_SOURCES = \
|
||||
e-storage-watcher.h \
|
||||
e-storage.c \
|
||||
e-storage.h \
|
||||
evolution-shell-component.c \
|
||||
evolution-shell-component.h \
|
||||
main.c
|
||||
|
||||
Evolution-impl.o: Evolution.h
|
||||
|
||||
283
shell/e-component-registry.c
Normal file
283
shell/e-component-registry.c
Normal file
@ -0,0 +1,283 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* e-component-registry.c
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <gtk/gtkobject.h>
|
||||
#include <gtk/gtktypeutils.h>
|
||||
#include <bonobo.h>
|
||||
|
||||
#include "e-util/e-util.h"
|
||||
#include "e-shell-utils.h"
|
||||
|
||||
#include "Evolution.h"
|
||||
|
||||
#include "e-component-registry.h"
|
||||
|
||||
|
||||
#define PARENT_TYPE GTK_TYPE_OBJECT
|
||||
static GtkObjectClass *parent_class = NULL;
|
||||
|
||||
typedef struct _Component Component;
|
||||
|
||||
struct _Component {
|
||||
char *id;
|
||||
|
||||
BonoboObjectClient *client;
|
||||
|
||||
/* Names of the folder types we support (normal ASCII strings). */
|
||||
GList *folder_type_names;
|
||||
};
|
||||
|
||||
struct _EComponentRegistryPrivate {
|
||||
EShell *shell;
|
||||
|
||||
GHashTable *component_id_to_component;
|
||||
};
|
||||
|
||||
|
||||
/* Component information handling. */
|
||||
|
||||
static Component *
|
||||
component_new (const char *id,
|
||||
BonoboObjectClient *client)
|
||||
{
|
||||
Component *new;
|
||||
|
||||
bonobo_object_ref (BONOBO_OBJECT (client));
|
||||
|
||||
new = g_new (Component, 1);
|
||||
new->id = g_strdup (id);
|
||||
new->folder_type_names = NULL;
|
||||
new->client = client;
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
static void
|
||||
component_free (Component *component)
|
||||
{
|
||||
g_free (component->id);
|
||||
bonobo_object_unref (BONOBO_OBJECT (component->client));
|
||||
|
||||
e_free_string_list (component->folder_type_names);
|
||||
|
||||
g_free (component);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
register_type (EComponentRegistry *component_registry,
|
||||
const char *name,
|
||||
const char *icon_name,
|
||||
Component *handler)
|
||||
{
|
||||
EComponentRegistryPrivate *priv;
|
||||
EFolderTypeRegistry *folder_type_registry;
|
||||
|
||||
priv = component_registry->priv;
|
||||
|
||||
folder_type_registry = e_shell_get_folder_type_registry (priv->shell);
|
||||
g_assert (folder_type_registry != NULL);
|
||||
|
||||
if (! e_folder_type_registry_register_type (folder_type_registry, name, icon_name)) {
|
||||
g_warning ("Trying to register duplicate folder type -- %s", name);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
e_folder_type_registry_set_handler_for_type (folder_type_registry, name, handler->client);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
register_component (EComponentRegistry *component_registry,
|
||||
const char *id)
|
||||
{
|
||||
EComponentRegistryPrivate *priv;
|
||||
Evolution_ShellComponent component_corba_interface;
|
||||
Evolution_Shell shell_corba_interface;
|
||||
Evolution_FolderTypeList *supported_types;
|
||||
Component *component;
|
||||
BonoboObjectClient *client;
|
||||
CORBA_Environment ev;
|
||||
CORBA_unsigned_long i;
|
||||
|
||||
priv = component_registry->priv;
|
||||
|
||||
if (g_hash_table_lookup (priv->component_id_to_component, id) != NULL) {
|
||||
g_warning ("Trying to register component twice -- %s", id);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
client = bonobo_object_activate (id, 0);
|
||||
if (client == NULL)
|
||||
return FALSE;
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
component_corba_interface = bonobo_object_corba_objref (BONOBO_OBJECT (client));
|
||||
shell_corba_interface = bonobo_object_corba_objref (BONOBO_OBJECT (priv->shell));
|
||||
|
||||
Evolution_ShellComponent_set_owner (component_corba_interface, shell_corba_interface, &ev);
|
||||
if (ev._major != CORBA_NO_EXCEPTION) {
|
||||
bonobo_object_unref (BONOBO_OBJECT (client));
|
||||
CORBA_exception_free (&ev);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
supported_types = Evolution_ShellComponent__get_supported_types (component_corba_interface, &ev);
|
||||
if (ev._major != CORBA_NO_EXCEPTION || supported_types->_length == 0) {
|
||||
bonobo_object_unref (BONOBO_OBJECT (client));
|
||||
CORBA_exception_free (&ev);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
CORBA_exception_free (&ev);
|
||||
|
||||
component = component_new (id, client);
|
||||
g_hash_table_insert (priv->component_id_to_component, component->id, component);
|
||||
|
||||
for (i = 0; i < supported_types->_length; i++) {
|
||||
const Evolution_FolderType *type;
|
||||
|
||||
type = supported_types->_buffer + i;
|
||||
|
||||
if (! register_type (component_registry, type->name, type->icon_name, component)) {
|
||||
g_warning ("Cannot register type `%s' for component %s",
|
||||
type->name, component->id);
|
||||
} else {
|
||||
g_print ("Registered type for component -- (%s) %s\n",
|
||||
type->name, component->id);
|
||||
}
|
||||
}
|
||||
|
||||
CORBA_free (supported_types);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/* GtkObject methods. */
|
||||
|
||||
static void
|
||||
component_id_foreach_free (void *key,
|
||||
void *value,
|
||||
void *user_data)
|
||||
{
|
||||
Component *component;
|
||||
|
||||
component = (Component *) value;
|
||||
component_free (component);
|
||||
}
|
||||
|
||||
static void
|
||||
destroy (GtkObject *object)
|
||||
{
|
||||
EComponentRegistry *component_registry;
|
||||
EComponentRegistryPrivate *priv;
|
||||
|
||||
component_registry = E_COMPONENT_REGISTRY (object);
|
||||
priv = component_registry->priv;
|
||||
|
||||
bonobo_object_unref (BONOBO_OBJECT (priv->shell));
|
||||
|
||||
g_hash_table_foreach (priv->component_id_to_component, component_id_foreach_free, NULL);
|
||||
g_hash_table_destroy (priv->component_id_to_component);
|
||||
|
||||
g_free (priv);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
class_init (EComponentRegistryClass *klass)
|
||||
{
|
||||
GtkObjectClass *object_class;
|
||||
|
||||
object_class = GTK_OBJECT_CLASS (klass);
|
||||
object_class->destroy = destroy;
|
||||
|
||||
parent_class = gtk_type_class (gtk_object_get_type ());
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
init (EComponentRegistry *component_registry)
|
||||
{
|
||||
EComponentRegistryPrivate *priv;
|
||||
|
||||
priv = g_new (EComponentRegistryPrivate, 1);
|
||||
priv->shell = NULL;
|
||||
priv->component_id_to_component = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
|
||||
component_registry->priv = priv;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
e_component_registry_construct (EComponentRegistry *component_registry,
|
||||
EShell *shell)
|
||||
{
|
||||
EComponentRegistryPrivate *priv;
|
||||
|
||||
g_return_if_fail (component_registry != NULL);
|
||||
g_return_if_fail (E_IS_COMPONENT_REGISTRY (component_registry));
|
||||
g_return_if_fail (shell != NULL);
|
||||
g_return_if_fail (E_IS_SHELL (shell));
|
||||
|
||||
priv = component_registry->priv;
|
||||
|
||||
bonobo_object_ref (BONOBO_OBJECT (shell));
|
||||
priv->shell = shell;
|
||||
}
|
||||
|
||||
EComponentRegistry *
|
||||
e_component_registry_new (EShell *shell)
|
||||
{
|
||||
EComponentRegistry *component_registry;
|
||||
|
||||
g_return_val_if_fail (shell != NULL, NULL);
|
||||
g_return_val_if_fail (E_IS_SHELL (shell), NULL);
|
||||
|
||||
component_registry = gtk_type_new (e_component_registry_get_type ());
|
||||
e_component_registry_construct (component_registry, shell);
|
||||
|
||||
return component_registry;
|
||||
}
|
||||
|
||||
|
||||
gboolean
|
||||
e_component_registry_register_component (EComponentRegistry *component_registry,
|
||||
const char *id)
|
||||
{
|
||||
g_return_val_if_fail (component_registry != NULL, FALSE);
|
||||
g_return_val_if_fail (E_IS_COMPONENT_REGISTRY (component_registry), FALSE);
|
||||
g_return_val_if_fail (id != NULL, FALSE);
|
||||
|
||||
return register_component (component_registry, id);
|
||||
}
|
||||
|
||||
|
||||
E_MAKE_TYPE (e_component_registry, "EComponentRegistry", EComponentRegistry,
|
||||
class_init, init, PARENT_TYPE)
|
||||
74
shell/e-component-registry.h
Normal file
74
shell/e-component-registry.h
Normal file
@ -0,0 +1,74 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* e-component-registry.h
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifndef __E_COMPONENT_REGISTRY_H__
|
||||
#define __E_COMPONENT_REGISTRY_H__
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <gtk/gtkobject.h>
|
||||
|
||||
#include "e-shell.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#pragma }
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define E_TYPE_COMPONENT_REGISTRY (e_component_registry_get_type ())
|
||||
#define E_COMPONENT_REGISTRY(obj) (GTK_CHECK_CAST ((obj), E_TYPE_COMPONENT_REGISTRY, EComponentRegistry))
|
||||
#define E_COMPONENT_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_COMPONENT_REGISTRY, EComponentRegistryClass))
|
||||
#define E_IS_COMPONENT_REGISTRY(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_COMPONENT_REGISTRY))
|
||||
#define E_IS_COMPONENT_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_COMPONENT_REGISTRY))
|
||||
|
||||
|
||||
typedef struct _EComponentRegistry EComponentRegistry;
|
||||
typedef struct _EComponentRegistryPrivate EComponentRegistryPrivate;
|
||||
typedef struct _EComponentRegistryClass EComponentRegistryClass;
|
||||
|
||||
struct _EComponentRegistry {
|
||||
GtkObject parent;
|
||||
|
||||
EComponentRegistryPrivate *priv;
|
||||
};
|
||||
|
||||
struct _EComponentRegistryClass {
|
||||
GtkObjectClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
GtkType e_component_registry_get_type (void);
|
||||
void e_component_registry_construct (EComponentRegistry *component_registry,
|
||||
EShell *shell);
|
||||
EComponentRegistry *e_component_registry_new (EShell *shell);
|
||||
|
||||
gboolean e_component_registry_register_component (EComponentRegistry *component_registry,
|
||||
const char *id);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __E_COMPONENT_REGISTRY_H__ */
|
||||
336
shell/e-folder-type-registry.c
Normal file
336
shell/e-folder-type-registry.c
Normal file
@ -0,0 +1,336 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* e-folder-type-registry.c
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <glib.h>
|
||||
#include <gtk/gtktypeutils.h>
|
||||
|
||||
#include "e-util/e-util.h"
|
||||
|
||||
#include "e-shell-utils.h"
|
||||
|
||||
#include "e-folder-type-registry.h"
|
||||
|
||||
|
||||
#define PARENT_TYPE GTK_TYPE_OBJECT
|
||||
static GtkObjectClass *parent_class = NULL;
|
||||
|
||||
struct _FolderType {
|
||||
char *name;
|
||||
char *icon_name;
|
||||
|
||||
BonoboObjectClient *handler;
|
||||
|
||||
/* The icon, standard (48x48) and mini (16x16) versions. */
|
||||
GdkPixbuf *icon_pixbuf;
|
||||
GdkPixbuf *mini_icon_pixbuf;
|
||||
};
|
||||
typedef struct _FolderType FolderType;
|
||||
|
||||
struct _EFolderTypeRegistryPrivate {
|
||||
GHashTable *name_to_type;
|
||||
};
|
||||
|
||||
|
||||
/* FolderType handling. */
|
||||
|
||||
static FolderType *
|
||||
folder_type_new (const char *name,
|
||||
const char *icon_name)
|
||||
{
|
||||
FolderType *new;
|
||||
char *icon_path;
|
||||
|
||||
new = g_new (FolderType, 1);
|
||||
|
||||
new->name = g_strdup (name);
|
||||
new->icon_name = g_strdup (icon_name);
|
||||
new->handler = NULL;
|
||||
|
||||
icon_path = e_shell_get_icon_path (icon_name, FALSE);
|
||||
if (icon_path == NULL)
|
||||
new->icon_pixbuf = NULL;
|
||||
else
|
||||
new->icon_pixbuf = gdk_pixbuf_new_from_file (icon_path);
|
||||
|
||||
g_free (icon_path);
|
||||
|
||||
icon_path = e_shell_get_icon_path (icon_name, TRUE);
|
||||
if (icon_path != NULL) {
|
||||
new->mini_icon_pixbuf = gdk_pixbuf_new_from_file (icon_path);
|
||||
} else {
|
||||
if (new->icon_pixbuf != NULL)
|
||||
new->mini_icon_pixbuf = gdk_pixbuf_ref (new->icon_pixbuf);
|
||||
else
|
||||
new->mini_icon_pixbuf = NULL;
|
||||
}
|
||||
|
||||
g_free (icon_path);
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
static void
|
||||
folder_type_free (FolderType *folder_type)
|
||||
{
|
||||
g_free (folder_type->name);
|
||||
g_free (folder_type->icon_name);
|
||||
|
||||
if (folder_type->icon_pixbuf != NULL)
|
||||
gdk_pixbuf_unref (folder_type->icon_pixbuf);
|
||||
if (folder_type->mini_icon_pixbuf != NULL)
|
||||
gdk_pixbuf_unref (folder_type->mini_icon_pixbuf);
|
||||
|
||||
if (folder_type->handler != NULL)
|
||||
bonobo_object_unref (BONOBO_OBJECT (folder_type->handler));
|
||||
|
||||
g_free (folder_type);
|
||||
}
|
||||
|
||||
static FolderType *
|
||||
get_folder_type (EFolderTypeRegistry *folder_type_registry,
|
||||
const char *type_name)
|
||||
{
|
||||
EFolderTypeRegistryPrivate *priv;
|
||||
|
||||
priv = folder_type_registry->priv;
|
||||
|
||||
return g_hash_table_lookup (priv->name_to_type, type_name);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
register_folder_type (EFolderTypeRegistry *folder_type_registry,
|
||||
const char *name,
|
||||
const char *icon_name)
|
||||
{
|
||||
EFolderTypeRegistryPrivate *priv;
|
||||
FolderType *folder_type;
|
||||
|
||||
priv = folder_type_registry->priv;
|
||||
|
||||
/* Make sure we don't add the same type twice. */
|
||||
if (get_folder_type (folder_type_registry, name) != NULL)
|
||||
return FALSE;
|
||||
|
||||
folder_type = folder_type_new (name, icon_name);
|
||||
g_hash_table_insert (priv->name_to_type, folder_type->name, folder_type);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
set_handler (EFolderTypeRegistry *folder_type_registry,
|
||||
const char *name,
|
||||
BonoboObjectClient *handler)
|
||||
{
|
||||
EFolderTypeRegistryPrivate *priv;
|
||||
FolderType *folder_type;
|
||||
|
||||
priv = folder_type_registry->priv;
|
||||
|
||||
folder_type = get_folder_type (folder_type_registry, name);
|
||||
if (folder_type == NULL)
|
||||
return FALSE;
|
||||
if (folder_type->handler != NULL) {
|
||||
g_warning ("Folder type already has a handler -- %s", folder_type->name);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bonobo_object_ref (BONOBO_OBJECT (handler));
|
||||
folder_type->handler = handler;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/* GtkObject methods. */
|
||||
|
||||
static void
|
||||
hash_forall_free_folder_type (gpointer key,
|
||||
gpointer value,
|
||||
gpointer data)
|
||||
{
|
||||
FolderType *folder_type;
|
||||
|
||||
folder_type = (FolderType *) value;
|
||||
folder_type_free (folder_type);
|
||||
}
|
||||
|
||||
static void
|
||||
destroy (GtkObject *object)
|
||||
{
|
||||
EFolderTypeRegistry *folder_type_registry;
|
||||
EFolderTypeRegistryPrivate *priv;
|
||||
|
||||
folder_type_registry = E_FOLDER_TYPE_REGISTRY (object);
|
||||
priv = folder_type_registry->priv;
|
||||
|
||||
g_hash_table_foreach (priv->name_to_type, hash_forall_free_folder_type, NULL);
|
||||
g_hash_table_destroy (priv->name_to_type);
|
||||
|
||||
g_free (priv);
|
||||
|
||||
(* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
class_init (EFolderTypeRegistryClass *class)
|
||||
{
|
||||
GtkObjectClass *object_class;
|
||||
|
||||
object_class = GTK_OBJECT_CLASS (class);
|
||||
object_class->destroy = destroy;
|
||||
|
||||
parent_class = gtk_type_class (gtk_object_get_type ());
|
||||
}
|
||||
|
||||
static void
|
||||
init (EFolderTypeRegistry *folder_type_registry)
|
||||
{
|
||||
EFolderTypeRegistryPrivate *priv;
|
||||
|
||||
priv = g_new (EFolderTypeRegistryPrivate, 1);
|
||||
priv->name_to_type = g_hash_table_new (g_str_hash, g_str_equal);
|
||||
|
||||
folder_type_registry->priv = priv;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
e_folder_type_registry_construct (EFolderTypeRegistry *folder_type_registry)
|
||||
{
|
||||
g_return_if_fail (folder_type_registry != NULL);
|
||||
g_return_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry));
|
||||
|
||||
GTK_OBJECT_UNSET_FLAGS (GTK_OBJECT (folder_type_registry), GTK_FLOATING);
|
||||
}
|
||||
|
||||
EFolderTypeRegistry *
|
||||
e_folder_type_registry_new (void)
|
||||
{
|
||||
EFolderTypeRegistry *new;
|
||||
|
||||
new = gtk_type_new (e_folder_type_registry_get_type ());
|
||||
|
||||
e_folder_type_registry_construct (new);
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
|
||||
gboolean
|
||||
e_folder_type_registry_register_type (EFolderTypeRegistry *folder_type_registry,
|
||||
const char *type_name,
|
||||
const char *icon_name)
|
||||
{
|
||||
g_return_val_if_fail (folder_type_registry != NULL, FALSE);
|
||||
g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), FALSE);
|
||||
g_return_val_if_fail (type_name != NULL, FALSE);
|
||||
g_return_val_if_fail (icon_name != NULL, FALSE);
|
||||
|
||||
return register_folder_type (folder_type_registry, type_name, icon_name);
|
||||
}
|
||||
|
||||
gboolean
|
||||
e_folder_type_registry_set_handler_for_type (EFolderTypeRegistry *folder_type_registry,
|
||||
const char *type_name,
|
||||
BonoboObjectClient *handler)
|
||||
{
|
||||
g_return_val_if_fail (folder_type_registry != NULL, FALSE);
|
||||
g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), FALSE);
|
||||
g_return_val_if_fail (handler != NULL, FALSE);
|
||||
g_return_val_if_fail (BONOBO_IS_OBJECT_CLIENT (handler), FALSE);
|
||||
|
||||
return set_handler (folder_type_registry, type_name, handler);
|
||||
}
|
||||
|
||||
|
||||
|
||||
const char *
|
||||
e_folder_type_registry_get_icon_name_for_type (EFolderTypeRegistry *folder_type_registry,
|
||||
const char *type_name)
|
||||
{
|
||||
const FolderType *folder_type;
|
||||
|
||||
g_return_val_if_fail (folder_type_registry != NULL, NULL);
|
||||
g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
|
||||
g_return_val_if_fail (type_name != NULL, NULL);
|
||||
|
||||
folder_type = get_folder_type (folder_type_registry, type_name);
|
||||
if (folder_type == NULL) {
|
||||
g_warning ("%s: Unknown type -- %s", __FUNCTION__, type_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return folder_type->icon_name;
|
||||
}
|
||||
|
||||
GdkPixbuf *
|
||||
e_folder_type_registry_get_icon_for_type (EFolderTypeRegistry *folder_type_registry,
|
||||
const char *type_name,
|
||||
gboolean mini)
|
||||
{
|
||||
const FolderType *folder_type;
|
||||
|
||||
g_return_val_if_fail (folder_type_registry != NULL, NULL);
|
||||
g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
|
||||
g_return_val_if_fail (type_name != NULL, NULL);
|
||||
|
||||
folder_type = get_folder_type (folder_type_registry, type_name);
|
||||
if (folder_type == NULL) {
|
||||
g_warning ("%s: Unknown type -- %s", __FUNCTION__, type_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (mini)
|
||||
return folder_type->mini_icon_pixbuf;
|
||||
else
|
||||
return folder_type->icon_pixbuf;
|
||||
}
|
||||
|
||||
BonoboObjectClient *
|
||||
e_folder_type_registry_get_handler_for_type (EFolderTypeRegistry *folder_type_registry,
|
||||
const char *type_name)
|
||||
{
|
||||
const FolderType *folder_type;
|
||||
|
||||
g_return_val_if_fail (folder_type_registry != NULL, NULL);
|
||||
g_return_val_if_fail (E_IS_FOLDER_TYPE_REGISTRY (folder_type_registry), NULL);
|
||||
g_return_val_if_fail (type_name != NULL, NULL);
|
||||
|
||||
folder_type = get_folder_type (folder_type_registry, type_name);
|
||||
if (folder_type == NULL) {
|
||||
g_warning ("%s: Unknown type -- %s", __FUNCTION__, type_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return folder_type->handler;
|
||||
}
|
||||
|
||||
|
||||
E_MAKE_TYPE (e_folder_type_registry, "EFolderTypeRegistry", EFolderTypeRegistry,
|
||||
class_init, init, PARENT_TYPE)
|
||||
86
shell/e-folder-type-registry.h
Normal file
86
shell/e-folder-type-registry.h
Normal file
@ -0,0 +1,86 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* e-folder-type-registry.h
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifndef _E_FOLDER_TYPE_REGISTRY_H_
|
||||
#define _E_FOLDER_TYPE_REGISTRY_H_
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <gtk/gtkobject.h>
|
||||
#include <gdk-pixbuf/gdk-pixbuf.h>
|
||||
|
||||
#include <bonobo/bonobo-object-client.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#pragma }
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define E_TYPE_FOLDER_TYPE_REGISTRY (e_folder_type_registry_get_type ())
|
||||
#define E_FOLDER_TYPE_REGISTRY(obj) (GTK_CHECK_CAST ((obj), E_TYPE_FOLDER_TYPE_REGISTRY, EFolderTypeRegistry))
|
||||
#define E_FOLDER_TYPE_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), E_TYPE_FOLDER_TYPE_REGISTRY, EFolderTypeRegistryClass))
|
||||
#define E_IS_FOLDER_TYPE_REGISTRY(obj) (GTK_CHECK_TYPE ((obj), E_TYPE_FOLDER_TYPE_REGISTRY))
|
||||
#define E_IS_FOLDER_TYPE_REGISTRY_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), E_TYPE_FOLDER_TYPE_REGISTRY))
|
||||
|
||||
|
||||
typedef struct _EFolderTypeRegistry EFolderTypeRegistry;
|
||||
typedef struct _EFolderTypeRegistryPrivate EFolderTypeRegistryPrivate;
|
||||
typedef struct _EFolderTypeRegistryClass EFolderTypeRegistryClass;
|
||||
|
||||
struct _EFolderTypeRegistry {
|
||||
GtkObject parent;
|
||||
|
||||
EFolderTypeRegistryPrivate *priv;
|
||||
};
|
||||
|
||||
struct _EFolderTypeRegistryClass {
|
||||
GtkObjectClass parent_class;
|
||||
};
|
||||
|
||||
|
||||
GtkType e_folder_type_registry_get_type (void);
|
||||
void e_folder_type_registry_construct (EFolderTypeRegistry *folder_type_registry);
|
||||
EFolderTypeRegistry *e_folder_type_registry_new (void);
|
||||
|
||||
gboolean e_folder_type_registry_register_type (EFolderTypeRegistry *folder_type_registry,
|
||||
const char *type_name,
|
||||
const char *icon_name);
|
||||
gboolean e_folder_type_registry_set_handler_for_type (EFolderTypeRegistry *folder_type_registry,
|
||||
const char *type_name,
|
||||
BonoboObjectClient *handler);
|
||||
|
||||
GdkPixbuf *e_folder_type_registry_get_icon_for_type (EFolderTypeRegistry *folder_type_registry,
|
||||
const char *type_name,
|
||||
gboolean mini);
|
||||
const char *e_folder_type_registry_get_icon_name_for_type (EFolderTypeRegistry *folder_type_registry,
|
||||
const char *type_name);
|
||||
BonoboObjectClient *e_folder_type_registry_get_handler_for_type (EFolderTypeRegistry *folder_type_registry,
|
||||
const char *type_name);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* _E_FOLDER_TYPE_REGISTRY_H_ */
|
||||
@ -117,18 +117,18 @@ setup_menus (EShellView *shell_view)
|
||||
}
|
||||
|
||||
static gboolean
|
||||
bonobo_widget_is_dead (BonoboWidget *bw)
|
||||
bonobo_widget_is_dead (BonoboWidget *bonobo_widget)
|
||||
{
|
||||
BonoboObject *boc = BONOBO_OBJECT (bonobo_widget_get_server (bw));
|
||||
CORBA_Object obj = bonobo_object_corba_objref (boc);
|
||||
|
||||
BonoboControlFrame *control_frame;
|
||||
CORBA_Object corba_object;
|
||||
CORBA_Environment ev;
|
||||
|
||||
gboolean is_dead = FALSE;
|
||||
gboolean is_dead;
|
||||
|
||||
control_frame = bonobo_widget_get_control_frame (bonobo_widget);
|
||||
corba_object = bonobo_control_frame_get_control (control_frame);
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
if (CORBA_Object_non_existent(obj, &ev))
|
||||
is_dead = TRUE;
|
||||
is_dead = CORBA_Object_non_existent (corba_object, &ev);
|
||||
CORBA_exception_free (&ev);
|
||||
|
||||
return is_dead;
|
||||
@ -446,11 +446,10 @@ set_icon (EShellView *shell_view,
|
||||
if (type == NULL) {
|
||||
icon_path = NULL;
|
||||
} else {
|
||||
EFolderTypeRepository *folder_type_repository;
|
||||
EFolderTypeRegistry *folder_type_registry;
|
||||
|
||||
folder_type_repository = e_shell_get_folder_type_repository (priv->shell);
|
||||
icon_name = e_folder_type_repository_get_icon_name_for_type (folder_type_repository,
|
||||
type);
|
||||
folder_type_registry = e_shell_get_folder_type_registry (priv->shell);
|
||||
icon_name = e_folder_type_registry_get_icon_name_for_type (folder_type_registry, type);
|
||||
if (icon_name == NULL)
|
||||
icon_path = NULL;
|
||||
else
|
||||
@ -550,6 +549,7 @@ show_error (EShellView *shell_view,
|
||||
{
|
||||
EShellViewPrivate *priv;
|
||||
GtkWidget *label;
|
||||
GtkNotebook *notebook;
|
||||
char *s;
|
||||
|
||||
priv = shell_view->priv;
|
||||
@ -560,25 +560,30 @@ show_error (EShellView *shell_view,
|
||||
|
||||
gtk_widget_show (label);
|
||||
|
||||
gtk_notebook_remove_page (GTK_NOTEBOOK (priv->notebook), 0);
|
||||
gtk_notebook_prepend_page (GTK_NOTEBOOK (priv->notebook), label, NULL);
|
||||
notebook = GTK_NOTEBOOK (priv->notebook);
|
||||
|
||||
gtk_notebook_remove_page (notebook, 0);
|
||||
gtk_notebook_prepend_page (notebook, label, NULL);
|
||||
gtk_notebook_set_page (notebook, 0);
|
||||
}
|
||||
|
||||
/* Create a new view for @uri with @control. It assumes a view for @uri does
|
||||
not exist yet. */
|
||||
/* Create a new view for @uri with @control. It assumes a view for @uri does not exist yet. */
|
||||
static GtkWidget *
|
||||
get_control_for_uri (EShellView *shell_view,
|
||||
const char *uri)
|
||||
{
|
||||
EShellViewPrivate *priv;
|
||||
EFolderTypeRepository *folder_type_repository;
|
||||
EFolderTypeRegistry *folder_type_registry;
|
||||
EStorageSet *storage_set;
|
||||
EFolder *folder;
|
||||
Bonobo_UIHandler corba_uih;
|
||||
const char *control_id;
|
||||
BonoboObjectClient *handler_client;
|
||||
Bonobo_Control corba_control;
|
||||
Evolution_ShellComponent handler;
|
||||
const char *path;
|
||||
const char *folder_type;
|
||||
GtkWidget *control;
|
||||
CORBA_Environment ev;
|
||||
|
||||
priv = shell_view->priv;
|
||||
|
||||
@ -591,7 +596,7 @@ get_control_for_uri (EShellView *shell_view,
|
||||
return NULL;
|
||||
|
||||
storage_set = e_shell_get_storage_set (priv->shell);
|
||||
folder_type_repository = e_shell_get_folder_type_repository (priv->shell);
|
||||
folder_type_registry = e_shell_get_folder_type_registry (priv->shell);
|
||||
|
||||
folder = e_storage_set_get_folder (storage_set, path);
|
||||
if (folder == NULL)
|
||||
@ -601,20 +606,26 @@ get_control_for_uri (EShellView *shell_view,
|
||||
if (folder_type == NULL)
|
||||
return NULL;
|
||||
|
||||
control_id = e_folder_type_repository_get_control_id_for_type (folder_type_repository,
|
||||
folder_type);
|
||||
if (control_id == NULL)
|
||||
handler_client = e_folder_type_registry_get_handler_for_type (folder_type_registry, folder_type);
|
||||
if (handler_client == NULL)
|
||||
return NULL;
|
||||
|
||||
handler = bonobo_object_corba_objref (BONOBO_OBJECT (handler_client));
|
||||
if (handler_client == CORBA_OBJECT_NIL)
|
||||
return NULL;
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
corba_control = Evolution_ShellComponent_create_view (handler, e_folder_get_physical_uri (folder), &ev);
|
||||
if (ev._major != CORBA_NO_EXCEPTION) {
|
||||
CORBA_exception_free (&ev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CORBA_exception_free (&ev);
|
||||
|
||||
corba_uih = bonobo_object_corba_objref (BONOBO_OBJECT (priv->uih));
|
||||
control = bonobo_widget_new_control (control_id, corba_uih);
|
||||
|
||||
if (control == NULL)
|
||||
return NULL;
|
||||
|
||||
bonobo_widget_set_property (BONOBO_WIDGET (control),
|
||||
"folder_uri", e_folder_get_physical_uri (folder),
|
||||
NULL);
|
||||
control = bonobo_widget_new_control_from_objref (corba_control, corba_uih);
|
||||
|
||||
return control;
|
||||
}
|
||||
@ -627,6 +638,8 @@ show_existing_view (EShellView *shell_view,
|
||||
EShellViewPrivate *priv;
|
||||
int notebook_page;
|
||||
|
||||
g_print ("Already have view for %s\n", uri);
|
||||
|
||||
priv = shell_view->priv;
|
||||
|
||||
notebook_page = gtk_notebook_page_num (GTK_NOTEBOOK (priv->notebook), control);
|
||||
|
||||
@ -32,8 +32,9 @@
|
||||
|
||||
#include "e-util/e-util.h"
|
||||
|
||||
#include "e-component-registry.h"
|
||||
#include "e-corba-storage-registry.h"
|
||||
#include "e-folder-type-repository.h"
|
||||
#include "e-folder-type-registry.h"
|
||||
#include "e-local-storage.h"
|
||||
#include "e-shell-view.h"
|
||||
#include "e-shortcuts.h"
|
||||
@ -52,14 +53,30 @@ struct _EShellPrivate {
|
||||
|
||||
EStorageSet *storage_set;
|
||||
EShortcuts *shortcuts;
|
||||
EFolderTypeRepository *folder_type_repository;
|
||||
EFolderTypeRegistry *folder_type_registry;
|
||||
|
||||
EComponentRegistry *component_registry;
|
||||
|
||||
ECorbaStorageRegistry *corba_storage_registry;
|
||||
};
|
||||
|
||||
|
||||
/* Constants. */
|
||||
|
||||
#define SHORTCUTS_FILE_NAME "shortcuts.xml"
|
||||
#define LOCAL_STORAGE_DIRECTORY "local"
|
||||
|
||||
#ifdef USING_OAF
|
||||
#define MAIL_COMPONENT_ID "OAFIID:evolution-shell-component:evolution-mail:d3cb3ed6-a654-4337-8aa0-f443751d6d1b"
|
||||
#define CALENDAR_COMPONENT_ID "OAFIID:evolution-shell-component:evolution-calendar:2eb9eb63-d305-4918-9c35-faae5db19e51"
|
||||
#define ADDRESSBOOK_COMPONENT_ID "OAFIID:evolution-shell-component:addressbook:b7a26547-7014-4bb5-98ab-2bcac2bb55ca"
|
||||
#else
|
||||
#define MAIL_COMPONENT_ID "evolution-shell-component:evolution-mail"
|
||||
#define CALENDAR_COMPONENT_ID "evolution-shell-component:evolution-calendar"
|
||||
#define ADDRESSBOOK_COMPONENT_ID "evolution-shell-component:addressbook"
|
||||
#endif
|
||||
|
||||
|
||||
enum {
|
||||
NO_VIEWS_LEFT,
|
||||
LAST_SIGNAL
|
||||
@ -143,14 +160,38 @@ setup_storages (EShell *shell)
|
||||
}
|
||||
g_free (local_storage_path);
|
||||
|
||||
g_assert (shell->priv->folder_type_repository);
|
||||
g_assert (shell->priv->folder_type_registry);
|
||||
|
||||
priv->storage_set = e_storage_set_new (shell->priv->folder_type_repository);
|
||||
priv->storage_set = e_storage_set_new (shell->priv->folder_type_registry);
|
||||
e_storage_set_add_storage (priv->storage_set, local_storage);
|
||||
|
||||
return setup_corba_storages (shell);
|
||||
}
|
||||
|
||||
|
||||
/* Initialization of the components. */
|
||||
|
||||
static void
|
||||
setup_components (EShell *shell)
|
||||
{
|
||||
EShellPrivate *priv;
|
||||
|
||||
priv = shell->priv;
|
||||
|
||||
priv->component_registry = e_component_registry_new (shell);
|
||||
|
||||
/* FIXME: Hardcoded for now. */
|
||||
|
||||
if (! e_component_registry_register_component (priv->component_registry, MAIL_COMPONENT_ID))
|
||||
g_warning ("Cannot activate mail component -- %s", MAIL_COMPONENT_ID);
|
||||
|
||||
if (! e_component_registry_register_component (priv->component_registry, CALENDAR_COMPONENT_ID))
|
||||
g_warning ("Cannot activate calendar component -- %s", CALENDAR_COMPONENT_ID);
|
||||
|
||||
if (! e_component_registry_register_component (priv->component_registry, ADDRESSBOOK_COMPONENT_ID))
|
||||
g_warning ("Cannot activate addressbook component -- %s", ADDRESSBOOK_COMPONENT_ID);
|
||||
}
|
||||
|
||||
|
||||
/* EShellView destruction callback. */
|
||||
|
||||
@ -188,8 +229,11 @@ destroy (GtkObject *object)
|
||||
if (priv->shortcuts != NULL)
|
||||
gtk_object_unref (GTK_OBJECT (priv->shortcuts));
|
||||
|
||||
if (priv->folder_type_repository != NULL)
|
||||
gtk_object_unref (GTK_OBJECT (priv->folder_type_repository));
|
||||
if (priv->folder_type_registry != NULL)
|
||||
gtk_object_unref (GTK_OBJECT (priv->folder_type_registry));
|
||||
|
||||
if (priv->component_registry != NULL)
|
||||
gtk_object_unref (GTK_OBJECT (priv->component_registry));
|
||||
|
||||
for (p = priv->views; p != NULL; p = p->next) {
|
||||
EShellView *view;
|
||||
@ -269,7 +313,8 @@ init (EShell *shell)
|
||||
priv->local_directory = NULL;
|
||||
priv->storage_set = NULL;
|
||||
priv->shortcuts = NULL;
|
||||
priv->folder_type_repository = NULL;
|
||||
priv->component_registry = NULL;
|
||||
priv->folder_type_registry = NULL;
|
||||
priv->corba_storage_registry = NULL;
|
||||
|
||||
shell->priv = priv;
|
||||
@ -286,6 +331,7 @@ e_shell_construct (EShell *shell,
|
||||
|
||||
g_return_if_fail (shell != NULL);
|
||||
g_return_if_fail (E_IS_SHELL (shell));
|
||||
g_return_if_fail (corba_object != CORBA_OBJECT_NIL);
|
||||
g_return_if_fail (local_directory != NULL);
|
||||
g_return_if_fail (g_path_is_absolute (local_directory));
|
||||
|
||||
@ -294,12 +340,16 @@ e_shell_construct (EShell *shell,
|
||||
priv = shell->priv;
|
||||
|
||||
priv->local_directory = g_strdup (local_directory);
|
||||
priv->folder_type_repository = e_folder_type_repository_new ();
|
||||
priv->folder_type_registry = e_folder_type_registry_new ();
|
||||
|
||||
/* Storages must be set up before the components, because otherwise components
|
||||
cannot register their own storages. */
|
||||
if (! setup_storages (shell))
|
||||
return;
|
||||
|
||||
priv->shortcuts = e_shortcuts_new (priv->storage_set, priv->folder_type_repository);
|
||||
setup_components (shell);
|
||||
|
||||
priv->shortcuts = e_shortcuts_new (priv->storage_set, priv->folder_type_registry);
|
||||
|
||||
shortcut_path = g_concat_dir_and_file (local_directory, "shortcuts.xml");
|
||||
|
||||
@ -321,6 +371,9 @@ e_shell_new (const char *local_directory)
|
||||
Evolution_Shell corba_object;
|
||||
POA_Evolution_Shell *servant;
|
||||
|
||||
g_return_val_if_fail (local_directory != NULL, NULL);
|
||||
g_return_val_if_fail (*local_directory != '\0', NULL);
|
||||
|
||||
servant = create_servant ();
|
||||
if (servant == NULL)
|
||||
return NULL;
|
||||
@ -382,13 +435,13 @@ e_shell_get_storage_set (EShell *shell)
|
||||
return shell->priv->storage_set;
|
||||
}
|
||||
|
||||
EFolderTypeRepository *
|
||||
e_shell_get_folder_type_repository (EShell *shell)
|
||||
EFolderTypeRegistry *
|
||||
e_shell_get_folder_type_registry (EShell *shell)
|
||||
{
|
||||
g_return_val_if_fail (shell != NULL, NULL);
|
||||
g_return_val_if_fail (E_IS_SHELL (shell), NULL);
|
||||
|
||||
return shell->priv->folder_type_repository;
|
||||
return shell->priv->folder_type_registry;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -62,20 +62,20 @@ struct _EShellClass {
|
||||
};
|
||||
|
||||
|
||||
GtkType e_shell_get_type (void);
|
||||
void e_shell_construct (EShell *shell,
|
||||
Evolution_Shell corba_object,
|
||||
const char *local_directory);
|
||||
EShell *e_shell_new (const char *local_directory);
|
||||
GtkType e_shell_get_type (void);
|
||||
void e_shell_construct (EShell *shell,
|
||||
Evolution_Shell corba_object,
|
||||
const char *local_directory);
|
||||
|
||||
GtkWidget *e_shell_new_view (EShell *shell,
|
||||
const char *uri);
|
||||
EShell *e_shell_new (const char *local_directory);
|
||||
GtkWidget *e_shell_new_view (EShell *shell,
|
||||
const char *uri);
|
||||
|
||||
EShortcuts *e_shell_get_shortcuts (EShell *shell);
|
||||
EStorageSet *e_shell_get_storage_set (EShell *shell);
|
||||
EFolderTypeRepository *e_shell_get_folder_type_repository (EShell *shell);
|
||||
EShortcuts *e_shell_get_shortcuts (EShell *shell);
|
||||
EStorageSet *e_shell_get_storage_set (EShell *shell);
|
||||
EFolderTypeRegistry *e_shell_get_folder_type_registry (EShell *shell);
|
||||
|
||||
void e_shell_quit (EShell *shell);
|
||||
void e_shell_quit (EShell *shell);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -149,7 +149,7 @@ icon_callback (EShortcutBar *shortcut_bar,
|
||||
const char *uri,
|
||||
gpointer data)
|
||||
{
|
||||
EFolderTypeRepository *folder_type_repository;
|
||||
EFolderTypeRegistry *folder_type_registry;
|
||||
EShortcuts *shortcuts;
|
||||
EStorageSet *storage_set;
|
||||
EFolder *folder;
|
||||
@ -159,7 +159,7 @@ icon_callback (EShortcutBar *shortcut_bar,
|
||||
shortcuts = E_SHORTCUTS (data);
|
||||
|
||||
storage_set = e_shortcuts_get_storage_set (shortcuts);
|
||||
folder_type_repository = e_storage_set_get_folder_type_repository (storage_set);
|
||||
folder_type_registry = e_storage_set_get_folder_type_registry (storage_set);
|
||||
|
||||
folder = e_storage_set_get_folder (storage_set,
|
||||
get_storage_set_path_from_uri (uri));
|
||||
@ -172,7 +172,7 @@ icon_callback (EShortcutBar *shortcut_bar,
|
||||
return NULL;
|
||||
|
||||
/* FIXME mini icons? */
|
||||
pixbuf = e_folder_type_repository_get_icon_for_type (folder_type_repository, type, FALSE);
|
||||
pixbuf = e_folder_type_registry_get_icon_for_type (folder_type_registry, type, FALSE);
|
||||
if (pixbuf != NULL)
|
||||
gdk_pixbuf_ref (pixbuf);
|
||||
|
||||
|
||||
@ -76,8 +76,8 @@ struct _EShortcutsPrivate {
|
||||
/* The storage set to which these shortcuts are associated. */
|
||||
EStorageSet *storage_set;
|
||||
|
||||
/* The folder type repository. */
|
||||
EFolderTypeRepository *folder_type_repository;
|
||||
/* The folder type registry. */
|
||||
EFolderTypeRegistry *folder_type_registry;
|
||||
|
||||
/* A list of ShortcutGroups. */
|
||||
GList *groups;
|
||||
@ -265,8 +265,8 @@ destroy (GtkObject *object)
|
||||
if (priv->storage_set != NULL)
|
||||
gtk_object_unref (GTK_OBJECT (priv->storage_set));
|
||||
|
||||
if (priv->folder_type_repository != NULL)
|
||||
gtk_object_unref (GTK_OBJECT (priv->folder_type_repository));
|
||||
if (priv->folder_type_registry != NULL)
|
||||
gtk_object_unref (GTK_OBJECT (priv->folder_type_registry));
|
||||
|
||||
unload_shortcuts (shortcuts);
|
||||
|
||||
@ -307,7 +307,7 @@ init (EShortcuts *shortcuts)
|
||||
void
|
||||
e_shortcuts_construct (EShortcuts *shortcuts,
|
||||
EStorageSet *storage_set,
|
||||
EFolderTypeRepository *folder_type_repository)
|
||||
EFolderTypeRegistry *folder_type_registry)
|
||||
{
|
||||
EShortcutsPrivate *priv;
|
||||
|
||||
@ -323,13 +323,13 @@ e_shortcuts_construct (EShortcuts *shortcuts,
|
||||
gtk_object_ref (GTK_OBJECT (storage_set));
|
||||
priv->storage_set = storage_set;
|
||||
|
||||
gtk_object_ref (GTK_OBJECT (folder_type_repository));
|
||||
priv->folder_type_repository = folder_type_repository;
|
||||
gtk_object_ref (GTK_OBJECT (folder_type_registry));
|
||||
priv->folder_type_registry = folder_type_registry;
|
||||
}
|
||||
|
||||
EShortcuts *
|
||||
e_shortcuts_new (EStorageSet *storage_set,
|
||||
EFolderTypeRepository *folder_type_repository)
|
||||
EFolderTypeRegistry *folder_type_registry)
|
||||
{
|
||||
EShortcuts *new;
|
||||
|
||||
@ -337,7 +337,7 @@ e_shortcuts_new (EStorageSet *storage_set,
|
||||
g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
|
||||
|
||||
new = gtk_type_new (e_shortcuts_get_type ());
|
||||
e_shortcuts_construct (new, storage_set, folder_type_repository);
|
||||
e_shortcuts_construct (new, storage_set, folder_type_registry);
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@
|
||||
|
||||
#include <gtk/gtkwidget.h>
|
||||
|
||||
#include "e-folder-type-repository.h"
|
||||
#include "e-folder-type-registry.h"
|
||||
#include "e-storage-set.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@ -60,29 +60,26 @@ struct _EShortcutsClass {
|
||||
};
|
||||
|
||||
|
||||
GtkType e_shortcuts_get_type (void);
|
||||
void e_shortcuts_construct (EShortcuts *shortcuts,
|
||||
EStorageSet *storage_set,
|
||||
EFolderTypeRepository *folder_type_repository);
|
||||
EShortcuts *e_shortcuts_new (EStorageSet *storage_set,
|
||||
EFolderTypeRepository *folder_type_repository);
|
||||
GtkType e_shortcuts_get_type (void);
|
||||
void e_shortcuts_construct (EShortcuts *shortcuts,
|
||||
EStorageSet *storage_set,
|
||||
EFolderTypeRegistry *folder_type_registry);
|
||||
EShortcuts *e_shortcuts_new (EStorageSet *storage_set,
|
||||
EFolderTypeRegistry *folder_type_registry);
|
||||
|
||||
GList *e_shortcuts_get_group_titles (EShortcuts *shortcuts);
|
||||
GList *e_shortcuts_get_shortcuts_in_group (EShortcuts *shortcuts,
|
||||
const char *group_title);
|
||||
GList *e_shortcuts_get_group_titles (EShortcuts *shortcuts);
|
||||
GList *e_shortcuts_get_shortcuts_in_group (EShortcuts *shortcuts,
|
||||
const char *group_title);
|
||||
EStorageSet *e_shortcuts_get_storage_set (EShortcuts *shortcuts);
|
||||
GtkWidget *e_shortcuts_new_view (EShortcuts *shortcuts);
|
||||
gboolean e_shortcuts_load (EShortcuts *shortcuts,
|
||||
const char *path);
|
||||
gboolean e_shortcuts_save (EShortcuts *shortcuts,
|
||||
const char *path);
|
||||
|
||||
EStorageSet *e_shortcuts_get_storage_set (EShortcuts *shortcuts);
|
||||
|
||||
GtkWidget *e_shortcuts_new_view (EShortcuts *shortcuts);
|
||||
|
||||
gboolean e_shortcuts_load (EShortcuts *shortcuts,
|
||||
const char *path);
|
||||
gboolean e_shortcuts_save (EShortcuts *shortcuts,
|
||||
const char *path);
|
||||
|
||||
const char *e_shortcuts_get_uri (EShortcuts *shortcuts,
|
||||
int group_num,
|
||||
int num);
|
||||
const char *e_shortcuts_get_uri (EShortcuts *shortcuts,
|
||||
int group_num,
|
||||
int num);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -408,7 +408,7 @@ get_pixmap_and_mask_for_folder (EStorageSetView *storage_set_view,
|
||||
GdkPixmap **pixmap_return,
|
||||
GdkBitmap **mask_return)
|
||||
{
|
||||
EFolderTypeRepository *folder_type_repository;
|
||||
EFolderTypeRegistry *folder_type_registry;
|
||||
EStorageSet *storage_set;
|
||||
const char *type_name;
|
||||
GdkPixbuf *icon_pixbuf;
|
||||
@ -417,11 +417,17 @@ get_pixmap_and_mask_for_folder (EStorageSetView *storage_set_view,
|
||||
GdkGC *gc;
|
||||
|
||||
storage_set = storage_set_view->priv->storage_set;
|
||||
folder_type_repository = e_storage_set_get_folder_type_repository (storage_set);
|
||||
folder_type_registry = e_storage_set_get_folder_type_registry (storage_set);
|
||||
|
||||
type_name = e_folder_get_type_string (folder);
|
||||
icon_pixbuf = e_folder_type_repository_get_icon_for_type (folder_type_repository,
|
||||
type_name, TRUE);
|
||||
icon_pixbuf = e_folder_type_registry_get_icon_for_type (folder_type_registry,
|
||||
type_name, TRUE);
|
||||
|
||||
if (icon_pixbuf == NULL) {
|
||||
*pixmap_return = NULL;
|
||||
*mask_return = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
scaled_pixbuf = gdk_pixbuf_new (gdk_pixbuf_get_colorspace (icon_pixbuf),
|
||||
gdk_pixbuf_get_has_alpha (icon_pixbuf),
|
||||
@ -555,9 +561,7 @@ e_storage_set_view_construct (EStorageSetView *storage_set_view,
|
||||
|
||||
/* Set up GtkCTree/GtkCList parameters. */
|
||||
gtk_ctree_construct (ctree, 1, 0, NULL);
|
||||
#if 0
|
||||
gtk_ctree_set_line_style (ctree, GTK_CTREE_LINES_DOTTED);
|
||||
#endif
|
||||
gtk_clist_set_selection_mode (GTK_CLIST (ctree), GTK_SELECTION_BROWSE);
|
||||
gtk_clist_set_row_height (GTK_CLIST (ctree), E_SHELL_MINI_ICON_SIZE);
|
||||
|
||||
|
||||
@ -52,7 +52,7 @@ static guint signals[LAST_SIGNAL] = { 0 };
|
||||
struct _EStorageSetPrivate {
|
||||
GList *storages;
|
||||
|
||||
EFolderTypeRepository *folder_type_repository;
|
||||
EFolderTypeRegistry *folder_type_registry;
|
||||
};
|
||||
|
||||
|
||||
@ -69,7 +69,7 @@ destroy (GtkObject *object)
|
||||
|
||||
e_free_object_list (priv->storages);
|
||||
|
||||
gtk_object_unref (GTK_OBJECT (priv->folder_type_repository));
|
||||
gtk_object_unref (GTK_OBJECT (priv->folder_type_registry));
|
||||
|
||||
g_free (priv);
|
||||
|
||||
@ -116,7 +116,7 @@ init (EStorageSet *storage_set)
|
||||
priv = g_new (EStorageSetPrivate, 1);
|
||||
|
||||
priv->storages = NULL;
|
||||
priv->folder_type_repository = NULL;
|
||||
priv->folder_type_registry = NULL;
|
||||
|
||||
storage_set->priv = priv;
|
||||
}
|
||||
@ -124,25 +124,25 @@ init (EStorageSet *storage_set)
|
||||
|
||||
void
|
||||
e_storage_set_construct (EStorageSet *storage_set,
|
||||
EFolderTypeRepository *folder_type_repository)
|
||||
EFolderTypeRegistry *folder_type_registry)
|
||||
{
|
||||
g_return_if_fail (storage_set != NULL);
|
||||
g_return_if_fail (E_IS_STORAGE_SET (storage_set));
|
||||
|
||||
GTK_OBJECT_UNSET_FLAGS (storage_set, GTK_FLOATING);
|
||||
|
||||
gtk_object_ref (GTK_OBJECT (folder_type_repository));
|
||||
storage_set->priv->folder_type_repository = folder_type_repository;
|
||||
gtk_object_ref (GTK_OBJECT (folder_type_registry));
|
||||
storage_set->priv->folder_type_registry = folder_type_registry;
|
||||
}
|
||||
|
||||
EStorageSet *
|
||||
e_storage_set_new (EFolderTypeRepository *folder_type_repository)
|
||||
e_storage_set_new (EFolderTypeRegistry *folder_type_registry)
|
||||
{
|
||||
EStorageSet *new;
|
||||
|
||||
new = gtk_type_new (e_storage_set_get_type ());
|
||||
|
||||
e_storage_set_construct (new, folder_type_repository);
|
||||
e_storage_set_construct (new, folder_type_registry);
|
||||
|
||||
return new;
|
||||
}
|
||||
@ -287,13 +287,13 @@ e_storage_set_new_view (EStorageSet *storage_set)
|
||||
}
|
||||
|
||||
|
||||
EFolderTypeRepository *
|
||||
e_storage_set_get_folder_type_repository (EStorageSet *storage_set)
|
||||
EFolderTypeRegistry *
|
||||
e_storage_set_get_folder_type_registry (EStorageSet *storage_set)
|
||||
{
|
||||
g_return_val_if_fail (storage_set != NULL, NULL);
|
||||
g_return_val_if_fail (E_IS_STORAGE_SET (storage_set), NULL);
|
||||
|
||||
return storage_set->priv->folder_type_repository;
|
||||
return storage_set->priv->folder_type_registry;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -30,7 +30,7 @@
|
||||
|
||||
#include <gtk/gtkwidget.h>
|
||||
|
||||
#include "e-folder-type-repository.h"
|
||||
#include "e-folder-type-registry.h"
|
||||
#include "e-storage.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
@ -71,26 +71,23 @@ struct _EStorageSetClass {
|
||||
|
||||
|
||||
GtkType e_storage_set_get_type (void);
|
||||
void e_storage_set_construct (EStorageSet *storage_set,
|
||||
EFolderTypeRepository *folder_type_repository);
|
||||
EStorageSet *e_storage_set_new (EFolderTypeRepository *folder_type_repository);
|
||||
void e_storage_set_construct (EStorageSet *storage_set,
|
||||
EFolderTypeRegistry *folder_type_registry);
|
||||
EStorageSet *e_storage_set_new (EFolderTypeRegistry *folder_type_registry);
|
||||
|
||||
GList *e_storage_set_get_storage_list (EStorageSet *storage_set);
|
||||
EStorage *e_storage_set_get_storage (EStorageSet *storage_set,
|
||||
const char *name);
|
||||
void e_storage_set_add_storage (EStorageSet *storage_set,
|
||||
EStorage *storage);
|
||||
void e_storage_set_remove_storage (EStorageSet *storage_set,
|
||||
EStorage *storage);
|
||||
void e_storage_set_add_storage (EStorageSet *storage_set,
|
||||
EStorage *storage);
|
||||
void e_storage_set_remove_storage (EStorageSet *storage_set,
|
||||
EStorage *storage);
|
||||
|
||||
EStorage *e_storage_set_get_storage (EStorageSet *storage_set,
|
||||
const char *storage_name);
|
||||
EFolder *e_storage_set_get_folder (EStorageSet *storage_set,
|
||||
const char *path);
|
||||
GList *e_storage_set_get_storage_list (EStorageSet *storage_set);
|
||||
EStorage *e_storage_set_get_storage (EStorageSet *storage_set,
|
||||
const char *storage_name);
|
||||
EFolder *e_storage_set_get_folder (EStorageSet *storage_set,
|
||||
const char *path);
|
||||
GtkWidget *e_storage_set_new_view (EStorageSet *storage_set);
|
||||
|
||||
GtkWidget *e_storage_set_new_view (EStorageSet *storage_set);
|
||||
|
||||
EFolderTypeRepository *e_storage_set_get_folder_type_repository (EStorageSet *storage_set);
|
||||
EFolderTypeRegistry *e_storage_set_get_folder_type_registry (EStorageSet *storage_set);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
332
shell/evolution-shell-component.c
Normal file
332
shell/evolution-shell-component.c
Normal file
@ -0,0 +1,332 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* evolution-shell-component.c
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <bonobo.h>
|
||||
|
||||
#include "Evolution.h"
|
||||
|
||||
#include "e-util/e-util.h"
|
||||
|
||||
#include "evolution-shell-component.h"
|
||||
|
||||
|
||||
#define PARENT_TYPE BONOBO_OBJECT_TYPE
|
||||
static BonoboObjectClass *parent_class = NULL;
|
||||
|
||||
struct _EvolutionShellComponentPrivate {
|
||||
GList *folder_types; /* EvolutionShellComponentFolderType */
|
||||
|
||||
EvolutionShellComponentCreateViewFn create_view_fn;
|
||||
Evolution_Shell corba_owner;
|
||||
void *closure;
|
||||
};
|
||||
|
||||
enum {
|
||||
OWNER_SET,
|
||||
LAST_SIGNAL
|
||||
};
|
||||
|
||||
static guint signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
|
||||
/* CORBA interface implementation. */
|
||||
|
||||
static POA_Evolution_ShellComponent__vepv ShellComponent_vepv;
|
||||
|
||||
static POA_Evolution_ShellComponent *
|
||||
create_servant (void)
|
||||
{
|
||||
POA_Evolution_ShellComponent *servant;
|
||||
CORBA_Environment ev;
|
||||
|
||||
servant = (POA_Evolution_ShellComponent *) g_new0 (BonoboObjectServant, 1);
|
||||
servant->vepv = &ShellComponent_vepv;
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
POA_Evolution_ShellComponent__init ((PortableServer_Servant) servant, &ev);
|
||||
if (ev._major != CORBA_NO_EXCEPTION) {
|
||||
g_free (servant);
|
||||
CORBA_exception_free (&ev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CORBA_exception_free (&ev);
|
||||
|
||||
return servant;
|
||||
}
|
||||
|
||||
static Evolution_FolderTypeList *
|
||||
impl_ShellComponent__get_supported_types (PortableServer_Servant servant,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
BonoboObject *bonobo_object;
|
||||
EvolutionShellComponent *shell_component;
|
||||
EvolutionShellComponentPrivate *priv;
|
||||
Evolution_FolderTypeList *folder_type_list;
|
||||
unsigned int i;
|
||||
GList *p;
|
||||
|
||||
bonobo_object = bonobo_object_from_servant (servant);
|
||||
shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object);
|
||||
priv = shell_component->priv;
|
||||
|
||||
folder_type_list = Evolution_FolderTypeList__alloc ();
|
||||
folder_type_list->_length = g_list_length (priv->folder_types);
|
||||
folder_type_list->_maximum = folder_type_list->_length;
|
||||
folder_type_list->_buffer = CORBA_sequence_Evolution_FolderType_allocbuf (folder_type_list->_maximum);
|
||||
|
||||
for (p = priv->folder_types, i = 0; p != NULL; p = p->next, i++) {
|
||||
Evolution_FolderType *corba_folder_type;
|
||||
EvolutionShellComponentFolderType *folder_type;
|
||||
|
||||
folder_type = (EvolutionShellComponentFolderType *) p->data;
|
||||
|
||||
corba_folder_type = folder_type_list->_buffer + i;
|
||||
corba_folder_type->name = CORBA_string_dup (folder_type->name);
|
||||
corba_folder_type->icon_name = CORBA_string_dup (folder_type->icon_name);
|
||||
}
|
||||
|
||||
return folder_type_list;
|
||||
}
|
||||
|
||||
static void
|
||||
impl_ShellComponent_set_owner (PortableServer_Servant servant,
|
||||
const Evolution_Shell shell,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
BonoboObject *bonobo_object;
|
||||
EvolutionShellComponent *shell_component;
|
||||
EvolutionShellComponentPrivate *priv;
|
||||
|
||||
bonobo_object = bonobo_object_from_servant (servant);
|
||||
shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object);
|
||||
priv = shell_component->priv;
|
||||
|
||||
if (priv->corba_owner != CORBA_OBJECT_NIL) {
|
||||
CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
|
||||
ex_Evolution_ShellComponent_AlreadyOwned, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
Bonobo_Unknown_ref (shell, ev);
|
||||
priv->corba_owner = CORBA_Object_duplicate (shell, ev);
|
||||
|
||||
gtk_signal_emit (GTK_OBJECT (shell_component), signals[OWNER_SET], priv->corba_owner);
|
||||
}
|
||||
|
||||
static Bonobo_Control
|
||||
impl_ShellComponent_create_view (PortableServer_Servant servant,
|
||||
const CORBA_char *physical_uri,
|
||||
CORBA_Environment *ev)
|
||||
{
|
||||
BonoboObject *bonobo_object;
|
||||
EvolutionShellComponent *shell_component;
|
||||
EvolutionShellComponentPrivate *priv;
|
||||
BonoboControl *control;
|
||||
|
||||
bonobo_object = bonobo_object_from_servant (servant);
|
||||
shell_component = EVOLUTION_SHELL_COMPONENT (bonobo_object);
|
||||
priv = shell_component->priv;
|
||||
|
||||
control = (* priv->create_view_fn) (shell_component, physical_uri, priv->closure);
|
||||
|
||||
if (control == NULL) {
|
||||
CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
|
||||
ex_Evolution_ShellComponent_NotFound,
|
||||
NULL);
|
||||
return CORBA_OBJECT_NIL;
|
||||
}
|
||||
|
||||
return bonobo_object_corba_objref (BONOBO_OBJECT (control));
|
||||
}
|
||||
|
||||
|
||||
/* GtkObject methods. */
|
||||
|
||||
static void
|
||||
destroy (GtkObject *object)
|
||||
{
|
||||
EvolutionShellComponent *shell_component;
|
||||
EvolutionShellComponentPrivate *priv;
|
||||
CORBA_Environment ev;
|
||||
GList *p;
|
||||
|
||||
shell_component = EVOLUTION_SHELL_COMPONENT (object);
|
||||
|
||||
priv = shell_component->priv;
|
||||
|
||||
CORBA_exception_init (&ev);
|
||||
|
||||
if (priv->corba_owner != NULL) {
|
||||
Bonobo_Unknown_unref (priv->corba_owner, &ev);
|
||||
CORBA_Object_release (priv->corba_owner, &ev);
|
||||
}
|
||||
|
||||
CORBA_exception_free (&ev);
|
||||
|
||||
for (p = priv->folder_types; p != NULL; p = p->next) {
|
||||
EvolutionShellComponentFolderType *folder_type;
|
||||
|
||||
folder_type = (EvolutionShellComponentFolderType *) p->data;
|
||||
|
||||
g_free (folder_type->name);
|
||||
g_free (folder_type->icon_name);
|
||||
g_free (folder_type);
|
||||
}
|
||||
g_list_free (priv->folder_types);
|
||||
|
||||
g_free (priv);
|
||||
}
|
||||
|
||||
|
||||
/* Initialization. */
|
||||
|
||||
static void
|
||||
corba_class_init (void)
|
||||
{
|
||||
POA_Evolution_ShellComponent__vepv *vepv;
|
||||
POA_Evolution_ShellComponent__epv *epv;
|
||||
PortableServer_ServantBase__epv *base_epv;
|
||||
|
||||
base_epv = g_new0 (PortableServer_ServantBase__epv, 1);
|
||||
base_epv->_private = NULL;
|
||||
base_epv->finalize = NULL;
|
||||
base_epv->default_POA = NULL;
|
||||
|
||||
epv = g_new0 (POA_Evolution_ShellComponent__epv, 1);
|
||||
epv->_get_supported_types = impl_ShellComponent__get_supported_types;
|
||||
epv->set_owner = impl_ShellComponent_set_owner;
|
||||
epv->create_view = impl_ShellComponent_create_view;
|
||||
|
||||
vepv = &ShellComponent_vepv;
|
||||
vepv->Bonobo_Unknown_epv = bonobo_object_get_epv ();
|
||||
vepv->Evolution_ShellComponent_epv = epv;
|
||||
}
|
||||
|
||||
static void
|
||||
class_init (EvolutionShellComponentClass *klass)
|
||||
{
|
||||
GtkObjectClass *object_class;
|
||||
|
||||
object_class = GTK_OBJECT_CLASS (klass);
|
||||
object_class->destroy = destroy;
|
||||
|
||||
signals[OWNER_SET] = gtk_signal_new ("owner_set",
|
||||
GTK_RUN_FIRST,
|
||||
object_class->type,
|
||||
GTK_SIGNAL_OFFSET (EvolutionShellComponentClass, owner_set),
|
||||
gtk_marshal_NONE__POINTER,
|
||||
GTK_TYPE_NONE, 1,
|
||||
GTK_TYPE_POINTER);
|
||||
|
||||
gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL);
|
||||
|
||||
parent_class = gtk_type_class (PARENT_TYPE);
|
||||
|
||||
corba_class_init ();
|
||||
}
|
||||
|
||||
static void
|
||||
init (EvolutionShellComponent *shell_component)
|
||||
{
|
||||
EvolutionShellComponentPrivate *priv;
|
||||
|
||||
priv = g_new (EvolutionShellComponentPrivate, 1);
|
||||
|
||||
priv->folder_types = NULL;
|
||||
priv->create_view_fn = NULL;
|
||||
priv->closure = NULL;
|
||||
priv->corba_owner = CORBA_OBJECT_NIL;
|
||||
|
||||
shell_component->priv = priv;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
evolution_shell_component_construct (EvolutionShellComponent *shell_component,
|
||||
const EvolutionShellComponentFolderType folder_types[],
|
||||
Evolution_ShellComponent corba_object,
|
||||
EvolutionShellComponentCreateViewFn create_view_fn,
|
||||
void *closure)
|
||||
{
|
||||
EvolutionShellComponentPrivate *priv;
|
||||
int i;
|
||||
|
||||
g_return_if_fail (shell_component != NULL);
|
||||
g_return_if_fail (corba_object != CORBA_OBJECT_NIL);
|
||||
|
||||
bonobo_object_construct (BONOBO_OBJECT (shell_component), corba_object);
|
||||
|
||||
priv = shell_component->priv;
|
||||
|
||||
priv->create_view_fn = create_view_fn;
|
||||
priv->closure = closure;
|
||||
|
||||
for (i = 0; folder_types[i].name != NULL; i++) {
|
||||
EvolutionShellComponentFolderType *new;
|
||||
|
||||
if (folder_types[i].icon_name == NULL
|
||||
|| folder_types[i].name[0] == '\0'
|
||||
|| folder_types[i].icon_name[0] == '\0')
|
||||
continue;
|
||||
|
||||
new = g_new (EvolutionShellComponentFolderType, 1);
|
||||
new->name = g_strdup (folder_types[i].name);
|
||||
new->icon_name = g_strdup (folder_types[i].icon_name);
|
||||
|
||||
priv->folder_types = g_list_prepend (priv->folder_types, new);
|
||||
}
|
||||
|
||||
if (priv->folder_types == NULL)
|
||||
g_warning ("No valid folder types constructing EShellComponent %p", shell_component);
|
||||
}
|
||||
|
||||
EvolutionShellComponent *
|
||||
evolution_shell_component_new (const EvolutionShellComponentFolderType folder_types[],
|
||||
EvolutionShellComponentCreateViewFn create_view_fn,
|
||||
void *closure)
|
||||
{
|
||||
EvolutionShellComponent *new;
|
||||
POA_Evolution_ShellComponent *servant;
|
||||
Evolution_ShellComponent corba_object;
|
||||
|
||||
servant = create_servant ();
|
||||
if (servant == NULL)
|
||||
return NULL;
|
||||
|
||||
new = gtk_type_new (evolution_shell_component_get_type ());
|
||||
|
||||
corba_object = bonobo_object_activate_servant (BONOBO_OBJECT (new), servant);
|
||||
evolution_shell_component_construct (new, folder_types, corba_object, create_view_fn, closure);
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
|
||||
E_MAKE_TYPE (evolution_shell_component, "EvolutionShellComponent", EvolutionShellComponent,
|
||||
class_init, init, PARENT_TYPE)
|
||||
91
shell/evolution-shell-component.h
Normal file
91
shell/evolution-shell-component.h
Normal file
@ -0,0 +1,91 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
||||
/* evolution-shell-component.h
|
||||
*
|
||||
* Copyright (C) 2000 Helix Code, 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
|
||||
*/
|
||||
|
||||
#ifndef __EVOLUTION_SHELL_COMPONENT_H__
|
||||
#define __EVOLUTION_SHELL_COMPONENT_H__
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <bonobo/bonobo-object.h>
|
||||
#include "Evolution.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#pragma }
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#define EVOLUTION_TYPE_SHELL_COMPONENT (evolution_shell_component_get_type ())
|
||||
#define EVOLUTION_SHELL_COMPONENT(obj) (GTK_CHECK_CAST ((obj), EVOLUTION_TYPE_SHELL_COMPONENT, EvolutionShellComponent))
|
||||
#define EVOLUTION_SHELL_COMPONENT_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), EVOLUTION_TYPE_SHELL_COMPONENT, EvolutionShellComponentClass))
|
||||
#define EVOLUTION_IS_SHELL_COMPONENT(obj) (GTK_CHECK_TYPE ((obj), EVOLUTION_TYPE_SHELL_COMPONENT))
|
||||
#define EVOLUTION_IS_SHELL_COMPONENT_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((obj), EVOLUTION_TYPE_SHELL_COMPONENT))
|
||||
|
||||
|
||||
typedef struct _EvolutionShellComponent EvolutionShellComponent;
|
||||
typedef struct _EvolutionShellComponentPrivate EvolutionShellComponentPrivate;
|
||||
typedef struct _EvolutionShellComponentClass EvolutionShellComponentClass;
|
||||
|
||||
typedef BonoboControl * (* EvolutionShellComponentCreateViewFn) (EvolutionShellComponent *shell_component,
|
||||
const char *physical_uri,
|
||||
void *closure);
|
||||
|
||||
struct _EvolutionShellComponentFolderType {
|
||||
char *name;
|
||||
char *icon_name;
|
||||
};
|
||||
typedef struct _EvolutionShellComponentFolderType EvolutionShellComponentFolderType;
|
||||
|
||||
struct _EvolutionShellComponent {
|
||||
BonoboObject parent;
|
||||
|
||||
EvolutionShellComponentPrivate *priv;
|
||||
};
|
||||
|
||||
struct _EvolutionShellComponentClass {
|
||||
BonoboObjectClass parent_class;
|
||||
|
||||
/* Signals. */
|
||||
|
||||
void (* owner_set) (EvolutionShellComponent *shell_component,
|
||||
Evolution_Shell shell_interface);
|
||||
};
|
||||
|
||||
|
||||
GtkType evolution_shell_component_get_type (void);
|
||||
void evolution_shell_component_construct (EvolutionShellComponent *shell_component,
|
||||
const EvolutionShellComponentFolderType folder_types[],
|
||||
Evolution_ShellComponent corba_object,
|
||||
EvolutionShellComponentCreateViewFn create_view_fn,
|
||||
void *closure);
|
||||
EvolutionShellComponent *evolution_shell_component_new (const EvolutionShellComponentFolderType folder_types[],
|
||||
EvolutionShellComponentCreateViewFn create_view_fn,
|
||||
void *closure);
|
||||
Evolution_Shell evolution_shell_component_get_shell (EvolutionShellComponent *shell_component);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* __EVOLUTION_SHELL_COMPONENT_H__ */
|
||||
38
shell/main.c
38
shell/main.c
@ -33,6 +33,8 @@
|
||||
|
||||
#define STARTUP_URI "evolution:/local/Inbox"
|
||||
|
||||
static EShell *shell;
|
||||
|
||||
|
||||
static void
|
||||
no_views_left_cb (EShell *shell, gpointer data)
|
||||
@ -140,11 +142,26 @@ development_warning ()
|
||||
}
|
||||
|
||||
static gint
|
||||
new_view_idle_cb (gpointer data)
|
||||
idle_cb (gpointer data)
|
||||
{
|
||||
EShell *shell;
|
||||
char *evolution_directory;
|
||||
|
||||
evolution_directory = (char *) data;
|
||||
|
||||
shell = e_shell_new (evolution_directory);
|
||||
g_free (evolution_directory);
|
||||
|
||||
if (shell == NULL) {
|
||||
e_notice (NULL, GNOME_MESSAGE_BOX_ERROR,
|
||||
_("Cannot initialize the Evolution shell."));
|
||||
exit (1);
|
||||
}
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (shell), "no_views_left",
|
||||
GTK_SIGNAL_FUNC (no_views_left_cb), NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (shell), "destroy",
|
||||
GTK_SIGNAL_FUNC (destroy_cb), NULL);
|
||||
|
||||
shell = E_SHELL (data);
|
||||
e_shell_new_view (shell, STARTUP_URI);
|
||||
|
||||
if (!getenv ("EVOLVE_ME_HARDER"))
|
||||
@ -157,7 +174,6 @@ new_view_idle_cb (gpointer data)
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
EShell *shell;
|
||||
char *evolution_directory;
|
||||
|
||||
init_corba (&argc, argv);
|
||||
@ -179,19 +195,7 @@ main (int argc, char **argv)
|
||||
exit (1);
|
||||
}
|
||||
|
||||
shell = e_shell_new (evolution_directory);
|
||||
if (shell == NULL) {
|
||||
e_notice (NULL, GNOME_MESSAGE_BOX_ERROR,
|
||||
_("Cannot initialize the Evolution shell."));
|
||||
exit (1);
|
||||
}
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (shell), "no_views_left",
|
||||
GTK_SIGNAL_FUNC (no_views_left_cb), NULL);
|
||||
gtk_signal_connect (GTK_OBJECT (shell), "destroy",
|
||||
GTK_SIGNAL_FUNC (destroy_cb), NULL);
|
||||
|
||||
gtk_idle_add (new_view_idle_cb, shell);
|
||||
gtk_idle_add (idle_cb, evolution_directory);
|
||||
|
||||
bonobo_main ();
|
||||
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
2000-05-25 Ettore Perazzoli <ettore@helixcode.com>
|
||||
|
||||
* e-shortcut-bar.c (e_shortcut_bar_load_image): Leak plug: free
|
||||
pathname returned from `gnome_pixmap_file()'.
|
||||
|
||||
* Makefile.am: Add `-I$(top_srcdir)'.
|
||||
|
||||
2000-05-24 Christopher James Lahey <clahey@helixcode.com>
|
||||
|
||||
@ -650,5 +650,7 @@ e_shortcut_bar_load_image (const gchar *filename)
|
||||
else
|
||||
g_warning ("Couldn't find pixmap: %s", filename);
|
||||
|
||||
g_free (pathname);
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user