On 2012-06-20 02:50, Andy Spencer wrote:
> Maybe I'll look into drawing with gtk3, I think it uses cairo or
> something?

Ok, this one has the drawing code done in cairo. I think that's about
all there is to do. It should work with both gtk2 and gtk3, well,
gtk-2.24 at least.
diff -r f0cea0f2bfc6 config.def.h
--- a/config.def.h      Mon Jun 11 17:16:28 2012 +0200
+++ b/config.def.h      Wed Jun 20 03:26:07 2012 +0000
@@ -24,26 +24,26 @@
 #define MODKEY GDK_CONTROL_MASK
 static Key keys[] = {
     /* modifier                    keyval      function    arg             
Focus */
-    { MODKEY|GDK_SHIFT_MASK,GDK_r,      reload,     { .b = TRUE } },
-    { MODKEY,               GDK_r,      reload,     { .b = FALSE } },
-    { MODKEY|GDK_SHIFT_MASK,GDK_p,      print,      { 0 } },
-    { MODKEY,               GDK_p,      clipboard,  { .b = TRUE } },
-    { MODKEY,               GDK_y,      clipboard,  { .b = FALSE } },
-    { MODKEY|GDK_SHIFT_MASK,GDK_j,      zoom,       { .i = -1 } },
-    { MODKEY|GDK_SHIFT_MASK,GDK_k,      zoom,       { .i = +1 } },
-    { MODKEY|GDK_SHIFT_MASK,GDK_i,      zoom,       { .i = 0  } },
-    { MODKEY,               GDK_l,      navigate,   { .i = +1 } },
-    { MODKEY,               GDK_h,      navigate,   { .i = -1 } },
-    { MODKEY,               GDK_j,           scroll_v,   { .i = +1 } },
-    { MODKEY,               GDK_k,           scroll_v,   { .i = -1 } },
-    { MODKEY,               GDK_b,           scroll_v,   { .i = -10000 } },
-    { MODKEY,               GDK_space,       scroll_v,   { .i = +10000 } },
-    { MODKEY,               GDK_i,           scroll_h,   { .i = +1 } },
-    { MODKEY,               GDK_u,           scroll_h,   { .i = -1 } },
-    { 0,                    GDK_Escape, stop,       { 0 } },
-    { MODKEY,               GDK_o,      source,     { 0 } },
-    { MODKEY,               GDK_g,      spawn,      SETPROP("_SURF_URI", 
"_SURF_GO") },
-    { MODKEY,               GDK_f,      spawn,      SETPROP("_SURF_FIND", 
"_SURF_FIND") },
-    { MODKEY,               GDK_n,      find,       { .b = TRUE } },
-    { MODKEY|GDK_SHIFT_MASK,GDK_n,      find,       { .b = FALSE } },
+    { MODKEY|GDK_SHIFT_MASK,GDK_KEY_r,      reload,     { .b = TRUE } },
+    { MODKEY,               GDK_KEY_r,      reload,     { .b = FALSE } },
+    { MODKEY|GDK_SHIFT_MASK,GDK_KEY_p,      print,      { 0 } },
+    { MODKEY,               GDK_KEY_p,      clipboard,  { .b = TRUE } },
+    { MODKEY,               GDK_KEY_y,      clipboard,  { .b = FALSE } },
+    { MODKEY|GDK_SHIFT_MASK,GDK_KEY_j,      zoom,       { .i = -1 } },
+    { MODKEY|GDK_SHIFT_MASK,GDK_KEY_k,      zoom,       { .i = +1 } },
+    { MODKEY|GDK_SHIFT_MASK,GDK_KEY_i,      zoom,       { .i = 0  } },
+    { MODKEY,               GDK_KEY_l,      navigate,   { .i = +1 } },
+    { MODKEY,               GDK_KEY_h,      navigate,   { .i = -1 } },
+    { MODKEY,               GDK_KEY_j,           scroll_v,   { .i = +1 } },
+    { MODKEY,               GDK_KEY_k,           scroll_v,   { .i = -1 } },
+    { MODKEY,               GDK_KEY_b,           scroll_v,   { .i = -10000 } },
+    { MODKEY,               GDK_KEY_space,       scroll_v,   { .i = +10000 } },
+    { MODKEY,               GDK_KEY_i,           scroll_h,   { .i = +1 } },
+    { MODKEY,               GDK_KEY_u,           scroll_h,   { .i = -1 } },
+    { 0,                    GDK_KEY_Escape, stop,       { 0 } },
+    { MODKEY,               GDK_KEY_o,      source,     { 0 } },
+    { MODKEY,               GDK_KEY_g,      spawn,      SETPROP("_SURF_URI", 
"_SURF_GO") },
+    { MODKEY,               GDK_KEY_f,      spawn,      SETPROP("_SURF_FIND", 
"_SURF_FIND") },
+    { MODKEY,               GDK_KEY_n,      find,       { .b = TRUE } },
+    { MODKEY|GDK_SHIFT_MASK,GDK_KEY_n,      find,       { .b = FALSE } },
 };
diff -r f0cea0f2bfc6 config.mk
--- a/config.mk Mon Jun 11 17:16:28 2012 +0200
+++ b/config.mk Wed Jun 20 03:26:07 2012 +0000
@@ -10,8 +10,8 @@
 X11INC = /usr/X11R6/include
 X11LIB = /usr/X11R6/lib
 
-GTKINC = `pkg-config --cflags gtk+-2.0 webkit-1.0`
-GTKLIB = `pkg-config --libs gtk+-2.0 webkit-1.0`
+GTKINC = `pkg-config --cflags gtk+-3.0 webkitgtk-3.0`
+GTKLIB = `pkg-config --libs gtk+-3.0 webkitgtk-3.0`
 
 # includes and libs
 INCS = -I. -I/usr/include -I${X11INC} ${GTKINC}
diff -r f0cea0f2bfc6 surf.c
--- a/surf.c    Mon Jun 11 17:16:28 2012 +0200
+++ b/surf.c    Wed Jun 20 03:26:07 2012 +0000
@@ -20,6 +20,10 @@
 #include <JavaScriptCore/JavaScript.h>
 #include <sys/file.h>
 
+#if GTK_MAJOR_VERSION == 3
+#include <gtk/gtkx.h>
+#endif
+
 #define LENGTH(x)               (sizeof x / sizeof x[0])
 
 enum { AtomFind, AtomGo, AtomUri, AtomLast };
@@ -58,7 +62,7 @@
 static Display *dpy;
 static Atom atoms[AtomLast];
 static Client *clients = NULL;
-static GdkNativeWindow embed = 0;
+static Window embed = 0;
 static gboolean showxid = FALSE;
 static char winid[64];
 static char *progname;
@@ -95,6 +99,7 @@
 static GdkFilterReturn processx(GdkXEvent *xevent, GdkEvent *event, gpointer 
d);
 static void progresschange(WebKitWebView *view, GParamSpec *pspec, Client *c);
 static void reload(Client *c, const Arg *arg);
+static void resize(GtkWidget *w, GtkAllocation *a, Client *c);
 static void scroll_h(Client *c, const Arg *arg);
 static void scroll_v(Client *c, const Arg *arg);
 static void scroll(GtkAdjustment *a, const Arg *arg);
@@ -255,28 +260,31 @@
 
 void
 drawindicator(Client *c) {
+       double max;
        gint width;
        const char *uri;
+       cairo_t *cr;
        GtkWidget *w;
-       GdkGC *gc;
        GdkColor fg;
+       GtkAllocation alloc;
 
+       max = 0xffff;
        uri = geturi(c);
        w = c->indicator;
-       width = c->progress * w->allocation.width / 100;
-       gc = gdk_gc_new(w->window);
+       gtk_widget_get_allocation(w, &alloc);
+       width = c->progress * alloc.width / 101;
+       cr = gdk_cairo_create(gtk_widget_get_window(w));
        if(strstr(uri, "https://";) == uri)
                gdk_color_parse(c->sslfailed ?
                                progress_untrust : progress_trust, &fg);
        else
                gdk_color_parse(progress, &fg);
-       gdk_gc_set_rgb_fg_color(gc, &fg);
-       gdk_draw_rectangle(w->window,
-                       w->style->bg_gc[GTK_WIDGET_STATE(w)],
-                       TRUE, 0, 0, w->allocation.width, w->allocation.height);
-       gdk_draw_rectangle(w->window, gc, TRUE, 0, 0, width,
-                       w->allocation.height);
-       g_object_unref(gc);
+       cairo_rectangle(cr, 0, 0, alloc.width, alloc.height);
+       cairo_fill(cr);
+       cairo_set_source_rgb(cr, fg.red/max, fg.green/max, fg.blue/max);
+       cairo_rectangle(cr, 0, 0, width, alloc.height);
+       cairo_fill(cr);
+       cairo_destroy(cr);
 }
 
 gboolean
@@ -311,7 +319,7 @@
        unsigned long ldummy;
        unsigned char *p = NULL;
 
-       XGetWindowProperty(dpy, GDK_WINDOW_XID(GTK_WIDGET(c->win)->window),
+       XGetWindowProperty(dpy, 
GDK_WINDOW_XID(gtk_widget_get_window(GTK_WIDGET(c->win))),
                        atoms[a], 0L, BUFSIZ, False, XA_STRING,
                        &adummy, &idummy, &ldummy, &ldummy, &p);
        if(p)
@@ -516,8 +524,8 @@
        gtk_widget_show(GTK_WIDGET(c->view));
        gtk_widget_show(c->win);
        gtk_window_set_geometry_hints(GTK_WINDOW(c->win), NULL, &hints, 
GDK_HINT_MIN_SIZE);
-       gdk_window_set_events(GTK_WIDGET(c->win)->window, GDK_ALL_EVENTS_MASK);
-       gdk_window_add_filter(GTK_WIDGET(c->win)->window, processx, c);
+       gdk_window_set_events(gtk_widget_get_window(GTK_WIDGET(c->win)), 
GDK_ALL_EVENTS_MASK);
+       gdk_window_add_filter(gtk_widget_get_window(GTK_WIDGET(c->win)), 
processx, c);
        webkit_web_view_set_full_content_zoom(c->view, TRUE);
        frame = webkit_web_view_get_main_frame(c->view);
        runscript(frame);
@@ -544,7 +552,7 @@
        clients = c;
        if(showxid) {
                gdk_display_sync(gtk_widget_get_display(c->win));
-               printf("%u\n", 
(guint)GDK_WINDOW_XID(GTK_WIDGET(c->win)->window));
+               printf("%u\n", 
(guint)GDK_WINDOW_XID(gtk_widget_get_window(GTK_WIDGET(c->win))));
                fflush(NULL);
                 if (fclose(stdout) != 0) {
                        die("Error closing stdout");
@@ -697,7 +705,7 @@
 void
 setatom(Client *c, int a, const char *v) {
        XSync(dpy, False);
-       XChangeProperty(dpy, GDK_WINDOW_XID(GTK_WIDGET(c->win)->window), 
atoms[a],
+       XChangeProperty(dpy, 
GDK_WINDOW_XID(gtk_widget_get_window(GTK_WIDGET(c->win))), atoms[a],
                        XA_STRING, 8, PropModeReplace, (unsigned char *)v,
                        strlen(v) + 1);
 }
@@ -715,7 +723,7 @@
        if (!g_thread_supported())
                g_thread_init(NULL);
 
-       dpy = GDK_DISPLAY();
+       dpy = GDK_SCREEN_XDISPLAY(gdk_screen_get_default());
        s = webkit_get_default_session();
 
        /* atoms */
@@ -814,7 +822,7 @@
 void
 updatewinid(Client *c) {
        snprintf(winid, LENGTH(winid), "%u",
-                       (int)GDK_WINDOW_XID(GTK_WIDGET(c->win)->window));
+                       
(int)GDK_WINDOW_XID(gtk_widget_get_window(GTK_WIDGET(c->win))));
 }
 
 void

Reply via email to