Enable dragging of indicator bar (drop not complete yet).

SVN revision: 44473
This commit is contained in:
Christopher Michael 2009-12-15 07:53:35 +00:00
parent 23aa71925c
commit 6e6f62b60c
2 changed files with 85 additions and 1 deletions

View File

@ -13,6 +13,12 @@ struct _Il_Ind_Win
E_Menu *menu;
E_Gadcon *gadcon;
Evas_Object *o_base, *o_event;
struct
{
unsigned char start : 1;
unsigned char dnd : 1;
int x, y;
} drag;
};
EAPI extern E_Module_Api e_modapi;

View File

@ -7,6 +7,8 @@
static void _il_ind_win_cb_free(Il_Ind_Win *iwin);
static void _il_ind_win_cb_resize(E_Win *ewin);
static void _il_ind_win_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event);
static void _il_ind_win_cb_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event);
static void _il_ind_win_cb_mouse_move(void *data, Evas *evas, Evas_Object *obj, void *event);
static int _il_ind_win_gadcon_client_add(void *data, const E_Gadcon_Client_Class *cc);
static void _il_ind_win_gadcon_client_del(void *data, E_Gadcon_Client *gcc);
static void _il_ind_win_gadcon_min_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
@ -72,6 +74,10 @@ e_mod_ind_win_new(void)
evas_object_resize(iwin->o_event, zone->w, 32);
evas_object_event_callback_add(iwin->o_event, EVAS_CALLBACK_MOUSE_DOWN,
_il_ind_win_cb_mouse_down, iwin);
evas_object_event_callback_add(iwin->o_event, EVAS_CALLBACK_MOUSE_UP,
_il_ind_win_cb_mouse_up, iwin);
evas_object_event_callback_add(iwin->o_event, EVAS_CALLBACK_MOUSE_MOVE,
_il_ind_win_cb_mouse_move, iwin);
evas_object_show(iwin->o_event);
evas_object_layer_set(iwin->o_event, 200);
@ -153,7 +159,14 @@ _il_ind_win_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event)
if (!(iwin = data)) return;
ev = event;
if (ev->button == 3)
if (ev->button == 1)
{
iwin->drag.x = ev->output.x;
iwin->drag.y = ev->output.y;
iwin->drag.start = 1;
iwin->drag.dnd = 0;
}
else if (ev->button == 3)
{
E_Menu *mn;
E_Zone *zone;
@ -172,6 +185,71 @@ _il_ind_win_cb_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event)
}
}
static void
_il_ind_win_cb_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event)
{
Il_Ind_Win *iwin;
Evas_Event_Mouse_Up *ev;
if (!(iwin = data)) return;
ev = event;
if ((ev->button == 1) && (!iwin->drag.dnd))
{
iwin->drag.start = 0;
iwin->drag.dnd = 0;
}
}
static void
_il_ind_win_cb_mouse_move(void *data, Evas *evas, Evas_Object *obj, void *event)
{
Il_Ind_Win *iwin;
Evas_Event_Mouse_Move *ev;
int dx, dy;
if (!(iwin = data)) return;
ev = event;
if (!iwin->drag.start) return;
dx = ev->cur.output.x - iwin->drag.x;
dy = ev->cur.output.y - iwin->drag.y;
if (((dx * dx) + (dy * dy)) >
(e_config->drag_resist * e_config->drag_resist))
{
E_Drag *d;
Evas *evas;
Evas_Object *o;
int x, y, w, h;
const char *drag_types[] = { "illume/indicator" };
iwin->drag.dnd = 1;
iwin->drag.start = 0;
x = iwin->win->x;
y = iwin->win->y;
w = iwin->win->w;
h = iwin->win->h;
d = e_drag_new(iwin->win->container, x, y, drag_types,
1, iwin->win, -1, NULL, NULL);
evas = e_drag_evas_get(d);
o = edje_object_add(evas);
if (!e_theme_edje_object_set(o, "base/theme/modules/illume-indicator",
"modules/illume-indicator/shelf"))
{
char buff[PATH_MAX];
snprintf(buff, sizeof(buff), "%s/e-module-illume-indicator.edj",
il_ind_cfg->mod_dir);
edje_object_file_set(o, buff, "modules/illume-indicator/shelf");
}
evas_object_show(o);
e_drag_object_set(d, o);
e_drag_resize(d, w, h);
e_drag_start(d, iwin->drag.x, iwin->drag.y);
}
}
static void
_il_ind_win_cb_menu_post(void *data, E_Menu *m)
{