diff --git a/src/bin/e_border.c b/src/bin/e_border.c index 293a18a5b..198775127 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -159,13 +159,6 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map) e_object_del_func_set(E_OBJECT(bd), E_OBJECT_CLEANUP_FUNC(_e_border_del)); printf("##- NEW CLIENT 0x%x\n", win); - bd->container = con; - bd->zone = e_zone_current_get(con); - bd->zone->clients = evas_list_append(bd->zone->clients, bd); - - bd->desk = e_desk_current_get(bd->zone); - bd->desk->clients = evas_list_append(bd->desk->clients, bd); - bd->w = 1; bd->h = 1; bd->win = ecore_x_window_override_new(bd->container->win, 0, 0, bd->w, bd->h); @@ -276,6 +269,11 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map) bd->new_client = 1; bd->changed = 1; + bd->container = con; + bd->zone = e_zone_current_get(con); + bd->zone->clients = evas_list_append(bd->zone->clients, bd); + bd->desk = e_desk_current_get(bd->zone); + bd->desk->clients = evas_list_append(bd->desk->clients, bd); con->clients = evas_list_append(con->clients, bd); borders = evas_list_append(borders, bd); diff --git a/src/bin/e_gadman.c b/src/bin/e_gadman.c index f3e25a0eb..ca7e075c9 100644 --- a/src/bin/e_gadman.c +++ b/src/bin/e_gadman.c @@ -7,11 +7,11 @@ /* re-enter edit mode (cant access root menu) */ /* FIXME: handle edge move/changes */ -/* FIXME: handle move resist */ -/* FIXME: handle resize resist */ /* FIXME: handle drag from zone to zone */ /* FIXME: handle save */ /* FIXME: handle load */ +/* FIXME: handle move resist */ +/* FIXME: handle resize resist */ /* local subsystem functions */ static void _e_gadman_free(E_Gadman *gm); @@ -140,7 +140,7 @@ e_gadman_client_save(E_Gadman_Client *gmc) } void -e_gadman_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge) +e_client_gadman_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge) { E_OBJECT_CHECK(gmc); gmc->edge = edge; @@ -588,28 +588,104 @@ _e_gadman_cb_signal_move_go(void *data, Evas_Object *obj, const char *emission, { E_Gadman_Client *gmc; Evas_Coord x, y; + int new_edge = 0; + int new_zone = 0; gmc = data; if (!gmc->moving) return; evas_pointer_canvas_xy_get(gmc->gadman->container->bg_evas, &x, &y); - if (gmc->policy & E_GADMAN_POLICY_HMOVE) - gmc->x = gmc->down_store_x + (x - gmc->down_x); + if ((gmc->policy & 0xff) == E_GADMAN_POLICY_EDGES) + { + double xr, yr; + E_Gadman_Edge ne; + + ne = gmc->edge; + xr = (double)(x - gmc->zone->x) / (double)gmc->zone->w; + yr = (double)(y - gmc->zone->y) / (double)gmc->zone->h; + + if ((xr + yr) <= 1.0) /* top or left */ + { + if (((1.0 - yr) + xr) <= 1.0) ne = E_GADMAN_EDGE_LEFT; + else ne = E_GADMAN_EDGE_TOP; + } + else /* bottom or right */ + { + if (((1.0 - yr) + xr) <= 1.0) ne = E_GADMAN_EDGE_BOTTOM; + else ne = E_GADMAN_EDGE_RIGHT; + } + + if (ne != gmc->edge) + { + gmc->edge = ne; + new_edge = 1; + } + if (gmc->edge == E_GADMAN_EDGE_LEFT) + { + gmc->x = gmc->zone->x; + gmc->y = gmc->down_store_y + (y - gmc->down_y); + if (gmc->y < gmc->zone->y) + gmc->y = gmc->zone->y; + else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) + gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; + } + else if (gmc->edge == E_GADMAN_EDGE_RIGHT) + { + gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; + gmc->y = gmc->down_store_y + (y - gmc->down_y); + if (gmc->y < gmc->zone->y) + gmc->y = gmc->zone->y; + else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) + gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; + } + else if (gmc->edge == E_GADMAN_EDGE_TOP) + { + gmc->x = gmc->down_store_x + (x - gmc->down_x); + gmc->y = gmc->zone->y; + if (gmc->x < gmc->zone->x) + gmc->x = gmc->zone->x; + else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) + gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; + } + else if (gmc->edge == E_GADMAN_EDGE_BOTTOM) + { + gmc->x = gmc->down_store_x + (x - gmc->down_x); + gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; + if (gmc->x < gmc->zone->x) + gmc->x = gmc->zone->x; + else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) + gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; + } + } else - gmc->x = gmc->down_store_x; - if (gmc->policy & E_GADMAN_POLICY_VMOVE) - gmc->y = gmc->down_store_y + (y - gmc->down_y); - else - gmc->y = gmc->down_store_y; - gmc->w = gmc->down_store_w; - gmc->h = gmc->down_store_h; - if (gmc->x < gmc->zone->x) - gmc->x = gmc->zone->x; - else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) - gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; - if (gmc->y < gmc->zone->y) - gmc->y = gmc->zone->y; - else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) - gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; + { + if (gmc->policy & E_GADMAN_POLICY_HMOVE) + gmc->x = gmc->down_store_x + (x - gmc->down_x); + else + gmc->x = gmc->down_store_x; + if (gmc->policy & E_GADMAN_POLICY_VMOVE) + gmc->y = gmc->down_store_y + (y - gmc->down_y); + else + gmc->y = gmc->down_store_y; + gmc->w = gmc->down_store_w; + gmc->h = gmc->down_store_h; + if (gmc->x < gmc->zone->x) + gmc->x = gmc->zone->x; + else if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) + gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; + if (gmc->y < gmc->zone->y) + gmc->y = gmc->zone->y; + else if ((gmc->y + gmc->h) > (gmc->zone->y + gmc->zone->h)) + gmc->y = gmc->zone->y + gmc->zone->h - gmc->h; + } + _e_gadman_client_geometry_to_align(gmc); + if (new_zone) + { + /* FIXME: callback for edge change */ + } + if (new_edge) + { + /* FIXME: callback for edge change */ + } _e_gadman_client_geometry_apply(gmc); } @@ -621,7 +697,7 @@ _e_gadman_cb_signal_resize_left_start(void *data, Evas_Object *obj, const char * gmc = data; if (_e_gadman_client_is_being_modified(gmc)) return; _e_gadman_client_down_store(gmc); - gmc->autow = 0; + gmc->use_autow = 0; gmc->resizing_l = 1; } @@ -632,7 +708,6 @@ _e_gadman_cb_signal_resize_left_stop(void *data, Evas_Object *obj, const char *e gmc = data; gmc->resizing_l = 0; - _e_gadman_client_geometry_to_align(gmc); e_gadman_client_save(gmc); } @@ -678,6 +753,7 @@ _e_gadman_cb_signal_resize_left_go(void *data, Evas_Object *obj, const char *emi } } _e_gadman_client_aspect_enforce(gmc, 1.0, 0.5, 1); + _e_gadman_client_geometry_to_align(gmc); _e_gadman_client_geometry_apply(gmc); } @@ -689,7 +765,7 @@ _e_gadman_cb_signal_resize_right_start(void *data, Evas_Object *obj, const char gmc = data; if (_e_gadman_client_is_being_modified(gmc)) return; _e_gadman_client_down_store(gmc); - gmc->autow = 0; + gmc->use_autow = 0; gmc->resizing_r = 1; } @@ -700,7 +776,6 @@ _e_gadman_cb_signal_resize_right_stop(void *data, Evas_Object *obj, const char * gmc = data; gmc->resizing_r = 0; - _e_gadman_client_geometry_to_align(gmc); e_gadman_client_save(gmc); } @@ -742,6 +817,7 @@ _e_gadman_cb_signal_resize_right_go(void *data, Evas_Object *obj, const char *em } } _e_gadman_client_aspect_enforce(gmc, 0.0, 0.5, 1); + _e_gadman_client_geometry_to_align(gmc); _e_gadman_client_geometry_apply(gmc); } @@ -753,7 +829,7 @@ _e_gadman_cb_signal_resize_up_start(void *data, Evas_Object *obj, const char *em gmc = data; if (_e_gadman_client_is_being_modified(gmc)) return; _e_gadman_client_down_store(gmc); - gmc->autoh = 0; + gmc->use_autoh = 0; gmc->resizing_u = 1; } @@ -764,7 +840,6 @@ _e_gadman_cb_signal_resize_up_stop(void *data, Evas_Object *obj, const char *emi gmc = data; gmc->resizing_u = 0; - _e_gadman_client_geometry_to_align(gmc); e_gadman_client_save(gmc); } @@ -810,6 +885,7 @@ _e_gadman_cb_signal_resize_up_go(void *data, Evas_Object *obj, const char *emiss } } _e_gadman_client_aspect_enforce(gmc, 0.5, 1.0, 0); + _e_gadman_client_geometry_to_align(gmc); _e_gadman_client_geometry_apply(gmc); } @@ -821,7 +897,7 @@ _e_gadman_cb_signal_resize_down_start(void *data, Evas_Object *obj, const char * gmc = data; if (_e_gadman_client_is_being_modified(gmc)) return; _e_gadman_client_down_store(gmc); - gmc->autoh = 0; + gmc->use_autoh = 0; gmc->resizing_d = 1; } @@ -832,7 +908,6 @@ _e_gadman_cb_signal_resize_down_stop(void *data, Evas_Object *obj, const char *e gmc = data; gmc->resizing_d = 0; - _e_gadman_client_geometry_to_align(gmc); e_gadman_client_save(gmc); } @@ -874,6 +949,7 @@ _e_gadman_cb_signal_resize_down_go(void *data, Evas_Object *obj, const char *emi } } _e_gadman_client_aspect_enforce(gmc, 0.5, 0.0, 0); + _e_gadman_client_geometry_to_align(gmc); _e_gadman_client_geometry_apply(gmc); } @@ -899,7 +975,7 @@ _e_gadman_cb_half_width(void *data, E_Menu *m, E_Menu_Item *mi) { if (gmc->w > gmc->maxw) gmc->w = gmc->maxw; } - gmc->autow = 0; + gmc->use_autow = 0; _e_gadman_client_aspect_enforce(gmc, 0.0, 0.5, 1); _e_gadman_client_geometry_apply(gmc); _e_gadman_client_geometry_to_align(gmc); @@ -919,7 +995,7 @@ _e_gadman_cb_full_width(void *data, E_Menu *m, E_Menu_Item *mi) if (gmc->w > gmc->maxw) gmc->w = gmc->maxw; } gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) / 2); - gmc->autow = 0; + gmc->use_autow = 0; _e_gadman_client_aspect_enforce(gmc, 0.0, 0.5, 1); _e_gadman_client_geometry_apply(gmc); _e_gadman_client_geometry_to_align(gmc); @@ -934,7 +1010,7 @@ _e_gadman_cb_auto_width(void *data, E_Menu *m, E_Menu_Item *mi) gmc = data; if (e_menu_item_toggle_get(mi)) { - gmc->autow = 1; + gmc->use_autow = 1; gmc->w = gmc->autow; if (gmc->w > gmc->zone->w) gmc->w = gmc->zone->w; @@ -942,7 +1018,7 @@ _e_gadman_cb_auto_width(void *data, E_Menu *m, E_Menu_Item *mi) gmc->x = (gmc->zone->x + gmc->zone->w) - gmc->w; } else - gmc->autow = 0; + gmc->use_autow = 0; _e_gadman_client_geometry_apply(gmc); _e_gadman_client_geometry_to_align(gmc); e_gadman_client_save(gmc); @@ -972,7 +1048,7 @@ _e_gadman_cb_half_height(void *data, E_Menu *m, E_Menu_Item *mi) { if (gmc->h > gmc->maxh) gmc->h = gmc->maxh; } - gmc->autoh = 0; + gmc->use_autoh = 0; _e_gadman_client_aspect_enforce(gmc, 0.5, 0.0, 0); _e_gadman_client_geometry_apply(gmc); _e_gadman_client_geometry_to_align(gmc); @@ -992,7 +1068,7 @@ _e_gadman_cb_full_height(void *data, E_Menu *m, E_Menu_Item *mi) if (gmc->h > gmc->maxh) gmc->h = gmc->maxh; } gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) / 2); - gmc->autoh = 0; + gmc->use_autoh = 0; _e_gadman_client_aspect_enforce(gmc, 0.5, 0.0, 0); _e_gadman_client_geometry_apply(gmc); _e_gadman_client_geometry_to_align(gmc); @@ -1007,7 +1083,7 @@ _e_gadman_cb_auto_height(void *data, E_Menu *m, E_Menu_Item *mi) gmc = data; if (e_menu_item_toggle_get(mi)) { - gmc->autoh = 1; + gmc->use_autoh = 1; gmc->h = gmc->autoh; if (gmc->h > gmc->zone->h) gmc->h = gmc->zone->h; @@ -1015,7 +1091,7 @@ _e_gadman_cb_auto_height(void *data, E_Menu *m, E_Menu_Item *mi) gmc->y = (gmc->zone->y + gmc->zone->h) - gmc->h; } else - gmc->autoh = 0; + gmc->use_autoh = 0; _e_gadman_client_geometry_apply(gmc); _e_gadman_client_geometry_to_align(gmc); e_gadman_client_save(gmc); diff --git a/src/bin/e_gadman.h b/src/bin/e_gadman.h index 5eac993d7..cf2a62803 100644 --- a/src/bin/e_gadman.h +++ b/src/bin/e_gadman.h @@ -88,7 +88,7 @@ EAPI void e_gadman_mode_set(E_Gadman *gm, E_Gadman_Mode mode); EAPI E_Gadman_Mode e_gadman_mode_get(E_Gadman *gm); EAPI E_Gadman_Client *e_gadman_client_new(E_Gadman *gm); EAPI void e_gadman_client_save(E_Gadman_Client *gmc); -EAPI void e_gadman_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge); +EAPI void e_gadman_client_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge); EAPI void e_gadman_client_load(E_Gadman_Client *gmc); EAPI void e_gadman_client_domain_set(E_Gadman_Client *gmc, char *domain, int instance); EAPI void e_gadman_client_zone_set(E_Gadman_Client *gmc, E_Zone *zone); diff --git a/src/bin/e_main.c b/src/bin/e_main.c index d91f6c4ee..c26cebba9 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -539,13 +539,18 @@ _e_main_screens_init(void) E_Gadman_Client *gmc; gmc = e_gadman_client_new(con->gadman); - gmc->x = 100; - gmc->y = 100; - gmc->w = 150; - gmc->h = 150; + gmc->x = 20; + gmc->y = 0; + gmc->w = 200; + gmc->h = 100; + e_gadman_client_policy_set(gmc, + E_GADMAN_POLICY_EDGES | + E_GADMAN_POLICY_HSIZE | + E_GADMAN_POLICY_VSIZE); e_gadman_client_min_size_set(gmc, 20, 20); e_gadman_client_auto_size_set(gmc, 200, 50); - e_gadman_client_aspect_set(gmc, 4.0, 4.0); + e_gadman_client_align_set(gmc, 0.5, 0.0); + e_client_gadman_edge_set(gmc, E_GADMAN_EDGE_TOP); } } free(roots);