From: Enlightenment C. <no...@cv...> - 2006-11-03 06:05:08
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_int_config_display.c Log Message: Remove leaks in xrandr config panel, tidy up and fix to work with Xephyr. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_display.c,v retrieving revision 1.27 retrieving revision 1.28 diff -u -3 -r1.27 -r1.28 --- e_int_config_display.c 17 Oct 2006 13:49:47 -0000 1.27 +++ e_int_config_display.c 3 Nov 2006 06:05:03 -0000 1.28 @@ -1,31 +1,31 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ #include "e.h" /* TODO: * * Give list some icons. - * Support XRandr Rotation */ static void *_create_data (E_Config_Dialog *cfd); static void _free_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); static int _basic_apply_data (E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata); static Evas_Object *_basic_create_widgets (E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata); -static void _load_rates (void *data, E_Config_Dialog_Data *cfdata); +static void _load_rates (E_Config_Dialog_Data *cfdata); static void _ilist_item_change (void *data); static int _deferred_noxrandr_error (void *data); - -/* FIXME: although this works.. this is nasty - shoudl be in cfdata */ -Evas_Object *rate_list = NULL; -Evas_Object *res_list = NULL; +static int _deferred_norates_error (void *data); +static int _sort_resolutions (void *d1, void *d2); typedef struct _Resolution Resolution; typedef struct _SureBox SureBox; struct _Resolution { - int size_id; + int id; Ecore_X_Screen_Size size; - Ecore_X_Screen_Refresh_Rate *rates; + Evas_List *rates; }; struct _SureBox @@ -33,8 +33,6 @@ E_Dialog *dia; Ecore_Timer *timer; int iterations; - Ecore_X_Screen_Size orig_size; - Ecore_X_Screen_Refresh_Rate orig_rate; E_Config_Dialog *cfd; E_Config_Dialog_Data *cfdata; }; @@ -42,7 +40,7 @@ struct _E_Config_Dialog_Data { E_Config_Dialog *cfd; - Resolution *res; + Evas_List *resolutions; Ecore_X_Screen_Size orig_size; Ecore_X_Screen_Refresh_Rate orig_rate; int restore; @@ -52,8 +50,10 @@ int flip; int flip_x; int flip_y; - int orig_res, orig_refresh; + int has_rates; + Evas_Object *rate_list; + Evas_Object *res_list; SureBox *surebox; }; @@ -78,25 +78,45 @@ static void _surebox_dialog_cb_yes(void *data, E_Dialog *dia) { + SureBox *sb; + Ecore_X_Screen_Size c_size; + Ecore_X_Screen_Refresh_Rate c_rate; + E_Manager *man; + + sb = data; + man = e_manager_current_get(); + c_size = ecore_x_randr_current_screen_size_get(man->root); + c_rate = ecore_x_randr_current_screen_refresh_rate_get(man->root); + e_config->display_res_width = c_size.width; + e_config->display_res_height = c_size.height; + e_config->display_res_hz = c_rate.rate; + e_config_save_queue(); + sb->cfdata->orig_size = c_size; + sb->cfdata->orig_rate = c_rate; _surebox_dialog_cb_delete(dia->win); + } static void _surebox_dialog_cb_no(void *data, E_Dialog *dia) { SureBox *sb; + Evas_List *l; sb = data; ecore_x_randr_screen_refresh_rate_set(sb->dia->win->container->manager->root, - sb->orig_size, sb->orig_rate); - e_config->display_res_width = sb->orig_size.width; - e_config->display_res_height = sb->orig_size.height; - e_config->display_res_hz = sb->orig_rate.rate; - sb->cfdata->orig_size = sb->orig_size; - sb->cfdata->orig_rate = sb->orig_rate; - e_config_save_queue(); - e_widget_ilist_selected_set(res_list, sb->cfdata->orig_res); - e_widget_ilist_selected_set(rate_list, sb->cfdata->orig_refresh); + sb->cfdata->orig_size, sb->cfdata->orig_rate); + for (l = sb->cfdata->resolutions; l; l = l->next) + { + Resolution *res = l->data; + if (res->size.width == sb->cfdata->orig_size.width + && res->size.height == sb->cfdata->orig_size.height) + { + e_widget_ilist_selected_set(sb->cfdata->res_list, res->id); + break; + } + } + _load_rates(sb->cfdata); _surebox_dialog_cb_delete(dia->win); } @@ -108,21 +128,37 @@ if (!sb->dia) return; if (sb->iterations > 1) { - snprintf(buf, sizeof(buf), - _("Does this look OK? Press <hilight>Yes</hilight> if it does, or No if not.<br>" + if (sb->cfdata->has_rates) + snprintf(buf, sizeof(buf), + _("Does this look OK? Press <hilight>Yes</hilight> if it does, or No if not.<br>" "If you do not press a button, the old resolution of<br>" "%dx%d at %d Hz will be restored in %d seconds."), - sb->orig_size.width, sb->orig_size.height, - sb->orig_rate.rate, sb->iterations); + sb->cfdata->orig_size.width, sb->cfdata->orig_size.height, + sb->cfdata->orig_rate.rate, sb->iterations); + else + snprintf(buf, sizeof(buf), + _("Does this look OK? Press <hilight>Yes</hilight> if it does, or No if not.<br>" + "If you do not press a button, the old resolution of<br>" + "%dx%d at will be restored in %d seconds."), + sb->cfdata->orig_size.width, sb->cfdata->orig_size.height, + sb->iterations); + } else { - snprintf(buf, sizeof(buf), - _("Does this look OK? Press <hilight>Yes</hilight> if it does, or No if not.<br>" + if (sb->cfdata->has_rates) + snprintf(buf, sizeof(buf), + _("Does this look OK? Press <hilight>Yes</hilight> if it does, or No if not.<br>" "If you do not press a button, the old resolution of<br>" "%dx%d at %d Hz will be restored <hilight>IMMEDIATELY</hilight>."), - sb->orig_size.width, sb->orig_size.height, - sb->orig_rate.rate); + sb->cfdata->orig_size.width, sb->cfdata->orig_size.height, + sb->cfdata->orig_rate.rate); + else + snprintf(buf, sizeof(buf), + _("Does this look OK? Press <hilight>Yes</hilight> if it does, or No if not.<br>" + "If you do not press a button, the old resolution of<br>" + "%dx%d at will be restored <hilight>IMMEDIATELY</hilight>."), + sb->cfdata->orig_size.width, sb->cfdata->orig_size.height); } e_dialog_text_set(sb->dia, buf); } @@ -137,16 +173,21 @@ _surebox_text_fill(sb); if (sb->iterations == 0) { + Evas_List *l; + ecore_x_randr_screen_refresh_rate_set(sb->dia->win->container->manager->root, - sb->orig_size, sb->orig_rate); - e_config->display_res_width = sb->orig_size.width; - e_config->display_res_height = sb->orig_size.height; - e_config->display_res_hz = sb->orig_rate.rate; - sb->cfdata->orig_size = sb->orig_size; - sb->cfdata->orig_rate = sb->orig_rate; - e_config_save_queue(); - e_widget_ilist_selected_set(res_list, sb->cfdata->orig_res); - e_widget_ilist_selected_set(rate_list, sb->cfdata->orig_refresh); + sb->cfdata->orig_size, sb->cfdata->orig_rate); + for (l = sb->cfdata->resolutions; l; l = l->next) + { + Resolution *res = l->data; + if (res->size.width == sb->cfdata->orig_size.width + && res->size.height == sb->cfdata->orig_size.height) + { + e_widget_ilist_selected_set(sb->cfdata->res_list, res->id); + break; + } + } + _load_rates(sb->cfdata); sb->timer = NULL; e_object_del(E_OBJECT(sb->dia)); sb->dia = NULL; @@ -164,8 +205,6 @@ sb->dia = e_dialog_new(cfd->con, "E", "_display_res_sure_dialog"); sb->timer = ecore_timer_add(1.0, _surebox_timer_cb, sb); sb->iterations = 15; - sb->orig_size = cfdata->orig_size; - sb->orig_rate = cfdata->orig_rate; sb->cfd = cfd; sb->cfdata = cfdata; cfdata->surebox = sb; @@ -254,8 +293,22 @@ static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { + Evas_List *l, *ll; + if (cfdata->surebox) _surebox_dialog_cb_delete(cfdata->surebox->dia->win); + + for (l = cfdata->resolutions; l; l = l->next) + { + Resolution *r = l->data; + for (ll = r->rates; ll; ll = ll->next) + E_FREE(ll->data); + + r->rates = evas_list_free(r->rates); + E_FREE(r); + } + cfdata->resolutions = evas_list_free(cfdata->resolutions); + free(cfdata); } @@ -263,56 +316,31 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { const char *sel_res, *sel_rate; - int w, h, r, i, n, k, rr; - Ecore_X_Screen_Size *sizes; + int i, n, k, rr; Ecore_X_Screen_Size size; - Ecore_X_Screen_Refresh_Rate *rates; Ecore_X_Screen_Refresh_Rate rate; E_Manager *man; - sel_res = e_widget_ilist_selected_label_get(res_list); - sel_rate = e_widget_ilist_selected_label_get(rate_list); + sel_res = e_widget_ilist_selected_label_get(cfdata->res_list); + sel_rate = e_widget_ilist_selected_label_get(cfdata->rate_list); if (!sel_res) return 0; - if (!sel_rate) return 0; - sscanf(sel_res, "%ix%i", &w, &h); - sscanf(sel_rate, "%i Hz", &r); + if (!sel_rate && cfdata->has_rates) return 0; + + sscanf(sel_res, "%ix%i", &size.width, &size.height); + if (cfdata->has_rates) + sscanf(sel_rate, "%i Hz", &rate.rate); - e_config->display_res_width = cfdata->orig_size.width; - e_config->display_res_height = cfdata->orig_size.height; - e_config->display_res_hz = cfdata->orig_rate.rate; - man = e_manager_current_get(); - if (!((cfdata->orig_size.width == w) && (cfdata->orig_size.height == h) && - (cfdata->orig_rate.rate == r))) + if (!((cfdata->orig_size.width == size.width) && (cfdata->orig_size.height == size.height) && + (cfdata->orig_rate.rate == rate.rate || !cfdata->has_rates))) { - sizes = ecore_x_randr_screen_sizes_get(man->root, &n); - for (i = 0; i < n; i++) - { - if ((sizes[i].width == w) && - (sizes[i].height == h)) - { - size = sizes[i]; - rates = ecore_x_randr_screen_refresh_rates_get(man->root, i, &rr); - for (k = 0; k < rr; k++) - { - if (rates[k].rate == r) - { - rate = rates[k]; - break; - } - } - break; - } - } - - e_config->display_res_width = size.width; - e_config->display_res_height = size.height; - e_config->display_res_hz = rate.rate; - ecore_x_randr_screen_refresh_rate_set(man->root, size, rate); + if (cfdata->has_rates) + ecore_x_randr_screen_refresh_rate_set(man->root, size, rate); + else + ecore_x_randr_screen_size_set(man->root, size); + _surebox_new(cfd, cfdata); - cfdata->orig_size = size; - cfdata->orig_rate = rate; } if ((cfdata->can_rotate) || (cfdata->can_flip)) @@ -349,8 +377,7 @@ E_Radio_Group *rg; E_Manager *man; Ecore_X_Screen_Size *sizes; - Ecore_X_Screen_Size size; - int i, r, s; + int i, s; _fill_data(cfdata); @@ -364,7 +391,7 @@ e_widget_framelist_object_append(of, ol); e_widget_list_object_append(o2, of, 1, 1, 0.5); - res_list = ol; + cfdata->res_list = ol; ob = e_widget_check_add(evas, _("Restore on login"), &(cfdata->restore)); e_widget_list_object_append(o2, ob, 1, 1, 0.5); @@ -379,11 +406,11 @@ e_widget_framelist_object_append(of, rl); e_widget_list_object_append(o2, of, 1, 1, 0.5); - rate_list = rl; + cfdata->rate_list = rl; man = e_manager_current_get(); sizes = ecore_x_randr_screen_sizes_get(man->root, &s); - size = ecore_x_randr_current_screen_size_get(man->root); + cfdata->has_rates = 0; if ((!sizes) || (s == 0)) { @@ -391,66 +418,70 @@ } else { - char buf[16]; - int *sortindex; - int sorted = 0, tmp; - - sortindex = alloca(s * sizeof(int)); - for (i = 0; i < s; i++) - sortindex[i] = i; - /* quick & dirty bubblesort */ - while (!sorted) + Evas_List *l; + Ecore_X_Screen_Refresh_Rate c_rate; + Ecore_X_Screen_Size c_size; + + cfdata->orig_size = ecore_x_randr_current_screen_size_get(man->root); + cfdata->orig_rate = ecore_x_randr_current_screen_refresh_rate_get(man->root); + + /* Generate a set of resolutions and matching rates for each */ + for (i = 0; i < (s - 1); i++) { - sorted = 1; - for (i = 0; i < (s - 1); i++) + Resolution * res; + Ecore_X_Screen_Refresh_Rate * rates; + int r = 0, j; + + res = E_NEW(Resolution, 1); + if (!res) continue; + + res->size.width = sizes[i].width; + res->size.height = sizes[i].height; + rates = ecore_x_randr_screen_refresh_rates_get(man->root, i, &r); + for (j = 0; j < r; j++) { - if (sizes[sortindex[i]].width > sizes[sortindex[i + 1]].width) - { - sorted = 0; - tmp = sortindex[i]; - sortindex[i] = sortindex[i + 1]; - sortindex[i + 1] = tmp; - } - else if (sizes[sortindex[i]].width == sizes[sortindex[i + 1]].width) - { - if (sizes[sortindex[i]].height > sizes[sortindex[i + 1]].height) - { - sorted = 0; - tmp = sortindex[i]; - sortindex[i] = sortindex[i + 1]; - sortindex[i + 1] = tmp; - } - } + Ecore_X_Screen_Refresh_Rate * rt; + + cfdata->has_rates = 1; + rt = E_NEW(Ecore_X_Screen_Refresh_Rate, 1); + if (!rt) continue; + rt->rate = rates[j].rate; + res->rates = evas_list_append(res->rates, rt); } + if (rates) E_FREE(rates); + cfdata->resolutions = evas_list_append(cfdata->resolutions, res); } - - for (i = 0; i < s; i++) + + /* Sort the list */ + cfdata->resolutions = evas_list_sort(cfdata->resolutions, + evas_list_count(cfdata->resolutions), _sort_resolutions); + + + i = 0; + for (l = cfdata->resolutions; l; l = l->next) { - Resolution *res; - - res = E_NEW(Resolution, 1); - if (!res) continue; - - res->size = sizes[sortindex[i]]; - res->size_id = sortindex[i]; - res->rates = ecore_x_randr_screen_refresh_rates_get(man->root, res->size_id, &r); - - snprintf(buf, sizeof(buf), "%ix%i", - sizes[sortindex[i]].width, sizes[sortindex[i]].height); - e_widget_ilist_append(ol, NULL, buf, _ilist_item_change, res, NULL); - - if ((res->size.width == size.width) && - (res->size.height == size.height)) - { - cfdata->orig_res = i; + char buf[1024]; + Resolution *res = l->data; + + res->id = i++; + snprintf(buf, sizeof(buf), "%ix%i", res->size.width, res->size.height); + e_widget_ilist_append(ol, NULL, buf, _ilist_item_change, cfdata, NULL); + + if (res->size.width == cfdata->orig_size.width + && res->size.height == cfdata->orig_size.height) + { e_widget_ilist_selected_set(ol, i); - _load_rates(res, cfdata); + _load_rates(cfdata); } - } + } + + if (!cfdata->has_rates) + ecore_timer_add(0.5, _deferred_norates_error, NULL); } - - if (sizes) free(sizes); - + + if (sizes) + E_FREE(sizes); + e_widget_ilist_go(ol); e_widget_ilist_go(rl); @@ -491,43 +522,67 @@ } e_widget_list_object_append(o, o2, 0, 0, 0.0); + + return o; } +static int +_sort_resolutions(void *d1, void *d2) +{ + Resolution *r1 = d1; + Resolution *r2 = d2; + + if (r1->size.width > r2->size.width) return 1; + if (r1->size.width < r2->size.width) return -1; + if (r1->size.height > r2->size.height) return 1; + + return -1; +} + static void -_load_rates(void *data, E_Config_Dialog_Data *cfdata) +_load_rates(E_Config_Dialog_Data *cfdata) { - int k, r; - E_Manager *man; - Resolution *res = data; + int r, k = 0, sel = 0; Ecore_X_Screen_Refresh_Rate rt; Ecore_X_Screen_Refresh_Rate *rts; char buf[16]; + Evas_List *l; - man = e_manager_current_get(); - rts = ecore_x_randr_screen_refresh_rates_get(man->root, res->size_id, &r); - rt = ecore_x_randr_current_screen_refresh_rate_get(man->root); + e_widget_ilist_clear(cfdata->rate_list); - e_widget_ilist_clear(rate_list); - - for (k = 0; k < r; k++) + r = e_widget_ilist_selected_get(cfdata->res_list); + + for (l = cfdata->resolutions; l; l = l->next) { - snprintf(buf, sizeof(buf), "%i Hz", rts[k].rate); - e_widget_ilist_append(rate_list, NULL, buf, NULL, NULL, NULL); - if (rt.rate == rts[k].rate) + Resolution *res = l->data; + if (res->id == r) { - if (cfdata) cfdata->orig_refresh = k; - e_widget_ilist_selected_set(rate_list, k); + Evas_List *ll; + for (ll = res->rates; ll; ll = ll->next) + { + Ecore_X_Screen_Refresh_Rate *rt; + rt = ll->data; + snprintf(buf, sizeof(buf), "%i Hz", rt->rate); + e_widget_ilist_append(cfdata->rate_list, NULL, buf, NULL, NULL, NULL); + + if (rt->rate == cfdata->orig_rate.rate) + sel = k; + k++; + } + break; } } - e_widget_ilist_selected_set(rate_list, 0); + + e_widget_ilist_go(cfdata->rate_list); + e_widget_ilist_selected_set(cfdata->rate_list, k); } static void _ilist_item_change(void *data) { - _load_rates(data, NULL); + _load_rates(data); } static int @@ -540,5 +595,18 @@ "the support of this extension. It could also be<br>" "that at the time <hilight>ecore</hilight> was built, there<br>" "was no XRandr support detected.")); + return 0; +} + +static int +_deferred_norates_error(void *data) +{ + e_util_dialog_show(_("No Refresh Rates Found"), + _("No refresh rates were reported by your X Display Server.<br>" + "If you are running a nested X Display Server, then<br>" + "this is to be expected. However, if you are not, then<br>" + "the current refresh rate will be used when setting<br>" + "the resolution, which may cause <hilight>damage</hilight> to your screen.")); + return 0; } |
From: Enlightenment C. <no...@cv...> - 2006-11-03 06:05:34
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e Modified Files: TODO Log Message: Remove leaks in xrandr config panel, tidy up and fix to work with Xephyr. =================================================================== RCS file: /cvs/e/e17/apps/e/TODO,v retrieving revision 1.501 retrieving revision 1.502 diff -u -3 -r1.501 -r1.502 --- TODO 31 Oct 2006 15:06:49 -0000 1.501 +++ TODO 3 Nov 2006 06:05:03 -0000 1.502 @@ -8,7 +8,6 @@ BUGS / FIXES ------------------------------------------------------------------------------- -* BUG: e17 screen res diaolg doesnt work under xephyr - why? * BUG: xdaliclock -transparent doesnt use shaped border (not handling shape change later) ]]] |
From: Enlightenment C. <no...@cv...> - 2006-11-03 06:11:57
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_border.c Log Message: --BUG: xdaliclock now gets shaped borders if no user defined border is set. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_border.c,v retrieving revision 1.558 retrieving revision 1.559 diff -u -3 -r1.558 -r1.559 --- e_border.c 28 Oct 2006 01:32:43 -0000 1.558 +++ e_border.c 3 Nov 2006 06:11:56 -0000 1.559 @@ -5209,6 +5209,8 @@ if (bd->client.shaped) { bd->client.shaped = 0; + if (!bd->bordername) + bd->client.border.changed = 1; } } else @@ -5216,12 +5218,18 @@ if (!bd->client.shaped) { bd->client.shaped = 1; + if (!bd->bordername) + bd->client.border.changed = 1; } } free(rects); } else - bd->client.shaped = 0; + { + bd->client.shaped = 0; + if (!bd->bordername) + bd->client.border.changed = 1; + } bd->need_shape_merge = 1; } if (bd->client.mwm.fetch.hints) |
From: Enlightenment C. <no...@cv...> - 2006-11-03 06:12:27
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e Modified Files: TODO Log Message: --BUG: xdaliclock now gets shaped borders if no user defined border is set. =================================================================== RCS file: /cvs/e/e17/apps/e/TODO,v retrieving revision 1.502 retrieving revision 1.503 diff -u -3 -r1.502 -r1.503 --- TODO 3 Nov 2006 06:05:03 -0000 1.502 +++ TODO 3 Nov 2006 06:11:55 -0000 1.503 @@ -8,8 +8,6 @@ BUGS / FIXES ------------------------------------------------------------------------------- -* BUG: xdaliclock -transparent doesnt use shaped border (not handling shape - change later) ]]] [[[ |
From: Enlightenment C. <no...@cv...> - 2006-11-04 06:16:03
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_apps_error.c Log Message: Don't display all the output in the error dialog box if there is a large amount as the render time for all the text is extreme and makes e appear frozen. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_apps_error.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -3 -r1.18 -r1.19 --- e_apps_error.c 3 Nov 2006 06:12:22 -0000 1.18 +++ e_apps_error.c 4 Nov 2006 06:15:59 -0000 1.19 @@ -3,6 +3,8 @@ */ #include "e.h" +#define MAX_OUTPUT_CHARACTERS 5000 + struct _E_Config_Dialog_Data { char *label; @@ -173,7 +175,8 @@ int i; Evas_Object *obj, *os; char *text; - int tlen; + char *trunc_note = _("***The remaining output has been truncated. Save the output to view.***\n"); + int tlen, max_lines; os = e_widget_framelist_add(evas, _(title), 0); @@ -181,16 +184,34 @@ tlen = 0; for (i = 0; lines[i].line != NULL; i++) - tlen += lines[i].size + 1; + { + tlen += lines[i].size + 1; + /* When the program output is extraordinarily long, it can cause + * significant delays during text rendering. Limit to a fixed + * number of characters. */ + if (tlen > MAX_OUTPUT_CHARACTERS) + { + tlen -= lines[i].size + 1; + tlen += strlen(trunc_note); + break; + } + } + max_lines = i; text = alloca(tlen + 1); + if (text) { text[0] = 0; - for (i = 0; lines[i].line != NULL; i++) + for (i = 0; i < max_lines; i++) { strcat(text, lines[i].line); strcat(text, "\n"); } + + /* Append the warning about truncated output. */ + if (lines[max_lines].line != NULL) + strcat(text, trunc_note); + e_widget_textblock_plain_set(obj, text); } e_widget_min_size_set(obj, 240, 120); |
From: Enlightenment C. <no...@cv...> - 2006-11-04 12:00:21
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_int_config_icon_themes.c Log Message: --leaks =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_icon_themes.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- e_int_config_icon_themes.c 31 Oct 2006 14:56:28 -0000 1.14 +++ e_int_config_icon_themes.c 4 Nov 2006 12:00:13 -0000 1.15 @@ -333,6 +333,7 @@ E_Config_Dialog_Data *cfdata; const char *v; Ecore_Desktop_Icon_Theme *theme; + char * dir; cfdata = data; v = cfdata->themename; @@ -347,7 +348,7 @@ length = strlen(theme->comment) + strlen(theme->path) + 16; if (theme->inherits) length += strlen(theme->inherits) + 32; - text = malloc(length); + text = alloca(length); if (text) { if (theme->inherits) @@ -356,7 +357,9 @@ sprintf(text, "%s\npath = %s", theme->comment, theme->path); e_widget_textblock_plain_set(cfdata->gui.comment, text); } - e_fm2_path_set(cfdata->gui.o_fm, ecore_file_get_dir(theme->path), "/"); + dir = ecore_file_get_dir(theme->path); + e_fm2_path_set(cfdata->gui.o_fm, dir, "/"); + E_FREE(dir); } } |
From: Enlightenment C. <no...@cv...> - 2006-11-04 12:41:30
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_int_config_color_classes.c Log Message: --leak =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_color_classes.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -3 -r1.23 -r1.24 --- e_int_config_color_classes.c 17 Oct 2006 10:01:44 -0000 1.23 +++ e_int_config_color_classes.c 4 Nov 2006 12:41:24 -0000 1.24 @@ -286,6 +286,7 @@ evas_stringshare_del(cfc->name); if (cfc->key) evas_stringshare_del(cfc->key); + E_FREE(cfc); cfdata->classes = evas_list_remove_list(cfdata->classes, cfdata->classes); } |
From: Enlightenment C. <no...@cv...> - 2006-11-04 12:53:36
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_int_config_desklock.c Log Message: --leak =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_desklock.c,v retrieving revision 1.41 retrieving revision 1.42 diff -u -3 -r1.41 -r1.42 --- e_int_config_desklock.c 31 Oct 2006 14:56:28 -0000 1.41 +++ e_int_config_desklock.c 4 Nov 2006 12:53:34 -0000 1.42 @@ -362,8 +362,6 @@ E_Config_Dialog_Data *cfdata; cfdata = E_NEW(E_Config_Dialog_Data, 1); - cfdata->desklock_passwd = strdup(""); - cfdata->desklock_passwd_cp = strdup(""); cfdata->cfd = cfd; _fill_data(cfdata); |
From: Enlightenment C. <no...@cv...> - 2006-11-04 13:03:18
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_int_config_exebuf.c Log Message: --leak (my fault :P) =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_exebuf.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- e_int_config_exebuf.c 14 Oct 2006 10:57:18 -0000 1.8 +++ e_int_config_exebuf.c 4 Nov 2006 13:03:13 -0000 1.9 @@ -85,6 +85,7 @@ static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { + E_FREE(cfdata->term_cmd); free(cfdata); } |
From: Enlightenment C. <no...@cv...> - 2006-11-04 13:24:28
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_int_config_transitions.c Log Message: --leak =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_transitions.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- e_int_config_transitions.c 20 Oct 2006 14:31:51 -0000 1.8 +++ e_int_config_transitions.c 4 Nov 2006 13:24:24 -0000 1.9 @@ -72,6 +72,12 @@ static void _free_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) { + if(cfdata->transition_start) + E_FREE(cfdata->transition_start); + if(cfdata->transition_desk) + E_FREE(cfdata->transition_desk); + if(cfdata->transition_change) + E_FREE(cfdata->transition_change); free(cfdata); } |
From: Enlightenment C. <no...@cv...> - 2006-11-08 10:36:40
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_box.c Log Message: Fix function name spelling. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_box.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -3 -r1.16 -r1.17 --- e_box.c 13 Mar 2006 09:55:16 -0000 1.16 +++ e_box.c 8 Nov 2006 10:36:34 -0000 1.17 @@ -45,7 +45,7 @@ static void _e_box_smart_disown(Evas_Object *obj); static void _e_box_smart_item_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _e_box_smart_reconfigure(E_Smart_Data *sd); -static void _e_box_smart_extents_calcuate(E_Smart_Data *sd); +static void _e_box_smart_extents_calculate(E_Smart_Data *sd); static void _e_box_smart_init(void); static void _e_box_smart_add(Evas_Object *obj); @@ -281,7 +281,7 @@ sd = evas_object_smart_data_get(obj); if (!sd) return; - if (sd->changed) _e_box_smart_extents_calcuate(sd); + if (sd->changed) _e_box_smart_extents_calculate(sd); if (minw) *minw = sd->min.w; if (minh) *minh = sd->min.h; } @@ -293,7 +293,7 @@ sd = evas_object_smart_data_get(obj); if (!sd) return; - if (sd->changed) _e_box_smart_extents_calcuate(sd); + if (sd->changed) _e_box_smart_extents_calculate(sd); if (maxw) *maxw = sd->max.w; if (maxh) *maxh = sd->max.h; } @@ -397,7 +397,7 @@ w = sd->w; h = sd->h; - _e_box_smart_extents_calcuate(sd); + _e_box_smart_extents_calculate(sd); minw = sd->min.w; minh = sd->min.h; count = evas_list_count(sd->items); @@ -555,7 +555,7 @@ } static void -_e_box_smart_extents_calcuate(E_Smart_Data *sd) +_e_box_smart_extents_calculate(E_Smart_Data *sd) { Evas_List *l; int minw, minh; |
From: Enlightenment C. <no...@cv...> - 2006-11-08 11:19:38
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_apps.c Log Message: #if DEBUG noisy printf's with onefang's permission. :) =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_apps.c,v retrieving revision 1.242 retrieving revision 1.243 diff -u -3 -r1.242 -r1.243 --- e_apps.c 5 Nov 2006 05:09:55 -0000 1.242 +++ e_apps.c 8 Nov 2006 11:19:30 -0000 1.243 @@ -162,7 +162,9 @@ } ecore_list_destroy(_e_apps_all_filenames); } +#if DEBUG printf("INITIAL APP SCAN %3.3f\n", ecore_time_get() - begin); +#endif ecore_desktop_instrumentation_print(); ecore_desktop_instrumentation_reset(); _e_apps_hash_idler.begin = ecore_time_get(); @@ -212,10 +214,12 @@ } if (idler->apps == NULL) { +#if DEBUG printf("\nIDLE APP FILLING SCAN %3.3f\n", ecore_time_get() - idler->begin); #if CLEVER_BORDERS printf("APP BORDER SETUP %3.6f (average %2.6f) %d globs\n", border_setup_time, border_setup_time / border_setup_count, glob_count); #endif +#endif idler->idler = NULL; ecore_desktop_instrumentation_print(); return 0; @@ -1464,6 +1468,7 @@ border_count++; border_time += time; border_clever_time += clever_time; +#if DEBUG #if CLEVER_BORDERS && OLD_BORDERS printf("APP BORDER SCAN NEW - %2.6f, OLD - %2.6f (average %2.6f, %2.6f) FOUND %s AND %s\n", clever_time, time, border_clever_time / border_count, border_time / border_count, @@ -1478,6 +1483,7 @@ printf("APP BORDER SCAN OLD - %2.6f (average %2.6f) FOUND %s\n", time, border_time / border_count, ((a_match == NULL) ? "NOTHING" : a_match->path)); +#endif #endif #endif return a_match; |
From: Enlightenment C. <no...@cv...> - 2006-11-09 23:17:09
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_intl.c Log Message: Fix segv in strcmp when locale_cs_canonic is NULL. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_intl.c,v retrieving revision 1.84 retrieving revision 1.85 diff -u -3 -r1.84 -r1.85 --- e_intl.c 5 Nov 2006 05:09:55 -0000 1.84 +++ e_intl.c 9 Nov 2006 23:17:06 -0000 1.85 @@ -1043,8 +1043,8 @@ e_intl_locale_charset_canonic_get(locale_cs_next); if (locale_cs_canonic_next) { - if (!strcmp(locale_cs_canonic, - locale_cs_canonic_next)) + if (locale_cs_canonic && + !strcmp(locale_cs_canonic, locale_cs_canonic_next)) { /* Lang/Resion and charsets in canonic * form match @@ -1055,7 +1055,8 @@ } else { - if (!strcmp(locale_cs_canonic, locale_cs_next)) + if (locale_cs_canonic && + !strcmp(locale_cs_canonic, locale_cs_next)) { /* Lang/Resion and charsets in canonic * form match |
From: Enlightenment C. <no...@cv...> - 2006-11-12 10:01:09
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e Modified Files: xnest.sh Log Message: Yet another debugger (kinda vim like). =================================================================== RCS file: /cvs/e/e17/apps/e/xnest.sh,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- xnest.sh 12 Nov 2006 02:41:28 -0000 1.11 +++ xnest.sh 12 Nov 2006 10:01:06 -0000 1.12 @@ -15,6 +15,7 @@ "-d") action="ddd -display $main" ; display="" ;; "-e") action="" ;; "-g") action="gdb" ; main=":1" ; display="" ;; + "-c") action="cgdb" ; main=":1" ; display="" ;; "-l") action="valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --log-file=valgrind_log" ;; "-m") action="valgrind --tool=memcheck --log-file=valgrind_log" ;; "-p") action="memprof --display=$main" ; main=":1" ; display="" ;; |
From: Enlightenment C. <no...@cv...> - 2006-11-12 11:32:45
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/modules/ibox Modified Files: e_mod_main.c Log Message: Start of fix for drag and drop to autoscrolling ibar/ibox. =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/ibox/e_mod_main.c,v retrieving revision 1.71 retrieving revision 1.72 diff -u -3 -r1.71 -r1.72 --- e_mod_main.c 24 Oct 2006 18:32:58 -0000 1.71 +++ e_mod_main.c 12 Nov 2006 11:32:44 -0000 1.72 @@ -156,7 +156,7 @@ evas_object_geometry_get(o, &x, &y, &w, &h); inst->drop_handler = - e_drop_handler_add(E_OBJECT(inst->gcc->gadcon), inst, + e_drop_handler_add(E_OBJECT(inst->gcc), inst, _ibox_inst_cb_enter, _ibox_inst_cb_move, _ibox_inst_cb_leave, _ibox_inst_cb_drop, drop, 1, x, y, w, h); @@ -820,6 +820,7 @@ Evas_Object *o, *o2; IBox_Icon *ic; Evas_Coord xx, yy; + int x, y; ev = event_info; inst = data; @@ -837,7 +838,8 @@ evas_object_show(o); evas_object_show(o2); evas_object_geometry_get(inst->ibox->o_box, &xx, &yy, NULL, NULL); - ic = _ibox_icon_at_coord(inst->ibox, ev->x + xx, ev->y + yy); + e_box_align_pixel_offset_get(inst->gcc->o_box, &x, &y); + ic = _ibox_icon_at_coord(inst->ibox, ev->x + xx + x, ev->y + yy + y); inst->ibox->ic_drop_before = ic; if (ic) { @@ -869,6 +871,7 @@ ); _ibox_resize_handle(inst->ibox); _gc_orient(inst->gcc); + e_gadcon_client_autoscroll_update(inst->gcc, ev->x, ev->y); } static void @@ -878,12 +881,14 @@ Instance *inst; IBox_Icon *ic; Evas_Coord xx, yy; + int x, y; ev = event_info; inst = data; e_box_unpack(inst->ibox->o_drop); evas_object_geometry_get(inst->ibox->o_box, &xx, &yy, NULL, NULL); - ic = _ibox_icon_at_coord(inst->ibox, ev->x, ev->y); + e_box_align_pixel_offset_get(inst->gcc->o_box, &x, &y); + ic = _ibox_icon_at_coord(inst->ibox, ev->x + xx + x, ev->y + yy + y); inst->ibox->ic_drop_before = ic; if (ic) { @@ -915,6 +920,7 @@ ); _ibox_resize_handle(inst->ibox); _gc_orient(inst->gcc); + e_gadcon_client_autoscroll_update(inst->gcc, ev->x, ev->y); } static void |
From: Enlightenment C. <no...@cv...> - 2006-11-12 11:33:16
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_box.c e_box.h e_dnd.c e_gadcon.c e_gadcon.h Log Message: Start of fix for drag and drop to autoscrolling ibar/ibox. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_box.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -3 -r1.17 -r1.18 --- e_box.c 8 Nov 2006 10:36:34 -0000 1.17 +++ e_box.c 12 Nov 2006 11:32:43 -0000 1.18 @@ -323,6 +323,20 @@ if (sd->frozen <= 0) _e_box_smart_reconfigure(sd); } +/* + * Returns the number of pixels that are hidden on the left/top side. + */ +EAPI void +e_box_align_pixel_offset_get(Evas_Object *obj, int *x, int *y) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if (x) *x = (sd->min.w - sd->w) * (1.0 - sd->align.x); + if (y) *y = (sd->min.h - sd->h) * (1.0 - sd->align.y); +} + /* local subsystem functions */ static E_Box_Item * _e_box_smart_adopt(E_Smart_Data *sd, Evas_Object *obj) =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_box.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- e_box.h 16 Feb 2005 11:21:07 -0000 1.5 +++ e_box.h 12 Nov 2006 11:32:43 -0000 1.6 @@ -26,6 +26,7 @@ EAPI void e_box_max_size_get (Evas_Object *obj, Evas_Coord *maxw, Evas_Coord *maxh); EAPI void e_box_align_get (Evas_Object *obj, double *ax, double *ay); EAPI void e_box_align_set (Evas_Object *obj, double ax, double ay); +EAPI void e_box_align_pixel_offset_get (Evas_Object *obj, int *x, int *y); #endif #endif =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_dnd.c,v retrieving revision 1.51 retrieving revision 1.52 diff -u -3 -r1.51 -r1.52 --- e_dnd.c 16 Oct 2006 10:40:10 -0000 1.51 +++ e_dnd.c 12 Nov 2006 11:32:43 -0000 1.52 @@ -506,6 +506,9 @@ case E_GADCON_TYPE: e_gadcon_canvas_zone_geometry_get((E_Gadcon *)(h->obj), &px, &py, NULL, NULL); break; + case E_GADCON_CLIENT_TYPE: + evas_object_geometry_get(((E_Gadcon_Client *)(h->obj))->o_box, dx, dy, dw, dh); + break; case E_WIN_TYPE: px = ((E_Win *)(h->obj))->x; py = ((E_Win *)(h->obj))->y; @@ -518,7 +521,7 @@ px = ((E_Popup *)(h->obj))->x; py = ((E_Popup *)(h->obj))->y; break; - /* FIXME: add mroe types as needed */ + /* FIXME: add more types as needed */ default: break; } @@ -539,6 +542,9 @@ case E_GADCON_TYPE: hwin = e_gadcon_dnd_window_get((E_Gadcon *)(h->obj)); break; + case E_GADCON_CLIENT_TYPE: + hwin = e_gadcon_dnd_window_get(((E_Gadcon_Client *)(h->obj))->gadcon); + break; case E_WIN_TYPE: hwin = ((E_Win *)(h->obj))->evas_win; break; @@ -548,7 +554,7 @@ case E_POPUP_TYPE: hwin = ((E_Popup *)(h->obj))->evas_win; break; - /* FIXME: add mroe types as needed */ + /* FIXME: add more types as needed */ default: break; } =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_gadcon.c,v retrieving revision 1.49 retrieving revision 1.50 diff -u -3 -r1.49 -r1.50 --- e_gadcon.c 16 Oct 2006 10:40:10 -0000 1.49 +++ e_gadcon.c 12 Nov 2006 11:32:43 -0000 1.50 @@ -1348,6 +1348,7 @@ gcc->scroll_animator = NULL; return 0; } + return 1; } @@ -1356,17 +1357,26 @@ { Evas_Event_Mouse_Move *ev; E_Gadcon_Client *gcc; - Evas_Coord x, y, w, h; + Evas_Coord x, y; ev = event_info; gcc = data; + evas_object_geometry_get(gcc->o_box, &x, &y, NULL, NULL); + e_gadcon_client_autoscroll_update(gcc, ev->cur.output.x - x, ev->cur.output.y - y); +} + +/* + * NOTE: x & y are relative to the o_box of the gadcon. + */ +EAPI void +e_gadcon_client_autoscroll_update(E_Gadcon_Client *gcc, Evas_Coord x, Evas_Coord y) +{ if (gcc->autoscroll) { + Evas_Coord w, h; double d; - evas_object_geometry_get(gcc->o_box, &x, &y, &w, &h); - x = ev->cur.output.x - x; - y = ev->cur.output.y - y; + evas_object_geometry_get(gcc->o_box, NULL, NULL, &w, &h); if (e_box_orientation_get(gcc->o_box)) { if (w > 1) d = (double)x / (double)(w - 1); =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_gadcon.h,v retrieving revision 1.27 retrieving revision 1.28 diff -u -3 -r1.27 -r1.28 --- e_gadcon.h 16 Oct 2006 10:40:10 -0000 1.27 +++ e_gadcon.h 12 Nov 2006 11:32:43 -0000 1.28 @@ -175,6 +175,7 @@ EAPI void e_gadcon_client_min_size_set(E_Gadcon_Client *gcc, Evas_Coord w, Evas_Coord h); EAPI void e_gadcon_client_aspect_set(E_Gadcon_Client *gcc, int w, int h); EAPI void e_gadcon_client_autoscroll_set(E_Gadcon_Client *gcc, int autoscroll); +EAPI void e_gadcon_client_autoscroll_update(E_Gadcon_Client *gcc, int mx, int my); EAPI void e_gadcon_client_resizable_set(E_Gadcon_Client *gcc, int resizable); EAPI void e_gadcon_client_util_menu_items_append(E_Gadcon_Client *gcc, E_Menu *menu, int flags); |
From: Enlightenment C. <no...@cv...> - 2006-11-12 11:33:16
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/modules/ibar Modified Files: e_mod_main.c Log Message: Start of fix for drag and drop to autoscrolling ibar/ibox. =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/ibar/e_mod_main.c,v retrieving revision 1.154 retrieving revision 1.155 diff -u -3 -r1.154 -r1.155 --- e_mod_main.c 8 Oct 2006 05:38:39 -0000 1.154 +++ e_mod_main.c 12 Nov 2006 11:32:44 -0000 1.155 @@ -146,7 +146,7 @@ evas_object_geometry_get(o, &x, &y, &w, &h); inst->drop_handler = - e_drop_handler_add(E_OBJECT(inst->gcc->gadcon), inst, + e_drop_handler_add(E_OBJECT(inst->gcc), inst, _ibar_inst_cb_enter, _ibar_inst_cb_move, _ibar_inst_cb_leave, _ibar_inst_cb_drop, drop, 3, x, y, w, h); @@ -1067,6 +1067,7 @@ Evas_Object *o, *o2; IBar_Icon *ic; Evas_Coord xx, yy; + int x, y; ev = event_info; inst = data; @@ -1084,7 +1085,8 @@ evas_object_show(o); evas_object_show(o2); evas_object_geometry_get(inst->ibar->o_box, &xx, &yy, NULL, NULL); - ic = _ibar_icon_at_coord(inst->ibar, ev->x + xx, ev->y + yy); + e_box_align_pixel_offset_get(inst->gcc->o_box, &x, &y); + ic = _ibar_icon_at_coord(inst->ibar, ev->x + xx + x, ev->y + yy + y); inst->ibar->ic_drop_before = ic; if (ic) { @@ -1116,6 +1118,7 @@ ); _ibar_resize_handle(inst->ibar); _gc_orient(inst->gcc); + e_gadcon_client_autoscroll_update(inst->gcc, ev->x, ev->y); } static void @@ -1125,12 +1128,14 @@ Instance *inst; IBar_Icon *ic; Evas_Coord xx, yy; + int x, y; ev = event_info; inst = data; e_box_unpack(inst->ibar->o_drop); evas_object_geometry_get(inst->ibar->o_box, &xx, &yy, NULL, NULL); - ic = _ibar_icon_at_coord(inst->ibar, ev->x + xx, ev->y + yy); + e_box_align_pixel_offset_get(inst->gcc->o_box, &x, &y); + ic = _ibar_icon_at_coord(inst->ibar, ev->x + xx + x, ev->y + yy + y); inst->ibar->ic_drop_before = ic; if (ic) { @@ -1162,6 +1167,7 @@ ); _ibar_resize_handle(inst->ibar); _gc_orient(inst->gcc); + e_gadcon_client_autoscroll_update(inst->gcc, ev->x, ev->y); } static void |
From: Enlightenment C. <no...@cv...> - 2006-11-13 07:26:52
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_config.c e_config.h e_ipc_handlers.h e_ipc_handlers_list.h e_popup.c Log Message: Add composite support for popups (shelves, menus and exebuf) configurable via enlightenment_remote. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_config.c,v retrieving revision 1.214 retrieving revision 1.215 diff -u -3 -r1.214 -r1.215 --- e_config.c 7 Nov 2006 22:45:49 -0000 1.214 +++ e_config.c 13 Nov 2006 07:26:14 -0000 1.215 @@ -360,6 +360,7 @@ E_CONFIG_VAL(D, T, evas_engine_drag, INT); /**/ E_CONFIG_VAL(D, T, evas_engine_win, INT); /**/ E_CONFIG_VAL(D, T, evas_engine_zone, INT); /**/ + E_CONFIG_VAL(D, T, use_composite, INT); /**/ E_CONFIG_VAL(D, T, language, STR); /**/ E_CONFIG_LIST(D, T, modules, _e_config_module_edd); /**/ E_CONFIG_LIST(D, T, font_fallbacks, _e_config_font_fallback_edd); /**/ @@ -579,6 +580,7 @@ e_config->evas_engine_drag = E_EVAS_ENGINE_DEFAULT; e_config->evas_engine_win = E_EVAS_ENGINE_DEFAULT; e_config->evas_engine_zone = E_EVAS_ENGINE_DEFAULT; + e_config->use_composite = 0; e_config->language = NULL; e_config->window_placement_policy = E_WINDOW_PLACEMENT_SMART; e_config->focus_policy = E_FOCUS_SLOPPY; =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_config.h,v retrieving revision 1.128 retrieving revision 1.129 diff -u -3 -r1.128 -r1.129 --- e_config.h 16 Oct 2006 08:42:22 -0000 1.128 +++ e_config.h 13 Nov 2006 07:26:14 -0000 1.129 @@ -109,6 +109,7 @@ int evas_engine_drag; // NO GUI - maybe remove? int evas_engine_win; // NO GUI - maybe remove? int evas_engine_zone; // NO GUI - maybe remove? + int use_composite; // NO GUI const char *language; // GUI Evas_List *modules; // GUI Evas_List *font_fallbacks; // GUI =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_ipc_handlers.h,v retrieving revision 1.135 retrieving revision 1.136 diff -u -3 -r1.135 -r1.136 --- e_ipc_handlers.h 6 Sep 2006 08:06:19 -0000 1.135 +++ e_ipc_handlers.h 13 Nov 2006 07:26:14 -0000 1.136 @@ -7592,3 +7592,43 @@ END_INT; #endif #undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_USE_COMPOSITE_SET +#if (TYPE == E_REMOTE_OPTIONS) + OP("-use-composite-set", 1, "Set whether composite should be used", 0, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_INT(atoi(params[0]), HDL); +#elif (TYPE == E_WM_IN) + START_INT(val, HDL); + e_config->use_composite = val; + E_CONFIG_LIMIT(e_config->use_composite, 0, 1); + SAVE; + END_INT; +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_USE_COMPOSITE_GET +#if (TYPE == E_REMOTE_OPTIONS) + OP("-use-composite-get", 0, "Get whether composite should be used", 1, HDL) +#elif (TYPE == E_REMOTE_OUT) + REQ_NULL(HDL); +#elif (TYPE == E_WM_IN) + SEND_INT(e_config->use_composite, E_IPC_OP_USE_COMPOSITE_GET_REPLY, HDL); +#elif (TYPE == E_REMOTE_IN) +#endif +#undef HDL + +/****************************************************************************/ +#define HDL E_IPC_OP_USE_COMPOSITE_GET_REPLY +#if (TYPE == E_REMOTE_OPTIONS) +#elif (TYPE == E_REMOTE_OUT) +#elif (TYPE == E_WM_IN) +#elif (TYPE == E_REMOTE_IN) + START_INT(val, HDL); + printf("REPLY: %d\n", val); + END_INT; +#endif +#undef HDL =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_ipc_handlers_list.h,v retrieving revision 1.49 retrieving revision 1.50 diff -u -3 -r1.49 -r1.50 --- e_ipc_handlers_list.h 6 Sep 2006 08:06:19 -0000 1.49 +++ e_ipc_handlers_list.h 13 Nov 2006 07:26:14 -0000 1.50 @@ -389,3 +389,7 @@ #define E_IPC_OP_EDGE_FLIP_DRAGGING_SET 360 #define E_IPC_OP_EDGE_FLIP_DRAGGING_GET 361 #define E_IPC_OP_EDGE_FLIP_DRAGGING_GET_REPLY 362 + +#define E_IPC_OP_USE_COMPOSITE_SET 363 +#define E_IPC_OP_USE_COMPOSITE_GET 364 +#define E_IPC_OP_USE_COMPOSITE_GET_REPLY 365 =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_popup.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- e_popup.c 18 Jun 2006 02:19:05 -0000 1.14 +++ e_popup.c 13 Nov 2006 07:26:14 -0000 1.15 @@ -169,7 +169,14 @@ pop->shaped = 1; else pop->shaped = 0; - ecore_evas_shaped_set(pop->ecore_evas, pop->shaped); + if (e_config->use_composite) + { + ecore_evas_alpha_set(pop->ecore_evas, pop->shaped); + pop->evas_win = ecore_evas_software_x11_window_get(pop->ecore_evas); + e_container_window_raise(pop->zone->container, pop->evas_win, pop->layer); + } + else + ecore_evas_shaped_set(pop->ecore_evas, pop->shaped); } } |
From: Enlightenment C. <no...@cv...> - 2006-11-13 08:30:31
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_ipc_handlers.h Log Message: Fix copy and paste error. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_ipc_handlers.h,v retrieving revision 1.136 retrieving revision 1.137 diff -u -3 -r1.136 -r1.137 --- e_ipc_handlers.h 13 Nov 2006 07:26:14 -0000 1.136 +++ e_ipc_handlers.h 13 Nov 2006 08:30:29 -0000 1.137 @@ -5353,7 +5353,7 @@ #elif (TYPE == E_REMOTE_OUT) REQ_NULL(HDL); #elif (TYPE == E_WM_IN) - SEND_INT(e_config->use_e_cursor, E_IPC_OP_CURSOR_SIZE_GET_REPLY, HDL); + SEND_INT(e_config->use_e_cursor, E_IPC_OP_USE_E_CURSOR_GET_REPLY, HDL); #elif (TYPE == E_REMOTE_IN) #endif #undef HDL |
From: Enlightenment C. <no...@cv...> - 2006-11-13 13:07:54
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_dnd.c Log Message: Fix drag and drop. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_dnd.c,v retrieving revision 1.52 retrieving revision 1.53 diff -u -3 -r1.52 -r1.53 --- e_dnd.c 12 Nov 2006 11:32:43 -0000 1.52 +++ e_dnd.c 13 Nov 2006 13:07:49 -0000 1.53 @@ -508,6 +508,7 @@ break; case E_GADCON_CLIENT_TYPE: evas_object_geometry_get(((E_Gadcon_Client *)(h->obj))->o_box, dx, dy, dw, dh); + e_gadcon_canvas_zone_geometry_get(((E_Gadcon_Client *)(h->obj))->gadcon, &px, &py, NULL, NULL); break; case E_WIN_TYPE: px = ((E_Win *)(h->obj))->x; @@ -911,7 +912,6 @@ if (ev->source == _drag_win) return 1; id = _e_dnd_winid_str_get(ev->win); if (!evas_hash_find(_drop_win_hash, id)) return 1; - printf("Xdnd enter\n"); for (l = _drop_handlers; l; l = l->next) { E_Drop_Handler *h; |
From: Enlightenment C. <no...@cv...> - 2006-11-15 02:49:56
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/modules/pager Modified Files: e_mod_main.c Log Message: Fix pager autoscroll dnd issues. =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/pager/e_mod_main.c,v retrieving revision 1.192 retrieving revision 1.193 diff -u -3 -r1.192 -r1.193 --- e_mod_main.c 24 Oct 2006 17:22:59 -0000 1.192 +++ e_mod_main.c 15 Nov 2006 02:49:49 -0000 1.193 @@ -174,7 +174,7 @@ evas_object_geometry_get(o, &x, &y, &w, &h); inst->drop_handler = - e_drop_handler_add(E_OBJECT(inst->gcc->gadcon), inst, + e_drop_handler_add(E_OBJECT(inst->gcc), inst, _pager_inst_cb_enter, _pager_inst_cb_move, _pager_inst_cb_leave, _pager_inst_cb_drop, drop, 2, x, y, w, h); @@ -1520,11 +1520,13 @@ Pager_Desk *pd, *pd2; Evas_List *l; Evas_Coord xx, yy; + int x, y; ev = event_info; inst = data; evas_object_geometry_get(inst->pager->o_table, &xx, &yy, NULL, NULL); - pd = _pager_desk_at_coord(inst->pager, ev->x + xx, ev->y + yy); + e_box_align_pixel_offset_get(inst->gcc->o_box, &x, &y); + pd = _pager_desk_at_coord(inst->pager, ev->x + xx + x, ev->y + yy + y); /* FIXME: keep track which one its over so we only emit drag in/out * when it actually goes form one desk to another */ for (l = inst->pager->desks; l; l = l->next) @@ -1535,6 +1537,7 @@ else edje_object_signal_emit(pd2->o_desk, "e,action,drag,out", "e"); } + e_gadcon_client_autoscroll_update(inst->gcc, ev->x, ev->y); } static void @@ -1568,12 +1571,14 @@ int dx = 0, dy = 0; Pager_Win *pw = NULL; Evas_Coord xx, yy; + int x, y; ev = event_info; inst = data; evas_object_geometry_get(inst->pager->o_table, &xx, &yy, NULL, NULL); - pd = _pager_desk_at_coord(inst->pager, ev->x + xx, ev->y + yy); + e_box_align_pixel_offset_get(inst->gcc->o_box, &x, &y); + pd = _pager_desk_at_coord(inst->pager, ev->x + xx + x, ev->y + yy + y); if (pd) { if (!strcmp(type, "enlightenment/pager_win")) @@ -1608,8 +1613,8 @@ if ((!pw) || ((pw) && (!pw->drag.no_place))) { e_layout_coord_canvas_to_virtual(pd->o_layout, - ev->x + xx + dx, - ev->y + yy + dy, + ev->x + xx + x + dx, + ev->y + yy + y + dy, &nx, &ny); e_border_move(bd, nx + pd->desk->zone->x, ny + pd->desk->zone->y); } |
From: Enlightenment C. <no...@cv...> - 2006-11-15 06:24:32
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/modules/pager Modified Files: e_mod_main.c Log Message: More fixes of the autoscroll/drag and drop behaviour for gadgets in shelves. Added callback to allow the current drop position to be dynamically updated as the gadget scrolling is animated. =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/pager/e_mod_main.c,v retrieving revision 1.193 retrieving revision 1.194 diff -u -3 -r1.193 -r1.194 --- e_mod_main.c 15 Nov 2006 02:49:49 -0000 1.193 +++ e_mod_main.c 15 Nov 2006 06:24:30 -0000 1.194 @@ -55,6 +55,7 @@ E_Drag *drag; unsigned char dragging : 1; unsigned char just_dragged : 1; + Evas_Coord dnd_x, dnd_y; }; struct _Pager_Desk @@ -124,6 +125,8 @@ static void _pager_inst_cb_move(void *data, const char *type, void *event_info); static void _pager_inst_cb_leave(void *data, const char *type, void *event_info); static void _pager_inst_cb_drop(void *data, const char *type, void *event_info); +static void _pager_inst_cb_scroll(void *data); +static void _pager_update_drop_position(Instance *inst, Evas_Coord x, Evas_Coord y); static void _pager_desk_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _pager_desk_cb_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _pager_desk_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info); @@ -1503,30 +1506,27 @@ } static void -_pager_inst_cb_enter(void *data, const char *type, void *event_info) +_pager_inst_cb_scroll(void *data) { - E_Event_Dnd_Enter *ev; - Instance *inst; + Instance * inst; - ev = event_info; inst = data; + _pager_update_drop_position(inst, inst->pager->dnd_x, inst->pager->dnd_y); } static void -_pager_inst_cb_move(void *data, const char *type, void *event_info) +_pager_update_drop_position(Instance *inst, Evas_Coord x, Evas_Coord y) { - E_Event_Dnd_Move *ev; - Instance *inst; Pager_Desk *pd, *pd2; - Evas_List *l; Evas_Coord xx, yy; - int x, y; + int ox, oy; + Evas_List *l; - ev = event_info; - inst = data; + inst->pager->dnd_x = x; + inst->pager->dnd_y = y; evas_object_geometry_get(inst->pager->o_table, &xx, &yy, NULL, NULL); - e_box_align_pixel_offset_get(inst->gcc->o_box, &x, &y); - pd = _pager_desk_at_coord(inst->pager, ev->x + xx + x, ev->y + yy + y); + e_box_align_pixel_offset_get(inst->gcc->o_box, &ox, &oy); + pd = _pager_desk_at_coord(inst->pager, x + xx + ox, y + yy + oy); /* FIXME: keep track which one its over so we only emit drag in/out * when it actually goes form one desk to another */ for (l = inst->pager->desks; l; l = l->next) @@ -1537,6 +1537,30 @@ else edje_object_signal_emit(pd2->o_desk, "e,action,drag,out", "e"); } +} + +static void +_pager_inst_cb_enter(void *data, const char *type, void *event_info) +{ + E_Event_Dnd_Enter *ev; + Instance *inst; + + ev = event_info; + inst = data; + _pager_update_drop_position(inst, ev->x, ev->y); + e_gadcon_client_autoscroll_cb_set(inst->gcc, _pager_inst_cb_scroll, inst); + e_gadcon_client_autoscroll_update(inst->gcc, ev->x, ev->y); +} + +static void +_pager_inst_cb_move(void *data, const char *type, void *event_info) +{ + E_Event_Dnd_Move *ev; + Instance *inst; + + ev = event_info; + inst = data; + _pager_update_drop_position(inst, ev->x, ev->y); e_gadcon_client_autoscroll_update(inst->gcc, ev->x, ev->y); } @@ -1558,6 +1582,8 @@ pd = l->data; edje_object_signal_emit(pd->o_desk, "e,action,drag,out", "e"); } + + e_gadcon_client_autoscroll_cb_set(inst->gcc, NULL, NULL); } static void @@ -1627,6 +1653,8 @@ pd = l->data; edje_object_signal_emit(pd->o_desk, "e,action,drag,out", "e"); } + + e_gadcon_client_autoscroll_cb_set(inst->gcc, NULL, NULL); } static void |
From: Enlightenment C. <no...@cv...> - 2006-11-15 06:25:02
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/modules/ibar Modified Files: e_mod_main.c Log Message: More fixes of the autoscroll/drag and drop behaviour for gadgets in shelves. Added callback to allow the current drop position to be dynamically updated as the gadget scrolling is animated. =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/ibar/e_mod_main.c,v retrieving revision 1.155 retrieving revision 1.156 diff -u -3 -r1.155 -r1.156 --- e_mod_main.c 12 Nov 2006 11:32:44 -0000 1.155 +++ e_mod_main.c 15 Nov 2006 06:24:30 -0000 1.156 @@ -56,6 +56,7 @@ Evas_List *icons; int show_label; int eap_label; + Evas_Coord dnd_x, dnd_y; }; struct _IBar_Icon @@ -110,6 +111,8 @@ static void _ibar_inst_cb_move(void *data, const char *type, void *event_info); static void _ibar_inst_cb_leave(void *data, const char *type, void *event_info); static void _ibar_inst_cb_drop(void *data, const char *type, void *event_info); +static void _ibar_drop_position_update(Instance *inst, Evas_Coord x, Evas_Coord y); +static void _ibar_inst_cb_scroll(void *data); static E_Config_DD *conf_edd = NULL; static E_Config_DD *conf_item_edd = NULL; @@ -1060,33 +1063,31 @@ } static void -_ibar_inst_cb_enter(void *data, const char *type, void *event_info) +_ibar_inst_cb_scroll(void *data) { - E_Event_Dnd_Enter *ev; Instance *inst; - Evas_Object *o, *o2; - IBar_Icon *ic; - Evas_Coord xx, yy; - int x, y; - - ev = event_info; + + /* Update the position of the dnd to handle for autoscrolling + * gadgets. */ inst = data; - o = edje_object_add(evas_object_evas_get(inst->ibar->o_box)); - inst->ibar->o_drop = o; - o2 = edje_object_add(evas_object_evas_get(inst->ibar->o_box)); - inst->ibar->o_drop_over = o2; - evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE, _ibar_cb_drop_move, inst->ibar); - evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, _ibar_cb_drop_resize, inst->ibar); - e_theme_edje_object_set(o, "base/theme/modules/ibar", - "e/modules/ibar/drop"); - e_theme_edje_object_set(o2, "base/theme/modules/ibar", - "e/modules/ibar/drop_overlay"); - evas_object_layer_set(o2, 19999); - evas_object_show(o); - evas_object_show(o2); + _ibar_drop_position_update(inst, inst->ibar->dnd_x, inst->ibar->dnd_y); +} + +static void +_ibar_drop_position_update(Instance *inst, Evas_Coord x, Evas_Coord y) +{ + Evas_Coord xx, yy; + int ox, oy; + IBar_Icon *ic; + + inst->ibar->dnd_x = x; + inst->ibar->dnd_y = y; + + if (inst->ibar->o_drop) + e_box_unpack(inst->ibar->o_drop); evas_object_geometry_get(inst->ibar->o_box, &xx, &yy, NULL, NULL); - e_box_align_pixel_offset_get(inst->gcc->o_box, &x, &y); - ic = _ibar_icon_at_coord(inst->ibar, ev->x + xx + x, ev->y + yy + y); + e_box_align_pixel_offset_get(inst->gcc->o_box, &ox, &oy); + ic = _ibar_icon_at_coord(inst->ibar, x + xx + ox, y + yy + oy); inst->ibar->ic_drop_before = ic; if (ic) { @@ -1096,11 +1097,11 @@ evas_object_geometry_get(ic->o_holder, &ix, &iy, &iw, &ih); if (e_box_orientation_get(inst->ibar->o_box)) { - if ((ev->x + xx) < (ix + (iw / 2))) before = 1; + if ((x + xx) < (ix + (iw / 2))) before = 1; } else { - if ((ev->y + yy) < (iy + (ih / 2))) before = 1; + if ((y + yy) < (iy + (ih / 2))) before = 1; } if (before) e_box_pack_before(inst->ibar->o_box, inst->ibar->o_drop, ic->o_holder); @@ -1108,8 +1109,8 @@ e_box_pack_after(inst->ibar->o_box, inst->ibar->o_drop, ic->o_holder); inst->ibar->drop_before = before; } - else e_box_pack_end(inst->ibar->o_box, o); - e_box_pack_options_set(o, + else e_box_pack_end(inst->ibar->o_box, inst->ibar->o_drop); + e_box_pack_options_set(inst->ibar->o_drop, 1, 1, /* fill */ 0, 0, /* expand */ 0.5, 0.5, /* align */ @@ -1118,6 +1119,33 @@ ); _ibar_resize_handle(inst->ibar); _gc_orient(inst->gcc); +} + +static void +_ibar_inst_cb_enter(void *data, const char *type, void *event_info) +{ + E_Event_Dnd_Enter *ev; + Instance *inst; + Evas_Object *o, *o2; + + ev = event_info; + inst = data; + o = edje_object_add(evas_object_evas_get(inst->ibar->o_box)); + inst->ibar->o_drop = o; + o2 = edje_object_add(evas_object_evas_get(inst->ibar->o_box)); + inst->ibar->o_drop_over = o2; + evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE, _ibar_cb_drop_move, inst->ibar); + evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, _ibar_cb_drop_resize, inst->ibar); + e_theme_edje_object_set(o, "base/theme/modules/ibar", + "e/modules/ibar/drop"); + e_theme_edje_object_set(o2, "base/theme/modules/ibar", + "e/modules/ibar/drop_overlay"); + evas_object_layer_set(o2, 19999); + evas_object_show(o); + evas_object_show(o2); + + _ibar_drop_position_update(inst, ev->x, ev->y); + e_gadcon_client_autoscroll_cb_set(inst->gcc, _ibar_inst_cb_scroll, inst); e_gadcon_client_autoscroll_update(inst->gcc, ev->x, ev->y); } @@ -1129,44 +1157,12 @@ IBar_Icon *ic; Evas_Coord xx, yy; int x, y; + int wx, wy; ev = event_info; inst = data; - e_box_unpack(inst->ibar->o_drop); - evas_object_geometry_get(inst->ibar->o_box, &xx, &yy, NULL, NULL); - e_box_align_pixel_offset_get(inst->gcc->o_box, &x, &y); - ic = _ibar_icon_at_coord(inst->ibar, ev->x + xx + x, ev->y + yy + y); - inst->ibar->ic_drop_before = ic; - if (ic) - { - Evas_Coord ix, iy, iw, ih; - int before = 0; - - evas_object_geometry_get(ic->o_holder, &ix, &iy, &iw, &ih); - if (e_box_orientation_get(inst->ibar->o_box)) - { - if ((ev->x + xx) < (ix + (iw / 2))) before = 1; - } - else - { - if ((ev->y + yy) < (iy + (ih / 2))) before = 1; - } - if (before) - e_box_pack_before(inst->ibar->o_box, inst->ibar->o_drop, ic->o_holder); - else - e_box_pack_after(inst->ibar->o_box, inst->ibar->o_drop, ic->o_holder); - inst->ibar->drop_before = before; - } - else e_box_pack_end(inst->ibar->o_box, inst->ibar->o_drop); - e_box_pack_options_set(inst->ibar->o_drop, - 1, 1, /* fill */ - 0, 0, /* expand */ - 0.5, 0.5, /* align */ - 1, 1, /* min */ - -1, -1 /* max */ - ); - _ibar_resize_handle(inst->ibar); - _gc_orient(inst->gcc); + + _ibar_drop_position_update(inst, ev->x, ev->y); e_gadcon_client_autoscroll_update(inst->gcc, ev->x, ev->y); } @@ -1184,6 +1180,7 @@ evas_object_del(inst->ibar->o_drop_over); inst->ibar->o_drop_over = NULL; _ibar_resize_handle(inst->ibar); + e_gadcon_client_autoscroll_cb_set(inst->gcc, NULL, NULL); _gc_orient(inst->gcc); } @@ -1198,6 +1195,7 @@ ev = event_info; inst = data; + if (!strcmp(type, "enlightenment/eapp")) { app = ev->data; @@ -1282,9 +1280,11 @@ inst->ibar->o_drop = NULL; evas_object_del(inst->ibar->o_drop_over); inst->ibar->o_drop_over = NULL; + e_gadcon_client_autoscroll_cb_set(inst->gcc, NULL, NULL); _ibar_empty_handle(inst->ibar); _ibar_resize_handle(inst->ibar); _gc_orient(inst->gcc); + } /***************************************************************************/ |
From: Enlightenment C. <no...@cv...> - 2006-11-15 06:25:02
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/modules/ibox Modified Files: e_mod_main.c Log Message: More fixes of the autoscroll/drag and drop behaviour for gadgets in shelves. Added callback to allow the current drop position to be dynamically updated as the gadget scrolling is animated. =================================================================== RCS file: /cvs/e/e17/apps/e/src/modules/ibox/e_mod_main.c,v retrieving revision 1.72 retrieving revision 1.73 diff -u -3 -r1.72 -r1.73 --- e_mod_main.c 12 Nov 2006 11:32:44 -0000 1.72 +++ e_mod_main.c 15 Nov 2006 06:24:30 -0000 1.73 @@ -57,6 +57,7 @@ int show_desk; int icon_label; E_Zone *zone; + Evas_Coord dnd_x, dnd_y; }; struct _IBox_Icon @@ -108,6 +109,8 @@ static void _ibox_inst_cb_move(void *data, const char *type, void *event_info); static void _ibox_inst_cb_leave(void *data, const char *type, void *event_info); static void _ibox_inst_cb_drop(void *data, const char *type, void *event_info); +static void _ibox_drop_position_update(Instance *inst, Evas_Coord x, Evas_Coord y); +static void _ibox_inst_cb_scroll(void *data); static int _ibox_cb_event_border_add(void *data, int type, void *event); static int _ibox_cb_event_border_remove(void *data, int type, void *event); static int _ibox_cb_event_border_iconify(void *data, int type, void *event); @@ -813,33 +816,31 @@ } static void -_ibox_inst_cb_enter(void *data, const char *type, void *event_info) +_ibox_inst_cb_scroll(void *data) { - E_Event_Dnd_Enter *ev; Instance *inst; - Evas_Object *o, *o2; - IBox_Icon *ic; - Evas_Coord xx, yy; - int x, y; - - ev = event_info; + + /* Update the position of the dnd to handle for autoscrolling + * gadgets. */ inst = data; - o = edje_object_add(evas_object_evas_get(inst->ibox->o_box)); - inst->ibox->o_drop = o; - o2 = edje_object_add(evas_object_evas_get(inst->ibox->o_box)); - inst->ibox->o_drop_over = o2; - evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE, _ibox_cb_drop_move, inst->ibox); - evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, _ibox_cb_drop_resize, inst->ibox); - e_theme_edje_object_set(o, "base/theme/modules/ibox", - "e/modules/ibox/drop"); - e_theme_edje_object_set(o2, "base/theme/modules/ibox", - "e/modules/ibox/drop_overlay"); - evas_object_layer_set(o2, 19999); - evas_object_show(o); - evas_object_show(o2); + _ibox_drop_position_update(inst, inst->ibox->dnd_x, inst->ibox->dnd_y); +} + +static void +_ibox_drop_position_update(Instance *inst, Evas_Coord x, Evas_Coord y) +{ + Evas_Coord xx, yy; + int ox, oy; + IBox_Icon *ic; + + inst->ibox->dnd_x = x; + inst->ibox->dnd_y = y; + + if (inst->ibox->o_drop) + e_box_unpack(inst->ibox->o_drop); evas_object_geometry_get(inst->ibox->o_box, &xx, &yy, NULL, NULL); - e_box_align_pixel_offset_get(inst->gcc->o_box, &x, &y); - ic = _ibox_icon_at_coord(inst->ibox, ev->x + xx + x, ev->y + yy + y); + e_box_align_pixel_offset_get(inst->gcc->o_box, &ox, &oy); + ic = _ibox_icon_at_coord(inst->ibox, x + xx + ox, y + yy + oy); inst->ibox->ic_drop_before = ic; if (ic) { @@ -849,11 +850,11 @@ evas_object_geometry_get(ic->o_holder, &ix, &iy, &iw, &ih); if (e_box_orientation_get(inst->ibox->o_box)) { - if ((ev->x + xx) < (ix + (iw / 2))) before = 1; + if ((x + xx) < (ix + (iw / 2))) before = 1; } else { - if ((ev->y + yy) < (iy + (ih / 2))) before = 1; + if ((y + yy) < (iy + (ih / 2))) before = 1; } if (before) e_box_pack_before(inst->ibox->o_box, inst->ibox->o_drop, ic->o_holder); @@ -861,8 +862,8 @@ e_box_pack_after(inst->ibox->o_box, inst->ibox->o_drop, ic->o_holder); inst->ibox->drop_before = before; } - else e_box_pack_end(inst->ibox->o_box, o); - e_box_pack_options_set(o, + else e_box_pack_end(inst->ibox->o_box, inst->ibox->o_drop); + e_box_pack_options_set(inst->ibox->o_drop, 1, 1, /* fill */ 0, 0, /* expand */ 0.5, 0.5, /* align */ @@ -871,6 +872,35 @@ ); _ibox_resize_handle(inst->ibox); _gc_orient(inst->gcc); +} + +static void +_ibox_inst_cb_enter(void *data, const char *type, void *event_info) +{ + E_Event_Dnd_Enter *ev; + Instance *inst; + Evas_Object *o, *o2; + IBox_Icon *ic; + Evas_Coord xx, yy; + int x, y; + + ev = event_info; + inst = data; + o = edje_object_add(evas_object_evas_get(inst->ibox->o_box)); + inst->ibox->o_drop = o; + o2 = edje_object_add(evas_object_evas_get(inst->ibox->o_box)); + inst->ibox->o_drop_over = o2; + evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE, _ibox_cb_drop_move, inst->ibox); + evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, _ibox_cb_drop_resize, inst->ibox); + e_theme_edje_object_set(o, "base/theme/modules/ibox", + "e/modules/ibox/drop"); + e_theme_edje_object_set(o2, "base/theme/modules/ibox", + "e/modules/ibox/drop_overlay"); + evas_object_layer_set(o2, 19999); + evas_object_show(o); + evas_object_show(o2); + _ibox_drop_position_update(inst, ev->x, ev->y); + e_gadcon_client_autoscroll_cb_set(inst->gcc, _ibox_inst_cb_scroll, inst); e_gadcon_client_autoscroll_update(inst->gcc, ev->x, ev->y); } @@ -885,41 +915,7 @@ ev = event_info; inst = data; - e_box_unpack(inst->ibox->o_drop); - evas_object_geometry_get(inst->ibox->o_box, &xx, &yy, NULL, NULL); - e_box_align_pixel_offset_get(inst->gcc->o_box, &x, &y); - ic = _ibox_icon_at_coord(inst->ibox, ev->x + xx + x, ev->y + yy + y); - inst->ibox->ic_drop_before = ic; - if (ic) - { - Evas_Coord ix, iy, iw, ih; - int before = 0; - - evas_object_geometry_get(ic->o_holder, &ix, &iy, &iw, &ih); - if (e_box_orientation_get(inst->ibox->o_box)) - { - if ((ev->x + xx) < (ix + (iw / 2))) before = 1; - } - else - { - if ((ev->y + yy) < (iy + (ih / 2))) before = 1; - } - if (before) - e_box_pack_before(inst->ibox->o_box, inst->ibox->o_drop, ic->o_holder); - else - e_box_pack_after(inst->ibox->o_box, inst->ibox->o_drop, ic->o_holder); - inst->ibox->drop_before = before; - } - else e_box_pack_end(inst->ibox->o_box, inst->ibox->o_drop); - e_box_pack_options_set(inst->ibox->o_drop, - 1, 1, /* fill */ - 0, 0, /* expand */ - 0.5, 0.5, /* align */ - 1, 1, /* min */ - -1, -1 /* max */ - ); - _ibox_resize_handle(inst->ibox); - _gc_orient(inst->gcc); + _ibox_drop_position_update(inst, ev->x, ev->y); e_gadcon_client_autoscroll_update(inst->gcc, ev->x, ev->y); } @@ -936,6 +932,7 @@ inst->ibox->o_drop = NULL; evas_object_del(inst->ibox->o_drop_over); inst->ibox->o_drop_over = NULL; + e_gadcon_client_autoscroll_cb_set(inst->gcc, NULL, NULL); _ibox_resize_handle(inst->ibox); _gc_orient(inst->gcc); } @@ -1002,6 +999,7 @@ evas_object_del(inst->ibox->o_drop_over); inst->ibox->o_drop_over = NULL; _ibox_empty_handle(b); + e_gadcon_client_autoscroll_cb_set(inst->gcc, NULL, NULL); _ibox_resize_handle(inst->ibox); _gc_orient(inst->gcc); } |
From: Enlightenment C. <no...@cv...> - 2006-11-15 06:25:05
|
Enlightenment CVS committal Author : metrics Project : e17 Module : apps/e Dir : e17/apps/e/src/bin Modified Files: e_gadcon.c e_gadcon.h Log Message: More fixes of the autoscroll/drag and drop behaviour for gadgets in shelves. Added callback to allow the current drop position to be dynamically updated as the gadget scrolling is animated. =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_gadcon.c,v retrieving revision 1.50 retrieving revision 1.51 diff -u -3 -r1.50 -r1.51 --- e_gadcon.c 12 Nov 2006 11:32:43 -0000 1.50 +++ e_gadcon.c 15 Nov 2006 06:24:30 -0000 1.51 @@ -1349,6 +1349,9 @@ return 0; } + if (gcc->scroll_cb.func) + gcc->scroll_cb.func(gcc->scroll_cb.data); + return 1; } @@ -1395,6 +1398,13 @@ gcc->scroll_animator = ecore_animator_add(_e_gadcon_cb_client_scroll_animator, gcc); gcc->scroll_wanted = d; } +} + +EAPI void +e_gadcon_client_autoscroll_cb_set(E_Gadcon_Client *gcc, void (*func)(void *data), void *data) +{ + gcc->scroll_cb.func = func; + gcc->scroll_cb.data = data; } static void =================================================================== RCS file: /cvs/e/e17/apps/e/src/bin/e_gadcon.h,v retrieving revision 1.28 retrieving revision 1.29 diff -u -3 -r1.28 -r1.29 --- e_gadcon.h 12 Nov 2006 11:32:43 -0000 1.28 +++ e_gadcon.h 15 Nov 2006 06:24:30 -0000 1.29 @@ -131,6 +131,11 @@ Ecore_Animator *scroll_animator; double scroll_pos; double scroll_wanted; + struct { + void *data; + void (*func) (void *data); + } scroll_cb; + E_Menu *menu; const char *style; unsigned char autoscroll : 1; @@ -139,6 +144,7 @@ unsigned char moving : 1; unsigned char resizing : 1; Evas_Coord dx, dy; + }; EAPI int e_gadcon_init(void); @@ -176,6 +182,7 @@ EAPI void e_gadcon_client_aspect_set(E_Gadcon_Client *gcc, int w, int h); EAPI void e_gadcon_client_autoscroll_set(E_Gadcon_Client *gcc, int autoscroll); EAPI void e_gadcon_client_autoscroll_update(E_Gadcon_Client *gcc, int mx, int my); +EAPI void e_gadcon_client_autoscroll_cb_set(E_Gadcon_Client *gcc, void (*func)(void *data), void *data); EAPI void e_gadcon_client_resizable_set(E_Gadcon_Client *gcc, int resizable); EAPI void e_gadcon_client_util_menu_items_append(E_Gadcon_Client *gcc, E_Menu *menu, int flags); |