diff options
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtk_gui.c | 61 | ||||
-rw-r--r-- | gtk/res/netsurf.glade | 8 |
2 files changed, 60 insertions, 9 deletions
diff --git a/gtk/gtk_gui.c b/gtk/gtk_gui.c index 9939d5756..a8e683897 100644 --- a/gtk/gtk_gui.c +++ b/gtk/gtk_gui.c @@ -77,6 +77,12 @@ GtkWindow *wndTooltip; GtkLabel *labelTooltip; GtkDialog *wndOpenFile; +static void nsgtk_create_ssl_verify_window(struct browser_window *bw, + struct content *c, const struct ssl_cert_info *certs, + unsigned long num); +static void nsgtk_ssl_accept(GtkButton *w, gpointer data); +static void nsgtk_ssl_reject(GtkButton *w, gpointer data); + /** * Locate a shared resource file by searching known places in order. * @@ -450,14 +456,59 @@ void hotlist_visited(struct content *content) void gui_cert_verify(struct browser_window *bw, struct content *c, const struct ssl_cert_info *certs, unsigned long num) { + nsgtk_create_ssl_verify_window(bw, c, certs, num); +} - /* TODO: we should open a window showing what the certificate - * problem is and offer the user the choice to reject it. Until - * we do this, we just always accept them. - * */ +static void nsgtk_create_ssl_verify_window(struct browser_window *bw, + struct content *c, const struct ssl_cert_info *certs, + unsigned long num) +{ + GladeXML *x = glade_xml_new(glade_file_location, NULL, NULL); + GtkWindow *wnd = GTK_WINDOW(glade_xml_get_widget(x, "wndSSLProblem")); + GtkButton *accept, *reject; + void **session = calloc(sizeof(void *), 4); + + session[0] = bw; + session[1] = c; + session[2] = x; + session[3] = wnd; + + accept = GTK_BUTTON(glade_xml_get_widget(x, "sslaccept")); + reject = GTK_BUTTON(glade_xml_get_widget(x, "sslreject")); + + g_signal_connect(G_OBJECT(accept), "clicked", + G_CALLBACK(nsgtk_ssl_accept), (gpointer)session); + g_signal_connect(G_OBJECT(reject), "clicked", + G_CALLBACK(nsgtk_ssl_reject), (gpointer)session); + + gtk_widget_show(GTK_WIDGET(wnd)); +} +static void nsgtk_ssl_accept(GtkButton *w, gpointer data) +{ + void **session = data; + struct browser_window *bw = session[0]; + struct content *c = session[1]; + GladeXML *x = session[2]; + GtkWindow *wnd = session[3]; + urldb_set_cert_permissions(c->url, true); - browser_window_go(bw, c->url, 0, true); + browser_window_go(bw, c->url, 0, true); + + gtk_widget_destroy(GTK_WIDGET(wnd)); + g_object_unref(G_OBJECT(x)); + free(session); +} + +static void nsgtk_ssl_reject(GtkButton *w, gpointer data) +{ + void **session = data; + GladeXML *x = session[2]; + GtkWindow *wnd = session[3]; + + gtk_widget_destroy(GTK_WIDGET(wnd)); + g_object_unref(G_OBJECT(x)); + free(session); } utf8_convert_ret utf8_to_local_encoding(const char *string, size_t len, diff --git a/gtk/res/netsurf.glade b/gtk/res/netsurf.glade index 082d0aa4f..2e967d020 100644 --- a/gtk/res/netsurf.glade +++ b/gtk/res/netsurf.glade @@ -1474,7 +1474,7 @@ <property name="title" translatable="yes">SSL certificate problem</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> + <property name="modal">True</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> <property name="decorated">True</property> @@ -1498,7 +1498,7 @@ <property name="layout_style">GTK_BUTTONBOX_END</property> <child> - <widget class="GtkButton" id="cancelbutton3"> + <widget class="GtkButton" id="sslreject"> <property name="visible">True</property> <property name="can_default">True</property> <property name="can_focus">True</property> @@ -1573,7 +1573,7 @@ </child> <child> - <widget class="GtkButton" id="okbutton3"> + <widget class="GtkButton" id="sslaccept"> <property name="visible">True</property> <property name="can_default">True</property> <property name="can_focus">True</property> @@ -1755,7 +1755,7 @@ <property name="left_margin">0</property> <property name="right_margin">0</property> <property name="indent">0</property> - <property name="text" translatable="yes"></property> + <property name="text" translatable="yes">(not implemented)</property> </widget> </child> </widget> |