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