Clean up gui_window creation API.
This commit is contained in:
parent
987218e144
commit
ea79e85fcd
27
amiga/gui.c
27
amiga/gui.c
|
@ -3225,8 +3225,8 @@ nserror ami_gui_new_blank_tab(struct gui_window_2 *gwin)
|
|||
|
||||
static struct gui_window *
|
||||
gui_window_create(struct browser_window *bw,
|
||||
struct browser_window *clone,
|
||||
bool new_tab)
|
||||
struct gui_window *existing,
|
||||
gui_window_create_flags flags)
|
||||
{
|
||||
struct gui_window *g = NULL;
|
||||
bool closegadg=TRUE;
|
||||
|
@ -3250,15 +3250,12 @@ gui_window_create(struct browser_window *bw,
|
|||
if (nsoption_bool(resize_with_contents)) idcmp_sizeverify = 0;
|
||||
bw->scale = 1.0;
|
||||
|
||||
if(clone)
|
||||
if(existing)
|
||||
{
|
||||
if(clone->window)
|
||||
{
|
||||
curx=clone->window->shared->win->LeftEdge;
|
||||
cury=clone->window->shared->win->TopEdge;
|
||||
curw=clone->window->shared->win->Width;
|
||||
curh=clone->window->shared->win->Height;
|
||||
}
|
||||
curx=existing->shared->win->LeftEdge;
|
||||
cury=existing->shared->win->TopEdge;
|
||||
curw=existing->shared->win->Width;
|
||||
curh=existing->shared->win->Height;
|
||||
}
|
||||
|
||||
g = AllocVecTags(sizeof(struct gui_window), AVT_ClearWithValue, 0, TAG_DONE);
|
||||
|
@ -3272,9 +3269,9 @@ gui_window_create(struct browser_window *bw,
|
|||
NewList(&g->dllist);
|
||||
g->deferred_rects = NewObjList();
|
||||
|
||||
if(new_tab && clone)
|
||||
if((flags & GW_CREATE_TAB) && existing)
|
||||
{
|
||||
g->shared = clone->window->shared;
|
||||
g->shared = existing->shared;
|
||||
g->tab = g->shared->next_tab;
|
||||
|
||||
if((g->shared->tabs == 1) && (nsoption_bool(tab_always_show) == false))
|
||||
|
@ -3299,10 +3296,10 @@ gui_window_create(struct browser_window *bw,
|
|||
{
|
||||
struct Node *insert_after = clone->window->tab_node;
|
||||
|
||||
if(clone->window->last_new_tab)
|
||||
insert_after = clone->window->last_new_tab;
|
||||
if(existing->last_new_tab)
|
||||
insert_after = existing->last_new_tab;
|
||||
Insert(&g->shared->tab_list, g->tab_node, insert_after);
|
||||
clone->window->last_new_tab = g->tab_node;
|
||||
existing->last_new_tab = g->tab_node;
|
||||
}
|
||||
|
||||
RefreshSetGadgetAttrs((struct Gadget *)g->shared->objects[GID_TABS],
|
||||
|
|
10
atari/gui.c
10
atari/gui.c
|
@ -211,11 +211,11 @@ static void gui_poll(bool active)
|
|||
|
||||
static struct gui_window *
|
||||
gui_window_create(struct browser_window *bw,
|
||||
struct browser_window *clone,
|
||||
bool new_tab) {
|
||||
struct gui_window *existing,
|
||||
gui_window_create_flags flags) {
|
||||
struct gui_window *gw=NULL;
|
||||
LOG(( "gw: %p, BW: %p, clone %p, tab: %d\n" , gw, bw, clone,
|
||||
(int)new_tab
|
||||
LOG(( "gw: %p, BW: %p, existing %p, flags: %d\n" , gw, bw, existing,
|
||||
(int)flags
|
||||
));
|
||||
|
||||
gw = calloc(1, sizeof(struct gui_window));
|
||||
|
@ -223,7 +223,7 @@ gui_window_create(struct browser_window *bw,
|
|||
return NULL;
|
||||
|
||||
LOG(("new window: %p, bw: %p\n", gw, bw));
|
||||
window_create(gw, bw, clone, WIDGET_STATUSBAR|WIDGET_TOOLBAR|WIDGET_RESIZE\
|
||||
window_create(gw, bw, existing, WIDGET_STATUSBAR|WIDGET_TOOLBAR|WIDGET_RESIZE\
|
||||
|WIDGET_SCROLL);
|
||||
if (gw->root->win) {
|
||||
GRECT pos = {
|
||||
|
|
|
@ -230,7 +230,7 @@ static short handle_event(GUIWIN *win, EVMULT_OUT *ev_out, short msg[8])
|
|||
|
||||
int window_create(struct gui_window * gw,
|
||||
struct browser_window * bw,
|
||||
struct browser_window * clone,
|
||||
struct gui_window * existing,
|
||||
unsigned long inflags)
|
||||
{
|
||||
int err = 0;
|
||||
|
@ -294,8 +294,8 @@ int window_create(struct gui_window * gw,
|
|||
assert(gw->browser);
|
||||
|
||||
gw->browser->bw = bw;
|
||||
if(clone)
|
||||
gw->browser->bw->scale = clone->scale;
|
||||
if(existing)
|
||||
gw->browser->bw->scale = existing->browser->bw->scale;
|
||||
else
|
||||
gw->browser->bw->scale = 1;
|
||||
|
||||
|
|
|
@ -337,8 +337,8 @@ float nsbeos_get_scale_for_gui(struct gui_window *g)
|
|||
|
||||
/* Create a gui_window */
|
||||
static struct gui_window *gui_window_create(struct browser_window *bw,
|
||||
struct browser_window *clone,
|
||||
bool new_tab)
|
||||
struct gui_window *existing,
|
||||
gui_window_create_flags flags)
|
||||
{
|
||||
struct gui_window *g; /**< what we're creating to return */
|
||||
|
||||
|
@ -353,8 +353,8 @@ static struct gui_window *gui_window_create(struct browser_window *bw,
|
|||
g->bw = bw;
|
||||
g->mouse.state = 0;
|
||||
g->current_pointer = GUI_POINTER_DEFAULT;
|
||||
if (clone != NULL)
|
||||
bw->scale = clone->scale;
|
||||
if (existing != NULL)
|
||||
bw->scale = existing->bw->scale;
|
||||
else
|
||||
bw->scale = (float) nsoption_int(scale) / 100;
|
||||
|
||||
|
|
10
cocoa/gui.m
10
cocoa/gui.m
|
@ -64,21 +64,21 @@ static void gui_poll(bool active)
|
|||
struct browser_window;
|
||||
|
||||
static struct gui_window *gui_window_create(struct browser_window *bw,
|
||||
struct browser_window *clone,
|
||||
bool new_tab)
|
||||
struct gui_window *existing,
|
||||
gui_window_create_flags flags)
|
||||
{
|
||||
BrowserWindowController *window = nil;
|
||||
|
||||
if (clone != NULL) {
|
||||
if (existing != NULL) {
|
||||
bw->scale = clone->scale;
|
||||
window = [(BrowserViewController *)(clone->window) windowController];
|
||||
window = [(BrowserViewController *)(existing) windowController];
|
||||
} else {
|
||||
bw->scale = (float) nsoption_int(scale) / 100;
|
||||
}
|
||||
|
||||
BrowserViewController *result = [[BrowserViewController alloc] initWithBrowser: bw];
|
||||
|
||||
if (!new_tab || nil == window) {
|
||||
if (!(flags & GW_CREATE_TAB) || nil == window) {
|
||||
window = [[[BrowserWindowController alloc] init] autorelease];
|
||||
[[window window] makeKeyAndOrderFront: nil];
|
||||
}
|
||||
|
|
|
@ -699,7 +699,6 @@ browser_window_create(enum browser_window_nav_flags flags,
|
|||
struct browser_window **ret_bw)
|
||||
{
|
||||
struct browser_window *bw;
|
||||
struct browser_window *top;
|
||||
|
||||
/* caller must provide window to clone or be adding to history */
|
||||
assert(clone ||
|
||||
|
@ -730,9 +729,14 @@ browser_window_create(enum browser_window_nav_flags flags,
|
|||
/* gui window */
|
||||
/* from the front end's pov, it clones the top level browser window,
|
||||
* so find that. */
|
||||
top = browser_window_get_root(clone);
|
||||
clone = browser_window_get_root(clone);
|
||||
|
||||
bw->window = guit->window->create(bw, top, ((flags & BROWSER_WINDOW_TAB) != 0));
|
||||
bw->window = guit->window->create(bw,
|
||||
(clone != NULL) ? clone->window : NULL,
|
||||
((flags & BROWSER_WINDOW_TAB) ?
|
||||
GW_CREATE_TAB : GW_CREATE_NONE) |
|
||||
((clone != NULL) ?
|
||||
GW_CREATE_CLONE : GW_CREATE_NONE));
|
||||
|
||||
if (bw->window == NULL) {
|
||||
browser_window_destroy(bw);
|
||||
|
@ -1944,6 +1948,15 @@ nsurl * browser_window_get_url(struct browser_window *bw)
|
|||
}
|
||||
|
||||
|
||||
/* Exported interface, documented in browser.h */
|
||||
struct history * browser_window_get_history(struct browser_window *bw)
|
||||
{
|
||||
assert(bw != NULL);
|
||||
|
||||
return bw->history;
|
||||
}
|
||||
|
||||
|
||||
/* Exported interface, documented in browser.h */
|
||||
bool browser_window_has_content(struct browser_window *bw)
|
||||
{
|
||||
|
|
|
@ -129,6 +129,16 @@ nserror browser_window_navigate(struct browser_window *bw,
|
|||
*/
|
||||
nsurl * browser_window_get_url(struct browser_window *bw);
|
||||
|
||||
/**
|
||||
* Get a browser window's history object.
|
||||
*
|
||||
* \param bw browser window
|
||||
* \return pointer browser window's history object
|
||||
*
|
||||
* Clients need history object to make use of the history_* functions.
|
||||
*/
|
||||
struct history * browser_window_get_history(struct browser_window *bw);
|
||||
|
||||
/**
|
||||
* Get a browser window's content extents.
|
||||
*
|
||||
|
|
|
@ -54,6 +54,12 @@ typedef enum {
|
|||
GDRAGGING_OTHER
|
||||
} gui_drag_type;
|
||||
|
||||
typedef enum {
|
||||
GW_CREATE_NONE = 0, /* New window */
|
||||
GW_CREATE_CLONE = (1 << 0), /* Clone existing window */
|
||||
GW_CREATE_TAB = (1 << 1) /* In same window as existing */
|
||||
} gui_window_create_flags;
|
||||
|
||||
struct gui_window;
|
||||
struct gui_download_window;
|
||||
struct browser_window;
|
||||
|
@ -77,8 +83,23 @@ struct gui_window_table {
|
|||
|
||||
/* Mandantory entries */
|
||||
|
||||
/** create a gui window for a browsing context */
|
||||
struct gui_window *(*create)(struct browser_window *bw, struct browser_window *clone, bool new_tab);
|
||||
/**
|
||||
* Create and open a gui window for a browsing context.
|
||||
*
|
||||
* \param bw bw to create gui_window for
|
||||
* \param existing an existing gui_window, may be NULL
|
||||
* \param flags flags for gui window creation
|
||||
* \return gui window, or NULL on error
|
||||
*
|
||||
* If GW_CREATE_CLONE or GW_CREATE_TAB flags are set, existing is
|
||||
* non-NULL.
|
||||
*
|
||||
* Front end's gui_window must include a reference to the
|
||||
* browser window passed in the bw param.
|
||||
*/
|
||||
struct gui_window *(*create)(struct browser_window *bw,
|
||||
struct gui_window *existing,
|
||||
gui_window_create_flags flags);
|
||||
|
||||
/** destroy previously created gui window */
|
||||
void (*destroy)(struct gui_window *g);
|
||||
|
|
|
@ -1507,8 +1507,8 @@ create_normal_browser_window(struct gui_window *gw, int furniture_width)
|
|||
|
||||
static struct gui_window *
|
||||
gui_window_create(struct browser_window *bw,
|
||||
struct browser_window *clone,
|
||||
bool new_tab)
|
||||
struct gui_window *existing,
|
||||
gui_window_create_flags flags)
|
||||
{
|
||||
struct gui_window *gw;
|
||||
|
||||
|
@ -1517,8 +1517,7 @@ gui_window_create(struct browser_window *bw,
|
|||
if (gw == NULL)
|
||||
return NULL;
|
||||
|
||||
/* seems we need to associate the gui window with the underlying
|
||||
* browser window
|
||||
/* associate the gui window with the underlying browser window
|
||||
*/
|
||||
gw->bw = bw;
|
||||
|
||||
|
|
15
gtk/window.c
15
gtk/window.c
|
@ -663,8 +663,8 @@ static void window_destroy(GtkWidget *widget, gpointer data)
|
|||
/* Core interface documented in desktop/gui.h to create a gui_window */
|
||||
static struct gui_window *
|
||||
gui_window_create(struct browser_window *bw,
|
||||
struct browser_window *clone,
|
||||
bool new_tab)
|
||||
struct gui_window *existing,
|
||||
gui_window_create_flags flags)
|
||||
{
|
||||
struct gui_window *g; /**< what we're creating to return */
|
||||
GError* error = NULL;
|
||||
|
@ -693,16 +693,17 @@ gui_window_create(struct browser_window *bw,
|
|||
g->bw = bw;
|
||||
g->mouse.state = 0;
|
||||
g->current_pointer = GUI_POINTER_DEFAULT;
|
||||
if (clone != NULL) {
|
||||
bw->scale = clone->scale;
|
||||
if (flags & GW_CREATE_CLONE) {
|
||||
assert(existing != NULL);
|
||||
bw->scale = existing->bw->scale;
|
||||
} else {
|
||||
bw->scale = nsoption_int(scale) / 100;
|
||||
}
|
||||
|
||||
/* attach scaffold */
|
||||
if (new_tab) {
|
||||
assert(clone != NULL);
|
||||
g->scaffold = clone->window->scaffold;
|
||||
if (flags & GW_CREATE_TAB) {
|
||||
assert(existing != NULL);
|
||||
g->scaffold = existing->scaffold;
|
||||
} else {
|
||||
/* Now construct and attach a scaffold */
|
||||
g->scaffold = nsgtk_new_scaffolding(g);
|
||||
|
|
|
@ -89,8 +89,8 @@ monkey_kill_browser_windows(void)
|
|||
|
||||
static struct gui_window *
|
||||
gui_window_create(struct browser_window *bw,
|
||||
struct browser_window *clone,
|
||||
bool new_tab)
|
||||
struct gui_window *existing,
|
||||
gui_window_create_flags flags)
|
||||
{
|
||||
struct gui_window *ret = calloc(sizeof(*ret), 1);
|
||||
if (ret == NULL)
|
||||
|
@ -102,8 +102,9 @@ gui_window_create(struct browser_window *bw,
|
|||
ret->width = 800;
|
||||
ret->height = 600;
|
||||
|
||||
fprintf(stdout, "WINDOW NEW WIN %u FOR %p CLONE %p NEWTAB %s\n",
|
||||
ret->win_num, bw, clone, new_tab ? "TRUE" : "FALSE");
|
||||
fprintf(stdout, "WINDOW NEW WIN %u FOR %p EXISTING %p NEWTAB %s CLONE %s\n",
|
||||
ret->win_num, bw, existing, flags & GW_CREATE_TAB ? "TRUE" : "FALSE",
|
||||
flags & GW_CREATE_CLONE ? "TRUE" : "FALSE");
|
||||
fprintf(stdout, "WINDOW SIZE WIN %u WIDTH %d HEIGHT %d\n",
|
||||
ret->win_num, ret->width, ret->height);
|
||||
|
||||
|
|
|
@ -152,8 +152,9 @@ static void ro_gui_window_update_theme(void *data, bool ok);
|
|||
|
||||
static bool ro_gui_window_import_text(struct gui_window *g,
|
||||
const char *filename);
|
||||
static void ro_gui_window_clone_options(struct browser_window *new_bw,
|
||||
struct browser_window *old_bw);
|
||||
static void ro_gui_window_clone_options(
|
||||
struct gui_window *new_gui,
|
||||
struct gui_window *old_gui);
|
||||
|
||||
static bool ro_gui_window_prepare_form_select_menu(struct browser_window *bw,
|
||||
struct form_control *control);
|
||||
|
@ -400,14 +401,15 @@ static void gui_window_place_caret(struct gui_window *g, int x, int y, int heigh
|
|||
/**
|
||||
* Create and open a new browser window.
|
||||
*
|
||||
* \param bw The browser window structure to update
|
||||
* \param clone The browser window to clone options from, or NULL for default
|
||||
* \param new_tab Determines if new browser context should be a tab or window.
|
||||
* \return A gui window, or NULL on error and error reported
|
||||
* \param bw bw to create gui_window for
|
||||
* \param existing an existing gui_window, may be NULL
|
||||
* \param flags flags for gui window creation
|
||||
* \return gui window, or NULL on error
|
||||
*/
|
||||
|
||||
static struct gui_window *gui_window_create(struct browser_window *bw,
|
||||
struct browser_window *clone, bool new_tab)
|
||||
struct gui_window *existing,
|
||||
gui_window_create_flags flags)
|
||||
{
|
||||
int screen_width, screen_height, win_width, win_height, scroll_width;
|
||||
static int window_count = 2;
|
||||
|
@ -416,7 +418,6 @@ static struct gui_window *gui_window_create(struct browser_window *bw,
|
|||
os_error *error;
|
||||
bool open_centred = true;
|
||||
struct gui_window *g;
|
||||
struct browser_window *top;
|
||||
|
||||
g = malloc(sizeof *g);
|
||||
if (!g) {
|
||||
|
@ -433,9 +434,10 @@ static struct gui_window *gui_window_create(struct browser_window *bw,
|
|||
g->iconise_icon = -1;
|
||||
|
||||
/* Set the window position */
|
||||
if (clone && clone->window && nsoption_bool(window_size_clone)) {
|
||||
for (top = clone; top->parent; top = top->parent);
|
||||
state.w = top->window->window;
|
||||
if (existing != NULL &&
|
||||
flags & GW_CREATE_CLONE &&
|
||||
nsoption_bool(window_size_clone)) {
|
||||
state.w = existing->window;
|
||||
error = xwimp_get_window_state(&state);
|
||||
if (error) {
|
||||
LOG(("xwimp_get_window_state: 0x%x: %s",
|
||||
|
@ -594,7 +596,8 @@ static struct gui_window *gui_window_create(struct browser_window *bw,
|
|||
|
||||
/* Set the window options */
|
||||
bw->window = g;
|
||||
ro_gui_window_clone_options(bw, clone);
|
||||
bw->scale = ((float)nsoption_int(scale)) / 100;
|
||||
ro_gui_window_clone_options(g, existing);
|
||||
ro_gui_window_update_toolbar_buttons(g);
|
||||
|
||||
/* Open the window at the top of the stack */
|
||||
|
@ -4634,29 +4637,19 @@ bool ro_gui_window_import_text(struct gui_window *g, const char *filename)
|
|||
/**
|
||||
* Clones a browser window's options.
|
||||
*
|
||||
* \param new_bw the new browser window
|
||||
* \param old_bw the browser window to clone from, or NULL for default
|
||||
* \param new_gui the new gui window
|
||||
* \param old_gui the gui window to clone from, or NULL for default
|
||||
*/
|
||||
|
||||
void ro_gui_window_clone_options(struct browser_window *new_bw,
|
||||
struct browser_window *old_bw)
|
||||
void ro_gui_window_clone_options(
|
||||
struct gui_window *new_gui,
|
||||
struct gui_window *old_gui)
|
||||
{
|
||||
struct gui_window *old_gui = NULL;
|
||||
struct gui_window *new_gui;
|
||||
|
||||
assert(new_bw);
|
||||
|
||||
/* Get our GUIs
|
||||
*/
|
||||
new_gui = new_bw->window;
|
||||
|
||||
if (old_bw)
|
||||
old_gui = old_bw->window;
|
||||
assert(new_gui);
|
||||
|
||||
/* Clone the basic options
|
||||
*/
|
||||
if (!old_gui) {
|
||||
new_bw->scale = ((float)nsoption_int(scale)) / 100;
|
||||
new_gui->option.buffer_animations = nsoption_bool(buffer_animations);
|
||||
new_gui->option.buffer_everything = nsoption_bool(buffer_everything);
|
||||
} else {
|
||||
|
|
|
@ -1232,8 +1232,8 @@ static HWND nsws_window_create(struct gui_window *gw)
|
|||
*/
|
||||
static struct gui_window *
|
||||
gui_window_create(struct browser_window *bw,
|
||||
struct browser_window *clone,
|
||||
bool new_tab)
|
||||
struct gui_window *existing,
|
||||
gui_window_create_flags flags)
|
||||
{
|
||||
struct gui_window *gw;
|
||||
|
||||
|
|
Loading…
Reference in New Issue