Popup menu ownership of URLs.
This commit is contained in:
48
src/menu.cc
48
src/menu.cc
@ -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);
|
||||
}
|
||||
|
Reference in New Issue
Block a user