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
|
// (This data can be encapsulated inside a class for each popup, but
|
||||||
// as popups are modal, there's no need).
|
// 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
|
// Weak reference to the popup's bw
|
||||||
static BrowserWindow *popup_bw = NULL;
|
static BrowserWindow *popup_bw = NULL;
|
||||||
static void *popup_form = 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);
|
void *doc = a_Bw_get_url_doc(popup_bw, page_url);
|
||||||
|
|
||||||
if (doc)
|
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*)
|
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)
|
if (doc)
|
||||||
a_Html_form_submit(doc, popup_form);
|
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*)
|
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)
|
if (doc)
|
||||||
a_Html_form_reset(doc, popup_form);
|
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)
|
static void Menu_form_hiddens_cb(Fl_Widget*, void *user_data)
|
||||||
{
|
{
|
||||||
bool visible = *((bool *) 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)
|
if (doc)
|
||||||
a_Html_form_display_hiddens(doc, popup_form, !visible);
|
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 &&
|
if (popup_url &&
|
||||||
dStrAsciiCasecmp(URL_SCHEME(popup_url), "dpi")) {
|
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, '#');
|
*ptr = strrchr(popup_str, '#');
|
||||||
char *no_fragment = ptr ? dStrndup(popup_str, ptr - popup_str)
|
char *no_fragment = ptr ? dStrndup(popup_str, ptr - popup_str)
|
||||||
: dStrdup(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_x = Fl::event_x();
|
||||||
popup_y = Fl::event_y();
|
popup_y = Fl::event_y();
|
||||||
popup_bw = bw;
|
popup_bw = bw;
|
||||||
delete popup_url;
|
popup_url = a_Url_dup(url);
|
||||||
popup_url = a_Url_dup(url).release();
|
|
||||||
|
|
||||||
has_bugs == TRUE ? pm[1].activate() : pm[1].deactivate();
|
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();
|
pm[0].deactivate();
|
||||||
else {
|
else {
|
||||||
pm[0].activate();
|
pm[0].activate();
|
||||||
pm[0].user_data(popup_url);
|
pm[0].user_data(popup_url.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (stylesheets) {
|
if (stylesheets) {
|
||||||
@ -428,7 +427,7 @@ void a_Menu_page_popup(BrowserWindow *bw, const DilloUrl *url,
|
|||||||
} else {
|
} else {
|
||||||
pm[2].deactivate();
|
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);
|
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_x = Fl::event_x();
|
||||||
popup_y = Fl::event_y();
|
popup_y = Fl::event_y();
|
||||||
popup_bw = bw;
|
popup_bw = bw;
|
||||||
delete popup_url;
|
popup_url = a_Url_dup(url);
|
||||||
popup_url = a_Url_dup(url).release();
|
|
||||||
|
|
||||||
Fl_Menu_Item *link_menu = get_link_menu();
|
Fl_Menu_Item *link_menu = get_link_menu();
|
||||||
link_data.menu = 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);
|
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_x = Fl::event_x();
|
||||||
popup_y = Fl::event_y();
|
popup_y = Fl::event_y();
|
||||||
popup_bw = bw;
|
popup_bw = bw;
|
||||||
delete popup_url;
|
popup_url = a_Url_dup(url);
|
||||||
popup_url = a_Url_dup(url).release();
|
|
||||||
delete popup_page_url;
|
delete popup_page_url;
|
||||||
popup_page_url = a_Url_dup(page_url).release();
|
popup_page_url = a_Url_dup(page_url).release();
|
||||||
delete popup_link_url;
|
delete popup_link_url;
|
||||||
popup_link_url = a_Url_dup(link_url).release();
|
popup_link_url = a_Url_dup(link_url).release();
|
||||||
|
|
||||||
|
|
||||||
pm[0].user_data(popup_url);
|
pm[0].user_data(popup_url.get());
|
||||||
pm[1].user_data(popup_url);
|
pm[1].user_data(popup_url.get());
|
||||||
pm[2].user_data(popup_url);
|
pm[2].user_data(popup_url.get());
|
||||||
|
|
||||||
if (loaded_img) {
|
if (loaded_img) {
|
||||||
pm[3].deactivate();
|
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[3].user_data(popup_page_url);
|
||||||
}
|
}
|
||||||
|
|
||||||
pm[4].user_data(popup_url);
|
pm[4].user_data(popup_url.get());
|
||||||
pm[5].user_data(popup_url);
|
pm[5].user_data(popup_url.get());
|
||||||
pm[6].user_data(popup_url);
|
pm[6].user_data(popup_url.get());
|
||||||
|
|
||||||
if (link_url) {
|
if (link_url) {
|
||||||
pm[7].activate();
|
pm[7].activate();
|
||||||
@ -642,8 +639,7 @@ void a_Menu_form_popup(BrowserWindow *bw, const DilloUrl *page_url,
|
|||||||
popup_x = Fl::event_x();
|
popup_x = Fl::event_x();
|
||||||
popup_y = Fl::event_y();
|
popup_y = Fl::event_y();
|
||||||
popup_bw = bw;
|
popup_bw = bw;
|
||||||
delete popup_url;
|
popup_url = a_Url_dup(page_url);
|
||||||
popup_url = a_Url_dup(page_url).release();
|
|
||||||
popup_form = formptr;
|
popup_form = formptr;
|
||||||
|
|
||||||
hiddens_visible = hidvis;
|
hiddens_visible = hidvis;
|
||||||
@ -678,8 +674,7 @@ void a_Menu_file_popup(BrowserWindow *bw, void *v_wid)
|
|||||||
popup_bw = bw;
|
popup_bw = bw;
|
||||||
popup_x = wid->x();
|
popup_x = wid->x();
|
||||||
popup_y = wid->y() + wid->h();
|
popup_y = wid->y() + wid->h();
|
||||||
delete popup_url;
|
popup_url.reset();
|
||||||
popup_url = NULL;
|
|
||||||
|
|
||||||
//pm->label(wid->visible() ? NULL : "File");
|
//pm->label(wid->visible() ? NULL : "File");
|
||||||
a_Timeout_add(0.0, Menu_simple_popup_cb, (void*)pm);
|
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_x = Fl::event_x();
|
||||||
popup_y = Fl::event_y();
|
popup_y = Fl::event_y();
|
||||||
popup_bw = bw;
|
popup_bw = bw;
|
||||||
delete popup_url;
|
popup_url = a_Url_dup(url);
|
||||||
popup_url = a_Url_dup(url).release();
|
|
||||||
|
|
||||||
a_Timeout_add(0.0, Menu_simple_popup_cb, (void*)pm);
|
a_Timeout_add(0.0, Menu_simple_popup_cb, (void*)pm);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user