Summary Files Commits Branches @commit @diff @stats
path: root / badwolf.c
diff options
context:
space:
mode:
Commit1b868aad609d9c3460af8df0e2c151d4f755f210 (patch)
Author
 Haelwenn (lanodan) Monnier <contact@hacktivis.me>
2019-04-26 21:28:52 +0200
Committer
 Haelwenn (lanodan) Monnier <contact@hacktivis.me>
2019-04-26 21:28:52 +0200
Files1971e9d07786d020a0ef4f675ea73f8df5e51f60 /badwolf.c
goodwolf-1b868aad609d9c3460af8df0e2c151d4f755f210.tar
goodwolf-1b868aad609d9c3460af8df0e2c151d4f755f210.tar.gz
goodwolf-1b868aad609d9c3460af8df0e2c151d4f755f210.zip
Parent862a1e08583d5d48fbb369b3f9bf1d8a6781aefa (diff)
Parentc11c1a8f35b0ee89df956029f2a77d55d5a28c42 (diff)
Merge branch 'develop'
1 files changed, 94 insertions, 55 deletions
-rw-r--r--badwolf.c149
diff --git a/badwolf.c b/badwolf.c
index 098f5c7..475cc28 100644
--- a/badwolf.c
+++ b/badwolf.c
@@ -4,8 +4,10 @@
#include "config.h"
+#include <glib/gi18n.h> /* _() and other internationalization/localization helpers */
#include <glib/gprintf.h> /* g_fprintf() */
#include <gtk/gtk.h>
+#include <locale.h> /* LC_* */
#include <webkit2/webkit2.h>
struct Window
@@ -33,14 +35,16 @@ struct Client
static gboolean WebViewCb_close(WebKitWebView *webView, gpointer user_data);
static gboolean WebViewCb_web_process_terminated(WebKitWebView *webView,
- WebKitWebProcessTerminationReason reason);
+ WebKitWebProcessTerminationReason reason,
+ gpointer user_data);
static gboolean
WebViewCb_notify__uri(WebKitWebView *webView, GParamSpec *pspec, gpointer user_data);
+GtkWidget *badwolf_new_tab_box(const gchar *title, struct Client *browser);
static gboolean
WebViewCb_notify__title(WebKitWebView *webView, GParamSpec *pspec, gpointer user_data);
static gboolean
WebViewCb_notify__is__playing__audio(WebKitWebView *webView, GParamSpec *pspec, gpointer user_data);
-void webView_tab_label_change(struct Client *browser);
+void webView_tab_label_change(struct Client *browser, const gchar *title);
static gboolean WebViewCb_notify__estimated_load_progress(WebKitWebView *webView,
GParamSpec *pspec,
gpointer user_data);
@@ -48,7 +52,7 @@ static gboolean WebViewCb_mouse_target_changed(WebKitWebView *webView,
WebKitHitTestResult *hit,
guint modifiers,
gpointer user_data);
-static WebKitWebView *WebViewCb_create(WebKitWebView *webView,
+static WebKitWebView *WebViewCb_create(WebKitWebView *related_web_view,
WebKitNavigationAction *navigation_action,
gpointer user_data);
static gboolean locationCb_activate(GtkEntry *location, gpointer user_data);
@@ -59,14 +63,15 @@ static gboolean SearchEntryCb_search__changed(GtkSearchEntry *search, gpointer u
static gboolean SearchEntryCb_stop__search(GtkSearchEntry *search, gpointer user_data);
struct Client *
new_browser(struct Window *window, gchar *target_url, WebKitWebView *related_web_view);
-void new_tabCb_clicked(GtkButton *new_tab, gpointer user_data);
-void closeCb_clicked(GtkButton *close, gpointer user_data);
int badwolf_new_tab(GtkNotebook *notebook, struct Client *browser);
-GtkWidget *badwolf_new_tab_box(const gchar *title, struct Client *browser);
+static void new_tabCb_clicked(GtkButton *new_tab, gpointer user_data);
+static void closeCb_clicked(GtkButton *close, gpointer user_data);
+static void
+notebookCb_switch__page(GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data);
gint get_tab_position(GtkContainer *notebook, GtkWidget *child);
-int main(int argc, char *argv[]);
-static gboolean WebViewCb_close(WebKitWebView *webView, gpointer user_data)
+static gboolean
+WebViewCb_close(WebKitWebView *webView, gpointer user_data)
{
(void)webView;
struct Client *browser = (struct Client *)user_data;
@@ -81,27 +86,34 @@ static gboolean WebViewCb_close(WebKitWebView *webView, gpointer user_data)
return TRUE;
}
-static gboolean WebViewCb_web_process_terminated(WebKitWebView *webView,
- WebKitWebProcessTerminationReason reason)
+static gboolean
+WebViewCb_web_process_terminated(WebKitWebView *webView,
+ WebKitWebProcessTerminationReason reason,
+ gpointer user_data)
{
(void)webView;
- char *str_reason;
+ struct Client *browser = (struct Client *)user_data;
switch(reason)
{
- case WEBKIT_WEB_PROCESS_CRASHED: str_reason = "the web process crashed."; break;
+ case WEBKIT_WEB_PROCESS_CRASHED:
+ g_fprintf(stderr, _("the web process crashed.\n"));
+ webView_tab_label_change(browser, _("title|Crashed"));
+ break;
case WEBKIT_WEB_PROCESS_EXCEEDED_MEMORY_LIMIT:
- str_reason = "the web process exceeded the memory limit.";
+ g_fprintf(stderr, _("the web process exceeded the memory limit.\n"));
+ webView_tab_label_change(browser, _("title|Out of Memory"));
break;
- default: str_reason = "the web process terminated for an unknown reason.";
+ default:
+ g_fprintf(stderr, _("the web process terminated for an unknown reason.\n"));
+ webView_tab_label_change(browser, _("title|Unknown Crash"));
}
- g_fprintf(stderr, "BadWolf [signal: web-process-terminated]: %s\n", str_reason);
-
return FALSE;
}
-static gboolean WebViewCb_notify__uri(WebKitWebView *webView, GParamSpec *pspec, gpointer user_data)
+static gboolean
+WebViewCb_notify__uri(WebKitWebView *webView, GParamSpec *pspec, gpointer user_data)
{
(void)webView;
(void)pspec;
@@ -115,7 +127,8 @@ static gboolean WebViewCb_notify__uri(WebKitWebView *webView, GParamSpec *pspec,
return TRUE;
}
-GtkWidget *badwolf_new_tab_box(const gchar *title, struct Client *browser)
+GtkWidget *
+badwolf_new_tab_box(const gchar *title, struct Client *browser)
{
(void)browser;
GtkWidget *tab_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
@@ -125,13 +138,20 @@ GtkWidget *badwolf_new_tab_box(const gchar *title, struct Client *browser)
GtkWidget *playing =
gtk_image_new_from_icon_name("audio-volume-high-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR);
+#ifdef BADWOLF_TAB_BOX_WIDTH
+ gtk_widget_set_size_request(label, BADWOLF_TAB_BOX_WIDTH, -1);
+#endif
+#ifdef BADWOLF_TAB_LABEL_CHARWIDTH
gtk_label_set_width_chars(GTK_LABEL(label), BADWOLF_TAB_LABEL_CHARWIDTH);
+#endif
+ gtk_widget_set_hexpand(tab_box, BADWOLF_TAB_HEXPAND);
+
gtk_label_set_ellipsize(GTK_LABEL(label), BADWOLF_TAB_LABEL_ELLIPSIZE);
gtk_label_set_single_line_mode(GTK_LABEL(label), TRUE);
gtk_box_pack_start(GTK_BOX(tab_box), playing, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(tab_box), label, TRUE, TRUE, 0);
- gtk_box_pack_start(GTK_BOX(tab_box), close, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(tab_box), close, FALSE, FALSE, 0);
gtk_button_set_relief(GTK_BUTTON(close), GTK_RELIEF_NONE);
@@ -152,7 +172,7 @@ WebViewCb_notify__title(WebKitWebView *webView, GParamSpec *pspec, gpointer user
(void)pspec;
struct Client *browser = (struct Client *)user_data;
- webView_tab_label_change(browser);
+ webView_tab_label_change(browser, NULL);
return TRUE;
}
@@ -164,21 +184,21 @@ WebViewCb_notify__is__playing__audio(WebKitWebView *webView, GParamSpec *pspec,
(void)pspec;
struct Client *browser = (struct Client *)user_data;
- webView_tab_label_change(browser);
+ webView_tab_label_change(browser, NULL);
return TRUE;
}
-void webView_tab_label_change(struct Client *browser)
+void
+webView_tab_label_change(struct Client *browser, const gchar *title)
{
- const gchar *title;
GtkWidget *notebook = browser->window->notebook;
- title = webkit_web_view_get_title(browser->webView);
+#define title_IS_EMPTY (title == NULL) || (title == (const gchar *)"")
- if(title == NULL) title = webkit_web_view_get_uri(browser->webView);
-
- if(title == NULL) title = "BadWolf";
+ if(title_IS_EMPTY) title = webkit_web_view_get_title(browser->webView);
+ if(title_IS_EMPTY) title = webkit_web_view_get_uri(browser->webView);
+ if(title_IS_EMPTY) title = "BadWolf";
gtk_notebook_set_tab_label(
GTK_NOTEBOOK(notebook), browser->box, badwolf_new_tab_box(title, browser));
@@ -188,9 +208,10 @@ void webView_tab_label_change(struct Client *browser)
gtk_window_set_title(GTK_WINDOW(browser->window->main_window), title);
}
-static gboolean WebViewCb_notify__estimated_load_progress(WebKitWebView *webView,
- GParamSpec *pspec,
- gpointer user_data)
+static gboolean
+WebViewCb_notify__estimated_load_progress(WebKitWebView *webView,
+ GParamSpec *pspec,
+ gpointer user_data)
{
(void)webView;
(void)pspec;
@@ -207,10 +228,11 @@ static gboolean WebViewCb_notify__estimated_load_progress(WebKitWebView *webView
return TRUE;
}
-static gboolean WebViewCb_mouse_target_changed(WebKitWebView *webView,
- WebKitHitTestResult *hit,
- guint modifiers,
- gpointer user_data)
+static gboolean
+WebViewCb_mouse_target_changed(WebKitWebView *webView,
+ WebKitHitTestResult *hit,
+ guint modifiers,
+ gpointer user_data)
{
(void)webView;
(void)modifiers;
@@ -222,9 +244,10 @@ static gboolean WebViewCb_mouse_target_changed(WebKitWebView *webView,
return TRUE;
}
-static WebKitWebView *WebViewCb_create(WebKitWebView *related_web_view,
- WebKitNavigationAction *navigation_action,
- gpointer user_data)
+static WebKitWebView *
+WebViewCb_create(WebKitWebView *related_web_view,
+ WebKitNavigationAction *navigation_action,
+ gpointer user_data)
{
(void)navigation_action;
struct Window *window = (struct Window *)user_data;
@@ -240,7 +263,8 @@ static WebKitWebView *WebViewCb_create(WebKitWebView *related_web_view,
}
}
-static gboolean locationCb_activate(GtkEntry *location, gpointer user_data)
+static gboolean
+locationCb_activate(GtkEntry *location, gpointer user_data)
{
const char *target_url;
struct Client *browser = (struct Client *)user_data;
@@ -252,7 +276,8 @@ static gboolean locationCb_activate(GtkEntry *location, gpointer user_data)
return TRUE;
}
-static gboolean javascriptCb_toggled(GtkButton *javascript, gpointer user_data)
+static gboolean
+javascriptCb_toggled(GtkButton *javascript, gpointer user_data)
{
struct Client *browser = (struct Client *)user_data;
@@ -266,7 +291,8 @@ static gboolean javascriptCb_toggled(GtkButton *javascript, gpointer user_data)
return TRUE;
}
-static gboolean SearchEntryCb_next__match(GtkSearchEntry *search, gpointer user_data)
+static gboolean
+SearchEntryCb_next__match(GtkSearchEntry *search, gpointer user_data)
{
(void)search;
struct Client *browser = (struct Client *)user_data;
@@ -277,7 +303,8 @@ static gboolean SearchEntryCb_next__match(GtkSearchEntry *search, gpointer user_
return TRUE;
}
-static gboolean SearchEntryCb_previous__match(GtkSearchEntry *search, gpointer user_data)
+static gboolean
+SearchEntryCb_previous__match(GtkSearchEntry *search, gpointer user_data)
{
(void)search;
struct Client *browser = (struct Client *)user_data;
@@ -288,7 +315,8 @@ static gboolean SearchEntryCb_previous__match(GtkSearchEntry *search, gpointer u
return TRUE;
}
-static gboolean SearchEntryCb_search__changed(GtkSearchEntry *search, gpointer user_data)
+static gboolean
+SearchEntryCb_search__changed(GtkSearchEntry *search, gpointer user_data)
{
struct Client *browser = (struct Client *)user_data;
WebKitFindController *findController = webkit_web_view_get_find_controller(browser->webView);
@@ -299,7 +327,8 @@ static gboolean SearchEntryCb_search__changed(GtkSearchEntry *search, gpointer u
return TRUE;
}
-static gboolean SearchEntryCb_stop__search(GtkSearchEntry *search, gpointer user_data)
+static gboolean
+SearchEntryCb_stop__search(GtkSearchEntry *search, gpointer user_data)
{
(void)search;
struct Client *browser = (struct Client *)user_data;
@@ -341,7 +370,7 @@ new_browser(struct Window *window, gchar *target_url, WebKitWebView *related_web
settings,
NULL));
- gtk_widget_set_tooltip_text(browser->javascript, "Toggle javascript");
+ gtk_widget_set_tooltip_text(browser->javascript, _("Toggle javascript"));
gtk_box_pack_start(GTK_BOX(browser->toolbar),
GTK_WIDGET(browser->javascript),
@@ -381,7 +410,7 @@ new_browser(struct Window *window, gchar *target_url, WebKitWebView *related_web
gtk_entry_set_has_frame(GTK_ENTRY(browser->location), FALSE);
gtk_entry_set_input_purpose(GTK_ENTRY(browser->location), GTK_INPUT_PURPOSE_URL);
- gtk_entry_set_placeholder_text(GTK_ENTRY(browser->search), "search in current page");
+ gtk_entry_set_placeholder_text(GTK_ENTRY(browser->search), _("search in current page"));
gtk_entry_set_has_frame(GTK_ENTRY(browser->search), FALSE);
g_signal_connect(browser->location, "activate", G_CALLBACK(locationCb_activate), browser);
@@ -391,7 +420,7 @@ new_browser(struct Window *window, gchar *target_url, WebKitWebView *related_web
g_signal_connect(browser->webView,
"web-process-terminated",
G_CALLBACK(WebViewCb_web_process_terminated),
- NULL);
+ browser);
g_signal_connect(browser->webView, "notify::uri", G_CALLBACK(WebViewCb_notify__uri), browser);
g_signal_connect(browser->webView, "notify::title", G_CALLBACK(WebViewCb_notify__title), browser);
g_signal_connect(browser->webView,
@@ -421,10 +450,11 @@ new_browser(struct Window *window, gchar *target_url, WebKitWebView *related_web
return browser;
}
-int badwolf_new_tab(GtkNotebook *notebook, struct Client *browser)
+int
+badwolf_new_tab(GtkNotebook *notebook, struct Client *browser)
{
gint current_page = gtk_notebook_get_current_page(notebook);
- gchar *title = "New tab";
+ gchar *title = _("New tab");
gtk_widget_show_all(browser->box);
@@ -441,7 +471,8 @@ int badwolf_new_tab(GtkNotebook *notebook, struct Client *browser)
return 0;
}
-void new_tabCb_clicked(GtkButton *new_tab, gpointer user_data)
+static void
+new_tabCb_clicked(GtkButton *new_tab, gpointer user_data)
{
(void)new_tab;
struct Window *window = (struct Window *)user_data;
@@ -450,7 +481,8 @@ void new_tabCb_clicked(GtkButton *new_tab, gpointer user_data)
badwolf_new_tab(GTK_NOTEBOOK(window->notebook), browser);
}
-void closeCb_clicked(GtkButton *close, gpointer user_data)
+static void
+closeCb_clicked(GtkButton *close, gpointer user_data)
{
(void)close;
struct Client *browser = (struct Client *)user_data;
@@ -469,7 +501,8 @@ notebookCb_switch__page(GtkNotebook *notebook, GtkWidget *page, guint page_num,
gtk_window_set_title(GTK_WINDOW(window->main_window), gtk_widget_get_tooltip_text(label));
}
-gint get_tab_position(GtkContainer *notebook, GtkWidget *child)
+gint
+get_tab_position(GtkContainer *notebook, GtkWidget *child)
{
GValue position = G_VALUE_INIT;
g_value_init(&position, G_TYPE_INT);
@@ -479,18 +512,24 @@ gint get_tab_position(GtkContainer *notebook, GtkWidget *child)
return g_value_get_int(&position);
}
-int main(int argc, char *argv[])
+int
+main(int argc, char *argv[])
{
struct Window *window = g_malloc(sizeof(struct Client));
gchar *target_url = NULL;
+ setlocale(LC_ALL, "");
+ bindtextdomain(PACKAGE, DATADIR "/locale");
+ bind_textdomain_codeset(PACKAGE, "UTF-8");
+ textdomain(PACKAGE);
+
g_fprintf(stderr,
- "Buildtime WebKit version: %d.%d.%d\n",
+ _("Buildtime WebKit version: %d.%d.%d\n"),
WEBKIT_MAJOR_VERSION,
WEBKIT_MINOR_VERSION,
WEBKIT_MICRO_VERSION);
g_fprintf(stderr,
- "Runtime WebKit version: %d.%d.%d\n",
+ _("Runtime WebKit version: %d.%d.%d\n"),
webkit_get_major_version(),
webkit_get_minor_version(),
webkit_get_micro_version());
@@ -507,7 +546,7 @@ int main(int argc, char *argv[])
GTK_WINDOW(window->main_window), BADWOLF_DEFAULT_WIDTH, BADWOLF_DEFAULT_HEIGHT);
gtk_window_set_role(GTK_WINDOW(window->main_window), "browser");
- gtk_widget_set_tooltip_text(window->new_tab, "Open new tab");
+ gtk_widget_set_tooltip_text(window->new_tab, _("Open new tab"));
gtk_notebook_set_action_widget(GTK_NOTEBOOK(window->notebook), window->new_tab, GTK_PACK_END);
gtk_notebook_set_scrollable(GTK_NOTEBOOK(window->notebook), TRUE);