[gtk+] popover: Track toplevel's focus widget when visible
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] popover: Track toplevel's focus widget when visible
- Date: Thu, 6 Mar 2014 23:46:19 +0000 (UTC)
commit 43e88528292b9c786be3de04cdd8b2a6fc8266dd
Author: Carlos Garnacho <carlosg gnome org>
Date: Thu Mar 6 16:58:06 2014 +0100
popover: Track toplevel's focus widget when visible
If the toplevel focus widget is forced out of the popover (eg. through
gtk_widget_grab_focus() anywhere else), then dismiss the popover.
gtk/gtkpopover.c | 15 +++++++++++++++
1 files changed, 15 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index 2286cff..a5ed377 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -302,6 +302,19 @@ window_focus_out (GtkWidget *widget,
}
static void
+window_set_focus (GtkWindow *window,
+ GtkWidget *widget,
+ GtkPopover *popover)
+{
+ GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
+
+ if (priv->modal &&
+ gtk_widget_is_drawable (GTK_WIDGET (popover)) &&
+ (!widget || !gtk_widget_is_ancestor (widget, GTK_WIDGET (popover))))
+ gtk_widget_hide (GTK_WIDGET (popover));
+}
+
+static void
gtk_popover_apply_modality (GtkPopover *popover,
gboolean modal)
{
@@ -322,6 +335,8 @@ gtk_popover_apply_modality (GtkPopover *popover,
G_CALLBACK (window_focus_in), popover);
g_signal_connect (priv->window, "focus-out-event",
G_CALLBACK (window_focus_out), popover);
+ g_signal_connect (priv->window, "set-focus",
+ G_CALLBACK (window_set_focus), popover);
}
else
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]