The pager shows which desk a drop is over.

SVN revision: 14792
This commit is contained in:
sebastid 2005-05-15 22:16:00 +00:00 committed by sebastid
parent 66ed370104
commit 418d943044
3 changed files with 141 additions and 6 deletions

View File

@ -62,6 +62,12 @@ group {
group {
name: "modules/pager/desk";
data {
item: "drag" "0";
}
script {
public active;
}
parts {
part {
name: "clip";
@ -133,6 +139,11 @@ group {
inherit: "default" 0.0;
color: 255 255 255 255;
}
description {
state: "drag" 0.0;
inherit: "default" 0.0;
color: 255 255 255 164;
}
}
part {
name: "items";
@ -382,6 +393,48 @@ group {
target: "sel";
target: "overlay";
}
program {
name: "set_active";
signal: "active";
source: "";
script {
set_int(active, 1);
}
}
program {
name: "set_passive";
signal: "passive";
source: "";
script {
set_int(active, 0);
}
}
program {
name: "drag_in";
signal: "drag";
source: "in";
action: STATE_SET "drag" 0.0;
target: "overlay";
}
program {
name: "drag_out";
signal: "drag";
source: "out";
script {
if (get_int(active) == 1)
set_state(PART:"overlay", "active", 0.0);
else
set_state(PART:"overlay", "default", 0.0);
}
}
program {
name: "init";
signal: "load";
source: "";
script {
set_int(active, 0);
}
}
}
}

View File

@ -62,7 +62,10 @@ static void _pager_desk_cb_mouse_move(void *data, Evas *e, Evas_Object *o
static void _pager_desk_cb_intercept_move(void *data, Evas_Object *o, Evas_Coord x, Evas_Coord y);
static void _pager_desk_cb_intercept_resize(void *data, Evas_Object *o, Evas_Coord w, Evas_Coord h);
static void _pager_cb_drop(void *data, const char *type, void *drop);
static void _pager_face_cb_enter(void *data, const char *type, void *drop);
static void _pager_face_cb_move(void *data, const char *type, void *drop);
static void _pager_face_cb_leave(void *data, const char *type, void *drop);
static void _pager_face_cb_drop(void *data, const char *type, void *drop);
static int _pager_count;
@ -274,6 +277,7 @@ _pager_face_new(E_Zone *zone)
{
Pager_Face *face;
Evas_Object *o;
Evas_Coord x, y, w, h;
face = E_NEW(Pager_Face, 1);
if (!face) return NULL;
@ -341,8 +345,17 @@ _pager_face_new(E_Zone *zone)
edje_object_part_swallow(face->pager_object, "items", face->table_object);
evas_object_show(o);
evas_object_resize(face->pager_object, 1000, 1000);
edje_object_calc_force(face->pager_object);
edje_object_part_geometry_get(face->pager_object, "items", &x, &y, &w, &h);
face->inset.l = x;
face->inset.r = 1000 - (x + w);
face->inset.t = y;
face->inset.b = 1000 - (y + h);
face->drop_handler = e_drop_handler_add(face,
NULL, NULL, NULL, _pager_cb_drop,
_pager_face_cb_enter, _pager_face_cb_move,
_pager_face_cb_leave, _pager_face_cb_drop,
"enlightenment/border",
face->fx, face->fy, face->fw, face->fh);
@ -1367,12 +1380,10 @@ _pager_desk_cb_intercept_resize(void *data, Evas_Object *o, Evas_Coord w, Evas_C
}
static void
_pager_cb_drop(void *data, const char *type, void *event_info)
_pager_face_cb_enter(void *data, const char *type, void *event_info)
{
E_Event_Dnd_Drop *ev;
E_Event_Dnd_Enter *ev;
Pager_Face *face;
E_Desk *desk;
E_Border *bd;
int x, y;
double w, h;
@ -1385,6 +1396,73 @@ _pager_cb_drop(void *data, const char *type, void *event_info)
x = (ev->x - face->fx) / w;
y = (ev->y - face->fy) / h;
}
static void
_pager_face_cb_move(void *data, const char *type, void *event_info)
{
E_Event_Dnd_Move *ev;
Pager_Face *face;
Pager_Desk *pd;
int x, y;
double w, h;
Evas_List *l;
ev = event_info;
face = data;
w = (face->fw - (face->inset.l + face->inset.r)) / (double) face->xnum;
h = (face->fh - (face->inset.t + face->inset.b)) / (double) face->ynum;
x = (ev->x - (face->fx + face->inset.l)) / w;
y = (ev->y - (face->fy + face->inset.t)) / h;
for (l = face->desks; l; l = l->next)
{
pd = l->data;
if ((pd->xpos == x) && (pd->ypos == y))
edje_object_signal_emit(pd->desk_object, "drag", "in");
else
edje_object_signal_emit(pd->desk_object, "drag", "out");
}
}
static void
_pager_face_cb_leave(void *data, const char *type, void *event_info)
{
E_Event_Dnd_Leave *ev;
Pager_Face *face;
Evas_List *l;
ev = event_info;
face = data;
for (l = face->desks; l; l = l->next)
{
Pager_Desk *pd;
pd = l->data;
edje_object_signal_emit(pd->desk_object, "drag", "out");
}
}
static void
_pager_face_cb_drop(void *data, const char *type, void *event_info)
{
E_Event_Dnd_Drop *ev;
Pager_Face *face;
E_Desk *desk;
E_Border *bd;
int x, y;
double w, h;
ev = event_info;
face = data;
w = (face->fw - (face->inset.l + face->inset.r)) / (double) face->xnum;
h = (face->fh - (face->inset.t + face->inset.b)) / (double) face->ynum;
x = (ev->x - (face->fx + face->inset.l)) / w;
y = (ev->y - (face->fy + face->inset.t)) / h;
desk = e_desk_at_xy_get(face->zone, x, y);
bd = ev->data;

View File

@ -53,6 +53,9 @@ struct _Pager_Face
Evas_Object *table_object;
Evas_Coord fx, fy, fw, fh;
struct {
Evas_Coord l, r, t, b;
} inset;
/* Current nr. of desktops */
int xnum, ynum;
@ -87,6 +90,7 @@ struct _Pager_Desk
Evas_Object *desk_object;
Evas_Object *layout_object;
Evas_Object *event_object;
int xpos, ypos;
int current : 1;