From a60529ec9f97663138e15d5f9598962c61f34d7e Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Thu, 2 Apr 2020 06:49:46 +0200 Subject: Add CSS Provider for styling the interface --- Makefile | 1 + 1 file changed, 1 insertion(+) (limited to 'Makefile') diff --git a/Makefile b/Makefile index e0083d5..f8183b4 100644 --- a/Makefile +++ b/Makefile @@ -69,6 +69,7 @@ install: all cp -p badwolf.1 $(DESTDIR)$(MANDIR)/man1 mkdir -p $(DESTDIR)$(DATADIR)/locale cp -r locale/ $(DESTDIR)$(DATADIR) + cp interface.css $(DESTDIR)$(DATADIR) mkdir -p $(DESTDIR)$(APPSDIR) cp -p badwolf.desktop $(DESTDIR)$(APPSDIR)/ mkdir -p $(DESTDIR)$(DOCDIR) -- cgit v1.3.1-23-gd82d From ad8b3dd9b8d29d067d9b2f4babe7aaa70be58c3d Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Tue, 21 Jan 2020 02:12:30 +0100 Subject: Download progress tab --- Makefile | 4 +- badwolf.c | 72 ++++++++++++------------- badwolf.h | 1 + config.h | 3 ++ downloads.c | 160 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ downloads.h | 28 ++++++++++ po/messages.pot | 76 +++++++++++++++++---------- version.sh | 5 +- 8 files changed, 278 insertions(+), 71 deletions(-) create mode 100644 downloads.c create mode 100644 downloads.h (limited to 'Makefile') diff --git a/Makefile b/Makefile index f8183b4..64f02fd 100644 --- a/Makefile +++ b/Makefile @@ -21,8 +21,8 @@ PKGCONFIG ?= pkg-config MSGFMT ?= msgfmt DEPS = gtk+-3.0 webkit2gtk-4.0 libsoup-2.4 -SRCS = uri.c uri_test.c keybindings.c badwolf.c -OBJS = uri.o keybindings.o badwolf.o +SRCS = uri.c uri_test.c keybindings.c downloads.c badwolf.c +OBJS = uri.o keybindings.o downloads.o badwolf.o OBJS_test = uri_test.o EXE = badwolf EXE_test = uri_test diff --git a/badwolf.c b/badwolf.c index 75296e4..147658f 100644 --- a/badwolf.c +++ b/badwolf.c @@ -5,6 +5,7 @@ #include "badwolf.h" #include "config.h" +#include "downloads.h" #include "keybindings.h" #include "uri.h" @@ -50,9 +51,6 @@ static gboolean WebViewCb_decide_policy(WebKitWebView *web_view, static void web_contextCb_download_started(WebKitWebContext *web_context, WebKitDownload *download, gpointer user_data); -static gboolean downloadCb_decide_destination(WebKitDownload *download, - gchar *suggested_filename, - gpointer user_data); static gboolean locationCb_activate(GtkEntry *location, gpointer user_data); static gboolean javascriptCb_toggled(GtkButton *javascript, gpointer user_data); static gboolean SearchEntryCb_next__match(GtkSearchEntry *search, gpointer user_data); @@ -408,46 +406,36 @@ WebViewCb_load_failed_with_tls_errors(WebKitWebView *web_view, static void web_contextCb_download_started(WebKitWebContext *web_context, - WebKitDownload *download, + WebKitDownload *webkit_download, gpointer user_data) { (void)web_context; + struct Client *browser = (struct Client *)user_data; + struct Download *download = malloc(sizeof(struct Client)); - g_signal_connect(G_OBJECT(download), + if(download != NULL) + { + download->window = browser->window; + + download_new_entry(webkit_download, download); + + g_signal_connect( + G_OBJECT(webkit_download), "received-data", G_CALLBACK(downloadCb_received_data), download); + g_signal_connect(G_OBJECT(webkit_download), + "created-destination", + G_CALLBACK(downloadCb_created_destination), + download); + g_signal_connect(G_OBJECT(webkit_download), "failed", G_CALLBACK(downloadCb_failed), download); + g_signal_connect( + G_OBJECT(webkit_download), "finished", G_CALLBACK(downloadCb_finished), download); + } + + g_signal_connect(G_OBJECT(webkit_download), "decide-destination", G_CALLBACK(downloadCb_decide_destination), user_data); } -static gboolean -downloadCb_decide_destination(WebKitDownload *download, - gchar *suggested_filename, - gpointer user_data) -{ - struct Client *browser = (struct Client *)user_data; - gint chooser_response; - GtkWindow *parent_window = GTK_WINDOW(browser->window->main_window); - - GtkFileChooserNative *file_dialog = - gtk_file_chooser_native_new(NULL, parent_window, GTK_FILE_CHOOSER_ACTION_SAVE, NULL, NULL); - GtkFileChooser *file_chooser = GTK_FILE_CHOOSER(file_dialog); - - gtk_file_chooser_set_current_name(file_chooser, suggested_filename); - gtk_file_chooser_set_do_overwrite_confirmation(file_chooser, TRUE); - webkit_download_set_allow_overwrite(download, TRUE); - - chooser_response = gtk_native_dialog_run(GTK_NATIVE_DIALOG(file_dialog)); - - if(chooser_response == GTK_RESPONSE_ACCEPT) - webkit_download_set_destination(download, gtk_file_chooser_get_uri(file_chooser)); - else - webkit_download_cancel(download); - - g_object_unref(file_dialog); - - return FALSE; /* Let it propagate */ -} - static gboolean locationCb_activate(GtkEntry *location, gpointer user_data) { @@ -786,6 +774,7 @@ main(int argc, char *argv[]) window->main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); window->notebook = gtk_notebook_new(); window->new_tab = gtk_button_new_from_icon_name("tab-new-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); + window->downloads_tab = badwolf_downloads_tab_new(); gtk_window_set_default_size( GTK_WINDOW(window->main_window), BADWOLF_DEFAULT_WIDTH, BADWOLF_DEFAULT_HEIGHT); @@ -824,12 +813,9 @@ main(int argc, char *argv[]) gtk_notebook_popup_enable(GTK_NOTEBOOK(window->notebook)); gtk_container_add(GTK_CONTAINER(window->main_window), window->notebook); + gtk_widget_queue_draw(window->notebook); - if(argc == 1) - badwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, NULL, NULL)); - else - for(int i = 1; i < argc; ++i) - badwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, argv[i], NULL)); + badwolf_downloads_tab_attach(window); g_signal_connect( window->main_window, "key-press-event", G_CALLBACK(main_windowCb_key_press_event), window); @@ -841,6 +827,14 @@ main(int argc, char *argv[]) gtk_widget_show(window->new_tab); gtk_widget_show_all(window->main_window); + if(argc == 1) + badwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, NULL, NULL)); + else + for(int i = 1; i < argc; ++i) + badwolf_new_tab(GTK_NOTEBOOK(window->notebook), new_browser(window, argv[i], NULL)); + + gtk_notebook_set_current_page(GTK_NOTEBOOK(window->notebook), 1); + gtk_main(); #if 0 diff --git a/badwolf.h b/badwolf.h index 91c05a4..7ffe965 100644 --- a/badwolf.h +++ b/badwolf.h @@ -12,6 +12,7 @@ struct Window GtkWidget *main_window; GtkWidget *notebook; GtkWidget *new_tab; + GtkWidget *downloads_tab; }; struct Client diff --git a/config.h b/config.h index ec92dda..ea728b5 100644 --- a/config.h +++ b/config.h @@ -42,6 +42,9 @@ // BADWOLF_STATUSBAR_PADDING: Amount of padding between statusbar elements #define BADWOLF_STATUSBAR_PADDING 0 +// BADWOLF_DOWNLOAD_PADDING: Amount of padding between download list row-elements +#define BADWOLF_DOWNLOAD_PADDING 5 + /* BADWOLF_DEFAULT_WIDTH / BADWOLF_DEFAULT_HEIGHT: * Used to define the default width/height of the window, * useful for floating Window Managers, probably useless in tiling ones diff --git a/downloads.c b/downloads.c new file mode 100644 index 0000000..0c1ee3d --- /dev/null +++ b/downloads.c @@ -0,0 +1,160 @@ +// BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser +// Copyright © 2019 Haelwenn (lanodan) Monnier +// SPDX-License-Identifier: BSD-3-Clause + +#include "downloads.h" + +#include "badwolf.h" +#include "config.h" + +#include /* _() and other internationalization/localization helpers */ + +static void +download_stop_iconCb_clicked(GtkButton *stop_icon, gpointer user_data) +{ + (void)stop_icon; + WebKitDownload *webkit_download = (WebKitDownload *)user_data; + + webkit_download_cancel(webkit_download); +} + +void +download_new_entry(WebKitDownload *webkit_download, struct Download *download) +{ + download->error = 0; + download->container = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, BADWOLF_DOWNLOAD_PADDING); + download->progress = gtk_progress_bar_new(); + download->file_path = gtk_label_new(NULL); + download->status = gtk_label_new(_("Download starting…")); + download->icon = + gtk_image_new_from_icon_name("network-idle-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); + download->stop_icon = gtk_button_new_from_icon_name("process-stop", GTK_ICON_SIZE_SMALL_TOOLBAR); + + g_signal_connect( + download->stop_icon, "clicked", G_CALLBACK(download_stop_iconCb_clicked), webkit_download); + + gtk_box_pack_start(GTK_BOX(download->container), download->icon, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(download->container), download->progress, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(download->container), download->stop_icon, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(download->container), download->status, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(download->container), download->file_path, FALSE, FALSE, 0); + + gtk_box_pack_start( + GTK_BOX(download->window->downloads_tab), download->container, FALSE, FALSE, 0); + + gtk_widget_show_all(download->container); +} + +void +downloadCb_created_destination(WebKitDownload *webkit_download, + gchar *destination, + gpointer user_data) +{ + (void)webkit_download; + struct Download *download = (struct Download *)user_data; + + gtk_label_set_text(GTK_LABEL(download->file_path), destination); +} + +gboolean +downloadCb_decide_destination(WebKitDownload *webkit_download, + gchar *suggested_filename, + gpointer user_data) +{ + struct Client *browser = (struct Client *)user_data; + gint chooser_response; + GtkWindow *parent_window = GTK_WINDOW(browser->window->main_window); + + GtkFileChooserNative *file_dialog = + gtk_file_chooser_native_new(NULL, parent_window, GTK_FILE_CHOOSER_ACTION_SAVE, NULL, NULL); + GtkFileChooser *file_chooser = GTK_FILE_CHOOSER(file_dialog); + + gtk_file_chooser_set_current_name(file_chooser, suggested_filename); + gtk_file_chooser_set_do_overwrite_confirmation(file_chooser, TRUE); + webkit_download_set_allow_overwrite(webkit_download, TRUE); + + chooser_response = gtk_native_dialog_run(GTK_NATIVE_DIALOG(file_dialog)); + + if(chooser_response == GTK_RESPONSE_ACCEPT) + webkit_download_set_destination(webkit_download, gtk_file_chooser_get_uri(file_chooser)); + else + webkit_download_cancel(webkit_download); + + g_object_unref(file_dialog); + + return FALSE; /* Let it propagate */ +} + +void +downloadCb_failed(WebKitDownload *webkit_download, GError *error, gpointer user_data) +{ + (void)webkit_download; + (void)error; + struct Download *download = (struct Download *)user_data; + + download->error = error; + + if(g_error_matches(error, WEBKIT_DOWNLOAD_ERROR, WEBKIT_DOWNLOAD_ERROR_CANCELLED_BY_USER)) + gtk_label_set_text(GTK_LABEL(download->status), _("Download cancelled")); + else + gtk_label_set_text(GTK_LABEL(download->status), _("Download error")); + + gtk_image_set_from_icon_name( + GTK_IMAGE(download->icon), "network-error-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); +} + +void +downloadCb_finished(WebKitDownload *webkit_download, gpointer user_data) +{ + (void)webkit_download; + struct Download *download = (struct Download *)user_data; + + // gtk_button_set_image(GTK_BUTTON(download->stop_icon), NULL); + gtk_widget_destroy(download->stop_icon); + + if(download->error == 0) + { + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(download->progress), 1); + gtk_label_set_text(GTK_LABEL(download->status), _("Download finished")); + gtk_image_set_from_icon_name( + GTK_IMAGE(download->icon), "network-idle-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); + } + + // TODO: Send notification +} + +void +downloadCb_received_data(WebKitDownload *webkit_download, guint64 data_lenght, gpointer user_data) +{ + (void)data_lenght; + struct Download *download = (struct Download *)user_data; + gchar *format_size = g_format_size(data_lenght); + + gtk_image_set_from_icon_name( + GTK_IMAGE(download->icon), "network-receive-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_label_set_text(GTK_LABEL(download->status), format_size); + gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(download->progress), + webkit_download_get_estimated_progress(webkit_download)); + + g_free(format_size); +} + +GtkWidget * +badwolf_downloads_tab_new() +{ + return gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); +} + +void +badwolf_downloads_tab_attach(struct Window *window) +{ + gtk_notebook_insert_page(GTK_NOTEBOOK(window->notebook), window->downloads_tab, NULL, 0); + gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(window->notebook), window->downloads_tab, FALSE); + GtkWidget *downloads_tab_label = + gtk_image_new_from_icon_name("emblem-downloads", GTK_ICON_SIZE_SMALL_TOOLBAR); + gtk_widget_set_tooltip_text(downloads_tab_label, _("Badwolf Downloads")); + gtk_notebook_set_tab_label( + GTK_NOTEBOOK(window->notebook), window->downloads_tab, downloads_tab_label); + gtk_notebook_set_menu_label_text( + GTK_NOTEBOOK(window->notebook), window->downloads_tab, _("Badwolf Downloads")); +} diff --git a/downloads.h b/downloads.h new file mode 100644 index 0000000..fa5513e --- /dev/null +++ b/downloads.h @@ -0,0 +1,28 @@ +#include "badwolf.h" + +#include + +struct Download +{ + struct Window *window; + + GtkWidget *container; + GtkWidget *icon; + GtkWidget *stop_icon; + GtkWidget *file_path; + GtkWidget *progress; + GtkWidget *status; + GError *error; +}; + +void download_new_entry(WebKitDownload *webkit_download, struct Download *download); +void +downloadCb_created_destination(WebKitDownload *download, gchar *destination, gpointer user_data); +gboolean downloadCb_decide_destination(WebKitDownload *download, + gchar *suggested_filename, + gpointer user_data); +void downloadCb_failed(WebKitDownload *webkit_download, GError *error, gpointer user_data); +void downloadCb_finished(WebKitDownload *download, gpointer user_data); +void downloadCb_received_data(WebKitDownload *download, guint64 data_lenght, gpointer user_data); +GtkWidget *badwolf_downloads_tab_new(); +void badwolf_downloads_tab_attach(struct Window *window); diff --git a/po/messages.pot b/po/messages.pot index b1717cd..360178f 100644 --- a/po/messages.pot +++ b/po/messages.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Badwolf 0.5.1+ga60529e\n" +"Project-Id-Version: Badwolf 0.5.1+gb1ff239.download-progress\n" "Report-Msgid-Bugs-To: contact+badwolf-msgid@hacktivis.me\n" -"POT-Creation-Date: 2020-04-02 06:58+0200\n" +"POT-Creation-Date: 2020-05-01 00:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,51 +17,71 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: badwolf.c:772 +#: downloads.c:155 downloads.c:159 +msgid "Badwolf Downloads" +msgstr "" + +#: badwolf.c:760 #, c-format msgid "Buildtime WebKit version: %d.%d.%d\n" msgstr "" -#: badwolf.c:389 +#: badwolf.c:387 msgid "Continue" msgstr "" -#: badwolf.c:339 +#: badwolf.c:337 msgid "" "Couldn't verify the TLS certificate to ensure a better security of the " "connection. You might want to verify your machine and network.\n" "\n" msgstr "" -#: badwolf.c:96 +#: badwolf.c:94 msgid "Crashed" msgstr "" -#: badwolf.c:362 +#: downloads.c:98 +msgid "Download cancelled" +msgstr "" + +#: downloads.c:100 +msgid "Download error" +msgstr "" + +#: downloads.c:118 +msgid "Download finished" +msgstr "" + +#: downloads.c:28 +msgid "Download starting…" +msgstr "" + +#: badwolf.c:360 msgid "Error: Some unknown error occurred validating the certificate.\n" msgstr "" -#: badwolf.c:343 +#: badwolf.c:341 msgid "Error: The X509 Certificate Authority is unknown.\n" msgstr "" -#: badwolf.c:356 +#: badwolf.c:354 msgid "Error: The certificate has been revoked.\n" msgstr "" -#: badwolf.c:353 +#: badwolf.c:351 msgid "Error: The certificate has expired. Check your system's clock.\n" msgstr "" -#: badwolf.c:359 +#: badwolf.c:357 msgid "Error: The certificate is considered to be insecure.\n" msgstr "" -#: badwolf.c:350 +#: badwolf.c:348 msgid "Error: The certificate isn't valid yet. Check your system's clock.\n" msgstr "" -#: badwolf.c:346 +#: badwolf.c:344 msgid "Error: The given identity doesn't match the expected one.\n" msgstr "" @@ -72,67 +92,67 @@ msgid "" "Runtime WebKit version: %d.%d.%d" msgstr "" -#: badwolf.c:701 +#: badwolf.c:689 msgid "New tab" msgstr "" -#: badwolf.c:819 +#: badwolf.c:808 msgid "Open new tab" msgstr "" -#: badwolf.c:100 +#: badwolf.c:98 msgid "Out of Memory" msgstr "" -#: badwolf.c:770 +#: badwolf.c:758 #, c-format msgid "Running Badwolf version: %s\n" msgstr "" -#: badwolf.c:777 +#: badwolf.c:765 #, c-format msgid "Runtime WebKit version: %d.%d.%d\n" msgstr "" -#: badwolf.c:386 +#: badwolf.c:384 #, c-format msgid "TLS Error for %s." msgstr "" -#: badwolf.c:389 +#: badwolf.c:387 msgid "Temporarly Add Exception" msgstr "" -#: badwolf.c:586 +#: badwolf.c:574 msgid "Toggle javascript" msgstr "" -#: badwolf.c:104 +#: badwolf.c:102 msgid "Unknown Crash" msgstr "" -#: badwolf.c:627 +#: badwolf.c:615 msgid "search in current page" msgstr "" -#: badwolf.c:95 +#: badwolf.c:93 msgid "the web process crashed.\n" msgstr "" -#: badwolf.c:99 +#: badwolf.c:97 msgid "the web process exceeded the memory limit.\n" msgstr "" -#: badwolf.c:103 +#: badwolf.c:101 msgid "the web process terminated for an unknown reason.\n" msgstr "" -#: badwolf.c:784 +#: badwolf.c:772 #, c-format msgid "webkit-web-extension directory set to: %s\n" msgstr "" #. TRANSLATOR Ignore this entry. Done for forcing Unicode in xgettext. -#: badwolf.c:848 +#: badwolf.c:842 msgid "ø" msgstr "" diff --git a/version.sh b/version.sh index 318aa72..0c9d3d6 100755 --- a/version.sh +++ b/version.sh @@ -1,8 +1,9 @@ #!/bin/sh hash=$(git --git-dir="$(dirname $0)/.git" rev-parse --short HEAD 2>/dev/null) +branch=$(git --git-dir="$(dirname $0)/.git" rev-parse --abbrev-ref HEAD | sed -r 's/.*[^0-9A-Za-z-]([0-9A-Za-z-]*)$/\1/g') -if [ -n "$hash" ] +if [ -n "$hash" ] || [ -n "$branch" ] then - printf '+g%s' "$hash" + printf '+g%s.%s' "$hash" "$branch" fi echo -- cgit v1.3.1-23-gd82d From 96676069aaaea036dccb73f992852358a65bca47 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Sun, 3 May 2020 02:24:04 +0200 Subject: Add a logo --- Makefile | 15 +++- README.md | 2 + badwolf.c | 1 + badwolf.svg | 117 ++++++++++++++++++++++++++++++++ icons/hicolor/128x128/apps/badwolf.png | Bin 0 -> 6551 bytes icons/hicolor/256x256/apps/badwolf.png | Bin 0 -> 14810 bytes icons/hicolor/48x48/apps/badwolf.png | Bin 0 -> 1958 bytes icons/hicolor/64x64/apps/badwolf.png | Bin 0 -> 2847 bytes icons/hicolor/scalable/apps/badwolf.svg | 2 + icons_size.sh | 4 ++ keybindings.c | 1 + 11 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 badwolf.svg create mode 100644 icons/hicolor/128x128/apps/badwolf.png create mode 100644 icons/hicolor/256x256/apps/badwolf.png create mode 100644 icons/hicolor/48x48/apps/badwolf.png create mode 100644 icons/hicolor/64x64/apps/badwolf.png create mode 100644 icons/hicolor/scalable/apps/badwolf.svg create mode 100755 icons_size.sh (limited to 'Makefile') diff --git a/Makefile b/Makefile index f8183b4..d1403cd 100644 --- a/Makefile +++ b/Makefile @@ -20,6 +20,9 @@ DBG ?= PKGCONFIG ?= pkg-config MSGFMT ?= msgfmt +# for i in 48 64 128 256; do echo icons/hicolor/${i}x${i}/apps/badwolf.png; done | tr '\n' ' ' +ICON_SIZES = icons/hicolor/48x48/apps/badwolf.png icons/hicolor/64x64/apps/badwolf.png icons/hicolor/128x128/apps/badwolf.png icons/hicolor/256x256/apps/badwolf.png + DEPS = gtk+-3.0 webkit2gtk-4.0 libsoup-2.4 SRCS = uri.c uri_test.c keybindings.c badwolf.c OBJS = uri.o keybindings.o badwolf.o @@ -33,7 +36,15 @@ CDEPS = -DDATADIR=\"$(DATADIR)\" -DPACKAGE=\"$(PACKAGE)\" -D_POSIX_C_SOURCE=2008 CDEPS += `$(PKGCONFIG) --cflags $(DEPS)` LIBS = `$(PKGCONFIG) --libs $(DEPS)` -all: $(EXE) $(TRANS) po/messages.pot +all: $(EXE) $(ICON_SIZES) $(TRANS) po/messages.pot + +icons/hicolor/scalable/apps/badwolf.svg: badwolf.svg + mkdir -p icons/hicolor/scalable/apps + scour --no-line-breaks --enable-id-stripping --remove-metadata $< $@ + +icons/hicolor/%/apps/badwolf.png: icons/hicolor/scalable/apps/badwolf.svg + mkdir -p `dirname $@` + rsvg-convert -a `echo $@ | cut -d/ -f3 | ./icons_size.sh` $< -o $@ po/messages.pot: $(SRCS) xgettext --keyword=_ --language=C --from-code=UTF-8 -o $@ --add-comments --sort-output --copyright-holder="Badwolf Authors " --package-name="$(PACKAGE)" --package-version="$(VERSION_FULL)" --msgid-bugs-address="contact+badwolf-msgid@hacktivis.me" $(SRCS) @@ -74,6 +85,8 @@ install: all cp -p badwolf.desktop $(DESTDIR)$(APPSDIR)/ mkdir -p $(DESTDIR)$(DOCDIR) cp -p $(DOCS) $(DESTDIR)$(DOCDIR)/ + mkdir -p $(DESTDIR)$(PREFIX)/share + cp -r icons $(DESTDIR)$(PREFIX)/share/ @printf '\nNote: An example AppArmor profile has been installed at '$(DOCDIR)/usr.bin.badwolf'\n' .PHONY: clean diff --git a/README.md b/README.md index 6ce8eef..98734e5 100644 --- a/README.md +++ b/README.md @@ -56,5 +56,7 @@ Dependencies are: Compilation is done with `make CC=${CC:-cc}`, install with `make install`. An example AppArmor profile is provided at `usr.bin.badwolf`, please do runtime checks before deploying. +You'll also need `rsvg-convert(1)` (from librsvg) and scour if you want to regenerate the icons, for example after modifying them or adding a new size. These aren't needed for normal installation as it is bundled. + ## Notes Most of the privacy/security stuff will be done with patches against WebKit as quite a lot isn’t into [WebKitSettings](https://webkitgtk.org/reference/webkit2gtk/stable/WebKitSettings.html) and with generic WebKit extensions that should be resuseable. diff --git a/badwolf.c b/badwolf.c index 75296e4..275b033 100644 --- a/badwolf.c +++ b/badwolf.c @@ -790,6 +790,7 @@ main(int argc, char *argv[]) gtk_window_set_default_size( GTK_WINDOW(window->main_window), BADWOLF_DEFAULT_WIDTH, BADWOLF_DEFAULT_HEIGHT); gtk_window_set_role(GTK_WINDOW(window->main_window), "browser"); + gtk_window_set_icon_name(GTK_WINDOW(window->main_window), "badwolf"); GtkCssProvider *css_provider_app = gtk_css_provider_new(); gchar *provider_path_app = g_build_filename(DATADIR, "interface.css", NULL); diff --git a/badwolf.svg b/badwolf.svg new file mode 100644 index 0000000..3635724 --- /dev/null +++ b/badwolf.svg @@ -0,0 +1,117 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/icons/hicolor/128x128/apps/badwolf.png b/icons/hicolor/128x128/apps/badwolf.png new file mode 100644 index 0000000..e2cd289 Binary files /dev/null and b/icons/hicolor/128x128/apps/badwolf.png differ diff --git a/icons/hicolor/256x256/apps/badwolf.png b/icons/hicolor/256x256/apps/badwolf.png new file mode 100644 index 0000000..c391692 Binary files /dev/null and b/icons/hicolor/256x256/apps/badwolf.png differ diff --git a/icons/hicolor/48x48/apps/badwolf.png b/icons/hicolor/48x48/apps/badwolf.png new file mode 100644 index 0000000..0f3af2c Binary files /dev/null and b/icons/hicolor/48x48/apps/badwolf.png differ diff --git a/icons/hicolor/64x64/apps/badwolf.png b/icons/hicolor/64x64/apps/badwolf.png new file mode 100644 index 0000000..a54c7aa Binary files /dev/null and b/icons/hicolor/64x64/apps/badwolf.png differ diff --git a/icons/hicolor/scalable/apps/badwolf.svg b/icons/hicolor/scalable/apps/badwolf.svg new file mode 100644 index 0000000..cae9b3d --- /dev/null +++ b/icons/hicolor/scalable/apps/badwolf.svg @@ -0,0 +1,2 @@ + + diff --git a/icons_size.sh b/icons_size.sh new file mode 100755 index 0000000..29adf3a --- /dev/null +++ b/icons_size.sh @@ -0,0 +1,4 @@ +#!/bin/sh +# Transforms an icon size from the Icon Theme Specification to rsvg-convert(1) options +#sed -r -e 's;^([^x]*)x([^@]*)$;-w \1 -h \2;' -e 's;^([^x]*)x([^@]*)@(.*)$;-w \1 -h \2 -z \3;' +sed -r 's;^([^x]*)x([^@]*)$;-w \1 -h \2;' diff --git a/keybindings.c b/keybindings.c index e134fc4..b6806f3 100644 --- a/keybindings.c +++ b/keybindings.c @@ -46,6 +46,7 @@ badwolf_about_dialog(GtkWindow *main_window, gpointer user_data) gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(about_dialog), homepage); gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(about_dialog), comments); gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about_dialog), version); + gtk_about_dialog_set_logo_icon_name(GTK_ABOUT_DIALOG(about_dialog), "badwolf"); g_signal_connect(about_dialog, "activate-link", G_CALLBACK(about_dialogCb_activate_link), window); -- cgit v1.3.1-23-gd82d From fb3246adea4083f5d073cf8cd2d5e1ca5686ebe7 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Mon, 4 May 2020 04:41:57 +0200 Subject: Logo: increase stroke size and contrast --- Makefile | 6 +- badwolf.inkscape.svg | 164 ++++++++++++++++++++++++++++++++ badwolf.svg | 153 ++++++++++++++++------------- icons/hicolor/128x128/apps/badwolf.png | Bin 6551 -> 8682 bytes icons/hicolor/24x24/apps/badwolf.png | Bin 0 -> 1057 bytes icons/hicolor/256x256/apps/badwolf.png | Bin 14810 -> 20209 bytes icons/hicolor/32x32/apps/badwolf.png | Bin 0 -> 1525 bytes icons/hicolor/48x48/apps/badwolf.png | Bin 1958 -> 2581 bytes icons/hicolor/64x64/apps/badwolf.png | Bin 2847 -> 3715 bytes icons/hicolor/scalable/apps/badwolf.svg | 2 +- 10 files changed, 253 insertions(+), 72 deletions(-) create mode 100644 badwolf.inkscape.svg create mode 100644 icons/hicolor/24x24/apps/badwolf.png create mode 100644 icons/hicolor/32x32/apps/badwolf.png (limited to 'Makefile') diff --git a/Makefile b/Makefile index cd09d11..18781bb 100644 --- a/Makefile +++ b/Makefile @@ -20,8 +20,8 @@ DBG ?= PKGCONFIG ?= pkg-config MSGFMT ?= msgfmt -# for i in 48 64 128 256; do echo icons/hicolor/${i}x${i}/apps/badwolf.png; done | tr '\n' ' ' -ICON_SIZES = icons/hicolor/48x48/apps/badwolf.png icons/hicolor/64x64/apps/badwolf.png icons/hicolor/128x128/apps/badwolf.png icons/hicolor/256x256/apps/badwolf.png +# for i in 24 32 48 64 128 256; do echo icons/hicolor/${i}x${i}/apps/badwolf.png; done | tr '\n' ' ' +ICON_SIZES = icons/hicolor/24x24/apps/badwolf.png icons/hicolor/32x32/apps/badwolf.png icons/hicolor/48x48/apps/badwolf.png icons/hicolor/64x64/apps/badwolf.png icons/hicolor/128x128/apps/badwolf.png icons/hicolor/256x256/apps/badwolf.png DEPS = gtk+-3.0 webkit2gtk-4.0 libsoup-2.4 SRCS = uri.c uri_test.c keybindings.c downloads.c badwolf.c @@ -44,7 +44,7 @@ icons/hicolor/scalable/apps/badwolf.svg: badwolf.svg icons/hicolor/%/apps/badwolf.png: icons/hicolor/scalable/apps/badwolf.svg mkdir -p `dirname $@` - rsvg-convert -a `echo $@ | cut -d/ -f3 | ./icons_size.sh` $< -o $@ + inkscape `echo $@ | cut -d/ -f3 | ./icons_size.sh` $< -o $@ po/messages.pot: $(SRCS) xgettext --keyword=_ --language=C --from-code=UTF-8 -o $@ --add-comments --sort-output --copyright-holder="Badwolf Authors " --package-name="$(PACKAGE)" --package-version="$(VERSION_FULL)" --msgid-bugs-address="contact+badwolf-msgid@hacktivis.me" $(SRCS) diff --git a/badwolf.inkscape.svg b/badwolf.inkscape.svg new file mode 100644 index 0000000..de73138 --- /dev/null +++ b/badwolf.inkscape.svg @@ -0,0 +1,164 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/badwolf.svg b/badwolf.svg index 3635724..d2ff8e2 100644 --- a/badwolf.svg +++ b/badwolf.svg @@ -6,15 +6,11 @@ xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" - xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="64" - height="64" - version="1.1" - viewBox="0 0 16.93333 16.93333" id="svg17" - sodipodi:docname="badwolf.svg" - inkscape:version="1.0rc1 (09960d6f05, 2020-04-09)"> + viewBox="0 0 16.93333 16.93333" + version="1.1" + height="64" + width="64"> @@ -23,95 +19,116 @@ image/svg+xml - + - + + + + + + + + + x="0" + height="16.933333" + width="16.933333" + id="rect4" /> + stop-color="#139e7c" /> + stop-color="#122548" /> + gradientTransform="matrix(-2.612,0.05608289,-0.03812291,-1.775534,30.49128,-9.106413)" + r="8.4666672" + cy="-4.2398162" + cx="8.6972151" + id="b" /> + + + y2="11.681454" + x2="6.7958536" + y1="8.9934816" + x1="7.463346" + id="linearGradient874" + xlink:href="#linearGradient880" /> + clip-path="url(#clippy)" + id="g16"> + ry="0" + height="16.93333" + width="16.93333" /> + stroke="#47b79f" + d="m 21.86801,-1.9920238 a 13.40211,8.185254 0 0 1 -6.713234,7.092927 13.40211,8.185254 0 0 1 -13.41427,-0.012891 13.40211,8.185254 0 0 1 -6.676652,-7.105795 l 13.40204,0.025759 z" /> + stroke="url(#c)" + fill-rule="evenodd" + fill="#0f0805" + d="M 5.954321,19.118114 C 6.279375,16.458717 6.8910042,15.96845 5.7885535,13.873872 5.195892,12.824843 3.5059475,11.558594 2.6479315,10.539665 2.1673827,9.7904655 1.0434685,9.2171762 0.3615065,7.7493392 0.201822,6.7648665 2.5855305,8.9732112 3.2563495,8.9366162 3.5137348,8.6517205 1.6556185,6.7595682 1.8277525,6.0733512 1.97089,5.5027309 2.0400037,4.9353402 2.6089912,4.5036212 c 1.197317,-0.3311996 3.39131,2.812714 4.927271,3.260379 2.110609,-0.7248708 3.1742058,1.490123 4.8202378,1.830078 1.322712,0.1565739 3.207405,1.5936848 4.252409,2.9707628 -0.845016,0.590474 -3.044526,-0.706301 -4.410436,-0.108108 -0.538115,0.825242 1.099559,5.219231 1.386259,5.733128" /> diff --git a/icons/hicolor/128x128/apps/badwolf.png b/icons/hicolor/128x128/apps/badwolf.png index e2cd289..0fa27e1 100644 Binary files a/icons/hicolor/128x128/apps/badwolf.png and b/icons/hicolor/128x128/apps/badwolf.png differ diff --git a/icons/hicolor/24x24/apps/badwolf.png b/icons/hicolor/24x24/apps/badwolf.png new file mode 100644 index 0000000..9befcf3 Binary files /dev/null and b/icons/hicolor/24x24/apps/badwolf.png differ diff --git a/icons/hicolor/256x256/apps/badwolf.png b/icons/hicolor/256x256/apps/badwolf.png index c391692..f8e1f14 100644 Binary files a/icons/hicolor/256x256/apps/badwolf.png and b/icons/hicolor/256x256/apps/badwolf.png differ diff --git a/icons/hicolor/32x32/apps/badwolf.png b/icons/hicolor/32x32/apps/badwolf.png new file mode 100644 index 0000000..c88da40 Binary files /dev/null and b/icons/hicolor/32x32/apps/badwolf.png differ diff --git a/icons/hicolor/48x48/apps/badwolf.png b/icons/hicolor/48x48/apps/badwolf.png index 0f3af2c..8cd38e3 100644 Binary files a/icons/hicolor/48x48/apps/badwolf.png and b/icons/hicolor/48x48/apps/badwolf.png differ diff --git a/icons/hicolor/64x64/apps/badwolf.png b/icons/hicolor/64x64/apps/badwolf.png index a54c7aa..f15a58a 100644 Binary files a/icons/hicolor/64x64/apps/badwolf.png and b/icons/hicolor/64x64/apps/badwolf.png differ diff --git a/icons/hicolor/scalable/apps/badwolf.svg b/icons/hicolor/scalable/apps/badwolf.svg index cae9b3d..7d2500d 100644 --- a/icons/hicolor/scalable/apps/badwolf.svg +++ b/icons/hicolor/scalable/apps/badwolf.svg @@ -1,2 +1,2 @@ - + -- cgit v1.3.1-23-gd82d From 6a06735ed8263107c224bf52397b217e5e9130f3 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Mon, 11 May 2020 03:05:20 +0200 Subject: Makefile: do not fail because of inkscape --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 18781bb..abad536 100644 --- a/Makefile +++ b/Makefile @@ -19,6 +19,7 @@ CFLAGS ?= -g -Wall -Wextra -Wconversion -Wsign-conversion -O2 DBG ?= PKGCONFIG ?= pkg-config MSGFMT ?= msgfmt +INKSCAPE ?= inkscape # for i in 24 32 48 64 128 256; do echo icons/hicolor/${i}x${i}/apps/badwolf.png; done | tr '\n' ' ' ICON_SIZES = icons/hicolor/24x24/apps/badwolf.png icons/hicolor/32x32/apps/badwolf.png icons/hicolor/48x48/apps/badwolf.png icons/hicolor/64x64/apps/badwolf.png icons/hicolor/128x128/apps/badwolf.png icons/hicolor/256x256/apps/badwolf.png @@ -44,7 +45,7 @@ icons/hicolor/scalable/apps/badwolf.svg: badwolf.svg icons/hicolor/%/apps/badwolf.png: icons/hicolor/scalable/apps/badwolf.svg mkdir -p `dirname $@` - inkscape `echo $@ | cut -d/ -f3 | ./icons_size.sh` $< -o $@ + $(INKSCAPE) `echo $@ | cut -d/ -f3 | ./icons_size.sh` $< -o $@ && : po/messages.pot: $(SRCS) xgettext --keyword=_ --language=C --from-code=UTF-8 -o $@ --add-comments --sort-output --copyright-holder="Badwolf Authors " --package-name="$(PACKAGE)" --package-version="$(VERSION_FULL)" --msgid-bugs-address="contact+badwolf-msgid@hacktivis.me" $(SRCS) -- cgit v1.3.1-23-gd82d From 1e5642adbb35dd225e1d9acb497d56fd6c51ff5f Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Mon, 11 May 2020 03:10:17 +0200 Subject: Do not rebuild icons by default --- Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index abad536..4ddee8f 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,9 @@ CDEPS = -DDATADIR=\"$(DATADIR)\" -DPACKAGE=\"$(PACKAGE)\" -D_POSIX_C_SOURCE=2008 CDEPS += `$(PKGCONFIG) --cflags $(DEPS)` LIBS = `$(PKGCONFIG) --libs $(DEPS)` -all: $(EXE) $(ICON_SIZES) $(TRANS) po/messages.pot +all: $(EXE) $(TRANS) po/messages.pot + +icons: $(ICON_SIZES) icons/hicolor/scalable/apps/badwolf.svg: badwolf.svg mkdir -p icons/hicolor/scalable/apps @@ -45,7 +47,7 @@ icons/hicolor/scalable/apps/badwolf.svg: badwolf.svg icons/hicolor/%/apps/badwolf.png: icons/hicolor/scalable/apps/badwolf.svg mkdir -p `dirname $@` - $(INKSCAPE) `echo $@ | cut -d/ -f3 | ./icons_size.sh` $< -o $@ && : + $(INKSCAPE) `echo $@ | cut -d/ -f3 | ./icons_size.sh` $< -o $@ po/messages.pot: $(SRCS) xgettext --keyword=_ --language=C --from-code=UTF-8 -o $@ --add-comments --sort-output --copyright-holder="Badwolf Authors " --package-name="$(PACKAGE)" --package-version="$(VERSION_FULL)" --msgid-bugs-address="contact+badwolf-msgid@hacktivis.me" $(SRCS) -- cgit v1.3.1-23-gd82d From 50bd3815ddd9c7b705c586143817e2aec02f9dab Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Mon, 11 May 2020 05:06:53 +0200 Subject: Makefile: DOCS+=interface.txt --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 4ddee8f..8bb2511 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ OBJS_test = uri_test.o EXE = badwolf EXE_test = uri_test TRANS = fr.mo pt_BR.mo -DOCS = usr.bin.badwolf README.md KnowledgeBase.md +DOCS = usr.bin.badwolf README.md KnowledgeBase.md interface.txt CDEPS = -DDATADIR=\"$(DATADIR)\" -DPACKAGE=\"$(PACKAGE)\" -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION_FULL)\" CDEPS += `$(PKGCONFIG) --cflags $(DEPS)` -- cgit v1.3.1-23-gd82d From 1dbcade1d73cc2e45c61663cc97da17ddec7eb04 Mon Sep 17 00:00:00 2001 From: "Haelwenn (lanodan) Monnier" Date: Fri, 15 May 2020 05:20:58 +0200 Subject: Bump to 1.0.0 --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Makefile') diff --git a/Makefile b/Makefile index 8bb2511..f371a28 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ # - Usage of += for appending to a variable PACKAGE = Badwolf -VERSION = 0.5.1 +VERSION = 1.0.0 VERSION_FULL = $(VERSION)`./version.sh` PREFIX ?= /usr/local -- cgit v1.3.1-23-gd82d