diff options
author | Elliot Lee <sopwith@src.gnome.org> | 1999-12-10 02:10:09 +0000 |
---|---|---|
committer | Elliot Lee <sopwith@src.gnome.org> | 1999-12-10 02:10:09 +0000 |
commit | 339e891c686d9a4f80f0a3da78a485a0dab1a839 (patch) | |
tree | 1bf6966d244c18ee78d0b910fcc853798b514eec | |
parent | 6407cf3688054121e5ce1c14a1139ca984025751 (diff) | |
download | nautilus-339e891c686d9a4f80f0a3da78a485a0dab1a839.tar.gz |
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.
-rw-r--r-- | src/nautilus-applicable-views.c | 24 | ||||
-rw-r--r-- | src/nautilus-main.c | 10 | ||||
-rw-r--r-- | src/nautilus-view-frame.c | 21 | ||||
-rw-r--r-- | src/nautilus-view-frame.h | 4 | ||||
-rw-r--r-- | src/ntl-main.c | 10 | ||||
-rw-r--r-- | src/ntl-uri-map.c | 24 | ||||
-rw-r--r-- | src/ntl-view.c | 21 | ||||
-rw-r--r-- | src/ntl-view.h | 4 |
8 files changed, 106 insertions, 12 deletions
diff --git a/src/nautilus-applicable-views.c b/src/nautilus-applicable-views.c index 1b20edceb..0239e8065 100644 --- a/src/nautilus-applicable-views.c +++ b/src/nautilus-applicable-views.c @@ -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); } diff --git a/src/nautilus-main.c b/src/nautilus-main.c index 8b64362b1..b47dd4d11 100644 --- a/src/nautilus-main.c +++ b/src/nautilus-main.c @@ -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)); diff --git a/src/nautilus-view-frame.c b/src/nautilus-view-frame.c index ea2f9e8f8..bbd82c511 100644 --- a/src/nautilus-view-frame.c +++ b/src/nautilus-view-frame.c @@ -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) diff --git a/src/nautilus-view-frame.h b/src/nautilus-view-frame.h index 7f9593667..9cc26f0d8 100644 --- a/src/nautilus-view-frame.h +++ b/src/nautilus-view-frame.h @@ -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); diff --git a/src/ntl-main.c b/src/ntl-main.c index 8b64362b1..b47dd4d11 100644 --- a/src/ntl-main.c +++ b/src/ntl-main.c @@ -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)); diff --git a/src/ntl-uri-map.c b/src/ntl-uri-map.c index 1b20edceb..0239e8065 100644 --- a/src/ntl-uri-map.c +++ b/src/ntl-uri-map.c @@ -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); } diff --git a/src/ntl-view.c b/src/ntl-view.c index ea2f9e8f8..bbd82c511 100644 --- a/src/ntl-view.c +++ b/src/ntl-view.c @@ -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) diff --git a/src/ntl-view.h b/src/ntl-view.h index 7f9593667..9cc26f0d8 100644 --- a/src/ntl-view.h +++ b/src/ntl-view.h @@ -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); |