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);
|
gpointer data);
|
||||||
static void _on_load_started(WebKitWebView * view, WebKitWebFrame * frame,
|
static void _on_load_started(WebKitWebView * view, WebKitWebFrame * frame,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
static void _on_script_alert(WebKitWebView * view, WebKitWebFrame * frame,
|
static gboolean _on_script_alert(WebKitWebView * view, WebKitWebFrame * frame,
|
||||||
gchar * message, gpointer data);
|
const gchar * message, gpointer data);
|
||||||
static gboolean _on_script_confirm(WebKitWebView * view, WebKitWebFrame * frame,
|
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,
|
static void _on_status_bar_text_changed(WebKitWebView * view, gchar * arg1,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
static void _on_title_changed(WebKitWebView * view, WebKitWebFrame * frame,
|
static void _on_title_changed(WebKitWebView * view, WebKitWebFrame * frame,
|
||||||
@ -89,6 +92,8 @@ GtkWidget * ghtml_new(Surfer * surfer)
|
|||||||
_on_script_alert), widget);
|
_on_script_alert), widget);
|
||||||
g_signal_connect(G_OBJECT(view), "script-confirm", G_CALLBACK(
|
g_signal_connect(G_OBJECT(view), "script-confirm", G_CALLBACK(
|
||||||
_on_script_confirm), widget);
|
_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(
|
g_signal_connect(G_OBJECT(view), "status-bar-text-changed", G_CALLBACK(
|
||||||
_on_status_bar_text_changed), widget);
|
_on_status_bar_text_changed), widget);
|
||||||
g_signal_connect(G_OBJECT(view), "title-changed", G_CALLBACK(
|
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 */
|
/* on_script_alert */
|
||||||
static void _on_script_alert(WebKitWebView * view, WebKitWebFrame * frame,
|
static gboolean _on_script_alert(WebKitWebView * view, WebKitWebFrame * frame,
|
||||||
gchar * message, gpointer data)
|
const gchar * message, gpointer data)
|
||||||
{
|
{
|
||||||
Surfer * surfer;
|
Surfer * surfer;
|
||||||
|
|
||||||
surfer = g_object_get_data(G_OBJECT(data), "surfer");
|
surfer = g_object_get_data(G_OBJECT(data), "surfer");
|
||||||
surfer_warning(surfer, message);
|
surfer_warning(surfer, message);
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static gboolean _on_script_confirm(WebKitWebView * view, WebKitWebFrame * frame,
|
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 * surfer;
|
||||||
|
|
||||||
surfer = g_object_get_data(G_OBJECT(data), "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 */
|
/* 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;
|
GtkWidget * dialog;
|
||||||
|
int res;
|
||||||
|
|
||||||
dialog = gtk_message_dialog_new((surfer != NULL)
|
dialog = gtk_message_dialog_new((surfer != NULL)
|
||||||
? GTK_WINDOW(surfer->window) : 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),
|
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
|
||||||
"%s", message);
|
"%s", message);
|
||||||
gtk_window_set_title(GTK_WINDOW(dialog), _("Question"));
|
gtk_window_set_title(GTK_WINDOW(dialog), _("Question"));
|
||||||
g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(
|
res = gtk_dialog_run(GTK_DIALOG(dialog));
|
||||||
gtk_widget_destroy), NULL);
|
|
||||||
ret = gtk_dialog_run(GTK_DIALOG(dialog));
|
|
||||||
gtk_widget_destroy(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),
|
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
|
||||||
"%s", (message != NULL) ? message : _("Unknown error"));
|
"%s", (message != NULL) ? message : _("Unknown error"));
|
||||||
gtk_window_set_title(GTK_WINDOW(dialog), _("Error"));
|
gtk_window_set_title(GTK_WINDOW(dialog), _("Error"));
|
||||||
g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(
|
gtk_dialog_run(GTK_DIALOG(dialog));
|
||||||
gtk_widget_destroy), NULL);
|
gtk_widget_destroy(dialog);
|
||||||
gtk_widget_show(dialog);
|
|
||||||
return ret;
|
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 */
|
/* surfer_refresh */
|
||||||
void surfer_refresh(Surfer * surfer)
|
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),
|
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
|
||||||
"%s", message);
|
"%s", message);
|
||||||
gtk_window_set_title(GTK_WINDOW(dialog), _("Warning"));
|
gtk_window_set_title(GTK_WINDOW(dialog), _("Warning"));
|
||||||
g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(
|
gtk_dialog_run(GTK_DIALOG(dialog));
|
||||||
gtk_widget_destroy), NULL);
|
gtk_widget_destroy(dialog);
|
||||||
gtk_widget_show(dialog);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -65,8 +65,10 @@ void surfer_set_title(Surfer * surfer, char const * title);
|
|||||||
int surfer_config_load(Surfer * surfer);
|
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);
|
int surfer_confirm(Surfer * surfer, char const * message, gboolean * confirmed);
|
||||||
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,
|
||||||
|
char const * default_value, char ** value);
|
||||||
void surfer_warning(Surfer * surfer, char const * message);
|
void surfer_warning(Surfer * surfer, char const * message);
|
||||||
|
|
||||||
void surfer_open(Surfer * surfer, char const * url);
|
void surfer_open(Surfer * surfer, char const * url);
|
||||||
|
Loading…
Reference in New Issue
Block a user