Fixed handling of Javascript interactions
This commit is contained in:
parent
9456d61b91
commit
2e3102e0e0
@ -44,10 +44,13 @@ static void _on_load_progress_changed(WebKitWebView * view, gint progress,
|
||||
gpointer data);
|
||||
static void _on_load_started(WebKitWebView * view, WebKitWebFrame * frame,
|
||||
gpointer data);
|
||||
static void _on_script_alert(WebKitWebView * view, WebKitWebFrame * frame,
|
||||
gchar * message, gpointer data);
|
||||
static gboolean _on_script_alert(WebKitWebView * view, WebKitWebFrame * frame,
|
||||
const gchar * message, gpointer data);
|
||||
static gboolean _on_script_confirm(WebKitWebView * view, WebKitWebFrame * frame,
|
||||
gchar * message, gboolean confirmed, gpointer data);
|
||||
const gchar * message, gboolean * confirmed, gpointer data);
|
||||
static gboolean _on_script_prompt(WebKitWebView * view, WebKitWebFrame * frame,
|
||||
const gchar * message, const gchar * default_value,
|
||||
gchar ** value, gpointer data);
|
||||
static void _on_status_bar_text_changed(WebKitWebView * view, gchar * arg1,
|
||||
gpointer data);
|
||||
static void _on_title_changed(WebKitWebView * view, WebKitWebFrame * frame,
|
||||
@ -89,6 +92,8 @@ GtkWidget * ghtml_new(Surfer * surfer)
|
||||
_on_script_alert), widget);
|
||||
g_signal_connect(G_OBJECT(view), "script-confirm", G_CALLBACK(
|
||||
_on_script_confirm), widget);
|
||||
g_signal_connect(G_OBJECT(view), "script-prompt", G_CALLBACK(
|
||||
_on_script_prompt), widget);
|
||||
g_signal_connect(G_OBJECT(view), "status-bar-text-changed", G_CALLBACK(
|
||||
_on_status_bar_text_changed), widget);
|
||||
g_signal_connect(G_OBJECT(view), "title-changed", G_CALLBACK(
|
||||
@ -464,23 +469,39 @@ static void _on_load_started(WebKitWebView * view, WebKitWebFrame * frame,
|
||||
|
||||
|
||||
/* on_script_alert */
|
||||
static void _on_script_alert(WebKitWebView * view, WebKitWebFrame * frame,
|
||||
gchar * message, gpointer data)
|
||||
static gboolean _on_script_alert(WebKitWebView * view, WebKitWebFrame * frame,
|
||||
const gchar * message, gpointer data)
|
||||
{
|
||||
Surfer * surfer;
|
||||
|
||||
surfer = g_object_get_data(G_OBJECT(data), "surfer");
|
||||
surfer_warning(surfer, message);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
static gboolean _on_script_confirm(WebKitWebView * view, WebKitWebFrame * frame,
|
||||
gchar * message, gboolean confirmed, gpointer data)
|
||||
const gchar * message, gboolean * confirmed, gpointer data)
|
||||
{
|
||||
Surfer * surfer;
|
||||
|
||||
surfer = g_object_get_data(G_OBJECT(data), "surfer");
|
||||
return surfer_confirm(surfer, message);
|
||||
if(surfer_confirm(surfer, message, confirmed) != 0)
|
||||
*confirmed = FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean _on_script_prompt(WebKitWebView * view, WebKitWebFrame * frame,
|
||||
const gchar * message, const gchar * default_value,
|
||||
gchar ** value, gpointer data)
|
||||
{
|
||||
Surfer * surfer;
|
||||
|
||||
surfer = g_object_get_data(G_OBJECT(data), "surfer");
|
||||
if(surfer_prompt(surfer, message, default_value, value) == 0)
|
||||
return TRUE;
|
||||
*value = NULL;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
60
src/surfer.c
60
src/surfer.c
@ -543,10 +543,11 @@ int surfer_config_save(Surfer * surfer)
|
||||
|
||||
|
||||
/* surfer_confirm */
|
||||
int surfer_confirm(Surfer * surfer, char const * message)
|
||||
int surfer_confirm(Surfer * surfer, char const * message, gboolean * confirmed)
|
||||
{
|
||||
int ret;
|
||||
int ret = 0;
|
||||
GtkWidget * dialog;
|
||||
int res;
|
||||
|
||||
dialog = gtk_message_dialog_new((surfer != NULL)
|
||||
? GTK_WINDOW(surfer->window) : NULL,
|
||||
@ -556,11 +557,15 @@ int surfer_confirm(Surfer * surfer, char const * message)
|
||||
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
|
||||
"%s", message);
|
||||
gtk_window_set_title(GTK_WINDOW(dialog), _("Question"));
|
||||
g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(
|
||||
gtk_widget_destroy), NULL);
|
||||
ret = gtk_dialog_run(GTK_DIALOG(dialog));
|
||||
res = gtk_dialog_run(GTK_DIALOG(dialog));
|
||||
gtk_widget_destroy(dialog);
|
||||
return (ret == GTK_RESPONSE_YES) ? 1 : 0;
|
||||
if(res == GTK_RESPONSE_YES)
|
||||
*confirmed = TRUE;
|
||||
else if(res == GTK_RESPONSE_NO)
|
||||
*confirmed = FALSE;
|
||||
else
|
||||
ret = 1;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@ -607,9 +612,8 @@ int surfer_error(Surfer * surfer, char const * message, int ret)
|
||||
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
|
||||
"%s", (message != NULL) ? message : _("Unknown error"));
|
||||
gtk_window_set_title(GTK_WINDOW(dialog), _("Error"));
|
||||
g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(
|
||||
gtk_widget_destroy), NULL);
|
||||
gtk_widget_show(dialog);
|
||||
gtk_dialog_run(GTK_DIALOG(dialog));
|
||||
gtk_widget_destroy(dialog);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -843,6 +847,39 @@ void surfer_print(Surfer * surfer)
|
||||
}
|
||||
|
||||
|
||||
/* surfer_prompt */
|
||||
int surfer_prompt(Surfer * surfer, char const * message,
|
||||
char const * default_value, char ** value)
|
||||
{
|
||||
int ret = 0;
|
||||
GtkWidget * dialog;
|
||||
GtkWidget * vbox;
|
||||
GtkWidget * entry;
|
||||
int res;
|
||||
|
||||
dialog = gtk_message_dialog_new((surfer != NULL)
|
||||
? GTK_WINDOW(surfer->window) : NULL,
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK_CANCEL, "%s",
|
||||
_("Question"));
|
||||
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
|
||||
"%s", message);
|
||||
gtk_window_set_title(GTK_WINDOW(dialog), _("Question"));
|
||||
vbox = GTK_DIALOG(dialog)->vbox;
|
||||
entry = gtk_entry_new();
|
||||
if(default_value != NULL)
|
||||
gtk_entry_set_text(GTK_ENTRY(entry), default_value);
|
||||
gtk_widget_show(entry);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, TRUE, 0);
|
||||
if((res = gtk_dialog_run(GTK_DIALOG(dialog))) == GTK_RESPONSE_OK)
|
||||
*value = strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
|
||||
else
|
||||
ret = 1;
|
||||
gtk_widget_destroy(dialog);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* surfer_refresh */
|
||||
void surfer_refresh(Surfer * surfer)
|
||||
{
|
||||
@ -1074,9 +1111,8 @@ void surfer_warning(Surfer * surfer, char const * message)
|
||||
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
|
||||
"%s", message);
|
||||
gtk_window_set_title(GTK_WINDOW(dialog), _("Warning"));
|
||||
g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(
|
||||
gtk_widget_destroy), NULL);
|
||||
gtk_widget_show(dialog);
|
||||
gtk_dialog_run(GTK_DIALOG(dialog));
|
||||
gtk_widget_destroy(dialog);
|
||||
}
|
||||
|
||||
|
||||
|
@ -65,8 +65,10 @@ void surfer_set_title(Surfer * surfer, char const * title);
|
||||
int surfer_config_load(Surfer * surfer);
|
||||
int surfer_config_save(Surfer * surfer);
|
||||
|
||||
int surfer_confirm(Surfer * surfer, char const * message);
|
||||
int surfer_confirm(Surfer * surfer, char const * message, gboolean * confirmed);
|
||||
int surfer_error(Surfer * surfer, char const * message, int ret);
|
||||
int surfer_prompt(Surfer * surfer, char const * message,
|
||||
char const * default_value, char ** value);
|
||||
void surfer_warning(Surfer * surfer, char const * message);
|
||||
|
||||
void surfer_open(Surfer * surfer, char const * url);
|
||||
|
Loading…
Reference in New Issue
Block a user