Quote:
Originally Posted by baf
See how I solved it in SkipStone. You can connect to "script-alert" signal which is emitted by webkit when javascript calls window.alert. Same applies to prompt and confirm boxes.
|
Code:
gboolean handle_script_alert(WebKitWebView *web_view, WebKitWebFrame *frame, gchar *message, SkipStone *skipstone)
{
g_signal_connect(G_OBJECT(skipstone->embed), "script-alert", G_CALLBACK(handle_script_alert), skipstone);
g_signal_connect(G_OBJECT(skipstone->embed), "script-confirm", G_CALLBACK(handle_script_confirm), skipstone);
g_signal_connect(G_OBJECT(skipstone->embed), "script-prompt", G_CALLBACK(handle_script_prompt), skipstone);
GtkWidget *dialog;
D_ENTER;
dialog = gtk_message_dialog_new(GTK_WINDOW(skipstone->window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_OK,
message);
gtk_window_set_title(GTK_WINDOW(dialog), KTITLE);
gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
D_RETURN_(TRUE);
}
+gboolean handle_script_confirm(WebKitWebView *web_view, WebKitWebFrame *frame, gchar *message, gboolean **confirmed, SkipStone *skipstone)
{
GtkWidget *dialog;
D_ENTER;
*confirmed = FALSE;
dialog = gtk_message_dialog_new(GTK_WINDOW(skipstone->window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_OK_CANCEL,
message);
gtk_window_set_title(GTK_WINDOW(dialog), KTITLE);
gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
gint result = gtk_dialog_run(GTK_DIALOG(dialog));
if(result == GTK_RESPONSE_OK)
*confirmed = TRUE;
gtk_widget_destroy(dialog);
D_RETURN_(TRUE);
}
gboolean handle_script_prompt(WebKitWebView *web_view, WebKitWebFrame *frame, gchar *message, gchar *default_text, gchar **text, SkipStone *skipstone)
{
GtkWidget *dialog;
GtkWidget *entry, *message_area;
D_ENTER;
dialog = gtk_message_dialog_new(GTK_WINDOW(skipstone->window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_OK,
message);
gtk_window_set_title(GTK_WINDOW(dialog), KTITLE);
gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER);
message_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog));
entry = gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(entry), default_text);
gtk_widget_show(entry);
gtk_container_add (GTK_CONTAINER (message_area), entry);
gtk_dialog_run(GTK_DIALOG(dialog));
*text = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
gtk_widget_destroy(dialog);
D_RETURN_(TRUE);
}
brilliant.