now this is better for the deskname popup :)

SVN revision: 16618
This commit is contained in:
Carsten Haitzler 2005-09-06 07:29:47 +00:00
parent 3aa5585ab6
commit bcb03f5992
3 changed files with 279 additions and 83 deletions

View File

@ -1,14 +1,179 @@
images {
image: "e17_menu_bg.png" COMP;
image: "e17_ibar_bg_h.png" COMP;
image: "e17_ibar_over_h.png" COMP;
image: "e17_menu_bg.png" COMP;
image: "e17_menu_bg_border.png" COMP;
image: "e17_pager_desk.png" COMP;
image: "e17_pager_desk_sel.png" COMP;
image: "e17_pager_window.png" COMP;
}
group {
name: "modules/pager/main";
data {
item: "shaped" "1";
name: "widgets/pager/popup";
parts {
part {
name: "base";
mouse_events: 0;
type: RECT;
description {
state: "default" 0.0;
rel1 {
relative: 0.0 1.0;
offset: 1 0;
to_y: "base2";
}
rel2 {
relative: 1.0 1.0;
offset: -2 -2;
}
color: 221 221 221 255;
}
}
part {
name: "base2";
mouse_events: 0;
description {
state: "default" 0.0;
max: 99999 48;
align: 0.5 0.0;
rel1 {
relative: 0.0 0.0;
offset: 1 1;
}
rel2 {
relative: 1.0 1.0;
offset: -2 -2;
}
image {
normal: "e17_menu_bg.png";
}
fill {
smooth: 0;
}
}
}
part {
name: "base3";
mouse_events: 0;
description {
state: "default" 0.0;
rel1 {
relative: 0.0 0.0;
offset: 0 0;
}
rel2 {
relative: 1.0 1.0;
offset: -1 -1;
}
image {
normal: "e17_menu_bg_border.png";
border: 1 1 1 1;
middle: 0;
}
fill {
smooth: 0;
}
}
}
part {
name: "title_bg";
description {
state: "default" 0.0;
rel1 {
to: "title_overlay";
}
rel2 {
to: "title_overlay";
}
image {
normal: "e17_ibar_bg_h.png";
border: 6 6 6 6;
}
fill {
smooth: 0;
}
}
}
part {
name: "text";
type: TEXT;
effect: SOFT_SHADOW;
mouse_events: 0;
description {
state: "default" 0.0;
align: 0.5 0.0;
rel1 {
relative: 0.0 0.0;
offset: 26 24;
}
rel2 {
relative: 1.0 0.0;
offset: -26 24;
}
color: 0 0 0 255;
color3: 0 0 0 22;
text {
text: "Title goes here";
font: "Edje Vera Bold";
size: 12;
min: 1 1;
align: 0.5 0.5;
}
}
}
part {
name: "title_overlay";
mouse_events: 0;
description {
state: "default" 0.0;
align: 0.5 1.0;
rel1 {
relative: 0.0 0.0;
offset: 16 -7;
to_y: "text";
}
rel2 {
relative: 1.0 1.0;
offset: -17 6;
to_y: "text";
}
image {
normal: "e17_ibar_over_h.png";
border: 13 13 13 13;
middle: 0;
}
fill {
smooth: 0;
}
}
}
part {
name: "pager";
mouse_events: 0;
type: SWALLOW;
description {
state: "default" 0.0;
rel1 {
to_y: "title_overlay";
relative: 0.0 1.0;
offset: 16 6;
}
rel2 {
relative: 1.0 1.0;
offset: -17 -17;
}
color: 0 0 0 0;
}
}
}
}
group {
name: "modules/pager/main";
// data {
// item: "shaped" "1";
// }
parts {
part {
name: "background";
@ -31,57 +196,57 @@ group {
}
}
part {
name: "desktop_name";
type: TEXT;
effect: SOFT_SHADOW;
description {
state: "default" 0.0;
visible: 0;
color: 0 0 0 180;
color3: 0 0 0 15;
text {
text: "Desktop Name";
font: "Vera";
size: 8;
min: 1 1;
align: 0.5 0.5;
}
part {
name: "desktop_name";
type: TEXT;
effect: SOFT_SHADOW;
description {
state: "default" 0.0;
visible: 0;
color: 0 0 0 180;
color3: 0 0 0 15;
text {
text: "Desktop Name";
font: "Vera";
size: 8;
min: 1 1;
align: 0.5 0.5;
}
}
description {
state: "name_top" 0.0;
inherit: "default" 0.0;
visible: 1;
rel1 {
to_x: "items";
to_y: "background";
relative: 0 0;
offset: 0 8;
}
rel2 {
to: "items";
relative: 1 0;
offset: -1 -1;
}
}
description {
state: "name_bottom" 0.0;
inherit: "default" 0.0;
visible: 1;
rel1 {
to: "items";
relative: 0 1;
offset: 0 2;
}
rel2 {
to_x: "items";
to_y: "background";
offset: -1 -4;
}
}
}
description {
state: "name_top" 0.0;
inherit: "default" 0.0;
visible: 1;
rel1 {
to_x: "items";
to_y: "background";
relative: 0 0;
offset: 0 8;
}
rel2 {
to: "items";
relative: 1 0;
offset: -1 -1;
}
}
description {
state: "name_bottom" 0.0;
inherit: "default" 0.0;
visible: 1;
rel1 {
to: "items";
relative: 0 1;
offset: 0 2;
}
rel2 {
to_x: "items";
to_y: "background";
offset: -1 -4;
}
}
}
part {
name: "items";
mouse_events: 0;

View File

@ -34,6 +34,7 @@ static Pager_Win *_pager_face_border_find(Pager_Face *face, E_Border *border);
static Pager_Win *_pager_desk_border_find(Pager_Desk *pd, E_Border *border);
static Pager_Desk *_pager_face_desk_find(Pager_Face *face, E_Desk *desk);
static void _pager_face_desk_select(Pager_Desk *pd);
static void _pager_popup_free(Pager_Popup *pp);
static void _pager_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change);
static int _pager_face_cb_event_border_resize(void *data, int type, void *event);
@ -195,17 +196,21 @@ _pager_new(void)
#define D _conf_edd
E_CONFIG_LIST(D, T, faces, _conf_face_edd);
E_CONFIG_VAL(D, T, deskname_pos, UINT);
E_CONFIG_VAL(D, T, speed, UINT);
E_CONFIG_VAL(D, T, popup_speed, DOUBLE);
E_CONFIG_VAL(D, T, popup, UINT);
pager->conf = e_config_domain_load("module.pager", _conf_edd);
if (!pager->conf)
{
pager->conf = E_NEW(Config, 1);
pager->conf->deskname_pos = PAGER_DESKNAME_NONE;
pager->conf->speed = 12;
pager->conf->popup_speed = 1.0;
pager->conf->popup = 1;
}
E_CONFIG_LIMIT(pager->conf->deskname_pos, PAGER_DESKNAME_NONE, PAGER_DESKNAME_RIGHT);
E_CONFIG_LIMIT(pager->conf->popup_speed, 0.1, 10.0);
E_CONFIG_LIMIT(pager->conf->popup, 0, 1);
_pager_config_menu_new(pager);
@ -356,35 +361,35 @@ _pager_config_menu_new(Pager *pager)
e_menu_item_label_set(mi, _("Very Slow"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
if (pager->conf->speed == 60) e_menu_item_toggle_set(mi, 1);
if (pager->conf->popup_speed == 6.0) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _pager_menu_cb_speed_very_slow, pager);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Slow"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
if (pager->conf->speed == 40) e_menu_item_toggle_set(mi, 1);
if (pager->conf->popup_speed == 4.0) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _pager_menu_cb_speed_slow, pager);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Normal"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
if (pager->conf->speed == 12) e_menu_item_toggle_set(mi, 1);
if (pager->conf->popup_speed == 2.0) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _pager_menu_cb_speed_normal, pager);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Fast"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
if (pager->conf->speed == 7) e_menu_item_toggle_set(mi, 1);
if (pager->conf->popup_speed == 1.0) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _pager_menu_cb_speed_fast, pager);
mi = e_menu_item_new(mn);
e_menu_item_label_set(mi, _("Very Fast"));
e_menu_item_radio_set(mi, 1);
e_menu_item_radio_group_set(mi, 1);
if (pager->conf->speed == 3) e_menu_item_toggle_set(mi, 1);
if (pager->conf->popup_speed == 0.5) e_menu_item_toggle_set(mi, 1);
e_menu_item_callback_set(mi, _pager_menu_cb_speed_very_fast, pager);
/* Submenus */
@ -901,6 +906,18 @@ _pager_face_desk_select(Pager_Desk *pd)
edje_object_part_text_set(pd->face->pager_object, "desktop_name", pd->desk->name);
}
static void
_pager_popup_free(Pager_Popup *pp)
{
pp->src_face->current_popup = NULL;
if (pp->timer) ecore_timer_del(pp->timer);
pp->face->pager->faces = evas_list_remove(pp->face->pager->faces, pp->face);
evas_object_del(pp->bg_object);
_pager_face_free(pp->face);
e_object_del(E_OBJECT(pp->popup));
free(pp);
}
static void
_pager_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change)
{
@ -1407,12 +1424,15 @@ _pager_face_cb_event_desk_show(void *data, int type, void *event)
{
Pager_Popup *pp;
Evas_Coord w, h;
char buf[1024];
_pager_face_desk_select(desk);
if (!face->pager->conf->popup) return 1;
pp = face->current_popup;
face->current_popup = NULL;
if (pp) _pager_popup_free(pp);
pp = E_NEW(Pager_Popup, 1);
if (!pp) return 1;
@ -1424,28 +1444,40 @@ _pager_face_cb_event_desk_show(void *data, int type, void *event)
return 1;
}
e_popup_layer_set(pp->popup, 999);
/* FIXME, this doesn't resize nicely when the name is shown! */
pp->src_face = face;
face->current_popup = pp;
evas_object_geometry_get(face->pager_object, NULL, NULL, &w, &h);
w *= 3;
h *= 3;
pp->face = _pager_face_new(face->pager, face->zone, pp->popup->evas);
evas_object_move(pp->face->pager_object, 0, 0);
evas_object_resize(pp->face->pager_object, w, h);
snprintf(buf, sizeof(buf), desk->desk->name);
edje_object_part_text_set(pp->face->pager_object, "desktop_name", buf);
edje_object_signal_emit(pp->face->pager_object, "desktop_name,top", "");
// edje_object_signal_emit(pp->face->pager_object, "desktop_name,top", "");
e_popup_edje_bg_object_set(pp->popup, pp->face->pager_object);
pp->bg_object = edje_object_add(pp->face->evas);
e_theme_edje_object_set(pp->bg_object, "base/theme/modules/pager",
"widgets/pager/popup");
edje_object_part_text_set(pp->bg_object, "text", desk->desk->name);
evas_object_show(pp->bg_object);
edje_extern_object_min_size_set(pp->face->pager_object, w, h);
edje_object_part_swallow(pp->bg_object, "pager", pp->face->pager_object);
edje_object_calc_force(pp->face->pager_object);
edje_object_size_min_calc(pp->bg_object, &w, &h);
evas_object_move(pp->bg_object, 0, 0);
evas_object_resize(pp->bg_object, w, h);
e_popup_edje_bg_object_set(pp->popup, pp->bg_object);
// e_popup_edje_bg_object_set(pp->popup, pp->face->pager_object);
e_popup_move_resize(pp->popup,
pp->popup->zone->x + ((pp->popup->zone->w - w) / 2),
pp->popup->zone->y + ((pp->popup->zone->h - h) / 2),
w, h);
e_popup_show(pp->popup);
ecore_timer_add(face->pager->conf->speed / 10.0, _pager_popup_cb_timeout, pp);
pp->timer = ecore_timer_add(face->pager->conf->popup_speed,
_pager_popup_cb_timeout, pp);
}
return 1;
@ -1457,12 +1489,7 @@ _pager_popup_cb_timeout(void *data)
Pager_Popup *pp;
pp = data;
pp->face->pager->faces = evas_list_remove(pp->face->pager->faces, pp->face);
_pager_face_free(pp->face);
e_object_del(E_OBJECT(pp->popup));
free(pp);
_pager_popup_free(pp);
return 0;
}
static int
@ -1883,7 +1910,7 @@ _pager_menu_cb_speed_very_slow(void *data, E_Menu *m, E_Menu_Item *mi)
{
Pager *pager;
pager = data;
pager->conf->speed = 60;
pager->conf->popup_speed = 6.0;
e_config_save_queue();
}
@ -1892,7 +1919,7 @@ _pager_menu_cb_speed_slow(void *data, E_Menu *m, E_Menu_Item *mi)
{
Pager *pager;
pager = data;
pager->conf->speed = 40;
pager->conf->popup_speed = 4.0;
e_config_save_queue();
}
@ -1901,7 +1928,7 @@ _pager_menu_cb_speed_normal(void *data, E_Menu *m, E_Menu_Item *mi)
{
Pager *pager;
pager = data;
pager->conf->speed = 12;
pager->conf->popup_speed = 2.0;
e_config_save_queue();
}
@ -1910,7 +1937,7 @@ _pager_menu_cb_speed_fast(void *data, E_Menu *m, E_Menu_Item *mi)
{
Pager *pager;
pager = data;
pager->conf->speed = 7;
pager->conf->popup_speed = 1.0;
e_config_save_queue();
}
@ -1919,7 +1946,7 @@ _pager_menu_cb_speed_very_fast(void *data, E_Menu *m, E_Menu_Item *mi)
{
Pager *pager;
pager = data;
pager->conf->speed = 3;
pager->conf->popup_speed = 0.5;
e_config_save_queue();
}

View File

@ -29,7 +29,7 @@ struct _Config
/* Position of desktop name */
unsigned int deskname_pos;
/* How the popup is shown on desk change */
unsigned int speed;
double popup_speed;
/* Show popup? */
unsigned int popup;
};
@ -96,6 +96,8 @@ struct _Pager_Face
Ecore_Event_Handler *ev_handler_container_resize;
E_Drop_Handler *drop_handler;
Pager_Popup *current_popup;
};
struct _Pager_Desk
@ -125,7 +127,9 @@ struct _Pager_Win
struct _Pager_Popup
{
E_Popup *popup;
Pager_Face *face;
Pager_Face *src_face, *face;
Evas_Object *bg_object;
Ecore_Timer *timer;
};
EAPI void *e_modapi_init (E_Module *module);