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 */
|
/* on_view_normal_size */
|
||||||
void on_view_normal_size(gpointer data)
|
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 */
|
/* on_forward */
|
||||||
void on_forward(gpointer data)
|
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_force_refresh(gpointer data);
|
||||||
void on_view_stop(gpointer data);
|
void on_view_stop(gpointer data);
|
||||||
void on_view_page_source(gpointer data);
|
void on_view_page_source(gpointer data);
|
||||||
|
void on_view_javascript_console(gpointer data);
|
||||||
|
|
||||||
/* help menu */
|
/* help menu */
|
||||||
void on_help_about(gpointer data);
|
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_close_tab(GtkWidget * widget, gpointer data);
|
||||||
void on_notebook_switch_page(gpointer data);
|
void on_notebook_switch_page(gpointer data);
|
||||||
|
|
||||||
|
/* console */
|
||||||
|
gboolean on_console_closex(gpointer data);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -60,6 +60,10 @@ struct _Surfer
|
|||||||
GtkWidget * fi_text;
|
GtkWidget * fi_text;
|
||||||
GtkWidget * fi_case;
|
GtkWidget * fi_case;
|
||||||
GtkWidget * fi_wrap;
|
GtkWidget * fi_wrap;
|
||||||
|
|
||||||
|
/* console */
|
||||||
|
GtkWidget * co_window;
|
||||||
|
GtkListStore * co_store;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* !SURFER_COMMON_H */
|
#endif /* !SURFER_COMMON_H */
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
/* prototypes */
|
/* prototypes */
|
||||||
/* functions */
|
/* functions */
|
||||||
/* callbacks */
|
/* 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,
|
static WebKitWebView * _on_create_web_view(WebKitWebView * view,
|
||||||
WebKitWebFrame * frame, gpointer data);
|
WebKitWebFrame * frame, gpointer data);
|
||||||
static gboolean _on_download_requested(WebKitWebView * view,
|
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), "surfer", surfer);
|
||||||
g_object_set_data(G_OBJECT(widget), "view", view);
|
g_object_set_data(G_OBJECT(widget), "view", 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(
|
g_signal_connect(G_OBJECT(view), "create-web-view", G_CALLBACK(
|
||||||
_on_create_web_view), widget);
|
_on_create_web_view), widget);
|
||||||
g_signal_connect(G_OBJECT(view), "download-requested", G_CALLBACK(
|
g_signal_connect(G_OBJECT(view), "download-requested", G_CALLBACK(
|
||||||
@ -346,6 +350,18 @@ void ghtml_zoom_reset(GtkWidget * ghtml)
|
|||||||
|
|
||||||
/* private */
|
/* private */
|
||||||
/* functions */
|
/* 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 */
|
/* on_create_web_view */
|
||||||
static WebKitWebView * _on_create_web_view(WebKitWebView * view,
|
static WebKitWebView * _on_create_web_view(WebKitWebView * view,
|
||||||
WebKitWebFrame * frame, gpointer data)
|
WebKitWebFrame * frame, gpointer data)
|
||||||
|
80
src/surfer.c
80
src/surfer.c
@ -38,6 +38,13 @@ typedef struct _SurferIdle
|
|||||||
char * url;
|
char * url;
|
||||||
} SurferIdle;
|
} 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 */
|
/* variables */
|
||||||
static DesktopAccel _surfer_accel[] =
|
static DesktopAccel _surfer_accel[] =
|
||||||
@ -112,6 +119,8 @@ static DesktopMenu _menu_view[] =
|
|||||||
{ "", NULL, NULL, 0 },
|
{ "", NULL, NULL, 0 },
|
||||||
{ N_("Page so_urce"), G_CALLBACK(on_view_page_source),
|
{ N_("Page so_urce"), G_CALLBACK(on_view_page_source),
|
||||||
"stock_view-html-source", GDK_U },
|
"stock_view-html-source", GDK_U },
|
||||||
|
{ N_("Javascript _console"), G_CALLBACK(on_view_javascript_console),
|
||||||
|
NULL, 0 },
|
||||||
{ NULL, NULL, NULL, 0 }
|
{ NULL, NULL, NULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -305,6 +314,10 @@ Surfer * _new_do(char const * url)
|
|||||||
surfer->pr_window = NULL;
|
surfer->pr_window = NULL;
|
||||||
/* find dialog */
|
/* find dialog */
|
||||||
surfer->fi_dialog = NULL;
|
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 */
|
/* hack to display the statusbar only if necessary */
|
||||||
gtk_box_pack_start(GTK_BOX(vbox), surfer->statusbox, FALSE, FALSE, 0);
|
gtk_box_pack_start(GTK_BOX(vbox), surfer->statusbox, FALSE, FALSE, 0);
|
||||||
surfer_set_status(surfer, NULL);
|
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 */
|
/* surfer_download */
|
||||||
void surfer_download(Surfer * surfer, char const * url, char const * suggested)
|
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 */
|
/* surfer_show_menubar */
|
||||||
void surfer_show_menubar(Surfer * surfer, gboolean show)
|
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_config_save(Surfer * surfer);
|
||||||
|
|
||||||
int surfer_confirm(Surfer * surfer, char const * message, gboolean * confirmed);
|
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_error(Surfer * surfer, char const * message, int ret);
|
||||||
int surfer_prompt(Surfer * surfer, char const * message,
|
int surfer_prompt(Surfer * surfer, char const * message,
|
||||||
char const * default_value, char ** value);
|
char const * default_value, char ** value);
|
||||||
@ -87,6 +89,7 @@ void surfer_download(Surfer * surfer, char const * url, char const * suggested);
|
|||||||
|
|
||||||
/* interface */
|
/* interface */
|
||||||
void surfer_resize(Surfer * surfer, gint width, gint height);
|
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_menubar(Surfer * surfer, gboolean show);
|
||||||
void surfer_show_statusbar(Surfer * surfer, gboolean show);
|
void surfer_show_statusbar(Surfer * surfer, gboolean show);
|
||||||
void surfer_show_toolbar(Surfer * surfer, gboolean show);
|
void surfer_show_toolbar(Surfer * surfer, gboolean show);
|
||||||
|
Loading…
Reference in New Issue
Block a user