Add a factory for activating components implemented inside nautilus.

Add a factory for activating components implemented inside nautilus.

Add some comments on how URI mapping will work.
This commit is contained in:
Elliot Lee 1999-12-10 02:10:09 +00:00
parent 6407cf3688
commit 339e891c68
8 changed files with 106 additions and 12 deletions

View file

@ -44,7 +44,28 @@ nautilus_navinfo_new(NautilusNavigationInfo *navinfo,
navinfo->requesting_view = requesting_view;
/* XXX turn the provided information into some activateable IID's */
navinfo->navinfo.content_type = gnome_mime_type_of_file(navinfo->navinfo.requested_uri);
/* Given a content type and a URI, what do we do? Basically the "expert system" below
tries to answer that question
Check if the URI is in an abnormal scheme (e.g. one not supported by gnome-vfs)
If so
Lookup a content view by scheme name, go.
Lookup meta views by scheme name, go.
If not
Figure out content type.
Lookup a content view by content type, go.
Lookup meta views by content type, go.
The lookup-and-go process works like:
Generate a list of all possibilities ordered by quality.
Put possibilities on menu.
Find if the user has specified any default(s) globally, modify selection.
Find if the user has specified any default(s) per-page, modify selection.
*/
return NULL;
}
@ -52,4 +73,5 @@ nautilus_navinfo_new(NautilusNavigationInfo *navinfo,
void
nautilus_navinfo_free(NautilusNavigationInfo *navinfo)
{
g_free(navinfo->navinfo.content_type);
}

View file

@ -38,6 +38,13 @@ check_for_quit(void)
gtk_main_quit();
}
static GnomeObject *
nautilus_make_object(GnomeGenericFactory *gfact, const char *goad_id, void *closure)
{
/* New internally implemented objects should be activated here */
return NULL;
}
int main(int argc, char *argv[])
{
poptContext ctx;
@ -47,10 +54,13 @@ int main(int argc, char *argv[])
{NULL}
};
GtkWidget *mainwin;
GnomeGenericFactory *gfact;
orb = gnome_CORBA_init_with_popt_table("nautilus", VERSION, &argc, argv, options, 0, &ctx, GNORBA_INIT_SERVER_FUNC, &ev);
bonobo_init(orb, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL);
gfact = gnome_generic_factory_new("nautilus_factory", nautilus_make_object, NULL);
mainwin = gtk_widget_new(nautilus_window_get_type(), "app_id", "nautilus", NULL);
bonobo_activate();
nautilus_window_set_initial_state(NAUTILUS_WINDOW(mainwin));

View file

@ -415,13 +415,13 @@ nautilus_view_activate_uri(GnomeControlFrame *frame, const char *uri, gboolean r
nautilus_view_request_location_change(view, &nri);
}
void
nautilus_view_load_client(NautilusView *view,
const char * iid)
nautilus_view_load_client(NautilusView *view, const char *iid)
{
GnomeControlFrame *frame;
CORBA_Environment ev;
g_return_if_fail(iid);
if(view->client)
{
g_free(view->iid); view->iid = NULL;
@ -438,6 +438,7 @@ nautilus_view_load_client(NautilusView *view,
"IDL:Nautilus/View:1.0", &ev);
if(ev._major != CORBA_NO_EXCEPTION)
view->view_client = CORBA_OBJECT_NIL;
view->iid = g_strdup(iid);
gtk_signal_connect(GTK_OBJECT(frame), "activate_uri", GTK_SIGNAL_FUNC(nautilus_view_activate_uri), view);
@ -446,6 +447,20 @@ nautilus_view_load_client(NautilusView *view,
CORBA_exception_free(&ev);
}
void
nautilus_view_use_client (NautilusView *view,
GNOME_Control ctl)
{
nautilus_view_handle_client(view, NULL, ctl);
}
void
nautilus_view_load_client(NautilusView *view,
const char * iid)
{
nautilus_view_handle_client(view, iid, CORBA_OBJECT_NIL);
}
static void
nautilus_view_notify_location_change(NautilusView *view,
Nautilus_NavigationInfo *nav_context)

View file

@ -90,8 +90,8 @@ void nautilus_view_request_selection_change (NautilusView *view,
Nautilus_SelectionRequestInfo *loc);
void nautilus_view_request_status_change (NautilusView *view,
Nautilus_StatusRequestInfo *loc);
void nautilus_view_load_client (NautilusView *view,
const char * iid);
void nautilus_view_load_client (NautilusView *view,
const char * iid);
/* This is a "protected" operation */
void nautilus_view_construct_arg_set(NautilusView *view);

View file

@ -38,6 +38,13 @@ check_for_quit(void)
gtk_main_quit();
}
static GnomeObject *
nautilus_make_object(GnomeGenericFactory *gfact, const char *goad_id, void *closure)
{
/* New internally implemented objects should be activated here */
return NULL;
}
int main(int argc, char *argv[])
{
poptContext ctx;
@ -47,10 +54,13 @@ int main(int argc, char *argv[])
{NULL}
};
GtkWidget *mainwin;
GnomeGenericFactory *gfact;
orb = gnome_CORBA_init_with_popt_table("nautilus", VERSION, &argc, argv, options, 0, &ctx, GNORBA_INIT_SERVER_FUNC, &ev);
bonobo_init(orb, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL);
gfact = gnome_generic_factory_new("nautilus_factory", nautilus_make_object, NULL);
mainwin = gtk_widget_new(nautilus_window_get_type(), "app_id", "nautilus", NULL);
bonobo_activate();
nautilus_window_set_initial_state(NAUTILUS_WINDOW(mainwin));

View file

@ -44,7 +44,28 @@ nautilus_navinfo_new(NautilusNavigationInfo *navinfo,
navinfo->requesting_view = requesting_view;
/* XXX turn the provided information into some activateable IID's */
navinfo->navinfo.content_type = gnome_mime_type_of_file(navinfo->navinfo.requested_uri);
/* Given a content type and a URI, what do we do? Basically the "expert system" below
tries to answer that question
Check if the URI is in an abnormal scheme (e.g. one not supported by gnome-vfs)
If so
Lookup a content view by scheme name, go.
Lookup meta views by scheme name, go.
If not
Figure out content type.
Lookup a content view by content type, go.
Lookup meta views by content type, go.
The lookup-and-go process works like:
Generate a list of all possibilities ordered by quality.
Put possibilities on menu.
Find if the user has specified any default(s) globally, modify selection.
Find if the user has specified any default(s) per-page, modify selection.
*/
return NULL;
}
@ -52,4 +73,5 @@ nautilus_navinfo_new(NautilusNavigationInfo *navinfo,
void
nautilus_navinfo_free(NautilusNavigationInfo *navinfo)
{
g_free(navinfo->navinfo.content_type);
}

View file

@ -415,13 +415,13 @@ nautilus_view_activate_uri(GnomeControlFrame *frame, const char *uri, gboolean r
nautilus_view_request_location_change(view, &nri);
}
void
nautilus_view_load_client(NautilusView *view,
const char * iid)
nautilus_view_load_client(NautilusView *view, const char *iid)
{
GnomeControlFrame *frame;
CORBA_Environment ev;
g_return_if_fail(iid);
if(view->client)
{
g_free(view->iid); view->iid = NULL;
@ -438,6 +438,7 @@ nautilus_view_load_client(NautilusView *view,
"IDL:Nautilus/View:1.0", &ev);
if(ev._major != CORBA_NO_EXCEPTION)
view->view_client = CORBA_OBJECT_NIL;
view->iid = g_strdup(iid);
gtk_signal_connect(GTK_OBJECT(frame), "activate_uri", GTK_SIGNAL_FUNC(nautilus_view_activate_uri), view);
@ -446,6 +447,20 @@ nautilus_view_load_client(NautilusView *view,
CORBA_exception_free(&ev);
}
void
nautilus_view_use_client (NautilusView *view,
GNOME_Control ctl)
{
nautilus_view_handle_client(view, NULL, ctl);
}
void
nautilus_view_load_client(NautilusView *view,
const char * iid)
{
nautilus_view_handle_client(view, iid, CORBA_OBJECT_NIL);
}
static void
nautilus_view_notify_location_change(NautilusView *view,
Nautilus_NavigationInfo *nav_context)

View file

@ -90,8 +90,8 @@ void nautilus_view_request_selection_change (NautilusView *view,
Nautilus_SelectionRequestInfo *loc);
void nautilus_view_request_status_change (NautilusView *view,
Nautilus_StatusRequestInfo *loc);
void nautilus_view_load_client (NautilusView *view,
const char * iid);
void nautilus_view_load_client (NautilusView *view,
const char * iid);
/* This is a "protected" operation */
void nautilus_view_construct_arg_set(NautilusView *view);