parent
7eecdf742c
commit
a0145d1a22
2
src/E.h
2
src/E.h
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
142
src/ecore-e16.c
142
src/ecore-e16.c
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
92
src/gnome.c
92
src/gnome.c
|
@ -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;
|
||||
|
|
118
src/hints.c
118
src/hints.c
|
@ -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
|
||||
|
|
89
src/icccm.c
89
src/icccm.c
|
@ -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)
|
||||
|
|
14
src/setup.c
14
src/setup.c
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue