X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;f=surf.c;h=9851bba774fc89c5c6ca77c7132e22026332fc38;hb=8682a4dffb33b37ba9d3e42b40f25fac3f92e510;hp=1c194a3810b7f68c4654eacfbb1922e8d90bac22;hpb=c8fdd4d5839cac08daf5fcbae9a83db60793486a;p=surf.git diff --git a/surf.c b/surf.c index 1c194a3..9851bba 100644 --- a/surf.c +++ b/surf.c @@ -144,6 +144,8 @@ static void setup(void); static void sigchld(int unused); static char *buildfile(const char *path); static char *buildpath(const char *path); +static const char *getuserhomedir(const char *user); +static const char *getcurrentuserhomedir(void); static Client *newclient(Client *c); static void loaduri(Client *c, const Arg *a); static const char *geturi(Client *c); @@ -350,29 +352,59 @@ buildfile(const char *path) return fpath; } +static const char* +getuserhomedir(const char *user) +{ + struct passwd *pw = getpwnam(user); + + if (!pw) + die("Can't get user %s login information.\n", user); + + return pw->pw_dir; +} + +static const char* +getcurrentuserhomedir(void) +{ + const char *homedir; + const char *user; + struct passwd *pw; + + homedir = getenv("HOME"); + if (homedir) + return homedir; + + user = getenv("USER"); + if (user) + return getuserhomedir(user); + + pw = getpwuid(getuid()); + if (!pw) + die("Can't get current user home directory\n"); + + return pw->pw_dir; +} + char * buildpath(const char *path) { - struct passwd *pw; char *apath, *name, *p, *fpath; + const char *homedir; if (path[0] == '~') { if (path[1] == '/' || path[1] == '\0') { p = (char *)&path[1]; - pw = getpwuid(getuid()); + homedir = getcurrentuserhomedir(); } else { if ((p = strchr(path, '/'))) name = g_strndup(&path[1], --p - path); else name = g_strdup(&path[1]); - if (!(pw = getpwnam(name))) { - die("Can't get user %s home directory: %s.\n", - name, path); - } + homedir = getuserhomedir(name); g_free(name); } - apath = g_build_filename(pw->pw_dir, p, NULL); + apath = g_build_filename(homedir, p, NULL); } else { apath = g_strdup(path); } @@ -415,7 +447,10 @@ loaduri(Client *c, const Arg *a) if (g_strcmp0(uri, "") == 0) return; - if (g_strrstr(uri, "://") || g_str_has_prefix(uri, "about:")) { + if (g_str_has_prefix(uri, "http://") || + g_str_has_prefix(uri, "https://") || + g_str_has_prefix(uri, "file://") || + g_str_has_prefix(uri, "about:")) { url = g_strdup(uri); } else if (!stat(uri, &st) && (path = realpath(uri, NULL))) { url = g_strdup_printf("file://%s", path); @@ -1084,8 +1119,7 @@ showview(WebKitWebView *v, Client *c) GdkWindow *gwin; c->finder = webkit_web_view_get_find_controller(c->view); - if (curconfig[Inspector].val.b) - c->inspector = webkit_web_view_get_inspector(c->view); + c->inspector = webkit_web_view_get_inspector(c->view); c->win = createwindow(c); @@ -1168,20 +1202,18 @@ loadchanged(WebKitWebView *v, WebKitLoadEvent e, Client *c) setatom(c, AtomUri, title); c->title = title; c->tlsflags = G_TLS_CERTIFICATE_VALIDATE_ALL + 1; + seturiparameters(c, geturi(c)); break; case WEBKIT_LOAD_REDIRECTED: setatom(c, AtomUri, title); c->title = title; + seturiparameters(c, geturi(c)); break; case WEBKIT_LOAD_COMMITTED: - setatom(c, AtomUri, title); - c->title = title; if (!webkit_web_view_get_tls_info(c->view, NULL, &(c->tlsflags))) c->tlsflags = G_TLS_CERTIFICATE_VALIDATE_ALL + 1; - setatom(c, AtomUri, geturi(c)); - seturiparameters(c, geturi(c)); break; case WEBKIT_LOAD_FINISHED: /* Disabled until we write some WebKitWebExtension for @@ -1462,7 +1494,6 @@ scroll(Client *c, const Arg *a) GdkEvent *ev = gdk_event_new(GDK_KEY_PRESS); gdk_event_set_device(ev, gdkkb); -// gdk_event_set_screen(ev, gdk_screen_get_default()); ev->key.window = gtk_widget_get_window(GTK_WIDGET(c->win)); ev->key.state = GDK_CONTROL_MASK; ev->key.time = GDK_CURRENT_TIME; @@ -1535,12 +1566,10 @@ togglecookiepolicy(Client *c, const Arg *a) void toggleinspector(Client *c, const Arg *a) { - if (curconfig[Inspector].val.b) { - if (webkit_web_inspector_is_attached(c->inspector)) - webkit_web_inspector_close(c->inspector); - else - webkit_web_inspector_show(c->inspector); - } + if (webkit_web_inspector_is_attached(c->inspector)) + webkit_web_inspector_close(c->inspector); + else if (curconfig[Inspector].val.b) + webkit_web_inspector_show(c->inspector); } void