forked from enlightenment/enlightenment
parent
4acee41186
commit
4e687c0dc8
40
netwm.txt
40
netwm.txt
|
@ -1,6 +1,11 @@
|
||||||
_NET_ACTIVE_WINDOW [ ]
|
/*
|
||||||
_NET_CLIENT_LIST [ ]
|
* Not all of these are hints, just copied out
|
||||||
_NET_CLIENT_LIST_STACKING [ ]
|
* everything with _NET in it from the spec.
|
||||||
|
*/
|
||||||
|
|
||||||
|
_NET_ACTIVE_WINDOW [?] /* Listen to active window requests */
|
||||||
|
_NET_CLIENT_LIST [X]
|
||||||
|
_NET_CLIENT_LIST_STACKING [X]
|
||||||
_NET_CLOSE_WINDOW [ ]
|
_NET_CLOSE_WINDOW [ ]
|
||||||
_NET_CURRENT_DESKTOP [ ]
|
_NET_CURRENT_DESKTOP [ ]
|
||||||
_NET_DESKTOP_GEOMETRY [ ]
|
_NET_DESKTOP_GEOMETRY [ ]
|
||||||
|
@ -17,7 +22,7 @@ _NET_RESTACK_WINDOW [ ]
|
||||||
_NET_SHOWING_DESKTOP [ ]
|
_NET_SHOWING_DESKTOP [ ]
|
||||||
_NET_SUPPORTED [X]
|
_NET_SUPPORTED [X]
|
||||||
_NET_SUPPORTING_WM_CHECK [X]
|
_NET_SUPPORTING_WM_CHECK [X]
|
||||||
_NET_VIRTUAL_ROOTS [ ]
|
_NET_VIRTUAL_ROOTS [X]
|
||||||
_NET_WM_ACTION_CHANGE_DESKTOP [ ]
|
_NET_WM_ACTION_CHANGE_DESKTOP [ ]
|
||||||
_NET_WM_ACTION_CLOSE [ ]
|
_NET_WM_ACTION_CLOSE [ ]
|
||||||
_NET_WM_ACTION_FULLSCREEN [ ]
|
_NET_WM_ACTION_FULLSCREEN [ ]
|
||||||
|
@ -31,7 +36,7 @@ _NET_WM_ACTION_STICK [ ]
|
||||||
_NET_WM_ALLOWED_ACTIONS [ ]
|
_NET_WM_ALLOWED_ACTIONS [ ]
|
||||||
_NET_WM_BOTTOMLEFT [ ]
|
_NET_WM_BOTTOMLEFT [ ]
|
||||||
_NET_WM_BOTTOMRIGHT [ ]
|
_NET_WM_BOTTOMRIGHT [ ]
|
||||||
_NET_WM_DESKTOP [ ]
|
_NET_WM_DESKTOP [?] /* Remove this property on unmap */
|
||||||
_NET_WM_HANDLED_ICONS [ ]
|
_NET_WM_HANDLED_ICONS [ ]
|
||||||
_NET_WM_ICON [ ]
|
_NET_WM_ICON [ ]
|
||||||
_NET_WM_ICON_GEOMETRY [ ]
|
_NET_WM_ICON_GEOMETRY [ ]
|
||||||
|
@ -48,27 +53,24 @@ _NET_WM_MOVERESIZE_SIZE_RIGHT [ ]
|
||||||
_NET_WM_MOVERESIZE_SIZE_TOP [ ]
|
_NET_WM_MOVERESIZE_SIZE_TOP [ ]
|
||||||
_NET_WM_MOVERESIZE_SIZE_TOPLEFT [ ]
|
_NET_WM_MOVERESIZE_SIZE_TOPLEFT [ ]
|
||||||
_NET_WM_MOVERESIZE_SIZE_TOPRIGHT [ ]
|
_NET_WM_MOVERESIZE_SIZE_TOPRIGHT [ ]
|
||||||
_NET_WM_NAME [ ]
|
_NET_WM_NAME [X]
|
||||||
_NET_WM_ORIENTATION_HORZ [ ]
|
_NET_WM_ORIENTATION_HORZ [ ]
|
||||||
_NET_WM_ORIENTATION_VERT [ ]
|
_NET_WM_ORIENTATION_VERT [ ]
|
||||||
_NET_WM_PID [ ]
|
_NET_WM_PID [X]
|
||||||
_NET_WM_PING [ ]
|
_NET_WM_PING [ ]
|
||||||
_NET_WM_STATE [ ]
|
_NET_WM_STATE [X]
|
||||||
_NET_WM_STATE_ABOVE [ ]
|
_NET_WM_STATE_ABOVE [X]
|
||||||
_NET_WM_STATE_ADD [ ]
|
_NET_WM_STATE_BELOW [X]
|
||||||
_NET_WM_STATE_BELOW [ ]
|
|
||||||
_NET_WM_STATE_DEMANDS_ATTENTION [ ]
|
_NET_WM_STATE_DEMANDS_ATTENTION [ ]
|
||||||
_NET_WM_STATE_FULLSCREEN [ ]
|
_NET_WM_STATE_FULLSCREEN [X]
|
||||||
_NET_WM_STATE_HIDDEN [ ]
|
_NET_WM_STATE_HIDDEN [X]
|
||||||
_NET_WM_STATE_MAXIMIZED_HORZ [ ]
|
_NET_WM_STATE_MAXIMIZED_HORZ [X]
|
||||||
_NET_WM_STATE_MAXIMIZED_VERT [ ]
|
_NET_WM_STATE_MAXIMIZED_VERT [X]
|
||||||
_NET_WM_STATE_MODAL [ ]
|
_NET_WM_STATE_MODAL [ ]
|
||||||
_NET_WM_STATE_REMOVE [ ]
|
_NET_WM_STATE_SHADED [X]
|
||||||
_NET_WM_STATE_SHADED [ ]
|
|
||||||
_NET_WM_STATE_SKIP_PAGER [ ]
|
_NET_WM_STATE_SKIP_PAGER [ ]
|
||||||
_NET_WM_STATE_SKIP_TASKBAR [ ]
|
_NET_WM_STATE_SKIP_TASKBAR [ ]
|
||||||
_NET_WM_STATE_STICKY [ ]
|
_NET_WM_STATE_STICKY [X]
|
||||||
_NET_WM_STATE_TOGGLE [ ]
|
|
||||||
_NET_WM_STRUT [ ]
|
_NET_WM_STRUT [ ]
|
||||||
_NET_WM_STRUT_PARTIAL [ ]
|
_NET_WM_STRUT_PARTIAL [ ]
|
||||||
_NET_WM_SYNC_REQUEST [ ]
|
_NET_WM_SYNC_REQUEST [ ]
|
||||||
|
|
|
@ -37,6 +37,7 @@ static int _e_border_cb_window_shape(void *data, int ev_type, void *ev);
|
||||||
static int _e_border_cb_window_focus_in(void *data, int ev_type, void *ev);
|
static int _e_border_cb_window_focus_in(void *data, int ev_type, void *ev);
|
||||||
static int _e_border_cb_window_focus_out(void *data, int ev_type, void *ev);
|
static int _e_border_cb_window_focus_out(void *data, int ev_type, void *ev);
|
||||||
static int _e_border_cb_window_state(void *data, int ev_type, void *ev);
|
static int _e_border_cb_window_state(void *data, int ev_type, void *ev);
|
||||||
|
static int _e_border_cb_desktop_change(void *data, int ev_type, void *ev);
|
||||||
static int _e_border_cb_client_message(void *data, int ev_type, void *ev);
|
static int _e_border_cb_client_message(void *data, int ev_type, void *ev);
|
||||||
|
|
||||||
static void _e_border_cb_signal_move_start(void *data, Evas_Object *obj, const char *emission, const char *source);
|
static void _e_border_cb_signal_move_start(void *data, Evas_Object *obj, const char *emission, const char *source);
|
||||||
|
@ -159,6 +160,7 @@ e_border_init(void)
|
||||||
handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, _e_border_cb_window_focus_in, NULL));
|
handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, _e_border_cb_window_focus_in, NULL));
|
||||||
handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, _e_border_cb_window_focus_out, NULL));
|
handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, _e_border_cb_window_focus_out, NULL));
|
||||||
handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_STATE, _e_border_cb_window_state, NULL));
|
handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_WINDOW_STATE, _e_border_cb_window_state, NULL));
|
||||||
|
handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_DESKTOP_CHANGE, _e_border_cb_desktop_change, NULL));
|
||||||
handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, _e_border_cb_client_message, NULL));
|
handlers = evas_list_append(handlers, ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, _e_border_cb_client_message, NULL));
|
||||||
ecore_x_passive_grab_replay_func_set(_e_border_cb_grab_replay, NULL);
|
ecore_x_passive_grab_replay_func_set(_e_border_cb_grab_replay, NULL);
|
||||||
|
|
||||||
|
@ -291,8 +293,6 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map)
|
||||||
bd->client.icccm.fetch.size_pos_hints = 1;
|
bd->client.icccm.fetch.size_pos_hints = 1;
|
||||||
bd->client.icccm.fetch.protocol = 1;
|
bd->client.icccm.fetch.protocol = 1;
|
||||||
bd->client.mwm.fetch.hints = 1;
|
bd->client.mwm.fetch.hints = 1;
|
||||||
bd->client.netwm.fetch.pid = 1;
|
|
||||||
bd->client.netwm.fetch.desktop = 1;
|
|
||||||
bd->client.border.changed = 1;
|
bd->client.border.changed = 1;
|
||||||
|
|
||||||
bd->client.w = att->w;
|
bd->client.w = att->w;
|
||||||
|
@ -379,8 +379,6 @@ void
|
||||||
e_border_desk_set(E_Border *bd, E_Desk *desk)
|
e_border_desk_set(E_Border *bd, E_Desk *desk)
|
||||||
{
|
{
|
||||||
E_Event_Border_Desk_Set *ev;
|
E_Event_Border_Desk_Set *ev;
|
||||||
int deskx, desky;
|
|
||||||
unsigned int deskpos[2];
|
|
||||||
|
|
||||||
E_OBJECT_CHECK(bd);
|
E_OBJECT_CHECK(bd);
|
||||||
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
|
E_OBJECT_TYPE_CHECK(bd, E_BORDER_TYPE);
|
||||||
|
@ -390,17 +388,14 @@ e_border_desk_set(E_Border *bd, E_Desk *desk)
|
||||||
bd->desk = desk;
|
bd->desk = desk;
|
||||||
e_border_zone_set(bd, desk->zone);
|
e_border_zone_set(bd, desk->zone);
|
||||||
|
|
||||||
|
e_hints_window_desktop_set(bd);
|
||||||
|
|
||||||
ev = calloc(1, sizeof(E_Event_Border_Desk_Set));
|
ev = calloc(1, sizeof(E_Event_Border_Desk_Set));
|
||||||
ev->border = bd;
|
ev->border = bd;
|
||||||
e_object_ref(E_OBJECT(bd));
|
e_object_ref(E_OBJECT(bd));
|
||||||
ev->desk = desk;
|
ev->desk = desk;
|
||||||
e_object_ref(E_OBJECT(desk));
|
e_object_ref(E_OBJECT(desk));
|
||||||
ecore_event_add(E_EVENT_BORDER_DESK_SET, ev, _e_border_event_border_desk_set_free, NULL);
|
ecore_event_add(E_EVENT_BORDER_DESK_SET, ev, _e_border_event_border_desk_set_free, NULL);
|
||||||
|
|
||||||
e_desk_xy_get(desk, &deskx, &desky);
|
|
||||||
deskpos[0] = deskx;
|
|
||||||
deskpos[1] = desky;
|
|
||||||
ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_DESK, deskpos, 2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1789,17 +1784,6 @@ _e_border_cb_window_property(void *data, int ev_type, void *ev)
|
||||||
bd->client.mwm.fetch.hints = 1;
|
bd->client.mwm.fetch.hints = 1;
|
||||||
bd->changed = 1;
|
bd->changed = 1;
|
||||||
}
|
}
|
||||||
else if (e->atom == ECORE_X_ATOM_NET_WM_PID)
|
|
||||||
{
|
|
||||||
bd->client.netwm.fetch.pid = 1;
|
|
||||||
bd->changed = 1;
|
|
||||||
}
|
|
||||||
else if (e->atom == ECORE_X_ATOM_NET_WM_DESKTOP)
|
|
||||||
{
|
|
||||||
bd->client.netwm.fetch.desktop = 1;
|
|
||||||
bd->changed = 1;
|
|
||||||
}
|
|
||||||
// bd->client.border.changed = 1;
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1967,7 +1951,12 @@ _e_border_cb_window_state(void *data, int ev_type, void *ev)
|
||||||
|
|
||||||
e = ev;
|
e = ev;
|
||||||
bd = e_border_find_by_client_window(e->win);
|
bd = e_border_find_by_client_window(e->win);
|
||||||
if (!bd)
|
if (bd)
|
||||||
|
{
|
||||||
|
for (i = 0; i < 2; i++)
|
||||||
|
e_hints_window_state_update(bd, e->state[i], e->action);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
for (i = 0; i < 2; i++)
|
for (i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
|
@ -2005,10 +1994,37 @@ _e_border_cb_window_state(void *data, int ev_type, void *ev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
_e_border_cb_desktop_change(void *data, int ev_type, void *ev)
|
||||||
|
{
|
||||||
|
E_Border *bd;
|
||||||
|
Ecore_X_Event_Desktop_Change *e;
|
||||||
|
|
||||||
|
e = ev;
|
||||||
|
if (e->desk < 0) return 1;
|
||||||
|
bd = e_border_find_by_client_window(e->win);
|
||||||
|
if (bd)
|
||||||
|
{
|
||||||
|
if (bd->client.netwm.desktop == 0xffffffff)
|
||||||
|
e_border_stick(bd);
|
||||||
|
else if (e->desk < (bd->zone->desk_x_count * bd->zone->desk_y_count))
|
||||||
|
{
|
||||||
|
E_Desk *desk;
|
||||||
|
int x, y;
|
||||||
|
|
||||||
|
y = e->desk / bd->zone->desk_x_count;
|
||||||
|
x = e->desk - (y * bd->zone->desk_x_count);
|
||||||
|
|
||||||
|
desk = e_desk_at_xy_get(bd->zone, x, y);
|
||||||
|
e_border_desk_set(bd, desk);
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (i = 0; i < 2; i++)
|
ecore_x_netwm_desktop_set(e->win, e->desk);
|
||||||
e_hints_window_state_update(bd, e->state[i], e->action);
|
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -2839,18 +2855,6 @@ _e_border_eval(E_Border *bd)
|
||||||
}
|
}
|
||||||
bd->client.mwm.fetch.hints = 0;
|
bd->client.mwm.fetch.hints = 0;
|
||||||
}
|
}
|
||||||
if (bd->client.netwm.fetch.pid)
|
|
||||||
{
|
|
||||||
if (!ecore_x_netwm_pid_get(bd->client.win, &bd->client.netwm.pid))
|
|
||||||
bd->client.netwm.pid = -1;
|
|
||||||
bd->client.netwm.fetch.pid = 0;
|
|
||||||
}
|
|
||||||
if (bd->client.netwm.fetch.desktop)
|
|
||||||
{
|
|
||||||
if (!ecore_x_netwm_desktop_get(bd->client.win, &bd->client.netwm.desktop))
|
|
||||||
bd->client.netwm.desktop = -1;
|
|
||||||
bd->client.netwm.fetch.desktop = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bd->changes.shape)
|
if (bd->changes.shape)
|
||||||
{
|
{
|
||||||
|
|
|
@ -148,10 +148,6 @@ struct _E_Border
|
||||||
struct {
|
struct {
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
unsigned int desktop;
|
unsigned int desktop;
|
||||||
struct {
|
|
||||||
unsigned int pid : 1;
|
|
||||||
unsigned int desktop : 1;
|
|
||||||
} fetch;
|
|
||||||
|
|
||||||
/* NetWM Window state */
|
/* NetWM Window state */
|
||||||
struct {
|
struct {
|
||||||
|
|
|
@ -592,6 +592,7 @@ e_container_window_lower(E_Container *con, Ecore_X_Window win, int layer)
|
||||||
0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0,
|
||||||
con->layers[pos].win, ECORE_X_WINDOW_STACK_ABOVE);
|
con->layers[pos].win, ECORE_X_WINDOW_STACK_ABOVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
e_container_border_raise(E_Border *bd)
|
e_container_border_raise(E_Border *bd)
|
||||||
{
|
{
|
||||||
|
@ -620,6 +621,8 @@ e_container_border_raise(E_Border *bd)
|
||||||
|
|
||||||
bd->zone->container->layers[pos - 1].clients =
|
bd->zone->container->layers[pos - 1].clients =
|
||||||
evas_list_append(bd->zone->container->layers[pos - 1].clients, bd);
|
evas_list_append(bd->zone->container->layers[pos - 1].clients, bd);
|
||||||
|
|
||||||
|
e_hints_client_stacking_set();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -650,6 +653,8 @@ e_container_border_lower(E_Border *bd)
|
||||||
|
|
||||||
bd->zone->container->layers[pos].clients =
|
bd->zone->container->layers[pos].clients =
|
||||||
evas_list_prepend(bd->zone->container->layers[pos].clients, bd);
|
evas_list_prepend(bd->zone->container->layers[pos].clients, bd);
|
||||||
|
|
||||||
|
e_hints_client_stacking_set();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -24,91 +24,33 @@ e_hints_init(void)
|
||||||
// on finding this out when it shoudl be irrelevant! stupid FUCKS.
|
// on finding this out when it shoudl be irrelevant! stupid FUCKS.
|
||||||
ecore_x_netwm_wm_identify(roots[i], win, "KWin");
|
ecore_x_netwm_wm_identify(roots[i], win, "KWin");
|
||||||
// ecore_x_netwm_wm_identify(roots[i], win, "Enlightenment");
|
// ecore_x_netwm_wm_identify(roots[i], win, "Enlightenment");
|
||||||
/* Set what we support */
|
|
||||||
|
/* Set what hints we support */
|
||||||
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_ACTIVE_WINDOW, 1);
|
||||||
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_CLIENT_LIST, 1);
|
||||||
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_CLIENT_LIST_STACKING, 1);
|
||||||
|
|
||||||
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_SUPPORTED, 1);
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_SUPPORTED, 1);
|
||||||
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK, 1);
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_SUPPORTING_WM_CHECK, 1);
|
||||||
/*
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_VIRTUAL_ROOTS, 1);
|
||||||
ECORE_X_ATOM_NET_NUMBER_OF_DESKTOPS;
|
|
||||||
ECORE_X_ATOM_NET_VIRTUAL_ROOTS;
|
|
||||||
ECORE_X_ATOM_NET_DESKTOP_NAMES;
|
|
||||||
ECORE_X_ATOM_NET_DESKTOP_GEOMETRY;
|
|
||||||
ECORE_X_ATOM_NET_DESKTOP_VIEWPORT;
|
|
||||||
ECORE_X_ATOM_NET_DESKTOP_LAYOUT;
|
|
||||||
ECORE_X_ATOM_NET_WORKAREA;
|
|
||||||
|
|
||||||
ECORE_X_ATOM_NET_CURRENT_DESKTOP;
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_NAME, 1);
|
||||||
ECORE_X_ATOM_NET_SHOWING_DESKTOP;
|
|
||||||
|
|
||||||
ECORE_X_ATOM_NET_CLIENT_LIST;
|
|
||||||
ECORE_X_ATOM_NET_CLIENT_LIST_STACKING;
|
|
||||||
ECORE_X_ATOM_NET_ACTIVE_WINDOW;
|
|
||||||
|
|
||||||
ECORE_X_ATOM_NET_WM_NAME;
|
|
||||||
ECORE_X_ATOM_NET_WM_VISIBLE_NAME;
|
|
||||||
ECORE_X_ATOM_NET_WM_ICON_NAME;
|
|
||||||
ECORE_X_ATOM_NET_WM_VISIBLE_ICON_NAME;
|
|
||||||
ECORE_X_ATOM_NET_WM_DESKTOP;
|
|
||||||
ECORE_X_ATOM_NET_WM_STRUT;
|
|
||||||
ECORE_X_ATOM_NET_WM_STRUT_PARTIAL;
|
|
||||||
ECORE_X_ATOM_NET_WM_ICON_GEOMETRY;
|
|
||||||
ECORE_X_ATOM_NET_WM_ICON;
|
|
||||||
ECORE_X_ATOM_NET_WM_PID;
|
|
||||||
ECORE_X_ATOM_NET_WM_HANDLED_ICONS;
|
|
||||||
ECORE_X_ATOM_NET_WM_USER_TIME;
|
|
||||||
|
|
||||||
ECORE_X_ATOM_NET_WM_ALLOWED_ACTIONS;
|
|
||||||
ECORE_X_ATOM_NET_WM_ACTION_MOVE;
|
|
||||||
ECORE_X_ATOM_NET_WM_ACTION_RESIZE;
|
|
||||||
ECORE_X_ATOM_NET_WM_ACTION_MINIMIZE;
|
|
||||||
ECORE_X_ATOM_NET_WM_ACTION_SHADE;
|
|
||||||
ECORE_X_ATOM_NET_WM_ACTION_STICK;
|
|
||||||
ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_HORZ;
|
|
||||||
ECORE_X_ATOM_NET_WM_ACTION_MAXIMIZE_VERT;
|
|
||||||
ECORE_X_ATOM_NET_WM_ACTION_FULLSCREEN;
|
|
||||||
ECORE_X_ATOM_NET_WM_ACTION_CHANGE_DESKTOP;
|
|
||||||
ECORE_X_ATOM_NET_WM_ACTION_CLOSE;
|
|
||||||
|
|
||||||
ECORE_X_ATOM_NET_WM_WINDOW_TYPE;
|
|
||||||
ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DESKTOP;
|
|
||||||
ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DOCK;
|
|
||||||
ECORE_X_ATOM_NET_WM_WINDOW_TYPE_TOOLBAR;
|
|
||||||
ECORE_X_ATOM_NET_WM_WINDOW_TYPE_MENU;
|
|
||||||
ECORE_X_ATOM_NET_WM_WINDOW_TYPE_UTILITY;
|
|
||||||
ECORE_X_ATOM_NET_WM_WINDOW_TYPE_SPLASH;
|
|
||||||
ECORE_X_ATOM_NET_WM_WINDOW_TYPE_DIALOG;
|
|
||||||
ECORE_X_ATOM_NET_WM_WINDOW_TYPE_NORMAL;
|
|
||||||
|
|
||||||
*/
|
|
||||||
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE, 1);
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE, 1);
|
||||||
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_MODAL, 1);
|
|
||||||
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_STICKY, 1);
|
|
||||||
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT, 1);
|
|
||||||
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ, 1);
|
|
||||||
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_SHADED, 1);
|
|
||||||
/*
|
|
||||||
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_SKIP_TASKBAR, 1);
|
|
||||||
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_SKIP_PAGER, 1);
|
|
||||||
*/
|
|
||||||
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_HIDDEN, 1);
|
|
||||||
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN, 1);
|
|
||||||
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_ABOVE, 1);
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_ABOVE, 1);
|
||||||
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_BELOW, 1);
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_BELOW, 1);
|
||||||
/*
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_FULLSCREEN, 1);
|
||||||
ECORE_X_ATOM_NET_WM_STATE_DEMANDS_ATTENTION;
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_HIDDEN, 1);
|
||||||
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_HORZ, 1);
|
||||||
ECORE_X_ATOM_NET_WM_WINDOW_OPACITY;
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_MAXIMIZED_VERT, 1);
|
||||||
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_SHADED, 1);
|
||||||
ECORE_X_ATOM_NET_FRAME_EXTENTS;
|
ecore_x_netwm_supported(roots[i], ECORE_X_ATOM_NET_WM_STATE_STICKY, 1);
|
||||||
ECORE_X_ATOM_NET_REQUEST_FRAME_EXTENTS;
|
|
||||||
|
|
||||||
ECORE_X_ATOM_NET_WM_PING;
|
|
||||||
ECORE_X_ATOM_NET_WM_SYNC_REQUEST;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
free(roots);
|
free(roots);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FIXME, this should set the list in map order, not stack order */
|
||||||
void
|
void
|
||||||
e_hints_client_list_set(void)
|
e_hints_client_list_set(void)
|
||||||
{
|
{
|
||||||
|
@ -344,7 +286,27 @@ e_hints_window_init(E_Border *bd)
|
||||||
bd->layer = 150;
|
bd->layer = 150;
|
||||||
else
|
else
|
||||||
bd->layer = 100;
|
bd->layer = 100;
|
||||||
e_container_border_raise(bd);
|
e_border_raise(bd);
|
||||||
|
|
||||||
|
if (!ecore_x_netwm_desktop_get(bd->client.win, &bd->client.netwm.desktop))
|
||||||
|
bd->client.netwm.desktop = 0;
|
||||||
|
if (!ecore_x_netwm_pid_get(bd->client.win, &bd->client.netwm.pid))
|
||||||
|
bd->client.netwm.pid = -1;
|
||||||
|
|
||||||
|
if (bd->client.netwm.desktop == 0xffffffff)
|
||||||
|
e_border_stick(bd);
|
||||||
|
else if ((bd->client.netwm.desktop >= 0)
|
||||||
|
&& (bd->client.netwm.desktop < (bd->zone->desk_x_count * bd->zone->desk_y_count)))
|
||||||
|
{
|
||||||
|
E_Desk *desk;
|
||||||
|
int x, y;
|
||||||
|
|
||||||
|
y = bd->client.netwm.desktop / bd->zone->desk_x_count;
|
||||||
|
x = bd->client.netwm.desktop - (y * bd->zone->desk_x_count);
|
||||||
|
|
||||||
|
desk = e_desk_at_xy_get(bd->zone, x, y);
|
||||||
|
e_border_desk_set(bd, desk);
|
||||||
|
}
|
||||||
|
|
||||||
if (bd->client.netwm.state.sticky)
|
if (bd->client.netwm.state.sticky)
|
||||||
e_border_stick(bd);
|
e_border_stick(bd);
|
||||||
|
@ -360,6 +322,10 @@ e_hints_window_init(E_Border *bd)
|
||||||
* show it! */
|
* show it! */
|
||||||
else if (bd->desk == e_desk_current_get(bd->zone))
|
else if (bd->desk == e_desk_current_get(bd->zone))
|
||||||
e_border_show(bd);
|
e_border_show(bd);
|
||||||
|
|
||||||
|
/* Update stacking */
|
||||||
|
e_hints_client_list_set();
|
||||||
|
e_hints_client_stacking_set();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -997,3 +963,21 @@ e_hints_window_icon_name_get(E_Border *bd)
|
||||||
bd->client.icccm.icon_name = name;
|
bd->client.icccm.icon_name = name;
|
||||||
bd->changed = 1;
|
bd->changed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_hints_window_desktop_set(E_Border *bd)
|
||||||
|
{
|
||||||
|
unsigned int deskpos[2];
|
||||||
|
unsigned int current;
|
||||||
|
|
||||||
|
current = (bd->desk->y * bd->zone->desk_x_count) + bd->desk->x;
|
||||||
|
if (bd->client.netwm.desktop != current)
|
||||||
|
{
|
||||||
|
deskpos[0] = bd->desk->x;
|
||||||
|
deskpos[1] = bd->desk->y;
|
||||||
|
ecore_x_window_prop_card32_set(bd->client.win, E_ATOM_DESK, deskpos, 2);
|
||||||
|
|
||||||
|
ecore_x_netwm_desktop_set(bd->client.win, current);
|
||||||
|
bd->client.netwm.desktop = current;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -41,5 +41,7 @@ EAPI void e_hints_window_stacking_set(E_Border *bd, E_Stacking stacking);
|
||||||
|
|
||||||
EAPI void e_hints_window_icon_name_get(E_Border *bd);
|
EAPI void e_hints_window_icon_name_get(E_Border *bd);
|
||||||
|
|
||||||
|
EAPI void e_hints_window_desktop_set(E_Border *bd);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -644,6 +644,11 @@ _e_main_screens_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Init border stacking */
|
||||||
|
e_hints_client_list_set();
|
||||||
|
e_hints_client_stacking_set();
|
||||||
|
|
||||||
free(roots);
|
free(roots);
|
||||||
ecore_x_sync();
|
ecore_x_sync();
|
||||||
return 1;
|
return 1;
|
||||||
|
|
Loading…
Reference in New Issue