Use more ecore_x atom functions.

SVN revision: 13634
This commit is contained in:
Kim Woelders 2005-03-06 11:17:04 +00:00
parent 7eecdf742c
commit a0145d1a22
9 changed files with 223 additions and 251 deletions

View File

@ -745,6 +745,8 @@ struct _ewin
char *wm_res_class;
char *wm_role;
char *wm_command;
int wm_command_argc;
char **wm_command_argv;
char *wm_machine;
} icccm;
struct

View File

@ -259,10 +259,8 @@ CommsInit(void)
Esnprintf(s, sizeof(s), "WINID %8x", (int)comms_win);
XA_ENLIGHTENMENT_COMMS = XInternAtom(disp, "ENLIGHTENMENT_COMMS", False);
XChangeProperty(disp, comms_win, XA_ENLIGHTENMENT_COMMS, XA_STRING, 8,
PropModeReplace, (unsigned char *)s, strlen(s));
XChangeProperty(disp, VRoot.win, XA_ENLIGHTENMENT_COMMS, XA_STRING, 8,
PropModeReplace, (unsigned char *)s, strlen(s));
ecore_x_window_prop_string_set(comms_win, XA_ENLIGHTENMENT_COMMS, s);
ecore_x_window_prop_string_set(VRoot.win, XA_ENLIGHTENMENT_COMMS, s);
XA_ENL_MSG = XInternAtom(disp, "ENL_MSG", False);
}

View File

@ -28,28 +28,6 @@
#define _ATOM_GET(name) \
XInternAtom(_ecore_x_disp, name, False)
#define _ATOM_SET_STRING(win, atom, string) \
XChangeProperty(_ecore_x_disp, win, atom, XA_STRING, 8, PropModeReplace, \
(unsigned char *)string, strlen(string))
#define _ATOM_SET_STRING_LIST(win, atom, string, cnt) \
XChangeProperty(_ecore_x_disp, win, atom, XA_STRING, 8, PropModeReplace, \
(unsigned char *)string, cnt)
#define _ATOM_SET_UTF8_STRING(win, atom, string) \
XChangeProperty(_ecore_x_disp, win, atom, ECORE_X_ATOM_UTF8_STRING, 8, PropModeReplace, \
(unsigned char *)string, strlen(string))
#define _ATOM_SET_UTF8_STRING_LIST(win, atom, string, cnt) \
XChangeProperty(_ecore_x_disp, win, atom, ECORE_X_ATOM_UTF8_STRING, 8, PropModeReplace, \
(unsigned char *)string, cnt)
#define _ATOM_SET_WINDOW(win, atom, p_wins, cnt) \
XChangeProperty(_ecore_x_disp, win, atom, XA_WINDOW, 32, PropModeReplace, \
(unsigned char *)p_wins, cnt)
#define _ATOM_SET_ATOM(win, atom, p_atom, cnt) \
XChangeProperty(_ecore_x_disp, win, atom, XA_ATOM, 32, PropModeReplace, \
(unsigned char *)p_atom, cnt)
#define _ATOM_SET_CARD32(win, atom, p_val, cnt) \
XChangeProperty(_ecore_x_disp, win, atom, XA_CARDINAL, 32, PropModeReplace, \
(unsigned char *)p_val, cnt)
/* Window property change actions (must match _NET_WM_STATE_... ones) */
#define ECORE_X_PROP_LIST_REMOVE 0
#define ECORE_X_PROP_LIST_ADD 1
@ -121,7 +99,8 @@ ecore_x_window_prop_card32_set(Ecore_X_Window win, Ecore_X_Atom atom,
unsigned int *val, unsigned int num)
{
#if SIZEOF_INT == SIZEOF_LONG
_ATOM_SET_CARD32(win, atom, val, num);
XChangeProperty(_ecore_x_disp, win, atom, XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)val, num);
#else
unsigned long *pl;
unsigned int i;
@ -131,7 +110,8 @@ ecore_x_window_prop_card32_set(Ecore_X_Window win, Ecore_X_Atom atom,
return;
for (i = 0; i < num; i++)
pl[i] = val[i];
_ATOM_SET_CARD32(win, atom, pl, num);
XChangeProperty(_ecore_x_disp, win, atom, XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)pl, num);
free(pl);
#endif
}
@ -183,18 +163,73 @@ ecore_x_window_prop_card32_get(Ecore_X_Window win, Ecore_X_Atom atom,
return num;
}
#if 0 /* Unused */
/*
* Set simple string list property
*/
void
ecore_x_window_prop_string_list_set(Ecore_X_Window win, Ecore_X_Atom atom,
char **lst, int num)
{
XTextProperty xtp;
if (XmbTextListToTextProperty(_ecore_x_disp, (char **)lst, num,
XStringStyle, &xtp) != Success)
return;
XSetTextProperty(_ecore_x_disp, win, &xtp, atom);
XFree(xtp.value);
}
/*
* Get simple string list property
*/
char **
ecore_x_window_prop_string_list_get(Ecore_X_Window win, Ecore_X_Atom atom,
int *pnum)
{
char **pstr = NULL;
XTextProperty xtp;
int i, items;
char **list;
Status s;
*pnum = 0;
if (!XGetTextProperty(_ecore_x_disp, win, &xtp, atom))
return NULL;
if (xtp.format == 8)
{
s = XmbTextPropertyToTextList(_ecore_x_disp, &xtp, &list, &items);
if ((s == Success) && (items > 0))
{
pstr = Emalloc(items * sizeof(char *));
for (i = 0; i < items; i++)
pstr[i] = Estrdup(list[i]);
XFreeStringList(list);
}
}
if (!pstr)
{
pstr = Emalloc(sizeof(char *));
pstr[1] = Estrdup((char *)xtp.value);
items = 1;
}
XFree(xtp.value);
*pnum = items;
return pstr;
}
/*
* Set simple string property
* NB! No encoding conversion done.
*/
void
ecore_x_window_prop_string_set(Ecore_X_Window win, Ecore_X_Atom atom,
const char *str)
{
_ATOM_SET_STRING(win, atom, str);
ecore_x_window_prop_string_list_set(win, atom, (char **)(&str), 1);
}
#endif
/*
* Get simple string property
@ -203,29 +238,29 @@ char *
ecore_x_window_prop_string_get(Ecore_X_Window win, Ecore_X_Atom atom)
{
XTextProperty xtp;
char *str = NULL;
char *str;
int items;
char **list;
Status s;
if (XGetTextProperty(_ecore_x_disp, win, &xtp, atom))
if (!XGetTextProperty(_ecore_x_disp, win, &xtp, atom))
return NULL;
if (xtp.format == 8)
{
int items;
char **list;
Status s;
if (xtp.format == 8)
s = XmbTextPropertyToTextList(_ecore_x_disp, &xtp, &list, &items);
if ((s == Success) && (items > 0))
{
s = XmbTextPropertyToTextList(_ecore_x_disp, &xtp, &list, &items);
if ((s == Success) && (items > 0))
{
str = Estrdup(*list);
XFreeStringList(list);
}
else
str = Estrdup((char *)xtp.value);
str = Estrdup(*list);
XFreeStringList(list);
}
else
str = Estrdup((char *)xtp.value);
XFree(xtp.value);
}
else
str = Estrdup((char *)xtp.value);
XFree(xtp.value);
return str;
}
@ -237,7 +272,8 @@ static void
_ecore_x_window_prop_string_utf8_set(Ecore_X_Window win, Ecore_X_Atom atom,
const char *str)
{
_ATOM_SET_UTF8_STRING(win, atom, str);
XChangeProperty(_ecore_x_disp, win, atom, ECORE_X_ATOM_UTF8_STRING, 8,
PropModeReplace, (unsigned char *)str, strlen(str));
}
/*
@ -650,6 +686,12 @@ ecore_x_icccm_save_yourself_send(Ecore_X_Window win, Ecore_X_Time ts)
}
#endif
void
ecore_x_icccm_title_set(Ecore_X_Window win, const char *title)
{
return ecore_x_window_prop_string_set(win, ECORE_X_ATOM_WM_NAME, title);
}
char *
ecore_x_icccm_title_get(Ecore_X_Window win)
{
@ -857,9 +899,11 @@ ecore_x_netwm_wm_identify(Ecore_X_Window root, Ecore_X_Window check,
&check, 1);
ecore_x_window_prop_window_set(check, ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK,
&check, 1);
_ATOM_SET_UTF8_STRING(check, ECORE_X_ATOM_NET_WM_NAME, wm_name);
_ecore_x_window_prop_string_utf8_set(check, ECORE_X_ATOM_NET_WM_NAME,
wm_name);
/* This one isn't mandatory */
_ATOM_SET_UTF8_STRING(root, ECORE_X_ATOM_NET_WM_NAME, wm_name);
_ecore_x_window_prop_string_utf8_set(root, ECORE_X_ATOM_NET_WM_NAME,
wm_name);
}
/*
@ -909,7 +953,9 @@ ecore_x_netwm_desk_names_set(Ecore_X_Window root, unsigned int n_desks,
len += l;
}
_ATOM_SET_UTF8_STRING_LIST(root, ECORE_X_ATOM_NET_DESKTOP_NAMES, buf, len);
XChangeProperty(_ecore_x_disp, root, ECORE_X_ATOM_NET_DESKTOP_NAMES,
ECORE_X_ATOM_UTF8_STRING, 8, PropModeReplace,
(unsigned char *)buf, len);
free(buf);
}

View File

@ -111,6 +111,8 @@ void ecore_x_icccm_delete_window_send(Ecore_X_Window win,
void ecore_x_icccm_take_focus_send(Ecore_X_Window win,
Ecore_X_Time ts);
void ecore_x_icccm_title_set(Ecore_X_Window win,
const char *title);
char *ecore_x_icccm_title_get(Ecore_X_Window win);
/* NETWM (EWMH) */
@ -261,6 +263,13 @@ void ecore_x_icccm_state_set_iconic(Ecore_X_Window win);
void ecore_x_icccm_state_set_normal(Ecore_X_Window win);
void ecore_x_icccm_state_set_withdrawn(Ecore_X_Window win);
void ecore_x_window_prop_string_list_set(Ecore_X_Window win,
Ecore_X_Atom atom,
char **lst, int num);
char **ecore_x_window_prop_string_list_get(Ecore_X_Window win,
Ecore_X_Atom atom,
int *pnum);
void ecore_x_window_prop_xid_set(Ecore_X_Window win,
Ecore_X_Atom atom,
Ecore_X_Atom type,

View File

@ -211,6 +211,8 @@ EwinDestroy(EWin * ewin)
Efree(ewin->icccm.wm_role);
if (ewin->icccm.wm_command)
Efree(ewin->icccm.wm_command);
if (ewin->icccm.wm_command_argv)
freestrlist(ewin->icccm.wm_command_argv, ewin->icccm.wm_command_argc);
if (ewin->icccm.wm_machine)
Efree(ewin->icccm.wm_machine);
#if ENABLE_EWMH

View File

@ -446,7 +446,7 @@ void
GNOME_SetHint(EWin * ewin)
{
static Atom atom_set = 0;
int val;
unsigned int val;
if ((ewin->type == EWIN_TYPE_MENU) || (ewin->type == EWIN_TYPE_PAGER))
return;
@ -459,39 +459,36 @@ GNOME_SetHint(EWin * ewin)
val |= WIN_STATE_SHADED;
if (ewin->fixedpos)
val |= WIN_STATE_FIXED_POSITION;
XChangeProperty(disp, ewin->client.win, atom_set, XA_CARDINAL, 32,
PropModeReplace, (unsigned char *)&val, 1);
ecore_x_window_prop_card32_set(ewin->client.win, atom_set, &val, 1);
}
void
GNOME_SetEwinArea(EWin * ewin)
{
static Atom atom_set = 0;
CARD32 val[2];
unsigned int val[2];
if ((ewin->type == EWIN_TYPE_MENU) || (ewin->type == EWIN_TYPE_PAGER))
return;
if (!atom_set)
atom_set = XInternAtom(disp, XA_WIN_AREA, False);
val[0] = (CARD32) ewin->area_x;
val[1] = (CARD32) ewin->area_y;
XChangeProperty(disp, ewin->client.win, atom_set, XA_CARDINAL, 32,
PropModeReplace, (unsigned char *)val, 2);
val[0] = ewin->area_x;
val[1] = ewin->area_y;
ecore_x_window_prop_card32_set(ewin->client.win, atom_set, val, 2);
}
void
GNOME_SetEwinDesk(EWin * ewin)
{
static Atom atom_set = 0;
int val;
unsigned int val;
if ((ewin->type == EWIN_TYPE_MENU) || (ewin->type == EWIN_TYPE_PAGER))
return;
if (!atom_set)
atom_set = XInternAtom(disp, XA_WIN_WORKSPACE, False);
val = EoGetDesk(ewin);
XChangeProperty(disp, ewin->client.win, atom_set, XA_CARDINAL, 32,
PropModeReplace, (unsigned char *)&val, 1);
ecore_x_window_prop_card32_set(ewin->client.win, atom_set, &val, 1);
}
#if 0 /* Does nothing */
@ -527,7 +524,7 @@ static void
GNOME_SetUsedHints(void)
{
static Atom atom_set = 0;
Atom list[10];
Ecore_X_Atom list[10];
if (!atom_set)
atom_set = XInternAtom(disp, XA_WIN_PROTOCOLS, False);
@ -541,15 +538,14 @@ GNOME_SetUsedHints(void)
list[7] = XInternAtom(disp, XA_WIN_WORKSPACE_COUNT, False);
list[8] = XInternAtom(disp, XA_WIN_WORKSPACE_NAMES, False);
list[9] = XInternAtom(disp, XA_WIN_CLIENT_LIST, False);
XChangeProperty(disp, VRoot.win, atom_set, XA_ATOM, 32, PropModeReplace,
(unsigned char *)list, 10);
ecore_x_window_prop_atom_set(VRoot.win, atom_set, list, 10);
}
void
GNOME_SetCurrentArea(void)
{
static Atom atom_set = 0;
CARD32 val[2];
unsigned int val[2];
int ax, ay;
if (!atom_set)
@ -557,49 +553,44 @@ GNOME_SetCurrentArea(void)
DeskGetCurrentArea(&ax, &ay);
val[0] = ax;
val[1] = ay;
XChangeProperty(disp, VRoot.win, atom_set, XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)val, 2);
ecore_x_window_prop_card32_set(VRoot.win, atom_set, val, 2);
}
void
GNOME_SetCurrentDesk(void)
{
static Atom atom_set = 0;
CARD32 val;
unsigned int val;
if (!atom_set)
atom_set = XInternAtom(disp, XA_WIN_WORKSPACE, False);
val = (CARD32) DesksGetCurrent();
XChangeProperty(disp, VRoot.win, atom_set, XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)&val, 1);
val = DesksGetCurrent();
ecore_x_window_prop_card32_set(VRoot.win, atom_set, &val, 1);
}
static void
GNOME_SetWMCheck(Window win_wm_check)
{
static Atom atom_set = 0;
CARD32 val;
unsigned int val;
if (!atom_set)
atom_set = XInternAtom(disp, XA_WIN_SUPPORTING_WM_CHECK, False);
val = win_wm_check;
XChangeProperty(disp, VRoot.win, atom_set, XA_CARDINAL,
32, PropModeReplace, (unsigned char *)&val, 1);
XChangeProperty(disp, win_wm_check, atom_set, XA_CARDINAL,
32, PropModeReplace, (unsigned char *)&val, 1);
ecore_x_window_prop_card32_set(VRoot.win, atom_set, &val, 1);
ecore_x_window_prop_card32_set(win_wm_check, atom_set, &val, 1);
}
void
GNOME_SetDeskCount(void)
{
static Atom atom_set = 0;
CARD32 val;
unsigned int val;
if (!atom_set)
atom_set = XInternAtom(disp, XA_WIN_WORKSPACE_COUNT, False);
val = DesksGetNumber();
XChangeProperty(disp, VRoot.win, atom_set, XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)&val, 1);
ecore_x_window_prop_card32_set(VRoot.win, atom_set, &val, 1);
}
void
@ -607,22 +598,20 @@ GNOME_SetAreaCount(void)
{
static Atom atom_set = 0;
int ax, ay;
CARD32 val[2];
unsigned int val[2];
if (!atom_set)
atom_set = XInternAtom(disp, XA_WIN_AREA_COUNT, False);
GetAreaSize(&ax, &ay);
val[0] = ax;
val[1] = ay;
XChangeProperty(disp, VRoot.win, atom_set, XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)val, 2);
ecore_x_window_prop_card32_set(VRoot.win, atom_set, val, 2);
}
void
GNOME_SetDeskNames(void)
{
static Atom atom_set = 0;
XTextProperty text;
char s[1024], **names;
int i, n_desks;
@ -640,11 +629,7 @@ GNOME_SetDeskNames(void)
names[i] = Estrdup(s);
}
if (XStringListToTextProperty(names, n_desks, &text))
{
XSetTextProperty(disp, VRoot.win, &text, atom_set);
XFree(text.value);
}
ecore_x_window_prop_string_list_set(VRoot.win, atom_set, names, n_desks);
for (i = 0; i < n_desks; i++)
if (names[i])
@ -656,7 +641,7 @@ void
GNOME_SetClientList(void)
{
static Atom atom_set = 0;
Window *wl;
unsigned int *wl;
int j, i, num;
EWin **lst;
@ -667,7 +652,7 @@ GNOME_SetClientList(void)
j = 0;
if (lst)
{
wl = Emalloc(sizeof(Window) * num);
wl = Emalloc(num * sizeof(unsigned int));
for (i = 0; i < num; i++)
{
if ((lst[i]->type != EWIN_TYPE_MENU) &&
@ -676,8 +661,7 @@ GNOME_SetClientList(void)
wl[j++] = lst[i]->client.win;
}
}
XChangeProperty(disp, VRoot.win, atom_set, XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)wl, j);
ecore_x_window_prop_card32_set(VRoot.win, atom_set, wl, j);
if (wl)
Efree(wl);
if (lst)
@ -691,12 +675,11 @@ GNOME_SetWMNameVer(void)
if (!atom_set)
atom_set = XInternAtom(disp, XA_WIN_WM_NAME, False);
XChangeProperty(disp, VRoot.win, atom_set, XA_STRING, 8, PropModeReplace,
(unsigned char *)e_wm_name, strlen(e_wm_name));
ecore_x_window_prop_string_set(VRoot.win, atom_set, e_wm_name);
if (!atom_set2)
atom_set2 = XInternAtom(disp, XA_WIN_WM_VERSION, False);
XChangeProperty(disp, VRoot.win, atom_set2, XA_STRING, 8, PropModeReplace,
(unsigned char *)e_wm_version, strlen(e_wm_version));
ecore_x_window_prop_string_set(VRoot.win, atom_set2, e_wm_version);
}
void
@ -748,15 +731,13 @@ GNOME_SetHints(Window win_wm_check)
GNOME_SetWMCheck(win_wm_check);
{
Atom atom_set;
CARD32 val;
unsigned int val;
atom_set = XInternAtom(disp, "_WIN_DESKTOP_BUTTON_PROXY", False);
Mode.button_proxy_win = ECreateWindow(VRoot.win, -80, -80, 24, 24, 0);
val = Mode.button_proxy_win;
XChangeProperty(disp, VRoot.win, atom_set, XA_CARDINAL, 32,
PropModeReplace, (unsigned char *)&val, 1);
XChangeProperty(disp, Mode.button_proxy_win, atom_set, XA_CARDINAL, 32,
PropModeReplace, (unsigned char *)&val, 1);
ecore_x_window_prop_card32_set(VRoot.win, atom_set, &val, 1);
ecore_x_window_prop_card32_set(Mode.button_proxy_win, atom_set, &val, 1);
}
}
@ -791,10 +772,11 @@ GNOME_ProcessClientMessage(XClientMessageEvent * event)
ewin = FindItem(NULL, event->window, LIST_FINDBY_ID, LIST_TYPE_EWIN);
if (ewin)
{
EoSetLayer(ewin, event->data.l[0]);
XChangeProperty(disp, EoGetWin(ewin), a4, XA_CARDINAL, 32,
PropModeReplace,
(unsigned char *)(&(event->data.l[0])), 1);
unsigned int val;
val = event->data.l[0];
EoSetLayer(ewin, val);
ecore_x_window_prop_card32_set(ewin->client.win, a4, &val, 1);
RaiseEwin(ewin);
}
return;

View File

@ -48,8 +48,7 @@ HintsInit(void)
EWMH_Init(win);
#endif
atom = XInternAtom(disp, "ENLIGHTENMENT_VERSION", False);
XChangeProperty(disp, VRoot.win, atom, XA_STRING, 8, PropModeReplace,
(unsigned char *)e_wm_version, strlen(e_wm_version));
ecore_x_window_prop_string_set(VRoot.win, atom, e_wm_version);
}
void
@ -132,13 +131,7 @@ HintsSetActiveWindow(Window win)
void
HintsSetWindowName(Window win, const char *name)
{
XTextProperty xtp;
xtp.encoding = XA_STRING;
xtp.format = 8;
xtp.value = (unsigned char *)name;
xtp.nitems = strlen(name);
XSetWMName(disp, win, &xtp);
ecore_x_window_prop_string_set(win, ECORE_X_ATOM_WM_NAME, name);
#if ENABLE_EWMH
EWMH_SetWindowName(win, name);
@ -205,26 +198,6 @@ HintsSetWindowHints(EWin * ewin)
void
HintsSetWindowBorder(EWin * ewin)
{
#if 0 /* I doubt this is used anywhere */
static Atom atom_set = 0;
CARD32 val[4];
if (!atom_set)
atom_set = XInternAtom(disp, "_E_FRAME_SIZE", False);
if (ewin->border)
{
val[0] = ewin->border->border.left;
val[1] = ewin->border->border.right;
val[2] = ewin->border->border.top;
val[3] = ewin->border->border.bottom;
}
else
val[0] = val[1] = val[2] = val[3] = 0;
XChangeProperty(disp, ewin->client.win, atom_set, XA_CARDINAL, 32,
PropModeReplace, (unsigned char *)&val, 4);
#endif
#if ENABLE_EWMH
EWMH_SetWindowBorder(ewin);
#endif
@ -312,6 +285,7 @@ void
HintsSetRootInfo(Window win, Pixmap pmap, int color)
{
static Atom a = 0, aa = 0;
Ecore_X_Pixmap pm;
if (!a)
{
@ -322,11 +296,10 @@ HintsSetRootInfo(Window win, Pixmap pmap, int color)
if (Conf.hints.set_xroot_info_on_root_window)
win = VRoot.win;
XChangeProperty(disp, win, a, XA_PIXMAP, 32, PropModeReplace,
(unsigned char *)&pmap, 1);
XChangeProperty(disp, win, aa, XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)&color, 1);
pm = pmap;
ecore_x_window_prop_xid_set(win, a, XA_PIXMAP, &pm, 1);
ecore_x_window_prop_card32_set(win, aa, &color, 1);
}
void
@ -355,9 +328,8 @@ EHintsSetInfo(const EWin * ewin)
ecore_x_window_prop_card32_set(ewin->client.win, a, c, 9);
XChangeProperty(disp, ewin->client.win, aa, XA_STRING, 8, PropModeReplace,
(unsigned char *)ewin->normal_border->name,
strlen(ewin->normal_border->name) + 1);
ecore_x_window_prop_string_set(ewin->client.win, aa,
ewin->normal_border->name);
if (EventDebug(EDBUG_TYPE_SNAPS))
Eprintf("Snap set einf %#lx: %4d+%4d %4dx%4d: %s\n",
@ -369,11 +341,8 @@ int
EHintsGetInfo(EWin * ewin)
{
static Atom a = 0, aa = 0;
Atom a2;
char *str;
unsigned long lnum, ldummy;
int num, dummy;
unsigned char *puc;
int num;
int c[9];
if (EwinIsInternal(ewin))
@ -407,14 +376,11 @@ EHintsGetInfo(EWin * ewin)
}
ewin->client.already_placed = 1;
puc = NULL;
XGetWindowProperty(disp, ewin->client.win, aa, 0, 0xffff, True,
XA_STRING, &a2, &dummy, &lnum, &ldummy, &puc);
str = (char *)puc;
num = (int)lnum;
if ((num > 0) && (str))
str = ecore_x_window_prop_string_get(ewin->client.win, aa);
if (str)
EwinSetBorderByName(ewin, str, 0);
XFree(str);
Efree(str);
if (EventDebug(EDBUG_TYPE_SNAPS))
Eprintf("Snap get einf %#lx: %4d+%4d %4dx%4d: %s\n",
ewin->client.win, ewin->client.x, ewin->client.y,
@ -428,78 +394,66 @@ EHintsSetMainInfo(void)
{
Atom a;
int i, ax, ay, n_desks;
CARD32 *cc;
unsigned int *c;
n_desks = DesksGetNumber();
if (n_desks <= 0)
return;
cc = Emalloc(2 * n_desks * sizeof(CARD32));
if (!cc)
c = Emalloc(2 * n_desks * sizeof(unsigned int));
if (!c)
return;
for (i = 0; i < n_desks; i++)
{
DeskGetArea(i, &ax, &ay);
cc[(i * 2)] = ax;
cc[(i * 2) + 1] = ay;
c[(i * 2)] = ax;
c[(i * 2) + 1] = ay;
}
a = XInternAtom(disp, "ENL_INTERNAL_AREA_DATA", False);
XChangeProperty(disp, VRoot.win, a, XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)cc, n_desks * 2);
ecore_x_window_prop_card32_set(VRoot.win, a, c, 2 * n_desks);
a = XInternAtom(disp, "ENL_INTERNAL_DESK_DATA", False);
cc[0] = DesksGetCurrent();
XChangeProperty(disp, VRoot.win, a, XA_CARDINAL, 32, PropModeReplace,
(unsigned char *)cc, 1);
c[0] = DesksGetCurrent();
ecore_x_window_prop_card32_set(VRoot.win, a, c, 1);
Efree(cc);
Efree(c);
}
void
EHintsGetMainInfo(void)
{
Atom a, a2;
CARD32 *c;
unsigned long lnum, ldummy;
int num, dummy, i, n_desks;
unsigned char *puc;
Atom a;
unsigned int *c;
int num, i, n_desks;
n_desks = DesksGetNumber();
c = Emalloc(2 * n_desks * sizeof(unsigned int));
if (!c)
return;
a = XInternAtom(disp, "ENL_INTERNAL_AREA_DATA", False);
puc = NULL;
XGetWindowProperty(disp, VRoot.win, a, 0, 0xffff, False, XA_CARDINAL, &a2,
&dummy, &lnum, &ldummy, &puc);
c = (CARD32 *) puc;
num = (int)lnum;
if ((num > 0) && (c))
num = ecore_x_window_prop_card32_get(VRoot.win, a, c, 2 * n_desks);
if (num > 0)
{
for (i = 0; i < (num / 2); i++)
{
if (i < n_desks)
DeskSetArea(i, c[(i * 2)], c[(i * 2) + 1]);
}
XFree(c);
DeskSetArea(i, c[(i * 2)], c[(i * 2) + 1]);
}
a = XInternAtom(disp, "ENL_INTERNAL_DESK_DATA", False);
puc = NULL;
XGetWindowProperty(disp, VRoot.win, a, 0, 1, False, XA_CARDINAL, &a2,
&dummy, &lnum, &ldummy, &puc);
c = (CARD32 *) puc;
num = (int)lnum;
if ((num > 0) && (c))
num = ecore_x_window_prop_card32_get(VRoot.win, a, c, 1);
if (num > 0)
{
DesksSetCurrent(*c);
XFree(c);
DesksSetCurrent(c[0]);
}
else
{
/* Used to test if we should run cmd_init */
Mode.wm.session_start = 1;
}
Efree(c);
}
void

View File

@ -524,29 +524,26 @@ ICCCM_GetGeoms(EWin * ewin, Atom atom_change)
}
static char *
WinGetWMCommand(Window win)
Estrlistjoin(char **pstr, int nstr)
{
int cargc, i, size;
char **cargv, *s;
int i, size;
char *s;
if (!pstr || nstr <= 0)
return NULL;
s = NULL;
if (!XGetCommand(disp, win, &cargv, &cargc))
return NULL;
if (cargc <= 0)
return NULL;
size = strlen(cargv[0]) + 1;
size = strlen(pstr[0]) + 1;
s = Emalloc(size);
strcpy(s, cargv[0]);
for (i = 1; i < cargc; i++)
strcpy(s, pstr[0]);
for (i = 1; i < nstr; i++)
{
size += strlen(cargv[i]) + 1;
size += strlen(pstr[i]) + 1;
s = Erealloc(s, size);
strcat(s, " ");
strcat(s, cargv[i]);
strcat(s, pstr[i]);
}
XFreeStringList(cargv);
return s;
}
@ -554,11 +551,10 @@ WinGetWMCommand(Window win)
void
ICCCM_GetInfo(EWin * ewin, Atom atom_change)
{
XClassHint hint;
XTextProperty xtp;
if (atom_change == 0 || atom_change == ECORE_X_ATOM_WM_CLASS)
{
XClassHint hint;
_EFREE(ewin->icccm.wm_res_name);
_EFREE(ewin->icccm.wm_res_class);
@ -576,52 +572,45 @@ ICCCM_GetInfo(EWin * ewin, Atom atom_change)
{
_EFREE(ewin->icccm.wm_command);
ewin->icccm.wm_command = WinGetWMCommand(ewin->client.win);
ewin->icccm.wm_command_argv =
ecore_x_window_prop_string_list_get(ewin->client.win,
ECORE_X_ATOM_WM_COMMAND,
&(ewin->icccm.wm_command_argc));
if (!ewin->icccm.wm_command && ewin->client.win != ewin->client.group)
ewin->icccm.wm_command = WinGetWMCommand(ewin->client.group);
ewin->icccm.wm_command_argv =
ecore_x_window_prop_string_list_get(ewin->client.group,
ECORE_X_ATOM_WM_COMMAND,
&(ewin->icccm.
wm_command_argc));
ewin->icccm.wm_command =
Estrlistjoin(ewin->icccm.wm_command_argv,
ewin->icccm.wm_command_argc);
}
if (atom_change == 0 || atom_change == ECORE_X_ATOM_WM_CLIENT_MACHINE)
{
_EFREE(ewin->icccm.wm_machine);
if (XGetWMClientMachine(disp, ewin->client.win, &xtp) ||
XGetWMClientMachine(disp, ewin->client.group, &xtp))
{
ewin->icccm.wm_machine = Estrdup((char *)xtp.value);
XFree(xtp.value);
}
ewin->icccm.wm_machine =
ecore_x_window_prop_string_get(ewin->client.win,
ECORE_X_ATOM_WM_CLIENT_MACHINE);
if (!ewin->icccm.wm_machine && ewin->client.win != ewin->client.group)
ewin->icccm.wm_machine =
ecore_x_window_prop_string_get(ewin->client.group,
ECORE_X_ATOM_WM_CLIENT_MACHINE);
}
if (atom_change == 0 || atom_change == ECORE_X_ATOM_WM_ICON_NAME)
{
_EFREE(ewin->icccm.wm_icon_name);
if (XGetWMIconName(disp, ewin->client.win, &xtp) ||
XGetWMIconName(disp, ewin->client.group, &xtp))
{
if (xtp.encoding == XA_STRING)
{
ewin->icccm.wm_icon_name = Estrdup((char *)xtp.value);
}
else
{
char **cl;
Status status;
int n;
status = XmbTextPropertyToTextList(disp, &xtp, &cl, &n);
if (status >= Success && n > 0 && cl[0])
{
ewin->icccm.wm_icon_name = Estrdup(cl[0]);
XFreeStringList(cl);
}
else
ewin->icccm.wm_icon_name = Estrdup((char *)xtp.value);
}
XFree(xtp.value);
}
ewin->icccm.wm_icon_name =
ecore_x_window_prop_string_get(ewin->client.win,
ECORE_X_ATOM_WM_ICON_NAME);
if (!ewin->icccm.wm_icon_name && ewin->client.win != ewin->client.group)
ewin->icccm.wm_icon_name =
ecore_x_window_prop_string_get(ewin->client.group,
ECORE_X_ATOM_WM_ICON_NAME);
}
if (atom_change == 0 || atom_change == ECORE_X_ATOM_WM_WINDOW_ROLE)

View File

@ -225,8 +225,6 @@ SetupX(const char *dstr)
if (Mode.wm.window)
{
XSetWindowAttributes attr;
XClassHint *xch;
XTextProperty xtp;
/* Running E in its own virtual root window */
attr.backing_store = NotUseful;
@ -242,16 +240,8 @@ SetupX(const char *dstr)
CWBorderPixel, &attr);
ERegisterWindow(VRoot.win);
xtp.encoding = XA_STRING;
xtp.format = 8;
xtp.value = (unsigned char *)("Enlightenment");
xtp.nitems = strlen((char *)(xtp.value));
XSetWMName(disp, VRoot.win, &xtp);
xch = XAllocClassHint();
xch->res_name = (char *)"Virtual-Root";
xch->res_class = (char *)"Enlightenment";
XSetClassHint(disp, VRoot.win, xch);
XFree(xch);
HintsSetWindowName(VRoot.win, "Enlightenment");
HintsSetWindowClass(VRoot.win, "Virtual-Root", "Enlightenment");
EMapWindow(VRoot.win);