summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2014-11-13 23:09:21 -0500
committerMatthias Clasen <mclasen@redhat.com>2014-11-14 06:16:41 -0500
commit49cf85509aa679439a42866318c7ce6a9b1a2588 (patch)
treeaef23d3cb0e2cefdabe1850370da79c96504bbcf
parent61286d592738d69b46f0437808133757c853a1b1 (diff)
downloadgtk+-49cf85509aa679439a42866318c7ce6a9b1a2588.tar.gz
GtkPopover: Survive attach_widget == NULL
We can't render a tail, but otherwise things should just work. This will be useful in glade.
-rw-r--r--gtk/gtkpopover.c48
1 files changed, 30 insertions, 18 deletions
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index 2a31982798..550aa1457a 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -639,6 +639,9 @@ gtk_popover_apply_tail_path (GtkPopover *popover,
gint tip_x, tip_y;
gint final_x, final_y;
+ if (!popover->priv->widget)
+ return;
+
cairo_set_line_width (cr, 1);
gtk_popover_get_gap_coords (popover,
&initial_x, &initial_y,
@@ -843,29 +846,38 @@ gtk_popover_draw (GtkWidget *widget,
rect_x2 - rect_x1,
rect_y2 - rect_y1);
- gtk_popover_get_gap_coords (popover,
- &initial_x, &initial_y,
- NULL, NULL,
- &final_x, &final_y,
- &gap_side);
-
- if (POS_IS_VERTICAL (gap_side))
+ if (popover->priv->widget)
{
- gap_start = initial_x - rect_x1;
- gap_end = final_x - rect_x1;
+ gtk_popover_get_gap_coords (popover,
+ &initial_x, &initial_y,
+ NULL, NULL,
+ &final_x, &final_y,
+ &gap_side);
+
+ if (POS_IS_VERTICAL (gap_side))
+ {
+ gap_start = initial_x - rect_x1;
+ gap_end = final_x - rect_x1;
+ }
+ else
+ {
+ gap_start = initial_y - rect_y1;
+ gap_end = final_y - rect_y1;
+ }
+
+ /* Now render the frame, without the gap for the arrow tip */
+ gtk_render_frame_gap (context, cr,
+ rect_x1, rect_y1,
+ rect_x2 - rect_x1, rect_y2 - rect_y1,
+ gap_side,
+ gap_start, gap_end);
}
else
{
- gap_start = initial_y - rect_y1;
- gap_end = final_y - rect_y1;
- }
-
- /* Now render the frame, without the gap for the arrow tip */
- gtk_render_frame_gap (context, cr,
+ gtk_render_frame (context, cr,
rect_x1, rect_y1,
- rect_x2 - rect_x1, rect_y2 - rect_y1,
- gap_side,
- gap_start, gap_end);
+ rect_x2 - rect_x1, rect_y2 - rect_y1);
+ }
/* Clip to the arrow shape */
cairo_save (cr);