parent
910265c899
commit
fb6d71ec9e
|
@ -8,13 +8,8 @@ typedef struct _Cfg_File_Data Cfg_File_Data;
|
|||
|
||||
struct _cfdata
|
||||
{
|
||||
int follower;
|
||||
int rowsize;
|
||||
double follow_speed;
|
||||
int allow_overlap;
|
||||
/* double autoscroll_speed;
|
||||
* int autofit;
|
||||
*/
|
||||
};
|
||||
|
||||
struct _Cfg_File_Data
|
||||
|
@ -55,12 +50,7 @@ _config_itray_module(E_Container *con, ITray *itray)
|
|||
static void
|
||||
_fill_data(ITray *ib, CFData *cfdata)
|
||||
{
|
||||
/* cfdata->autofit = (ib->conf->width == ITRAY_WIDTH_AUTO);
|
||||
* cfdata->autoscroll_speed = ib->conf->autoscroll_speed;
|
||||
*/
|
||||
cfdata->follower = ib->conf->follower;
|
||||
cfdata->rowsize = ib->conf->rowsize;
|
||||
cfdata->follow_speed = ib->conf->follow_speed;
|
||||
cfdata->allow_overlap = ib->conf->allow_overlap;
|
||||
}
|
||||
|
||||
|
@ -96,11 +86,6 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata)
|
|||
_fill_data(ib, cfdata);
|
||||
|
||||
o = e_widget_list_add(evas, 0, 0);
|
||||
ob = e_widget_check_add(evas, _("Show Follower"), &(cfdata->follower));
|
||||
e_widget_list_object_append(o, ob, 1, 1, 0.5);
|
||||
/* ob = e_widget_check_add(evas, _("Auto Fit Icons"), &(cfdata->autofit));
|
||||
* e_widget_list_object_append(o, ob, 1, 1, 0.5);
|
||||
*/
|
||||
|
||||
of = e_widget_framelist_add(evas, _("Extras"), 0);
|
||||
ob = e_widget_check_add(evas, _("Allow windows to overlap this gadget"), &(cfdata->allow_overlap));
|
||||
|
@ -116,25 +101,10 @@ _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata)
|
|||
ITray *ib;
|
||||
|
||||
ib = cfd->data;
|
||||
if ((cfdata->follower) && (!ib->conf->follower))
|
||||
ib->conf->follower = 1;
|
||||
else if (!(cfdata->follower) && (ib->conf->follower))
|
||||
ib->conf->follower = 0;
|
||||
|
||||
if (cfdata->allow_overlap && !ib->conf->allow_overlap)
|
||||
ib->conf->allow_overlap = 1;
|
||||
else if (!cfdata->allow_overlap && ib->conf->allow_overlap)
|
||||
ib->conf->allow_overlap = 0;
|
||||
|
||||
/* if ((cfdata->autofit) && (ib->conf->width == ITRAY_WIDTH_FIXED))
|
||||
* {
|
||||
* ib->conf->width = ITRAY_WIDTH_AUTO;
|
||||
* }
|
||||
* else if (!(cfdata->autofit) && (ib->conf->width == ITRAY_WIDTH_AUTO))
|
||||
* {
|
||||
* ib->conf->width = ITRAY_WIDTH_FIXED;
|
||||
* }
|
||||
*/
|
||||
e_config_save_queue();
|
||||
|
||||
_itray_box_cb_config_updated(ib);
|
||||
|
@ -152,29 +122,10 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata)
|
|||
|
||||
o = e_widget_list_add(evas, 0, 0);
|
||||
|
||||
of = e_widget_framelist_add(evas, _("Follower"), 0);
|
||||
ob = e_widget_check_add(evas, _("Visible"), &(cfdata->follower));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_label_add(evas, _("Follow Speed"));
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_slider_add(evas, 1, 0, _("%1.2f px/s"), 0.0, 1.0, 0.01, 0, &(cfdata->follow_speed), NULL,200);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
of = e_widget_framelist_add(evas, _("Number of Rows"), 0);
|
||||
ob = e_widget_slider_add(evas, 1, 0, _("%3.0f"), 1.0, 6.0, 1.0, 0, NULL, &(cfdata->rowsize), 200);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
|
||||
/* of = e_widget_framelist_add(evas, _("Width"), 0);
|
||||
* ob = e_widget_check_add(evas, _("Auto Fit"), &(cfdata->autofit));
|
||||
* e_widget_framelist_object_append(of, ob);
|
||||
* ob = e_widget_label_add(evas, _("Autoscroll Speed:"));
|
||||
* e_widget_framelist_object_append(of, ob);
|
||||
* ob = e_widget_slider_add(evas, 1, 0, _("%1.2f px/s"), 0.0, 1.0, 0.01, 0, &(cfdata->autoscroll_speed), NULL,200);
|
||||
* e_widget_framelist_object_append(of, ob);
|
||||
* e_widget_list_object_append(o, of, 1, 1, 0.5);
|
||||
*/
|
||||
|
||||
of = e_widget_framelist_add(evas, _("Extras"), 0);
|
||||
ob = e_widget_check_add(evas, _("Allow windows to overlap this gadget"), &(cfdata->allow_overlap));
|
||||
|
@ -191,46 +142,14 @@ _advanced_apply_data(E_Config_Dialog *cfd, CFData *cfdata)
|
|||
|
||||
ib = cfd->data;
|
||||
e_border_button_bindings_ungrab_all();
|
||||
if ((cfdata->follower) && (!ib->conf->follower))
|
||||
{
|
||||
ib->conf->follower = 1;
|
||||
}
|
||||
else if (!(cfdata->follower) && (ib->conf->follower))
|
||||
{
|
||||
ib->conf->follower = 0;
|
||||
}
|
||||
|
||||
/* if ((cfdata->autofit) && (ib->conf->width == ITRAY_WIDTH_FIXED))
|
||||
* {
|
||||
* ib->conf->width = ITRAY_WIDTH_AUTO;
|
||||
* }
|
||||
* else if (!(cfdata->autofit) && (ib->conf->width == ITRAY_WIDTH_AUTO))
|
||||
* {
|
||||
* ib->conf->width = ITRAY_WIDTH_FIXED;
|
||||
* }
|
||||
*/
|
||||
|
||||
if (cfdata->rowsize != ib->conf->rowsize)
|
||||
{
|
||||
ib->conf->rowsize = cfdata->rowsize;
|
||||
}
|
||||
if (cfdata->follow_speed != ib->conf->follow_speed)
|
||||
{
|
||||
ib->conf->follow_speed = cfdata->follow_speed;
|
||||
}
|
||||
|
||||
if (cfdata->allow_overlap && !ib->conf->allow_overlap)
|
||||
ib->conf->allow_overlap = 1;
|
||||
else if (!cfdata->allow_overlap && ib->conf->allow_overlap)
|
||||
ib->conf->allow_overlap = 0;
|
||||
|
||||
|
||||
/* if (cfdata->autoscroll_speed != ib->conf->autoscroll_speed)
|
||||
* {
|
||||
* ib->conf->autoscroll_speed = cfdata->autoscroll_speed;
|
||||
* }
|
||||
*/
|
||||
|
||||
e_border_button_bindings_grab_all();
|
||||
e_config_save_queue();
|
||||
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
*
|
||||
* Changing the number of rows breaks the layout.
|
||||
* It's magically fixed when the module is moved.
|
||||
* Remove the follower code, or make it work on top of the tray icons.
|
||||
*
|
||||
* TODO List:
|
||||
*
|
||||
|
@ -64,9 +63,6 @@ static void _itray_box_disable(ITray_Box *itb);
|
|||
static void _itray_box_frame_resize(ITray_Box *itb);
|
||||
static void _itray_box_edge_change(ITray_Box *itb, int edge);
|
||||
static void _itray_box_update_policy(ITray_Box *itb);
|
||||
static void _itray_box_motion_handle(ITray_Box *itb, Evas_Coord mx, Evas_Coord my);
|
||||
static void _itray_box_timer_handle(ITray_Box *itb);
|
||||
static void _itray_box_follower_reset(ITray_Box *itb);
|
||||
|
||||
static void _itray_box_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change);
|
||||
static void _itray_box_cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
|
@ -75,16 +71,11 @@ static void _itray_box_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, v
|
|||
static void _itray_box_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _itray_box_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
|
||||
/* Follower */
|
||||
static int _itray_box_cb_timer(void *data);
|
||||
static int _itray_box_cb_animator(void *data);
|
||||
|
||||
static void _itray_box_cb_menu_configure(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
static void _itray_box_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||
|
||||
/* Config Updated Function Protos */
|
||||
static void _itray_box_cb_width_auto(void *data);
|
||||
static void _itray_box_cb_follower(void *data);
|
||||
|
||||
/* Tray */
|
||||
static void _itray_tray_init(ITray_Box *itb);
|
||||
|
@ -92,6 +83,10 @@ static void _itray_tray_shutdown(ITray_Box *itb);
|
|||
static int _itray_tray_cb_msg(void *data, int type, void *event);
|
||||
static void _itray_tray_active_set();
|
||||
|
||||
static void _itray_tray_add(ITray_Box *itb, Ecore_X_Window win);
|
||||
static void _itray_tray_remove(ITray_Box *itb, Ecore_X_Window win);
|
||||
static int _itray_tray_cb_msg(void *data, int type, void *event);
|
||||
|
||||
static void _itray_tray_cb_move(void *data, Evas_Object *o, Evas_Coord x, Evas_Coord y);
|
||||
static void _itray_tray_cb_resize(void *data, Evas_Object *o, Evas_Coord w, Evas_Coord h);
|
||||
|
||||
|
@ -212,9 +207,6 @@ _itray_new()
|
|||
#undef D
|
||||
#define T Config
|
||||
#define D conf_edd
|
||||
E_CONFIG_VAL(D, T, follower, INT);
|
||||
E_CONFIG_VAL(D, T, follow_speed, DOUBLE);
|
||||
E_CONFIG_VAL(D, T, autoscroll_speed, DOUBLE);
|
||||
E_CONFIG_VAL(D, T, rowsize, INT);
|
||||
E_CONFIG_VAL(D, T, width, INT);
|
||||
E_CONFIG_LIST(D, T, boxes, conf_box_edd);
|
||||
|
@ -223,14 +215,9 @@ _itray_new()
|
|||
if (!it->conf)
|
||||
{
|
||||
it->conf = E_NEW(Config, 1);
|
||||
it->conf->follower = 1;
|
||||
it->conf->follow_speed = 0.9;
|
||||
it->conf->autoscroll_speed = 0.95;
|
||||
it->conf->rowsize = 1;
|
||||
it->conf->width = ITRAY_WIDTH_AUTO;
|
||||
}
|
||||
E_CONFIG_LIMIT(it->conf->follow_speed, 0.01, 1.0);
|
||||
E_CONFIG_LIMIT(it->conf->autoscroll_speed, 0.01, 1.0);
|
||||
E_CONFIG_LIMIT(it->conf->rowsize, 1, 6);
|
||||
E_CONFIG_LIMIT(it->conf->width, -2, -1);
|
||||
|
||||
|
@ -326,16 +313,6 @@ _itray_box_new(ITray *it, E_Container *con)
|
|||
"modules/itray/main");
|
||||
evas_object_show(o);
|
||||
|
||||
if (itb->itray->conf->follower)
|
||||
{
|
||||
o = edje_object_add(itb->evas);
|
||||
itb->overlay_object = o;
|
||||
evas_object_layer_set(o, 1);
|
||||
e_theme_edje_object_set(o, "base/theme/modules/itray",
|
||||
"modules/itray/follower");
|
||||
evas_object_show(o);
|
||||
}
|
||||
|
||||
o = evas_object_rectangle_add(itb->evas);
|
||||
itb->event_object = o;
|
||||
evas_object_layer_set(o, 2);
|
||||
|
@ -355,8 +332,6 @@ _itray_box_new(ITray *it, E_Container *con)
|
|||
edje_object_part_swallow(itb->box_object, "tray", o);
|
||||
evas_object_show(o);
|
||||
|
||||
itb->align_req = 0.5;
|
||||
itb->align = 0.5;
|
||||
e_box_align_set(itb->item_object, 0.5, 0.5);
|
||||
|
||||
evas_object_resize(itb->box_object, 1000, 1000);
|
||||
|
@ -389,12 +364,6 @@ _itray_box_new(ITray *it, E_Container *con)
|
|||
/* We need to resize, if the width is auto and the number
|
||||
* of apps has changed since last startup */
|
||||
_itray_box_frame_resize(itb);
|
||||
|
||||
/*
|
||||
edje_object_signal_emit(itb->box_object, "passive", "");
|
||||
edje_object_signal_emit(itb->overlay_object, "passive", "");
|
||||
*/
|
||||
|
||||
return itb;
|
||||
}
|
||||
|
||||
|
@ -404,10 +373,7 @@ _itray_box_free(ITray_Box *itb)
|
|||
e_object_unref(E_OBJECT(itb->con));
|
||||
e_object_del(E_OBJECT(itb->menu));
|
||||
|
||||
if (itb->timer) ecore_timer_del(itb->timer);
|
||||
if (itb->animator) ecore_animator_del(itb->animator);
|
||||
evas_object_del(itb->box_object);
|
||||
if (itb->overlay_object) evas_object_del(itb->overlay_object);
|
||||
evas_object_del(itb->item_object);
|
||||
evas_object_del(itb->event_object);
|
||||
|
||||
|
@ -462,7 +428,6 @@ _itray_box_disable(ITray_Box *itb)
|
|||
{
|
||||
itb->conf->enabled = 0;
|
||||
evas_object_hide(itb->box_object);
|
||||
if (itb->overlay_object) evas_object_hide(itb->overlay_object);
|
||||
evas_object_hide(itb->item_object);
|
||||
evas_object_hide(itb->event_object);
|
||||
e_config_save_queue();
|
||||
|
@ -563,17 +528,7 @@ _itray_box_edge_change(ITray_Box *itb, int edge)
|
|||
edje_object_signal_emit(o, "set_orientation", _itray_main_orientation[edge]);
|
||||
edje_object_message_signal_process(o);
|
||||
|
||||
if (itb->overlay_object)
|
||||
{
|
||||
o = itb->overlay_object;
|
||||
edje_object_signal_emit(o, "set_orientation", _itray_main_orientation[edge]);
|
||||
edje_object_message_signal_process(o);
|
||||
}
|
||||
|
||||
e_box_freeze(itb->item_object);
|
||||
|
||||
itb->align_req = 0.5;
|
||||
itb->align = 0.5;
|
||||
e_box_align_set(itb->item_object, 0.5, 0.5);
|
||||
|
||||
policy = E_GADMAN_POLICY_EDGES | E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE;
|
||||
|
@ -636,78 +591,6 @@ _itray_box_update_policy(ITray_Box *itb)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_itray_box_motion_handle(ITray_Box *itb, Evas_Coord mx, Evas_Coord my)
|
||||
{
|
||||
Evas_Coord x, y, w, h;
|
||||
double relx, rely;
|
||||
|
||||
evas_object_geometry_get(itb->item_object, &x, &y, &w, &h);
|
||||
if (w > 0) relx = (double)(mx - x) / (double)w;
|
||||
else relx = 0.0;
|
||||
if (h > 0) rely = (double)(my - y) / (double)h;
|
||||
else rely = 0.0;
|
||||
if ((e_gadman_client_edge_get(itb->gmc) == E_GADMAN_EDGE_BOTTOM) ||
|
||||
(e_gadman_client_edge_get(itb->gmc) == E_GADMAN_EDGE_TOP))
|
||||
{
|
||||
itb->align_req = 1.0 - relx;
|
||||
itb->follow_req = relx;
|
||||
}
|
||||
else if ((e_gadman_client_edge_get(itb->gmc) == E_GADMAN_EDGE_LEFT) ||
|
||||
(e_gadman_client_edge_get(itb->gmc) == E_GADMAN_EDGE_RIGHT))
|
||||
{
|
||||
itb->align_req = 1.0 - rely;
|
||||
itb->follow_req = rely;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_itray_box_timer_handle(ITray_Box *itb)
|
||||
{
|
||||
if (!itb->timer)
|
||||
itb->timer = ecore_timer_add(0.01, _itray_box_cb_timer, itb);
|
||||
if (!itb->animator)
|
||||
itb->animator = ecore_animator_add(_itray_box_cb_animator, itb);
|
||||
}
|
||||
|
||||
static void
|
||||
_itray_box_follower_reset(ITray_Box *itb)
|
||||
{
|
||||
Evas_Coord ww, hh, bx, by, bw, bh, d1, d2, mw, mh;
|
||||
|
||||
if (!itb->overlay_object) return;
|
||||
|
||||
evas_output_viewport_get(itb->evas, NULL, NULL, &ww, &hh);
|
||||
evas_object_geometry_get(itb->item_object, &bx, &by, &bw, &bh);
|
||||
edje_object_size_min_get(itb->overlay_object, &mw, &mh);
|
||||
if ((e_gadman_client_edge_get(itb->gmc) == E_GADMAN_EDGE_BOTTOM) ||
|
||||
(e_gadman_client_edge_get(itb->gmc) == E_GADMAN_EDGE_TOP))
|
||||
{
|
||||
d1 = bx;
|
||||
d2 = ww - (bx + bw);
|
||||
if (bw > 0)
|
||||
{
|
||||
if (d1 < d2)
|
||||
itb->follow_req = -((double)(d1 + (mw * 4)) / (double)bw);
|
||||
else
|
||||
itb->follow_req = 1.0 + ((double)(d2 + (mw * 4)) / (double)bw);
|
||||
}
|
||||
}
|
||||
else if ((e_gadman_client_edge_get(itb->gmc) == E_GADMAN_EDGE_LEFT) ||
|
||||
(e_gadman_client_edge_get(itb->gmc) == E_GADMAN_EDGE_RIGHT))
|
||||
{
|
||||
d1 = by;
|
||||
d2 = hh - (by + bh);
|
||||
if (bh > 0)
|
||||
{
|
||||
if (d1 < d2)
|
||||
itb->follow_req = -((double)(d1 + (mh * 4)) / (double)bh);
|
||||
else
|
||||
itb->follow_req = 1.0 + ((double)(d2 + (mh * 4)) / (double)bh);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_itray_box_cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
|
@ -716,10 +599,6 @@ _itray_box_cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
|
||||
ev = event_info;
|
||||
itb = data;
|
||||
if (itb->overlay_object)
|
||||
edje_object_signal_emit(itb->overlay_object, "active", "");
|
||||
_itray_box_motion_handle(itb, ev->canvas.x, ev->canvas.y);
|
||||
_itray_box_timer_handle(itb);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -730,10 +609,6 @@ _itray_box_cb_mouse_out(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
|
||||
ev = event_info;
|
||||
itb = data;
|
||||
if (itb->overlay_object)
|
||||
edje_object_signal_emit(itb->overlay_object, "passive", "");
|
||||
_itray_box_follower_reset(itb);
|
||||
_itray_box_timer_handle(itb);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -751,6 +626,10 @@ _itray_box_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info
|
|||
E_MENU_POP_DIRECTION_DOWN, ev->timestamp);
|
||||
e_util_container_fake_mouse_up_later(itb->con, 3);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* FIXME: fake mouse events onto tray windows */
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -761,6 +640,13 @@ _itray_box_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
|||
|
||||
ev = event_info;
|
||||
itb = data;
|
||||
if (ev->button == 3)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
/* FIXME: fake mouse events onto tray windows */
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -771,86 +657,7 @@ _itray_box_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info
|
|||
|
||||
ev = event_info;
|
||||
itb = data;
|
||||
_itray_box_motion_handle(itb, ev->cur.canvas.x, ev->cur.canvas.y);
|
||||
_itray_box_timer_handle(itb);
|
||||
}
|
||||
|
||||
static int
|
||||
_itray_box_cb_timer(void *data)
|
||||
{
|
||||
ITray_Box *itb;
|
||||
double dif, dif2;
|
||||
double v;
|
||||
|
||||
itb = data;
|
||||
v = itb->itray->conf->autoscroll_speed;
|
||||
itb->align = (itb->align_req * (1.0 - v)) + (itb->align * v);
|
||||
v = itb->itray->conf->follow_speed;
|
||||
itb->follow = (itb->follow_req * (1.0 - v)) + (itb->follow * v);
|
||||
|
||||
dif = itb->align - itb->align_req;
|
||||
if (dif < 0) dif = -dif;
|
||||
if (dif < 0.001) itb->align = itb->align_req;
|
||||
|
||||
dif2 = itb->follow - itb->follow_req;
|
||||
if (dif2 < 0) dif2 = -dif2;
|
||||
if (dif2 < 0.001) itb->follow = itb->follow_req;
|
||||
|
||||
if ((dif < 0.001) && (dif2 < 0.001))
|
||||
{
|
||||
itb->timer = NULL;
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
_itray_box_cb_animator(void *data)
|
||||
{
|
||||
ITray_Box *itb;
|
||||
Evas_Coord x, y, w, h, mw, mh;
|
||||
|
||||
itb = data;
|
||||
|
||||
if ((e_gadman_client_edge_get(itb->gmc) == E_GADMAN_EDGE_BOTTOM) ||
|
||||
(e_gadman_client_edge_get(itb->gmc) == E_GADMAN_EDGE_TOP))
|
||||
{
|
||||
e_box_min_size_get(itb->item_object, &mw, &mh);
|
||||
evas_object_geometry_get(itb->item_object, NULL, NULL, &w, &h);
|
||||
if (mw > w)
|
||||
e_box_align_set(itb->item_object, itb->align, 0.5);
|
||||
else
|
||||
e_box_align_set(itb->item_object, 0.5, 0.5);
|
||||
|
||||
if (itb->overlay_object)
|
||||
{
|
||||
evas_object_geometry_get(itb->item_object, &x, &y, &w, &h);
|
||||
edje_object_size_min_get(itb->overlay_object, &mw, &mh);
|
||||
evas_object_resize(itb->overlay_object, mw, h);
|
||||
evas_object_move(itb->overlay_object, x + (w * itb->follow) - (mw / 2), y);
|
||||
}
|
||||
}
|
||||
else if ((e_gadman_client_edge_get(itb->gmc) == E_GADMAN_EDGE_LEFT) ||
|
||||
(e_gadman_client_edge_get(itb->gmc) == E_GADMAN_EDGE_RIGHT))
|
||||
{
|
||||
e_box_min_size_get(itb->item_object, &mw, &mh);
|
||||
evas_object_geometry_get(itb->item_object, NULL, NULL, &w, &h);
|
||||
if (mh > h)
|
||||
e_box_align_set(itb->item_object, 0.5, itb->align);
|
||||
else
|
||||
e_box_align_set(itb->item_object, 0.5, 0.5);
|
||||
|
||||
if (itb->overlay_object)
|
||||
{
|
||||
evas_object_geometry_get(itb->item_object, &x, &y, &w, &h);
|
||||
edje_object_size_min_get(itb->overlay_object, &mw, &mh);
|
||||
evas_object_resize(itb->overlay_object, w, mh);
|
||||
evas_object_move(itb->overlay_object, x, y + (h * itb->follow) - (mh / 2));
|
||||
}
|
||||
}
|
||||
if (itb->timer) return 1;
|
||||
itb->animator = NULL;
|
||||
return 0;
|
||||
/* FIXME: fake mouse events onto tray windows */
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -869,10 +676,6 @@ _itray_box_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change chang
|
|||
|
||||
evas_object_move(itb->box_object, itb->x, itb->y);
|
||||
evas_object_resize(itb->box_object, itb->w, itb->h);
|
||||
|
||||
_itray_box_follower_reset(itb);
|
||||
_itray_box_timer_handle(itb);
|
||||
|
||||
break;
|
||||
case E_GADMAN_CHANGE_EDGE:
|
||||
_itray_box_edge_change(itb, e_gadman_client_edge_get(itb->gmc));
|
||||
|
@ -909,51 +712,10 @@ _itray_box_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
e_gadman_mode_set(itb->gmc->gadman, E_GADMAN_MODE_EDIT);
|
||||
}
|
||||
|
||||
static void
|
||||
_itray_box_cb_follower(void *data)
|
||||
{
|
||||
ITray *it;
|
||||
ITray_Box *itb;
|
||||
unsigned char enabled;
|
||||
Evas_List *l;
|
||||
|
||||
it = (ITray *)data;
|
||||
enabled = it->conf->follower;
|
||||
if (enabled)
|
||||
{
|
||||
for (l = it->boxes; l; l = l->next)
|
||||
{
|
||||
Evas_Object *o;
|
||||
|
||||
itb = l->data;
|
||||
if (itb->overlay_object) continue;
|
||||
o = edje_object_add(itb->evas);
|
||||
itb->overlay_object = o;
|
||||
evas_object_layer_set(o, 1);
|
||||
e_theme_edje_object_set(o, "base/theme/modules/itray",
|
||||
"modules/itray/follower");
|
||||
edje_object_signal_emit(o, "set_orientation", _itray_main_orientation[e_gadman_client_edge_get(itb->gmc)]);
|
||||
edje_object_message_signal_process(o);
|
||||
evas_object_show(o);
|
||||
}
|
||||
}
|
||||
else if (!enabled)
|
||||
{
|
||||
for (l = it->boxes; l; l = l->next)
|
||||
{
|
||||
itb = l->data;
|
||||
if (!itb->overlay_object) continue;
|
||||
evas_object_del(itb->overlay_object);
|
||||
itb->overlay_object = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_itray_box_cb_config_updated(void *data)
|
||||
{
|
||||
/* Call Any Needed Funcs To Let Module Handle Config Changes */
|
||||
_itray_box_cb_follower(data);
|
||||
_itray_box_cb_width_auto(data);
|
||||
}
|
||||
|
||||
|
@ -961,6 +723,8 @@ void
|
|||
_itray_tray_init(ITray_Box *itb)
|
||||
{
|
||||
Evas_Coord x, y, w, h;
|
||||
Ecore_X_Window *windows;
|
||||
int wnum;
|
||||
|
||||
/* FIXME - temp */
|
||||
itb->tray = malloc(sizeof(ITray_Tray));
|
||||
|
@ -983,6 +747,55 @@ _itray_tray_init(ITray_Box *itb)
|
|||
|
||||
itb->tray->msg_handler = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, _itray_tray_cb_msg, itb);
|
||||
itb->tray->dst_handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_DESTROY, _itray_tray_cb_msg, itb);
|
||||
|
||||
windows = ecore_x_window_children_get(itb->con->manager->root, &wnum);
|
||||
if (windows)
|
||||
{
|
||||
int i;
|
||||
Ecore_X_Atom atom_xmbed, atom_kde_netwm_systray, atom_kwm_dockwindow,
|
||||
atom_window;
|
||||
|
||||
atom_window = ecore_x_atom_get("WINDOW");
|
||||
atom_xmbed = ecore_x_atom_get("_XEMBED_INFO");
|
||||
atom_kde_netwm_systray = ecore_x_atom_get("_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR");
|
||||
atom_kwm_dockwindow = ecore_x_atom_get("KWM_DOCKWINDOW");
|
||||
for (i = 0; i < wnum; i++)
|
||||
{
|
||||
Ecore_X_Window_Attributes att;
|
||||
unsigned char *data = NULL;
|
||||
int count;
|
||||
|
||||
ecore_x_window_attributes_get(windows[i], &att);
|
||||
if (!ecore_x_window_prop_property_get(windows[i],
|
||||
atom_xmbed,
|
||||
atom_xmbed, 32,
|
||||
&data, &count))
|
||||
data = NULL;
|
||||
if (!data)
|
||||
{
|
||||
if (!ecore_x_window_prop_property_get(windows[i],
|
||||
atom_kde_netwm_systray,
|
||||
atom_xmbed, 32,
|
||||
&data, &count))
|
||||
data = NULL;
|
||||
}
|
||||
if (!data)
|
||||
{
|
||||
if (!ecore_x_window_prop_property_get(windows[i],
|
||||
atom_kwm_dockwindow,
|
||||
atom_kwm_dockwindow, 32,
|
||||
&data, &count))
|
||||
data = NULL;
|
||||
}
|
||||
if (data)
|
||||
{
|
||||
_itray_tray_add(itb, windows[i]);
|
||||
free(data);
|
||||
data = NULL;
|
||||
}
|
||||
}
|
||||
free(windows);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -990,9 +803,16 @@ _itray_tray_shutdown(ITray_Box *itb)
|
|||
{
|
||||
_itray_tray_active_set(itb, 0);
|
||||
|
||||
evas_list_free(itb->tray->wins);
|
||||
while (itb->tray->wins)
|
||||
{
|
||||
Ecore_X_Window win;
|
||||
|
||||
win = (Ecore_X_Window)(itb->tray->wins->data);
|
||||
ecore_x_window_reparent(win, itb->con->manager->root, 0, 0);
|
||||
itb->tray->wins = evas_list_remove_list(itb->tray->wins, itb->tray->wins);
|
||||
}
|
||||
evas_object_del(itb->item_object);
|
||||
|
||||
|
||||
ecore_event_handler_del(itb->tray->msg_handler);
|
||||
ecore_event_handler_del(itb->tray->dst_handler);
|
||||
ecore_x_window_del(itb->tray->win);
|
||||
|
@ -1016,14 +836,14 @@ _itray_tray_active_set(ITray_Box *itb, int active)
|
|||
|
||||
snprintf(buf, sizeof(buf), "_NET_SYSTEM_TRAY_S%d", DefaultScreen(display));
|
||||
selection_atom = ecore_x_atom_get(buf);
|
||||
XSetSelectionOwner (display, selection_atom, win, CurrentTime);
|
||||
XSetSelectionOwner(display, selection_atom, win, CurrentTime);
|
||||
|
||||
if (active &&
|
||||
XGetSelectionOwner (display, selection_atom) == itb->con->bg_win)
|
||||
if ((active) &&
|
||||
(XGetSelectionOwner(display, selection_atom) == itb->con->bg_win))
|
||||
{
|
||||
ecore_x_client_message32_send(root, ecore_x_atom_get("MANAGER"),
|
||||
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
|
||||
CurrentTime, selection_atom, win, 0, 0);
|
||||
ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
|
||||
CurrentTime, selection_atom, win, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1112,6 +932,7 @@ _itray_tray_add(ITray_Box *itb, Ecore_X_Window win)
|
|||
|
||||
ecore_x_window_save_set_add(win);
|
||||
ecore_x_window_reparent(win, itb->tray->win, 0, 0);
|
||||
ecore_x_window_raise(itb->con->event_win);
|
||||
_itray_tray_layout(itb);
|
||||
_itray_box_frame_resize(itb);
|
||||
|
||||
|
|
|
@ -15,9 +15,6 @@ typedef struct _ITray_Tray ITray_Tray;
|
|||
|
||||
struct _Config
|
||||
{
|
||||
double follow_speed;
|
||||
int follower;
|
||||
double autoscroll_speed;
|
||||
int rowsize;
|
||||
int width;
|
||||
Evas_List *boxes;
|
||||
|
@ -40,24 +37,18 @@ struct _ITray
|
|||
|
||||
struct _ITray_Box
|
||||
{
|
||||
ITray *itray;
|
||||
ITray *itray;
|
||||
E_Container *con;
|
||||
Evas *evas;
|
||||
E_Menu *menu;
|
||||
|
||||
Evas_Object *box_object;
|
||||
Evas_Object *overlay_object;
|
||||
Evas_Object *item_object;
|
||||
Evas_Object *event_object;
|
||||
|
||||
double align, align_req;
|
||||
double follow, follow_req;
|
||||
Ecore_Timer *timer;
|
||||
Ecore_Animator *animator;
|
||||
|
||||
Evas_Coord x, y, w, h;
|
||||
struct {
|
||||
Evas_Coord l, r, t, b;
|
||||
Evas_Coord l, r, t, b;
|
||||
} box_inset;
|
||||
|
||||
E_Gadman_Client *gmc;
|
||||
|
|
Loading…
Reference in New Issue