Fixed the GtkMozEmbed-based widget

This commit is contained in:
Pierre Pronchery 2010-06-21 23:34:05 +00:00
parent dd4aa97de5
commit 93fab0fb53
3 changed files with 42 additions and 10 deletions

View File

@ -17,15 +17,24 @@
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
#include <gtkmozembed.h> #include <gtkmozembed.h>
#include <mozilla-config.h>
#include "callbacks.h" #include "callbacks.h"
#include "ghtml.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 */ /* prototypes */
/* private */ /* private */
/* callbacks */ /* callbacks */
static void _on_js_status(GtkMozEmbed * view, gpointer data);
static void _on_link_message(GtkMozEmbed * view, gpointer data); static void _on_link_message(GtkMozEmbed * view, gpointer data);
static void _on_location(GtkMozEmbed * view, gpointer data); static void _on_location(GtkMozEmbed * view, gpointer data);
static void _on_net_start(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 */ /* functions */
/* private */ /* private */
/* callbacks */ /* 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) static void _on_link_message(GtkMozEmbed * view, gpointer data)
{ {
Surfer * surfer = data; Surfer * surfer = data;
@ -71,12 +93,16 @@ static void _on_net_start(GtkMozEmbed * view, gpointer data)
{ {
Surfer * surfer = data; Surfer * surfer = data;
#if 0
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_back), gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_back),
ghtml_can_go_back(GTK_WIDGET(view))); ghtml_can_go_back(GTK_WIDGET(view)));
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_forward), gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_forward),
ghtml_can_go_forward(GTK_WIDGET(view))); 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_refresh), TRUE);
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_stop), 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; Surfer * surfer = data;
#if 0
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_back), gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_back),
ghtml_can_go_back(GTK_WIDGET(view))); ghtml_can_go_back(GTK_WIDGET(view)));
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_forward), gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_forward),
ghtml_can_go_forward(GTK_WIDGET(view))); ghtml_can_go_forward(GTK_WIDGET(view)));
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_stop), FALSE); 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); 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) if((mask & GTK_MOZ_EMBED_FLAG_WINDOWRESIZEON)
!= GTK_MOZ_EMBED_FLAG_WINDOWRESIZEON) != GTK_MOZ_EMBED_FLAG_WINDOWRESIZEON)
gtk_window_set_resizable(GTK_WINDOW(window), FALSE); gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
#if 0 /* FIXME disabled for now */
if((mask & GTK_MOZ_EMBED_FLAG_MODAL) if((mask & GTK_MOZ_EMBED_FLAG_MODAL)
== GTK_MOZ_EMBED_FLAG_MODAL) == GTK_MOZ_EMBED_FLAG_MODAL)
gtk_window_set_transient_for(GTK_WINDOW(window), gtk_window_set_transient_for(GTK_WINDOW(window),
GTK_WINDOW(surfer->window)); GTK_WINDOW(surfer->window));
#endif
vbox = gtk_vbox_new(FALSE, 0); vbox = gtk_vbox_new(FALSE, 0);
if((mask & GTK_MOZ_EMBED_FLAG_MENUBARON) if((mask & GTK_MOZ_EMBED_FLAG_MENUBARON)
!= GTK_MOZ_EMBED_FLAG_MENUBARON) != GTK_MOZ_EMBED_FLAG_MENUBARON)
@ -225,13 +257,15 @@ GtkWidget * ghtml_new(Surfer * surfer)
if(init == 0) 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) if((buf = _new_get_prefs_directory()) != NULL)
gtk_moz_embed_set_profile_path(buf, "gecko"); gtk_moz_embed_set_profile_path(buf, "gecko");
init = 1; init = 1;
} }
ghtml = gtk_moz_embed_new(); ghtml = gtk_moz_embed_new();
/* FIXME handle callbacks in a common way */ /* 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( g_signal_connect(G_OBJECT(ghtml), "link_message", G_CALLBACK(
_on_link_message), surfer); _on_link_message), surfer);
g_signal_connect(G_OBJECT(ghtml), "location", G_CALLBACK(_on_location), g_signal_connect(G_OBJECT(ghtml), "location", G_CALLBACK(_on_location),

View File

@ -35,12 +35,6 @@ static char const _license[] =
/* Surfer */ /* Surfer */
/* private */ /* private */
/* types */ /* types */
typedef struct _SurferIdle
{
Surfer * surfer;
char * url;
} SurferIdle;
typedef enum _SurferConsoleMessage typedef enum _SurferConsoleMessage
{ {
SCM_MESSAGE = 0, SCM_SOURCE, SCM_LINE, SCM_DISPLAY_LINE 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_LAST SCM_DISPLAY_LINE
#define SCM_COUNT (SCM_LAST + 1) #define SCM_COUNT (SCM_LAST + 1)
typedef struct _SurferIdle
{
Surfer * surfer;
char * url;
} SurferIdle;
/* constants */ /* constants */
static char const * _authors[] = static char const * _authors[] =

View File

@ -38,8 +38,6 @@
# define SURFER_DEFAULT_FANTASY_FONT "Comic Sans MS" # define SURFER_DEFAULT_FANTASY_FONT "Comic Sans MS"
# define SURFER_DEFAULT_TITLE "Web surfer" # define SURFER_DEFAULT_TITLE "Web surfer"
# define SURFER_GTKMOZEMBED_COMPPATH "/usr/pkg/lib/firefox"
/* types */ /* types */
typedef struct _Surfer Surfer; typedef struct _Surfer Surfer;