Browse Source

Got it working

master
wes 5 years ago
parent
commit
aa749a15c9
  1. 85
      browser.c
  2. 3
      build.sh
  3. 3
      test.scm

85
browser.c

@ -1,56 +1,83 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <webkit2/webkit2.h> #include <webkit2/webkit2.h>
#include <stdlib.h>
#include <libguile.h>
#include <libguile/strings.h>
static void static void
destroyWindowCb(GtkWidget *widget, GtkWidget *window); destroyWindowCb(GtkWidget *widget, GtkWidget *window);
static static gboolean
gboolean closeWebViewCb(WebKitWebView *webView, GtkWidget *window); closeWebViewCb(WebKitWebView *webView, GtkWidget *window);
static void static void
destroyWindowCb(GtkWidget *widget, GtkWidget *window) { destroyWindowCb(GtkWidget *widget, GtkWidget *window) {
gtk_main_quit(); gtk_main_quit();
} }
static static gboolean
gboolean closeWebViewCb(WebKitWebView *webView, closeWebViewCb(WebKitWebView *webView,
GtkWidget *window) { GtkWidget *window) {
gtk_widget_destroy(window); gtk_widget_destroy(window);
return TRUE; return TRUE;
} }
int main(int argc, char *argv[]) { WebKitWebView *webView;
// Initialize GTK+
gtk_init(&argc, &argv);
// Create an 800x600 window that will contain the browser instance static SCM
GtkWidget *main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); start_browser(void) {
gtk_window_set_default_size(GTK_WINDOW(main_window), 800, 600); /* Initialize GTK+ */
gtk_init(0, NULL);
// Create a browser instance /* Create an 800x600 window that will contain the browser instance */
WebKitWebView *webView = WEBKIT_WEB_VIEW(webkit_web_view_new()); GtkWidget *main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
// Put the browser area into the main window gtk_window_set_default_size(GTK_WINDOW(main_window), 800, 600);
gtk_container_add(GTK_CONTAINER(main_window), GTK_WIDGET(webView));
// Set up callbacks so that if either the main window or the browser instance is /* Create a browser instance */
// closed, the program will exit webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
g_signal_connect(main_window, "destroy", G_CALLBACK(destroyWindowCb), NULL);
g_signal_connect(webView, "close", G_CALLBACK(closeWebViewCb), main_window);
// Load a web page into the browser instance /* Put the browser area into the main window */
webkit_web_view_load_uri(webView, "http://www.webkitgtk.org/"); gtk_container_add(GTK_CONTAINER(main_window), GTK_WIDGET(webView));
// Make sure that when the browser area becomes visible, it will get mouse /* Set up callbacks so that if either the main window or the browser instance is */
// and keyboard events /* closed, the program will exit */
gtk_widget_grab_focus(GTK_WIDGET(webView)); g_signal_connect(main_window, "destroy", G_CALLBACK(destroyWindowCb), NULL);
g_signal_connect(webView, "close", G_CALLBACK(closeWebViewCb), main_window);
// Make sure the main window and all its contents are visible /* Load a web page into the browser instance */
gtk_widget_show_all(main_window); webkit_web_view_load_uri(webView, "http://google.com/");
// Run the main GTK+ event loop /* Make sure that when the browser area becomes visible, it will get mouse */
gtk_main(); /* and keyboard events */
gtk_widget_grab_focus(GTK_WIDGET(webView));
return 0; /* Make sure the main window and all its contents are visible */
gtk_widget_show_all(main_window);
/* Run the main GTK+ event loop */
gtk_main();
return SCM_BOOL_T;
}
static SCM
open_page(SCM mystring) {
char *c_string = scm_to_locale_string(mystring);
printf("Opening %s\n", c_string);
webkit_web_view_load_uri(webView, c_string);
return SCM_BOOL_T;
} }
static void
inner_main(void *data, int argc, char **argv) {
scm_c_define_gsubr("start-browser", 0, 0, 0, start_browser);
scm_c_define_gsubr("open-page", 1, 0, 0, open_page);
scm_shell(argc, argv);
}
int main(int argc, char *argv[]) {
/* Initialize Guile */
scm_boot_guile(argc, argv, inner_main, 0);
return 0;
}

3
build.sh

@ -1 +1,2 @@
gcc $(pkg-config --cflags --libs gtk+-3.0 webkit2gtk-4.0) browser.c #! /usr/bin/bash
gcc $(pkg-config --cflags --libs guile-2.2 gtk+-3.0 webkit2gtk-4.0) browser.c

3
test.scm

@ -0,0 +1,3 @@
(use-modules (ice-9 threads))
(call-with-new-thread (lambda () (start-browser)))
Loading…
Cancel
Save