diff options
author | Matthias Clasen <mclasen@redhat.com> | 2014-11-13 23:09:21 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2014-11-14 06:16:41 -0500 |
commit | 49cf85509aa679439a42866318c7ce6a9b1a2588 (patch) | |
tree | aef23d3cb0e2cefdabe1850370da79c96504bbcf | |
parent | 61286d592738d69b46f0437808133757c853a1b1 (diff) | |
download | gtk+-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.c | 48 |
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); |