View Single Post
Old 10-19-2013, 09:10 PM   #132
twobob
( ͡° ͜ʖ ͡°){ʇlnɐɟ ƃǝs}Týr
twobob ought to be getting tired of karma fortunes by now.twobob ought to be getting tired of karma fortunes by now.twobob ought to be getting tired of karma fortunes by now.twobob ought to be getting tired of karma fortunes by now.twobob ought to be getting tired of karma fortunes by now.twobob ought to be getting tired of karma fortunes by now.twobob ought to be getting tired of karma fortunes by now.twobob ought to be getting tired of karma fortunes by now.twobob ought to be getting tired of karma fortunes by now.twobob ought to be getting tired of karma fortunes by now.twobob ought to be getting tired of karma fortunes by now.
 
twobob's Avatar
 
Posts: 6,586
Karma: 6299993
Join Date: Jun 2012
Location: uti gratia usura (Yao ying da ying; Mo ying da yieng)
Device: PW-WIFI|K5-3G+WIFI| K4|K3-3G|DXG|K2| Rooted Nook Touch
Quote:
Originally Posted by baf View Post
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.

Last edited by twobob; 10-19-2013 at 09:14 PM.
twobob is offline   Reply With Quote