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
|
Eina_Bool
|
||||||
e_mod_border_is_quickpanel(E_Border *bd)
|
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);
|
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 *
|
Eina_List *
|
||||||
e_mod_border_valid_borders_get(E_Zone *zone)
|
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_overlay(E_Border *bd);
|
||||||
Eina_Bool e_mod_border_is_conformant(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_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);
|
Eina_List *e_mod_border_valid_borders_get(E_Zone *zone);
|
||||||
E_Border *e_mod_border_valid_border_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);
|
int e_mod_border_valid_count_get(E_Zone *zone);
|
||||||
|
|
||||||
Eina_List *e_mod_border_quickpanel_borders_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);
|
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_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_in_region_get(E_Zone *zone, int x, int y, int w, int h);
|
||||||
E_Border *e_mod_border_keyboard_get(E_Zone *zone);
|
E_Border *e_mod_border_keyboard_get(E_Zone *zone);
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "e_mod_layout.h"
|
#include "e_mod_layout.h"
|
||||||
#include "e_mod_layout_illume.h"
|
#include "e_mod_layout_illume.h"
|
||||||
#include "e_kbd.h"
|
#include "e_kbd.h"
|
||||||
|
#include "e_quickpanel.h"
|
||||||
|
|
||||||
/* define some values here for easily changing layers so we don't have to
|
/* define some values here for easily changing layers so we don't have to
|
||||||
* grep through code to change layers */
|
* grep through code to change layers */
|
||||||
|
@ -79,19 +80,21 @@ _border_resize_fx(E_Border *bd, int bx, int by, int bw, int bh)
|
||||||
bd->client.w = bw;
|
bd->client.w = bw;
|
||||||
bd->client.h = bh;
|
bd->client.h = bh;
|
||||||
bd->changes.size = 1;
|
bd->changes.size = 1;
|
||||||
|
bd->changed = 1;
|
||||||
}
|
}
|
||||||
if ((bd->x != bx) || (bd->y != by))
|
if ((bd->x != bx) || (bd->y != by))
|
||||||
{
|
{
|
||||||
bd->x = bx;
|
bd->x = bx;
|
||||||
bd->y = by;
|
bd->y = by;
|
||||||
bd->changes.pos = 1;
|
bd->changes.pos = 1;
|
||||||
|
bd->changed = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((bd->w != bw) || (bd->h != bh))
|
if ((bd->w != bw) || (bd->h != bh))
|
||||||
e_border_resize(bd, bw, bh);
|
e_border_resize(bd, bw, bh);
|
||||||
if ((bd->x != bx) || (bd->y != by))
|
if ((bd->x != bx) || (bd->y != by))
|
||||||
e_border_fx_offset(bd, bx, by);
|
e_border_fx_offset(bd, bx, by);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -186,6 +189,8 @@ _border_activate(E_Border *bd)
|
||||||
{
|
{
|
||||||
/* HANDLE A BORDER BEING ACTIVATED */
|
/* HANDLE A BORDER BEING ACTIVATED */
|
||||||
|
|
||||||
|
if (bd->stolen) return;
|
||||||
|
|
||||||
/* only set focus if border accepts it and it's not locked out */
|
/* only set focus if border accepts it and it's not locked out */
|
||||||
if (((!bd->client.icccm.accepts_focus) && (!bd->client.icccm.take_focus)) ||
|
if (((!bd->client.icccm.accepts_focus) && (!bd->client.icccm.take_focus)) ||
|
||||||
(bd->lock_focus_out))
|
(bd->lock_focus_out))
|
||||||
|
@ -331,9 +336,13 @@ _zone_layout(E_Zone *z)
|
||||||
e_border_resize(bd, bd->zone->w, mh);
|
e_border_resize(bd, bd->zone->w, mh);
|
||||||
if (bd->layer != IL_QUICKPANEL_LAYER)
|
if (bd->layer != IL_QUICKPANEL_LAYER)
|
||||||
e_border_layer_set(bd, IL_QUICKPANEL_LAYER);
|
e_border_layer_set(bd, IL_QUICKPANEL_LAYER);
|
||||||
|
bd->lock_user_stacking = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (bd->layer != IL_APP_LAYER)
|
||||||
|
e_border_layer_set(bd, IL_APP_LAYER);
|
||||||
|
|
||||||
/* normal border, handle layout based on policy mode */
|
/* normal border, handle layout based on policy mode */
|
||||||
if (il_cfg->policy.mode.dual) _zone_layout_dual(bd);
|
if (il_cfg->policy.mode.dual) _zone_layout_dual(bd);
|
||||||
else _zone_layout_single(bd);
|
else _zone_layout_single(bd);
|
||||||
|
@ -382,10 +391,7 @@ static void
|
||||||
_zone_layout_dual_top(E_Border *bd)
|
_zone_layout_dual_top(E_Border *bd)
|
||||||
{
|
{
|
||||||
int kx, ky, kw, kh, ss, ps;
|
int kx, ky, kw, kh, ss, ps;
|
||||||
int count, conform;
|
int conform;
|
||||||
|
|
||||||
/* get count of valid borders */
|
|
||||||
count = e_mod_border_valid_count_get(bd->zone);
|
|
||||||
|
|
||||||
/* fetch if this border is conformant */
|
/* fetch if this border is conformant */
|
||||||
conform = e_mod_border_is_conformant(bd);
|
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 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));
|
_border_resize_fx(bd, kx, (ky + ss), kw, (kh - ss - ps));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -574,10 +580,7 @@ static void
|
||||||
_zone_layout_dual_left(E_Border *bd)
|
_zone_layout_dual_left(E_Border *bd)
|
||||||
{
|
{
|
||||||
int kx, ky, kw, kh, ss, ps;
|
int kx, ky, kw, kh, ss, ps;
|
||||||
int count, conform;
|
int conform;
|
||||||
|
|
||||||
/* get count of valid borders */
|
|
||||||
count = e_mod_border_valid_count_get(bd->zone);
|
|
||||||
|
|
||||||
/* fetch if this border is conformant */
|
/* fetch if this border is conformant */
|
||||||
conform = e_mod_border_is_conformant(bd);
|
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 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));
|
_border_resize_fx(bd, kx, (ky + ss), kw, (kh - ss - ps));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -107,6 +107,25 @@ e_quickpanel_by_zone_get(E_Zone *zone)
|
||||||
return NULL;
|
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 */
|
/* local functions */
|
||||||
static void
|
static void
|
||||||
_e_quickpanel_cb_free(E_Quickpanel *qp)
|
_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_Border *bd;
|
||||||
E_Quickpanel *qp;
|
E_Quickpanel *qp;
|
||||||
int ty, th;
|
int ty;
|
||||||
|
|
||||||
if (!(bd = data2)) return;
|
if (!(bd = data2)) return;
|
||||||
if (!bd->new_client) 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_border_is_quickpanel(bd)) return;
|
||||||
|
if (_e_quickpanel_by_border_get(bd)) return;
|
||||||
if (!(qp = e_quickpanel_by_zone_get(bd->zone))) 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_pos_get(qp->zone, NULL, &ty);
|
||||||
e_mod_border_top_shelf_size_get(qp->zone, NULL, &th);
|
|
||||||
bd->stolen = 1;
|
bd->stolen = 1;
|
||||||
if (bd->remember)
|
if (bd->remember)
|
||||||
{
|
{
|
||||||
|
@ -172,7 +190,12 @@ _e_quickpanel_cb_border_pre_post_fetch(void *data, void *data2)
|
||||||
qp->h += bd->h;
|
qp->h += bd->h;
|
||||||
e_border_move(bd, qp->zone->x, (ty - qp->h));
|
e_border_move(bd, qp->zone->x, (ty - qp->h));
|
||||||
if (qp->visible)
|
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);
|
qp->borders = eina_list_append(qp->borders, bd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -281,12 +304,9 @@ _e_quickpanel_hide(E_Quickpanel *qp)
|
||||||
{
|
{
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
E_Border *bd;
|
E_Border *bd;
|
||||||
int th;
|
|
||||||
|
|
||||||
e_mod_border_top_shelf_size_get(qp->zone, NULL, &th);
|
|
||||||
EINA_LIST_FOREACH(qp->borders, l, bd)
|
EINA_LIST_FOREACH(qp->borders, l, bd)
|
||||||
e_border_fx_offset(bd, 0, 0);
|
e_border_fx_offset(bd, 0, 0);
|
||||||
// e_border_fx_offset(bd, 0, -th);
|
|
||||||
qp->visible = 0;
|
qp->visible = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -24,5 +24,6 @@ E_Quickpanel *e_quickpanel_new(E_Zone *zone);
|
||||||
void e_quickpanel_show(E_Quickpanel *qp);
|
void e_quickpanel_show(E_Quickpanel *qp);
|
||||||
void e_quickpanel_hide(E_Quickpanel *qp);
|
void e_quickpanel_hide(E_Quickpanel *qp);
|
||||||
E_Quickpanel *e_quickpanel_by_zone_get(E_Zone *zone);
|
E_Quickpanel *e_quickpanel_by_zone_get(E_Zone *zone);
|
||||||
|
void e_quickpanel_position_update(E_Quickpanel *qp);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue