3 changed files with 61 additions and 30 deletions
@ -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; |
||||
|
} |
||||
|
@ -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 |
||||
|
@ -0,0 +1,3 @@ |
|||||
|
(use-modules (ice-9 threads)) |
||||
|
|
||||
|
(call-with-new-thread (lambda () (start-browser))) |
Loading…
Reference in new issue