Fix memleaks.
This commit is contained in:
@ -103,6 +103,7 @@ eek_gtk_keyboard_real_draw (GtkWidget *self,
|
|||||||
GtkStyle *style;
|
GtkStyle *style;
|
||||||
GtkStateType state;
|
GtkStateType state;
|
||||||
PangoContext *pcontext;
|
PangoContext *pcontext;
|
||||||
|
EekColor *color;
|
||||||
|
|
||||||
pcontext = gtk_widget_get_pango_context (self);
|
pcontext = gtk_widget_get_pango_context (self);
|
||||||
priv->renderer = eek_gtk_renderer_new (priv->keyboard, pcontext, self);
|
priv->renderer = eek_gtk_renderer_new (priv->keyboard, pcontext, self);
|
||||||
@ -114,12 +115,13 @@ eek_gtk_keyboard_real_draw (GtkWidget *self,
|
|||||||
style = gtk_widget_get_style (self);
|
style = gtk_widget_get_style (self);
|
||||||
state = gtk_widget_get_state (self);
|
state = gtk_widget_get_state (self);
|
||||||
|
|
||||||
eek_renderer_set_foreground
|
color = color_from_gdk_color (&style->fg[state]);
|
||||||
(priv->renderer,
|
eek_renderer_set_foreground (priv->renderer, color);
|
||||||
color_from_gdk_color (&style->fg[state]));
|
eek_color_free (color);
|
||||||
eek_renderer_set_background
|
|
||||||
(priv->renderer,
|
color = color_from_gdk_color (&style->bg[state]);
|
||||||
color_from_gdk_color (&style->bg[state]));
|
eek_renderer_set_background (priv->renderer, color);
|
||||||
|
eek_color_free (color);
|
||||||
}
|
}
|
||||||
|
|
||||||
eek_renderer_render_keyboard (priv->renderer, cr);
|
eek_renderer_render_keyboard (priv->renderer, cr);
|
||||||
@ -336,14 +338,10 @@ eek_gtk_keyboard_new (EekKeyboard *keyboard)
|
|||||||
static EekColor *
|
static EekColor *
|
||||||
color_from_gdk_color (GdkColor *gdk_color)
|
color_from_gdk_color (GdkColor *gdk_color)
|
||||||
{
|
{
|
||||||
EekColor *color;
|
return eek_color_new (gdk_color->red / (gdouble)0xFFFF,
|
||||||
|
gdk_color->green / (gdouble)0xFFFF,
|
||||||
color = g_slice_new (EekColor);
|
gdk_color->blue / (gdouble)0xFFFF,
|
||||||
color->red = gdk_color->red / (gdouble)0xFFFF;
|
1.0);
|
||||||
color->green = gdk_color->green / (gdouble)0xFFFF;
|
|
||||||
color->blue = gdk_color->blue / (gdouble)0xFFFF;
|
|
||||||
color->alpha = 1.0;
|
|
||||||
return color;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@ -99,6 +99,7 @@ eek_gtk_renderer_real_render_key_icon (EekRenderer *self,
|
|||||||
|
|
||||||
eek_renderer_apply_transformation_for_key (self, cr, key, scale, rotate);
|
eek_renderer_apply_transformation_for_key (self, cr, key, scale, rotate);
|
||||||
surface = pixbuf_to_cairo_surface (pixbuf);
|
surface = pixbuf_to_cairo_surface (pixbuf);
|
||||||
|
g_object_unref (pixbuf);
|
||||||
cairo_set_source_surface (cr, surface, 0.0, 0.0);
|
cairo_set_source_surface (cr, surface, 0.0, 0.0);
|
||||||
cairo_paint (cr);
|
cairo_paint (cr);
|
||||||
cairo_restore (cr);
|
cairo_restore (cr);
|
||||||
|
|||||||
@ -775,6 +775,8 @@ eek_keyboard_add_outline (EekKeyboard *keyboard,
|
|||||||
|
|
||||||
_outline = eek_outline_copy (outline);
|
_outline = eek_outline_copy (outline);
|
||||||
g_array_append_val (priv->outline_array, *_outline);
|
g_array_append_val (priv->outline_array, *_outline);
|
||||||
|
/* don't use eek_outline_free here, so as to keep _outline->points */
|
||||||
|
g_slice_free (EekOutline, _outline);
|
||||||
return priv->outline_array->len;
|
return priv->outline_array->len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -380,6 +380,7 @@ render_key (EekRenderer *self,
|
|||||||
cairo_fill (cr);
|
cairo_fill (cr);
|
||||||
|
|
||||||
eek_renderer_render_key_outline (self, cr, key, 1.0, 0);
|
eek_renderer_render_key_outline (self, cr, key, 1.0, 0);
|
||||||
|
cairo_destroy (cr);
|
||||||
|
|
||||||
g_hash_table_insert (priv->outline_surface_cache,
|
g_hash_table_insert (priv->outline_surface_cache,
|
||||||
outline,
|
outline,
|
||||||
@ -493,6 +494,7 @@ eek_renderer_real_render_key_label (EekRenderer *self,
|
|||||||
}
|
}
|
||||||
pango_font_description_set_size (font, size * priv->scale * scale);
|
pango_font_description_set_size (font, size * priv->scale * scale);
|
||||||
pango_layout_set_font_description (layout, font);
|
pango_layout_set_font_description (layout, font);
|
||||||
|
pango_font_description_free (font);
|
||||||
pango_layout_set_text (layout, label, -1);
|
pango_layout_set_text (layout, label, -1);
|
||||||
pango_layout_set_width (layout,
|
pango_layout_set_width (layout,
|
||||||
PANGO_SCALE * bounds.width * priv->scale * scale);
|
PANGO_SCALE * bounds.width * priv->scale * scale);
|
||||||
@ -617,6 +619,9 @@ eek_renderer_finalize (GObject *object)
|
|||||||
{
|
{
|
||||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object);
|
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object);
|
||||||
g_hash_table_destroy (priv->outline_surface_cache);
|
g_hash_table_destroy (priv->outline_surface_cache);
|
||||||
|
eek_color_free (priv->foreground);
|
||||||
|
eek_color_free (priv->background);
|
||||||
|
pango_font_description_free (priv->font);
|
||||||
G_OBJECT_CLASS (eek_renderer_parent_class)->finalize (object);
|
G_OBJECT_CLASS (eek_renderer_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -658,12 +663,6 @@ eek_renderer_class_init (EekRendererClass *klass)
|
|||||||
pspec);
|
pspec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
free_surface (gpointer data)
|
|
||||||
{
|
|
||||||
cairo_surface_destroy (data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eek_renderer_init (EekRenderer *self)
|
eek_renderer_init (EekRenderer *self)
|
||||||
{
|
{
|
||||||
@ -681,7 +680,7 @@ eek_renderer_init (EekRenderer *self)
|
|||||||
g_hash_table_new_full (g_direct_hash,
|
g_hash_table_new_full (g_direct_hash,
|
||||||
g_direct_equal,
|
g_direct_equal,
|
||||||
NULL,
|
NULL,
|
||||||
free_surface);
|
(GDestroyNotify)cairo_surface_destroy);
|
||||||
priv->keyboard_surface = NULL;
|
priv->keyboard_surface = NULL;
|
||||||
priv->symbol_index_changed_handler = 0;
|
priv->symbol_index_changed_handler = 0;
|
||||||
}
|
}
|
||||||
@ -941,7 +940,9 @@ eek_renderer_set_foreground (EekRenderer *renderer,
|
|||||||
g_return_if_fail (foreground);
|
g_return_if_fail (foreground);
|
||||||
|
|
||||||
priv = EEK_RENDERER_GET_PRIVATE(renderer);
|
priv = EEK_RENDERER_GET_PRIVATE(renderer);
|
||||||
priv->foreground = g_boxed_copy (EEK_TYPE_COLOR, foreground);
|
if (priv->foreground)
|
||||||
|
eek_color_free (priv->foreground);
|
||||||
|
priv->foreground = eek_color_copy (foreground);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -954,7 +955,9 @@ eek_renderer_set_background (EekRenderer *renderer,
|
|||||||
g_return_if_fail (background);
|
g_return_if_fail (background);
|
||||||
|
|
||||||
priv = EEK_RENDERER_GET_PRIVATE(renderer);
|
priv = EEK_RENDERER_GET_PRIVATE(renderer);
|
||||||
priv->background = g_boxed_copy (EEK_TYPE_COLOR, background);
|
if (priv->background)
|
||||||
|
eek_color_free (priv->background);
|
||||||
|
priv->background = eek_color_copy (background);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@ -180,13 +180,13 @@ eek_outline_get_type (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* EekColor */
|
/* EekColor */
|
||||||
static EekColor *
|
EekColor *
|
||||||
eek_color_copy (const EekColor *color)
|
eek_color_copy (const EekColor *color)
|
||||||
{
|
{
|
||||||
return g_slice_dup (EekColor, color);
|
return g_slice_dup (EekColor, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
void
|
||||||
eek_color_free (EekColor *color)
|
eek_color_free (EekColor *color)
|
||||||
{
|
{
|
||||||
g_slice_free (EekColor, color);
|
g_slice_free (EekColor, color);
|
||||||
|
|||||||
@ -250,6 +250,8 @@ EekColor *eek_color_new (gdouble red,
|
|||||||
gdouble green,
|
gdouble green,
|
||||||
gdouble blue,
|
gdouble blue,
|
||||||
gdouble alpha);
|
gdouble alpha);
|
||||||
|
EekColor *eek_color_copy (const EekColor *color);
|
||||||
|
void eek_color_free (EekColor *color);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
#endif /* EEK_TYPES_H */
|
#endif /* EEK_TYPES_H */
|
||||||
|
|||||||
@ -176,6 +176,7 @@ create_key (EekXkbLayout *layout,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
oref = eek_keyboard_add_outline (keyboard, outline);
|
oref = eek_keyboard_add_outline (keyboard, outline);
|
||||||
|
eek_outline_free (outline);
|
||||||
g_hash_table_insert (priv->shape_oref_hash, xkbshape, (gpointer)oref);
|
g_hash_table_insert (priv->shape_oref_hash, xkbshape, (gpointer)oref);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -388,6 +388,8 @@ eekboard_context_new (GDBusConnection *connection,
|
|||||||
context_name_vanished_callback,
|
context_name_vanished_callback,
|
||||||
context,
|
context,
|
||||||
NULL);
|
NULL);
|
||||||
|
g_free (name_owner);
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
@ -162,6 +162,7 @@ eekboard_eekboard_new (GDBusConnection *connection,
|
|||||||
eekboard_name_vanished_callback,
|
eekboard_name_vanished_callback,
|
||||||
eekboard,
|
eekboard,
|
||||||
NULL);
|
NULL);
|
||||||
|
g_free (name_owner);
|
||||||
|
|
||||||
return eekboard;
|
return eekboard;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -574,6 +574,7 @@ set_keyboard (EekboardDesktopClient *client,
|
|||||||
|
|
||||||
keyboard_name = g_strdup_printf ("keyboard%d", keyboard_serial++);
|
keyboard_name = g_strdup_printf ("keyboard%d", keyboard_serial++);
|
||||||
eek_element_set_name (EEK_ELEMENT(client->keyboard), keyboard_name);
|
eek_element_set_name (EEK_ELEMENT(client->keyboard), keyboard_name);
|
||||||
|
g_free (keyboard_name);
|
||||||
|
|
||||||
keyboard_id = eekboard_context_add_keyboard (client->context,
|
keyboard_id = eekboard_context_add_keyboard (client->context,
|
||||||
client->keyboard,
|
client->keyboard,
|
||||||
|
|||||||
Reference in New Issue
Block a user