| 397 gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); |
397 gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); |
| 398 gtk_window_present_with_time(GTK_WINDOW(dialog), GDK_CURRENT_TIME); |
398 gtk_window_present_with_time(GTK_WINDOW(dialog), GDK_CURRENT_TIME); |
| 399 } |
399 } |
| 400 |
400 |
| 401 static void |
401 static void |
| 402 pidgin_whiteboard_save_response(GtkNativeDialog *self, gint response_id, |
402 pidgin_whiteboard_save_response(GObject *obj, GAsyncResult *result, |
| 403 gpointer data) |
403 gpointer data) |
| 404 { |
404 { |
| 405 PidginWhiteboard *gtkwb = (PidginWhiteboard *)data; |
405 PidginWhiteboard *gtkwb = (PidginWhiteboard *)data; |
| |
406 GFile *file = NULL; |
| |
407 char *filename = NULL; |
| 406 GdkPixbuf *pixbuf; |
408 GdkPixbuf *pixbuf; |
| 407 |
409 gboolean success; |
| 408 if(response_id == GTK_RESPONSE_ACCEPT) { |
410 |
| 409 gboolean success; |
411 file = gtk_file_dialog_save_finish(GTK_FILE_DIALOG(obj), result, NULL); |
| 410 GFile *file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(self)); |
412 if(file == NULL) { |
| 411 gchar *filename = g_file_get_path(file); |
413 return; |
| 412 |
414 } |
| 413 pixbuf = gdk_pixbuf_get_from_surface(gtkwb->surface, 0, 0, |
415 |
| 414 gtkwb->width, gtkwb->height); |
416 filename = g_file_get_path(file); |
| 415 |
417 pixbuf = gdk_pixbuf_get_from_surface(gtkwb->surface, 0, 0, |
| 416 success = gdk_pixbuf_save(pixbuf, filename, "png", NULL, |
418 gtkwb->width, gtkwb->height); |
| 417 "compression", "9", NULL); |
419 |
| 418 g_object_unref(pixbuf); |
420 success = gdk_pixbuf_save(pixbuf, filename, "png", NULL, |
| 419 |
421 "compression", "9", NULL); |
| 420 if (success) { |
422 g_object_unref(pixbuf); |
| 421 purple_debug_info("gtkwhiteboard", "whiteboard saved to \"%s\"", |
423 |
| 422 filename); |
424 if (success) { |
| 423 } else { |
425 purple_debug_info("gtkwhiteboard", "whiteboard saved to \"%s\"", |
| 424 purple_notify_error(NULL, _("Whiteboard"), |
426 filename); |
| 425 _("Unable to save the file"), NULL, NULL); |
427 } else { |
| 426 purple_debug_error("gtkwhiteboard", "whiteboard " |
428 purple_notify_error(NULL, _("Whiteboard"), |
| 427 "couldn't be saved to \"%s\"", filename); |
429 _("Unable to save the file"), NULL, NULL); |
| 428 } |
430 purple_debug_error("gtkwhiteboard", |
| 429 |
431 "whiteboard couldn't be saved to \"%s\"", filename); |
| 430 g_free(filename); |
432 } |
| 431 g_object_unref(file); |
433 |
| 432 } |
434 g_free(filename); |
| 433 |
435 g_object_unref(file); |
| 434 g_object_unref(self); |
436 } |
| 435 } |
|
| 436 |
|
| 437 |
437 |
| 438 static void |
438 static void |
| 439 pidgin_whiteboard_button_save_press(G_GNUC_UNUSED GtkWidget *widget, |
439 pidgin_whiteboard_button_save_press(G_GNUC_UNUSED GtkWidget *widget, |
| 440 gpointer _gtkwb) |
440 gpointer _gtkwb) |
| 441 { |
441 { |
| 442 PidginWhiteboard *gtkwb = _gtkwb; |
442 PidginWhiteboard *gtkwb = _gtkwb; |
| 443 GtkFileChooserNative *chooser; |
443 GtkFileDialog *dialog; |
| 444 |
444 |
| 445 chooser = gtk_file_chooser_native_new(_("Save File"), GTK_WINDOW(gtkwb), |
445 dialog = gtk_file_dialog_new(); |
| 446 GTK_FILE_CHOOSER_ACTION_SAVE, |
446 gtk_file_dialog_set_title(dialog, _("Save File")); |
| 447 _("_Save"), _("_Cancel")); |
447 gtk_file_dialog_set_modal(dialog, TRUE); |
| 448 |
448 gtk_file_dialog_set_initial_name(dialog, "whiteboard.png"); |
| 449 gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(chooser), |
449 gtk_file_dialog_save(dialog, GTK_WINDOW(gtkwb), NULL, |
| 450 "whiteboard.png"); |
450 pidgin_whiteboard_save_response, gtkwb); |
| 451 |
451 g_object_unref(dialog); |
| 452 g_signal_connect(chooser, "response", |
|
| 453 G_CALLBACK(pidgin_whiteboard_save_response), gtkwb); |
|
| 454 |
|
| 455 gtk_native_dialog_show(GTK_NATIVE_DIALOG(chooser)); |
|
| 456 } |
452 } |
| 457 |
453 |
| 458 static void |
454 static void |
| 459 notify_color_cb(GObject *obj, G_GNUC_UNUSED GParamSpec *pspec, gpointer data) { |
455 notify_color_cb(GObject *obj, G_GNUC_UNUSED GParamSpec *pspec, gpointer data) { |
| 460 PidginWhiteboard *gtkwb = data; |
456 PidginWhiteboard *gtkwb = data; |