Introduction
Introduction Statistics Contact Development Disclaimer Help
tAdding search and urlbar. switching to getopt. - surf - customized build of su…
git clone git://src.adamsgaard.dk/surf
Log
Files
Refs
README
LICENSE
---
commit 37deb47b84ba1382fe8b217f6c08935e6c59a7cb
parent 0e956be80f0717d4b298ceb275172e0ae722730c
Author: Enno Boland (Gottox) <[email protected]>
Date: Sat, 6 Jun 2009 16:30:11 +0200
Adding search and urlbar. switching to getopt.
Diffstat:
M surf.c | 155 ++++++++++++++++++++---------…
1 file changed, 99 insertions(+), 56 deletions(-)
---
diff --git a/surf.c b/surf.c
t@@ -10,28 +10,17 @@
#include <gdk/gdkkeysyms.h>
#include <string.h>
#include <unistd.h>
+#include <getopt.h>
#include <stdlib.h>
#include <stdio.h>
#include <webkit/webkit.h>
#define LENGTH(x) (sizeof x / sizeof x[0])
-/* Plan9-style Argument parsing */
-/* Vars: _c -> count; _b -> break; _a -> argument */
-#define ARG int _c, _b; char *_a; \
- for(_c = 1; _c < argc && argv[_c][0] == '-' && argv[_c][1] && \
- (strcmp(argv[_c], "--") != 0); _c++) \
- for(_a = &argv[_c][1], _b = 0; !_b && *_a; _a++ ) \
- switch(*_a)
-#define ARGVAL() (!_b && _a[1] && (_b = 1) ? &_a[1] : _c + 1 == argc ? \
- 0 : argv[++_c])
-#define ARGCHR() (*_a)
-#define ARGC() _c
Display *dpy;
Atom urlprop;
typedef struct Client {
- GtkWidget *win;
- GtkWidget *browser;
+ GtkWidget *win, *scroll, *vbox, *urlbar, *urllist, *searchbar;
WebKitWebView *view;
gchar *title;
gint progress;
t@@ -41,6 +30,8 @@ Client *clients = NULL;
gboolean embed = FALSE;
gboolean showxid = FALSE;
gboolean ignore_once = FALSE;
+extern char *optarg;
+extern int optind;
static Client *newclient();
static void die(char *str);
t@@ -116,7 +107,8 @@ loadfile(const Client *c, const gchar *f) {
}
-static void loaduri(const Client *c, const gchar *uri) {
+void
+loaduri(const Client *c, const gchar *uri) {
GString* u = g_string_new(uri);
if(g_strrstr(u->str, ":") == NULL)
g_string_prepend(u, "http://");
t@@ -134,11 +126,13 @@ gboolean
newwindow(WebKitWebView *view, WebKitWebFrame *f,
WebKitNetworkRequest *r, WebKitWebNavigationAction *n,
WebKitWebPolicyDecision *p, gpointer d) {
+ /* TODO */
puts("new");
Client *c = newclient();
webkit_web_view_load_request(c->view, r);
return TRUE;
}
+
void
linkhover(WebKitWebView* page, const gchar* t, const gchar* l, gpointer d) {
Client *c = (Client *)d;
t@@ -200,7 +194,13 @@ destroywin(GtkWidget* w, gpointer d) {
void
destroyclient(Client *c) {
Client *p;
+
gtk_widget_destroy(c->win);
+ gtk_widget_destroy(c->scroll);
+ gtk_widget_destroy(c->vbox);
+ gtk_widget_destroy(c->urlbar);
+ gtk_widget_destroy(c->urllist);
+ gtk_widget_destroy(c->searchbar);
if(clients == c && c->next == NULL)
gtk_main_quit();
for(p = clients; p && p->next != c; p = p->next);
t@@ -225,11 +225,15 @@ keypress(GtkWidget* w, GdkEventKey *ev, gpointer d) {
else
webkit_web_view_reload(c->view);
return TRUE;
+ case GDK_b:
+ return TRUE;
case GDK_g:
- /* TODO */
+ gtk_widget_hide(c->searchbar);
+ gtk_widget_show(c->urlbar);
return TRUE;
case GDK_slash:
- /* TODO */
+ gtk_widget_hide(c->urlbar);
+ gtk_widget_show(c->searchbar);
return TRUE;
case GDK_Left:
webkit_web_view_go_back(c->view);
t@@ -239,6 +243,11 @@ keypress(GtkWidget* w, GdkEventKey *ev, gpointer d) {
return TRUE;
}
}
+ else if(ev->type == GDK_KEY_PRESS && ev->keyval == GDK_Escape) {
+ gtk_widget_hide(c->urlbar);
+ gtk_widget_hide(c->searchbar);
+ return TRUE;
+ }
return FALSE;
}
t@@ -257,6 +266,7 @@ newclient(void) {
Client *c;
if(!(c = calloc(1, sizeof(Client))))
die("Cannot malloc!\n");
+ /* Window */
if(embed) {
c->win = gtk_plug_new(0);
}
t@@ -265,14 +275,19 @@ newclient(void) {
gtk_window_set_wmclass(GTK_WINDOW(c->win), "surf", "surf");
}
gtk_window_set_default_size(GTK_WINDOW(c->win), 800, 600);
- c->browser = gtk_scrolled_window_new(NULL, NULL);
- g_signal_connect (G_OBJECT(c->win), "destroy", G_CALLBACK(destroywin),…
- g_signal_connect (G_OBJECT(c->win), "key-press-event", G_CALLBACK(keyp…
+ g_signal_connect(G_OBJECT(c->win), "destroy", G_CALLBACK(destroywin), …
+ g_signal_connect(G_OBJECT(c->win), "key-press-event", G_CALLBACK(keypr…
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(c->browser),
+ /* VBox */
+ c->vbox = gtk_vbox_new(FALSE, 0);
+
+ /* scrolled window */
+ c->scroll = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(c->scroll),
GTK_POLICY_NEVER, GTK_POLICY_NEVER);
+
+ /* webview */
c->view = WEBKIT_WEB_VIEW(webkit_web_view_new());
- gtk_container_add(GTK_CONTAINER(c->browser), GTK_WIDGET(c->view));
g_signal_connect(G_OBJECT(c->view), "title-changed", G_CALLBACK(titlec…
g_signal_connect(G_OBJECT(c->view), "load-progress-changed", G_CALLBAC…
t@@ -281,55 +296,83 @@ newclient(void) {
g_signal_connect(G_OBJECT(c->view), "new-window-policy-decision-reques…
g_signal_connect(G_OBJECT(c->view), "download-requested", G_CALLBACK(d…
- gtk_container_add(GTK_CONTAINER(c->win), c->browser);
+ /* urlbar */
+ c->urlbar = gtk_entry_new();
+ gtk_entry_set_has_frame(GTK_ENTRY(c->urlbar), FALSE);
+
+ /* searchbar */
+ c->searchbar = gtk_entry_new();
+ gtk_entry_set_has_frame(GTK_ENTRY(c->searchbar), FALSE);
+
+ /* Arranging */
+ gtk_container_add(GTK_CONTAINER(c->scroll), GTK_WIDGET(c->view));
+ gtk_container_add(GTK_CONTAINER(c->vbox), c->scroll);
+ gtk_container_add(GTK_CONTAINER(c->win), c->vbox);
+ gtk_container_add(GTK_CONTAINER(c->vbox), c->searchbar);
+ gtk_container_add(GTK_CONTAINER(c->vbox), c->urlbar);
+
+ /* Setup */
+ gtk_box_set_child_packing(GTK_BOX(c->vbox), c->urlbar, FALSE, FALSE, 0…
+ gtk_box_set_child_packing(GTK_BOX(c->vbox), c->searchbar, FALSE, FALSE…
+ gtk_box_set_child_packing(GTK_BOX(c->vbox), c->scroll, TRUE, TRUE, 0, …
gtk_widget_grab_focus(GTK_WIDGET(c->view));
- gtk_widget_show_all(c->win);
- if(showxid)
- printf("%u\n", (unsigned int)GDK_WINDOW_XID(GTK_WIDGET(c->win)…
- c->next = clients;
- clients = c;
+ gtk_widget_hide_all(c->searchbar);
+ gtk_widget_hide_all(c->urlbar);
+ gtk_widget_show(c->vbox);
+ gtk_widget_show(c->scroll);
+ gtk_widget_show(GTK_WIDGET(c->view));
+ gtk_widget_show(c->win);
gdk_window_set_events(GTK_WIDGET(c->win)->window, GDK_ALL_EVENTS_MASK);
gdk_window_add_filter(GTK_WIDGET(c->win)->window, processx, c);
+ c->next = clients;
+ clients = c;
+ if(showxid)
+ printf("%u\n", (unsigned int)GDK_WINDOW_XID(GTK_WIDGET(c->win)…
return c;
}
int main(int argc, char *argv[]) {
gchar *uri = NULL, *file = NULL;
Client *c;
+ int o;
gtk_init(NULL, NULL);
if (!g_thread_supported())
g_thread_init(NULL);
setup();
- ARG {
- case 'x':
- showxid = TRUE;
- break;
- case 'e':
- showxid = TRUE;
- embed = TRUE;
- break;
- case 'u':
- if(!(uri = ARGVAL()))
- goto argerr;
- c = newclient();
- loaduri(c, uri);
- updatetitle(c);
- break;
- case 'f':
- if(!(file = ARGVAL()))
- goto argerr;
- c = newclient();
- loadfile(c, file);
- updatetitle(c);
- break;
- argerr:
- default:
- puts("surf - simple browser");
- printf("usage: %s [-e] [-x] [-u uri] [-f file]\n", argv[0]);
- return EXIT_FAILURE;
- }
- if(argc != ARGC())
+ while((o = getopt(argc, argv, "vhxeu:f:")) != -1)
+ switch(o) {
+ case 'x':
+ showxid = TRUE;
+ break;
+ case 'e':
+ showxid = TRUE;
+ embed = TRUE;
+ break;
+ case 'u':
+ if(!(uri = optarg))
+ goto argerr;
+ c = newclient();
+ loaduri(c, uri);
+ updatetitle(c);
+ break;
+ case 'f':
+ if(!(file = optarg))
+ goto argerr;
+ c = newclient();
+ loadfile(c, file);
+ updatetitle(c);
+ break;
+ case 'v':
+ die("surf-"VERSION", © 2009 surf engineers, see LICEN…
+ break;
+ argerr:
+ default:
+ puts("surf - simple browser");
+ die("usage: surf [-e] [-x] [-u uri] [-f file]\n");
+ return EXIT_FAILURE;
+ }
+ if(optind != argc)
goto argerr;
if(!clients)
newclient();
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.