Preparing support for different HTML viewers
This commit is contained in:
parent
9ca21bcba4
commit
351549fe71
@ -403,9 +403,9 @@ void on_view_location(GtkMozEmbed * view, gpointer data)
|
||||
i++;
|
||||
gtk_combo_box_append_text(GTK_COMBO_BOX(surfer->tb_path), url);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_back),
|
||||
gtk_moz_embed_can_go_back(view));
|
||||
ghtml_can_go_back(GTK_WIDGET(view)));
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_forward),
|
||||
gtk_moz_embed_can_go_forward(view));
|
||||
ghtml_can_go_forward(GTK_WIDGET(view)));
|
||||
}
|
||||
|
||||
|
||||
@ -414,9 +414,9 @@ void on_view_net_start(GtkMozEmbed * view, gpointer data)
|
||||
Surfer * surfer = data;
|
||||
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_back),
|
||||
gtk_moz_embed_can_go_back(view));
|
||||
ghtml_can_go_back(GTK_WIDGET(view)));
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_forward),
|
||||
gtk_moz_embed_can_go_forward(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_stop), TRUE);
|
||||
}
|
||||
@ -427,9 +427,9 @@ void on_view_net_stop(GtkMozEmbed * view, gpointer data)
|
||||
Surfer * surfer = data;
|
||||
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_back),
|
||||
gtk_moz_embed_can_go_back(view));
|
||||
ghtml_can_go_back(GTK_WIDGET(view)));
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_forward),
|
||||
gtk_moz_embed_can_go_forward(view));
|
||||
ghtml_can_go_forward(GTK_WIDGET(view)));
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_stop), FALSE);
|
||||
if(surfer->statusbar_id)
|
||||
gtk_statusbar_remove(GTK_STATUSBAR(surfer->statusbar),
|
||||
@ -443,82 +443,6 @@ void on_view_net_stop(GtkMozEmbed * view, gpointer data)
|
||||
}
|
||||
|
||||
|
||||
/* on_view_new_window */
|
||||
static void _on_popup_destroy_browser(GtkMozEmbed * view, gpointer data);
|
||||
static void _on_popup_resize(GtkMozEmbed * view, gint width, gint height,
|
||||
gpointer data);
|
||||
static void _on_popup_title(GtkMozEmbed * view, gpointer data);
|
||||
void on_view_new_window(GtkMozEmbed * view, GtkMozEmbed ** ret, guint mask,
|
||||
gpointer data)
|
||||
{
|
||||
Surfer * surfer = data;
|
||||
GtkWidget * window;
|
||||
GtkWidget * vbox;
|
||||
GtkWidget * newview;
|
||||
|
||||
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
|
||||
gtk_window_set_title(GTK_WINDOW(window), SURFER_DEFAULT_TITLE);
|
||||
if((mask & GTK_MOZ_EMBED_FLAG_WINDOWRESIZEON)
|
||||
!= GTK_MOZ_EMBED_FLAG_WINDOWRESIZEON)
|
||||
gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
|
||||
if((mask & GTK_MOZ_EMBED_FLAG_MODAL)
|
||||
== GTK_MOZ_EMBED_FLAG_MODAL)
|
||||
gtk_window_set_transient_for(GTK_WINDOW(window),
|
||||
GTK_WINDOW(surfer->window));
|
||||
vbox = gtk_vbox_new(FALSE, 0);
|
||||
if((mask & GTK_MOZ_EMBED_FLAG_MENUBARON)
|
||||
== GTK_MOZ_EMBED_FLAG_MENUBARON)
|
||||
{
|
||||
/* FIXME implement */
|
||||
}
|
||||
newview = gtk_moz_embed_new();
|
||||
g_signal_connect(G_OBJECT(newview), "destroy_browser", G_CALLBACK(
|
||||
_on_popup_destroy_browser), window);
|
||||
g_signal_connect(G_OBJECT(surfer->view), "size_to", G_CALLBACK(
|
||||
_on_popup_resize), window);
|
||||
g_signal_connect(G_OBJECT(newview), "title", G_CALLBACK(
|
||||
_on_popup_title), window);
|
||||
/* FIXME other settings and callbacks */
|
||||
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(newview), TRUE, TRUE, 0);
|
||||
gtk_container_add(GTK_CONTAINER(window), vbox);
|
||||
gtk_widget_show_all(window);
|
||||
*ret = GTK_MOZ_EMBED(newview);
|
||||
}
|
||||
|
||||
static void _on_popup_destroy_browser(GtkMozEmbed * view, gpointer data)
|
||||
{
|
||||
GtkWidget * window = data;
|
||||
|
||||
gtk_widget_destroy(window);
|
||||
}
|
||||
|
||||
static void _on_popup_resize(GtkMozEmbed * view, gint width, gint height,
|
||||
gpointer data)
|
||||
{
|
||||
GtkWindow * window = data;
|
||||
|
||||
gtk_window_resize(window, width, height);
|
||||
}
|
||||
|
||||
static void _on_popup_title(GtkMozEmbed * view, gpointer data)
|
||||
{
|
||||
GtkWindow * window = data;
|
||||
char const * title;
|
||||
char buf[256];
|
||||
|
||||
title = ghtml_get_title(GTK_WIDGET(view));
|
||||
if(title == NULL || title[0] == '\0')
|
||||
gtk_window_set_title(window, SURFER_DEFAULT_TITLE);
|
||||
else
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%s - %s", SURFER_DEFAULT_TITLE,
|
||||
title);
|
||||
gtk_window_set_title(window, buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void on_view_progress(GtkMozEmbed * view, gint cur, gint max, gpointer data)
|
||||
{
|
||||
Surfer * surfer = data;
|
||||
|
@ -19,14 +19,104 @@
|
||||
#include <stdio.h>
|
||||
#include <gtkmozembed.h>
|
||||
#include "callbacks.h"
|
||||
#include "surfer.h"
|
||||
#include "ghtml.h"
|
||||
|
||||
|
||||
/* prototypes */
|
||||
/* private */
|
||||
/* callbacks */
|
||||
static void _on_new_window(GtkMozEmbed * view, GtkMozEmbed ** ret, guint mask,
|
||||
gpointer data);
|
||||
static void _on_popup_destroy_browser(GtkMozEmbed * view, gpointer data);
|
||||
static void _on_popup_resize(GtkMozEmbed * view, gint width, gint height,
|
||||
gpointer data);
|
||||
static void _on_popup_title(GtkMozEmbed * view, gpointer data);
|
||||
|
||||
|
||||
/* functions */
|
||||
/* private */
|
||||
/* callbacks */
|
||||
static void _on_new_window(GtkMozEmbed * view, GtkMozEmbed ** ret, guint mask,
|
||||
gpointer data)
|
||||
{
|
||||
Surfer * surfer = data;
|
||||
GtkWidget * window;
|
||||
GtkWidget * vbox;
|
||||
GtkWidget * newview;
|
||||
|
||||
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
|
||||
gtk_window_set_title(GTK_WINDOW(window), SURFER_DEFAULT_TITLE);
|
||||
if((mask & GTK_MOZ_EMBED_FLAG_WINDOWRESIZEON)
|
||||
!= GTK_MOZ_EMBED_FLAG_WINDOWRESIZEON)
|
||||
gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
|
||||
if((mask & GTK_MOZ_EMBED_FLAG_MODAL)
|
||||
== GTK_MOZ_EMBED_FLAG_MODAL)
|
||||
gtk_window_set_transient_for(GTK_WINDOW(window),
|
||||
GTK_WINDOW(surfer->window));
|
||||
vbox = gtk_vbox_new(FALSE, 0);
|
||||
if((mask & GTK_MOZ_EMBED_FLAG_MENUBARON)
|
||||
== GTK_MOZ_EMBED_FLAG_MENUBARON)
|
||||
{
|
||||
/* FIXME implement */
|
||||
}
|
||||
newview = gtk_moz_embed_new();
|
||||
/* XXX handle more callbacks? */
|
||||
g_signal_connect(G_OBJECT(newview), "destroy_browser", G_CALLBACK(
|
||||
_on_popup_destroy_browser), window);
|
||||
g_signal_connect(G_OBJECT(newview), "size_to", G_CALLBACK(
|
||||
_on_popup_resize), window);
|
||||
g_signal_connect(G_OBJECT(newview), "title", G_CALLBACK(
|
||||
_on_popup_title), window);
|
||||
/* FIXME other settings and callbacks */
|
||||
gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(newview), TRUE, TRUE, 0);
|
||||
gtk_container_add(GTK_CONTAINER(window), vbox);
|
||||
gtk_widget_show_all(window);
|
||||
*ret = GTK_MOZ_EMBED(newview);
|
||||
}
|
||||
|
||||
|
||||
static void _on_popup_destroy_browser(GtkMozEmbed * view, gpointer data)
|
||||
{
|
||||
GtkWidget * window = data;
|
||||
|
||||
gtk_widget_destroy(window);
|
||||
}
|
||||
|
||||
|
||||
static void _on_popup_resize(GtkMozEmbed * view, gint width, gint height,
|
||||
gpointer data)
|
||||
{
|
||||
GtkWindow * window = data;
|
||||
|
||||
/* FIXME probably should resize the widget itself instead */
|
||||
gtk_window_resize(window, width, height);
|
||||
}
|
||||
|
||||
|
||||
static void _on_popup_title(GtkMozEmbed * view, gpointer data)
|
||||
{
|
||||
GtkWindow * window = data;
|
||||
char const * title;
|
||||
char buf[256];
|
||||
|
||||
title = ghtml_get_title(GTK_WIDGET(view));
|
||||
if(title == NULL || title[0] == '\0')
|
||||
gtk_window_set_title(window, SURFER_DEFAULT_TITLE);
|
||||
else
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%s - %s", SURFER_DEFAULT_TITLE,
|
||||
title);
|
||||
gtk_window_set_title(window, buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* public */
|
||||
/* ghtml_new */
|
||||
static char const * _new_get_prefs_directory(void);
|
||||
|
||||
GtkWidget * ghtml_new(void * data)
|
||||
GtkWidget * ghtml_new(Surfer * surfer)
|
||||
{
|
||||
static int init = 0;
|
||||
GtkWidget * ghtml;
|
||||
@ -42,41 +132,58 @@ GtkWidget * ghtml_new(void * data)
|
||||
ghtml = gtk_moz_embed_new();
|
||||
/* FIXME handle callbacks in a common way */
|
||||
g_signal_connect(G_OBJECT(ghtml), "link_message", G_CALLBACK(
|
||||
on_view_link_message), data);
|
||||
on_view_link_message), surfer);
|
||||
g_signal_connect(G_OBJECT(ghtml), "location", G_CALLBACK(
|
||||
on_view_location), data);
|
||||
on_view_location), surfer);
|
||||
g_signal_connect(G_OBJECT(ghtml), "net_start", G_CALLBACK(
|
||||
on_view_net_start), data);
|
||||
on_view_net_start), surfer);
|
||||
g_signal_connect(G_OBJECT(ghtml), "net_stop", G_CALLBACK(
|
||||
on_view_net_stop), data);
|
||||
on_view_net_stop), surfer);
|
||||
g_signal_connect(G_OBJECT(ghtml), "new_window", G_CALLBACK(
|
||||
on_view_new_window), data);
|
||||
_on_new_window), surfer);
|
||||
g_signal_connect(G_OBJECT(ghtml), "progress", G_CALLBACK(
|
||||
on_view_progress), data);
|
||||
on_view_progress), surfer);
|
||||
g_signal_connect(G_OBJECT(ghtml), "size_to", G_CALLBACK(on_view_resize),
|
||||
data);
|
||||
surfer);
|
||||
g_signal_connect(G_OBJECT(ghtml), "title", G_CALLBACK(on_view_title),
|
||||
data);
|
||||
surfer);
|
||||
return ghtml;
|
||||
}
|
||||
|
||||
static char const * _new_get_prefs_directory(void)
|
||||
{
|
||||
static char buf[256] = "";
|
||||
static int buf_size = sizeof(buf);
|
||||
char * home;
|
||||
static char * home = NULL;
|
||||
static char buf[256];
|
||||
const int buf_size = sizeof(buf);
|
||||
|
||||
if(buf[0] != '\0')
|
||||
if(home != NULL)
|
||||
return buf;
|
||||
if((home = getenv("HOME")) == NULL)
|
||||
return NULL;
|
||||
if(snprintf(buf, sizeof(buf), "%s/%s", home, ".surfer") >= buf_size)
|
||||
{
|
||||
home = NULL; /* XXX will then work once it fits... */
|
||||
return NULL;
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
||||
/* accessors */
|
||||
/* ghtml_can_go_back */
|
||||
gboolean ghtml_can_go_back(GtkWidget * ghtml)
|
||||
{
|
||||
return gtk_moz_embed_can_go_back(GTK_MOZ_EMBED(ghtml));
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_can_go_forward */
|
||||
gboolean ghtml_can_go_forward(GtkWidget * ghtml)
|
||||
{
|
||||
return gtk_moz_embed_can_go_forward(GTK_MOZ_EMBED(ghtml));
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_link_message */
|
||||
char const * ghtml_get_link_message(GtkWidget * ghtml)
|
||||
{
|
||||
|
@ -19,6 +19,7 @@
|
||||
# define SURFER_GHTML_H
|
||||
|
||||
# include <gtk/gtk.h>
|
||||
# include "surfer.h"
|
||||
|
||||
|
||||
/* GHTML */
|
||||
@ -26,10 +27,13 @@
|
||||
#if 0 /* FIXME pass the callback data another way */
|
||||
GtkWidget * ghtml_new(void);
|
||||
#else
|
||||
GtkWidget * ghtml_new(void * data);
|
||||
GtkWidget * ghtml_new(Surfer * surfer);
|
||||
#endif
|
||||
|
||||
/* accessors */
|
||||
gboolean ghtml_can_go_back(GtkWidget * ghtml);
|
||||
gboolean ghtml_can_go_forward(GtkWidget * ghtml);
|
||||
|
||||
char const * ghtml_get_link_message(GtkWidget * ghtml);
|
||||
char const * ghtml_get_location(GtkWidget * ghtml);
|
||||
char const * ghtml_get_title(GtkWidget * ghtml);
|
||||
|
Loading…
Reference in New Issue
Block a user