summaryrefslogtreecommitdiff
path: root/gtk/gtk_scaffolding.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtk_scaffolding.c')
-rw-r--r--gtk/gtk_scaffolding.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/gtk/gtk_scaffolding.c b/gtk/gtk_scaffolding.c
index 66eefc837..c13acbad5 100644
--- a/gtk/gtk_scaffolding.c
+++ b/gtk/gtk_scaffolding.c
@@ -102,6 +102,7 @@ struct menu_events {
static int open_windows = 0; /**< current number of open browsers */
static struct gtk_scaffolding *current_model; /**< current window for model dialogue use */
+static gboolean nsgtk_window_delete_event(GtkWidget *, gpointer);
static void nsgtk_window_destroy_event(GtkWidget *, gpointer);
static void nsgtk_window_update_back_forward(struct gtk_scaffolding *);
@@ -233,6 +234,14 @@ void nsgtk_attach_menu_handlers(GladeXML *xml, gpointer g)
/* event handlers and support functions for them */
+gboolean nsgtk_window_delete_event(GtkWidget *widget, gpointer data)
+{
+ if (open_windows == 1 && nsgtk_check_for_downloads(GTK_WINDOW(widget)))
+ return TRUE;
+ else
+ return FALSE;
+}
+
void nsgtk_window_destroy_event(GtkWidget *widget, gpointer data)
{
struct gtk_scaffolding *g = data;
@@ -469,20 +478,24 @@ MENUHANDLER(close_window)
MENUHANDLER(quit)
{
- netsurf_quit = true;
+ struct gtk_scaffolding *gw = (struct gtk_scaffolding *)g;
+
+ if (!nsgtk_check_for_downloads(gw->window))
+ netsurf_quit = true;
return TRUE;
}
MENUHANDLER(cut)
{
struct gtk_scaffolding *gw = (struct gtk_scaffolding *)g;
+ struct browser_window *bw = nsgtk_get_browser_for_gui(gw->top_level);
GtkWidget *focused = gtk_window_get_focus(gw->window);
/* If the url bar has focus, let gtk handle it */
if (GTK_IS_EDITABLE (focused))
gtk_editable_cut_clipboard (GTK_EDITABLE(gw->url_bar));
else
- /* TODO: Implement Cut functionality */;
+ browser_window_key_press(bw, 24);
}
MENUHANDLER(copy)
@@ -630,7 +643,8 @@ MENUHANDLER(status_bar)
MENUHANDLER(downloads)
{
- nsgtk_download_show();
+ struct gtk_scaffolding *gw = (struct gtk_scaffolding *)g;
+ nsgtk_download_show(gw->window);
return TRUE;
}
@@ -876,7 +890,7 @@ nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
g->status_pane = GTK_PANED(GET_WIDGET("hpaned1"));
g->preferences_dialog = NULL;
-
+
/* set this window's size and position to what's in the options, or
* or some sensible default if they're not set yet.
*/
@@ -964,6 +978,7 @@ nsgtk_scaffolding *nsgtk_new_scaffolding(struct gui_window *toplevel)
gtk_widget_hide_on_delete, NULL);
/* connect signals to handlers. */
+ CONNECT(g->window, "delete-event", nsgtk_window_delete_event, NULL);
CONNECT(g->window, "destroy", nsgtk_window_destroy_event, g);
/* toolbar, URL bar, and menu bar signal handlers */
@@ -1101,6 +1116,11 @@ gboolean nsgtk_scaffolding_is_busy(struct gtk_scaffolding *scaffold)
return GTK_WIDGET_SENSITIVE((GTK_WIDGET(scaffold->stop_button)));
}
+GtkWindow* nsgtk_scaffolding_get_window (struct gui_window *g)
+{
+ return g->scaffold->window;
+}
+
void nsgtk_scaffolding_popup_menu(struct gtk_scaffolding *g, guint button)
{
nsgtk_scaffolding_update_edit_actions_sensitivity(g, g->popup_xml, TRUE);