From 2c549b28fb508b859702f0c2e1122c6ccd3aa34c Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 11 Mar 2020 08:32:52 +0000 Subject: add page information ui elements to GTK frontend --- frontends/gtk/corewindow.c | 74 ++++++++++++++++++++------------- frontends/gtk/page_info.c | 70 +++++++------------------------ frontends/gtk/res/netsurf.gresource.xml | 3 +- frontends/gtk/res/pageinfo.gtk2.ui | 15 +++++++ frontends/gtk/res/pageinfo.gtk3.ui | 21 ++++++++++ frontends/gtk/resources.c | 1 + 6 files changed, 101 insertions(+), 83 deletions(-) create mode 100644 frontends/gtk/res/pageinfo.gtk2.ui create mode 100644 frontends/gtk/res/pageinfo.gtk3.ui diff --git a/frontends/gtk/corewindow.c b/frontends/gtk/corewindow.c index 1cc8c6207..b3568c602 100644 --- a/frontends/gtk/corewindow.c +++ b/frontends/gtk/corewindow.c @@ -224,6 +224,10 @@ nsgtk_cw_motion_notify_event(GtkWidget *widget, struct nsgtk_corewindow_mouse *mouse = &nsgtk_cw->mouse_state; if (mouse->pressed == false) { + nsgtk_cw->mouse(nsgtk_cw, + BROWSER_MOUSE_HOVER, + event->x, + event->y); return TRUE; } @@ -610,18 +614,20 @@ static nserror nsgtk_cw_set_scroll(struct core_window *cw, int x, int y) { struct nsgtk_corewindow *nsgtk_cw = (struct nsgtk_corewindow *)cw; - GtkAdjustment *vadj; - GtkAdjustment *hadj; - vadj = gtk_scrolled_window_get_vadjustment(nsgtk_cw->scrolled); - hadj = gtk_scrolled_window_get_hadjustment(nsgtk_cw->scrolled); + if (nsgtk_cw->scrolled != NULL) { + GtkAdjustment *vadj; + GtkAdjustment *hadj; - assert(vadj != NULL); - assert(hadj != NULL); + vadj = gtk_scrolled_window_get_vadjustment(nsgtk_cw->scrolled); + hadj = gtk_scrolled_window_get_hadjustment(nsgtk_cw->scrolled); - gtk_adjustment_set_value(vadj, y); - gtk_adjustment_set_value(hadj, x); + assert(vadj != NULL); + assert(hadj != NULL); + gtk_adjustment_set_value(vadj, y); + gtk_adjustment_set_value(hadj, x); + } return NSERROR_OK; } @@ -636,18 +642,23 @@ static nserror nsgtk_cw_get_scroll(const struct core_window *cw, int *x, int *y) { struct nsgtk_corewindow *nsgtk_cw = (struct nsgtk_corewindow *)cw; - GtkAdjustment *vadj; - GtkAdjustment *hadj; - vadj = gtk_scrolled_window_get_vadjustment(nsgtk_cw->scrolled); - hadj = gtk_scrolled_window_get_hadjustment(nsgtk_cw->scrolled); + if (nsgtk_cw->scrolled != NULL) { + GtkAdjustment *vadj; + GtkAdjustment *hadj; - assert(vadj != NULL); - assert(hadj != NULL); + vadj = gtk_scrolled_window_get_vadjustment(nsgtk_cw->scrolled); + hadj = gtk_scrolled_window_get_hadjustment(nsgtk_cw->scrolled); - *y = (int)(gtk_adjustment_get_value(vadj)); - *x = (int)(gtk_adjustment_get_value(hadj)); + assert(vadj != NULL); + assert(hadj != NULL); + *y = (int)(gtk_adjustment_get_value(vadj)); + *x = (int)(gtk_adjustment_get_value(hadj)); + } else { + *x = 0; + *y = 0; + } return NSERROR_OK; } @@ -664,18 +675,25 @@ nsgtk_cw_get_window_dimensions(const struct core_window *cw, int *width, int *height) { struct nsgtk_corewindow *nsgtk_cw = (struct nsgtk_corewindow *)cw; - GtkAdjustment *vadj; - GtkAdjustment *hadj; - gdouble page; - - hadj = gtk_scrolled_window_get_hadjustment(nsgtk_cw->scrolled); - g_object_get(hadj, "page-size", &page, NULL); - *width = page; - - vadj = gtk_scrolled_window_get_vadjustment(nsgtk_cw->scrolled); - g_object_get(vadj, "page-size", &page, NULL); - *height = page; - + if (nsgtk_cw->scrolled != NULL) { + GtkAdjustment *vadj; + GtkAdjustment *hadj; + gdouble page; + + hadj = gtk_scrolled_window_get_hadjustment(nsgtk_cw->scrolled); + g_object_get(hadj, "page-size", &page, NULL); + *width = page; + + vadj = gtk_scrolled_window_get_vadjustment(nsgtk_cw->scrolled); + g_object_get(vadj, "page-size", &page, NULL); + *height = page; + } else { + GtkAllocation allocation; + gtk_widget_get_allocation(GTK_WIDGET(nsgtk_cw->drawing_area), + &allocation); + *width = allocation.width; + *height = allocation.height; + } return NSERROR_OK; } diff --git a/frontends/gtk/page_info.c b/frontends/gtk/page_info.c index 5e887b5dc..b7ed7ed1b 100644 --- a/frontends/gtk/page_info.c +++ b/frontends/gtk/page_info.c @@ -26,6 +26,7 @@ #include #include "utils/log.h" +#include "utils/messages.h" #include "netsurf/keypress.h" #include "netsurf/plotters.h" #include "netsurf/browser_window.h" @@ -46,51 +47,29 @@ struct nsgtk_pi_window { struct nsgtk_corewindow core; /** GTK builder for window */ GtkBuilder *builder; - /** GTK dialog window being shown */ - GtkDialog *dlg; + /** GTK window being shown */ + GtkWindow *dlg; /** Core page-info window */ struct page_info *pi; }; /** - * destroy a previously created certificate view + * destroy a previously created page information window */ -static nserror nsgtk_pi_destroy(struct nsgtk_pi_window *pi_win) +static gboolean +nsgtk_pi_delete_event(GtkWidget *w, GdkEvent *event, gpointer data) { - nserror res; + struct nsgtk_pi_window *pi_win; + pi_win = (struct nsgtk_pi_window *)data; page_info_destroy(pi_win->pi); - res = nsgtk_corewindow_fini(&pi_win->core); + + nsgtk_corewindow_fini(&pi_win->core); gtk_widget_destroy(GTK_WIDGET(pi_win->dlg)); g_object_unref(G_OBJECT(pi_win->builder)); free(pi_win); - return res; -} - -static void -nsgtk_pi_accept(GtkButton *w, gpointer data) -{ - struct nsgtk_pi_window *pi_win; - pi_win = (struct nsgtk_pi_window *)data; - - nsgtk_pi_destroy(pi_win); -} - -static void -nsgtk_pi_reject(GtkWidget *w, gpointer data) -{ - struct nsgtk_pi_window *pi_win; - pi_win = (struct nsgtk_pi_window *)data; - - nsgtk_pi_destroy(pi_win); -} - -static gboolean -nsgtk_pi_delete_event(GtkWidget *w, GdkEvent *event, gpointer data) -{ - nsgtk_pi_reject(w, data); return FALSE; } @@ -169,32 +148,29 @@ nserror nsgtk_page_info(struct browser_window *bw) struct nsgtk_pi_window *ncwin; nserror res; - ncwin = malloc(sizeof(struct nsgtk_pi_window)); + ncwin = calloc(1, sizeof(struct nsgtk_pi_window)); if (ncwin == NULL) { return NSERROR_NOMEM; } - res = nsgtk_builder_new_from_resname("ssl", &ncwin->builder); + res = nsgtk_builder_new_from_resname("pageinfo", &ncwin->builder); if (res != NSERROR_OK) { - NSLOG(netsurf, INFO, "SSL UI builder init failed"); + NSLOG(netsurf, CRITICAL, "Page Info UI builder init failed %s", messages_get_errorcode(res)); free(ncwin); return res; } gtk_builder_connect_signals(ncwin->builder, NULL); - ncwin->dlg = GTK_DIALOG(gtk_builder_get_object(ncwin->builder, - "wndSSLProblem")); + ncwin->dlg = GTK_WINDOW(gtk_builder_get_object(ncwin->builder, + "PGIWindow")); /* set parent for transient dialog */ gtk_window_set_transient_for(GTK_WINDOW(ncwin->dlg), nsgtk_scaffolding_window(nsgtk_current_scaffolding())); - ncwin->core.scrolled = GTK_SCROLLED_WINDOW( - gtk_builder_get_object(ncwin->builder, "SSLScrolled")); - ncwin->core.drawing_area = GTK_DRAWING_AREA( - gtk_builder_get_object(ncwin->builder, "SSLDrawingArea")); + gtk_builder_get_object(ncwin->builder, "PGIDrawingArea")); /* make the delete event call our destructor */ g_signal_connect(G_OBJECT(ncwin->dlg), @@ -202,20 +178,6 @@ nserror nsgtk_page_info(struct browser_window *bw) G_CALLBACK(nsgtk_pi_delete_event), ncwin); - /* accept button */ - g_signal_connect(G_OBJECT(gtk_builder_get_object(ncwin->builder, - "sslaccept")), - "clicked", - G_CALLBACK(nsgtk_pi_accept), - ncwin); - - /* reject button */ - g_signal_connect(G_OBJECT(gtk_builder_get_object(ncwin->builder, - "sslreject")), - "clicked", - G_CALLBACK(nsgtk_pi_reject), - ncwin); - /* initialise GTK core window */ ncwin->core.draw = nsgtk_pi_draw; ncwin->core.key = nsgtk_pi_key; diff --git a/frontends/gtk/res/netsurf.gresource.xml b/frontends/gtk/res/netsurf.gresource.xml index 433581786..a41ca6ce5 100644 --- a/frontends/gtk/res/netsurf.gresource.xml +++ b/frontends/gtk/res/netsurf.gresource.xml @@ -12,11 +12,12 @@ hotlist.gtk2.ui netsurf.gtk3.ui ssl.gtk2.ui + ssl.gtk3.ui + pageinfo.gtk3.ui toolbar.gtk3.ui downloads.gtk2.ui hotlist.gtk3.ui options.gtk2.ui - ssl.gtk3.ui viewdata.gtk2.ui downloads.gtk3.ui options.gtk3.ui diff --git a/frontends/gtk/res/pageinfo.gtk2.ui b/frontends/gtk/res/pageinfo.gtk2.ui new file mode 100644 index 000000000..b690d9c53 --- /dev/null +++ b/frontends/gtk/res/pageinfo.gtk2.ui @@ -0,0 +1,15 @@ + + + + + + False + + + True + False + GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK + + + + diff --git a/frontends/gtk/res/pageinfo.gtk3.ui b/frontends/gtk/res/pageinfo.gtk3.ui new file mode 100644 index 000000000..6ea876e14 --- /dev/null +++ b/frontends/gtk/res/pageinfo.gtk3.ui @@ -0,0 +1,21 @@ + + + + + + False + GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_STRUCTURE_MASK + False + + + + + + PGIDrawingArea + True + False + GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_STRUCTURE_MASK + + + + diff --git a/frontends/gtk/resources.c b/frontends/gtk/resources.c index a60119ae1..18f0e374f 100644 --- a/frontends/gtk/resources.c +++ b/frontends/gtk/resources.c @@ -87,6 +87,7 @@ static struct nsgtk_resource_s ui_resource[] = { RES_ENTRY("cookies"), RES_ENTRY("viewdata"), RES_ENTRY("warning"), + RES_ENTRY("pageinfo"), { NULL, 0, NSGTK_RESOURCE_FILE, NULL }, }; -- cgit v1.2.3