Pequeño Browser Ilustrado

A pedido de las masas, aqui les dejo el codigo de un browser realmente minimalista, 88 lineas de C, 20k una vez compilado (linkado dinamico). Luego de compilar, lo ejecutan de la siguiente manera:

./browser http://www.url.com

Aqui les dejo el codigo, tengo problemas con el wordpress, la identacion se perdio en algun lado :(

——————————————————————————————————————————–

#include <gtk/gtk.h>
#include <webkit/webkit.h>

/*gcc -Wall -L /usr/lib -I /usr/include/webkit-1.0/ -g main.c -o main `pkg-config –cflags gtk+-2.0` `pkg-config –libs gtk+-2.0 webkit-1.0`*/

static GtkWidget* main_window;
static WebKitWebView* web_view;
static gchar* main_title;
static gint load_progress;

static void
update_title (GtkWindow* window)
{
GString* string = g_string_new (main_title);
g_string_append (string, ” – WebKit Launcher”);
if (load_progress < 100)
g_string_append_printf (string, ” (%d%%)”, load_progress);
gchar* title = g_string_free (string, FALSE);
gtk_window_set_title (window, title);
g_free (title);
}

static void
title_change_cb (WebKitWebView* web_view, WebKitWebFrame* web_frame, const gchar* title, gpointer data)
{
if (main_title)
g_free (main_title);
main_title = g_strdup (title);
update_title (GTK_WINDOW (main_window));
}

static void
progress_change_cb (WebKitWebView* page, gint progress, gpointer data)
{
load_progress = progress;
update_title (GTK_WINDOW (main_window));
}

static void
destroy_cb (GtkWidget* widget, gpointer data)
{
gtk_main_quit ();
}

static GtkWidget*
create_browser ()
{
GtkWidget* scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

web_view = WEBKIT_WEB_VIEW (webkit_web_view_new ());
gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (web_view));

g_signal_connect (G_OBJECT (web_view), “title-changed”, G_CALLBACK (title_change_cb), web_view);
g_signal_connect (G_OBJECT (web_view), “load-progress-changed”, G_CALLBACK (progress_change_cb), web_view);

return scrolled_window;
}

static GtkWidget*
create_window ()
{
GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
gtk_widget_set_name (window, “GtkLauncher”);
g_signal_connect (G_OBJECT (window), “destroy”, G_CALLBACK (destroy_cb), NULL);

return window;
}

int
main (int argc, char* argv[])
{
gtk_init (&argc, &argv);

main_window = create_window ();
gtk_container_add (GTK_CONTAINER (main_window), create_browser ());

gchar* uri = (gchar*) (argc > 1 ? argv[1] : “http://localhost/sinapsis/main/”);
webkit_web_view_open (web_view, uri);

gtk_widget_grab_focus (GTK_WIDGET (web_view));
gtk_widget_show_all (main_window);
gtk_main ();

return 0;
}

3 Comments »

  1. kork Said:

    se ve interesante. amigo podrias decirme como instalar la libreria webkit ? me gustaria hacer un navegador con ella, estuve intentando instalarla pero no pude, agradeceria si me ayudaras a instalarla en ubuntu.

    saludos, buen blog

  2. kalmbach Said:

    Hasta donde se no existe un paquete preparado para ninguna distribucion, hay que instalar WebKit compilando el ultimo “nightly” build, te los bajas en: http://nightly.webkit.org/ , te bajas las sources.

    Antes de compilar, instalas estas dependencias:

    sudo apt-get install autoconf automake libtool bison flex gperf libicu-dev libxslt-dev libcurl4-openssl-dev libsqlite3-dev libjpeg62-dev libpng12-dev libglibmm-2.4-dev libgtk2.0-dev build-essential libxt-dev gtk-doc-tools libenchant-dev libgail-dev libsoup2.4-dev

    Luego ingresas al directorio donde tenes las fuentes del nightly build de WebKit y haces:
    ./autogen.sh
    make
    make install (este como root)

    finalmente podes probarlo con un programa de ejemplo que viene dentro de las sources de WebKit:

    ./Programs/GtkLauncher

    Saludos!
    PD: por cierto, mude mi blog http://www.kalmbach.com.ar.
    /jk

  3. kork Said:

    perfecto! ya lo pude instalar… compile tu codigo, esta genial…
    estaré visitando tu blog, gracias x ayudarme bro.

    q stes bn !


{ RSS feed for comments on this post} · { TrackBack URI }

Leave a Comment