From ac268fce9a5d84cfb24abbbb4f245bd1bf8539a2 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 18 Jan 2017 16:01:33 +0100 Subject: [PATCH] Bug 775656 - Delete key mapping stops working ][ --- src/e-util/e-preview-pane.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/e-util/e-preview-pane.c b/src/e-util/e-preview-pane.c index 824f5562bf..aaa2589029 100644 --- a/src/e-util/e-preview-pane.c +++ b/src/e-util/e-preview-pane.c @@ -22,6 +22,7 @@ #include "e-alert-bar.h" #include "e-alert-dialog.h" #include "e-alert-sink.h" +#include "e-misc-utils.h" #define E_PREVIEW_PANE_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE \ @@ -68,6 +69,28 @@ preview_pane_web_view_new_activity_cb (EWebView *web_view, e_activity_set_alert_sink (activity, E_ALERT_SINK (preview_pane)); } +static void +preview_pane_alert_bar_visible_notify_cb (GtkWidget *alert_bar, + GParamSpec *param, + EPreviewPane *preview_pane) +{ + GtkWidget *toplevel, *focused; + + g_return_if_fail (E_IS_ALERT_BAR (alert_bar)); + g_return_if_fail (E_IS_PREVIEW_PANE (preview_pane)); + + if (gtk_widget_get_visible (alert_bar)) + return; + + toplevel = gtk_widget_get_toplevel (GTK_WIDGET (preview_pane)); + focused = GTK_IS_WINDOW (toplevel) ? gtk_window_get_focus (GTK_WINDOW (toplevel)) : NULL; + + if (!focused && preview_pane->priv->web_view && + gtk_widget_get_visible (preview_pane->priv->web_view)) { + gtk_widget_grab_focus (preview_pane->priv->web_view); + } +} + static void preview_pane_set_web_view (EPreviewPane *preview_pane, EWebView *web_view) @@ -172,6 +195,9 @@ preview_pane_constructed (GObject *object) priv->search_bar = g_object_ref (widget); gtk_widget_hide (widget); + e_signal_connect_notify (priv->alert_bar, "notify::visible", + G_CALLBACK (preview_pane_alert_bar_visible_notify_cb), object); + /* Chain up to parent's constructed() method. */ G_OBJECT_CLASS (e_preview_pane_parent_class)->constructed (object); }