diff options
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gui.c | 68 | ||||
-rw-r--r-- | gtk/menu.c | 86 | ||||
-rw-r--r-- | gtk/menu.h | 30 | ||||
-rw-r--r-- | gtk/scaffolding.c | 187 | ||||
-rw-r--r-- | gtk/scaffolding.h | 11 | ||||
-rw-r--r-- | gtk/window.c | 45 | ||||
-rw-r--r-- | gtk/window.h | 1 |
7 files changed, 261 insertions, 167 deletions
@@ -33,13 +33,13 @@ #include <sys/select.h> #include <sys/stat.h> #include <sys/types.h> -#include <curl/curl.h> #include <gdk/gdkkeysyms.h> #include <gtk/gtk.h> #include <glib.h> #include "content/content.h" #include "content/fetch.h" +#include "content/fetchers.h" #include "content/fetchers/curl.h" #include "content/fetchers/resource.h" #include "content/hlcache.h" @@ -485,53 +485,39 @@ static bool nslog_stream_configure(FILE *fptr) static void nsgtk_poll(bool active) { - CURLMcode code; fd_set read_fd_set, write_fd_set, exc_fd_set; int max_fd; GPollFD *fd_list[1000]; unsigned int fd_count = 0; bool block = true; - schedule_run(); - - if (browser_reformat_pending) - block = false; - - if (active) { - FD_ZERO(&read_fd_set); - FD_ZERO(&write_fd_set); - FD_ZERO(&exc_fd_set); - code = curl_multi_fdset(fetch_curl_multi, - &read_fd_set, - &write_fd_set, - &exc_fd_set, - &max_fd); - assert(code == CURLM_OK); - for (int i = 0; i <= max_fd; i++) { - if (FD_ISSET(i, &read_fd_set)) { - GPollFD *fd = malloc(sizeof *fd); - fd->fd = i; - fd->events = G_IO_IN | G_IO_HUP | G_IO_ERR; - g_main_context_add_poll(0, fd, 0); - fd_list[fd_count++] = fd; - } - if (FD_ISSET(i, &write_fd_set)) { - GPollFD *fd = malloc(sizeof *fd); - fd->fd = i; - fd->events = G_IO_OUT | G_IO_ERR; - g_main_context_add_poll(0, fd, 0); - fd_list[fd_count++] = fd; - } - if (FD_ISSET(i, &exc_fd_set)) { - GPollFD *fd = malloc(sizeof *fd); - fd->fd = i; - fd->events = G_IO_ERR; - g_main_context_add_poll(0, fd, 0); - fd_list[fd_count++] = fd; - } + fetcher_fdset(&read_fd_set, &write_fd_set, &exc_fd_set, &max_fd); + for (int i = 0; i <= max_fd; i++) { + if (FD_ISSET(i, &read_fd_set)) { + GPollFD *fd = malloc(sizeof *fd); + fd->fd = i; + fd->events = G_IO_IN | G_IO_HUP | G_IO_ERR; + g_main_context_add_poll(0, fd, 0); + fd_list[fd_count++] = fd; + } + if (FD_ISSET(i, &write_fd_set)) { + GPollFD *fd = malloc(sizeof *fd); + fd->fd = i; + fd->events = G_IO_OUT | G_IO_ERR; + g_main_context_add_poll(0, fd, 0); + fd_list[fd_count++] = fd; + } + if (FD_ISSET(i, &exc_fd_set)) { + GPollFD *fd = malloc(sizeof *fd); + fd->fd = i; + fd->events = G_IO_ERR; + g_main_context_add_poll(0, fd, 0); + fd_list[fd_count++] = fd; } } + schedule_run(); + gtk_main_iteration_do(block); for (unsigned int i = 0; i != fd_count; i++) { @@ -539,10 +525,6 @@ static void nsgtk_poll(bool active) free(fd_list[i]); } - schedule_run(); - - if (browser_reformat_pending) - nsgtk_window_process_reformats(); } diff --git a/gtk/menu.c b/gtk/menu.c index 7c55a9fd6..14eb1f286 100644 --- a/gtk/menu.c +++ b/gtk/menu.c @@ -53,6 +53,13 @@ static bool nsgtk_menu_add_image_item(GtkMenu *menu, return true; } +#define NEW_MENU(n, m) \ + n = malloc(sizeof(*n)); \ + if (n == NULL) { \ + return NULL; \ + } \ + n->m##_menu = GTK_MENU(gtk_menu_new()) + #define IMAGE_ITEM(p, q, r, s, t)\ nsgtk_menu_add_image_item(s->p##_menu, &(s->q##_menuitem), #r,\ #r "Accel", t) @@ -66,7 +73,7 @@ static bool nsgtk_menu_add_image_item(GtkMenu *menu, GTK_WIDGET(s->q##_menuitem));\ gtk_widget_show(GTK_WIDGET(s->q##_menuitem));\ } - + #define SET_SUBMENU(q, r) \ do { \ r->q##_submenu = nsgtk_menu_##q##_submenu(group); \ @@ -76,7 +83,7 @@ static bool nsgtk_menu_add_image_item(GtkMenu *menu, gtk_menu_item_set_submenu(GTK_MENU_ITEM(r->q##_menuitem), \ GTK_WIDGET(r->q##_submenu->q##_menu)); \ } \ - } while(0) + } while(0) #define ADD_NAMED_SEP(q, r, s) \ do { \ @@ -85,7 +92,7 @@ static bool nsgtk_menu_add_image_item(GtkMenu *menu, gtk_menu_shell_append(GTK_MENU_SHELL(s->q##_menu), s->r##_separator); \ gtk_widget_show(s->r##_separator); \ } \ - } while(0) + } while(0) #define ADD_SEP(q, r) \ do { \ @@ -94,7 +101,7 @@ static bool nsgtk_menu_add_image_item(GtkMenu *menu, gtk_menu_shell_append(GTK_MENU_SHELL(r->q##_menu), w); \ gtk_widget_show(w); \ } \ - } while(0) + } while(0) #define ATTACH_PARENT(parent, msgname, menuv, group) \ do { \ @@ -107,9 +114,9 @@ static bool nsgtk_menu_add_image_item(GtkMenu *menu, gtk_menu_item_set_submenu(menuv, GTK_WIDGET(menuv##_menu)); \ gtk_menu_set_accel_group(menuv##_menu, group); \ } \ - } while(0) + } while(0) -/** +/** * creates an export submenu * \param group the 'global' in a gtk sense accelerator reference */ @@ -135,7 +142,7 @@ static struct nsgtk_export_submenu *nsgtk_menu_export_submenu(GtkAccelGroup *gro return ret; } -/** +/** * creates a scaleview submenu * \param group the 'global' in a gtk sense accelerator reference */ @@ -143,7 +150,7 @@ static struct nsgtk_export_submenu *nsgtk_menu_export_submenu(GtkAccelGroup *gro static struct nsgtk_scaleview_submenu *nsgtk_menu_scaleview_submenu( GtkAccelGroup *group) { - struct nsgtk_scaleview_submenu *ret = + struct nsgtk_scaleview_submenu *ret = malloc(sizeof(struct nsgtk_scaleview_submenu)); if (ret == NULL) { warn_user(messages_get("NoMemory"), 0); @@ -161,7 +168,7 @@ static struct nsgtk_scaleview_submenu *nsgtk_menu_scaleview_submenu( return ret; } -/** +/** * creates a tab navigation submenu * \param group the 'global' in a gtk sense accelerator reference */ @@ -186,7 +193,7 @@ static struct nsgtk_tabs_submenu *nsgtk_menu_tabs_submenu(GtkAccelGroup *group) return ret; } -/** +/** * creates an images submenu * \param group the 'global' in a gtk sense accelerator reference */ @@ -210,7 +217,7 @@ static struct nsgtk_images_submenu *nsgtk_menu_images_submenu(GtkAccelGroup *gro return ret; } -/** +/** * creates a toolbars submenu * \param group the 'global' in a gtk sense accelerator reference */ @@ -234,12 +241,12 @@ static struct nsgtk_toolbars_submenu *nsgtk_menu_toolbars_submenu( if (ret->menubar_menuitem != NULL) gtk_check_menu_item_set_active(ret->menubar_menuitem, TRUE); CHECK_ITEM(toolbars, toolbar, gtkToolBar, ret) - if (ret->toolbar_menuitem != NULL) + if (ret->toolbar_menuitem != NULL) gtk_check_menu_item_set_active(ret->toolbar_menuitem, TRUE); return ret; } -/** +/** * creates a debugging submenu * \param group the 'global' in a gtk sense accelerator reference */ @@ -264,8 +271,8 @@ static struct nsgtk_debugging_submenu *nsgtk_menu_debugging_submenu( IMAGE_ITEM(debugging, savedomtree, gtkSaveDomTree, ret, group); return ret; } - -/** + +/** * creates the file menu * \param group The gtk 'global' accelerator reference * \param parent The parent menu to attach to or NULL @@ -304,7 +311,7 @@ static struct nsgtk_file_menu *nsgtk_menu_file_submenu(GtkAccelGroup *group) return fmenu; } -/** +/** * creates an edit menu * \param group the 'global' in a gtk sense accelerator reference */ @@ -336,7 +343,7 @@ static struct nsgtk_edit_menu *nsgtk_menu_edit_submenu(GtkAccelGroup *group) return ret; } -/** +/** * creates a view menu * \param group the 'global' in a gtk sense accelerator reference */ @@ -378,7 +385,7 @@ static struct nsgtk_view_menu *nsgtk_menu_view_submenu(GtkAccelGroup *group) return ret; } -/** +/** * creates a nav menu * \param group the 'global' in a gtk sense accelerator reference */ @@ -415,7 +422,7 @@ static struct nsgtk_nav_menu *nsgtk_menu_nav_submenu(GtkAccelGroup *group) return ret; } -/** +/** * creates a help menu * \param group the 'global' in a gtk sense accelerator reference */ @@ -448,9 +455,9 @@ static struct nsgtk_help_menu *nsgtk_menu_help_submenu(GtkAccelGroup *group) * * Generate the main menu structure and attach it to a menubar widget. */ -struct nsgtk_bar_submenu *nsgtk_menu_bar_create(GtkMenuShell *menubar, GtkAccelGroup *group) +struct nsgtk_bar_submenu * +nsgtk_menu_bar_create(GtkMenuShell *menubar, GtkAccelGroup *group) { - ; struct nsgtk_bar_submenu *nmenu; nmenu = malloc(sizeof(struct nsgtk_bar_submenu)); @@ -479,22 +486,13 @@ struct nsgtk_bar_submenu *nsgtk_menu_bar_create(GtkMenuShell *menubar, GtkAccelG return nmenu; } -/** - * Generate right click menu menu. - * - */ -struct nsgtk_popup_submenu *nsgtk_menu_popup_create(GtkAccelGroup *group) +/* exported function documented in gtk/menu.h */ +struct nsgtk_popup_menu *nsgtk_popup_menu_create(GtkAccelGroup *group) { - struct nsgtk_popup_submenu *nmenu; + struct nsgtk_popup_menu *nmenu; - nmenu = malloc(sizeof(struct nsgtk_popup_submenu)); - if (nmenu == NULL) { - warn_user(messages_get("NoMemory"), 0); - return NULL; - } + NEW_MENU(nmenu, popup); - nmenu->popup_menu = GTK_MENU(gtk_menu_new()); - IMAGE_ITEM(popup, file, gtkFile, nmenu, group); SET_SUBMENU(file, nmenu); @@ -530,6 +528,26 @@ struct nsgtk_popup_submenu *nsgtk_menu_popup_create(GtkAccelGroup *group) IMAGE_ITEM(popup, paste, gtkPaste, nmenu, group); IMAGE_ITEM(popup, customize, gtkCustomize, nmenu, group); + return nmenu; +} + + +/* exported function documented in gtk/menu.h */ +struct nsgtk_link_menu * +nsgtk_link_menu_create(GtkAccelGroup *group) +{ + struct nsgtk_link_menu *nmenu; + + NEW_MENU(nmenu, link); + + IMAGE_ITEM(link, opentab, gtkOpentab, nmenu, group); + IMAGE_ITEM(link, openwin, gtkOpenwin, nmenu, group); + + ADD_SEP(link, nmenu); + + IMAGE_ITEM(link, save, gtkSavelink, nmenu, group); + IMAGE_ITEM(link, bookmark, gtkBookmarklink, nmenu, group); + IMAGE_ITEM(link, copy, gtkCopylink, nmenu, group); return nmenu; } diff --git a/gtk/menu.h b/gtk/menu.h index 681f43c2b..48b3f0f5c 100644 --- a/gtk/menu.h +++ b/gtk/menu.h @@ -143,7 +143,7 @@ struct nsgtk_bar_submenu { struct nsgtk_help_menu *help_submenu; }; -struct nsgtk_popup_submenu { +struct nsgtk_popup_menu { GtkMenu *popup_menu; GtkImageMenuItem *file_menuitem; @@ -189,7 +189,33 @@ struct nsgtk_popup_submenu { }; +struct nsgtk_link_menu { + GtkMenu *link_menu; + + GtkImageMenuItem *opentab_menuitem; + GtkImageMenuItem *openwin_menuitem; + + GtkImageMenuItem *save_menuitem; + GtkImageMenuItem *bookmark_menuitem; + GtkImageMenuItem *copy_menuitem; +}; + +/** + * Create main menu bar. + */ struct nsgtk_bar_submenu *nsgtk_menu_bar_create(GtkMenuShell *menubar, GtkAccelGroup *group); -struct nsgtk_popup_submenu *nsgtk_menu_popup_create(GtkAccelGroup *group); + +/** + * Generate right click menu menu. + * + */ +struct nsgtk_popup_menu *nsgtk_popup_menu_create(GtkAccelGroup *group); + +/** + * Generate context sensitive popup menu for link. + * + */ +struct nsgtk_link_menu *nsgtk_link_menu_create(GtkAccelGroup *group); + #endif diff --git a/gtk/scaffolding.c b/gtk/scaffolding.c index c2dc0fdc9..5b05fccdf 100644 --- a/gtk/scaffolding.c +++ b/gtk/scaffolding.c @@ -107,7 +107,10 @@ struct gtk_scaffolding { struct nsgtk_bar_submenu *menu_bar; /** right click popup menu hierarchy */ - struct nsgtk_popup_submenu *menu_popup; + struct nsgtk_popup_menu *menu_popup; + + /** link popup menu */ + struct nsgtk_link_menu *link_menu; GtkToolbar *tool_bar; struct nsgtk_button_connect *buttons[PLACEHOLDER_BUTTON]; @@ -147,7 +150,7 @@ static struct contextual_content current_menu_ctx; /** * Helper to hide popup menu entries by grouping */ -static void popup_menu_hide(struct nsgtk_popup_submenu *menu, bool submenu, +static void popup_menu_hide(struct nsgtk_popup_menu *menu, bool submenu, bool link, bool nav, bool cnp, bool custom) { if (submenu){ @@ -190,7 +193,7 @@ static void popup_menu_hide(struct nsgtk_popup_submenu *menu, bool submenu, /** * Helper to show popup menu entries by grouping */ -static void popup_menu_show(struct nsgtk_popup_submenu *menu, bool submenu, +static void popup_menu_show(struct nsgtk_popup_menu *menu, bool submenu, bool link, bool nav, bool cnp, bool custom) { if (submenu){ @@ -1023,6 +1026,44 @@ MENUHANDLER(link_opentab) return TRUE; } +/** + * Handler for bookmarking a link. attached to the popup menu. + */ +MENUHANDLER(link_bookmark) +{ + nsurl *url; + nserror error; + + if (current_menu_ctx.link_url == NULL) + return FALSE; + + error = nsurl_create(current_menu_ctx.link_url, &url); + if (error == NSERROR_OK) { + hotlist_add_url(url); + nsurl_unref(url); + } + if (error != NSERROR_OK) { + warn_user(messages_get_errorcode(error), 0); + } + + return TRUE; +} + +/** + * Handler for copying a link. attached to the popup menu. + */ +MENUHANDLER(link_copy) +{ + GtkClipboard *clipboard; + + if (current_menu_ctx.link_url == NULL) + return FALSE; + + clipboard = gtk_clipboard_get(GDK_SELECTION_CLIPBOARD); + gtk_clipboard_set_text(clipboard, current_menu_ctx.link_url, -1); + return TRUE; +} + MULTIHANDLER(cut) { @@ -1755,23 +1796,21 @@ static void nsgtk_attach_menu_handlers(struct gtk_scaffolding *g) * Create and connect handlers to popup menu. * * \param g scaffoliding to attach popup menu to. - * \return true on success or false on error. + * \return menu structure on sucess or NULL on error. */ -static bool nsgtk_new_scaffolding_popup(struct gtk_scaffolding *g, GtkAccelGroup *group) +static struct nsgtk_popup_menu * +nsgtk_new_scaffolding_popup(struct gtk_scaffolding *g, GtkAccelGroup *group) { - struct nsgtk_popup_submenu *nmenu; - - nmenu = nsgtk_menu_popup_create(group); + struct nsgtk_popup_menu *nmenu; - if (nmenu == NULL) - return false; + nmenu = nsgtk_popup_menu_create(group); -/** Connect a GTK signal handler to a widget */ -#define SIG_CONNECT(obj, sig, callback, ptr) \ - g_signal_connect(G_OBJECT(obj), (sig), G_CALLBACK(callback), (ptr)) + if (nmenu == NULL) { + return NULL; + } - SIG_CONNECT(nmenu->popup_menu, "hide", - nsgtk_window_popup_menu_hidden, g); + g_signal_connect(nmenu->popup_menu, "hide", + G_CALLBACK(nsgtk_window_popup_menu_hidden), g); g_signal_connect(nmenu->savelink_menuitem, "activate", G_CALLBACK(nsgtk_on_savelink_activate_menu), g); @@ -1797,9 +1836,42 @@ static bool nsgtk_new_scaffolding_popup(struct gtk_scaffolding *g, GtkAccelGroup /* set initial popup menu visibility */ popup_menu_hide(nmenu, true, false, false, false, true); - g->menu_popup = nmenu; + return nmenu; +} + +/** + * Create and connect handlers to link popup menu. + * + * \param g scaffoliding to attach popup menu to. + * \return true on success or false on error. + */ +static struct nsgtk_link_menu * +nsgtk_new_scaffolding_link_popup(struct gtk_scaffolding *g, GtkAccelGroup *group) +{ + struct nsgtk_link_menu *nmenu; + + nmenu = nsgtk_link_menu_create(group); + + if (nmenu == NULL) { + return NULL; + } + + g_signal_connect(nmenu->save_menuitem, "activate", + G_CALLBACK(nsgtk_on_savelink_activate_menu), g); + + g_signal_connect(nmenu->opentab_menuitem, "activate", + G_CALLBACK(nsgtk_on_link_opentab_activate_menu), g); + + g_signal_connect(nmenu->openwin_menuitem, "activate", + G_CALLBACK(nsgtk_on_link_openwin_activate_menu), g); + + g_signal_connect(nmenu->bookmark_menuitem, "activate", + G_CALLBACK(nsgtk_on_link_bookmark_activate_menu), g); - return true; + g_signal_connect(nmenu->copy_menuitem, "activate", + G_CALLBACK(nsgtk_on_link_copy_activate_menu), g); + + return nmenu; } nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel) @@ -2061,7 +2133,9 @@ nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel) nsgtk_window_tool_bar_clicked, g); /* create popup menu */ - nsgtk_new_scaffolding_popup(g, group); + g->menu_popup = nsgtk_new_scaffolding_popup(g, group); + + g->link_menu = nsgtk_new_scaffolding_link_popup(g, group); /* set up the menu signal handlers */ nsgtk_scaffolding_toolbar_init(g); @@ -2235,6 +2309,10 @@ gui_search_web_provider_update(const char *provider_name, nsgtk_entry_set_icon_from_pixbuf(current->webSearchEntry, GTK_ENTRY_ICON_PRIMARY, srch_pixbuf); + } else { + nsgtk_entry_set_icon_from_stock(current->webSearchEntry, + GTK_ENTRY_ICON_PRIMARY, + "gtk-find"); } /* set search entry text */ @@ -2247,7 +2325,9 @@ gui_search_web_provider_update(const char *provider_name, free(searchcontent); - g_object_unref(srch_pixbuf); + if (srch_pixbuf != NULL) { + g_object_unref(srch_pixbuf); + } return NSERROR_OK; } @@ -2444,9 +2524,8 @@ void nsgtk_scaffolding_set_top_level(struct gui_window *gw) nsgtk_scaffolding_set_icon(gw); /* Ensure the window's title bar is updated */ - if (bw->current_content != NULL) { - gui_window_set_title(gw, content_get_title(bw->current_content)); - } + gui_window_set_title(gw, browser_window_get_title(bw)); + } /* exported interface documented in scaffolding.h */ @@ -2510,53 +2589,53 @@ void nsgtk_scaffolding_initial_sensitivity(struct gtk_scaffolding *g) gtk_widget_set_sensitive(GTK_WIDGET(g->menu_bar->view_submenu->images_menuitem), FALSE); } -/** - * Checks if a location is over a link. - * - * Side effect of this function is to set the global current_menu_ctx - */ -static bool is_menu_over_link(struct gtk_scaffolding *g, gdouble x, gdouble y) +/* exported interface documented in gtk/scaffolding.h */ +void nsgtk_scaffolding_context_menu(struct gtk_scaffolding *g, + gdouble x, + gdouble y) { + GtkMenu *gtkmenu; + + /* update the global current_menu_ctx */ browser_window_get_contextual_content( nsgtk_get_browser_window(g->top_level), x, y, ¤t_menu_ctx); - if (current_menu_ctx.link_url == NULL) - return false; - return true; -} + if (current_menu_ctx.link_url != NULL) { + /* menu is opening over a link */ + gtkmenu = g->link_menu->link_menu; -void nsgtk_scaffolding_popup_menu(struct gtk_scaffolding *g, gdouble x, gdouble y) -{ - if (is_menu_over_link(g, x, y)) { popup_menu_show(g->menu_popup, false, true, false, false, false); + } else { - popup_menu_hide(g->menu_popup, false, true, false, false, false); - } + gtkmenu = g->menu_popup->popup_menu; - nsgtk_scaffolding_update_edit_actions_sensitivity(g); + popup_menu_hide(g->menu_popup, false, true, false, false, false); + + nsgtk_scaffolding_update_edit_actions_sensitivity(g); - if (!(g->buttons[COPY_BUTTON]->sensitivity)) - gtk_widget_hide(GTK_WIDGET(g->menu_popup->copy_menuitem)); - else - gtk_widget_show(GTK_WIDGET(g->menu_popup->copy_menuitem)); + if (!(g->buttons[COPY_BUTTON]->sensitivity)) + gtk_widget_hide(GTK_WIDGET(g->menu_popup->copy_menuitem)); + else + gtk_widget_show(GTK_WIDGET(g->menu_popup->copy_menuitem)); - if (!(g->buttons[CUT_BUTTON]->sensitivity)) - gtk_widget_hide(GTK_WIDGET(g->menu_popup->cut_menuitem)); - else - gtk_widget_show(GTK_WIDGET(g->menu_popup->cut_menuitem)); + if (!(g->buttons[CUT_BUTTON]->sensitivity)) + gtk_widget_hide(GTK_WIDGET(g->menu_popup->cut_menuitem)); + else + gtk_widget_show(GTK_WIDGET(g->menu_popup->cut_menuitem)); - if (!(g->buttons[PASTE_BUTTON]->sensitivity)) - gtk_widget_hide(GTK_WIDGET(g->menu_popup->paste_menuitem)); - else - gtk_widget_show(GTK_WIDGET(g->menu_popup->paste_menuitem)); + if (!(g->buttons[PASTE_BUTTON]->sensitivity)) + gtk_widget_hide(GTK_WIDGET(g->menu_popup->paste_menuitem)); + else + gtk_widget_show(GTK_WIDGET(g->menu_popup->paste_menuitem)); - /* hide customize */ - popup_menu_hide(g->menu_popup, false, false, false, false, true); + /* hide customize */ + popup_menu_hide(g->menu_popup, false, false, false, false, true); + } - gtk_menu_popup(g->menu_popup->popup_menu, NULL, NULL, NULL, NULL, 0, - gtk_get_current_event_time()); + gtk_menu_popup(gtkmenu, NULL, NULL, NULL, NULL, 0, + gtk_get_current_event_time()); } /** diff --git a/gtk/scaffolding.h b/gtk/scaffolding.h index f03a3402a..44f816037 100644 --- a/gtk/scaffolding.h +++ b/gtk/scaffolding.h @@ -166,8 +166,15 @@ void nsgtk_scaffolding_destroy(nsgtk_scaffolding *g); void nsgtk_scaffolding_set_sensitivity(struct gtk_scaffolding *g); void nsgtk_scaffolding_initial_sensitivity(struct gtk_scaffolding *g); -void nsgtk_scaffolding_popup_menu(struct gtk_scaffolding *g, gdouble x, - gdouble y); + +/** + * Open a context sensitive menu. + * + * \param g the scaffolding containing the browser window. + * \param x The x co-ordinate. + * \param y The y co-ordinate. + */ +void nsgtk_scaffolding_context_menu(struct gtk_scaffolding *g, gdouble x, gdouble y); void nsgtk_scaffolding_toolbar_size_allocate(GtkWidget *widget, GtkAllocation *alloc, gpointer data); void nsgtk_scaffolding_set_icon(struct gui_window *gw); diff --git a/gtk/window.c b/gtk/window.c index a3d6d4936..dc8cbf935 100644 --- a/gtk/window.c +++ b/gtk/window.c @@ -34,7 +34,7 @@ #include "gtk/window.h" #include "gtk/selection.h" #include "desktop/gui.h" -#include "desktop/browser_private.h" +#include "desktop/browser.h" #include "desktop/mouse.h" #include "desktop/searchweb.h" #include "desktop/textinput.h" @@ -338,8 +338,9 @@ static gboolean nsgtk_window_button_press_event(GtkWidget *widget, case 3: /* Right button, usually. Action button, context menu. */ browser_window_remove_caret(g->bw, true); - nsgtk_scaffolding_popup_menu(g->scaffold, g->mouse.pressed_x, - g->mouse.pressed_y); + nsgtk_scaffolding_context_menu(g->scaffold, + g->mouse.pressed_x, + g->mouse.pressed_y); return TRUE; default: @@ -638,9 +639,7 @@ static gboolean nsgtk_window_size_allocate_event(GtkWidget *widget, { struct gui_window *g = data; - g->bw->reformat_pending = true; - browser_reformat_pending = true; - + browser_window_schedule_reformat(g->bw); return TRUE; } @@ -730,12 +729,6 @@ gui_window_create(struct browser_window *bw, g->bw = bw; g->mouse.state = 0; g->current_pointer = GUI_POINTER_DEFAULT; - if (flags & GW_CREATE_CLONE) { - assert(existing != NULL); - bw->scale = existing->bw->scale; - } else { - bw->scale = nsoption_int(scale) / 100; - } /* attach scaffold */ if (flags & GW_CREATE_TAB) { @@ -854,35 +847,24 @@ gui_window_create(struct browser_window *bw, void nsgtk_reflow_all_windows(void) { for (struct gui_window *g = window_list; g; g = g->next) { - nsgtk_tab_options_changed( - nsgtk_scaffolding_notebook(g->scaffold)); - g->bw->reformat_pending = true; + nsgtk_tab_options_changed(nsgtk_scaffolding_notebook(g->scaffold)); + browser_window_schedule_reformat(g->bw); } - - browser_reformat_pending = true; } /** - * Process pending reformats + * callback from core to reformat a window. */ - -void nsgtk_window_process_reformats(void) +static void nsgtk_window_reformat(struct gui_window *gw) { - struct gui_window *g; GtkAllocation alloc; - browser_reformat_pending = false; - for (g = window_list; g; g = g->next) { - if (!g->bw->reformat_pending) - continue; - - g->bw->reformat_pending = false; - - /* @todo consider gtk_widget_get_allocated_width() */ - nsgtk_widget_get_allocation(GTK_WIDGET(g->layout), &alloc); + if (gw != NULL) { + /** @todo consider gtk_widget_get_allocated_width() */ + nsgtk_widget_get_allocation(GTK_WIDGET(gw->layout), &alloc); - browser_window_reformat(g->bw, false, alloc.width, alloc.height); + browser_window_reformat(gw->bw, false, alloc.width, alloc.height); } } @@ -1242,6 +1224,7 @@ static struct gui_window_table window_table = { .set_scroll = gui_window_set_scroll, .get_dimensions = gui_window_get_dimensions, .update_extent = gui_window_update_extent, + .reformat = nsgtk_window_reformat, .set_icon = gui_window_set_icon, .set_status = gui_window_set_status, diff --git a/gtk/window.h b/gtk/window.h index e4a4fda6a..01345b993 100644 --- a/gtk/window.h +++ b/gtk/window.h @@ -36,7 +36,6 @@ struct browser_window *nsgtk_get_browser_window(struct gui_window *g); nsgtk_scaffolding *nsgtk_get_scaffold(struct gui_window *g); GdkPixbuf *nsgtk_get_icon(struct gui_window *gw); void nsgtk_reflow_all_windows(void); -void nsgtk_window_process_reformats(void); float nsgtk_get_scale_for_gui(struct gui_window *g); int nsgtk_gui_window_update_targets(struct gui_window *g); void nsgtk_window_destroy_browser(struct gui_window *g); |