Popup menu ownership of URLs.

This commit is contained in:
2025-05-20 12:47:56 -04:00
parent bd581c55b6
commit ef7011c7cf

View File

@ -47,7 +47,7 @@ typedef struct {
// (This data can be encapsulated inside a class for each popup, but
// as popups are modal, there's no need).
static DilloUrl *popup_url = NULL;
static std::unique_ptr< DilloUrl > popup_url;
// Weak reference to the popup's bw
static BrowserWindow *popup_bw = NULL;
static void *popup_form = NULL;
@ -184,7 +184,7 @@ static void Menu_load_images_cb(Fl_Widget*, void *user_data)
void *doc = a_Bw_get_url_doc(popup_bw, page_url);
if (doc)
a_Html_load_images(doc, popup_url);
a_Html_load_images(doc, popup_url.get());
}
/**
@ -192,7 +192,7 @@ static void Menu_load_images_cb(Fl_Widget*, void *user_data)
*/
static void Menu_form_submit_cb(Fl_Widget*, void*)
{
void *doc = a_Bw_get_url_doc(popup_bw, popup_url);
void *doc = a_Bw_get_url_doc(popup_bw, popup_url.get());
if (doc)
a_Html_form_submit(doc, popup_form);
@ -203,7 +203,7 @@ static void Menu_form_submit_cb(Fl_Widget*, void*)
*/
static void Menu_form_reset_cb(Fl_Widget*, void*)
{
void *doc = a_Bw_get_url_doc(popup_bw, popup_url);
void *doc = a_Bw_get_url_doc(popup_bw, popup_url.get());
if (doc)
a_Html_form_reset(doc, popup_form);
@ -215,7 +215,7 @@ static void Menu_form_reset_cb(Fl_Widget*, void*)
static void Menu_form_hiddens_cb(Fl_Widget*, void *user_data)
{
bool visible = *((bool *) user_data);
void *doc = a_Bw_get_url_doc(popup_bw, popup_url);
void *doc = a_Bw_get_url_doc(popup_bw, popup_url.get());
if (doc)
a_Html_form_display_hiddens(doc, popup_form, !visible);
@ -243,7 +243,7 @@ static void Menu_bugmeter_validate(const char *validator_url)
{
if (popup_url &&
dStrAsciiCasecmp(URL_SCHEME(popup_url), "dpi")) {
const char *popup_str = URL_STR(popup_url),
const char *popup_str = URL_STR(popup_url.get()),
*ptr = strrchr(popup_str, '#');
char *no_fragment = ptr ? dStrndup(popup_str, ptr - popup_str)
: dStrdup(popup_str);
@ -375,8 +375,7 @@ void a_Menu_page_popup(BrowserWindow *bw, const DilloUrl *url,
popup_x = Fl::event_x();
popup_y = Fl::event_y();
popup_bw = bw;
delete popup_url;
popup_url = a_Url_dup(url).release();
popup_url = a_Url_dup(url);
has_bugs == TRUE ? pm[1].activate() : pm[1].deactivate();
@ -385,7 +384,7 @@ void a_Menu_page_popup(BrowserWindow *bw, const DilloUrl *url,
pm[0].deactivate();
else {
pm[0].activate();
pm[0].user_data(popup_url);
pm[0].user_data(popup_url.get());
}
if (stylesheets) {
@ -428,7 +427,7 @@ void a_Menu_page_popup(BrowserWindow *bw, const DilloUrl *url,
} else {
pm[2].deactivate();
}
pm[3].user_data(popup_url);
pm[3].user_data(popup_url.get());
a_Timeout_add(0.0, Menu_popup_cb, (void*)&page_data);
}
@ -554,13 +553,12 @@ void a_Menu_link_popup(BrowserWindow *bw, const DilloUrl *url, const DilloUrl *p
popup_x = Fl::event_x();
popup_y = Fl::event_y();
popup_bw = bw;
delete popup_url;
popup_url = a_Url_dup(url).release();
popup_url = a_Url_dup(url);
Fl_Menu_Item *link_menu = get_link_menu();
link_data.menu = link_menu;
Menu_set_link_menu_user_data(popup_url, page_url);
Menu_set_link_menu_user_data(popup_url.get(), page_url);
a_Timeout_add(0.0, Menu_popup_cb, (void*)&link_data);
}
@ -591,17 +589,16 @@ void a_Menu_image_popup(BrowserWindow *bw, const DilloUrl *url,
popup_x = Fl::event_x();
popup_y = Fl::event_y();
popup_bw = bw;
delete popup_url;
popup_url = a_Url_dup(url).release();
popup_url = a_Url_dup(url);
delete popup_page_url;
popup_page_url = a_Url_dup(page_url).release();
delete popup_link_url;
popup_link_url = a_Url_dup(link_url).release();
pm[0].user_data(popup_url);
pm[1].user_data(popup_url);
pm[2].user_data(popup_url);
pm[0].user_data(popup_url.get());
pm[1].user_data(popup_url.get());
pm[2].user_data(popup_url.get());
if (loaded_img) {
pm[3].deactivate();
@ -610,9 +607,9 @@ void a_Menu_image_popup(BrowserWindow *bw, const DilloUrl *url,
pm[3].user_data(popup_page_url);
}
pm[4].user_data(popup_url);
pm[5].user_data(popup_url);
pm[6].user_data(popup_url);
pm[4].user_data(popup_url.get());
pm[5].user_data(popup_url.get());
pm[6].user_data(popup_url.get());
if (link_url) {
pm[7].activate();
@ -642,8 +639,7 @@ void a_Menu_form_popup(BrowserWindow *bw, const DilloUrl *page_url,
popup_x = Fl::event_x();
popup_y = Fl::event_y();
popup_bw = bw;
delete popup_url;
popup_url = a_Url_dup(page_url).release();
popup_url = a_Url_dup(page_url);
popup_form = formptr;
hiddens_visible = hidvis;
@ -678,8 +674,7 @@ void a_Menu_file_popup(BrowserWindow *bw, void *v_wid)
popup_bw = bw;
popup_x = wid->x();
popup_y = wid->y() + wid->h();
delete popup_url;
popup_url = NULL;
popup_url.reset();
//pm->label(wid->visible() ? NULL : "File");
a_Timeout_add(0.0, Menu_simple_popup_cb, (void*)pm);
@ -703,8 +698,7 @@ void a_Menu_bugmeter_popup(BrowserWindow *bw, const DilloUrl *url)
popup_x = Fl::event_x();
popup_y = Fl::event_y();
popup_bw = bw;
delete popup_url;
popup_url = a_Url_dup(url).release();
popup_url = a_Url_dup(url);
a_Timeout_add(0.0, Menu_simple_popup_cb, (void*)pm);
}