set/get supported as a list.

Don't use XFree on data allocated by ecore.


SVN revision: 15118
This commit is contained in:
sebastid 2005-06-04 10:01:23 +00:00 committed by sebastid
parent 9565d47963
commit 16dc9e614a
2 changed files with 30 additions and 66 deletions

View File

@ -1186,7 +1186,8 @@ EAPI int ecore_x_mwm_hints_get(Ecore_X_Window win,
/* netwm */
EAPI void ecore_x_netwm_init(void);
EAPI void ecore_x_netwm_wm_identify(Ecore_X_Window root, Ecore_X_Window check, const char *wm_name);
EAPI void ecore_x_netwm_supported(Ecore_X_Window root, Ecore_X_Atom atom, int supported);
EAPI int ecore_x_netwm_supported_set(Ecore_X_Window root, Ecore_X_Atom *supported, int num);
EAPI Ecore_X_Atom *ecore_x_netwm_supported_get(Ecore_X_Window root, int *num);
EAPI void ecore_x_netwm_desk_count_set(Ecore_X_Window root, unsigned int n_desks);
EAPI void ecore_x_netwm_desk_roots_set(Ecore_X_Window root, unsigned int n_desks, Ecore_X_Window * vroots);
EAPI void ecore_x_netwm_desk_names_set(Ecore_X_Window root, unsigned int n_desks, const char **names);

View File

@ -382,68 +382,31 @@ ecore_x_netwm_wm_identify(Ecore_X_Window root, Ecore_X_Window check,
/*
* Set supported atoms
*/
void
ecore_x_netwm_supported(Ecore_X_Window root, Ecore_X_Atom atom, int supported)
int
ecore_x_netwm_supported_set(Ecore_X_Window root, Ecore_X_Atom *supported, int num)
{
Ecore_X_Atom *oldset = NULL, *newset = NULL;
int i, j = 0, num = 0;
unsigned char *data = NULL;
unsigned char *old_data = NULL;
ecore_x_window_prop_property_get(root, ECORE_X_ATOM_NET_SUPPORTED,
XA_ATOM, 32, &old_data, &num);
oldset = (Ecore_X_Atom *)old_data;
if (supported)
{
for (i = 0; i < num; ++i)
{
if (oldset[i] == atom)
goto done;
}
newset = calloc(num + 1, sizeof(Ecore_X_Atom));
if (!newset)
goto done;
data = (unsigned char *) newset;
for (i = 0; i < num; i++)
newset[i] = oldset[i];
newset[num] = atom;
ecore_x_window_prop_property_set(root, ECORE_X_ATOM_NET_SUPPORTED,
XA_ATOM, 32, data, num + 1);
}
else
{
int has;
has = 0;
for (i = 0; i < num; ++i)
{
if (oldset[i] == atom)
has = 1;
}
if (!has)
goto done;
newset = calloc(num - 1, sizeof(Ecore_X_Atom));
if (!newset)
goto done;
data = (unsigned char *) newset;
for (i = 0; i < num; i++)
if (oldset[i] != atom)
newset[j++] = oldset[i];
ecore_x_window_prop_property_set(root, ECORE_X_ATOM_NET_SUPPORTED,
XA_ATOM, 32, data, num - 1);
}
free(newset);
done:
XFree(oldset);
_ATOM_SET_ATOM(root, ECORE_X_ATOM_NET_SUPPORTED, supported, num);
return 1;
}
Ecore_X_Atom *
ecore_x_netwm_supported_get(Ecore_X_Window root, int *num)
{
int num_ret, i;
unsigned char *data;
Ecore_X_Atom *atoms;
if (num) *num = 0;
if (!ecore_x_window_prop_property_get(root, ECORE_X_ATOM_NET_SUPPORTED,
XA_ATOM, 32, &data, &num_ret))
return NULL;
if ((!data) || (!num_ret)) return NULL;
if (num) *num = num_ret;
return (Ecore_X_Atom *)data;
}
/*
* Desktop configuration and status
@ -958,7 +921,7 @@ ecore_x_netwm_window_state_list_get(Ecore_X_Window win, int *num)
if (num) *num = num_ret;
}
XFree(data);
free(data);
return state;
}
@ -1011,7 +974,7 @@ ecore_x_netwm_window_state_isset(Ecore_X_Window win, Ecore_X_Window_State s)
}
}
XFree(data);
free(data);
return ret;
}
@ -1078,7 +1041,7 @@ ecore_x_netwm_window_state_set(Ecore_X_Window win, Ecore_X_Window_State state, i
}
free(newset);
done:
XFree(oldset);
free(oldset);
}
static Ecore_X_Window_Type
@ -1173,7 +1136,7 @@ ecore_x_netwm_window_type_get(Ecore_X_Window win)
}
}
XFree(data);
free(data);
return ret;
}
@ -1230,7 +1193,7 @@ ecore_x_netwm_allowed_action_isset(Ecore_X_Window win, Ecore_X_Action action)
}
}
XFree(data);
free(data);
return ret;
}
@ -1296,7 +1259,7 @@ ecore_x_netwm_allowed_action_set(Ecore_X_Window win, Ecore_X_Action action, int
}
free(newset);
done:
XFree(oldset);
free(oldset);
}
void