]> git.armaanb.net Git - chorizo.git/blob - sn.c
Initial draft
[chorizo.git] / sn.c
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 #include <gtk/gtk.h>
5 #include <webkit/webkit.h>
6
7
8 struct sn_gui
9 {
10         GtkWidget *window;
11         GtkWidget *web_view;
12         GtkWidget *scroll;
13 };
14
15 struct sn_app
16 {
17         struct sn_gui gui;
18         double global_zoom;
19 };
20
21 static void sn_create_gui(struct sn_app *app);
22 static void sn_init_defaults(struct sn_app *app);
23 static void sn_title_changed(GObject *obj, GParamSpec *pspec, gpointer app);
24
25
26 void
27 sn_create_gui(struct sn_app *app)
28 {
29         app->gui.window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
30         g_signal_connect(G_OBJECT(app->gui.window), "delete_event",
31                          G_CALLBACK(gtk_main_quit), NULL);
32         g_signal_connect(G_OBJECT(app->gui.window), "destroy",
33                          G_CALLBACK(gtk_main_quit), NULL);
34         gtk_window_set_has_resize_grip(GTK_WINDOW(app->gui.window), FALSE);
35         gtk_window_set_title(GTK_WINDOW(app->gui.window), "sn");
36
37         app->gui.web_view = webkit_web_view_new();
38         webkit_web_view_set_full_content_zoom(WEBKIT_WEB_VIEW(app->gui.web_view),
39                                               TRUE);
40         webkit_web_view_set_zoom_level(WEBKIT_WEB_VIEW(app->gui.web_view),
41                                        app->global_zoom);
42         g_signal_connect(G_OBJECT(app->gui.web_view), "notify::title",
43                          G_CALLBACK(sn_title_changed), app);
44
45         app->gui.scroll = gtk_scrolled_window_new(NULL, NULL);
46
47         gtk_container_add(GTK_CONTAINER(app->gui.scroll), app->gui.web_view);
48         gtk_container_add(GTK_CONTAINER(app->gui.window), app->gui.scroll);
49
50         gtk_widget_show_all(app->gui.window);
51 }
52
53 void
54 sn_init_defaults(struct sn_app *app)
55 {
56         app->global_zoom = 1.0;
57 }
58
59 void
60 sn_title_changed(GObject *obj, GParamSpec *pspec, gpointer data)
61 {
62         const gchar *t;
63         WebKitWebView *view = WEBKIT_WEB_VIEW(obj);
64         struct sn_app *app = data;
65
66         (void)pspec;
67
68         t = webkit_web_view_get_title(view);
69         gtk_window_set_title(GTK_WINDOW(app->gui.window), (t == NULL ? "sn" : t));
70 }
71
72 int
73 main(int argc, char **argv)
74 {
75         int opt;
76         struct sn_app app;
77
78         gtk_init(&argc, &argv);
79         sn_init_defaults(&app);
80
81         while ((opt = getopt(argc, argv, "z:")) != -1)
82         {
83                 switch (opt)
84                 {
85                         case 'z':
86                                 app.global_zoom = atof(optarg);
87                                 break;
88                 }
89         }
90
91         if (optind >= argc)
92         {
93                 fprintf(stderr, "Usage: sn [OPTIONS] <URI>\n");
94                 exit(EXIT_FAILURE);
95         }
96
97         sn_create_gui(&app);
98         webkit_web_view_load_uri(WEBKIT_WEB_VIEW(app.gui.web_view), argv[optind]);
99         gtk_main();
100         exit(EXIT_SUCCESS);
101 }