summaryrefslogtreecommitdiff
path: root/apps/plugins/text_viewer/tv_window.c
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2010-06-23 13:56:08 +0000
committerRafaël Carré <rafael.carre@gmail.com>2010-06-23 13:56:08 +0000
commit59fd2b24bd7ad8ff0c18f66ffbf83f7ceefa9d55 (patch)
treeab90153c1106641d5973f43b727611d983d7a70f /apps/plugins/text_viewer/tv_window.c
parentcf9bba710297617f01c37b613b5ab9fcd97733e3 (diff)
downloadrockbox-59fd2b24bd7ad8ff0c18f66ffbf83f7ceefa9d55.zip
rockbox-59fd2b24bd7ad8ff0c18f66ffbf83f7ceefa9d55.tar.gz
rockbox-59fd2b24bd7ad8ff0c18f66ffbf83f7ceefa9d55.tar.bz2
rockbox-59fd2b24bd7ad8ff0c18f66ffbf83f7ceefa9d55.tar.xz
FS#11399 by me: fix r26998 for text_viewer
Restore the old behaviour: - preferences must be read-write for tv_preferences.c , read-only for all other modules -> use pointer to const struct - init functions must get the plugin buffer + its size as arguments for easily adding new functions -> use pointer to buffer pointer and size to make allocation easier - preferences meaning is private to each file and must not be known by tv_preferences.c -> move tv_check_header_and_footer() back in tv_window.c; also avoid chaining 3 times the callbacks by calling tv_set_preferences() only once if more than one preference needs changing git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27089 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/text_viewer/tv_window.c')
-rw-r--r--apps/plugins/text_viewer/tv_window.c54
1 files changed, 47 insertions, 7 deletions
diff --git a/apps/plugins/text_viewer/tv_window.c b/apps/plugins/text_viewer/tv_window.c
index c733d5a..f1f2033 100644
--- a/apps/plugins/text_viewer/tv_window.c
+++ b/apps/plugins/text_viewer/tv_window.c
@@ -67,6 +67,40 @@ static bool tv_set_font(const unsigned char *font)
return true;
}
+static bool tv_check_header_and_footer(struct tv_preferences *new_prefs)
+{
+ bool change_prefs = false;
+
+ if (rb->global_settings->statusbar != STATUSBAR_TOP)
+ {
+ if (new_prefs->header_mode == HD_SBAR)
+ {
+ new_prefs->header_mode = HD_NONE;
+ change_prefs = true;
+ }
+ else if (new_prefs->header_mode == HD_BOTH)
+ {
+ new_prefs->header_mode = HD_PATH;
+ change_prefs = true;
+ }
+ }
+ if (rb->global_settings->statusbar != STATUSBAR_BOTTOM)
+ {
+ if (new_prefs->footer_mode == FT_SBAR)
+ {
+ new_prefs->footer_mode = FT_NONE;
+ change_prefs = true;
+ }
+ else if (new_prefs->footer_mode == FT_BOTH)
+ {
+ new_prefs->footer_mode = FT_PAGE;
+ change_prefs = true;
+ }
+ }
+
+ return change_prefs;
+}
+
static void tv_show_header(void)
{
unsigned header_mode = header_mode;
@@ -259,6 +293,9 @@ static void tv_change_preferences(const struct tv_preferences *oldp)
#ifdef HAVE_LCD_BITMAP
static bool font_changing = false;
const unsigned char *font_str;
+ bool change_prefs = false;
+ struct tv_preferences new_prefs;
+ tv_copy_preferences(&new_prefs);
font_str = (oldp && !font_changing)? oldp->font_name : rb->global_settings->font_file;
@@ -268,14 +305,17 @@ static void tv_change_preferences(const struct tv_preferences *oldp)
font_changing = true;
if (!tv_set_font(preferences->font_name))
{
- struct tv_preferences new_prefs;
- tv_copy_preferences(&new_prefs);
-
rb->strlcpy(new_prefs.font_name, font_str, MAX_PATH);
- tv_set_preferences(&new_prefs);
- return;
+ change_prefs = true;
}
}
+
+ if (tv_check_header_and_footer(&new_prefs) || change_prefs)
+ {
+ tv_set_preferences(&new_prefs);
+ return;
+ }
+
font_changing = false;
/* calculates display lines */
@@ -319,10 +359,10 @@ static void tv_change_preferences(const struct tv_preferences *oldp)
tv_set_read_conditions(preferences->windows, window_width);
}
-bool tv_init_window(void)
+bool tv_init_window(unsigned char **buf, size_t *size)
{
tv_add_preferences_change_listner(tv_change_preferences);
- return tv_init_text_reader();
+ return tv_init_text_reader(buf, size);
}
void tv_finalize_window(void)