summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShaun McCance <shaunm@gnome.org>2010-04-02 09:42:06 -0500
committerShaun McCance <shaunm@gnome.org>2010-04-02 09:42:06 -0500
commitc1d0c3d380366d2272a1013b82c4738904ebb2be (patch)
tree2325662d0ef1c184278457e0c05c946646a5c247 /src
parent97f9d09dc1f87413f102724cb155ea2cba91d700 (diff)
downloadyelp-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.c35
-rw-r--r--src/yelp-application.h2
-rw-r--r--src/yelp-window.c23
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;