summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliot Lee <sopwith@src.gnome.org>1999-12-10 02:10:09 +0000
committerElliot Lee <sopwith@src.gnome.org>1999-12-10 02:10:09 +0000
commit339e891c686d9a4f80f0a3da78a485a0dab1a839 (patch)
tree1bf6966d244c18ee78d0b910fcc853798b514eec
parent6407cf3688054121e5ce1c14a1139ca984025751 (diff)
downloadnautilus-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.c24
-rw-r--r--src/nautilus-main.c10
-rw-r--r--src/nautilus-view-frame.c21
-rw-r--r--src/nautilus-view-frame.h4
-rw-r--r--src/ntl-main.c10
-rw-r--r--src/ntl-uri-map.c24
-rw-r--r--src/ntl-view.c21
-rw-r--r--src/ntl-view.h4
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);