diff options
author | Shaun McCance <shaunm@gnome.org> | 2010-04-02 09:42:06 -0500 |
---|---|---|
committer | Shaun McCance <shaunm@gnome.org> | 2010-04-02 09:42:06 -0500 |
commit | c1d0c3d380366d2272a1013b82c4738904ebb2be (patch) | |
tree | 2325662d0ef1c184278457e0c05c946646a5c247 /src | |
parent | 97f9d09dc1f87413f102724cb155ea2cba91d700 (diff) | |
download | yelp-c1d0c3d380366d2272a1013b82c4738904ebb2be.tar.gz |
Adding "New Window" menu item, goes to document top
I think I'd actually prefer this to go to the root instead, but that
involves inspecting the document. Right now, there's no difference
in practice anyway.
Diffstat (limited to 'src')
-rw-r--r-- | src/yelp-application.c | 35 | ||||
-rw-r--r-- | src/yelp-application.h | 2 | ||||
-rw-r--r-- | src/yelp-window.c | 23 |
3 files changed, 55 insertions, 5 deletions
diff --git a/src/yelp-application.c b/src/yelp-application.c index f428b488..dda2214f 100644 --- a/src/yelp-application.c +++ b/src/yelp-application.c @@ -36,6 +36,8 @@ #include "yelp-dbus.h" #include "yelp-window.h" +#define DEFAULT_URI "ghelp:user-guide" + static gboolean editor_mode = FALSE; static const GOptionEntry entries[] = { @@ -47,6 +49,7 @@ typedef struct _YelpApplicationLoad YelpApplicationLoad; struct _YelpApplicationLoad { YelpApplication *app; guint timestamp; + gboolean new; }; static void yelp_application_init (YelpApplication *app); @@ -227,7 +230,7 @@ yelp_application_run (YelpApplication *app, if (argc > 1) uri = argv[1]; else - uri = "ghelp:user-guide"; + uri = DEFAULT_URI; proxy = dbus_g_proxy_new_for_name (priv->connection, DBUS_SERVICE_DBUS, @@ -316,6 +319,25 @@ yelp_application_load_uri (YelpApplication *app, return TRUE; } +void +yelp_application_new_window (YelpApplication *app, + const gchar *uri) +{ + YelpApplicationLoad *data; + YelpUri *yuri; + + data = g_new (YelpApplicationLoad, 1); + data->app = app; + data->new = TRUE; + + yuri = yelp_uri_new (uri ? uri : DEFAULT_URI); + + g_signal_connect (yuri, "resolved", + G_CALLBACK (application_uri_resolved), + data); + yelp_uri_resolve (yuri); +} + static void application_uri_resolved (YelpUri *uri, YelpApplicationLoad *data) @@ -327,7 +349,10 @@ application_uri_resolved (YelpUri *uri, doc_uri = yelp_uri_get_document_uri (uri); - window = g_hash_table_lookup (priv->windows_by_document, doc_uri); + if (data->new) + window = NULL; + else + window = g_hash_table_lookup (priv->windows_by_document, doc_uri); if (window == NULL) { GtkActionGroup *group; @@ -342,8 +367,10 @@ application_uri_resolved (YelpUri *uri, priv->show_text_cursor); priv->map_show_text_cursor = FALSE; - g_hash_table_insert (priv->windows_by_document, doc_uri, window); - g_object_set_data (G_OBJECT (window), "doc_uri", doc_uri); + if (!data->new) { + g_hash_table_insert (priv->windows_by_document, doc_uri, window); + g_object_set_data (G_OBJECT (window), "doc_uri", doc_uri); + } g_signal_connect (window, "delete-event", G_CALLBACK (application_window_deleted), data->app); } diff --git a/src/yelp-application.h b/src/yelp-application.h index a6ebc0d1..ed48bb00 100644 --- a/src/yelp-application.h +++ b/src/yelp-application.h @@ -53,6 +53,8 @@ gboolean yelp_application_load_uri (YelpApplication *app, const gchar *uri, guint timestamp, GError **error); +void yelp_application_new_window (YelpApplication *app, + const gchar *uri); void yelp_application_adjust_font (YelpApplication *app, gint adjust); diff --git a/src/yelp-window.c b/src/yelp-window.c index 2a23f718..3934d8f9 100644 --- a/src/yelp-window.c +++ b/src/yelp-window.c @@ -49,6 +49,8 @@ static void yelp_window_set_property (GObject *object, const GValue *value, GParamSpec *pspec); +static void window_new (GtkAction *action, + YelpWindow *window); static void window_close (GtkAction *action, YelpWindow *window); static void window_open_location (GtkAction *action, @@ -165,7 +167,12 @@ static const GtkActionEntry entries[] = { { "ViewMenu", NULL, N_("_View") }, { "GoMenu", NULL, N_("_Go") }, - { "Close", GTK_STOCK_CLOSE, + { "NewWindow", GTK_STOCK_NEW, + N_("_New Window"), + "<Control>N", + NULL, + G_CALLBACK (window_new) }, + { "CloseWindow", GTK_STOCK_CLOSE, N_("_Close"), "<Control>W", NULL, @@ -457,6 +464,20 @@ yelp_window_get_action_group (YelpWindow *window) /******************************************************************************/ static void +window_new (GtkAction *action, YelpWindow *window) +{ + gchar *uri = NULL; + YelpWindowPrivate *priv = GET_PRIV (window); + + if (priv->back_list && priv->back_list->data) + uri = yelp_uri_get_document_uri (((YelpBackEntry *) priv->back_list->data)->uri); + + yelp_application_new_window (priv->application, uri); + + g_free (uri); +} + +static void window_close (GtkAction *action, YelpWindow *window) { gboolean ret; |