aboutsummaryrefslogtreecommitdiffstats
path: root/src/ephy-location-action.c
diff options
context:
space:
mode:
authorXan Lopez <xan@gnome.org>2009-09-10 21:34:47 +0800
committerXan Lopez <xan@gnome.org>2009-09-10 21:38:59 +0800
commitb2dbd47c3f06203d4394c10599011734ad77ae32 (patch)
tree5e3e2f47b494e4009794d0315d89d6a9a1ea8415 /src/ephy-location-action.c
parent8512d034350be7c2484a365c3b200fe9f83f521e (diff)
downloadgsoc2013-epiphany-b2dbd47c3f06203d4394c10599011734ad77ae32.tar.gz
gsoc2013-epiphany-b2dbd47c3f06203d4394c10599011734ad77ae32.tar.zst
gsoc2013-epiphany-b2dbd47c3f06203d4394c10599011734ad77ae32.zip
ephy-location-action.c: unblock address sync on switch-page too
We need to unblock the address syncing for the location on switch-page too, since it's not guaranteed that we'll receive a focus-out or activate event before we are interested in resyncing the URL entry again. For example, if the focus is on the entry and we switch tabs with the keyboard shortcut the entry will go out of sync, keeping the URL of the previous tab. Bug #594346
Diffstat (limited to 'src/ephy-location-action.c')
-rw-r--r--src/ephy-location-action.c52
1 files changed, 46 insertions, 6 deletions
diff --git a/src/ephy-location-action.c b/src/ephy-location-action.c
index 0394d6e4a..66a3c6393 100644
--- a/src/ephy-location-action.c
+++ b/src/ephy-location-action.c
@@ -39,6 +39,7 @@
struct _EphyLocationActionPrivate
{
EphyWindow *window;
+ GtkWidget *proxy;
GList *actions;
char *address;
char *typed_address;
@@ -180,12 +181,14 @@ entry_activate_cb (GtkEntry *entry,
const char *content;
char *address;
GtkAction *action;
+ EphyLocationActionPrivate *priv;
action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (proxy));
+ priv = EPHY_LOCATION_ACTION (action)->priv;
- if (EPHY_LOCATION_ACTION (action)->priv->sync_address_is_blocked)
+ if (priv->sync_address_is_blocked)
{
- EPHY_LOCATION_ACTION (action)->priv->sync_address_is_blocked = FALSE;
+ priv->sync_address_is_blocked = FALSE;
g_signal_handlers_unblock_by_func (action, G_CALLBACK (sync_address), proxy);
}
@@ -396,11 +399,14 @@ focus_in_event_cb (GtkWidget *entry,
GtkWidget *proxy)
{
GtkAction *action;
+ EphyLocationActionPrivate *priv;
+
action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (proxy));
- if (!EPHY_LOCATION_ACTION (action)->priv->sync_address_is_blocked)
+ priv = EPHY_LOCATION_ACTION (action)->priv;
+ if (!priv->sync_address_is_blocked)
{
- EPHY_LOCATION_ACTION (action)->priv->sync_address_is_blocked = TRUE;
+ priv->sync_address_is_blocked = TRUE;
g_signal_handlers_block_by_func (action, G_CALLBACK (sync_address), proxy);
}
@@ -413,11 +419,14 @@ focus_out_event_cb (GtkWidget *entry,
GtkWidget *proxy)
{
GtkAction *action;
+ EphyLocationActionPrivate *priv;
+
action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (proxy));
+ priv = EPHY_LOCATION_ACTION (action)->priv;
- if (EPHY_LOCATION_ACTION (action)->priv->sync_address_is_blocked)
+ if (priv->sync_address_is_blocked)
{
- EPHY_LOCATION_ACTION (action)->priv->sync_address_is_blocked = FALSE;
+ priv->sync_address_is_blocked = FALSE;
g_signal_handlers_unblock_by_func (action, G_CALLBACK (sync_address), proxy);
}
@@ -425,6 +434,23 @@ focus_out_event_cb (GtkWidget *entry,
}
static void
+switch_page_cb (GtkNotebook *notebook,
+ GtkNotebookPage *page,
+ guint page_num,
+ GtkAction *action)
+{
+ EphyLocationActionPrivate *priv;
+
+ priv = EPHY_LOCATION_ACTION (action)->priv;
+
+ if (priv->sync_address_is_blocked == TRUE)
+ {
+ priv->sync_address_is_blocked = FALSE;
+ g_signal_handlers_unblock_by_func (action, G_CALLBACK (sync_address), priv->proxy);
+ }
+}
+
+static void
connect_proxy (GtkAction *action, GtkWidget *proxy)
{
if (EPHY_IS_LOCATION_ENTRY (proxy))
@@ -432,6 +458,16 @@ connect_proxy (GtkAction *action, GtkWidget *proxy)
EphyLocationEntry *lentry = EPHY_LOCATION_ENTRY (proxy);
EphyCompletionModel *model;
GtkWidget *entry;
+ GtkWidget *notebook;
+ EphyLocationActionPrivate *priv;
+
+ priv = EPHY_LOCATION_ACTION (action)->priv;
+ priv->proxy = proxy;
+
+ notebook = ephy_window_get_notebook (priv->window);
+
+ g_signal_connect (notebook, "switch-page",
+ G_CALLBACK (switch_page_cb), action);
model = ephy_completion_model_new ();
ephy_location_entry_set_completion (EPHY_LOCATION_ENTRY (proxy),
@@ -504,6 +540,10 @@ disconnect_proxy (GtkAction *action, GtkWidget *proxy)
{
EphyLocationEntry *lentry = EPHY_LOCATION_ENTRY (proxy);
GtkWidget *entry;
+ EphyLocationActionPrivate *priv;
+
+ priv = EPHY_LOCATION_ACTION (action)->priv;
+ priv->proxy = NULL;
entry = ephy_location_entry_get_entry (lentry);