From fac20e8d38b6c05312a349cb05511719201e3f10 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Sun, 1 Dec 2019 21:43:32 +0000 Subject: make gtk frontend use page information icons --- frontends/gtk/gui.c | 58 +++++++++++++++++++++++++++++++++++++++-------- frontends/gtk/resources.c | 10 ++++++++ frontends/gtk/toolbar.c | 57 +++++++++++++++++++++++++++++++++++++++++++++- frontends/gtk/toolbar.h | 9 ++++++++ frontends/gtk/window.c | 13 +++++++++++ 5 files changed, 136 insertions(+), 11 deletions(-) (limited to 'frontends/gtk') diff --git a/frontends/gtk/gui.c b/frontends/gtk/gui.c index 609662e05..c65c360fb 100644 --- a/frontends/gtk/gui.c +++ b/frontends/gtk/gui.c @@ -258,35 +258,73 @@ static nserror set_defaults(struct nsoption_s *defaults) return NSERROR_OK; } +#if GTK_CHECK_VERSION(3,14,0) /** * adds named icons into gtk theme */ static nserror nsgtk_add_named_icons_to_theme(void) { -#if GTK_CHECK_VERSION(3,14,0) gtk_icon_theme_add_resource_path(gtk_icon_theme_get_default(), "/org/netsurf/icons"); + return NSERROR_OK; +} + #else + +static nserror +add_builtin_icon(const char *prefix, const char *name, int x, int y) +{ GdkPixbuf *pixbuf; nserror res; - - res = nsgdk_pixbuf_new_from_resname("icons/local-history.png", &pixbuf); - if (res != NSERROR_OK) { - pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, false, 8, 8, 32); + char *resname; + int resnamelen; + + /* resource name string length allowing for / .png and termination */ + resnamelen = strlen(prefix) + strlen(name) + 5 + 1 + 4 + 1; + resname = malloc(resnamelen); + if (resname == NULL) { + return NSERROR_NOMEM; } - gtk_icon_theme_add_builtin_icon("local-history", 32, pixbuf); + snprintf(resname, resnamelen, "icons%s/%s.png", prefix, name); - res = nsgdk_pixbuf_new_from_resname("icons/show-cookie.png", &pixbuf); + res = nsgdk_pixbuf_new_from_resname(resname, &pixbuf); + NSLOG(netsurf, WARNING, "%d %s", res, resname); + free(resname); if (res != NSERROR_OK) { - pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, false, 8, 24, 24); + pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, false, 8, x, y); } - gtk_icon_theme_add_builtin_icon("show-cookie", 24, pixbuf); + gtk_icon_theme_add_builtin_icon(name, y, pixbuf); -#endif return NSERROR_OK; } +/** + * adds named icons into gtk theme + */ +static nserror nsgtk_add_named_icons_to_theme(void) +{ + /* these must also be in gtk/resources.c pixbuf_resource *and* + * gtk/res/netsurf.gresource.xml + */ + add_builtin_icon("", "local-history", 8, 32); + add_builtin_icon("", "show-cookie", 24, 24); + add_builtin_icon("/24x24/actions", "page-info-insecure", 24, 24); + add_builtin_icon("/24x24/actions", "page-info-internal", 24, 24); + add_builtin_icon("/24x24/actions", "page-info-local", 24, 24); + add_builtin_icon("/24x24/actions", "page-info-secure", 24, 24); + add_builtin_icon("/24x24/actions", "page-info-warning", 24, 24); + add_builtin_icon("/48x48/actions", "page-info-insecure", 48, 48); + add_builtin_icon("/48x48/actions", "page-info-internal", 48, 48); + add_builtin_icon("/48x48/actions", "page-info-local", 48, 48); + add_builtin_icon("/48x48/actions", "page-info-secure", 48, 48); + add_builtin_icon("/48x48/actions", "page-info-warning", 48, 48); + + return NSERROR_OK; +} + +#endif + /** * Initialize GTK specific parts of the browser. diff --git a/frontends/gtk/resources.c b/frontends/gtk/resources.c index f48ddb410..61853e458 100644 --- a/frontends/gtk/resources.c +++ b/frontends/gtk/resources.c @@ -97,6 +97,16 @@ static struct nsgtk_resource_s pixbuf_resource[] = { RES_ENTRY("menu_cursor.png"), RES_ENTRY("icons/local-history.png"), RES_ENTRY("icons/show-cookie.png"), + RES_ENTRY("icons/24x24/actions/page-info-insecure.png"), + RES_ENTRY("icons/24x24/actions/page-info-internal.png"), + RES_ENTRY("icons/24x24/actions/page-info-local.png"), + RES_ENTRY("icons/24x24/actions/page-info-secure.png"), + RES_ENTRY("icons/24x24/actions/page-info-warning.png"), + RES_ENTRY("icons/48x48/actions/page-info-insecure.png"), + RES_ENTRY("icons/48x48/actions/page-info-internal.png"), + RES_ENTRY("icons/48x48/actions/page-info-local.png"), + RES_ENTRY("icons/48x48/actions/page-info-secure.png"), + RES_ENTRY("icons/48x48/actions/page-info-warning.png"), RES_ENTRY("throbber/throbber0.png"), RES_ENTRY("throbber/throbber1.png"), RES_ENTRY("throbber/throbber2.png"), diff --git a/frontends/gtk/toolbar.c b/frontends/gtk/toolbar.c index 31ccfed3d..f191bc174 100644 --- a/frontends/gtk/toolbar.c +++ b/frontends/gtk/toolbar.c @@ -320,7 +320,7 @@ make_toolbar_item_url_bar(bool sensitivity, bool edit) } nsgtk_entry_set_icon_from_icon_name(entry, GTK_ENTRY_ICON_PRIMARY, - "page-info-local"); + "page-info-internal"); if (edit) { gtk_entry_set_width_chars(GTK_ENTRY(entry), 9); @@ -3550,6 +3550,61 @@ nserror nsgtk_toolbar_throbber(struct nsgtk_toolbar *tb, bool active) } +/* exported interface documented in toolbar.h */ +nserror nsgtk_toolbar_page_info_change(struct nsgtk_toolbar *tb) +{ + GtkEntry *url_entry; + browser_window_page_info_state pistate; + struct browser_window *bw; + const char *icon_name; + + if (tb->items[URL_BAR_ITEM].button == NULL) { + /* no toolbar item */ + return NSERROR_INVALID; + } + url_entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(tb->items[URL_BAR_ITEM].button))); + + bw = tb->get_bw(tb->get_ctx); + + pistate = browser_window_get_page_info_state(bw); + + switch (pistate) { + case PAGE_STATE_INTERNAL: + icon_name = "page-info-internal"; + break; + + case PAGE_STATE_LOCAL: + icon_name = "page-info-local"; + break; + + case PAGE_STATE_INSECURE: + icon_name = "page-info-insecure"; + break; + + case PAGE_STATE_SECURE_OVERRIDE: + icon_name = "page-info-warning"; + break; + + case PAGE_STATE_SECURE_ISSUES: + icon_name = "page-info-warning"; + break; + + case PAGE_STATE_SECURE: + icon_name = "page-info-secure"; + break; + + default: + icon_name = "page-info-internal"; + break; + } + + nsgtk_entry_set_icon_from_icon_name(GTK_WIDGET(url_entry), + GTK_ENTRY_ICON_PRIMARY, + icon_name); + return NSERROR_OK; +} + + /* exported interface documented in toolbar.h */ nserror nsgtk_toolbar_set_url(struct nsgtk_toolbar *tb, nsurl *url) { diff --git a/frontends/gtk/toolbar.h b/frontends/gtk/toolbar.h index 6be45b030..9bb859be1 100644 --- a/frontends/gtk/toolbar.h +++ b/frontends/gtk/toolbar.h @@ -63,6 +63,15 @@ nserror nsgtk_toolbar_restyle(struct nsgtk_toolbar *tb); nserror nsgtk_toolbar_throbber(struct nsgtk_toolbar *tb, bool active); +/** + * Page info has changed state + * + * \param toolbar A toolbar returned from a creation + * \return NSERROR_OK on success + */ +nserror nsgtk_toolbar_page_info_change(struct nsgtk_toolbar *tb); + + /** * Update the toolbar url entry * diff --git a/frontends/gtk/window.c b/frontends/gtk/window.c index 39bd06bc4..39b7413d3 100644 --- a/frontends/gtk/window.c +++ b/frontends/gtk/window.c @@ -1444,6 +1444,15 @@ static nserror throbber(struct gui_window *gw, bool active) } +/** + * handle page info changing + */ +static nserror page_info_change(struct gui_window *gw) +{ + nsgtk_toolbar_page_info_change(gw->toolbar); + return NSERROR_OK; +} + /** * GTK window UI callback to process miscellaneous events * @@ -1475,6 +1484,10 @@ gui_window_event(struct gui_window *gw, enum gui_window_event event) throbber(gw, false); break; + case GW_EVENT_PAGE_INFO_CHANGE: + page_info_change(gw); + break; + default: break; } -- cgit v1.2.3