Implement FileManagerFactory and FileManagerWindow interfaces for
CORBAization.
Этот коммит содержится в:
родитель
5e69e9af71
Коммит
4f7e1ccf31
202
gnome/gcorba.c
202
gnome/gcorba.c
@ -6,65 +6,179 @@
|
|||||||
*/
|
*/
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <libgnorba/gnorba.h>
|
#include <libgnorba/gnorba.h>
|
||||||
|
#include <libgnorba/gnome-factory.h>
|
||||||
|
#include "FileManager.h"
|
||||||
#include "gcorba.h"
|
#include "gcorba.h"
|
||||||
|
|
||||||
CORBA_ORB orb;
|
|
||||||
PortaPortableServer_POA poa;
|
|
||||||
CORBA_Object *name_server;
|
|
||||||
CORBA_Environment ev;
|
|
||||||
|
|
||||||
/* The object we define: */
|
typedef struct {
|
||||||
|
POA_GNOME_FileManagerWindow servant;
|
||||||
|
PortableServer_POA poa;
|
||||||
|
|
||||||
|
WPanel *mywin;
|
||||||
|
} impl_POA_GNOME_FileManagerWindow;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
POA_GNOME_FileManagerFactory servant;
|
||||||
|
PortableServer_POA poa;
|
||||||
|
} impl_POA_GNOME_FileManagerFactory;
|
||||||
|
|
||||||
|
impl_POA_GNOME_FileManagerFactory poa_filemanagerfactory_servant;
|
||||||
GNOME_FileManagerFactory filemanagerfactory_server;
|
GNOME_FileManagerFactory filemanagerfactory_server;
|
||||||
|
|
||||||
PortableServer_ServantBase__epv base_epv = {
|
/*** Implementation stub prototypes ***/
|
||||||
NULL,
|
|
||||||
NULL,
|
static void
|
||||||
NULL
|
impl_GNOME_FileManagerWindow_close(impl_POA_GNOME_FileManagerWindow * servant,
|
||||||
|
CORBA_Environment * ev);
|
||||||
|
|
||||||
|
GNOME_FileManagerWindow
|
||||||
|
impl_GNOME_FileManagerFactory_create_window(impl_POA_GNOME_FileManagerFactory * servant,
|
||||||
|
CORBA_char * dir,
|
||||||
|
CORBA_Environment * ev);
|
||||||
|
|
||||||
|
CORBA_boolean
|
||||||
|
impl_GNOME_FileManagerFactory_supports(impl_POA_GNOME_FileManagerFactory * servant,
|
||||||
|
CORBA_char * obj_goad_id,
|
||||||
|
CORBA_Environment * ev);
|
||||||
|
CORBA_Object
|
||||||
|
impl_GNOME_FileManagerFactory_create_object(impl_POA_GNOME_FileManagerFactory * servant,
|
||||||
|
CORBA_char * goad_id,
|
||||||
|
GNOME_stringlist * params,
|
||||||
|
CORBA_Environment * ev);
|
||||||
|
|
||||||
|
/*** epv structures ***/
|
||||||
|
|
||||||
|
static PortableServer_ServantBase__epv impl_GNOME_FileManagerWindow_base_epv =
|
||||||
|
{
|
||||||
|
NULL, NULL, NULL
|
||||||
|
};
|
||||||
|
static POA_GNOME_FileManagerWindow__epv impl_GNOME_FileManagerWindow_epv =
|
||||||
|
{
|
||||||
|
NULL /* _private */
|
||||||
|
(gpointer) & impl_GNOME_FileManagerWindow_close,
|
||||||
|
};
|
||||||
|
static PortableServer_ServantBase__epv impl_GNOME_FileManagerFactory_base_epv =
|
||||||
|
{
|
||||||
|
NULL, /* _private data */
|
||||||
|
NULL,
|
||||||
|
NULL /* default_POA routine */
|
||||||
|
};
|
||||||
|
static POA_GNOME_FileManagerFactory__epv impl_GNOME_FileManagerFactory_epv =
|
||||||
|
{
|
||||||
|
NULL, /* _private */
|
||||||
|
(gpointer) & impl_GNOME_FileManagerFactory_create_window,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* GNOME::Factory implementation */
|
static POA_GNOME_GenericFactory__epv impl_GNOME_FileManagerFactory_GNOME_GenericFactory_epv =
|
||||||
static CORBA_Object
|
|
||||||
FileManager_Factory_new (PortableServer_Servant servant, CORBA_Environment *ev)
|
|
||||||
{
|
{
|
||||||
|
NULL, /* _private */
|
||||||
|
(gpointer) & impl_GNOME_FileManagerFactory_supports,
|
||||||
|
(gpointer) & impl_GNOME_FileManagerFactory_create_object,
|
||||||
|
};
|
||||||
|
|
||||||
|
/*** vepv structures ***/
|
||||||
|
|
||||||
|
static POA_GNOME_FileManagerWindow__vepv impl_GNOME_FileManagerWindow_vepv =
|
||||||
|
{
|
||||||
|
&impl_GNOME_FileManagerWindow_base_epv,
|
||||||
|
&impl_GNOME_FileManagerWindow_epv,
|
||||||
|
};
|
||||||
|
static POA_GNOME_FileManagerFactory__vepv impl_GNOME_FileManagerFactory_vepv =
|
||||||
|
{
|
||||||
|
&impl_GNOME_FileManagerFactory_base_epv,
|
||||||
|
&impl_GNOME_FileManagerFactory_GNOME_GenericFactory_epv,
|
||||||
|
&impl_GNOME_FileManagerFactory_epv,
|
||||||
|
};
|
||||||
|
|
||||||
|
/*** Stub implementations ***/
|
||||||
|
|
||||||
|
static void
|
||||||
|
do_window_close(GtkWidget *widget, gpointer servant)
|
||||||
|
{
|
||||||
|
CORBA_Environment ev;
|
||||||
|
CORBA_exception_init(&ev);
|
||||||
|
PortableServer_ObjectId *objid;
|
||||||
|
|
||||||
|
objid = PortableServer_POA_servant_to_id(servant->poa, servant, ev);
|
||||||
|
PortableServer_POA_deactivate_object(servant->poa, objid, ev);
|
||||||
|
CORBA_free(objid);
|
||||||
|
POA_GNOME_FileManagerWindow__fini((PortableServer_Servant) servant, ev);
|
||||||
|
|
||||||
|
g_free(servant);
|
||||||
|
CORBA_exception_free(&ev);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static CORBA_Object
|
static void
|
||||||
FileManager_Factory_new_args (PortableServer_Servant servant,
|
impl_GNOME_FileManagerWindow_close(impl_POA_GNOME_FileManagerWindow * servant, CORBA_Environment * ev)
|
||||||
CORBA_char *argument,
|
|
||||||
CORBA_Environment *ev)
|
|
||||||
{
|
{
|
||||||
return FileManager_Factory_new (servant, ev);
|
gtk_widget_destroy(servant->mywin->xwindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
FileManager_Factory_new_args
|
GNOME_FileManagerWindow
|
||||||
POA_GNOME_Factory__epv poa_gnome_factory__epv = {
|
impl_GNOME_FileManagerFactory_create_window(impl_POA_GNOME_FileManagerFactory * servant,
|
||||||
FileManager_Factory_new,
|
CORBA_char * dir,
|
||||||
FileManager_Factory_new_args
|
CORBA_Environment * ev)
|
||||||
|
{
|
||||||
};
|
GNOME_FileManagerWindow retval;
|
||||||
|
impl_POA_GNOME_FileManagerWindow *newservant;
|
||||||
|
PortableServer_ObjectId *objid;
|
||||||
|
|
||||||
POA_FileManager_Factory__vepv poa_filemanager_factory_vepv = {
|
newservant = g_new0(impl_POA_GNOME_FileManagerWindow, 1);
|
||||||
&base_epv,
|
newservant->servant.vepv = &impl_GNOME_FileManagerWindow_vepv;
|
||||||
&poa_gnome_factory_epv,
|
newservant->poa = poa;
|
||||||
NULL /* POA_FileManager_Factory_epv */
|
newservant->mywin = new_panel_at((dir && *dir)?dir:gnome_util_user_home());
|
||||||
};
|
|
||||||
|
|
||||||
POA_FileManager_Factory poa_filemanagerfactory_servant = {
|
gtk_signal_connect(GTK_OBJECT(newservant->mywin->xwindow),
|
||||||
NULL,
|
"destroy", impl_GNOME_FileManagerWindow_close,
|
||||||
&poa_filemanager_factory_vepv,
|
newservant);
|
||||||
};
|
|
||||||
|
|
||||||
#define FACTORY_ID "IDL:GNOME/FileManagerFactory:1.0"
|
POA_GNOME_FileManagerWindow__init((PortableServer_Servant) newservant, ev);
|
||||||
PortableServer_ObjectId factory_id = { 0, sizeof (FACTORY_ID), FACTORY_ID };
|
objid = PortableServer_POA_activate_object(poa, newservant, ev);
|
||||||
|
CORBA_free(objid);
|
||||||
|
retval = PortableServer_POA_servant_to_reference(poa, newservant, ev);
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
CORBA_boolean
|
||||||
|
impl_GNOME_FileManagerFactory_supports(impl_POA_GNOME_FileManagerFactory * servant,
|
||||||
|
CORBA_char * obj_goad_id,
|
||||||
|
CORBA_Environment * ev)
|
||||||
|
{
|
||||||
|
return !strcmp(obj_goad_id, "gmc_filemanager_window");
|
||||||
|
}
|
||||||
|
|
||||||
|
CORBA_Object
|
||||||
|
impl_GNOME_FileManagerFactory_create_object(impl_POA_GNOME_FileManagerFactory * servant,
|
||||||
|
CORBA_char * goad_id,
|
||||||
|
GNOME_stringlist * params,
|
||||||
|
CORBA_Environment * ev)
|
||||||
|
{
|
||||||
|
if(!strcmp(goad_id, "gmc_filemanager_window"))
|
||||||
|
return impl_GNOME_FileManagerFactory_create_window(servant,
|
||||||
|
params->_length?params->_buffer[0]:gnome_util_user_home(), ev);
|
||||||
|
|
||||||
|
CORBA_exception_set(ev, CORBA_USER_EXCEPTION,
|
||||||
|
ex_GNOME_GenericFactory_CannotActivate,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
return CORBA_OBJECT_NIL;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
corba_register_server (void)
|
corba_register_server (void)
|
||||||
{
|
{
|
||||||
PortableServer_POAManager poa_manager;
|
PortableServer_POAManager poa_manager;
|
||||||
int v;
|
int v;
|
||||||
|
CORBA_ORB orb;
|
||||||
|
|
||||||
CORBA_exception_init (&ev);
|
CORBA_exception_init (&ev);
|
||||||
|
|
||||||
|
orb = gnome_CORBA_ORB();
|
||||||
|
|
||||||
poa = CORBA_ORB_resolve_initial_references (orb, "RootPOA", &ev);
|
poa = CORBA_ORB_resolve_initial_references (orb, "RootPOA", &ev);
|
||||||
if (ev.major != CORBA_NO_EXCEPTION){
|
if (ev.major != CORBA_NO_EXCEPTION){
|
||||||
printf ("Can not resolve initial reference to RootPOA");
|
printf ("Can not resolve initial reference to RootPOA");
|
||||||
@ -93,30 +207,18 @@ corba_register_server (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Activate the object */
|
/* Activate the object */
|
||||||
PortableServer_POA_activate_object_with_id (
|
CORBA_free(PortableServer_POA_activate_object(poa,
|
||||||
poa, &factory_id, &poa_filemanagerfactory_servant, &ev);
|
&poa_filemanagerfactory_servant, &ev));
|
||||||
|
|
||||||
/* Get a refeerence to te object */
|
/* Get a refeerence to te object */
|
||||||
filemanagerfactory_server = PortableServer_POA_servant_to_reference (
|
filemanagerfactory_server = PortableServer_POA_servant_to_reference (
|
||||||
poa, &poa_filemanagerfactory_servant, &ev);
|
poa, &poa_filemanagerfactory_servant, &ev);
|
||||||
|
|
||||||
/*
|
|
||||||
* Register the FileManagerFactory with GOAD.
|
|
||||||
*/
|
|
||||||
name_server = gnome_name_service_get ();
|
|
||||||
|
|
||||||
|
|
||||||
if (!name_server){
|
|
||||||
printf ("Can not talk to the name server\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
v = goad_server_register (
|
v = goad_server_register (
|
||||||
name_server, file_manager_factory,
|
NULL, file_manager_factory,
|
||||||
"FileManagerFactory", "FileManager:1.0", &ev);
|
"gmc_FileManagerFactory", "server", &ev);
|
||||||
|
|
||||||
if (v != 0)
|
if (v != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,12 +1,17 @@
|
|||||||
#include <factory.idl>
|
#pragma inhibit push
|
||||||
|
#include <gnome-factory.idl>
|
||||||
|
#pragma inhibit pop
|
||||||
|
|
||||||
module FileManager {
|
module GNOME {
|
||||||
interface Factory : GNOME::Factory {};
|
exception POSIX_ERROR { string errorstr; };
|
||||||
|
|
||||||
exception POSIX_ERROR {};
|
interface FileManagerWindow {
|
||||||
|
/* not much yet */
|
||||||
|
oneway void close();
|
||||||
|
};
|
||||||
|
|
||||||
interface Window {
|
interface FileManagerFactory : GenericFactory {
|
||||||
void chdir (in string dir)
|
FileManagerWindow create_window(in string dir)
|
||||||
raises (POSIX_ERROR);
|
raises (POSIX_ERROR);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -145,6 +145,7 @@ typedef struct {
|
|||||||
|
|
||||||
int dragging;
|
int dragging;
|
||||||
#endif
|
#endif
|
||||||
|
void *corbadat;
|
||||||
} WPanel;
|
} WPanel;
|
||||||
|
|
||||||
WPanel *panel_new (char *panel_name);
|
WPanel *panel_new (char *panel_name);
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user