128
129
GtkWidget *button_effects;
129
130
GtkWidget *button_photo;
130
131
GtkWidget *button_video;
132
GtkWidget *button_burst;
131
133
GtkWidget *button_effects_fullscreen;
132
134
GtkWidget *button_photo_fullscreen;
133
135
GtkWidget *button_video_fullscreen;
136
GtkWidget *button_burst_fullscreen;
134
137
GtkWidget *button_exit_fullscreen;
136
139
GtkWidget *image_take_photo;
436
442
g_object_unref (cheese_window->actions_preferences);
437
443
g_object_unref (cheese_window->actions_file);
438
444
g_object_unref (cheese_window->actions_video);
445
g_object_unref (cheese_window->actions_burst);
439
446
g_object_unref (cheese_window->actions_fullscreen);
440
447
g_object_unref (cheese_window->gconf);
1163
1174
gtk_widget_set_sensitive (GTK_WIDGET (cheese_window->take_picture_fullscreen), FALSE);
1164
1175
gtk_action_group_set_sensitive (cheese_window->actions_photo, FALSE);
1165
1176
gtk_action_group_set_sensitive (cheese_window->actions_video, FALSE);
1177
gtk_action_group_set_sensitive (cheese_window->actions_burst, FALSE);
1296
cheese_window_take_burst_photo (gpointer data)
1299
CheeseWindow *cheese_window = (CheeseWindow *) data;
1301
g_object_get (cheese_window->gconf, "gconf_prop_countdown", &countdown, NULL);
1304
if (cheese_window->isFullscreen)
1306
cheese_countdown_start ((CheeseCountdown *) cheese_window->countdown_fullscreen,
1307
cheese_window_countdown_picture_cb,
1308
cheese_window_countdown_hide_cb,
1309
(gpointer) cheese_window);
1310
gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->fullscreen_bar), 1);
1312
/* show bar, start timeout
1313
* ATTENTION: if the countdown is longer than FULLSCREEN_TIMEOUT,
1314
* the bar will disapear before the countdown ends
1316
cheese_window_fullscreen_show_bar (cheese_window);
1317
cheese_window_fullscreen_set_timeout (cheese_window);
1321
cheese_countdown_start ((CheeseCountdown *) cheese_window->countdown,
1322
cheese_window_countdown_picture_cb,
1323
cheese_window_countdown_hide_cb,
1324
(gpointer) cheese_window);
1325
gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook_bar), 1);
1330
cheese_window_countdown_picture_cb (cheese_window);
1333
gtk_widget_set_sensitive (cheese_window->take_picture, FALSE);
1334
gtk_widget_set_sensitive (cheese_window->take_picture_fullscreen, FALSE);
1336
cheese_window->repeat_count--;
1337
if (cheese_window->repeat_count <= 0)
1284
1345
cheese_window_action_button_clicked_cb (GtkWidget *widget, CheeseWindow *cheese_window)
1288
1349
if (cheese_window->webcam_mode == WEBCAM_MODE_PHOTO)
1351
cheese_window->repeat_count = 1;
1352
cheese_window_take_burst_photo (cheese_window);
1354
/* FIXME: set menu inactive */
1356
else if (cheese_window->webcam_mode == WEBCAM_MODE_BURST)
1358
guint repeat_delay = 1000;
1290
1359
gboolean countdown;
1361
g_object_get (cheese_window->gconf, "gconf_prop_burst_delay", &repeat_delay, NULL);
1362
g_object_get (cheese_window->gconf, "gconf_prop_burst_repeat", &cheese_window->repeat_count, NULL);
1291
1363
g_object_get (cheese_window->gconf, "gconf_prop_countdown", &countdown, NULL);
1294
if (cheese_window->isFullscreen)
1296
cheese_countdown_start ((CheeseCountdown *) cheese_window->countdown_fullscreen,
1297
cheese_window_countdown_picture_cb,
1298
cheese_window_countdown_hide_cb,
1299
(gpointer) cheese_window);
1300
gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->fullscreen_bar), 1);
1302
/* show bar, start timeout
1303
* ATTENTION: if the countdown is longer than FULLSCREEN_TIMEOUT,
1304
* the bar will disapear before the countdown ends
1306
cheese_window_fullscreen_show_bar (cheese_window);
1307
cheese_window_fullscreen_set_timeout (cheese_window);
1311
cheese_countdown_start ((CheeseCountdown *) cheese_window->countdown,
1312
cheese_window_countdown_picture_cb,
1313
cheese_window_countdown_hide_cb,
1314
(gpointer) cheese_window);
1315
gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook_bar), 1);
1320
cheese_window_countdown_picture_cb (cheese_window);
1323
gtk_widget_set_sensitive (cheese_window->take_picture, FALSE);
1324
gtk_widget_set_sensitive (cheese_window->take_picture_fullscreen, FALSE);
1326
/* FIXME: set menu inactive */
1365
if (countdown && repeat_delay < 5000)
1367
/* A countdown takes 4 seconds, leave some headroom before repeating it.
1368
* Magic number chosen via expiriment on Netbook */
1369
repeat_delay = 5000;
1372
g_timeout_add (repeat_delay, &cheese_window_take_burst_photo, cheese_window);
1328
1374
else if (cheese_window->webcam_mode == WEBCAM_MODE_VIDEO)
1395
1441
static const GtkRadioActionEntry action_entries_toggle[] = {
1396
1442
{"Photo", NULL, N_("_Photo"), NULL, NULL, 0},
1397
1443
{"Video", NULL, N_("_Video"), NULL, NULL, 1},
1444
{"Burst", NULL, N_("_Burst"), NULL, NULL, 2},
1400
1447
static const GtkActionEntry action_entries_file[] = {
1411
1458
static const GtkActionEntry action_entries_photo[] = {
1412
{"TakePhoto", NULL, N_("_Take a photo"), "space", NULL, G_CALLBACK (cheese_window_action_button_clicked_cb)},
1459
{"TakePhoto", NULL, N_("_Take a Photo"), "space", NULL, G_CALLBACK (cheese_window_action_button_clicked_cb)},
1415
1462
static const GtkToggleActionEntry action_entries_video[] = {
1416
1463
{"TakeVideo", NULL, N_("_Recording"), "space", NULL, G_CALLBACK (cheese_window_action_button_clicked_cb), FALSE},
1466
static const GtkActionEntry action_entries_burst[] = {
1467
{"TakeBurst", NULL, N_("_Take multiple Photos"), "space", NULL, G_CALLBACK (cheese_window_action_button_clicked_cb)},
1419
1470
static const GtkActionEntry action_entries_account_photo[] = {
1420
1471
{"SetAsAccountPhoto", NULL, N_("_Set As Account Photo"), NULL, NULL, G_CALLBACK (cheese_window_cmd_set_about_me_photo)},
1452
1503
gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo_fullscreen), TRUE);
1453
1504
gtk_action_group_set_sensitive (cheese_window->actions_photo, TRUE);
1454
1505
gtk_action_group_set_sensitive (cheese_window->actions_video, FALSE);
1506
gtk_action_group_set_sensitive (cheese_window->actions_burst, FALSE);
1508
else if (strcmp (gtk_action_get_name (GTK_ACTION (current)), "Burst") == 0)
1510
cheese_window->webcam_mode = WEBCAM_MODE_BURST;
1512
str = g_strconcat ("<b>", _("_Take multiple Photos"), "</b>", NULL);
1513
gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo), g_strdup (str));
1514
gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo), TRUE);
1515
gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo_fullscreen), g_strdup (str));
1516
gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo_fullscreen), TRUE);
1517
gtk_action_group_set_sensitive (cheese_window->actions_burst, TRUE);
1518
gtk_action_group_set_sensitive (cheese_window->actions_video, FALSE);
1519
gtk_action_group_set_sensitive (cheese_window->actions_photo, FALSE);
1464
1529
gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo_fullscreen), TRUE);
1465
1530
gtk_action_group_set_sensitive (cheese_window->actions_photo, FALSE);
1466
1531
gtk_action_group_set_sensitive (cheese_window->actions_video, TRUE);
1532
gtk_action_group_set_sensitive (cheese_window->actions_burst, FALSE);
1565
1631
cheese_window->button_effects = GTK_WIDGET (gtk_builder_get_object (builder, "button_effects"));
1566
1632
cheese_window->button_photo = GTK_WIDGET (gtk_builder_get_object (builder, "button_photo"));
1567
1633
cheese_window->button_video = GTK_WIDGET (gtk_builder_get_object (builder, "button_video"));
1634
cheese_window->button_burst = GTK_WIDGET (gtk_builder_get_object (builder, "button_burst"));
1568
1635
cheese_window->image_take_photo = GTK_WIDGET (gtk_builder_get_object (builder, "image_take_photo"));
1569
1636
cheese_window->label_effects = GTK_WIDGET (gtk_builder_get_object (builder, "label_effects"));
1570
1637
cheese_window->label_photo = GTK_WIDGET (gtk_builder_get_object (builder, "label_photo"));
1587
1654
cheese_window->button_effects_fullscreen = GTK_WIDGET (gtk_builder_get_object (builder, "button_effects_fullscreen"));
1588
1655
cheese_window->button_photo_fullscreen = GTK_WIDGET (gtk_builder_get_object (builder, "button_photo_fullscreen"));
1589
1656
cheese_window->button_video_fullscreen = GTK_WIDGET (gtk_builder_get_object (builder, "button_video_fullscreen"));
1657
cheese_window->button_burst_fullscreen = GTK_WIDGET (gtk_builder_get_object (builder, "button_burst_fullscreen"));
1590
1658
cheese_window->take_picture_fullscreen = GTK_WIDGET (gtk_builder_get_object (builder, "take_picture_fullscreen"));
1591
1659
cheese_window->label_take_photo_fullscreen =
1592
1660
GTK_WIDGET (gtk_builder_get_object (builder, "label_take_photo_fullscreen"));
1675
1743
gtk_widget_realize (cheese_window->screen);
1676
1744
GdkWindow *win = gtk_widget_get_window (cheese_window->screen);
1677
if (!gdk_window_ensure_native (win)) {
1745
if (!gdk_window_ensure_native (win))
1678
1747
/* FIXME: this breaks offscreen stuff, we should really find
1679
1748
* another way to embed video that doesn't require an XID */
1680
1750
/* abort: no native window, no xoverlay, no cheese. */
1681
1751
g_error ("Could not create a native X11 window for the drawing area");
1726
1796
action_entries_video,
1727
1797
G_N_ELEMENTS (action_entries_video));
1728
1798
gtk_action_group_set_sensitive (cheese_window->actions_video, FALSE);
1799
cheese_window->actions_burst = cheese_window_action_group_new (cheese_window,
1801
action_entries_burst,
1802
G_N_ELEMENTS (action_entries_burst));
1803
gtk_action_group_set_sensitive (cheese_window->actions_burst, FALSE);
1729
1804
cheese_window->actions_account_photo = cheese_window_action_group_new (cheese_window,
1730
1805
"ActionsAccountPhoto",
1731
1806
action_entries_account_photo,
1837
1912
gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_video), action);
1838
1913
gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_video_fullscreen), action);
1915
action = gtk_ui_manager_get_action (cheese_window->ui_manager, "/MainMenu/Cheese/Burst");
1916
gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_burst), action);
1917
gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_burst_fullscreen), action);
1841
1920
/* Default handlers for closing the application */
1842
1921
g_signal_connect (cheese_window->window, "destroy",