aboutsummaryrefslogtreecommitdiffstats
path: root/src/ephy-navigation-action.c
diff options
context:
space:
mode:
authorPhilip Langdale <philipl@mail.utexas.edu>2005-10-17 02:59:45 +0800
committerPhilip Langdale <philipl@src.gnome.org>2005-10-17 02:59:45 +0800
commitfdb745c1c9f97a2f60c84397e6e160912eec0430 (patch)
tree534ae50d00bb452c247a9805ff5da9b7a3909cba /src/ephy-navigation-action.c
parent803df66ce8311b4630402a5c6efad3922af8dd6b (diff)
downloadgsoc2013-epiphany-fdb745c1c9f97a2f60c84397e6e160912eec0430.tar
gsoc2013-epiphany-fdb745c1c9f97a2f60c84397e6e160912eec0430.tar.gz
gsoc2013-epiphany-fdb745c1c9f97a2f60c84397e6e160912eec0430.tar.bz2
gsoc2013-epiphany-fdb745c1c9f97a2f60c84397e6e160912eec0430.tar.lz
gsoc2013-epiphany-fdb745c1c9f97a2f60c84397e6e160912eec0430.tar.xz
gsoc2013-epiphany-fdb745c1c9f97a2f60c84397e6e160912eec0430.tar.zst
gsoc2013-epiphany-fdb745c1c9f97a2f60c84397e6e160912eec0430.zip
Exten the EphyLinkAction to attach a mouse-release-event handler which
2005-10-16 Philip Langdale <philipl@mail.utexas.edu> * src/ephy-link-action.c: (proxy_button_release_event_cb), (get_event_widget), (ephy_link_action_connect_proxy), (ephy_link_action_disconnect_proxy), (ephy_link_action_class_init), (ephy_link_action_get_type): Exten the EphyLinkAction to attach a mouse-release-event handler which turns around and calls gtk_action_activate in response to a middle-click even on the proxy. This allows us to fully encapsulate the extra work needed to catch middle clicks. The GoHome action will automatically start working correctly now that it is getting activated in this case. * src/ephy-navigation-action.c: (activate_by_history_index), (activate_back_or_forward_menu_item_cb), (ephy_navigation_action_activate), (ephy_navigation_action_class_init): Fully enscapsulate 'activate' handling inside the action. This is more consistent because the menus are already handled internally. Also add support for middle-click on back/forward/up. * src/ephy-toolbar.c: (ephy_toolbar_set_window): Don't attach 'activate' signal handlers to the navigate actions because activation is now handled internally to the action. I intend to make a followup change that removes the separate actions for GoUp/Back/Forward in the menu and replace them with the main actions already used in the toolbar. This means the menu items will get middle-click support for free. * lib/ephy-gui.c: (ephy_gui_is_middle_click): Only consider an unmodified middle-click to be a middle-click.
Diffstat (limited to 'src/ephy-navigation-action.c')
-rw-r--r--src/ephy-navigation-action.c52
1 files changed, 45 insertions, 7 deletions
diff --git a/src/ephy-navigation-action.c b/src/ephy-navigation-action.c
index 42c39d47b..08a93a3b9 100644
--- a/src/ephy-navigation-action.c
+++ b/src/ephy-navigation-action.c
@@ -138,18 +138,14 @@ new_history_menu_item (const char *origtext,
}
static void
-activate_back_or_forward_menu_item_cb (GtkWidget *menuitem,
- EphyNavigationAction *action)
+activate_by_history_index (EphyNavigationAction *action,
+ int index)
{
EphyEmbed *embed;
- int go_nth;
- char *url;
embed = ephy_window_get_active_embed (action->priv->window);
g_return_if_fail (embed != NULL);
- go_nth = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menuitem), NTH_DATA_KEY));
-
if (ephy_gui_is_middle_click ())
{
EphyEmbed *dest;
@@ -165,7 +161,18 @@ activate_back_or_forward_menu_item_cb (GtkWidget *menuitem,
ephy_embed_shistory_copy (embed, dest, TRUE, TRUE, FALSE);
embed = dest;
}
- ephy_embed_shistory_go_nth (embed, go_nth);
+ ephy_embed_shistory_go_nth (embed, index);
+}
+
+static void
+activate_back_or_forward_menu_item_cb (GtkWidget *menuitem,
+ EphyNavigationAction *action)
+{
+ int go_nth;
+
+ go_nth = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menuitem), NTH_DATA_KEY));
+
+ activate_by_history_index(action, go_nth);
}
static void
@@ -397,6 +404,36 @@ connect_proxy (GtkAction *action, GtkWidget *proxy)
}
static void
+ephy_navigation_action_activate (GtkAction *gtk_action)
+{
+ EphyNavigationAction *action = EPHY_NAVIGATION_ACTION (gtk_action);
+ EphyWindow *window = action->priv->window;
+ EphyEmbed *embed;
+ int pos;
+
+ embed = ephy_window_get_active_embed (window);
+ g_return_if_fail (embed != NULL);
+
+ pos = ephy_embed_shistory_get_pos (embed);
+
+ if (action->priv->direction == EPHY_NAVIGATION_DIRECTION_BACK)
+ {
+ activate_by_history_index (action, pos - 1);
+ }
+ else if (action->priv->direction == EPHY_NAVIGATION_DIRECTION_FORWARD)
+ {
+ activate_by_history_index (action, pos + 1);
+ }
+ else if (action->priv->direction == EPHY_NAVIGATION_DIRECTION_UP)
+ {
+ ephy_link_open (EPHY_LINK (action),
+ ephy_embed_get_go_up_list (embed)->data,
+ NULL,
+ ephy_gui_is_middle_click () ? EPHY_LINK_NEW_TAB : 0);
+ }
+}
+
+static void
ephy_navigation_action_init (EphyNavigationAction *action)
{
action->priv = EPHY_NAVIGATION_ACTION_GET_PRIVATE (action);
@@ -482,6 +519,7 @@ ephy_navigation_action_class_init (EphyNavigationActionClass *class)
action_class->toolbar_item_type = GTK_TYPE_MENU_TOOL_BUTTON;
action_class->connect_proxy = connect_proxy;
+ action_class->activate = ephy_navigation_action_activate;
g_object_class_install_property (object_class,
PROP_ARROW_TOOLTIP,