Border drop on ibar (From S��bastien HOUZE).

SVN revision: 15899
This commit is contained in:
sebastid 2005-07-26 11:03:36 +00:00 committed by sebastid
parent 038776de19
commit 7821c74bd7
2 changed files with 61 additions and 0 deletions

View File

@ -71,7 +71,9 @@ static int _ibar_bar_cb_animator(void *data);
static void _ibar_bar_cb_enter(void *data, const char *type, void *event);
static void _ibar_bar_cb_move(void *data, const char *type, void *event);
static void _ibar_bar_cb_leave(void *data, const char *type, void *event);
static void _ibar_bar_cb_drop_eapp(void *data, const char *type, void *event);
static void _ibar_bar_cb_drop_border(void *data, const char *type, void *event);
static void _ibar_bar_cb_drop_file(void *data, const char *type, void *event);
static void _ibar_bar_cb_finished(E_Drag *drag, int dropped);
@ -516,6 +518,13 @@ _ibar_bar_new(IBar *ib, E_Container *con)
ibb->x + ibb->bar_inset.l, ibb->y + ibb->bar_inset.t,
ibb->w - (ibb->bar_inset.l + ibb->bar_inset.r),
ibb->h - (ibb->bar_inset.t + ibb->bar_inset.b));
ibb->drop_border = e_drop_handler_add(ibb,
_ibar_bar_cb_enter, _ibar_bar_cb_move,
_ibar_bar_cb_leave, _ibar_bar_cb_drop_border,
"enlightenment/border",
ibb->x + ibb->bar_inset.l, ibb->y + ibb->bar_inset.t,
ibb->w - (ibb->bar_inset.l + ibb->bar_inset.r),
ibb->h - (ibb->bar_inset.t + ibb->bar_inset.b));
ibb->drop_file = e_drop_handler_add(ibb,
_ibar_bar_cb_enter, _ibar_bar_cb_move,
_ibar_bar_cb_leave, _ibar_bar_cb_drop_file,
@ -564,6 +573,7 @@ _ibar_bar_free(IBar_Bar *ibb)
_ibar_icon_free(ibb->icons->data);
e_drop_handler_del(ibb->drop_eapp);
e_drop_handler_del(ibb->drop_border);
e_drop_handler_del(ibb->drop_file);
if (ibb->timer) ecore_timer_del(ibb->timer);
@ -1608,6 +1618,52 @@ _ibar_bar_cb_drop_eapp(void *data, const char *type, void *event)
ev = event;
ibb = data;
app = ev->data;
/* add dropped element */
ic = _ibar_icon_pos_find(ibb, ev->x, ev->y);
/* remove drag marker */
e_box_freeze(ibb->box_object);
e_box_unpack(ibb->drag_object);
evas_object_del(ibb->drag_object);
ibb->drag_object = NULL;
evas_object_del(ibb->drag_object_overlay);
ibb->drag_object_overlay = NULL;
e_box_thaw(ibb->box_object);
_ibar_bar_frame_resize(ibb);
if (ic)
{
/* Add new eapp before this icon */
e_app_prepend_relative(app, ic->app);
}
else
{
/* Add at the end */
e_app_append(app, ibb->ibar->apps);
}
}
static void
_ibar_bar_cb_drop_border(void *data, const char *type, void *event)
{
E_Event_Dnd_Drop *ev;
E_App *app;
IBar_Bar *ibb;
IBar_Icon *ic;
E_Border *bd;
char *title = "";
ev = event;
ibb = data;
bd = ev->data;
if (bd->client.netwm.name) title = bd->client.netwm.name;
else title = bd->client.icccm.title;
app = e_app_window_name_class_title_role_find(bd->client.icccm.name,
bd->client.icccm.class,
title, bd->client.icccm.window_role);
/* add dropped element */
ic = _ibar_icon_pos_find(ibb, ev->x, ev->y);
@ -1709,6 +1765,10 @@ _ibar_bar_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change
ibb->x + ibb->bar_inset.l, ibb->y + ibb->bar_inset.t,
ibb->w - (ibb->bar_inset.l + ibb->bar_inset.r),
ibb->h - (ibb->bar_inset.t + ibb->bar_inset.b));
e_drop_handler_geometry_set(ibb->drop_border,
ibb->x + ibb->bar_inset.l, ibb->y + ibb->bar_inset.t,
ibb->w - (ibb->bar_inset.l + ibb->bar_inset.r),
ibb->h - (ibb->bar_inset.t + ibb->bar_inset.b));
e_drop_handler_geometry_set(ibb->drop_file,
ibb->x + ibb->bar_inset.l, ibb->y + ibb->bar_inset.t,
ibb->w - (ibb->bar_inset.l + ibb->bar_inset.r),

View File

@ -74,6 +74,7 @@ struct _IBar_Bar
Config_Bar *conf;
E_Drop_Handler *drop_eapp;
E_Drop_Handler *drop_border;
E_Drop_Handler *drop_file;
};