[gtk/wip/carlosg/input-fixes: 5/7] gtkpopover: Roll back properly if presenting the popup fails
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/carlosg/input-fixes: 5/7] gtkpopover: Roll back properly if presenting the popup fails
- Date: Fri, 24 Apr 2020 21:18:39 +0000 (UTC)
commit 67e1acd4d7933139e37dddb4e4f102c0ea6d1168
Author: Carlos Garnacho <carlosg gnome org>
Date: Fri Apr 24 23:06:52 2020 +0200
gtkpopover: Roll back properly if presenting the popup fails
If the popover fails to be shown, it would internally undo visible
and mapped state. If we just proceed as normal, the widget enters
in inconsistent state, and a grab remains issued on the invisible
widget, preventing further input from the input device.
gtk/gtkpopover.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index a2a6adf654..89e5912e66 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -540,7 +540,7 @@ create_popup_layout (GtkPopover *popover)
return layout;
}
-static void
+static gboolean
present_popup (GtkPopover *popover)
{
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
@@ -553,7 +553,12 @@ present_popup (GtkPopover *popover)
MAX (req.width, 1),
MAX (req.height, 1),
layout))
- update_popover_layout (popover, layout);
+ {
+ update_popover_layout (popover, layout);
+ return TRUE;
+ }
+
+ return FALSE;
}
static void
@@ -913,7 +918,9 @@ gtk_popover_show (GtkWidget *widget)
_gtk_widget_set_visible_flag (widget, TRUE);
gtk_widget_realize (widget);
- present_popup (popover);
+ if (!present_popup (popover))
+ return;
+
gtk_widget_map (widget);
if (priv->autohide)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]