summaryrefslogtreecommitdiff
path: root/mate-panel/panel-applet-frame.c
diff options
context:
space:
mode:
authorTomas Bzatek <[email protected]>2020-07-16 17:39:22 +0200
committerraveit65 <[email protected]>2020-07-23 13:30:35 +0200
commit5f14b49e80d0e1195558803288a727084a4df33b (patch)
tree546acf8d2b4a79ff5a680e9fa2aecbf906d418f1 /mate-panel/panel-applet-frame.c
parenta3c1a007dcbe496d4e27f3cc93b428bbc4b54c8f (diff)
downloadmate-panel-5f14b49e80d0e1195558803288a727084a4df33b.tar.bz2
mate-panel-5f14b49e80d0e1195558803288a727084a4df33b.tar.xz
panel-applet-frame: Fix leaking bg_pattern
Also acquire it only when needed. This fixes a leak for me when switching workspaces back and forth.
Diffstat (limited to 'mate-panel/panel-applet-frame.c')
-rw-r--r--mate-panel/panel-applet-frame.c40
1 files changed, 21 insertions, 19 deletions
diff --git a/mate-panel/panel-applet-frame.c b/mate-panel/panel-applet-frame.c
index a3aa92e6..e2204b38 100644
--- a/mate-panel/panel-applet-frame.c
+++ b/mate-panel/panel-applet-frame.c
@@ -102,7 +102,6 @@ mate_panel_applet_frame_draw (GtkWidget *widget,
MatePanelAppletFrame *frame = MATE_PANEL_APPLET_FRAME (widget);
GtkStyleContext *context;
GtkStateFlags state;
- cairo_pattern_t *bg_pattern;
PanelBackground *background;
if (GTK_WIDGET_CLASS (mate_panel_applet_frame_parent_class)->draw)
@@ -118,25 +117,28 @@ mate_panel_applet_frame_draw (GtkWidget *widget,
cairo_save (cr);
- /* Set the pattern transform so as to correctly render a patterned
- * background with the handle */
- gtk_style_context_get (context, state,
- "background-image", &bg_pattern,
- NULL);
-
background = &frame->priv->panel->toplevel->background;
- if (bg_pattern && (background->type == PANEL_BACK_IMAGE ||
- (background->type == PANEL_BACK_COLOR && background->has_alpha))) {
- cairo_matrix_t ptm;
-
- cairo_matrix_init_translate (&ptm,
- frame->priv->handle_rect.x,
- frame->priv->handle_rect.y);
- cairo_matrix_scale (&ptm,
- frame->priv->handle_rect.width,
- frame->priv->handle_rect.height);
- cairo_pattern_set_matrix (bg_pattern, &ptm);
- cairo_pattern_destroy (bg_pattern);
+ if (background->type == PANEL_BACK_IMAGE ||
+ (background->type == PANEL_BACK_COLOR && background->has_alpha)) {
+ cairo_pattern_t *bg_pattern;
+
+ /* Set the pattern transform so as to correctly render a patterned
+ * background with the handle */
+ gtk_style_context_get (context, state,
+ "background-image", &bg_pattern,
+ NULL);
+ if (bg_pattern) {
+ cairo_matrix_t ptm;
+
+ cairo_matrix_init_translate (&ptm,
+ frame->priv->handle_rect.x,
+ frame->priv->handle_rect.y);
+ cairo_matrix_scale (&ptm,
+ frame->priv->handle_rect.width,
+ frame->priv->handle_rect.height);
+ cairo_pattern_set_matrix (bg_pattern, &ptm);
+ cairo_pattern_destroy (bg_pattern);
+ }
}
cairo_rectangle (cr,