5 #include <webkit/webkit.h>
7 static void sn_destroy_client(GtkWidget *, gpointer);
8 static void sn_new_client(const gchar *uri);
9 static gboolean sn_new_window_request(WebKitWebView *, WebKitWebFrame *,
10 WebKitNetworkRequest *, WebKitWebNavigationAction *,
11 WebKitWebPolicyDecision *, gpointer);
12 static void sn_title_changed(GObject *, GParamSpec *, gpointer);
16 double global_zoom = 1.0;
28 sn_destroy_client(GtkWidget *obj, gpointer data)
30 struct Client *c = (struct Client *)data;
34 webkit_web_view_stop_loading(WEBKIT_WEB_VIEW(c->web_view));
35 gtk_widget_destroy(c->web_view);
36 gtk_widget_destroy(c->scroll);
37 gtk_widget_destroy(c->win);
46 sn_new_client(const gchar *uri)
48 struct Client *c = malloc(sizeof(struct Client));
51 fprintf(stderr, "sn: fatal: malloc failed\n");
55 c->win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
56 g_signal_connect(G_OBJECT(c->win), "destroy", G_CALLBACK(sn_destroy_client),
58 gtk_window_set_has_resize_grip(GTK_WINDOW(c->win), FALSE);
59 gtk_window_set_title(GTK_WINDOW(c->win), "sn");
61 c->web_view = webkit_web_view_new();
62 webkit_web_view_set_full_content_zoom(WEBKIT_WEB_VIEW(c->web_view), TRUE);
63 webkit_web_view_set_zoom_level(WEBKIT_WEB_VIEW(c->web_view), global_zoom);
64 g_signal_connect(G_OBJECT(c->web_view), "notify::title",
65 G_CALLBACK(sn_title_changed), c->win);
66 g_signal_connect(G_OBJECT(c->web_view),
67 "new-window-policy-decision-requested",
68 G_CALLBACK(sn_new_window_request), NULL);
70 c->scroll = gtk_scrolled_window_new(NULL, NULL);
72 gtk_container_add(GTK_CONTAINER(c->scroll), c->web_view);
73 gtk_container_add(GTK_CONTAINER(c->win), c->scroll);
75 gtk_widget_show_all(c->win);
77 webkit_web_view_load_uri(WEBKIT_WEB_VIEW(c->web_view), uri);
83 sn_new_window_request(WebKitWebView *web_view, WebKitWebFrame *frame,
84 WebKitNetworkRequest *request,
85 WebKitWebNavigationAction *navigation_action,
86 WebKitWebPolicyDecision *policy_decision,
91 (void)navigation_action;
94 webkit_web_policy_decision_ignore(policy_decision);
95 sn_new_client(webkit_network_request_get_uri(request));
101 sn_title_changed(GObject *obj, GParamSpec *pspec, gpointer data)
104 WebKitWebView *view = WEBKIT_WEB_VIEW(obj);
105 GtkWindow *win = GTK_WINDOW(data);
109 t = webkit_web_view_get_title(view);
110 gtk_window_set_title(win, (t == NULL ? "sn" : t));
114 main(int argc, char **argv)
118 gtk_init(&argc, &argv);
120 while ((opt = getopt(argc, argv, "z:")) != -1)
125 global_zoom = atof(optarg);
132 fprintf(stderr, "Usage: sn [OPTIONS] <URI>\n");
136 sn_new_client(argv[optind]);