forked from enlightenment/enlightenment
Fix some quickpanel placement issues.
Add function to adjust quickpanel position. Add function to return if border is valid. Set layer of App borders. Reduce variable usage (use valid_count_get directly). SVN revision: 44763
This commit is contained in:
parent
223fcceb7c
commit
b6c8671bca
|
@ -222,9 +222,22 @@ e_mod_border_is_conformant(E_Border *bd)
|
|||
Eina_Bool
|
||||
e_mod_border_is_quickpanel(E_Border *bd)
|
||||
{
|
||||
if (strstr(bd->client.icccm.class, "config")) return EINA_FALSE;
|
||||
return ecore_x_e_illume_quickpanel_get(bd->client.win);
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
e_mod_border_is_valid(E_Border *bd)
|
||||
{
|
||||
if (!bd) return EINA_FALSE;
|
||||
if (e_mod_border_is_dialog(bd)) return EINA_FALSE;
|
||||
if (e_mod_border_is_keyboard(bd)) return EINA_FALSE;
|
||||
if (e_mod_border_is_bottom_panel(bd)) return EINA_FALSE;
|
||||
if (e_mod_border_is_top_shelf(bd)) return EINA_FALSE;
|
||||
if (e_mod_border_is_quickpanel(bd)) return EINA_FALSE;
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
Eina_List *
|
||||
e_mod_border_valid_borders_get(E_Zone *zone)
|
||||
{
|
||||
|
|
|
@ -26,12 +26,15 @@ Eina_Bool e_mod_border_is_side_pane_right(E_Border *bd);
|
|||
Eina_Bool e_mod_border_is_overlay(E_Border *bd);
|
||||
Eina_Bool e_mod_border_is_conformant(E_Border *bd);
|
||||
Eina_Bool e_mod_border_is_quickpanel(E_Border *bd);
|
||||
Eina_Bool e_mod_border_is_valid(E_Border *bd);
|
||||
|
||||
Eina_List *e_mod_border_valid_borders_get(E_Zone *zone);
|
||||
E_Border *e_mod_border_valid_border_get(E_Zone *zone);
|
||||
int e_mod_border_valid_count_get(E_Zone *zone);
|
||||
|
||||
Eina_List *e_mod_border_quickpanel_borders_get(E_Zone *zone);
|
||||
int e_mod_border_quickpanel_count_get(E_Zone *zone);
|
||||
|
||||
E_Border *e_mod_border_at_xy_get(E_Zone *zone, int x, int y);
|
||||
E_Border *e_mod_border_in_region_get(E_Zone *zone, int x, int y, int w, int h);
|
||||
E_Border *e_mod_border_keyboard_get(E_Zone *zone);
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include "e_mod_layout.h"
|
||||
#include "e_mod_layout_illume.h"
|
||||
#include "e_kbd.h"
|
||||
#include "e_quickpanel.h"
|
||||
|
||||
/* define some values here for easily changing layers so we don't have to
|
||||
* grep through code to change layers */
|
||||
|
@ -79,12 +80,14 @@ _border_resize_fx(E_Border *bd, int bx, int by, int bw, int bh)
|
|||
bd->client.w = bw;
|
||||
bd->client.h = bh;
|
||||
bd->changes.size = 1;
|
||||
bd->changed = 1;
|
||||
}
|
||||
if ((bd->x != bx) || (bd->y != by))
|
||||
{
|
||||
bd->x = bx;
|
||||
bd->y = by;
|
||||
bd->changes.pos = 1;
|
||||
bd->changed = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -186,6 +189,8 @@ _border_activate(E_Border *bd)
|
|||
{
|
||||
/* HANDLE A BORDER BEING ACTIVATED */
|
||||
|
||||
if (bd->stolen) return;
|
||||
|
||||
/* only set focus if border accepts it and it's not locked out */
|
||||
if (((!bd->client.icccm.accepts_focus) && (!bd->client.icccm.take_focus)) ||
|
||||
(bd->lock_focus_out))
|
||||
|
@ -331,9 +336,13 @@ _zone_layout(E_Zone *z)
|
|||
e_border_resize(bd, bd->zone->w, mh);
|
||||
if (bd->layer != IL_QUICKPANEL_LAYER)
|
||||
e_border_layer_set(bd, IL_QUICKPANEL_LAYER);
|
||||
bd->lock_user_stacking = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bd->layer != IL_APP_LAYER)
|
||||
e_border_layer_set(bd, IL_APP_LAYER);
|
||||
|
||||
/* normal border, handle layout based on policy mode */
|
||||
if (il_cfg->policy.mode.dual) _zone_layout_dual(bd);
|
||||
else _zone_layout_single(bd);
|
||||
|
@ -382,10 +391,7 @@ static void
|
|||
_zone_layout_dual_top(E_Border *bd)
|
||||
{
|
||||
int kx, ky, kw, kh, ss, ps;
|
||||
int count, conform;
|
||||
|
||||
/* get count of valid borders */
|
||||
count = e_mod_border_valid_count_get(bd->zone);
|
||||
int conform;
|
||||
|
||||
/* fetch if this border is conformant */
|
||||
conform = e_mod_border_is_conformant(bd);
|
||||
|
@ -404,7 +410,7 @@ _zone_layout_dual_top(E_Border *bd)
|
|||
}
|
||||
|
||||
/* if there are no other borders, than give this one all available space */
|
||||
if (count < 2)
|
||||
if (e_mod_border_valid_count_get(bd->zone) < 2)
|
||||
_border_resize_fx(bd, kx, (ky + ss), kw, (kh - ss - ps));
|
||||
else
|
||||
{
|
||||
|
@ -574,10 +580,7 @@ static void
|
|||
_zone_layout_dual_left(E_Border *bd)
|
||||
{
|
||||
int kx, ky, kw, kh, ss, ps;
|
||||
int count, conform;
|
||||
|
||||
/* get count of valid borders */
|
||||
count = e_mod_border_valid_count_get(bd->zone);
|
||||
int conform;
|
||||
|
||||
/* fetch if this border is conformant */
|
||||
conform = e_mod_border_is_conformant(bd);
|
||||
|
@ -596,7 +599,7 @@ _zone_layout_dual_left(E_Border *bd)
|
|||
}
|
||||
|
||||
/* if there are no other borders, than give this one all available space */
|
||||
if (count < 2)
|
||||
if (e_mod_border_valid_count_get(bd->zone) < 2)
|
||||
_border_resize_fx(bd, kx, (ky + ss), kw, (kh - ss - ps));
|
||||
else
|
||||
{
|
||||
|
|
|
@ -107,6 +107,25 @@ e_quickpanel_by_zone_get(E_Zone *zone)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void
|
||||
e_quickpanel_position_update(E_Quickpanel *qp)
|
||||
{
|
||||
Eina_List *l;
|
||||
E_Border *bd;
|
||||
int ty;
|
||||
|
||||
if (!qp) return;
|
||||
e_mod_border_top_shelf_pos_get(qp->zone, NULL, &ty);
|
||||
EINA_LIST_FOREACH(qp->borders, l, bd)
|
||||
{
|
||||
bd->x = qp->zone->x;
|
||||
bd->y = (ty - qp->h);
|
||||
bd->changed = 1;
|
||||
bd->changes.pos = 1;
|
||||
// e_border_move(bd, qp->zone->x, (ty - qp->h));
|
||||
}
|
||||
}
|
||||
|
||||
/* local functions */
|
||||
static void
|
||||
_e_quickpanel_cb_free(E_Quickpanel *qp)
|
||||
|
@ -146,15 +165,14 @@ _e_quickpanel_cb_border_pre_post_fetch(void *data, void *data2)
|
|||
{
|
||||
E_Border *bd;
|
||||
E_Quickpanel *qp;
|
||||
int ty, th;
|
||||
int ty;
|
||||
|
||||
if (!(bd = data2)) return;
|
||||
if (!bd->new_client) return;
|
||||
if (_e_quickpanel_by_border_get(bd)) return;
|
||||
if (!_e_quickpanel_border_is_quickpanel(bd)) return;
|
||||
if (_e_quickpanel_by_border_get(bd)) return;
|
||||
if (!(qp = e_quickpanel_by_zone_get(bd->zone))) return;
|
||||
e_mod_border_top_shelf_pos_get(qp->zone, NULL, &ty);
|
||||
e_mod_border_top_shelf_size_get(qp->zone, NULL, &th);
|
||||
bd->stolen = 1;
|
||||
if (bd->remember)
|
||||
{
|
||||
|
@ -172,7 +190,12 @@ _e_quickpanel_cb_border_pre_post_fetch(void *data, void *data2)
|
|||
qp->h += bd->h;
|
||||
e_border_move(bd, qp->zone->x, (ty - qp->h));
|
||||
if (qp->visible)
|
||||
e_border_fx_offset(bd, 0, (bd->h - th));
|
||||
{
|
||||
int th;
|
||||
|
||||
e_mod_border_top_shelf_size_get(qp->zone, NULL, &th);
|
||||
e_border_fx_offset(bd, 0, (bd->h - th));
|
||||
}
|
||||
qp->borders = eina_list_append(qp->borders, bd);
|
||||
}
|
||||
|
||||
|
@ -281,12 +304,9 @@ _e_quickpanel_hide(E_Quickpanel *qp)
|
|||
{
|
||||
Eina_List *l;
|
||||
E_Border *bd;
|
||||
int th;
|
||||
|
||||
e_mod_border_top_shelf_size_get(qp->zone, NULL, &th);
|
||||
EINA_LIST_FOREACH(qp->borders, l, bd)
|
||||
e_border_fx_offset(bd, 0, 0);
|
||||
// e_border_fx_offset(bd, 0, -th);
|
||||
qp->visible = 0;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -24,5 +24,6 @@ E_Quickpanel *e_quickpanel_new(E_Zone *zone);
|
|||
void e_quickpanel_show(E_Quickpanel *qp);
|
||||
void e_quickpanel_hide(E_Quickpanel *qp);
|
||||
E_Quickpanel *e_quickpanel_by_zone_get(E_Zone *zone);
|
||||
void e_quickpanel_position_update(E_Quickpanel *qp);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue