mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-14 02:27:39 -04:00
text_viewer: callback functions are changed to the function that returns int value.
And the text viewer quits when the problem occurs by callback functions. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27172 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
7195f3a30c
commit
07d03729ff
13 changed files with 56 additions and 25 deletions
|
@ -73,6 +73,8 @@ enum plugin_status plugin_start(const void* file)
|
||||||
done = true;
|
done = true;
|
||||||
if (res == TV_MENU_RESULT_ATTACHED_USB)
|
if (res == TV_MENU_RESULT_ATTACHED_USB)
|
||||||
return PLUGIN_USB_CONNECTED;
|
return PLUGIN_USB_CONNECTED;
|
||||||
|
else if (res == TV_MENU_RESULT_ERROR)
|
||||||
|
return PLUGIN_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -42,7 +42,8 @@ bool tv_init(const unsigned char *file)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* load the preferences and bookmark */
|
/* load the preferences and bookmark */
|
||||||
tv_load_settings(file);
|
if (!tv_load_settings(file))
|
||||||
|
return false;
|
||||||
|
|
||||||
/* select to read the page */
|
/* select to read the page */
|
||||||
tv_select_bookmark();
|
tv_select_bookmark();
|
||||||
|
|
|
@ -98,15 +98,16 @@ static int tv_find_bookmark(const struct tv_screen_pos *pos)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tv_change_preferences(const struct tv_preferences *oldp)
|
static int tv_change_preferences(const struct tv_preferences *oldp)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (oldp == NULL)
|
if (oldp)
|
||||||
return;
|
{
|
||||||
|
for (i = 0; i < bookmark_count; i++)
|
||||||
for (i = 0; i < bookmark_count; i++)
|
tv_convert_fpos(bookmarks[i].pos.file_pos, &bookmarks[i].pos);
|
||||||
tv_convert_fpos(bookmarks[i].pos.file_pos, &bookmarks[i].pos);
|
}
|
||||||
|
return TV_CALLBACK_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tv_init_bookmark(void)
|
void tv_init_bookmark(void)
|
||||||
|
|
|
@ -349,7 +349,7 @@ static bool tv_set_font(const unsigned char *font)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void tv_change_preferences(const struct tv_preferences *oldp)
|
static int tv_change_preferences(const struct tv_preferences *oldp)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
static bool font_changing = false;
|
static bool font_changing = false;
|
||||||
|
@ -363,10 +363,18 @@ static void tv_change_preferences(const struct tv_preferences *oldp)
|
||||||
{
|
{
|
||||||
if (!tv_set_font(preferences->font_name))
|
if (!tv_set_font(preferences->font_name))
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* tv_set_font(rb->global_settings->font_file) doesn't fail usually.
|
||||||
|
* if it fails, a fatal problem occurs in Rockbox.
|
||||||
|
*/
|
||||||
|
if (!rb->strcmp(preferences->font_name, rb->global_settings->font_file))
|
||||||
|
return TV_CALLBACK_ERROR;
|
||||||
|
|
||||||
font_changing = true;
|
font_changing = true;
|
||||||
tv_copy_preferences(&new_prefs);
|
tv_copy_preferences(&new_prefs);
|
||||||
rb->strlcpy(new_prefs.font_name, font_str, MAX_PATH);
|
rb->strlcpy(new_prefs.font_name, font_str, MAX_PATH);
|
||||||
tv_set_preferences(&new_prefs);
|
|
||||||
|
return (tv_set_preferences(&new_prefs))? TV_CALLBACK_STOP : TV_CALLBACK_ERROR;
|
||||||
}
|
}
|
||||||
col_width = 2 * rb->font_get_width(preferences->font, ' ');
|
col_width = 2 * rb->font_get_width(preferences->font, ' ');
|
||||||
font_changing = false;
|
font_changing = false;
|
||||||
|
@ -375,6 +383,7 @@ static void tv_change_preferences(const struct tv_preferences *oldp)
|
||||||
(void)oldp;
|
(void)oldp;
|
||||||
#endif
|
#endif
|
||||||
tv_change_viewport();
|
tv_change_viewport();
|
||||||
|
return TV_CALLBACK_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tv_init_display(unsigned char **buf, size_t *size)
|
bool tv_init_display(unsigned char **buf, size_t *size)
|
||||||
|
|
|
@ -366,7 +366,8 @@ unsigned tv_display_menu(void)
|
||||||
case 1: /* change settings */
|
case 1: /* change settings */
|
||||||
tv_copy_preferences(&new_prefs);
|
tv_copy_preferences(&new_prefs);
|
||||||
result = tv_options_menu();
|
result = tv_options_menu();
|
||||||
tv_set_preferences(&new_prefs);
|
if (!tv_set_preferences(&new_prefs))
|
||||||
|
result = TV_MENU_RESULT_ERROR;
|
||||||
break;
|
break;
|
||||||
case 2: /* playback control */
|
case 2: /* playback control */
|
||||||
playback_control(NULL);
|
playback_control(NULL);
|
||||||
|
|
|
@ -28,6 +28,7 @@ enum {
|
||||||
TV_MENU_RESULT_EXIT_MENU,
|
TV_MENU_RESULT_EXIT_MENU,
|
||||||
TV_MENU_RESULT_EXIT_PLUGIN,
|
TV_MENU_RESULT_EXIT_PLUGIN,
|
||||||
TV_MENU_RESULT_ATTACHED_USB,
|
TV_MENU_RESULT_ATTACHED_USB,
|
||||||
|
TV_MENU_RESULT_ERROR,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -73,7 +73,7 @@ static off_t tv_get_fpos(int page)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tv_change_preferences(const struct tv_preferences *oldp)
|
static int tv_change_preferences(const struct tv_preferences *oldp)
|
||||||
{
|
{
|
||||||
(void)oldp;
|
(void)oldp;
|
||||||
|
|
||||||
|
@ -83,6 +83,7 @@ static void tv_change_preferences(const struct tv_preferences *oldp)
|
||||||
max_page = TV_MAX_PAGE - 1;
|
max_page = TV_MAX_PAGE - 1;
|
||||||
tv_set_fpos(cur_pos.page, 0);
|
tv_set_fpos(cur_pos.page, 0);
|
||||||
tv_seek(0, SEEK_SET);
|
tv_seek(0, SEEK_SET);
|
||||||
|
return TV_CALLBACK_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tv_init_pager(unsigned char **buf, size_t *size)
|
bool tv_init_pager(unsigned char **buf, size_t *size)
|
||||||
|
|
|
@ -31,11 +31,12 @@ const struct tv_preferences * const preferences = &prefs;
|
||||||
static int listner_count = 0;
|
static int listner_count = 0;
|
||||||
|
|
||||||
#define TV_MAX_LISTNERS 5
|
#define TV_MAX_LISTNERS 5
|
||||||
static void (*listners[TV_MAX_LISTNERS])(const struct tv_preferences *oldp);
|
static int (*listners[TV_MAX_LISTNERS])(const struct tv_preferences *oldp);
|
||||||
|
|
||||||
static void tv_notify_change_preferences(const struct tv_preferences *oldp)
|
static bool tv_notify_change_preferences(const struct tv_preferences *oldp)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
int res = TV_CALLBACK_OK;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* the following items do not check.
|
* the following items do not check.
|
||||||
|
@ -65,11 +66,13 @@ static void tv_notify_change_preferences(const struct tv_preferences *oldp)
|
||||||
{
|
{
|
||||||
/* callback functions are called as FILO */
|
/* callback functions are called as FILO */
|
||||||
for (i = listner_count - 1; i >= 0; i--)
|
for (i = listner_count - 1; i >= 0; i--)
|
||||||
listners[i](oldp);
|
if ((res = listners[i](oldp)) != TV_CALLBACK_OK)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
return (res != TV_CALLBACK_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tv_set_preferences(const struct tv_preferences *new_prefs)
|
bool tv_set_preferences(const struct tv_preferences *new_prefs)
|
||||||
{
|
{
|
||||||
static struct tv_preferences old_prefs;
|
static struct tv_preferences old_prefs;
|
||||||
struct tv_preferences *oldp = NULL;
|
struct tv_preferences *oldp = NULL;
|
||||||
|
@ -80,7 +83,7 @@ void tv_set_preferences(const struct tv_preferences *new_prefs)
|
||||||
is_initialized = true;
|
is_initialized = true;
|
||||||
|
|
||||||
rb->memcpy(&prefs, new_prefs, sizeof(struct tv_preferences));
|
rb->memcpy(&prefs, new_prefs, sizeof(struct tv_preferences));
|
||||||
tv_notify_change_preferences(oldp);
|
return tv_notify_change_preferences(oldp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tv_copy_preferences(struct tv_preferences *copy_prefs)
|
void tv_copy_preferences(struct tv_preferences *copy_prefs)
|
||||||
|
@ -118,7 +121,7 @@ void tv_set_default_preferences(struct tv_preferences *p)
|
||||||
p->file_name[0] = '\0';
|
p->file_name[0] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
void tv_add_preferences_change_listner(void (*listner)(const struct tv_preferences *oldp))
|
void tv_add_preferences_change_listner(int (*listner)(const struct tv_preferences *oldp))
|
||||||
{
|
{
|
||||||
if (listner_count < TV_MAX_LISTNERS)
|
if (listner_count < TV_MAX_LISTNERS)
|
||||||
listners[listner_count++] = listner;
|
listners[listner_count++] = listner;
|
||||||
|
|
|
@ -23,6 +23,12 @@
|
||||||
#ifndef PLUGIN_TEXT_VIEWER_PREFERENCES_H
|
#ifndef PLUGIN_TEXT_VIEWER_PREFERENCES_H
|
||||||
#define PLUGIN_TEXT_VIEWER_PREFERENCES_H
|
#define PLUGIN_TEXT_VIEWER_PREFERENCES_H
|
||||||
|
|
||||||
|
enum {
|
||||||
|
TV_CALLBACK_OK,
|
||||||
|
TV_CALLBACK_STOP,
|
||||||
|
TV_CALLBACK_ERROR,
|
||||||
|
};
|
||||||
|
|
||||||
/* scrollbar_mode */
|
/* scrollbar_mode */
|
||||||
enum {
|
enum {
|
||||||
SB_OFF = 0,
|
SB_OFF = 0,
|
||||||
|
@ -129,8 +135,12 @@ extern const struct tv_preferences * const preferences;
|
||||||
*
|
*
|
||||||
* [In] new_prefs
|
* [In] new_prefs
|
||||||
* new preferences
|
* new preferences
|
||||||
|
*
|
||||||
|
* return
|
||||||
|
* true success
|
||||||
|
* false error
|
||||||
*/
|
*/
|
||||||
void tv_set_preferences(const struct tv_preferences *new_prefs);
|
bool tv_set_preferences(const struct tv_preferences *new_prefs);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* copy the preferences
|
* copy the preferences
|
||||||
|
@ -154,6 +164,6 @@ void tv_set_default_preferences(struct tv_preferences *p);
|
||||||
* [In] listner
|
* [In] listner
|
||||||
* the function to be executed when the current preferences is changed
|
* the function to be executed when the current preferences is changed
|
||||||
*/
|
*/
|
||||||
void tv_add_preferences_change_listner(void (*listner)(const struct tv_preferences *oldp));
|
void tv_add_preferences_change_listner(int (*listner)(const struct tv_preferences *oldp));
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -132,7 +132,7 @@ void tv_seek(off_t offset, int whence)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tv_change_preferences(const struct tv_preferences *oldp)
|
static int tv_change_preferences(const struct tv_preferences *oldp)
|
||||||
{
|
{
|
||||||
unsigned char bom[BOM_SIZE];
|
unsigned char bom[BOM_SIZE];
|
||||||
int cur_start_file_pos = start_file_pos;
|
int cur_start_file_pos = start_file_pos;
|
||||||
|
@ -151,7 +151,7 @@ static void tv_change_preferences(const struct tv_preferences *oldp)
|
||||||
|
|
||||||
fd = rb->open(preferences->file_name, O_RDONLY);
|
fd = rb->open(preferences->file_name, O_RDONLY);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return;
|
return TV_CALLBACK_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -168,6 +168,7 @@ static void tv_change_preferences(const struct tv_preferences *oldp)
|
||||||
|
|
||||||
file_size = rb->filesize(fd) - start_file_pos;
|
file_size = rb->filesize(fd) - start_file_pos;
|
||||||
tv_seek(cur_file_pos + cur_start_file_pos - start_file_pos, SEEK_SET);
|
tv_seek(cur_file_pos + cur_start_file_pos - start_file_pos, SEEK_SET);
|
||||||
|
return TV_CALLBACK_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tv_init_reader(unsigned char **buf, size_t *size)
|
bool tv_init_reader(unsigned char **buf, size_t *size)
|
||||||
|
|
|
@ -417,7 +417,7 @@ bool tv_save_global_settings(const struct tv_preferences *prefs)
|
||||||
* ----------------------------------------------------------------------------
|
* ----------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void tv_load_settings(const unsigned char *file_name)
|
bool tv_load_settings(const unsigned char *file_name)
|
||||||
{
|
{
|
||||||
unsigned char buf[MAX_PATH+2];
|
unsigned char buf[MAX_PATH+2];
|
||||||
unsigned int fcount;
|
unsigned int fcount;
|
||||||
|
@ -470,7 +470,7 @@ void tv_load_settings(const unsigned char *file_name)
|
||||||
tv_set_default_preferences(&prefs);
|
tv_set_default_preferences(&prefs);
|
||||||
}
|
}
|
||||||
rb->strlcpy(prefs.file_name, file_name, MAX_PATH);
|
rb->strlcpy(prefs.file_name, file_name, MAX_PATH);
|
||||||
tv_set_preferences(&prefs);
|
return tv_set_preferences(&prefs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool tv_copy_settings(int sfd, int dfd, int size)
|
static bool tv_copy_settings(int sfd, int dfd, int size)
|
||||||
|
|
|
@ -59,7 +59,7 @@ bool tv_save_global_settings(const struct tv_preferences *prefs);
|
||||||
* true success
|
* true success
|
||||||
* false failure
|
* false failure
|
||||||
*/
|
*/
|
||||||
void tv_load_settings(const unsigned char *file_name);
|
bool tv_load_settings(const unsigned char *file_name);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* save the settings at each file
|
* save the settings at each file
|
||||||
|
|
|
@ -102,7 +102,7 @@ bool tv_traverse_lines(void)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tv_change_preferences(const struct tv_preferences *oldp)
|
static int tv_change_preferences(const struct tv_preferences *oldp)
|
||||||
{
|
{
|
||||||
bool need_vertical_scrollbar = false;
|
bool need_vertical_scrollbar = false;
|
||||||
|
|
||||||
|
@ -131,6 +131,7 @@ static void tv_change_preferences(const struct tv_preferences *oldp)
|
||||||
cur_column = 0;
|
cur_column = 0;
|
||||||
|
|
||||||
tv_set_read_conditions(preferences->windows, window_width);
|
tv_set_read_conditions(preferences->windows, window_width);
|
||||||
|
return TV_CALLBACK_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool tv_init_window(unsigned char **buf, size_t *size)
|
bool tv_init_window(unsigned char **buf, size_t *size)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue