static void prepare_screenshot (void) { AsyncExistenceJob *job; job = g_slice_new0 (AsyncExistenceJob); job->base_uris[0] = last_save_dir; /* we'll have to free these two */ job->base_uris[1] = get_desktop_dir (); job->base_uris[2] = g_strconcat ("file://", g_get_tmp_dir (), NULL); job->iteration = 0; job->type = TEST_LAST_DIR; job->window = find_current_window (&window_title); job->rectangle = find_rectangle (); /* Check if the area selection was cancelled */ if (job->rectangle && (job->rectangle->width == 0 || job->rectangle->height == 0)) { async_existence_job_free (job); gtk_main_quit (); return; } g_io_scheduler_push_job (try_check_file, job, NULL, 0, NULL); }
static void finish_prepare_screenshot (GdkRectangle *rectangle) { GdkRectangle rect; GdkWindow *window; window = find_current_window (); screenshot = screenshot_get_pixbuf (window, rectangle); if (screenshot_config->take_window_shot) { switch (screenshot_config->border_effect[0]) { case 's': /* shadow */ screenshot_add_shadow (&screenshot); break; case 'b': /* border */ screenshot_add_border (&screenshot); break; case 'n': /* none */ default: break; } } /* release now the lock, it was acquired when we were finding the window */ screenshot_release_lock (); if (screenshot == NULL) { screenshot_show_error_dialog (NULL, _("Unable to take a screenshot of the current window"), NULL); exit (1); } flash = cheese_flash_new (); if (rectangle != NULL) rect = *rectangle; else screenshot_get_window_rect (window, &rect); cheese_flash_fire (flash, &rect); play_sound_effect (window); g_object_unref (flash); if (screenshot_config->copy_to_clipboard) { screenshot_save_to_clipboard (); gtk_main_quit (); return; } screenshot_ensure_icc_profile (window); screenshot_build_filename_async (screenshot_config->last_save_dir, build_filename_ready_cb, screenshot); }