70
66
TotemScreenshotPlugin,
71
67
totem_screenshot_plugin)
70
TotemScreenshotPlugin *plugin;
75
screenshot_save_job_free (ScreenshotSaveJob *job)
77
g_object_unref (job->pixbuf);
78
g_slice_free (ScreenshotSaveJob, job);
82
save_pixbuf_ready_cb (GObject *source,
87
ScreenshotSaveJob *job = (ScreenshotSaveJob *) user_data;
89
if (gdk_pixbuf_save_to_stream_finish (res, &error) == FALSE) {
90
g_warning ("Couldn't save screenshot: %s", error->message);
94
screenshot_save_job_free (job);
98
save_file_create_ready_cb (GObject *source,
102
GFileOutputStream *stream;
103
GError *error = NULL;
104
ScreenshotSaveJob *job = (ScreenshotSaveJob *) user_data;
106
stream = g_file_create_finish (G_FILE (source), res, &error);
107
if (stream == NULL) {
110
path = g_file_get_path (G_FILE (source));
111
g_warning ("Couldn't create a new file at '%s': %s", path, error->message);
114
g_error_free (error);
115
screenshot_save_job_free (job);
119
gdk_pixbuf_save_to_stream_async (job->pixbuf,
120
G_OUTPUT_STREAM (stream),
122
save_pixbuf_ready_cb, job,
123
"tEXt::Software", "totem",
126
g_object_unref (stream);
130
screenshot_name_ready_cb (GObject *source,
136
GError *error = NULL;
137
ScreenshotSaveJob *job = (ScreenshotSaveJob *) user_data;
139
save_path = screenshot_build_filename_finish (res, &error);
140
if (save_path == NULL) {
141
g_warning ("Could not find a valid location to save the screenshot: %s", error->message);
142
g_error_free (error);
143
screenshot_save_job_free (job);
147
save_file = g_file_new_for_path (save_path);
150
g_file_create_async (save_file,
154
save_file_create_ready_cb, job);
156
g_object_unref (save_file);
160
flash_area_done_cb (GObject *source_object,
166
variant = g_dbus_proxy_call_finish (G_DBUS_PROXY (source_object), res, NULL);
168
g_variant_unref (variant);
172
flash_area (GtkWidget *widget)
178
window = gtk_widget_get_window (widget);
179
gdk_window_get_origin (window, &x, &y);
180
w = gdk_window_get_width (window);
181
h = gdk_window_get_height (window);
183
proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
184
G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
185
G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS |
186
G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
189
"/org/gnome/Shell/Screenshot",
190
"org.gnome.Shell.Screenshot",
193
g_warning ("no proxy");
195
g_dbus_proxy_call (proxy, "org.gnome.Shell.Screenshot.FlashArea",
196
g_variant_new ("(iiii)", x, y, w, h),
197
G_DBUS_CALL_FLAGS_NO_AUTO_START,
74
205
take_screenshot_action_cb (GtkAction *action, TotemScreenshotPlugin *self)
76
207
TotemScreenshotPluginPrivate *priv = self->priv;
77
208
GdkPixbuf *pixbuf;
79
209
GError *err = NULL;
210
ScreenshotSaveJob *job;
81
213
if (bacon_video_widget_get_logo_mode (priv->bvw) != FALSE)
225
flash_area (GTK_WIDGET (priv->bvw));
93
227
pixbuf = bacon_video_widget_get_current_frame (priv->bvw);
94
228
if (pixbuf == NULL) {
95
229
totem_action_error (priv->totem, _("Totem could not get a screenshot of the video."), _("This is not supposed to happen; please file a bug report."));
99
dialog = totem_screenshot_new (priv->totem, pixbuf);
101
gtk_dialog_run (GTK_DIALOG (dialog));
102
gtk_widget_destroy (dialog);
103
g_object_unref (pixbuf);
233
video_name = totem_get_short_title (self->priv->totem);
235
job = g_slice_new (ScreenshotSaveJob);
237
job->pixbuf = pixbuf;
239
screenshot_build_filename_async (NULL, video_name, screenshot_name_ready_cb, job);
194
331
TotemScreenshotPlugin *self = TOTEM_SCREENSHOT_PLUGIN (plugin);
195
332
TotemScreenshotPluginPrivate *priv = self->priv;
196
333
const GtkActionEntry menu_entries[] = {
197
{ "take-screenshot", "camera-photo", N_("Take _Screenshot..."), "<Ctrl>S", N_("Take a screenshot"), G_CALLBACK (take_screenshot_action_cb) },
334
{ "take-screenshot", "camera-photo", N_("Take _Screenshot"), "<Ctrl><Alt>S", N_("Take a screenshot"), G_CALLBACK (take_screenshot_action_cb) },
198
335
{ "take-gallery", NULL, N_("Create Screenshot _Gallery..."), NULL, N_("Create a gallery of screenshots"), G_CALLBACK (take_gallery_action_cb) }
231
368
priv->ui_merge_id = gtk_ui_manager_new_merge_id (manager);
232
369
gtk_ui_manager_add_ui (manager, priv->ui_merge_id,
233
"/ui/tmw-menubar/edit/repeat-mode", "take-screenshot",
370
"/ui/tmw-menubar/edit/clear-playlist", "take-screenshot",
234
371
"take-screenshot", GTK_UI_MANAGER_AUTO, TRUE);
235
372
gtk_ui_manager_add_ui (manager, priv->ui_merge_id,
236
"/ui/tmw-menubar/edit/repeat-mode", "take-gallery",
373
"/ui/tmw-menubar/edit/clear-playlist", "take-gallery",
237
374
"take-gallery", GTK_UI_MANAGER_AUTO, TRUE);
238
375
gtk_ui_manager_add_ui (manager, priv->ui_merge_id,
239
"/ui/tmw-menubar/edit/repeat-mode", NULL,
376
"/ui/tmw-menubar/edit/clear-playlist", NULL,
240
377
NULL, GTK_UI_MANAGER_SEPARATOR, TRUE);
242
379
/* Set up a GSettings watch for lockdown keys */