More bugfixes/updates:
- Add subsystem init/shutdown functions for e_desk and e_zone - Fix bug in desk remove function - Prevent duplicate desktop names being automatically generated - When uniconifying, set window desktop to current - Don't display iconified windows when desktop switching - Selecting a window in the window list switches to that window's desktop SVN revision: 12779
This commit is contained in:
parent
5cbe105940
commit
38899921b8
|
@ -243,6 +243,17 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map)
|
|||
return bd;
|
||||
}
|
||||
|
||||
void
|
||||
e_border_desk_set(E_Border *bd, E_Desk *desk)
|
||||
{
|
||||
E_OBJECT_CHECK(bd);
|
||||
E_OBJECT_CHECK(desk);
|
||||
if (bd->desk == desk) return;
|
||||
bd->desk->clients = evas_list_remove(bd->desk->clients, bd);
|
||||
desk->clients = evas_list_append(desk->clients, bd);
|
||||
bd->desk = desk;
|
||||
}
|
||||
|
||||
void
|
||||
e_border_show(E_Border *bd)
|
||||
{
|
||||
|
@ -610,10 +621,15 @@ e_border_iconify(E_Border *bd)
|
|||
void
|
||||
e_border_uniconify(E_Border *bd)
|
||||
{
|
||||
E_Desk *desk;
|
||||
|
||||
E_OBJECT_CHECK(bd);
|
||||
if ((bd->shading)) return;
|
||||
if (bd->iconic)
|
||||
{
|
||||
desk = e_desk_current_get(bd->desk->zone);
|
||||
if (desk != bd->desk)
|
||||
e_border_desk_set(bd, desk);
|
||||
bd->iconic = 0;
|
||||
e_border_show(bd);
|
||||
e_iconify_border_remove(bd);
|
||||
|
|
|
@ -189,6 +189,7 @@ EAPI E_Border *e_border_new(E_Container *con, Ecore_X_Window win, int first_map)
|
|||
EAPI void e_border_free(E_Border *bd);
|
||||
EAPI void e_border_ref(E_Border *bd);
|
||||
EAPI void e_border_unref(E_Border *bd);
|
||||
EAPI void e_border_desk_set(E_Border *bd, E_Desk *desk);
|
||||
EAPI void e_border_show(E_Border *bd);
|
||||
EAPI void e_border_hide(E_Border *bd);
|
||||
EAPI void e_border_move(E_Border *bd, int x, int y);
|
||||
|
|
|
@ -20,12 +20,14 @@ static void _e_container_resize_handle(E_Container *con);
|
|||
static void _e_container_event_container_resize_free(void *data, void *ev);
|
||||
|
||||
int E_EVENT_CONTAINER_RESIZE = 0;
|
||||
static int container_count;
|
||||
|
||||
/* externally accessible functions */
|
||||
int
|
||||
e_container_init(void)
|
||||
{
|
||||
E_EVENT_CONTAINER_RESIZE = ecore_event_type_new();
|
||||
container_count = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,20 @@
|
|||
*/
|
||||
|
||||
static void _e_desk_free(E_Desk *desk);
|
||||
static int desk_count;
|
||||
|
||||
int
|
||||
e_desk_init(void)
|
||||
{
|
||||
desk_count = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
e_desk_shutdown(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
E_Desk *
|
||||
e_desk_new(E_Zone *zone)
|
||||
|
@ -23,7 +37,7 @@ e_desk_new(E_Zone *zone)
|
|||
|
||||
desk->clients = NULL;
|
||||
desk->zone = zone;
|
||||
desk->num = evas_list_count(zone->desks) + 1;
|
||||
desk->num = ++desk_count;
|
||||
snprintf(name, sizeof(name), "Desktop %d", desk->num);
|
||||
desk->name = strdup(name);
|
||||
e_object_ref(E_OBJECT(zone));
|
||||
|
@ -53,7 +67,7 @@ e_desk_show(E_Desk *desk)
|
|||
{
|
||||
E_Border *bd = l->data;
|
||||
|
||||
if (bd->desk->zone == desk->zone)
|
||||
if (bd->desk->zone == desk->zone && !bd->iconic)
|
||||
{
|
||||
if (bd->desk == desk)
|
||||
{
|
||||
|
@ -83,7 +97,7 @@ e_desk_remove(E_Desk *desk)
|
|||
E_OBJECT_CHECK(desk);
|
||||
if (evas_list_count(desk->zone->desks) < 2)
|
||||
return;
|
||||
l = evas_list_find(desk->zone->desks, desk);
|
||||
l = evas_list_find_list(desk->zone->desks, desk);
|
||||
l = l->prev;
|
||||
if (!l) l = evas_list_last(desk->zone->desks);
|
||||
previous = l->data;
|
||||
|
@ -91,10 +105,11 @@ e_desk_remove(E_Desk *desk)
|
|||
for (l = desk->clients; l; l = l->next)
|
||||
{
|
||||
E_Border *bd = l->data;
|
||||
bd->desk = previous;
|
||||
e_border_desk_set(bd, previous);
|
||||
}
|
||||
desk->zone->desks = evas_list_remove(desk->zone->desks, desk);
|
||||
e_desk_show(previous);
|
||||
if (desk->visible)
|
||||
e_desk_show(previous);
|
||||
|
||||
evas_list_free(desk->clients);
|
||||
e_object_del(E_OBJECT(desk));
|
||||
|
|
|
@ -17,6 +17,8 @@ struct _E_Desk
|
|||
Evas_List *clients;
|
||||
};
|
||||
|
||||
EAPI int e_desk_init(void);
|
||||
EAPI int e_desk_shutdown(void);
|
||||
EAPI E_Desk *e_desk_new(E_Zone *zone);
|
||||
EAPI void e_desk_name_set(E_Desk *desk, const char *name);
|
||||
EAPI void e_desk_show(E_Desk *desk);
|
||||
|
|
|
@ -353,6 +353,7 @@ _e_int_menus_desktops_add_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
E_Desk *desk;
|
||||
E_Zone *zone = e_zone_current_get(root->con);
|
||||
desk = e_desk_new(zone);
|
||||
e_desk_show(desk);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -368,7 +369,15 @@ _e_int_menus_desktops_del_cb(void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
|
||||
zone = e_zone_current_get(root->con);
|
||||
desk = e_desk_current_get(zone);
|
||||
e_desk_remove(desk);
|
||||
|
||||
if (evas_list_count(zone->desks) > 1)
|
||||
{
|
||||
e_desk_remove(desk);
|
||||
}
|
||||
else
|
||||
{
|
||||
e_error_dialog_show("Enlightenment", "You cannot remove the last desktop.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -441,6 +450,7 @@ _e_int_menus_clients_item_cb (void *data, E_Menu *m, E_Menu_Item *mi)
|
|||
|
||||
if (bd->iconic) e_border_uniconify(bd);
|
||||
|
||||
e_desk_show(bd->desk);
|
||||
e_border_raise(bd);
|
||||
e_border_focus_set(bd, 1, 1);
|
||||
}
|
||||
|
|
|
@ -493,6 +493,8 @@ _e_main_screens_init(void)
|
|||
|
||||
if (!e_manager_init()) return 0;
|
||||
if (!e_container_init()) return 0;
|
||||
if (!e_zone_init()) return 0;
|
||||
if (!e_desk_init()) return 0;
|
||||
|
||||
num = 0;
|
||||
roots = ecore_x_window_root_list(&num);
|
||||
|
@ -560,6 +562,8 @@ _e_main_screens_init(void)
|
|||
static int
|
||||
_e_main_screens_shutdown(void)
|
||||
{
|
||||
e_desk_shutdown();
|
||||
e_zone_shutdown();
|
||||
e_container_shutdown();
|
||||
e_manager_shutdown();
|
||||
return 1;
|
||||
|
|
|
@ -12,6 +12,21 @@ static void _e_zone_cb_bg_mouse_down(void *data, Evas *evas, Evas_Object *obj, v
|
|||
static void _e_zone_cb_bg_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info);
|
||||
static void _e_zone_cb_bg_mouse_move(void *data, Evas *evas, Evas_Object *obj, void *event_info);
|
||||
|
||||
static int zone_count;
|
||||
|
||||
int
|
||||
e_zone_init(void)
|
||||
{
|
||||
zone_count = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
e_zone_shutdown(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
E_Zone *
|
||||
e_zone_new(E_Container *con, int x, int y, int w, int h)
|
||||
{
|
||||
|
@ -21,8 +36,6 @@ e_zone_new(E_Container *con, int x, int y, int w, int h)
|
|||
zone = E_OBJECT_ALLOC(E_Zone, _e_zone_free);
|
||||
if (!zone) return NULL;
|
||||
|
||||
printf("NEW ZONE! %d %d %d %d\n", x, y, w, h);
|
||||
|
||||
zone->container = con;
|
||||
zone->name = NULL;
|
||||
|
||||
|
@ -30,7 +43,7 @@ e_zone_new(E_Container *con, int x, int y, int w, int h)
|
|||
zone->y = y;
|
||||
zone->w = w;
|
||||
zone->h = h;
|
||||
zone->num = evas_list_count(con->zones) + 1;
|
||||
zone->num = ++zone_count;
|
||||
|
||||
e_object_ref(E_OBJECT(con));
|
||||
con->zones = evas_list_append(con->zones, zone);
|
||||
|
|
|
@ -20,6 +20,8 @@ struct _E_Zone
|
|||
|
||||
};
|
||||
|
||||
EAPI int e_zone_init(void);
|
||||
EAPI int e_zone_shutdown(void);
|
||||
EAPI E_Zone *e_zone_new(E_Container *con, int x, int y, int w, int h);
|
||||
EAPI void e_zone_move(E_Zone *zone, int x, int y);
|
||||
EAPI void e_zone_resize(E_Zone *zone, int w, int h);
|
||||
|
|
Loading…
Reference in New Issue