From 18bec70092b2963f582b12767f5ed8fe5d9e7041 Mon Sep 17 00:00:00 2001 From: sebastid Date: Sun, 14 Aug 2005 22:22:17 +0000 Subject: [PATCH] Recalc border on font change. Don't call an iterator next. SVN revision: 16166 --- TODO | 1 - src/bin/e_border.c | 41 +++++++++++++++++++++++++++++++++++++++++ src/bin/e_border.h | 1 + src/bin/e_font.c | 30 +++++++++++++++++++----------- 4 files changed, 61 insertions(+), 12 deletions(-) diff --git a/TODO b/TODO index 7be5fab73..62d9b244f 100644 --- a/TODO +++ b/TODO @@ -15,7 +15,6 @@ Some of the things (in very short form) that need to be done to E17... desktop switches for the desk a fullscreened window is on, nor allow windows to be raised above the fs win etc. ie the app must seem to be entirely fs for that zone. -* BUG: on font apply borders need to be adjusted for size changes * BUG: if i downclock my machine to like 400mhz (make it sloooow) or load it down with lots of load and then hold down ctrl+alt+right for a while windows on desktops vanish... there must be a race condition with a diff --git a/src/bin/e_border.c b/src/bin/e_border.c index f776fd7e4..0d99dc845 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -1919,6 +1919,47 @@ e_border_resize_cancel(void) } } +void +e_border_frame_recalc(E_Border *bd) +{ + Evas_Coord cx, cy, cw, ch; + + if (!bd->bg_object) return; + + bd->w -= (bd->client_inset.l + bd->client_inset.r); + bd->h -= (bd->client_inset.t + bd->client_inset.b); + + evas_object_resize(bd->bg_object, 1000, 1000); + edje_object_calc_force(bd->bg_object); + edje_object_part_geometry_get(bd->bg_object, "client", &cx, &cy, &cw, &ch); + bd->client_inset.l = cx; + bd->client_inset.r = 1000 - (cx + cw); + bd->client_inset.t = cy; + bd->client_inset.b = 1000 - (cy + ch); + ecore_x_netwm_frame_size_set(bd->client.win, + bd->client_inset.l, bd->client_inset.r, + bd->client_inset.t, bd->client_inset.b); + ecore_x_e_frame_size_set(bd->client.win, + bd->client_inset.l, bd->client_inset.r, + bd->client_inset.t, bd->client_inset.b); + + bd->w += (bd->client_inset.l + bd->client_inset.r); + bd->h += (bd->client_inset.t + bd->client_inset.b); + + bd->changed = 1; + bd->changes.size = 1; + if ((bd->shaped) || (bd->client.shaped)) + { + bd->need_shape_merge = 1; + bd->need_shape_export = 1; + } + ecore_x_icccm_move_resize_send(bd->client.win, + bd->x + bd->client_inset.l, + bd->y + bd->client_inset.t, + bd->client.w, + bd->client.h); +} + Evas_List * e_border_immortal_windows_get(void) { diff --git a/src/bin/e_border.h b/src/bin/e_border.h index 917436f37..723c04584 100644 --- a/src/bin/e_border.h +++ b/src/bin/e_border.h @@ -519,6 +519,7 @@ EAPI Evas_List *e_border_lost_windows_get(E_Zone *zone); EAPI void e_border_ping(E_Border *bd); EAPI void e_border_move_cancel(void); EAPI void e_border_resize_cancel(void); +EAPI void e_border_frame_recalc(E_Border *bd); EAPI Evas_List *e_border_immortal_windows_get(void); extern EAPI int E_EVENT_BORDER_RESIZE; diff --git a/src/bin/e_font.c b/src/bin/e_font.c index a3bc68ec1..723392f62 100644 --- a/src/bin/e_font.c +++ b/src/bin/e_font.c @@ -30,29 +30,27 @@ void e_font_apply(void) { char buf[1024]; - Evas_List *next; + Evas_List *l; E_Font_Fallback *eff; - E_Font_Default *efd; int blen, len; /* setup edje fallback list */ blen = sizeof(buf) - 1; buf[0] = 0; buf[blen] = 0; - next = e_config->font_fallbacks; - if (next) + l = e_config->font_fallbacks; + if (l) { - eff = evas_list_data(next); + eff = evas_list_data(l); len = strlen(eff->name); if (len < blen) { strcpy(buf, eff->name); blen -= len; } - next = evas_list_next(next); - while (next) + for (l = evas_list_next(l); l; l = l->next) { - eff = evas_list_data(next); + eff = evas_list_data(l); len = 1; if (len < blen) { @@ -65,7 +63,6 @@ e_font_apply(void) strcat(buf, eff->name); blen -= len; } - next = evas_list_next(next); } edje_fontset_append_set(buf); } @@ -73,11 +70,22 @@ e_font_apply(void) edje_fontset_append_set(NULL); /* setup edje text classes */ - for (next = e_config->font_defaults; next; next = next->next) + for (l = e_config->font_defaults; l; l = l->next) { - efd = evas_list_data(next); + E_Font_Default *efd; + + efd = evas_list_data(l); edje_text_class_set(efd->text_class, efd->font, efd->size); } + + /* Update borders */ + for (l = e_border_clients_get(); l; l = l->next) + { + E_Border *bd; + + bd = l->data; + e_border_frame_recalc(bd); + } } Evas_List *