Thank you to anyone who has already donated - your generous donations helped make three months of treatment possible.
My brother Nate continues to fight stage IV Hodgkin's lymphoma. He's just 31, with a wife and baby girl. They have no active income (since he's been unable to return to work), no insurance, and cannot afford the treatment he needs. Nate and his family need your help. Please consider a donation, every dollar helps. Thanks.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
diff --git a/apps/filetree.c b/apps/filetree.c index 945b9ac..6b56c80 100644 int ft_enter(struct tree_context* c) splash(0, ID2P(LANG_WAIT)); if (!settings_load_config(buf,true)) break; - /* do both steps seperately so that the redrawing after theme - * changing is independant of whether the theme has a custom ui - * vp or not */ - send_event(GUI_EVENT_REFRESH, NULL); - /* for the statusbar */ - send_event(GUI_EVENT_ACTIONUPDATE, (void*)true); - tree_drawlists(); + + /* redraw the UI in case the user setting changed apparence */ + send_event(GUI_EVENT_REFRESH, tree_drawlists); splash(HZ, ID2P(LANG_SETTINGS_LOADED)); break; diff --git a/apps/gui/skin_engine/skin_display.c b/apps/gui/skin_engine/skin_display.c index 460101a..1e1b400 100644 #include "wps_internals.h" #include "skin_engine.h" #include "statusbar-skinned.h" +#include "appevents.h" static bool skin_redraw(struct gui_wps *gwps, unsigned refresh_mode); - -/* TODO: maybe move this whole function into wps.c instead ? */ -bool gui_wps_display(struct gui_wps *gwps) -{ - struct screen *display = gwps->display; - - /* Update the values in the first (default) viewport - in case the user - has modified the statusbar or colour settings */ -#if LCD_DEPTH > 1 - if (display->depth > 1) - { - struct viewport *vp = &find_viewport(VP_DEFAULT_LABEL, gwps->data)->vp; - vp->fg_pattern = display->get_foreground(); - vp->bg_pattern = display->get_background(); - } -#endif - display->backdrop_show(BACKDROP_SKIN_WPS); - return skin_redraw(gwps, WPS_REFRESH_ALL); -} - /* update a skinned screen, update_type is WPS_REFRESH_* values. * Usually it should only be WPS_REFRESH_NON_STATIC * A full update will be done if required (state.do_full_update == true) diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c index 0a2630c..8cc6c99 100644 static struct viewport custom_vp[NB_SCREENS]; /* callbacks for GUI_EVENT_* events */ static void viewportmanager_ui_vp_changed(void *param); +static void viewportmanager_call_draw_func(void *param); static void statusbar_toggled(void* param); static unsigned viewport_init_ui_vp(void); #endif void viewportmanager_theme_changed(const int which) event_add |= (statusbar_position(i) == STATUSBAR_CUSTOM); } + /* add one of those to ensure the draw function is called always */ if (event_add) + { + DEBUGF("ya\n"); add_event(GUI_EVENT_REFRESH, false, viewportmanager_ui_vp_changed); + remove_event(GUI_EVENT_REFRESH, viewportmanager_call_draw_func); + } else + { + DEBUGF("na\n"); + add_event(GUI_EVENT_REFRESH, false, viewportmanager_call_draw_func); remove_event(GUI_EVENT_REFRESH, viewportmanager_ui_vp_changed); + } send_event(GUI_EVENT_THEME_CHANGED, NULL); } +/* + * simply calls a function that draws stuff, this exists to ensure the + * drawing function call in the GUI_EVENT_REFRESH event + * + * param should be 'void func(void)' */ +static void viewportmanager_call_draw_func(void *param) +{ + /* cast param to a function */ + void (*draw_func)(void) = ((void(*)(void))param); + /* call the passed function which will redraw the content of + * the current screen */ + if (draw_func != NULL) + draw_func(); +} + static void viewportmanager_ui_vp_changed(void *param) { /* if the user changed the theme, we need to initiate a full redraw */ int i; - /* cast param to a function */ - void (*draw_func)(void) = ((void(*)(void))param); /* start with clearing the screen */ FOR_NB_SCREENS(i) screens[i].clear_display(); /* redraw the statusbar if it was enabled */ send_event(GUI_EVENT_ACTIONUPDATE, (void*)true); - /* call the passed function which will redraw the content of - * the current screen */ - if (draw_func != NULL) - draw_func(); + /* call redraw function */ + viewportmanager_call_draw_func(param); FOR_NB_SCREENS(i) screens[i].update(); } diff --git a/apps/gui/wps.c b/apps/gui/wps.c index cc6bd60..29106dc 100644 static void gwps_leave_wps(void) send_event(GUI_EVENT_REFRESH, NULL); } +/* TODO: maybe move this whole function into wps.c instead ? */ +static void gwps_enter_wps(void) +{ + int i; + FOR_NB_SCREENS(i) + { + struct gui_wps *gwps = &gui_wps[i]; + struct screen *display = gwps->display; + + display->stop_scroll(); + /* Update the values in the first (default) viewport - in case the user + has modified the statusbar or colour settings */ +#if LCD_DEPTH > 1 + if (display->depth > 1) + { + struct viewport *vp = &find_viewport(VP_DEFAULT_LABEL, gwps->data)->vp; + vp->fg_pattern = display->get_foreground(); + vp->bg_pattern = display->get_background(); + } +#endif + skin_update(gwps, WPS_REFRESH_ALL); + } +} + #ifdef HAVE_TOUCHSCREEN int wps_get_touchaction(struct wps_data *data) { long gui_wps_show(void) * e.g. during volume changing or ffwd/rewind */ sb_skin_set_update_delay(0); FOR_NB_SCREENS(i) - { - screens[i].stop_scroll(); - gui_wps_display(&gui_wps[i]); - } + gui_wps[i].display->backdrop_show(BACKDROP_SKIN_WPS); + send_event(GUI_EVENT_REFRESH, gwps_enter_wps); } if (exit) { |