The WebKit-based implementation can now execute Javascript code on demand
This commit is contained in:
parent
a92edc3f72
commit
1592373742
@ -454,6 +454,24 @@ void on_close(gpointer data)
|
||||
}
|
||||
|
||||
|
||||
/* on_console_clear */
|
||||
void on_console_clear(gpointer data)
|
||||
{
|
||||
Surfer * surfer = data;
|
||||
|
||||
surfer_console_clear(surfer);
|
||||
}
|
||||
|
||||
|
||||
/* on_console_close */
|
||||
void on_console_close(gpointer data)
|
||||
{
|
||||
Surfer * surfer = data;
|
||||
|
||||
surfer_show_console(surfer, FALSE);
|
||||
}
|
||||
|
||||
|
||||
/* on_console_closex */
|
||||
gboolean on_console_closex(gpointer data)
|
||||
{
|
||||
@ -464,6 +482,15 @@ gboolean on_console_closex(gpointer data)
|
||||
}
|
||||
|
||||
|
||||
/* on_console_execute */
|
||||
void on_console_execute(gpointer data)
|
||||
{
|
||||
Surfer * surfer = data;
|
||||
|
||||
surfer_console_execute(surfer);
|
||||
}
|
||||
|
||||
|
||||
/* on_forward */
|
||||
void on_forward(gpointer data)
|
||||
{
|
||||
|
@ -71,6 +71,9 @@ void on_notebook_close_tab(GtkWidget * widget, gpointer data);
|
||||
void on_notebook_switch_page(gpointer data);
|
||||
|
||||
/* console */
|
||||
void on_console_clear(gpointer data);
|
||||
void on_console_close(gpointer data);
|
||||
gboolean on_console_closex(gpointer data);
|
||||
void on_console_execute(gpointer data);
|
||||
|
||||
#endif
|
||||
|
@ -63,6 +63,7 @@ struct _Surfer
|
||||
|
||||
/* console */
|
||||
GtkWidget * co_window;
|
||||
GtkWidget * co_entry;
|
||||
GtkListStore * co_store;
|
||||
};
|
||||
|
||||
|
@ -282,6 +282,13 @@ int ghtml_set_base(GtkWidget * widget, char const * url)
|
||||
|
||||
|
||||
/* useful */
|
||||
/* ghtml_execute */
|
||||
void ghtml_execute(GtkWidget * ghtml, char const * code)
|
||||
{
|
||||
/* FIXME implement */
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_find */
|
||||
gboolean ghtml_find(GtkWidget * ghtml, char const * text, gboolean sensitive,
|
||||
gboolean wrap)
|
||||
|
@ -359,6 +359,13 @@ char const * ghtml_get_title(GtkWidget * ghtml)
|
||||
|
||||
|
||||
/* useful */
|
||||
/* ghtml_execute */
|
||||
void ghtml_execute(GtkWidget * ghtml, char const * code)
|
||||
{
|
||||
/* FIXME implement */
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_find */
|
||||
gboolean ghtml_find(GtkWidget * ghtml, char const * text, gboolean sensitive,
|
||||
gboolean wrap)
|
||||
|
@ -185,6 +185,13 @@ char const * ghtml_get_title(GtkWidget * widget)
|
||||
|
||||
|
||||
/* useful */
|
||||
/* ghtml_execute */
|
||||
void ghtml_execute(GtkWidget * ghtml, char const * code)
|
||||
{
|
||||
/* FIXME implement */
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_find */
|
||||
static char const * _find_string(char const * big, char const * little,
|
||||
gboolean sensitive);
|
||||
|
@ -214,6 +214,16 @@ int ghtml_set_base(GtkWidget * ghtml, char const * url)
|
||||
|
||||
|
||||
/* useful */
|
||||
/* ghtml_execute */
|
||||
void ghtml_execute(GtkWidget * ghtml, char const * code)
|
||||
{
|
||||
GtkWidget * view;
|
||||
|
||||
view = g_object_get_data(G_OBJECT(ghtml), "view");
|
||||
webkit_web_view_execute_script(WEBKIT_WEB_VIEW(view), code);
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_find */
|
||||
gboolean ghtml_find(GtkWidget * ghtml, char const * text, gboolean sensitive,
|
||||
gboolean wrap)
|
||||
|
@ -62,4 +62,6 @@ void ghtml_zoom_in(GtkWidget * ghtml);
|
||||
void ghtml_zoom_out(GtkWidget * ghtml);
|
||||
void ghtml_zoom_reset(GtkWidget * ghtml);
|
||||
|
||||
void ghtml_execute(GtkWidget * ghtml, char const * code);
|
||||
|
||||
#endif /* !SURFER_GHTML_H */
|
||||
|
56
src/surfer.c
56
src/surfer.c
@ -447,7 +447,7 @@ void surfer_set_status(Surfer * surfer, char const * status)
|
||||
surfer->statusbar_id);
|
||||
surfer->statusbar_id = gtk_statusbar_push(sb,
|
||||
gtk_statusbar_get_context_id(sb, ""), (status != NULL)
|
||||
? status : "Ready");
|
||||
? status : _("Ready"));
|
||||
if(status == NULL)
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_stop), FALSE);
|
||||
if(status == NULL)
|
||||
@ -582,6 +582,28 @@ int surfer_confirm(Surfer * surfer, char const * message, gboolean * confirmed)
|
||||
}
|
||||
|
||||
|
||||
/* surfer_console_clear */
|
||||
void surfer_console_clear(Surfer * surfer)
|
||||
{
|
||||
gtk_list_store_clear(surfer->co_store);
|
||||
}
|
||||
|
||||
|
||||
/* surfer_console_execute */
|
||||
void surfer_console_execute(Surfer * surfer)
|
||||
{
|
||||
GtkWidget * view;
|
||||
char const * text;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return;
|
||||
if((text = gtk_entry_get_text(GTK_ENTRY(surfer->co_entry))) == NULL
|
||||
|| strlen(text) == 0)
|
||||
return;
|
||||
ghtml_execute(view, text);
|
||||
}
|
||||
|
||||
|
||||
/* surfer_console_message */
|
||||
void surfer_console_message(Surfer * surfer, char const * message,
|
||||
char const * source, long line)
|
||||
@ -1003,6 +1025,7 @@ void surfer_select_all(Surfer * surfer)
|
||||
void surfer_show_console(Surfer * surfer, gboolean show)
|
||||
{
|
||||
GtkWidget * vbox;
|
||||
GtkWidget * hbox;
|
||||
GtkWidget * widget;
|
||||
GtkCellRenderer * renderer;
|
||||
GtkTreeViewColumn * column;
|
||||
@ -1022,6 +1045,18 @@ void surfer_show_console(Surfer * surfer, gboolean show)
|
||||
g_signal_connect_swapped(G_OBJECT(surfer->co_window), "delete-event",
|
||||
G_CALLBACK(on_console_closex), surfer);
|
||||
vbox = gtk_vbox_new(FALSE, 0);
|
||||
hbox = gtk_hbox_new(FALSE, 0);
|
||||
widget = gtk_label_new(_("Command:"));
|
||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 4);
|
||||
surfer->co_entry = gtk_entry_new();
|
||||
g_signal_connect_swapped(G_OBJECT(surfer->co_entry), "activate",
|
||||
G_CALLBACK(on_console_execute), surfer);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), surfer->co_entry, TRUE, TRUE, 0);
|
||||
widget = gtk_button_new_from_stock(GTK_STOCK_EXECUTE);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 4);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 4);
|
||||
/* view */
|
||||
hbox = gtk_scrolled_window_new(NULL, NULL);
|
||||
widget = gtk_tree_view_new_with_model(GTK_TREE_MODEL(
|
||||
surfer->co_store));
|
||||
/* message */
|
||||
@ -1039,9 +1074,24 @@ void surfer_show_console(Surfer * surfer, gboolean show)
|
||||
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_container_add(GTK_CONTAINER(hbox), widget);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
|
||||
/* dialog */
|
||||
hbox = gtk_hbutton_box_new();
|
||||
gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_END);
|
||||
gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbox), 4);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(hbox), 4);
|
||||
widget = gtk_button_new_from_stock(GTK_STOCK_CLEAR);
|
||||
g_signal_connect_swapped(G_OBJECT(widget), "clicked", G_CALLBACK(
|
||||
on_console_clear), surfer);
|
||||
gtk_container_add(GTK_CONTAINER(hbox), widget);
|
||||
widget = gtk_button_new_from_stock(GTK_STOCK_CLOSE);
|
||||
g_signal_connect_swapped(G_OBJECT(widget), "clicked", G_CALLBACK(
|
||||
on_console_close), surfer);
|
||||
gtk_container_add(GTK_CONTAINER(hbox), widget);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
|
||||
gtk_widget_show_all(vbox);
|
||||
gtk_container_add(GTK_CONTAINER(surfer->co_window), vbox);
|
||||
surfer_show_console(surfer, 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_clear(Surfer * surfer);
|
||||
void surfer_console_execute(Surfer * surfer);
|
||||
void surfer_console_message(Surfer * surfer, char const * message,
|
||||
char const * source, long line);
|
||||
int surfer_error(Surfer * surfer, char const * message, int ret);
|
||||
|
Loading…
Reference in New Issue
Block a user