summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2010-01-27 20:34:51 +0000
committerThomas Martitz <kugel@rockbox.org>2010-01-27 20:34:51 +0000
commitfeb3a261c7373bec1c5dada090e4e37880c34de6 (patch)
treed8865927b31ddc4accdf4c9f6c0f3cf2ab0049bf /apps
parent32265959c8e9bd946be7cf5df91ade5089526fa0 (diff)
downloadrockbox-feb3a261c7373bec1c5dada090e4e37880c34de6.tar.gz
rockbox-feb3a261c7373bec1c5dada090e4e37880c34de6.zip
Fix multiscreen handling of the viewportmanager.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24351 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/gui/viewport.c58
1 files changed, 34 insertions, 24 deletions
diff --git a/apps/gui/viewport.c b/apps/gui/viewport.c
index ad9fad6846..a76de4bf4b 100644
--- a/apps/gui/viewport.c
+++ b/apps/gui/viewport.c
@@ -69,16 +69,10 @@ static int theme_stack_top[NB_SCREENS]; /* the last item added */
69static struct viewport_stack_item theme_stack[NB_SCREENS][VPSTACK_DEPTH]; 69static struct viewport_stack_item theme_stack[NB_SCREENS][VPSTACK_DEPTH];
70static bool is_theme_enabled(enum screen_type screen); 70static bool is_theme_enabled(enum screen_type screen);
71 71
72static void toggle_theme(enum screen_type screen, bool force) 72
73static void toggle_events(bool enable)
73{ 74{
74 bool enable_event = false; 75 if (enable)
75 static bool was_enabled[NB_SCREENS] = {false};
76 int i;
77 FOR_NB_SCREENS(i)
78 {
79 enable_event = enable_event || is_theme_enabled(i);
80 }
81 if (enable_event)
82 { 76 {
83 add_event(GUI_EVENT_ACTIONUPDATE, false, viewportmanager_redraw); 77 add_event(GUI_EVENT_ACTIONUPDATE, false, viewportmanager_redraw);
84#if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP) 78#if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP)
@@ -88,8 +82,34 @@ static void toggle_theme(enum screen_type screen, bool force)
88 do_sbs_update_callback); 82 do_sbs_update_callback);
89 add_event(PLAYBACK_EVENT_NEXTTRACKID3_AVAILABLE, false, 83 add_event(PLAYBACK_EVENT_NEXTTRACKID3_AVAILABLE, false,
90 do_sbs_update_callback); 84 do_sbs_update_callback);
91 85 }
92#if LCD_DEPTH > 1 86 else
87 {
88#if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP)
89 remove_event(LCD_EVENT_ACTIVATION, do_sbs_update_callback);
90#endif
91 remove_event(PLAYBACK_EVENT_TRACK_CHANGE, do_sbs_update_callback);
92 remove_event(PLAYBACK_EVENT_NEXTTRACKID3_AVAILABLE, do_sbs_update_callback);
93 remove_event(GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw);
94 }
95}
96
97
98static void toggle_theme(enum screen_type screen, bool force)
99{
100 bool enable_event = false;
101 static bool was_enabled[NB_SCREENS] = {false};
102 int i;
103
104 FOR_NB_SCREENS(i)
105 {
106 enable_event = enable_event || is_theme_enabled(i);
107 }
108 toggle_events(enable_event);
109
110 if (is_theme_enabled(screen))
111 {
112#if LCD_DEPTH > 1 || LCD_REMOTE_DEPTH > 1
93 screens[screen].backdrop_show(BACKDROP_MAIN); 113 screens[screen].backdrop_show(BACKDROP_MAIN);
94#endif 114#endif
95 /* remove the left overs from the previous screen. 115 /* remove the left overs from the previous screen.
@@ -144,20 +164,10 @@ static void toggle_theme(enum screen_type screen, bool force)
144 } 164 }
145 else 165 else
146 { 166 {
147 FOR_NB_SCREENS(i) 167#if LCD_DEPTH > 1 || LCD_REMOTE_DEPTH > 1
148 { 168 screens[screen].backdrop_hide();
149#if LCD_DEPTH > 1
150 screens[i].backdrop_hide();
151#endif 169#endif
152 screens[i].stop_scroll(); 170 screens[screen].stop_scroll();
153 }
154
155#if defined(HAVE_LCD_ENABLE) || defined(HAVE_LCD_SLEEP)
156 remove_event(LCD_EVENT_ACTIVATION, do_sbs_update_callback);
157#endif
158 remove_event(PLAYBACK_EVENT_TRACK_CHANGE, do_sbs_update_callback);
159 remove_event(PLAYBACK_EVENT_NEXTTRACKID3_AVAILABLE, do_sbs_update_callback);
160 remove_event(GUI_EVENT_ACTIONUPDATE, viewportmanager_redraw);
161 } 171 }
162 /* let list initialize viewport in case viewport dimensions is changed. */ 172 /* let list initialize viewport in case viewport dimensions is changed. */
163 send_event(GUI_EVENT_THEME_CHANGED, NULL); 173 send_event(GUI_EVENT_THEME_CHANGED, NULL);