From 93fab0fb53adbac93aa15578ec0411bad92f2be0 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Mon, 21 Jun 2010 23:34:05 +0000 Subject: [PATCH] Fixed the GtkMozEmbed-based widget --- src/ghtml-gtkmozembed.c | 38 ++++++++++++++++++++++++++++++++++++-- src/surfer.c | 12 ++++++------ src/surfer.h | 2 -- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/ghtml-gtkmozembed.c b/src/ghtml-gtkmozembed.c index 1af3929..8c54b63 100644 --- a/src/ghtml-gtkmozembed.c +++ b/src/ghtml-gtkmozembed.c @@ -17,15 +17,24 @@ #include #include +#include #include +#include #include "callbacks.h" #include "ghtml.h" -#include "common.h" /* XXX should not be needed */ +#include "../config.h" + + +/* constants */ +#define xstr(s) str(s) +#define str(s) # s +#define SURFER_GTKMOZEMBED_COMPPATH PREFIX "/lib/" xstr(MOZ_BUILD_APP) /* prototypes */ /* private */ /* callbacks */ +static void _on_js_status(GtkMozEmbed * view, gpointer data); static void _on_link_message(GtkMozEmbed * view, gpointer data); static void _on_location(GtkMozEmbed * view, gpointer data); static void _on_net_start(GtkMozEmbed * view, gpointer data); @@ -47,6 +56,19 @@ static void _on_popup_title(GtkMozEmbed * view, gpointer data); /* functions */ /* private */ /* callbacks */ +static void _on_js_status(GtkMozEmbed * view, gpointer data) +{ + Surfer * surfer = data; + char * str; + + if((str = gtk_moz_embed_get_js_status(view)) == NULL) + return; + if(strlen(str) > 0) + surfer_console_message(surfer, str, NULL, -1); + free(str); +} + + static void _on_link_message(GtkMozEmbed * view, gpointer data) { Surfer * surfer = data; @@ -71,12 +93,16 @@ static void _on_net_start(GtkMozEmbed * view, gpointer data) { Surfer * surfer = data; +#if 0 gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_back), ghtml_can_go_back(GTK_WIDGET(view))); gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_forward), ghtml_can_go_forward(GTK_WIDGET(view))); gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_refresh), TRUE); gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_stop), TRUE); +#else /* XXX hack, partially functional */ + _on_location(view, surfer); +#endif } @@ -84,11 +110,15 @@ static void _on_net_stop(GtkMozEmbed * view, gpointer data) { Surfer * surfer = data; +#if 0 gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_back), ghtml_can_go_back(GTK_WIDGET(view))); gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_forward), ghtml_can_go_forward(GTK_WIDGET(view))); gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_stop), FALSE); +#else /* XXX hack, partially functional */ + _on_location(view, surfer); +#endif surfer_set_status(surfer, NULL); } @@ -108,10 +138,12 @@ static void _on_new_window(GtkMozEmbed * view, GtkMozEmbed ** ret, guint mask, if((mask & GTK_MOZ_EMBED_FLAG_WINDOWRESIZEON) != GTK_MOZ_EMBED_FLAG_WINDOWRESIZEON) gtk_window_set_resizable(GTK_WINDOW(window), FALSE); +#if 0 /* FIXME disabled for now */ if((mask & GTK_MOZ_EMBED_FLAG_MODAL) == GTK_MOZ_EMBED_FLAG_MODAL) gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(surfer->window)); +#endif vbox = gtk_vbox_new(FALSE, 0); if((mask & GTK_MOZ_EMBED_FLAG_MENUBARON) != GTK_MOZ_EMBED_FLAG_MENUBARON) @@ -225,13 +257,15 @@ GtkWidget * ghtml_new(Surfer * surfer) if(init == 0) { - gtk_moz_embed_set_comp_path(SURFER_GTKMOZEMBED_COMPPATH); + gtk_moz_embed_set_path(SURFER_GTKMOZEMBED_COMPPATH); if((buf = _new_get_prefs_directory()) != NULL) gtk_moz_embed_set_profile_path(buf, "gecko"); init = 1; } ghtml = gtk_moz_embed_new(); /* FIXME handle callbacks in a common way */ + g_signal_connect(G_OBJECT(ghtml), "js_status", G_CALLBACK( + _on_js_status), surfer); g_signal_connect(G_OBJECT(ghtml), "link_message", G_CALLBACK( _on_link_message), surfer); g_signal_connect(G_OBJECT(ghtml), "location", G_CALLBACK(_on_location), diff --git a/src/surfer.c b/src/surfer.c index fd78eec..daa7e91 100644 --- a/src/surfer.c +++ b/src/surfer.c @@ -35,12 +35,6 @@ static char const _license[] = /* Surfer */ /* private */ /* types */ -typedef struct _SurferIdle -{ - Surfer * surfer; - char * url; -} SurferIdle; - typedef enum _SurferConsoleMessage { SCM_MESSAGE = 0, SCM_SOURCE, SCM_LINE, SCM_DISPLAY_LINE @@ -48,6 +42,12 @@ typedef enum _SurferConsoleMessage #define SCM_LAST SCM_DISPLAY_LINE #define SCM_COUNT (SCM_LAST + 1) +typedef struct _SurferIdle +{ + Surfer * surfer; + char * url; +} SurferIdle; + /* constants */ static char const * _authors[] = diff --git a/src/surfer.h b/src/surfer.h index 4defb42..c6d7c3a 100644 --- a/src/surfer.h +++ b/src/surfer.h @@ -38,8 +38,6 @@ # define SURFER_DEFAULT_FANTASY_FONT "Comic Sans MS" # define SURFER_DEFAULT_TITLE "Web surfer" -# define SURFER_GTKMOZEMBED_COMPPATH "/usr/pkg/lib/firefox" - /* types */ typedef struct _Surfer Surfer;