typedef struct Client {
GtkWidget *win, *scroll, *vbox, *uribar, *searchbar, *indicator;
typedef struct Client {
GtkWidget *win, *scroll, *vbox, *uribar, *searchbar, *indicator;
static SoupCookieJar *cookiejar;
static SoupSession *session;
static Client *clients = NULL;
static SoupCookieJar *cookiejar;
static SoupSession *session;
static Client *clients = NULL;
static GdkNativeWindow embed = 0;
static gboolean showxid = FALSE;
static gboolean ignore_once = FALSE;
static GdkNativeWindow embed = 0;
static gboolean showxid = FALSE;
static gboolean ignore_once = FALSE;
-static const gchar *autouri(Client *c);
-static gchar *buildpath(const gchar *path);
+static const char *autouri(Client *c);
+static char *buildpath(const char *path);
+static void changecookie(SoupCookieJar *jar, SoupCookie *o, SoupCookie *n, gpointer p);
static void cleanup(void);
static void clipboard(Client *c, const Arg *arg);
static void context(WebKitWebView *v, GtkMenu *m, Client *c);
static void cleanup(void);
static void clipboard(Client *c, const Arg *arg);
static void context(WebKitWebView *v, GtkMenu *m, Client *c);
static gboolean decidewindow(WebKitWebView *v, WebKitWebFrame *f, WebKitNetworkRequest *r, WebKitWebNavigationAction *n, WebKitWebPolicyDecision *p, Client *c);
static void destroyclient(Client *c);
static void destroywin(GtkWidget* w, Client *c);
static gboolean decidewindow(WebKitWebView *v, WebKitWebFrame *f, WebKitNetworkRequest *r, WebKitWebNavigationAction *n, WebKitWebPolicyDecision *p, Client *c);
static void destroyclient(Client *c);
static void destroywin(GtkWidget* w, Client *c);
static void download(WebKitDownload *o, GParamSpec *pspec, Client *c);
static void drawindicator(Client *c);
static gboolean exposeindicator(GtkWidget *w, GdkEventExpose *e, Client *c);
static gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c);
static void download(WebKitDownload *o, GParamSpec *pspec, Client *c);
static void drawindicator(Client *c);
static gboolean exposeindicator(GtkWidget *w, GdkEventExpose *e, Client *c);
static gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c);
static void hidesearch(Client *c, const Arg *arg);
static void hideuri(Client *c, const Arg *arg);
static void itemclick(GtkMenuItem *mi, Client *c);
static gboolean keypress(GtkWidget *w, GdkEventKey *ev, Client *c);
static void hidesearch(Client *c, const Arg *arg);
static void hideuri(Client *c, const Arg *arg);
static void itemclick(GtkMenuItem *mi, Client *c);
static gboolean keypress(GtkWidget *w, GdkEventKey *ev, Client *c);
-static void linkhover(WebKitWebView *v, const gchar* t, const gchar* l, Client *c);
+static void linkhover(WebKitWebView *v, const char* t, const char* l, Client *c);
static void loadstart(WebKitWebView *v, WebKitWebFrame *f, Client *c);
static void loaduri(Client *c, const Arg *arg);
static void navigate(Client *c, const Arg *arg);
static Client *newclient(void);
static void newwindow(Client *c, const Arg *arg);
static WebKitWebView *createwindow(WebKitWebView *v, WebKitWebFrame *f, Client *c);
static void loadstart(WebKitWebView *v, WebKitWebFrame *f, Client *c);
static void loaduri(Client *c, const Arg *arg);
static void navigate(Client *c, const Arg *arg);
static Client *newclient(void);
static void newwindow(Client *c, const Arg *arg);
static WebKitWebView *createwindow(WebKitWebView *v, WebKitWebFrame *f, Client *c);
static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event, gpointer d);
static void print(Client *c, const Arg *arg);
static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event, gpointer d);
static void print(Client *c, const Arg *arg);
static void scroll(Client *c, const Arg *arg);
static void searchtext(Client *c, const Arg *arg);
static void source(Client *c, const Arg *arg);
static void showsearch(Client *c, const Arg *arg);
static void showuri(Client *c, const Arg *arg);
static void stop(Client *c, const Arg *arg);
static void scroll(Client *c, const Arg *arg);
static void searchtext(Client *c, const Arg *arg);
static void source(Client *c, const Arg *arg);
static void showsearch(Client *c, const Arg *arg);
static void showuri(Client *c, const Arg *arg);
static void stop(Client *c, const Arg *arg);
-static void titlechange(WebKitWebView *v, WebKitWebFrame* frame, const gchar* title, Client *c);
+static void titlechange(WebKitWebView *v, WebKitWebFrame* frame, const char* title, Client *c);
static gboolean focusview(GtkWidget *w, GdkEventFocus *e, Client *c);
static void usage(void);
static void update(Client *c);
static gboolean focusview(GtkWidget *w, GdkEventFocus *e, Client *c);
static void usage(void);
static void update(Client *c);
+void
+changecookie(SoupCookieJar *jar, SoupCookie *oc, SoupCookie *c, gpointer p) {
+ SoupDate *e;
+
+ if(c && c->expires == NULL) {
+ e = soup_date_new_from_time_t(time(NULL) + sessiontime);
+ c = soup_cookie_copy(c);
+ soup_cookie_set_expires(c, e);
+ soup_cookie_jar_add_cookie(cookiejar, c);
+ }
+}
+
gtk_widget_hide_all(GTK_WIDGET(m));
gtk_widget_show(GTK_WIDGET(m));
for(i = 0; i < LENGTH(items); i++) {
gtk_widget_hide_all(GTK_WIDGET(m));
gtk_widget_show(GTK_WIDGET(m));
for(i = 0; i < LENGTH(items); i++) {
- item = gtk_menu_item_new_with_label(items[i].label);
- gtk_menu_shell_append(GTK_MENU_SHELL(m), item);
- g_signal_connect(G_OBJECT(item), "activate",
- G_CALLBACK(itemclick), c);
- gtk_widget_show(item);
+ parent = GTK_CONTAINER(gtk_widget_get_parent(c->items[i]));
+ if(parent)
+ gtk_container_remove(parent, c->items[i]);
+ gtk_menu_shell_append(GTK_MENU_SHELL(m), c->items[i]);
+ gtk_widget_show(c->items[i]);
gtk_widget_destroy(c->searchbar);
gtk_widget_destroy(c->vbox);
gtk_widget_destroy(c->win);
gtk_widget_destroy(c->searchbar);
gtk_widget_destroy(c->vbox);
gtk_widget_destroy(c->win);
-linkhover(WebKitWebView *v, const gchar* t, const gchar* l, Client *c) {
+linkhover(WebKitWebView *v, const char* t, const char* l, Client *c) {
g_signal_connect(G_OBJECT(c->win), "destroy", G_CALLBACK(destroywin), c);
g_signal_connect(G_OBJECT(c->win), "key-press-event", G_CALLBACK(keypress), c);
g_signal_connect(G_OBJECT(c->win), "destroy", G_CALLBACK(destroywin), c);
g_signal_connect(G_OBJECT(c->win), "key-press-event", G_CALLBACK(keypress), c);
+ if(!(c->items = calloc(1, sizeof(GtkWidget *) * LENGTH(items))))
+ die("Cannot malloc!\n");
+
+ /* contextmenu */
+ for(i = 0; i < LENGTH(items); i++) {
+ c->items[i] = gtk_menu_item_new_with_label(items[i].label);
+ g_signal_connect(G_OBJECT(c->items[i]), "activate",
+ G_CALLBACK(itemclick), c);
+ }
+
+
c->view = WEBKIT_WEB_VIEW(webkit_web_view_new());
g_signal_connect(G_OBJECT(c->view), "title-changed", G_CALLBACK(titlechange), c);
g_signal_connect(G_OBJECT(c->view), "load-progress-changed", G_CALLBACK(progresschange), c);
c->view = WEBKIT_WEB_VIEW(webkit_web_view_new());
g_signal_connect(G_OBJECT(c->view), "title-changed", G_CALLBACK(titlechange), c);
g_signal_connect(G_OBJECT(c->view), "load-progress-changed", G_CALLBACK(progresschange), c);
g_signal_connect(G_OBJECT(c->view), "load-committed", G_CALLBACK(loadcommit), c);
g_signal_connect(G_OBJECT(c->view), "load-started", G_CALLBACK(loadstart), c);
g_signal_connect(G_OBJECT(c->view), "hovering-over-link", G_CALLBACK(linkhover), c);
g_signal_connect(G_OBJECT(c->view), "load-committed", G_CALLBACK(loadcommit), c);
g_signal_connect(G_OBJECT(c->view), "load-started", G_CALLBACK(loadstart), c);
g_signal_connect(G_OBJECT(c->view), "hovering-over-link", G_CALLBACK(linkhover), c);
g_signal_connect(G_OBJECT(c->view), "new-window-policy-decision-requested", G_CALLBACK(decidewindow), c);
g_signal_connect(G_OBJECT(c->view), "download-requested", G_CALLBACK(initdownload), c);
g_signal_connect(G_OBJECT(c->view), "window-object-cleared", G_CALLBACK(windowobjectcleared), c);
g_signal_connect(G_OBJECT(c->view), "new-window-policy-decision-requested", G_CALLBACK(decidewindow), c);
g_signal_connect(G_OBJECT(c->view), "download-requested", G_CALLBACK(initdownload), c);
g_signal_connect(G_OBJECT(c->view), "window-object-cleared", G_CALLBACK(windowobjectcleared), c);
g_signal_connect(G_OBJECT(c->view), "focus-in-event", G_CALLBACK(focusview), c);
g_signal_connect(G_OBJECT(c->view), "populate-popup", G_CALLBACK(context), c);
g_signal_connect(G_OBJECT(c->view), "focus-in-event", G_CALLBACK(focusview), c);
g_signal_connect(G_OBJECT(c->view), "populate-popup", G_CALLBACK(context), c);
-void
-proccookies(SoupMessage *m, Client *c) {
- GSList *l;
- SoupCookie *co;
- long t;
-
- rereadcookies();
- for (l = soup_cookies_from_response(m); l; l = l->next){
- co = (SoupCookie *)l->data;
- t = co->expires ? soup_date_to_time_t(co->expires) : 0;
- setcookie(co->name, co->value, co->domain, co->value, t);
- }
- g_slist_free(l);
-}
-
-void
-request(SoupSession *s, SoupMessage *m, Client *c) {
- soup_message_add_header_handler(m, "got-headers", "Set-Cookie",
- G_CALLBACK(proccookies), c);
-}
-
void
reload(Client *c, const Arg *arg) {
gboolean nocache = *(gboolean *)arg;
void
reload(Client *c, const Arg *arg) {
gboolean nocache = *(gboolean *)arg;
+ /* This forces the cookie to be written to hdd */
+ s = webkit_get_default_session();
+ soup_session_remove_feature(s, SOUP_SESSION_FEATURE(cookiejar));
+ soup_session_add_feature(s, SOUP_SESSION_FEATURE(cookiejar));
+}
s = webkit_get_default_session();
cookiejar = soup_cookie_jar_text_new(cookiefile, FALSE);
soup_session_add_feature(s, SOUP_SESSION_FEATURE(cookiejar));
s = webkit_get_default_session();
cookiejar = soup_cookie_jar_text_new(cookiefile, FALSE);
soup_session_add_feature(s, SOUP_SESSION_FEATURE(cookiejar));
gboolean forward = *(gboolean *)arg;
text = gtk_entry_get_text(GTK_ENTRY(c->searchbar));
webkit_web_view_search_text(c->view, text, FALSE, forward, TRUE);
gboolean forward = *(gboolean *)arg;
text = gtk_entry_get_text(GTK_ENTRY(c->searchbar));
webkit_web_view_search_text(c->view, text, FALSE, forward, TRUE);
- execvp(((gchar **)arg->v)[0], (gchar **)arg->v);
- fprintf(stderr, "tabbed: execvp %s", ((gchar **)arg->v)[0]);
+ execvp(((char **)arg->v)[0], (char **)arg->v);
+ fprintf(stderr, "tabbed: execvp %s", ((char **)arg->v)[0]);
-titlechange(WebKitWebView *v, WebKitWebFrame *f, const gchar *t, Client *c) {
+titlechange(WebKitWebView *v, WebKitWebFrame *f, const char *t, Client *c) {
void
windowobjectcleared(GtkWidget *w, WebKitWebFrame *frame, JSContextRef js, JSObjectRef win, Client *c) {
JSStringRef jsscript;
void
windowobjectcleared(GtkWidget *w, WebKitWebFrame *frame, JSContextRef js, JSObjectRef win, Client *c) {
JSStringRef jsscript;