netwm updates.

SVN revision: 14810
This commit is contained in:
sebastid 2005-05-16 15:43:15 +00:00 committed by sebastid
parent 4acee41186
commit 4e687c0dc8
7 changed files with 132 additions and 134 deletions

View File

@ -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 [ ]

View File

@ -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)
{ {

View File

@ -148,11 +148,7 @@ 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 {
unsigned char modal : 1; unsigned char modal : 1;

View File

@ -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

View File

@ -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
@ -989,7 +955,7 @@ ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_SKIP_PAGER, on);
void void
e_hints_window_icon_name_get(E_Border *bd) e_hints_window_icon_name_get(E_Border *bd)
{ {
char *name; char *name;
name = ecore_x_netwm_icon_name_get(bd->client.win); name = ecore_x_netwm_icon_name_get(bd->client.win);
if (bd->client.icccm.icon_name) if (bd->client.icccm.icon_name)
@ -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;
}
}

View File

@ -40,6 +40,8 @@ EAPI void e_hints_window_sticky_set(E_Border *bd, int on);
EAPI void e_hints_window_stacking_set(E_Border *bd, E_Stacking stacking); 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

View File

@ -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;