parent
66fa6c445f
commit
110ab2c9a7
|
@ -3689,7 +3689,7 @@ _e_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key)
|
|||
mi = e_menu_item_new(m);
|
||||
e_menu_item_label_set(mi, _("Always On Top"));
|
||||
e_menu_item_check_set(mi, 1);
|
||||
e_menu_item_toggle_set(mi, (bd->layer == 175 ? 1 : 0));
|
||||
e_menu_item_toggle_set(mi, (bd->layer == 150 ? 1 : 0));
|
||||
e_menu_item_callback_set(mi, _e_border_menu_cb_on_top, bd);
|
||||
e_menu_item_icon_edje_set(mi,
|
||||
(char *)e_theme_edje_file_get("base/theme/borders",
|
||||
|
@ -3844,10 +3844,16 @@ _e_border_menu_cb_on_top(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
E_Border *bd;
|
||||
|
||||
bd = data;
|
||||
if (bd->layer == 175)
|
||||
bd->layer = 100;
|
||||
if (bd->layer == 150)
|
||||
{
|
||||
bd->layer = 100;
|
||||
e_hints_window_stacking_set(bd, E_STACKING_NONE);
|
||||
}
|
||||
else
|
||||
bd->layer = 175;
|
||||
{
|
||||
bd->layer = 150;
|
||||
e_hints_window_stacking_set(bd, E_STACKING_ABOVE);
|
||||
}
|
||||
e_container_window_raise(bd->zone->container, bd->win, bd->layer);
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,13 @@ typedef enum _E_Transition
|
|||
E_TRANSITION_DECELERATE
|
||||
} E_Transition;
|
||||
|
||||
typedef enum _E_Stacking
|
||||
{
|
||||
E_STACKING_NONE,
|
||||
E_STACKING_ABOVE,
|
||||
E_STACKING_BELOW
|
||||
} E_Stacking;
|
||||
|
||||
typedef struct _E_Border E_Border;
|
||||
typedef struct _E_Border_Pending_Move_Resize E_Border_Pending_Move_Resize;
|
||||
typedef struct _E_Event_Border_Resize E_Event_Border_Resize;
|
||||
|
@ -157,7 +164,7 @@ struct _E_Border
|
|||
unsigned char skip_taskbar : 1;
|
||||
unsigned char skip_pager : 1;
|
||||
unsigned char fullscreen : 1;
|
||||
unsigned char stacking : 2; /* 0 = None, 1 = Above, 2 = Below */
|
||||
E_Stacking stacking;
|
||||
} state;
|
||||
|
||||
Ecore_X_Window_Type type;
|
||||
|
|
|
@ -256,9 +256,9 @@ e_hints_window_init(E_Border *bd)
|
|||
|
||||
if (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DESKTOP)
|
||||
bd->layer = 0;
|
||||
else if (bd->client.netwm.state.stacking == 2)
|
||||
else if (bd->client.netwm.state.stacking == E_STACKING_ABOVE)
|
||||
bd->layer = 50;
|
||||
else if (bd->client.netwm.state.stacking == 1)
|
||||
else if (bd->client.netwm.state.stacking == E_STACKING_BELOW)
|
||||
bd->layer = 150;
|
||||
else if (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DOCK)
|
||||
bd->layer = 150;
|
||||
|
@ -306,12 +306,15 @@ e_hints_window_state_set(E_Border *bd)
|
|||
|
||||
switch (bd->client.netwm.state.stacking)
|
||||
{
|
||||
case 1:
|
||||
case E_STACKING_ABOVE:
|
||||
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:
|
||||
break;
|
||||
case E_STACKING_BELOW:
|
||||
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);
|
||||
break;
|
||||
case E_STACKING_NONE:
|
||||
default:
|
||||
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);
|
||||
|
@ -615,28 +618,28 @@ e_hints_window_state_update(E_Border *bd, Ecore_X_Window_State state,
|
|||
switch (action)
|
||||
{
|
||||
case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
|
||||
if (bd->client.netwm.state.stacking == 1)
|
||||
if (bd->client.netwm.state.stacking == E_STACKING_ABOVE)
|
||||
{
|
||||
bd->client.netwm.state.stacking = 0;
|
||||
bd->client.netwm.state.stacking = E_STACKING_NONE;
|
||||
changed = 1;
|
||||
}
|
||||
break;
|
||||
case ECORE_X_WINDOW_STATE_ACTION_ADD:
|
||||
if (bd->client.netwm.state.stacking == 0)
|
||||
if (bd->client.netwm.state.stacking == E_STACKING_NONE)
|
||||
{
|
||||
bd->client.netwm.state.stacking = 1;
|
||||
bd->client.netwm.state.stacking = E_STACKING_ABOVE;
|
||||
changed = 1;
|
||||
}
|
||||
break;
|
||||
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
|
||||
if (bd->client.netwm.state.stacking == 1)
|
||||
if (bd->client.netwm.state.stacking == E_STACKING_ABOVE)
|
||||
{
|
||||
bd->client.netwm.state.stacking = 0;
|
||||
bd->client.netwm.state.stacking = E_STACKING_NONE;
|
||||
changed = 1;
|
||||
}
|
||||
else if (bd->client.netwm.state.stacking == 0)
|
||||
else if (bd->client.netwm.state.stacking == E_STACKING_NONE)
|
||||
{
|
||||
bd->client.netwm.state.stacking = 1;
|
||||
bd->client.netwm.state.stacking = E_STACKING_ABOVE;
|
||||
changed = 1;
|
||||
}
|
||||
break;
|
||||
|
@ -658,28 +661,28 @@ e_hints_window_state_update(E_Border *bd, Ecore_X_Window_State state,
|
|||
switch (action)
|
||||
{
|
||||
case ECORE_X_WINDOW_STATE_ACTION_REMOVE:
|
||||
if (bd->client.netwm.state.stacking == 2)
|
||||
if (bd->client.netwm.state.stacking == E_STACKING_BELOW)
|
||||
{
|
||||
bd->client.netwm.state.stacking = 0;
|
||||
bd->client.netwm.state.stacking = E_STACKING_NONE;
|
||||
changed = 1;
|
||||
}
|
||||
break;
|
||||
case ECORE_X_WINDOW_STATE_ACTION_ADD:
|
||||
if (bd->client.netwm.state.stacking == 0)
|
||||
if (bd->client.netwm.state.stacking == E_STACKING_NONE)
|
||||
{
|
||||
bd->client.netwm.state.stacking = 2;
|
||||
bd->client.netwm.state.stacking = E_STACKING_BELOW;
|
||||
changed = 1;
|
||||
}
|
||||
break;
|
||||
case ECORE_X_WINDOW_STATE_ACTION_TOGGLE:
|
||||
if (bd->client.netwm.state.stacking == 2)
|
||||
if (bd->client.netwm.state.stacking == E_STACKING_BELOW)
|
||||
{
|
||||
bd->client.netwm.state.stacking = 0;
|
||||
bd->client.netwm.state.stacking = E_STACKING_NONE;
|
||||
changed = 1;
|
||||
}
|
||||
else if (bd->client.netwm.state.stacking == 0)
|
||||
else if (bd->client.netwm.state.stacking == E_STACKING_NONE)
|
||||
{
|
||||
bd->client.netwm.state.stacking = 2;
|
||||
bd->client.netwm.state.stacking = E_STACKING_BELOW;
|
||||
changed = 1;
|
||||
}
|
||||
break;
|
||||
|
@ -858,7 +861,6 @@ e_hints_window_fullscreen_set(E_Border *bd, int on)
|
|||
void
|
||||
e_hints_window_sticky_set(E_Border *bd, int on)
|
||||
{
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_STICKY, on);
|
||||
if ((!bd->client.netwm.state.sticky) && (on))
|
||||
{
|
||||
ecore_x_netwm_window_state_set(bd->client.win, ECORE_X_WINDOW_STATE_STICKY, 1);
|
||||
|
@ -871,6 +873,29 @@ e_hints_window_sticky_set(E_Border *bd, int on)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
e_hints_window_stacking_set(E_Border *bd, E_Stacking stacking)
|
||||
{
|
||||
if (bd->client.netwm.state.stacking == stacking) return;
|
||||
switch (stacking)
|
||||
{
|
||||
case E_STACKING_ABOVE:
|
||||
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);
|
||||
break;
|
||||
case E_STACKING_BELOW:
|
||||
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);
|
||||
break;
|
||||
case E_STACKING_NONE:
|
||||
default:
|
||||
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;
|
||||
}
|
||||
bd->client.netwm.state.stacking = stacking;
|
||||
}
|
||||
|
||||
/*
|
||||
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);
|
||||
|
|
|
@ -35,8 +35,9 @@ EAPI E_Direction e_hints_window_shade_direction_get(E_Border *bd);
|
|||
|
||||
EAPI void e_hints_window_shaded_set(E_Border *bd, int on);
|
||||
EAPI void e_hints_window_maximized_set(E_Border *bd, int on);
|
||||
EAPI void e_hints_window_sticky_set(E_Border *bd, int on);
|
||||
EAPI void e_hints_window_fullscreen_set(E_Border *bd, int on);
|
||||
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_icon_name_get(E_Border *bd);
|
||||
|
||||
|
|
Loading…
Reference in New Issue