aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXan Lopez <xan@igalia.com>2012-01-17 03:11:40 +0800
committerXan Lopez <xan@igalia.com>2012-01-17 03:11:40 +0800
commit52cdd6df6cb561a48032358b3eedce16cfa2c9fb (patch)
tree1170c07244b9a2fba83251880900f8894887ae27
parent1150405cc1bc50d6c258cb723a76ae90d8945f73 (diff)
downloadgsoc2013-epiphany-52cdd6df6cb561a48032358b3eedce16cfa2c9fb.tar.gz
gsoc2013-epiphany-52cdd6df6cb561a48032358b3eedce16cfa2c9fb.tar.zst
gsoc2013-epiphany-52cdd6df6cb561a48032358b3eedce16cfa2c9fb.zip
Refactor GtkActions with attached EphyWindows
Make a GtkAction subclass that only holds an EphyWindow and nothing else, and use it throughout. Allows us to kill some duplicated code.
-rw-r--r--src/Makefile.am4
-rw-r--r--src/ephy-combined-stop-reload-action.c23
-rw-r--r--src/ephy-link-action.c3
-rw-r--r--src/ephy-link-action.h6
-rw-r--r--src/ephy-navigation-action.c114
-rw-r--r--src/ephy-navigation-action.h65
-rw-r--r--src/ephy-navigation-history-action.c4
-rw-r--r--src/ephy-navigation-history-action.h6
-rw-r--r--src/ephy-page-menu-action.c4
-rw-r--r--src/ephy-page-menu-action.h6
-rw-r--r--src/ephy-toolbar.c6
-rw-r--r--src/ephy-window-action.c102
-rw-r--r--src/ephy-window-action.h62
13 files changed, 190 insertions, 215 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index f89a0219f..24d47ae7d 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -25,11 +25,11 @@ NOINST_H_FILES = \
ephy-link-action.h \
ephy-lockdown.h \
ephy-location-action.h \
- ephy-navigation-action.h \
ephy-navigation-history-action.h \
ephy-page-menu-action.h \
ephy-password-info.h \
ephy-toolbar.h \
+ ephy-window-action.h \
languages.h \
pdm-dialog.h \
popup-commands.h \
@@ -64,7 +64,6 @@ libephymain_la_SOURCES = \
ephy-link-action.c \
ephy-location-action.c \
ephy-lockdown.c \
- ephy-navigation-action.c \
ephy-navigation-history-action.c \
ephy-notebook.c \
ephy-page-menu-action.c \
@@ -73,6 +72,7 @@ libephymain_la_SOURCES = \
ephy-shell.c \
ephy-toolbar.c \
ephy-window.c \
+ ephy-window-action.c \
pdm-dialog.c \
popup-commands.c \
prefs-dialog.c \
diff --git a/src/ephy-combined-stop-reload-action.c b/src/ephy-combined-stop-reload-action.c
index 0789a2822..0e85cd106 100644
--- a/src/ephy-combined-stop-reload-action.c
+++ b/src/ephy-combined-stop-reload-action.c
@@ -22,12 +22,12 @@
#include "config.h"
#include "ephy-combined-stop-reload-action.h"
-#include "ephy-window.h"
+#include "ephy-window-action.h"
#include "window-commands.h"
#include <glib/gi18n.h>
-G_DEFINE_TYPE (EphyCombinedStopReloadAction, ephy_combined_stop_reload_action, GTK_TYPE_ACTION)
+G_DEFINE_TYPE (EphyCombinedStopReloadAction, ephy_combined_stop_reload_action, EPHY_TYPE_WINDOW_ACTION)
#define COMBINED_STOP_RELOAD_ACTION_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), EPHY_TYPE_COMBINED_STOP_RELOAD_ACTION, EphyCombinedStopReloadActionPrivate))
@@ -35,7 +35,6 @@ G_DEFINE_TYPE (EphyCombinedStopReloadAction, ephy_combined_stop_reload_action, G
struct _EphyCombinedStopReloadActionPrivate
{
gboolean loading;
- EphyWindow *window;
gulong action_handler_id;
};
@@ -55,8 +54,7 @@ typedef enum {
enum {
PROP_0,
- PROP_LOADING,
- PROP_WINDOW
+ PROP_LOADING
};
void
@@ -86,7 +84,7 @@ ephy_combined_stop_reload_action_set_loading (EphyCombinedStopReloadAction *acti
priv->action_handler_id = g_signal_connect (action, "activate",
combined_stop_reload_action_entries[action_enum].callback,
- priv->window);
+ ephy_window_action_get_window (EPHY_WINDOW_ACTION (action)));
priv->loading = loading;
}
@@ -104,9 +102,6 @@ ephy_combined_stop_reload_action_get_property (GObject *object,
case PROP_LOADING:
g_value_set_boolean (value, action->priv->loading);
break;
- case PROP_WINDOW:
- g_value_set_object (value, action->priv->window);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
@@ -126,9 +121,6 @@ ephy_combined_stop_reload_action_set_property (GObject *object,
ephy_combined_stop_reload_action_set_loading (action,
g_value_get_boolean (value));
break;
- case PROP_WINDOW:
- action->priv->window = EPHY_WINDOW (g_value_get_object (value));
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
@@ -149,13 +141,6 @@ ephy_combined_stop_reload_action_class_init (EphyCombinedStopReloadActionClass *
g_param_spec_boolean ("loading", NULL, NULL,
FALSE,
G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
-
- g_object_class_install_property (object_class,
- PROP_WINDOW,
- g_param_spec_object ("window", NULL, NULL,
- EPHY_TYPE_WINDOW,
- G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
-
}
static void
diff --git a/src/ephy-link-action.c b/src/ephy-link-action.c
index 804aae7c4..665975a0b 100644
--- a/src/ephy-link-action.c
+++ b/src/ephy-link-action.c
@@ -25,10 +25,11 @@
#include "ephy-debug.h"
#include "ephy-gui.h"
#include "ephy-link.h"
+#include "ephy-window-action.h"
#include <gtk/gtk.h>
-G_DEFINE_TYPE_WITH_CODE (EphyLinkAction, ephy_link_action, GTK_TYPE_ACTION,
+G_DEFINE_TYPE_WITH_CODE (EphyLinkAction, ephy_link_action, EPHY_TYPE_WINDOW_ACTION,
G_IMPLEMENT_INTERFACE (EPHY_TYPE_LINK,
NULL))
diff --git a/src/ephy-link-action.h b/src/ephy-link-action.h
index a6b4419cc..b2113bd4e 100644
--- a/src/ephy-link-action.h
+++ b/src/ephy-link-action.h
@@ -24,6 +24,8 @@
#ifndef EPHY_LINK_ACTION_H
#define EPHY_LINK_ACTION_H
+#include "ephy-window-action.h"
+
#include <gtk/gtk.h>
G_BEGIN_DECLS
@@ -51,14 +53,14 @@ typedef struct _EphyLinkActionGroupClass EphyLinkActionGroupClass;
struct _EphyLinkAction
{
- GtkAction parent_instance;
+ EphyWindowAction parent_instance;
EphyLinkActionPrivate *priv;
};
struct _EphyLinkActionClass
{
- GtkActionClass parent_class;
+ EphyWindowActionClass parent_class;
};
struct _EphyLinkActionGroup
diff --git a/src/ephy-navigation-action.c b/src/ephy-navigation-action.c
deleted file mode 100644
index 438e6cf51..000000000
--- a/src/ephy-navigation-action.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/*
- * Copyright © 2003, 2004 Marco Pesenti Gritti
- * Copyright © 2003, 2004 Christian Persch
- * Copyright © 2008 Jan Alonzo
- * Copyright © 2009, 2011 Igalia S.L.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#include "config.h"
-#include "ephy-navigation-action.h"
-
-#include "ephy-middle-clickable-tool-button.h"
-#include "ephy-window.h"
-
-#include <gtk/gtk.h>
-
-#define EPHY_NAVIGATION_ACTION_GET_PRIVATE(object)(G_TYPE_INSTANCE_GET_PRIVATE ((object), EPHY_TYPE_NAVIGATION_ACTION, EphyNavigationActionPrivate))
-
-struct _EphyNavigationActionPrivate
-{
- EphyWindow *window;
-};
-
-enum
-{
- PROP_0,
- PROP_WINDOW
-};
-
-static void ephy_navigation_action_init (EphyNavigationAction *action);
-static void ephy_navigation_action_class_init (EphyNavigationActionClass *class);
-
-G_DEFINE_TYPE (EphyNavigationAction, ephy_navigation_action, EPHY_TYPE_LINK_ACTION)
-
-static void
-ephy_navigation_action_init (EphyNavigationAction *action)
-{
- action->priv = EPHY_NAVIGATION_ACTION_GET_PRIVATE (action);
-}
-
-static void
-ephy_navigation_action_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- EphyNavigationAction *nav = EPHY_NAVIGATION_ACTION (object);
-
- switch (prop_id)
- {
- case PROP_WINDOW:
- nav->priv->window = EPHY_WINDOW (g_value_get_object (value));
- break;
- }
-}
-
-static void
-ephy_navigation_action_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- EphyNavigationAction *nav = EPHY_NAVIGATION_ACTION (object);
-
- switch (prop_id)
- {
- case PROP_WINDOW:
- g_value_set_object (value, nav->priv->window);
- break;
- }
-}
-
-static void
-ephy_navigation_action_class_init (EphyNavigationActionClass *class)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (class);
- GtkActionClass *action_class = GTK_ACTION_CLASS (class);
-
- object_class->set_property = ephy_navigation_action_set_property;
- object_class->get_property = ephy_navigation_action_get_property;
-
- action_class->toolbar_item_type = EPHY_TYPE_MIDDLE_CLICKABLE_TOOL_BUTTON;
-
- g_object_class_install_property (object_class,
- PROP_WINDOW,
- g_param_spec_object ("window", NULL, NULL,
- G_TYPE_OBJECT,
- G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
-
- g_type_class_add_private (object_class, sizeof (EphyNavigationActionPrivate));
-}
-
-EphyWindow *
-_ephy_navigation_action_get_window (EphyNavigationAction *action)
-{
- g_return_val_if_fail (EPHY_IS_NAVIGATION_ACTION (action), NULL);
-
- return action->priv->window;
-}
diff --git a/src/ephy-navigation-action.h b/src/ephy-navigation-action.h
deleted file mode 100644
index 30c4b17b3..000000000
--- a/src/ephy-navigation-action.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright © 2003, 2004 Marco Pesenti Gritti
- * Copyright © 2003, 2004 Christian Persch
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-#if !defined (__EPHY_EPIPHANY_H_INSIDE__) && !defined (EPIPHANY_COMPILATION)
-#error "Only <epiphany/epiphany.h> can be included directly."
-#endif
-
-#ifndef EPHY_NAVIGATION_ACTION_H
-#define EPHY_NAVIGATION_ACTION_H
-
-#include "ephy-link-action.h"
-#include "ephy-window.h"
-
-G_BEGIN_DECLS
-
-#define EPHY_TYPE_NAVIGATION_ACTION (ephy_navigation_action_get_type ())
-#define EPHY_NAVIGATION_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EPHY_TYPE_NAVIGATION_ACTION, EphyNavigationAction))
-#define EPHY_NAVIGATION_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EPHY_TYPE_NAVIGATION_ACTION, EphyNavigationActionClass))
-#define EPHY_IS_NAVIGATION_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EPHY_TYPE_NAVIGATION_ACTION))
-#define EPHY_IS_NAVIGATION_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EPHY_TYPE_NAVIGATION_ACTION))
-#define EPHY_NAVIGATION_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), EPHY_TYPE_NAVIGATION_ACTION, EphyNavigationActionClass))
-
-typedef struct _EphyNavigationAction EphyNavigationAction;
-typedef struct _EphyNavigationActionPrivate EphyNavigationActionPrivate;
-typedef struct _EphyNavigationActionClass EphyNavigationActionClass;
-
-struct _EphyNavigationAction
-{
- EphyLinkAction parent;
-
- /*< private >*/
- EphyNavigationActionPrivate *priv;
-};
-
-struct _EphyNavigationActionClass
-{
- EphyLinkActionClass parent_class;
-};
-
-GType ephy_navigation_action_get_type (void);
-
-/*< Protected >*/
-
-EphyWindow *_ephy_navigation_action_get_window (EphyNavigationAction *action);
-
-G_END_DECLS
-
-#endif
diff --git a/src/ephy-navigation-history-action.c b/src/ephy-navigation-history-action.c
index cac0735cf..1fdf937aa 100644
--- a/src/ephy-navigation-history-action.c
+++ b/src/ephy-navigation-history-action.c
@@ -56,7 +56,7 @@ enum {
static void ephy_navigation_history_action_init (EphyNavigationHistoryAction *action);
static void ephy_navigation_history_action_class_init (EphyNavigationHistoryActionClass *klass);
-G_DEFINE_TYPE (EphyNavigationHistoryAction, ephy_navigation_history_action, EPHY_TYPE_NAVIGATION_ACTION)
+G_DEFINE_TYPE (EphyNavigationHistoryAction, ephy_navigation_history_action, EPHY_TYPE_LINK_ACTION)
static void
ephy_history_cleared_cb (EphyHistory *history,
@@ -74,7 +74,7 @@ action_activate (GtkAction *action)
WebKitWebView *web_view;
history_action = EPHY_NAVIGATION_HISTORY_ACTION (action);
- window = _ephy_navigation_action_get_window (EPHY_NAVIGATION_ACTION (action));
+ window = ephy_window_action_get_window (EPHY_WINDOW_ACTION (action));
embed = ephy_embed_container_get_active_child (EPHY_EMBED_CONTAINER (window));
g_return_if_fail (embed != NULL);
diff --git a/src/ephy-navigation-history-action.h b/src/ephy-navigation-history-action.h
index 6388b4da3..d455e86d2 100644
--- a/src/ephy-navigation-history-action.h
+++ b/src/ephy-navigation-history-action.h
@@ -26,7 +26,7 @@
#ifndef EPHY_NAVIGATION_HISTORY_ACTION_H
#define EPHY_NAVIGATION_HISTORY_ACTION_H
-#include "ephy-navigation-action.h"
+#include "ephy-link-action.h"
G_BEGIN_DECLS
@@ -49,7 +49,7 @@ typedef struct _EphyNavigationHistoryActionClass EphyNavigationHistoryActionClas
struct _EphyNavigationHistoryAction
{
- EphyNavigationAction parent;
+ EphyLinkAction parent;
/*< private >*/
EphyNavigationHistoryActionPrivate *priv;
@@ -57,7 +57,7 @@ struct _EphyNavigationHistoryAction
struct _EphyNavigationHistoryActionClass
{
- EphyNavigationActionClass parent_class;
+ EphyLinkActionClass parent_class;
};
GType ephy_navigation_history_action_get_type (void);
diff --git a/src/ephy-page-menu-action.c b/src/ephy-page-menu-action.c
index 2342512ae..dad11c4cb 100644
--- a/src/ephy-page-menu-action.c
+++ b/src/ephy-page-menu-action.c
@@ -21,7 +21,7 @@
#include "config.h"
#include "ephy-page-menu-action.h"
-G_DEFINE_TYPE (EphyPageMenuAction, ephy_page_menu_action, EPHY_TYPE_NAVIGATION_ACTION);
+G_DEFINE_TYPE (EphyPageMenuAction, ephy_page_menu_action, EPHY_TYPE_WINDOW_ACTION);
static void
menu_position_func (GtkMenu *menu,
@@ -66,7 +66,7 @@ ephy_page_menu_action_activate (GtkAction *action)
guint activate_button = 1;
guint32 activate_time = 0;
- window = _ephy_navigation_action_get_window (EPHY_NAVIGATION_ACTION (action));
+ window = ephy_window_action_get_window (EPHY_WINDOW_ACTION (action));
manager = GTK_UI_MANAGER (ephy_window_get_ui_manager (window));
menu = gtk_ui_manager_get_widget (manager, "/ui/PagePopup");
diff --git a/src/ephy-page-menu-action.h b/src/ephy-page-menu-action.h
index c7239b655..c510f944b 100644
--- a/src/ephy-page-menu-action.h
+++ b/src/ephy-page-menu-action.h
@@ -21,7 +21,7 @@
#ifndef __EPHY_PAGE_MENU_ACTION_H__
#define __EPHY_PAGE_MENU_ACTION_H__
-#include "ephy-navigation-action.h"
+#include "ephy-window-action.h"
#include <gtk/gtk.h>
@@ -38,11 +38,11 @@ typedef struct _EphyPageMenuAction EphyPageMenuAction;
typedef struct _EphyPageMenuActionClass EphyPageMenuActionClass;
struct _EphyPageMenuActionClass {
- EphyNavigationActionClass parent_class;
+ EphyWindowActionClass parent_class;
};
struct _EphyPageMenuAction {
- EphyNavigationAction parent_instance;
+ EphyWindowAction parent_instance;
};
GType ephy_page_menu_action_get_type (void) G_GNUC_CONST;
diff --git a/src/ephy-toolbar.c b/src/ephy-toolbar.c
index b167f06d8..2e1b1199e 100644
--- a/src/ephy-toolbar.c
+++ b/src/ephy-toolbar.c
@@ -21,6 +21,8 @@
#include "config.h"
#include "ephy-toolbar.h"
+#include "ephy-middle-clickable-button.h"
+
G_DEFINE_TYPE (EphyToolbar, ephy_toolbar, GTK_TYPE_TOOLBAR)
#define EPHY_TOOLBAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), EPHY_TYPE_TOOLBAR, EphyToolbarPrivate))
@@ -90,7 +92,7 @@ ephy_toolbar_constructed (GObject *object)
box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
/* Back */
- tool_button = gtk_button_new ();
+ tool_button = ephy_middle_clickable_button_new ();
/* FIXME: apparently we need an image inside the button for the action
* icon to appear. */
gtk_button_set_image (GTK_BUTTON (tool_button), gtk_image_new ());
@@ -101,7 +103,7 @@ ephy_toolbar_constructed (GObject *object)
gtk_container_add (GTK_CONTAINER (box), GTK_WIDGET (tool_button));
/* Forward */
- tool_button = gtk_button_new ();
+ tool_button = ephy_middle_clickable_button_new ();
/* FIXME: apparently we need an image inside the button for the action
* icon to appear. */
gtk_button_set_image (GTK_BUTTON (tool_button), gtk_image_new ());
diff --git a/src/ephy-window-action.c b/src/ephy-window-action.c
new file mode 100644
index 000000000..f04d7e5a3
--- /dev/null
+++ b/src/ephy-window-action.c
@@ -0,0 +1,102 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Copyright © 2012 Igalia S.L.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "ephy-window-action.h"
+
+#include <gtk/gtk.h>
+
+#define EPHY_WINDOW_ACTION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), EPHY_TYPE_WINDOW_ACTION, EphyWindowActionPrivate))
+
+struct _EphyWindowActionPrivate {
+ EphyWindow *window;
+};
+
+enum {
+ PROP_0,
+ PROP_WINDOW
+};
+
+G_DEFINE_TYPE (EphyWindowAction, ephy_window_action, GTK_TYPE_ACTION)
+
+static void
+ephy_window_action_init (EphyWindowAction *action)
+{
+ action->priv = EPHY_WINDOW_ACTION_GET_PRIVATE (action);
+}
+
+static void
+ephy_window_action_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EphyWindowAction *action = EPHY_WINDOW_ACTION (object);
+
+ switch (property_id) {
+ case PROP_WINDOW:
+ action->priv->window = EPHY_WINDOW (g_value_get_object (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+}
+
+static void
+ephy_window_action_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EphyWindowAction *action = EPHY_WINDOW_ACTION (object);
+
+ switch (property_id) {
+ case PROP_WINDOW:
+ g_value_set_object (value, action->priv->window);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+}
+
+static void
+ephy_window_action_class_init (EphyWindowActionClass *class)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (class);
+
+ object_class->set_property = ephy_window_action_set_property;
+ object_class->get_property = ephy_window_action_get_property;
+
+ g_object_class_install_property (object_class,
+ PROP_WINDOW,
+ g_param_spec_object ("window", NULL, NULL,
+ G_TYPE_OBJECT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK | G_PARAM_STATIC_BLURB));
+
+ g_type_class_add_private (object_class, sizeof (EphyWindowActionPrivate));
+}
+
+EphyWindow *
+ephy_window_action_get_window (EphyWindowAction *action)
+{
+ g_return_val_if_fail (EPHY_IS_WINDOW_ACTION (action), NULL);
+
+ return action->priv->window;
+}
diff --git a/src/ephy-window-action.h b/src/ephy-window-action.h
new file mode 100644
index 000000000..388bdfaeb
--- /dev/null
+++ b/src/ephy-window-action.h
@@ -0,0 +1,62 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Copyright © 2012 Igalia S.L.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#if !defined (__EPHY_EPIPHANY_H_INSIDE__) && !defined (EPIPHANY_COMPILATION)
+#error "Only <epiphany/epiphany.h> can be included directly."
+#endif
+
+#ifndef EPHY_WINDOW_ACTION_H
+#define EPHY_WINDOW_ACTION_H
+
+#include "ephy-window.h"
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define EPHY_TYPE_WINDOW_ACTION (ephy_window_action_get_type ())
+#define EPHY_WINDOW_ACTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EPHY_TYPE_WINDOW_ACTION, EphyWindowAction))
+#define EPHY_WINDOW_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EPHY_TYPE_WINDOW_ACTION, EphyWindowActionClass))
+#define EPHY_IS_WINDOW_ACTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EPHY_TYPE_WINDOW_ACTION))
+#define EPHY_IS_WINDOW_ACTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), EPHY_TYPE_WINDOW_ACTION))
+#define EPHY_WINDOW_ACTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), EPHY_TYPE_WINDOW_ACTION, EphyWindowActionClass))
+
+typedef struct _EphyWindowAction EphyWindowAction;
+typedef struct _EphyWindowActionPrivate EphyWindowActionPrivate;
+typedef struct _EphyWindowActionClass EphyWindowActionClass;
+
+struct _EphyWindowAction {
+ GtkAction parent;
+
+ /*< private >*/
+ EphyWindowActionPrivate *priv;
+};
+
+struct _EphyWindowActionClass {
+ GtkActionClass parent_class;
+};
+
+GType ephy_window_action_get_type (void);
+
+EphyWindow *ephy_window_action_get_window (EphyWindowAction *action);
+
+G_END_DECLS
+
+#endif