diff --git a/config.def.h b/config.def.h index f7db2dc..40378d4 100644 --- a/config.def.h +++ b/config.def.h @@ -3,6 +3,7 @@ static int surfuseragent = 1; /* Append Surf version to default WebKit user age static char *fulluseragent = ""; /* Or override the whole user agent string */ static char *scriptfile = "~/.config/surf/script.js"; static char *styledir = "~/.config/surf/styles/"; +static char *tabstyle = "~/.config/surf/styles/tab_bar.css"; static char *certdir = "~/.config/surf/certificates/"; static char *dlstatus = "~/.config/surf/dlstatus/"; static char *cachedir = "/tmp/cache"; diff --git a/surf-dlconsole-20190919-d068a38.diff b/surf-dlconsole-20190919-d068a38.diff deleted file mode 100644 index 28a49e0..0000000 --- a/surf-dlconsole-20190919-d068a38.diff +++ /dev/null @@ -1,226 +0,0 @@ -From 0ea5ecb238b932c533413b912b7981a737af56cf Mon Sep 17 00:00:00 2001 -From: danoloan10 -Date: Thu, 19 Sep 2019 18:25:59 +0200 -Subject: [PATCH] Basic integrated downloads via console display - ---- - config.def.h | 16 ++++--- - surf.c | 118 +++++++++++++++++++++++++++++++++++++++------------ - 2 files changed, 101 insertions(+), 33 deletions(-) - -diff --git a/config.def.h b/config.def.h -index 34265f6..375be93 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -6,6 +6,8 @@ static char *styledir = "~/.surf/styles/"; - static char *certdir = "~/.surf/certificates/"; - static char *cachedir = "~/.surf/cache/"; - static char *cookiefile = "~/.surf/cookies.txt"; -+static char *dldir = "~/dl/"; -+static char *dlstatus = "~/.surf/dlstatus/"; - - /* Webkit default features */ - /* Highest priority value will be used. -@@ -76,13 +78,12 @@ static WebKitFindOptions findopts = WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE | - } \ - } - --/* DOWNLOAD(URI, referer) */ --#define DOWNLOAD(u, r) { \ -+#define DLSTATUS { \ - .v = (const char *[]){ "st", "-e", "/bin/sh", "-c",\ -- "curl -g -L -J -O -A \"$1\" -b \"$2\" -c \"$2\"" \ -- " -e \"$3\" \"$4\"; read", \ -- "surf-download", useragent, cookiefile, r, u, NULL \ -- } \ -+ "while true; do cat $1/* 2>/dev/null || echo \"no hay descargas\";"\ -+ "A=; read A; "\ -+ "if [ $A = \"clean\" ]; then rm $1/*; fi; clear; done",\ -+ "surf-dlstatus", dlstatus, NULL } \ - } - - /* PLUMB(URI) */ -@@ -180,6 +181,9 @@ static Key keys[] = { - { MODKEY|GDK_SHIFT_MASK, GDK_KEY_b, toggle, { .i = ScrollBars } }, - { MODKEY|GDK_SHIFT_MASK, GDK_KEY_t, toggle, { .i = StrictTLS } }, - { MODKEY|GDK_SHIFT_MASK, GDK_KEY_m, toggle, { .i = Style } }, -+ -+ /* download-console */ -+ { MODKEY, GDK_KEY_d, spawndls, { 0 } }, - }; - - /* button definitions */ -diff --git a/surf.c b/surf.c -index 2b54e3c..771858e 100644 ---- a/surf.c -+++ b/surf.c -@@ -205,10 +205,6 @@ static void decidenewwindow(WebKitPolicyDecision *d, Client *c); - static void decideresource(WebKitPolicyDecision *d, Client *c); - static void insecurecontent(WebKitWebView *v, WebKitInsecureContentEvent e, - Client *c); --static void downloadstarted(WebKitWebContext *wc, WebKitDownload *d, -- Client *c); --static void responsereceived(WebKitDownload *d, GParamSpec *ps, Client *c); --static void download(Client *c, WebKitURIResponse *r); - static void webprocessterminated(WebKitWebView *v, - WebKitWebProcessTerminationReason r, - Client *c); -@@ -237,6 +233,17 @@ static void clicknavigate(Client *c, const Arg *a, WebKitHitTestResult *h); - static void clicknewwindow(Client *c, const Arg *a, WebKitHitTestResult *h); - static void clickexternplayer(Client *c, const Arg *a, WebKitHitTestResult *h); - -+/* download-console */ -+static void downloadstarted(WebKitWebContext *wc, WebKitDownload *d, -+ Client *c); -+static void downloadfailed(WebKitDownload *d, GParamSpec *ps, void *arg); -+static void downloadfinished(WebKitDownload *d, GParamSpec *ps, void *arg); -+static gboolean decidedestination(WebKitDownload *d, -+ gchar *suggested_filename, void *arg); -+static void printprogress(WebKitDownload *d, GParamSpec *ps, void *arg); -+static void logdownload(WebKitDownload *d, gchar *tail); -+static void spawndls(Client *c, const Arg *a); -+ - static char winid[64]; - static char togglestats[12]; - static char pagestats[2]; -@@ -340,6 +347,8 @@ setup(void) - scriptfile = buildfile(scriptfile); - cachedir = buildpath(cachedir); - certdir = buildpath(certdir); -+ dlstatus = buildpath(dlstatus); -+ dldir = buildpath(dldir); - - gdkkb = gdk_seat_get_keyboard(gdk_display_get_default_seat(gdpy)); - -@@ -1079,6 +1088,8 @@ cleanup(void) - g_free(scriptfile); - g_free(stylefile); - g_free(cachedir); -+ g_free(dldir); -+ g_free(dlstatus); - XCloseDisplay(dpy); - } - -@@ -1710,8 +1721,7 @@ decideresource(WebKitPolicyDecision *d, Client *c) - if (webkit_response_policy_decision_is_mime_type_supported(r)) { - webkit_policy_decision_use(d); - } else { -- webkit_policy_decision_ignore(d); -- download(c, res); -+ webkit_policy_decision_download(d); - } - } - -@@ -1721,27 +1731,6 @@ insecurecontent(WebKitWebView *v, WebKitInsecureContentEvent e, Client *c) - c->insecure = 1; - } - --void --downloadstarted(WebKitWebContext *wc, WebKitDownload *d, Client *c) --{ -- g_signal_connect(G_OBJECT(d), "notify::response", -- G_CALLBACK(responsereceived), c); --} -- --void --responsereceived(WebKitDownload *d, GParamSpec *ps, Client *c) --{ -- download(c, webkit_download_get_response(d)); -- webkit_download_cancel(d); --} -- --void --download(Client *c, WebKitURIResponse *r) --{ -- Arg a = (Arg)DOWNLOAD(webkit_uri_response_get_uri(r), geturi(c)); -- spawn(c, &a); --} -- - void - webprocessterminated(WebKitWebView *v, WebKitWebProcessTerminationReason r, - Client *c) -@@ -1971,6 +1960,81 @@ clickexternplayer(Client *c, const Arg *a, WebKitHitTestResult *h) - spawn(c, &arg); - } - -+/* download-console */ -+ -+void -+downloadstarted(WebKitWebContext *wc, WebKitDownload *d, Client *c) -+{ -+ webkit_download_set_allow_overwrite(d, TRUE); -+ g_signal_connect(G_OBJECT(d), "decide-destination", -+ G_CALLBACK(decidedestination), NULL); -+ g_signal_connect(G_OBJECT(d), "notify::estimated-progress", -+ G_CALLBACK(printprogress), NULL); -+ g_signal_connect(G_OBJECT(d), "failed", -+ G_CALLBACK(downloadfailed), NULL); -+ g_signal_connect(G_OBJECT(d), "finished", -+ G_CALLBACK(downloadfinished), NULL); -+} -+ -+void -+downloadfailed(WebKitDownload *d, GParamSpec *ps, void *arg) -+{ -+ logdownload(d, " -- FAILED"); -+} -+ -+void -+downloadfinished(WebKitDownload *d, GParamSpec *ps, void *arg) -+{ -+ logdownload(d, " -- COMPLETED"); -+} -+ -+gboolean -+decidedestination(WebKitDownload *d, gchar *suggested_filename, void *arg) -+{ -+ gchar *dest; -+ dest = g_strdup_printf("file://%s/%s", dldir, suggested_filename); -+ webkit_download_set_destination(d, dest); -+ return TRUE; -+} -+ -+void -+printprogress(WebKitDownload *d, GParamSpec *ps, void *arg) -+{ -+ logdownload(d, ""); -+} -+ -+void -+logdownload(WebKitDownload *d, gchar *tail) -+{ -+ gchar *filename, *statfile; -+ FILE *stat; -+ -+ filename = g_path_get_basename(webkit_download_get_destination(d)); -+ statfile = g_strdup_printf("%s/%s", dlstatus, filename); -+ -+ if ((stat = fopen(statfile, "w")) == NULL) { -+ perror("dlstatus"); -+ } else { -+ fprintf(stat, "%s: %d%% (%d.%ds)%s\n", -+ filename, -+ (int)(webkit_download_get_estimated_progress(d) * 100), -+ (int) webkit_download_get_elapsed_time(d), -+ (int)(webkit_download_get_elapsed_time(d) * 100), -+ tail); -+ fclose(stat); -+ } -+ -+ g_free(statfile); -+ g_free(filename); -+} -+ -+void -+spawndls(Client *c, const Arg *a) -+{ -+ Arg arg = (Arg)DLSTATUS; -+ spawn(c, &arg); -+} -+ - int - main(int argc, char *argv[]) - { --- -2.22.1 - diff --git a/surf.c b/surf.c index 7ff209d..dfb14f0 100644 --- a/surf.c +++ b/surf.c @@ -297,22 +297,35 @@ static void playexternal(Client *c, const Arg *a); /* download-console */ static void downloadstarted(WebKitWebContext *wc, WebKitDownload *d, - Client *c); + Client *c); static void downloadfailed(WebKitDownload *d, GParamSpec *ps, void *arg); static void downloadfinished(WebKitDownload *d, GParamSpec *ps, void *arg); static gboolean decidedestination(WebKitDownload *d, - gchar *suggested_filename, void *arg); + gchar *suggested_filename, void *arg); static void printprogress(WebKitDownload *d, GParamSpec *ps, void *arg); static void logdownload(WebKitDownload *d, gchar *tail); static void spawndls(Client *c, const Arg *a); /* tab_bar */ +static void free_tab(Tab *tab); +static void add_tab(Client *client, const gchar *uri); +static void remove_tab(Client *client, Tab *tab); +static void update_tab_bar(Client *c); +static void free_all_tabs(Client *client); +static void reload_tab(Client *c); static void switch_tab(Client *c, const Arg *a); static void move_tab(Client *c, const Arg *a); -static void new_tab(Client *c, const Arg *a); +static void update_tab_uri(Client *c); +static void update_tab_title(Client *c); +static void unsuspend_tab(Client *c); +static void suspend_tab(Client *c); static void close_tab(Client *c, const Arg *a); - +static void new_tab(Client *c, const Arg *a); +static int get_font_size(GtkWidget *widget); +static void tab_bar_click(GtkWidget *w, GdkEvent *e, Client *c); static void fill_tab_bar(Client *c); +static void create_tab_bar(Client *c); + static char winid[64]; static char togglestats[11]; @@ -377,13 +390,12 @@ static ParamName loadfinished[] = { /* configuration, allows nested code to access above variables */ #include "config.h" -static gboolean tab_click_received = FALSE; - // Function to free a tab void free_tab(Tab *tab) { g_free(tab->title); g_free(tab->uri); g_free(tab); + //intentional_error(); } // Function to add a tab to the clients tab list @@ -402,7 +414,7 @@ void remove_tab(Client *client, Tab *tab) { } void update_tab_bar(Client *c) { - gtk_grid_remove_row(c->tab_bar, 0); + gtk_grid_remove_row(GTK_GRID(c->tab_bar), 0); fill_tab_bar(c); } @@ -465,7 +477,7 @@ void update_tab_uri(Client *c) { if (selected_tab->suspended) { return; } - char *uri = geturi(c); + const char *uri = geturi(c); selected_tab->uri = g_strdup(uri); } @@ -530,9 +542,14 @@ void new_tab(Client *c, const Arg *a) { } int get_font_size(GtkWidget *widget) { - GtkStyleContext *context = gtk_widget_get_style_context(widget); - PangoFontDescription *desc = gtk_style_context_get_font(context, GTK_STATE_FLAG_NORMAL); - int size = pango_font_description_get_size(desc); + GtkStyleContext *style_context = gtk_widget_get_style_context(widget); + PangoFontDescription *font_desc; + gtk_style_context_get (style_context, + gtk_style_context_get_state (style_context), + GTK_STYLE_PROPERTY_FONT, &font_desc, + NULL); + + int size = pango_font_description_get_size(font_desc); // Convert size from Pango units to points size = size / PANGO_SCALE; @@ -704,7 +721,7 @@ setup(void) scriptfile = buildfile(scriptfile); certdir = buildpath(certdir); dlstatus = buildpath(dlstatus); - dldir = buildpath(dldir); + dldir = buildpath(dldir); if (curconfig[Ephemeral].val.i) cachedir = NULL; else @@ -1616,7 +1633,7 @@ readsock(GIOChannel *s, GIOCondition ioc, gpointer unused) return TRUE; } if (msgsz < 2) { - fprintf(stderr, "surf: message too short: %d\n", msgsz); + fprintf(stderr, "surf: message too short: %lu\n", (unsigned long)msgsz); return TRUE; } @@ -2266,7 +2283,7 @@ msgext(Client *c, char type, const Arg *a) if (spair[0] < 0) return; - if ((ret = snprintf(msg, sizeof(msg), "%c%c%c", c->pageid, type, a->i)) + if ((ret = snprintf(msg, sizeof(msg), "%lu%c%c", c->pageid, type, a->i)) >= sizeof(msg)) { fprintf(stderr, "surf: message too long: %d\n", ret); return; @@ -2396,7 +2413,7 @@ clicknewwindow(Client *c, const Arg *a, WebKitHitTestResult *h) void clicknewtab(Client *c, const Arg *a, WebKitHitTestResult *h) { - gchar *uri = webkit_hit_test_result_get_link_uri(h); + const gchar *uri = webkit_hit_test_result_get_link_uri(h); add_tab(c, uri); } @@ -2428,13 +2445,13 @@ downloadstarted(WebKitWebContext *wc, WebKitDownload *d, Client *c) { webkit_download_set_allow_overwrite(d, TRUE); g_signal_connect(G_OBJECT(d), "decide-destination", - G_CALLBACK(decidedestination), NULL); + G_CALLBACK(decidedestination), NULL); g_signal_connect(G_OBJECT(d), "notify::estimated-progress", - G_CALLBACK(printprogress), NULL); + G_CALLBACK(printprogress), NULL); g_signal_connect(G_OBJECT(d), "failed", - G_CALLBACK(downloadfailed), NULL); + G_CALLBACK(downloadfailed), NULL); g_signal_connect(G_OBJECT(d), "finished", - G_CALLBACK(downloadfinished), NULL); + G_CALLBACK(downloadfinished), NULL); } void @@ -2477,11 +2494,11 @@ logdownload(WebKitDownload *d, gchar *tail) perror("dlstatus"); } else { fprintf(stat, "%s: %d%% (%d.%ds)%s\n", - filename, - (int)(webkit_download_get_estimated_progress(d) * 100), - (int) webkit_download_get_elapsed_time(d), - (int)(webkit_download_get_elapsed_time(d) * 100), - tail); + filename, + (int)(webkit_download_get_estimated_progress(d) * 100), + (int) webkit_download_get_elapsed_time(d), + (int)(webkit_download_get_elapsed_time(d) * 100), + tail); fclose(stat); }