From 7cb9b4d79b078040967e5326615779d7c073b23d Mon Sep 17 00:00:00 2001 From: James Bursa Date: Thu, 6 May 2004 20:37:48 +0000 Subject: [project @ 2004-05-06 20:37:48 by bursa] Remove obsolete theme files. Hide some unimplemented toolbar icons. F2 moves caret to URL bar and clears it to "www.". Simplify some of the toolbar code. Fix menu-related crash (reported by Jerome Mathevet). svn path=/import/netsurf/; revision=836 --- riscos/dialog.c | 17 +++++++-- riscos/menus.c | 22 +++++------ riscos/toolbar.c | 109 ++++++++++++++++++++++++++++++------------------------- riscos/toolbar.h | 30 ++------------- riscos/window.c | 9 +++++ 5 files changed, 95 insertions(+), 92 deletions(-) (limited to 'riscos') diff --git a/riscos/dialog.c b/riscos/dialog.c index ca7dd2763..3e530bdf2 100644 --- a/riscos/dialog.c +++ b/riscos/dialog.c @@ -632,8 +632,7 @@ void ro_gui_build_theme_menu(void) continue; if (info.obj_type != fileswitch_IS_DIR) continue; - if (!(file_exists(THEMES_DIR, info.name, "Templates", 0xfec) && - file_exists(THEMES_DIR, info.name, "Sprites", 0xff9))) + if (!file_exists(THEMES_DIR, info.name, "Sprites", 0xff9)) continue; theme_menu = xrealloc(theme_menu, wimp_SIZEOF_MENU(i + 1)); @@ -654,7 +653,19 @@ void ro_gui_build_theme_menu(void) i++; } - assert(i != 0); + if (i == 0) { + theme_menu->entries[0].menu_flags = 0; + theme_menu->entries[0].sub_menu = wimp_NO_SUB_MENU; + theme_menu->entries[0].icon_flags = wimp_ICON_TEXT | + wimp_ICON_FILLED | wimp_ICON_INDIRECTED | + (wimp_COLOUR_BLACK << wimp_ICON_FG_COLOUR_SHIFT) | + (wimp_COLOUR_WHITE << wimp_ICON_BG_COLOUR_SHIFT) | + wimp_ICON_SHADED; + theme_menu->entries[0].data.indirected_text.text = xstrdup("-"); + theme_menu->entries[0].data.indirected_text.validation = (char*)-1; + theme_menu->entries[0].data.indirected_text.size = 2; + i = 1; + } entries = i; theme_menu->entries[0].menu_flags |= wimp_MENU_TITLE_INDIRECTED; diff --git a/riscos/menus.c b/riscos/menus.c index cc689e028..7eab07e45 100644 --- a/riscos/menus.c +++ b/riscos/menus.c @@ -43,7 +43,7 @@ static void ro_gui_menu_prepare_images(void); static void ro_gui_menu_prepare_toolbars(void); static void ro_gui_menu_pageinfo(wimp_message_menu_warning *warning); static void ro_gui_menu_objectinfo(wimp_message_menu_warning *warning); -static struct box *find_object_box(void); +static struct box *ro_gui_menu_find_object_box(void); static wimp_menu *current_menu; static int current_menu_x, current_menu_y; @@ -343,15 +343,11 @@ void ro_gui_create_menu(wimp_menu *menu, int x, int y, gui_window *g) current_menu_x = x; current_menu_y = y; current_gui = g; - if (menu != iconbar_menu) { - if (find_object_box() == NULL && menu == browser_menu) { - menu->entries[1].sub_menu = (wimp_menu*)1; - menu->entries[1].icon_flags |= wimp_ICON_SHADED; - } - else if (menu == browser_menu) { - menu->entries[1].sub_menu = (wimp_menu*)&object_menu; - menu->entries[1].icon_flags &= ~wimp_ICON_SHADED; - } + if (menu == browser_menu) { + if (ro_gui_menu_find_object_box()) + menu->entries[1].icon_flags &= ~wimp_ICON_SHADED; + else + menu->entries[1].icon_flags |= wimp_ICON_SHADED; } wimp_create_menu(menu, x, y); } @@ -656,7 +652,7 @@ void ro_gui_menu_warning(wimp_message_menu_warning *warning) } break; } - struct box *box = find_object_box(); + struct box *box = ro_gui_menu_find_object_box(); if (box) { ro_gui_menu_prepare_save(box->object); error = xwimp_create_sub_menu((wimp_menu *) dialog_saveas, @@ -865,7 +861,7 @@ void ro_gui_menu_objectinfo(wimp_message_menu_warning *warning) const char *target = "-"; const char *mime = "-"; - box = find_object_box(); + box = ro_gui_menu_find_object_box(); if (box) { sprintf(icon_buf, "file_%x", ro_content_filetype(box->object)); if (box->object->url) url = box->object->url; @@ -893,7 +889,7 @@ void ro_gui_menu_objectinfo(wimp_message_menu_warning *warning) } } -struct box *find_object_box(void) +struct box *ro_gui_menu_find_object_box(void) { struct content *c = current_gui->data.browser.bw->current_content; struct box_selection *boxes = NULL; diff --git a/riscos/toolbar.c b/riscos/toolbar.c index 046df40b8..9a42851f1 100644 --- a/riscos/toolbar.c +++ b/riscos/toolbar.c @@ -21,6 +21,31 @@ #include "netsurf/riscos/wimp.h" #include "netsurf/utils/log.h" + +struct toolbar_icon { + /* The desired WIMP icon number (-1 for separator) + */ + int icon_number; + + /* Set to non-zero to display the icon + */ + unsigned int available; + + /* Icon dimensions (OS units) + */ + unsigned int width; + unsigned int height; + + /* Icon validation string + */ + char validation[40]; + + /* The next icon (linked list) + */ + struct toolbar_icon *next_icon; // Next toolbar icon +}; + + /* A basic window for the toolbar and status */ static wimp_window empty_window = { @@ -53,14 +78,15 @@ static wimp_icon_create empty_icon; /* Shared URL validation */ -static char *url_validation = "Pptr_write\0"; -static char *resize_validation = "R1;Pptr_lr,8,6\0"; -static char *null_text_string = "\0"; +static char url_validation[] = "Pptr_write\0"; +static char resize_validation[] = "R1;Pptr_lr,8,6\0"; +static char null_text_string[] = "\0"; static struct toolbar *ro_toolbar_create_icons(struct toolbar *toolbar, osspriteop_area *sprite_area, char *url_buffer, char *throbber_buffer); -static struct toolbar_icon *ro_toolbar_create_icon(osspriteop_area *sprite_area, char *sprite, unsigned int icon); +static struct toolbar_icon *ro_toolbar_initialise_icon(osspriteop_area *sprite_area, + const char *sprite, unsigned int icon); static struct toolbar_icon *ro_toolbar_create_separator(void); static void ro_toolbar_destroy_icon(struct toolbar_icon *icon); static void ro_toolbar_add_icon(struct toolbar *toolbar, struct toolbar_icon *icon); @@ -89,20 +115,20 @@ struct toolbar *ro_toolbar_create(osspriteop_area *sprite_area, char *url_buffer /* Load the toolbar icons */ if (sprite_area) { - ro_toolbar_add_icon(toolbar, ro_toolbar_create_icon(sprite_area, "back", ICON_TOOLBAR_BACK)); - ro_toolbar_add_icon(toolbar, ro_toolbar_create_icon(sprite_area, "forward", ICON_TOOLBAR_FORWARD)); - ro_toolbar_add_icon(toolbar, ro_toolbar_create_icon(sprite_area, "stop", ICON_TOOLBAR_STOP)); - ro_toolbar_add_icon(toolbar, ro_toolbar_create_icon(sprite_area, "reload", ICON_TOOLBAR_RELOAD)); + ro_toolbar_add_icon(toolbar, ro_toolbar_initialise_icon(sprite_area, "back", ICON_TOOLBAR_BACK)); + ro_toolbar_add_icon(toolbar, ro_toolbar_initialise_icon(sprite_area, "forward", ICON_TOOLBAR_FORWARD)); + ro_toolbar_add_icon(toolbar, ro_toolbar_initialise_icon(sprite_area, "stop", ICON_TOOLBAR_STOP)); + ro_toolbar_add_icon(toolbar, ro_toolbar_initialise_icon(sprite_area, "reload", ICON_TOOLBAR_RELOAD)); ro_toolbar_add_icon(toolbar, ro_toolbar_create_separator()); - ro_toolbar_add_icon(toolbar, ro_toolbar_create_icon(sprite_area, "home", ICON_TOOLBAR_HOME)); - ro_toolbar_add_icon(toolbar, ro_toolbar_create_icon(sprite_area, "up", ICON_TOOLBAR_UP)); - ro_toolbar_add_icon(toolbar, ro_toolbar_create_icon(sprite_area, "search", ICON_TOOLBAR_SEARCH)); - ro_toolbar_add_icon(toolbar, ro_toolbar_create_icon(sprite_area, "history", ICON_TOOLBAR_HISTORY)); - ro_toolbar_add_icon(toolbar, ro_toolbar_create_icon(sprite_area, "scale", ICON_TOOLBAR_SCALE)); +/* ro_toolbar_add_icon(toolbar, ro_toolbar_initialise_icon(sprite_area, "home", ICON_TOOLBAR_HOME)); */ +/* ro_toolbar_add_icon(toolbar, ro_toolbar_initialise_icon(sprite_area, "up", ICON_TOOLBAR_UP)); */ +/* ro_toolbar_add_icon(toolbar, ro_toolbar_initialise_icon(sprite_area, "search", ICON_TOOLBAR_SEARCH)); */ + ro_toolbar_add_icon(toolbar, ro_toolbar_initialise_icon(sprite_area, "history", ICON_TOOLBAR_HISTORY)); + ro_toolbar_add_icon(toolbar, ro_toolbar_initialise_icon(sprite_area, "scale", ICON_TOOLBAR_SCALE)); ro_toolbar_add_icon(toolbar, ro_toolbar_create_separator()); - ro_toolbar_add_icon(toolbar, ro_toolbar_create_icon(sprite_area, "mark", ICON_TOOLBAR_BOOKMARK)); - ro_toolbar_add_icon(toolbar, ro_toolbar_create_icon(sprite_area, "save", ICON_TOOLBAR_SAVE)); - ro_toolbar_add_icon(toolbar, ro_toolbar_create_icon(sprite_area, "print", ICON_TOOLBAR_PRINT)); +/* ro_toolbar_add_icon(toolbar, ro_toolbar_initialise_icon(sprite_area, "mark", ICON_TOOLBAR_BOOKMARK)); */ + ro_toolbar_add_icon(toolbar, ro_toolbar_initialise_icon(sprite_area, "save", ICON_TOOLBAR_SAVE)); +/* ro_toolbar_add_icon(toolbar, ro_toolbar_initialise_icon(sprite_area, "print", ICON_TOOLBAR_PRINT)); */ } /* Set the sprite area @@ -110,7 +136,7 @@ struct toolbar *ro_toolbar_create(osspriteop_area *sprite_area, char *url_buffer if (sprite_area) { empty_window.sprite_area = sprite_area; } else { - empty_window.sprite_area = 1; + empty_window.sprite_area = (osspriteop_area *) 1; } /* Create the basic windows @@ -241,7 +267,7 @@ static struct toolbar *ro_toolbar_create_icons(struct toolbar *toolbar, ossprite if (sprite_area) { empty_icon.icon.data.indirected_sprite.area = sprite_area; } else { - empty_icon.icon.data.indirected_sprite.area = 1; + empty_icon.icon.data.indirected_sprite.area = (osspriteop_area *) 1; } empty_icon.icon.data.indirected_sprite.size = 12; if (xwimp_create_icon(&empty_icon, &icon_handle)) { @@ -310,41 +336,31 @@ void ro_toolbar_destroy(struct toolbar *toolbar) { * \param sprite the requested sprite * \param icon the icon number */ -static struct toolbar_icon *ro_toolbar_create_icon(osspriteop_area *sprite_area, char *sprite, unsigned int icon) { +struct toolbar_icon *ro_toolbar_initialise_icon(osspriteop_area *sprite_area, + const char *sprite, unsigned int icon) { struct toolbar_icon *current_icon; - int i; - int sprite_name_size = 0; os_coord dimensions; char name[16]; osbool mask; os_mode mode; - unsigned int validation_length; + os_error *error; - /* Check if the sprite exists - */ - for (i = 1; i <= sprite_area->sprite_count; i++) { - if (!xosspriteop_return_name(osspriteop_USER_AREA, - sprite_area, name, 16, i, &sprite_name_size)) { - name[sprite_name_size] = '\0'; - if (strncmp(name, sprite, sprite_name_size + 1) == 0) { - - /* Yes, a while loop would be better... - */ - goto ro_toolbar_create_icon_found; - } - } - } - - /* No icon found - */ - return NULL; -ro_toolbar_create_icon_found: + strcpy(name, sprite); /* Get the sprite details */ - xosspriteop_read_sprite_info(osspriteop_USER_AREA, - sprite_area, (osspriteop_id)name, + error = xosspriteop_read_sprite_info(osspriteop_USER_AREA, + sprite_area, (osspriteop_id) name, &dimensions.x, &dimensions.y, &mask, &mode); + if (error && error->errnum == error_SPRITE_OP_DOESNT_EXIST) { + /** \todo inform user */ + return NULL; + } else if (error) { + LOG(("xosspriteop_read_sprite_info: 0x%x: %s", + error->errnum, error->errmess)); + warn_user(error->errmess); + return NULL; + } /* Create an icon */ @@ -355,12 +371,6 @@ ro_toolbar_create_icon_found: there is a pushed variant as RISC OS happily ignores it if it doesn't exist. */ - validation_length = sprite_name_size * 2 + 8; - current_icon->validation = malloc(validation_length); - if (!current_icon->validation) { - free(current_icon); - return NULL; - } sprintf(current_icon->validation, "R5;S%s,p%s", name, name); /* We want eig factors rather than pixels @@ -407,7 +417,6 @@ static struct toolbar_icon *ro_toolbar_create_separator(void) { * \param icon the icon to destroy */ static void ro_toolbar_destroy_icon(struct toolbar_icon *icon) { - if (!icon->icon_number >= 0) free(icon->validation); free(icon); } diff --git a/riscos/toolbar.h b/riscos/toolbar.h index f54bde320..c7c94cf94 100644 --- a/riscos/toolbar.h +++ b/riscos/toolbar.h @@ -15,29 +15,7 @@ #include "oslib/wimp.h" -struct toolbar_icon { - /* The desired WIMP icon number (-1 for separator) - */ - int icon_number; - - /* Set to non-zero to display the icon - */ - unsigned int available; - - /* Icon dimensions (OS units) - */ - unsigned int width; - unsigned int height; - - /* Icon validation, or NULL if this icon is unavailable - */ - unsigned char* validation; - - /* The next icon (linked list) - */ - struct toolbar_icon *next_icon; // Next toolbar icon -}; - +struct toolbar_icon; struct toolbar { @@ -51,7 +29,7 @@ struct toolbar { int status_old_width; // Old status width int width; // Toolbar width on last reformat unsigned int height; // Toolbar height on last reformat - + /* General options */ unsigned int throbber_width; // Throbber width (0 = unavaiable) @@ -61,11 +39,11 @@ struct toolbar { unsigned int url_bar; // Show URL bar? unsigned int throbber; // Show Throbber? unsigned int status_width; // Width of status window - + /* The first toolbar icon */ struct toolbar_icon *icon; - + /* Window handles */ wimp_w toolbar_handle; diff --git a/riscos/window.c b/riscos/window.c index 30deef0dd..f711c8187 100644 --- a/riscos/window.c +++ b/riscos/window.c @@ -775,6 +775,15 @@ bool ro_gui_window_keypress(gui_window *g, int key, bool toolbar) gui_window_redraw_window(g); return true; + case wimp_KEY_F2: + if (!g->data.browser.toolbar) + return false; + ro_gui_set_icon_string(g->data.browser.toolbar->toolbar_handle, + ICON_TOOLBAR_URL, "www."); + xwimp_set_caret_position(g->data.browser.toolbar->toolbar_handle, + ICON_TOOLBAR_URL, 0, 0, -1, 4); + return true; + case wimp_KEY_CONTROL + wimp_KEY_F2: /* Close window. */ browser_window_destroy(g->data.browser.bw #ifdef WITH_FRAMES -- cgit v1.2.3