Implemented basic Javascript console
This commit is contained in:
parent
86bee02a06
commit
a92edc3f72
@ -165,6 +165,15 @@ void on_view_force_refresh(gpointer data)
|
||||
}
|
||||
|
||||
|
||||
/* on_view_javascript_console */
|
||||
void on_view_javascript_console(gpointer data)
|
||||
{
|
||||
Surfer * surfer = data;
|
||||
|
||||
surfer_show_console(surfer, TRUE);
|
||||
}
|
||||
|
||||
|
||||
/* on_view_normal_size */
|
||||
void on_view_normal_size(gpointer data)
|
||||
{
|
||||
@ -445,6 +454,16 @@ void on_close(gpointer data)
|
||||
}
|
||||
|
||||
|
||||
/* on_console_closex */
|
||||
gboolean on_console_closex(gpointer data)
|
||||
{
|
||||
Surfer * surfer = data;
|
||||
|
||||
surfer_show_console(surfer, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/* on_forward */
|
||||
void on_forward(gpointer data)
|
||||
{
|
||||
|
@ -49,6 +49,7 @@ void on_view_refresh(gpointer data);
|
||||
void on_view_force_refresh(gpointer data);
|
||||
void on_view_stop(gpointer data);
|
||||
void on_view_page_source(gpointer data);
|
||||
void on_view_javascript_console(gpointer data);
|
||||
|
||||
/* help menu */
|
||||
void on_help_about(gpointer data);
|
||||
@ -69,4 +70,7 @@ void on_stop(gpointer data);
|
||||
void on_notebook_close_tab(GtkWidget * widget, gpointer data);
|
||||
void on_notebook_switch_page(gpointer data);
|
||||
|
||||
/* console */
|
||||
gboolean on_console_closex(gpointer data);
|
||||
|
||||
#endif
|
||||
|
@ -60,6 +60,10 @@ struct _Surfer
|
||||
GtkWidget * fi_text;
|
||||
GtkWidget * fi_case;
|
||||
GtkWidget * fi_wrap;
|
||||
|
||||
/* console */
|
||||
GtkWidget * co_window;
|
||||
GtkListStore * co_store;
|
||||
};
|
||||
|
||||
#endif /* !SURFER_COMMON_H */
|
||||
|
@ -28,6 +28,8 @@
|
||||
/* prototypes */
|
||||
/* functions */
|
||||
/* callbacks */
|
||||
static gboolean _on_console_message(WebKitWebView * view, const gchar * message,
|
||||
guint line, const gchar * source, gpointer data);
|
||||
static WebKitWebView * _on_create_web_view(WebKitWebView * view,
|
||||
WebKitWebFrame * frame, gpointer data);
|
||||
static gboolean _on_download_requested(WebKitWebView * view,
|
||||
@ -72,6 +74,8 @@ GtkWidget * ghtml_new(Surfer * surfer)
|
||||
g_object_set_data(G_OBJECT(widget), "surfer", surfer);
|
||||
g_object_set_data(G_OBJECT(widget), "view", view);
|
||||
/* view */
|
||||
g_signal_connect(G_OBJECT(view), "console-message", G_CALLBACK(
|
||||
_on_console_message), widget);
|
||||
g_signal_connect(G_OBJECT(view), "create-web-view", G_CALLBACK(
|
||||
_on_create_web_view), widget);
|
||||
g_signal_connect(G_OBJECT(view), "download-requested", G_CALLBACK(
|
||||
@ -346,6 +350,18 @@ void ghtml_zoom_reset(GtkWidget * ghtml)
|
||||
|
||||
/* private */
|
||||
/* functions */
|
||||
/* on_console_message */
|
||||
static gboolean _on_console_message(WebKitWebView * view, const gchar * message,
|
||||
guint line, const gchar * source, gpointer data)
|
||||
{
|
||||
Surfer * surfer;
|
||||
|
||||
surfer = g_object_get_data(G_OBJECT(data), "surfer");
|
||||
surfer_console_message(surfer, message, source, line);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/* on_create_web_view */
|
||||
static WebKitWebView * _on_create_web_view(WebKitWebView * view,
|
||||
WebKitWebFrame * frame, gpointer data)
|
||||
|
80
src/surfer.c
80
src/surfer.c
@ -38,6 +38,13 @@ typedef struct _SurferIdle
|
||||
char * url;
|
||||
} SurferIdle;
|
||||
|
||||
typedef enum _SurferConsoleMessage
|
||||
{
|
||||
SCM_MESSAGE = 0, SCM_SOURCE, SCM_LINE, SCM_DISPLAY_LINE
|
||||
} SurferConsoleMessage;
|
||||
#define SCM_LAST SCM_DISPLAY_LINE
|
||||
#define SCM_COUNT (SCM_LAST + 1)
|
||||
|
||||
|
||||
/* variables */
|
||||
static DesktopAccel _surfer_accel[] =
|
||||
@ -112,6 +119,8 @@ static DesktopMenu _menu_view[] =
|
||||
{ "", NULL, NULL, 0 },
|
||||
{ N_("Page so_urce"), G_CALLBACK(on_view_page_source),
|
||||
"stock_view-html-source", GDK_U },
|
||||
{ N_("Javascript _console"), G_CALLBACK(on_view_javascript_console),
|
||||
NULL, 0 },
|
||||
{ NULL, NULL, NULL, 0 }
|
||||
};
|
||||
|
||||
@ -305,6 +314,10 @@ Surfer * _new_do(char const * url)
|
||||
surfer->pr_window = NULL;
|
||||
/* find dialog */
|
||||
surfer->fi_dialog = NULL;
|
||||
/* console window */
|
||||
surfer->co_window = NULL;
|
||||
surfer->co_store = gtk_list_store_new(SCM_COUNT, G_TYPE_STRING,
|
||||
G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING);
|
||||
/* hack to display the statusbar only if necessary */
|
||||
gtk_box_pack_start(GTK_BOX(vbox), surfer->statusbox, FALSE, FALSE, 0);
|
||||
surfer_set_status(surfer, NULL);
|
||||
@ -569,6 +582,26 @@ int surfer_confirm(Surfer * surfer, char const * message, gboolean * confirmed)
|
||||
}
|
||||
|
||||
|
||||
/* surfer_console_message */
|
||||
void surfer_console_message(Surfer * surfer, char const * message,
|
||||
char const * source, long line)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
char buf[32] = "";
|
||||
|
||||
if(line < 0)
|
||||
line = -1;
|
||||
else
|
||||
snprintf(buf, sizeof(buf), "%ld", line);
|
||||
gtk_list_store_append(surfer->co_store, &iter);
|
||||
gtk_list_store_set(surfer->co_store, &iter, SCM_MESSAGE, message,
|
||||
SCM_SOURCE, source,
|
||||
(line >= 0) ? SCM_LINE : -1, line,
|
||||
SCM_DISPLAY_LINE, buf,
|
||||
-1);
|
||||
}
|
||||
|
||||
|
||||
/* surfer_download */
|
||||
void surfer_download(Surfer * surfer, char const * url, char const * suggested)
|
||||
{
|
||||
@ -966,6 +999,53 @@ void surfer_select_all(Surfer * surfer)
|
||||
}
|
||||
|
||||
|
||||
/* surfer_show_console */
|
||||
void surfer_show_console(Surfer * surfer, gboolean show)
|
||||
{
|
||||
GtkWidget * vbox;
|
||||
GtkWidget * widget;
|
||||
GtkCellRenderer * renderer;
|
||||
GtkTreeViewColumn * column;
|
||||
|
||||
if(surfer->co_window != NULL)
|
||||
{
|
||||
if(show == TRUE)
|
||||
gtk_widget_show(surfer->co_window);
|
||||
else
|
||||
gtk_widget_hide(surfer->co_window);
|
||||
return;
|
||||
}
|
||||
surfer->co_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_window_set_default_size(GTK_WINDOW(surfer->co_window), 400, 300);
|
||||
gtk_window_set_title(GTK_WINDOW(surfer->co_window),
|
||||
_("Javascript console"));
|
||||
g_signal_connect_swapped(G_OBJECT(surfer->co_window), "delete-event",
|
||||
G_CALLBACK(on_console_closex), surfer);
|
||||
vbox = gtk_vbox_new(FALSE, 0);
|
||||
widget = gtk_tree_view_new_with_model(GTK_TREE_MODEL(
|
||||
surfer->co_store));
|
||||
/* message */
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes("Message",
|
||||
renderer, "text", SCM_MESSAGE, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(widget), column);
|
||||
/* source */
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes("Source",
|
||||
renderer, "text", SCM_SOURCE, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(widget), column);
|
||||
/* line */
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes("Line",
|
||||
renderer, "text", SCM_DISPLAY_LINE, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(widget), column);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), widget, TRUE, TRUE, 0);
|
||||
gtk_container_add(GTK_CONTAINER(surfer->co_window), vbox);
|
||||
gtk_widget_show_all(vbox);
|
||||
surfer_show_console(surfer, show);
|
||||
}
|
||||
|
||||
|
||||
/* surfer_show_menubar */
|
||||
void surfer_show_menubar(Surfer * surfer, gboolean show)
|
||||
{
|
||||
|
@ -66,6 +66,8 @@ int surfer_config_load(Surfer * surfer);
|
||||
int surfer_config_save(Surfer * surfer);
|
||||
|
||||
int surfer_confirm(Surfer * surfer, char const * message, gboolean * confirmed);
|
||||
void surfer_console_message(Surfer * surfer, char const * message,
|
||||
char const * source, long line);
|
||||
int surfer_error(Surfer * surfer, char const * message, int ret);
|
||||
int surfer_prompt(Surfer * surfer, char const * message,
|
||||
char const * default_value, char ** value);
|
||||
@ -87,6 +89,7 @@ void surfer_download(Surfer * surfer, char const * url, char const * suggested);
|
||||
|
||||
/* interface */
|
||||
void surfer_resize(Surfer * surfer, gint width, gint height);
|
||||
void surfer_show_console(Surfer * surfer, gboolean show);
|
||||
void surfer_show_menubar(Surfer * surfer, gboolean show);
|
||||
void surfer_show_statusbar(Surfer * surfer, gboolean show);
|
||||
void surfer_show_toolbar(Surfer * surfer, gboolean show);
|
||||
|
Loading…
Reference in New Issue
Block a user