parent
c3e4650e8b
commit
b57ff00be7
|
@ -3047,32 +3047,7 @@ _e_border_eval(E_Border *bd)
|
|||
ecore_event_add(E_EVENT_BORDER_ADD, ev, _e_border_event_border_add_free, NULL);
|
||||
|
||||
/* Recreate state */
|
||||
if (ecore_x_netwm_window_type_get(bd->client.win) == ECORE_X_WINDOW_TYPE_DESKTOP)
|
||||
bd->layer = 0;
|
||||
else if (ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_BELOW))
|
||||
bd->layer = 50;
|
||||
else if (ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_ABOVE))
|
||||
bd->layer = 150;
|
||||
else if (ecore_x_netwm_window_type_get(bd->client.win) == ECORE_X_WINDOW_TYPE_DOCK)
|
||||
bd->layer = 150;
|
||||
else if (ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_FULLSCREEN))
|
||||
bd->layer = 200;
|
||||
else
|
||||
bd->layer = 100;
|
||||
e_container_window_raise(bd->zone->container, bd->win, bd->layer);
|
||||
|
||||
if (e_hints_window_sticky_isset(bd->client.win))
|
||||
e_border_stick(bd);
|
||||
if (e_hints_window_shaded_isset(bd->client.win))
|
||||
e_border_shade(bd, e_hints_window_shade_direction_get(bd->client.win));
|
||||
if (e_hints_window_maximized_isset(bd->client.win))
|
||||
e_border_maximize(bd);
|
||||
if (e_hints_window_iconic_isset(bd->client.win))
|
||||
e_border_iconify(bd);
|
||||
/* If a window isn't iconic, and is one the current desk,
|
||||
* show it! */
|
||||
else if (bd->desk == e_desk_current_get(bd->zone))
|
||||
e_border_show(bd);
|
||||
e_hints_window_init(bd);
|
||||
|
||||
ecore_x_icccm_move_resize_send(bd->client.win,
|
||||
bd->x + bd->client_inset.l,
|
||||
|
|
|
@ -107,6 +107,7 @@ struct _E_Border
|
|||
int start_x, start_y;
|
||||
double min_aspect, max_aspect;
|
||||
Ecore_X_Window_State_Hint initial_state;
|
||||
Ecore_X_Window_State_Hint state;
|
||||
Ecore_X_Pixmap icon_pixmap;
|
||||
Ecore_X_Pixmap icon_mask;
|
||||
Ecore_X_Window icon_window;
|
||||
|
@ -116,8 +117,6 @@ struct _E_Border
|
|||
unsigned char accepts_focus : 1;
|
||||
unsigned char urgent : 1;
|
||||
unsigned char delete_request : 1;
|
||||
unsigned char withdrawn : 1;
|
||||
unsigned char iconic : 1;
|
||||
unsigned char request_pos : 1;
|
||||
struct {
|
||||
unsigned int title : 1;
|
||||
|
@ -150,6 +149,9 @@ struct _E_Border
|
|||
/* NetWM Window state */
|
||||
struct {
|
||||
unsigned char modal : 1;
|
||||
unsigned char sticky : 1;
|
||||
unsigned char shaded : 1;
|
||||
unsigned char hidden : 1;
|
||||
unsigned char maximized_v : 1;
|
||||
unsigned char maximized_h : 1;
|
||||
unsigned char skip_taskbar : 1;
|
||||
|
@ -157,6 +159,8 @@ struct _E_Border
|
|||
unsigned char fullscreen : 1;
|
||||
unsigned char stacking : 2; /* 0 = None, 1 = Above, 2 = Below */
|
||||
} state;
|
||||
|
||||
Ecore_X_Window_Type type;
|
||||
|
||||
} netwm;
|
||||
Ecore_X_Window_Attributes initial_attributes;
|
||||
|
|
|
@ -236,75 +236,122 @@ e_hints_desktop_config_set(void)
|
|||
}
|
||||
|
||||
void
|
||||
e_hints_window_state_set(Ecore_X_Window win)
|
||||
e_hints_window_init(E_Border *bd)
|
||||
{
|
||||
E_Border *bd;
|
||||
e_hints_window_state_get(bd);
|
||||
e_hints_window_type_get(bd);
|
||||
|
||||
bd = e_border_find_by_client_window(win);
|
||||
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MODAL,
|
||||
bd->client.icccm.state = ecore_x_icccm_state_get(bd->client.win);
|
||||
if (bd->client.icccm.state == ECORE_X_WINDOW_STATE_HINT_NONE)
|
||||
{
|
||||
if (bd->client.netwm.state.hidden)
|
||||
bd->client.icccm.state = ECORE_X_WINDOW_STATE_HINT_WITHDRAWN;
|
||||
else
|
||||
bd->client.icccm.state = ECORE_X_WINDOW_STATE_HINT_NORMAL;
|
||||
}
|
||||
|
||||
if (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DESKTOP)
|
||||
bd->layer = 0;
|
||||
else if (bd->client.netwm.state.stacking == 2)
|
||||
bd->layer = 50;
|
||||
else if (bd->client.netwm.state.stacking == 1)
|
||||
bd->layer = 150;
|
||||
else if (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DOCK)
|
||||
bd->layer = 150;
|
||||
else if (bd->client.netwm.state.fullscreen)
|
||||
bd->layer = 200;
|
||||
else
|
||||
bd->layer = 100;
|
||||
e_container_window_raise(bd->zone->container, bd->win, bd->layer);
|
||||
|
||||
if (bd->client.netwm.state.sticky)
|
||||
e_border_stick(bd);
|
||||
if (bd->client.netwm.state.shaded)
|
||||
e_border_shade(bd, e_hints_window_shade_direction_get(bd->client.win));
|
||||
if (bd->client.netwm.state.maximized_v && bd->client.netwm.state.maximized_h)
|
||||
e_border_maximize(bd);
|
||||
if (bd->client.icccm.state == ECORE_X_WINDOW_STATE_HINT_ICONIC)
|
||||
e_border_iconify(bd);
|
||||
/* If a window isn't iconic, and is one the current desk,
|
||||
* show it! */
|
||||
else if ((bd->client.icccm.state == ECORE_X_WINDOW_STATE_HINT_NORMAL)
|
||||
&& (bd->desk == e_desk_current_get(bd->zone)))
|
||||
e_border_show(bd);
|
||||
}
|
||||
|
||||
void
|
||||
e_hints_window_state_set(E_Border *bd)
|
||||
{
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_MODAL,
|
||||
bd->client.netwm.state.modal);
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_STICKY,
|
||||
bd->sticky);
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MAXIMIZED_VERT,
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_STICKY,
|
||||
bd->client.netwm.state.sticky);
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_MAXIMIZED_VERT,
|
||||
bd->client.netwm.state.maximized_v);
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ,
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ,
|
||||
bd->client.netwm.state.maximized_h);
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_SHADED,
|
||||
bd->shaded);
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_SKIP_TASKBAR,
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_SHADED,
|
||||
bd->client.netwm.state.shaded);
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_SKIP_TASKBAR,
|
||||
bd->client.netwm.state.skip_taskbar);
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_SKIP_PAGER,
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_SKIP_PAGER,
|
||||
bd->client.netwm.state.skip_pager);
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_HIDDEN,
|
||||
!(bd->visible));
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_FULLSCREEN,
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_HIDDEN,
|
||||
bd->client.netwm.state.hidden);
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_FULLSCREEN,
|
||||
bd->client.netwm.state.fullscreen);
|
||||
|
||||
switch (bd->client.netwm.state.stacking)
|
||||
{
|
||||
case 1:
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_ABOVE, 1);
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_BELOW, 0);
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_ABOVE, 1);
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_BELOW, 0);
|
||||
case 2:
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_ABOVE, 0);
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_BELOW, 1);
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_ABOVE, 0);
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_BELOW, 1);
|
||||
default:
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_ABOVE, 0);
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_BELOW, 0);
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_ABOVE, 0);
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_BELOW, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_hints_window_state_get(Ecore_X_Window win)
|
||||
void e_hints_window_type_set(E_Border *bd)
|
||||
{
|
||||
ecore_x_netwm_window_type_set(bd->client.win, bd->client.netwm.type);
|
||||
}
|
||||
|
||||
void e_hints_window_type_get(E_Border *bd)
|
||||
{
|
||||
bd->client.netwm.type = ecore_x_netwm_window_type_get(bd->client.win);
|
||||
}
|
||||
|
||||
void
|
||||
e_hints_window_state_get(E_Border *bd)
|
||||
{
|
||||
E_Border *bd;
|
||||
int above, below;
|
||||
|
||||
bd = e_border_find_by_client_window(win);
|
||||
|
||||
bd->client.netwm.state.modal =
|
||||
ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_MODAL);
|
||||
bd->sticky =
|
||||
ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_STICKY);
|
||||
ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_MODAL);
|
||||
bd->client.netwm.state.sticky =
|
||||
ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_STICKY);
|
||||
bd->client.netwm.state.maximized_v =
|
||||
ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_MAXIMIZED_VERT);
|
||||
ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_MAXIMIZED_VERT);
|
||||
bd->client.netwm.state.maximized_h =
|
||||
ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ);
|
||||
bd->shaded =
|
||||
ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_SHADED);
|
||||
ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ);
|
||||
bd->client.netwm.state.shaded =
|
||||
ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_SHADED);
|
||||
bd->client.netwm.state.skip_taskbar =
|
||||
ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_SKIP_TASKBAR);
|
||||
ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_SKIP_TASKBAR);
|
||||
bd->client.netwm.state.skip_pager =
|
||||
ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_SKIP_PAGER);
|
||||
bd->visible =
|
||||
!ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_HIDDEN);
|
||||
ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_SKIP_PAGER);
|
||||
bd->client.netwm.state.hidden =
|
||||
ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_HIDDEN);
|
||||
bd->client.netwm.state.fullscreen =
|
||||
ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_FULLSCREEN);
|
||||
ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_FULLSCREEN);
|
||||
|
||||
above = ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_ABOVE);
|
||||
below = ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_BELOW);
|
||||
above = ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_ABOVE);
|
||||
below = ecore_x_netwm_window_state_isset(bd->client.win, ECORE_X_WINDOW_STATE_BELOW);
|
||||
bd->client.netwm.state.stacking = (above << 0) + (below << 1);
|
||||
}
|
||||
|
||||
|
@ -315,13 +362,6 @@ e_hints_window_visible_set(Ecore_X_Window win)
|
|||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_HIDDEN, 0);
|
||||
}
|
||||
|
||||
int
|
||||
e_hints_window_visible_isset(Ecore_X_Window win)
|
||||
{
|
||||
return !ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_HIDDEN)
|
||||
|| (ecore_x_icccm_state_get(win) == ECORE_X_WINDOW_STATE_HINT_NORMAL);
|
||||
}
|
||||
|
||||
void
|
||||
e_hints_window_iconic_set(Ecore_X_Window win)
|
||||
{
|
||||
|
@ -329,12 +369,6 @@ e_hints_window_iconic_set(Ecore_X_Window win)
|
|||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_HIDDEN, 1);
|
||||
}
|
||||
|
||||
int
|
||||
e_hints_window_iconic_isset(Ecore_X_Window win)
|
||||
{
|
||||
return (ecore_x_icccm_state_get(win) == ECORE_X_WINDOW_STATE_HINT_ICONIC);
|
||||
}
|
||||
|
||||
void
|
||||
e_hints_window_hidden_set(Ecore_X_Window win)
|
||||
{
|
||||
|
@ -342,25 +376,12 @@ e_hints_window_hidden_set(Ecore_X_Window win)
|
|||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_HIDDEN, 1);
|
||||
}
|
||||
|
||||
int
|
||||
e_hints_window_hidden_isset(Ecore_X_Window win)
|
||||
{
|
||||
return ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_HIDDEN)
|
||||
|| (ecore_x_icccm_state_get(win) != ECORE_X_WINDOW_STATE_HINT_NORMAL);
|
||||
}
|
||||
|
||||
void
|
||||
e_hints_window_shaded_set(Ecore_X_Window win, int on)
|
||||
{
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_SHADED, on);
|
||||
}
|
||||
|
||||
int
|
||||
e_hints_window_shaded_isset(Ecore_X_Window win)
|
||||
{
|
||||
return ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_SHADED);
|
||||
}
|
||||
|
||||
void
|
||||
e_hints_window_shade_direction_set(Ecore_X_Window win, E_Direction dir)
|
||||
{
|
||||
|
@ -389,37 +410,18 @@ e_hints_window_maximized_set(Ecore_X_Window win, int on)
|
|||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ, on);
|
||||
}
|
||||
|
||||
int
|
||||
e_hints_window_maximized_isset(Ecore_X_Window win)
|
||||
{
|
||||
return ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_MAXIMIZED_VERT)
|
||||
&& ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ);
|
||||
}
|
||||
|
||||
void
|
||||
e_hints_window_fullscreen_set(Ecore_X_Window win, int on)
|
||||
{
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_FULLSCREEN, on);
|
||||
}
|
||||
|
||||
int
|
||||
e_hints_window_fullscreen_isset(Ecore_X_Window win)
|
||||
{
|
||||
return ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_FULLSCREEN);
|
||||
}
|
||||
|
||||
void
|
||||
e_hints_window_sticky_set(Ecore_X_Window win, int on)
|
||||
{
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_STICKY, on);
|
||||
}
|
||||
|
||||
int
|
||||
e_hints_window_sticky_isset(Ecore_X_Window win)
|
||||
{
|
||||
return ecore_x_netwm_window_state_isset(win, ECORE_X_WINDOW_STATE_STICKY);
|
||||
}
|
||||
|
||||
/*
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_MODAL, on);
|
||||
ecore_x_netwm_window_state_set(win, ECORE_X_WINDOW_STATE_SKIP_TASKBAR, on);
|
||||
|
|
|
@ -13,24 +13,21 @@ EAPI void e_hints_active_window_set(E_Manager *man, Ecore_X_Window win);
|
|||
EAPI void e_hints_window_name_set(Ecore_X_Window win, const char *name);
|
||||
EAPI char *e_hints_window_name_get(Ecore_X_Window win);
|
||||
EAPI void e_hints_desktop_config_set(void);
|
||||
EAPI void e_hints_window_state_set(Ecore_X_Window win);
|
||||
EAPI void e_hints_window_init(E_Border *bd);
|
||||
EAPI void e_hints_window_state_set(E_Border *bd);
|
||||
EAPI void e_hints_window_state_get(E_Border *bd);
|
||||
EAPI void e_hints_window_type_set(E_Border *bd);
|
||||
EAPI void e_hints_window_type_get(E_Border *bd);
|
||||
EAPI void e_hints_window_visible_set(Ecore_X_Window win);
|
||||
EAPI int e_hints_window_visible_isset(Ecore_X_Window win);
|
||||
EAPI void e_hints_window_iconic_set(Ecore_X_Window win);
|
||||
EAPI int e_hints_window_iconic_isset(Ecore_X_Window win);
|
||||
EAPI void e_hints_window_hidden_set(Ecore_X_Window win);
|
||||
EAPI int e_hints_window_hidden_isset(Ecore_X_Window win);
|
||||
EAPI void e_hints_window_shaded_set(Ecore_X_Window win, int on);
|
||||
EAPI int e_hints_window_shaded_isset(Ecore_X_Window win);
|
||||
EAPI void e_hints_window_shade_direction_set(Ecore_X_Window win, E_Direction dir);
|
||||
EAPI E_Direction e_hints_window_shade_direction_get(Ecore_X_Window win);
|
||||
|
||||
EAPI void e_hints_window_maximized_set(Ecore_X_Window win, int on);
|
||||
EAPI int e_hints_window_maximized_isset(Ecore_X_Window win);
|
||||
EAPI void e_hints_window_sticky_set(Ecore_X_Window win, int on);
|
||||
EAPI int e_hints_window_sticky_isset(Ecore_X_Window win);
|
||||
EAPI void e_hints_window_fullscreen_set(Ecore_X_Window win, int on);
|
||||
EAPI int e_hints_window_fullscreen_isset(Ecore_X_Window win);
|
||||
EAPI void e_hints_window_icon_name_get(Ecore_X_Window win);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue