Plug cursor leak in new XCursor support, only impacts those additions.

Plug a pre-existing key_grab leak.  e17 was leaving passive grabs in
the server and not releasing them.  Looks like a bug in the new config parts.

Kevin Brosius <cobra@compuserve.com>


SVN revision: 6755
This commit is contained in:
sleuth 2003-03-08 23:55:57 +00:00 committed by sleuth
parent 813f640d06
commit 78dbd1acf9
3 changed files with 32 additions and 17 deletions

View File

@ -311,6 +311,15 @@ e_config_behavior_changed(E_Observer * observer, E_Observee * observee,
if (config_data)
{
for (l = config_data->actions; l; l = l->next)
{
E_Action *a;
a = l->data;
e_object_unref((E_Object *)a);
l->data = NULL;
}
e_data_free(cfg_config, (char *)config_data);
FREE(config_data);
}

View File

@ -296,10 +296,23 @@ e_cursors_display_in_window(Window win, char *type)
if (c)
{
c->cursor =
ecore_cursor_new(pmap, mask, hx, hy, fr, fg, fb, br, bg, bb);
ecore_pixmap_free(pmap);
ecore_pixmap_free(mask);
/* If behavior.db has /desktops/cursors/native == 1, then use */
/* images installed */
/* by E, else use X cursors by cursorfont id. */
/* Use E's pixmap? */
if(config_data->desktops->e_native_cursors)
{
c->cursor =
ecore_cursor_new(pmap, mask, hx, hy, fr, fg, fb, br, bg, bb);
ecore_pixmap_free(pmap);
ecore_pixmap_free(mask);
}
else
{
/* No, use X cursors */
c->cursor =
XCreateFontCursor(ecore_display_get(), c->x_cursor_id);
}
cursors = evas_list_append(cursors, c);
}
#if 0
@ -308,17 +321,7 @@ e_cursors_display_in_window(Window win, char *type)
}
if (c)
{
/* If behavior.db has /desktops/cursors/native == 1, then use */
/* images installed */
/* by E, else use X cursors by cursorfont id. */
if(config_data->desktops->e_native_cursors)
ecore_cursor_set(win, c->cursor);
else
{
Cursor x_cursor;
x_cursor = XCreateFontCursor(ecore_display_get(), c->x_cursor_id);
ecore_cursor_set(win, x_cursor);
}
ecore_cursor_set(win, c->cursor);
}
else
{

View File

@ -189,8 +189,11 @@ e_data_free(E_Data_Base_Type * type, char *data)
data2 = l2->data;
l2 = evas_list_remove(l2, data2);
e_data_free(node->sub_type, (char *)data2);
FREE(data2);
if(data2)
{
e_data_free(node->sub_type, (char *)data2);
FREE(data2);
}
}
}
break;