diff --git a/src/callbacks.c b/src/callbacks.c index 309b8ea..cc57404 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -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) { diff --git a/src/callbacks.h b/src/callbacks.h index 8fb7585..1618970 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -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 diff --git a/src/common.h b/src/common.h index f5e48f4..f59ce0a 100644 --- a/src/common.h +++ b/src/common.h @@ -63,6 +63,7 @@ struct _Surfer /* console */ GtkWidget * co_window; + GtkWidget * co_entry; GtkListStore * co_store; }; diff --git a/src/ghtml-gtkhtml.c b/src/ghtml-gtkhtml.c index 099c618..f79c6da 100644 --- a/src/ghtml-gtkhtml.c +++ b/src/ghtml-gtkhtml.c @@ -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) diff --git a/src/ghtml-gtkmozembed.c b/src/ghtml-gtkmozembed.c index 8311074..ea9d120 100644 --- a/src/ghtml-gtkmozembed.c +++ b/src/ghtml-gtkmozembed.c @@ -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) diff --git a/src/ghtml-gtktextview.c b/src/ghtml-gtktextview.c index 5b17349..dc6c28d 100644 --- a/src/ghtml-gtktextview.c +++ b/src/ghtml-gtktextview.c @@ -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); diff --git a/src/ghtml-webkit.c b/src/ghtml-webkit.c index c79fcea..fd62365 100644 --- a/src/ghtml-webkit.c +++ b/src/ghtml-webkit.c @@ -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) diff --git a/src/ghtml.h b/src/ghtml.h index e59b8f7..d60d227 100644 --- a/src/ghtml.h +++ b/src/ghtml.h @@ -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 */ diff --git a/src/surfer.c b/src/surfer.c index 64ff9a5..1c10744 100644 --- a/src/surfer.c +++ b/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); } diff --git a/src/surfer.h b/src/surfer.h index 2103dc9..67e1b41 100644 --- a/src/surfer.h +++ b/src/surfer.h @@ -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);