void ro_gui_cookies_postinitialise(void) { /* Create our toolbar. */ cookies_window.toolbar = ro_toolbar_create(NULL, cookies_window.window, THEME_STYLE_COOKIES_TOOLBAR, TOOLBAR_FLAGS_NONE, ro_treeview_get_toolbar_callbacks(), NULL, "HelpCookiesToolbar"); if (cookies_window.toolbar != NULL) { ro_toolbar_add_buttons(cookies_window.toolbar, cookies_toolbar_buttons, nsoption_charp(toolbar_cookies)); ro_toolbar_rebuild(cookies_window.toolbar); } /* Create the treeview with the window and toolbar. */ cookies_window.tv = ro_treeview_create(cookies_window.window, cookies_window.toolbar, &ro_cookies_treeview_callbacks, cookies_get_tree_flags()); if (cookies_window.tv == NULL) { LOG(("Failed to allocate treeview")); return; } ro_toolbar_update_client_data(cookies_window.toolbar, cookies_window.tv); /* Initialise the cookies into the tree. */ cookies_initialise(ro_treeview_get_tree(cookies_window.tv), tree_directory_icon_name, tree_content_icon_name); /* Build the cookies window menu. */ static const struct ns_menu cookies_definition = { "Cookies", { { "Cookies", NO_ACTION, 0 }, { "Cookies.Expand", TREE_EXPAND_ALL, 0 }, { "Cookies.Expand.All", TREE_EXPAND_ALL, 0 }, { "Cookies.Expand.Folders", TREE_EXPAND_FOLDERS, 0 }, { "Cookies.Expand.Links", TREE_EXPAND_LINKS, 0 }, { "Cookies.Collapse", TREE_COLLAPSE_ALL, 0 }, { "Cookies.Collapse.All", TREE_COLLAPSE_ALL, 0 }, { "Cookies.Collapse.Folders", TREE_COLLAPSE_FOLDERS, 0 }, { "Cookies.Collapse.Links", TREE_COLLAPSE_LINKS, 0 }, { "Cookies.Toolbars", NO_ACTION, 0 }, { "_Cookies.Toolbars.ToolButtons", TOOLBAR_BUTTONS, 0 }, { "Cookies.Toolbars.EditToolbar",TOOLBAR_EDIT, 0 }, { "Selection", TREE_SELECTION, 0 }, { "Selection.Delete", TREE_SELECTION_DELETE, 0 }, { "SelectAll", TREE_SELECT_ALL, 0 }, { "Clear", TREE_CLEAR_SELECTION, 0 }, {NULL, 0, 0} } }; cookies_window.menu = ro_gui_menu_define_menu(&cookies_definition); ro_gui_wimp_event_register_menu(cookies_window.window, cookies_window.menu, false, false); ro_gui_wimp_event_register_menu_prepare(cookies_window.window, ro_gui_cookies_menu_prepare); ro_gui_wimp_event_register_menu_selection(cookies_window.window, ro_gui_cookies_menu_select); ro_gui_wimp_event_register_menu_warning(cookies_window.window, ro_gui_cookies_menu_warning); }
void ro_gui_global_history_postinitialise(void) { /* Create our toolbar. */ global_history_window.toolbar = ro_toolbar_create(NULL, global_history_window.window, THEME_STYLE_GLOBAL_HISTORY_TOOLBAR, TOOLBAR_FLAGS_NONE, ro_treeview_get_toolbar_callbacks(), NULL, "HelpGHistoryToolbar"); if (global_history_window.toolbar != NULL) { ro_toolbar_add_buttons(global_history_window.toolbar, global_history_toolbar_buttons, nsoption_charp(toolbar_history)); ro_toolbar_rebuild(global_history_window.toolbar); } /* Create the treeview with the window and toolbar. */ global_history_window.tv = ro_treeview_create(global_history_window.window, global_history_window.toolbar, &ro_global_history_treeview_callbacks, history_global_get_tree_flags()); if (global_history_window.tv == NULL) { LOG(("Failed to allocate treeview")); return; } ro_toolbar_update_client_data(global_history_window.toolbar, global_history_window.tv); /* Initialise the global history into the tree. */ history_global_initialise( ro_treeview_get_tree(global_history_window.tv), tree_directory_icon_name); /* Build the global history window menu. */ static const struct ns_menu global_history_definition = { "History", { { "History", NO_ACTION, 0 }, { "_History.Export", HISTORY_EXPORT, &dialog_saveas }, { "History.Expand", TREE_EXPAND_ALL, 0 }, { "History.Expand.All", TREE_EXPAND_ALL, 0 }, { "History.Expand.Folders", TREE_EXPAND_FOLDERS, 0 }, { "History.Expand.Links", TREE_EXPAND_LINKS, 0 }, { "History.Collapse", TREE_COLLAPSE_ALL, 0 }, { "History.Collapse.All", TREE_COLLAPSE_ALL, 0 }, { "History.Collapse.Folders", TREE_COLLAPSE_FOLDERS, 0 }, { "History.Collapse.Links", TREE_COLLAPSE_LINKS, 0 }, { "History.Toolbars", NO_ACTION, 0 }, { "_History.Toolbars.ToolButtons", TOOLBAR_BUTTONS, 0 }, { "History.Toolbars.EditToolbar",TOOLBAR_EDIT, 0 }, { "Selection", TREE_SELECTION, 0 }, { "Selection.Launch", TREE_SELECTION_LAUNCH, 0 }, { "Selection.Delete", TREE_SELECTION_DELETE, 0 }, { "SelectAll", TREE_SELECT_ALL, 0 }, { "Clear", TREE_CLEAR_SELECTION, 0 }, {NULL, 0, 0} } }; global_history_window.menu = ro_gui_menu_define_menu( &global_history_definition); ro_gui_wimp_event_register_menu(global_history_window.window, global_history_window.menu, false, false); ro_gui_wimp_event_register_menu_prepare(global_history_window.window, ro_gui_global_history_menu_prepare); ro_gui_wimp_event_register_menu_selection(global_history_window.window, ro_gui_global_history_menu_select); ro_gui_wimp_event_register_menu_warning(global_history_window.window, ro_gui_global_history_menu_warning); }
void gui_cert_verify(const char *url, const struct ssl_cert_info *certs, unsigned long num, nserror (*cb)(bool proceed, void *pw), void *cbpw) { struct ro_sslcert *sslcert_window; wimp_window_state state; wimp_icon_state istate; wimp_window_info info; os_error *error; bool set_extent; assert(certs); sslcert_window = malloc(sizeof(struct ro_sslcert)); if (sslcert_window == NULL) { LOG(("Failed to allocate memory for SSL Cert Dialog")); return; } /* Create the SSL window and its pane. */ error = xwimp_create_window(ro_gui_cert_dialog_template, &(sslcert_window->window)); if (error) { LOG(("xwimp_create_window: 0x%x: %s", error->errnum, error->errmess)); free(sslcert_window); return; } error = xwimp_create_window(ro_gui_cert_tree_template, &(sslcert_window->pane)); if (error) { LOG(("xwimp_create_window: 0x%x: %s", error->errnum, error->errmess)); free(sslcert_window); return; } /* Create the SSL data and build a tree from it. */ sslcert_window->tv = ro_treeview_create(sslcert_window->pane, NULL, NULL, sslcert_get_tree_flags()); if (sslcert_window->tv == NULL) { LOG(("Failed to allocate treeview")); free(sslcert_window); return; } sslcert_window->data = sslcert_create_session_data(num, url, cb, cbpw); sslcert_load_tree(ro_treeview_get_tree(sslcert_window->tv), certs, sslcert_window->data); tree_set_redraw(ro_treeview_get_tree(sslcert_window->tv), true); /* Set up the certificate window event handling. * * (The action buttons are registered as button events, not OK and * Cancel, as both need to carry out actions.) */ ro_gui_wimp_event_set_user_data(sslcert_window->window, sslcert_window); ro_gui_wimp_event_register_close_window(sslcert_window->window, ro_gui_cert_close_window); ro_gui_wimp_event_register_button(sslcert_window->window, ICON_SSL_REJECT, ro_gui_cert_reject); ro_gui_wimp_event_register_button(sslcert_window->window, ICON_SSL_ACCEPT, ro_gui_cert_accept); ro_gui_dialog_open_persistent(NULL, sslcert_window->window, false); /* Nest the tree window inside the pane window. To do this, we: * - Get the current pane extent, * - Get the parent window position and the location of the pane- * locating icon inside it, * - Set the visible area of the pane to suit, * - Check that the pane extents are OK for this visible area, and * increase them if necessary, * - Before finally opening the pane as a nested part of the parent. */ info.w = sslcert_window->pane; error = xwimp_get_window_info_header_only(&info); if (error) { ro_gui_cert_release_window(sslcert_window); LOG(("xwimp_get_window_info: 0x%x: %s", error->errnum, error->errmess)); return; } state.w = sslcert_window->window; error = xwimp_get_window_state(&state); if (error) { ro_gui_cert_release_window(sslcert_window); LOG(("xwimp_get_window_state: 0x%x: %s", error->errnum, error->errmess)); return; } istate.w = sslcert_window->window; istate.i = ICON_SSL_PANE; error = xwimp_get_icon_state(&istate); if (error) { ro_gui_cert_release_window(sslcert_window); LOG(("xwimp_get_icon_state: 0x%x: %s", error->errnum, error->errmess)); return; } state.w = sslcert_window->pane; state.visible.x1 = state.visible.x0 + istate.icon.extent.x1 - 20 - ro_get_vscroll_width(sslcert_window->pane); state.visible.x0 += istate.icon.extent.x0 + 20; state.visible.y0 = state.visible.y1 + istate.icon.extent.y0 + 20 + ro_get_hscroll_height(sslcert_window->pane); state.visible.y1 += istate.icon.extent.y1 - 32; set_extent = false; if ((info.extent.x1 - info.extent.x0) < (state.visible.x1 - state.visible.x0)) { info.extent.x0 = 0; info.extent.x1 = state.visible.x1 - state.visible.x0; set_extent = true; } if ((info.extent.y1 - info.extent.y0) < (state.visible.y1 - state.visible.y0)) { info.extent.y1 = 0; info.extent.x1 = state.visible.y0 - state.visible.y1; set_extent = true; } if (set_extent) { error = xwimp_set_extent(sslcert_window->pane, &(info.extent)); if (error) { ro_gui_cert_release_window(sslcert_window); LOG(("xwimp_set_extent: 0x%x: %s", error->errnum, error->errmess)); return; } } error = xwimp_open_window_nested(PTR_WIMP_OPEN(&state), sslcert_window->window, wimp_CHILD_LINKS_PARENT_VISIBLE_BOTTOM_OR_LEFT << wimp_CHILD_XORIGIN_SHIFT | wimp_CHILD_LINKS_PARENT_VISIBLE_TOP_OR_RIGHT << wimp_CHILD_YORIGIN_SHIFT | wimp_CHILD_LINKS_PARENT_VISIBLE_BOTTOM_OR_LEFT << wimp_CHILD_LS_EDGE_SHIFT | wimp_CHILD_LINKS_PARENT_VISIBLE_BOTTOM_OR_LEFT << wimp_CHILD_RS_EDGE_SHIFT); if (error) { ro_gui_cert_release_window(sslcert_window); LOG(("xwimp_open_window_nested: 0x%x: %s", error->errnum, error->errmess)); ro_gui_cert_release_window(sslcert_window); return; } ro_treeview_set_origin(sslcert_window->tv, 0, 0); }