+ /* if puzzle is password protected ask for the password */
+ if (strlen (app_data.puzzle.hashed_password) > 0)
+ {
+ GtkBuilder *builder;
+ builder = gtk_builder_new ();
+
+ guint ret = gtk_builder_add_from_resource
+ (builder,
+ "/org/harishankar/wordblox/wordblox_player.glade",
+ NULL);
+ if (ret == 0)
+ {
+ fprintf (stderr, ERROR_WINDOW);
+ g_object_unref (builder);
+ return;
+ }
+
+ GtkWidget *password_dialog = GTK_WIDGET (gtk_builder_get_object
+ (builder, "password_dialog"));
+ GtkWidget *password_text = GTK_WIDGET (gtk_builder_get_object
+ (builder, "password_text"));
+
+ if (password_dialog == NULL)
+ {
+ fprintf (stderr, ERROR_WINDOW);
+ g_object_unref (builder);
+ return;
+ }
+ gtk_window_set_transient_for (GTK_WINDOW(password_dialog),
+ GTK_WINDOW(main_window));
+ gtk_dialog_set_default_response (GTK_DIALOG(password_dialog),
+ GTK_RESPONSE_ACCEPT);
+ gint res = gtk_dialog_run (GTK_DIALOG (password_dialog));
+ if (res == GTK_RESPONSE_ACCEPT)
+ {
+ const gchar *user_pwd = gtk_entry_get_text
+ (GTK_ENTRY(password_text));
+ /* if password is correct */
+ if (verify_password (&app_data.puzzle, user_pwd) == true)
+ app_data.solution_revealed = true;
+ /* password is incorrect */
+ else
+ {
+ app_data.solution_revealed = false;
+ GtkWidget *errordlg ;
+ errordlg = gtk_message_dialog_new (GTK_WINDOW(main_window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ WRONG_PASSWORD);
+ gtk_dialog_run (GTK_DIALOG(errordlg));
+ gtk_widget_destroy (errordlg);
+ }
+ }
+
+ gtk_widget_destroy (password_text);
+ gtk_widget_destroy (password_dialog);
+ g_object_unref (builder);
+ }
+ else
+ app_data.solution_revealed = true;
+
+ gtk_widget_queue_draw_area (GTK_WIDGET(area), 0, 0,
+ app_data.puzzle.grid_size*GRID_PIXELS+10,
+ app_data.puzzle.grid_size*GRID_PIXELS+10);
+