From 2aff56a2f49bfb2d0c91a7b1b082b98c1bed90fda21880cc94fe9325d9e66406 Mon Sep 17 00:00:00 2001 From: ADAM David Alan Martin Date: Mon, 2 Jun 2025 11:26:53 -0400 Subject: [PATCH] Make `BrowserWindow` own more of its resources. --- src/bw.cc | 24 +++++++++++------------- src/bw.hh | 10 ++++++---- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/bw.cc b/src/bw.cc index 1cc9642..06d1f6c 100644 --- a/src/bw.cc +++ b/src/bw.cc @@ -69,7 +69,6 @@ BrowserWindow *a_Bw_new(void) bw->NumImages = 0; bw->NumImagesGot = 0; bw->NumPendingStyleSheets = 0; - bw->Docs = dList_new(8); bw->num_page_bugs = 0; @@ -86,7 +85,7 @@ BrowserWindow *a_Bw_new(void) */ BrowserWindow::~BrowserWindow() { - int i, j; + int i; for (i = 0; i < num_bws; i++) { if (bws[i] == this) { @@ -94,7 +93,6 @@ BrowserWindow::~BrowserWindow() dList_free(this->RootClients); dList_free(this->ImageClients); - dList_free(this->Docs); break; @@ -207,23 +205,23 @@ void a_Bw_add_url(BrowserWindow *bw, std::unique_ptr< DilloUrl > Url) /** * Add a document to the browser window's list. */ -void a_Bw_add_doc(BrowserWindow *bw, void *vdoc) +void a_Bw_add_doc(BrowserWindow *bw, DilloHtml *vdoc) { dReturn_if_fail ( bw != NULL && vdoc != NULL); - dList_append(bw->Docs, vdoc); + bw->Docs.push_back( vdoc ); } /** * Get current document. */ -void *a_Bw_get_current_doc(BrowserWindow *bw) +DilloHtml *a_Bw_get_current_doc(BrowserWindow *bw) { - void *doc = NULL; - int len = dList_length(bw->Docs); + DilloHtml *doc = NULL; + int len = bw->Docs.size(); if (len == 1) - doc = dList_nth_data(bw->Docs, 0); + doc = bw->Docs.at(0); else if (len > 1) MSG("a_Bw_get_current_doc() multiple docs not implemented\n"); @@ -249,12 +247,12 @@ void *a_Bw_get_url_doc(BrowserWindow *bw, const DilloUrl *Url) /** * Remove a document from the bw's list */ -void a_Bw_remove_doc(BrowserWindow *bw, void *vdoc) +void a_Bw_remove_doc(BrowserWindow *bw, DilloHtml *vdoc) { - void *data; + auto where= std::find( begin( bw->Docs ), end( bw->Docs ), vdoc ); - if ((data = dList_find(bw->Docs, vdoc))) { - dList_remove_fast(bw->Docs, data); + if (end( bw->Docs ) != where) { + bw->Docs.erase( where ); } } diff --git a/src/bw.hh b/src/bw.hh index b502799..f713aaf 100644 --- a/src/bw.hh +++ b/src/bw.hh @@ -21,6 +21,8 @@ extern "C++" #include } +struct DilloHtml; + /* * Flag Defines for a_Bw_stop_clients() */ @@ -50,7 +52,7 @@ struct BrowserWindow { void *render_layout; /** Root document(s). Currently only used by DilloHtml */ - Dlist *Docs; + std::vector< DilloHtml * > Docs; /** A list of active cache clients in the window (The primary Key) */ Dlist *RootClients; @@ -110,10 +112,10 @@ void a_Bw_add_client(BrowserWindow *bw, int Key, int Root); int a_Bw_remove_client(BrowserWindow *bw, int ClientKey); void a_Bw_close_client(BrowserWindow *bw, int ClientKey); void a_Bw_stop_clients(BrowserWindow *bw, int flags); -void a_Bw_add_doc(BrowserWindow *bw, void *vdoc); -void *a_Bw_get_current_doc(BrowserWindow *bw); +void a_Bw_add_doc(BrowserWindow *bw, DilloHtml *vdoc); +DilloHtml *a_Bw_get_current_doc(BrowserWindow *bw); void *a_Bw_get_url_doc(BrowserWindow *bw, const DilloUrl *Url); -void a_Bw_remove_doc(BrowserWindow *bw, void *vdoc); +void a_Bw_remove_doc(BrowserWindow *bw, DilloHtml *vdoc); void a_Bw_add_url(BrowserWindow *bw, std::unique_ptr< DilloUrl > Url); void a_Bw_cleanup(BrowserWindow *bw); /* expect API */