{
[E_DESK_HOOK_DESK_GROUP_ENABLE] = NULL,
[E_DESK_HOOK_DESK_GROUP_DISABLE] = NULL,
+ [E_DESK_HOOK_DESK_GROUP_ACTIVE_CHANGE] = NULL,
};
static void _e_desk_free(E_Desk *desk);
return desk->desk_group.base;
}
+EINTERN void
+e_desk_desk_group_active_set(E_Desk *desk, E_Desk_Group *edg)
+{
+ E_OBJECT_CHECK(desk);
+ E_OBJECT_TYPE_CHECK(desk, E_DESK_TYPE);
+
+ if (!e_config->use_desk_group) return;
+ if (desk->desk_group.active == edg) return;
+
+ desk->desk_group.active = edg;
+
+ _e_desk_hook_call(E_DESK_HOOK_DESK_GROUP_ACTIVE_CHANGE, desk);
+}
+
E_API E_Desk_Group *
e_desk_desk_group_active_get(E_Desk *desk)
{
{
E_DESK_HOOK_DESK_GROUP_ENABLE,
E_DESK_HOOK_DESK_GROUP_DISABLE,
+ E_DESK_HOOK_DESK_GROUP_ACTIVE_CHANGE,
E_DESK_HOOK_LAST
} E_Desk_Hook_Point;
E_API void e_desk_desk_group_del(E_Desk *desk, E_Desk_Group *edg);
E_API E_Desk_Group *e_desk_desk_group_get_by_id(E_Desk *desk, int id);
E_API E_Desk_Group *e_desk_desk_group_base_get(E_Desk *desk);
+EINTERN void e_desk_desk_group_active_set(E_Desk *desk, E_Desk_Group *edg);
E_API E_Desk_Group *e_desk_desk_group_active_get(E_Desk *desk);
E_API Eina_Bool e_desk_desk_group_enable(E_Desk *desk);
E_API Eina_Bool e_desk_desk_group_disable(E_Desk *desk);
edg->scale_h = (double)h / (double)desk->geom.h;
}
+static void
+_e_desk_group_active_change(E_Desk_Group *edg, E_Desk *desk)
+{
+ E_Desk_Group *prev_active_edg;
+
+ if (!desk) return;
+
+ prev_active_edg = e_desk_desk_group_active_get(desk);
+ if (prev_active_edg == edg) return;
+
+ // 1. reset current active edg info
+ if (prev_active_edg)
+ prev_active_edg->active = EINA_FALSE;
+
+ // 2. set new active edg info
+ if (edg)
+ {
+ edg->active = EINA_TRUE;
+ e_desk_desk_group_active_set(desk, edg);
+ }
+ else
+ {
+ e_desk_desk_group_active_set(desk, NULL);
+ }
+}
+
EINTERN int
e_desk_group_init(void)
{
eina_list_free(edg->ec_lists[i]);
}
+ if (edg->active)
+ _e_desk_group_active_change(NULL, edg->desk);
+
E_FREE(edg);
}
e_desk_group_activate(E_Desk_Group *edg)
{
if (!edg) return;
+ if (!edg->desk) return;
+
+ e_desk_group_raise(edg);
+ _e_desk_group_active_change(edg, edg->desk);
}
E_API Eina_Bool
e_desk_group_is_activate(E_Desk_Group *edg)
{
if (!edg) return EINA_FALSE;
-
- return EINA_TRUE;
+ return edg->active;
}
E_API void
unsigned char enable : 1;
unsigned char visible : 1;
+ unsigned char active : 1;
Eina_List *ec_lists[E_DESK_GROUP_CLIENT_LAYER_MAX];
Eina_List *handlers;