174
180
int audio_play_counter;
183
gboolean is_bursting;
176
185
CheeseFlash *flash;
188
static void cheese_window_action_button_clicked_cb (GtkWidget *widget, CheeseWindow *cheese_window);
180
191
cheese_window_bring_to_front (gpointer data)
182
193
CheeseWindow *cheese_window = data;
183
guint32 startup_timestamp = gdk_x11_get_server_time (GTK_WIDGET (cheese_window->window)->window);
194
guint32 startup_timestamp = gdk_x11_get_server_time (gtk_widget_get_window (GTK_WIDGET (cheese_window->window)));
185
gdk_x11_window_set_user_time (GTK_WIDGET (cheese_window->window)->window, startup_timestamp);
196
gdk_x11_window_set_user_time (gtk_widget_get_window (GTK_WIDGET (cheese_window->window)), startup_timestamp);
187
198
gtk_window_present (GTK_WINDOW (cheese_window->window));
190
/* Make url in about dialog clickable */
192
cheese_about_dialog_handle_url (GtkAboutDialog *dialog, const char *url, gpointer data)
194
GError *error = NULL;
195
GtkWidget *error_dialog;
198
screen = gtk_widget_get_screen (GTK_WIDGET (dialog));
199
gtk_show_uri (screen, url, gtk_get_current_event_time (), &error);
202
error_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog),
203
GTK_DIALOG_DESTROY_WITH_PARENT,
204
GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
205
_("Failed to open browser to show:\n%s"), url);
206
gtk_dialog_run (GTK_DIALOG (error_dialog));
207
gtk_widget_destroy (error_dialog);
208
g_error_free (error);
212
/* Make email in about dialog clickable */
214
cheese_about_dialog_handle_email (GtkAboutDialog *dialog, const char *email, gpointer data)
217
GError *error = NULL;
218
GtkWidget *error_dialog;
221
uri = g_strconcat ("mailto:", email, NULL);
223
screen = gtk_widget_get_screen (GTK_WIDGET (dialog));
224
gtk_show_uri (screen, uri, gtk_get_current_event_time (), &error);
227
error_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog),
228
GTK_DIALOG_DESTROY_WITH_PARENT,
229
GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
230
_("Failed to open email client to send message to:\n%s"), email);
231
gtk_dialog_run (GTK_DIALOG (error_dialog));
232
gtk_widget_destroy (error_dialog);
233
g_error_free (error);
239
202
audio_play_get_filename (CheeseWindow *cheese_window)
327
cheese_window_toggle_wide_mode (GtkWidget *widget, CheeseWindow *cheese_window)
329
gboolean toggled = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (widget));
331
gtk_widget_set_size_request (cheese_window->notebook,
332
GTK_WIDGET (cheese_window->notebook)->allocation.width,
333
GTK_WIDGET (cheese_window->notebook)->allocation.height);
335
/* set a single column in wide mode */
336
gtk_icon_view_set_columns (GTK_ICON_VIEW (cheese_window->thumb_view), toggled ? 1 : G_MAXINT);
338
/* switch thumb_nav mode */
339
eog_thumb_nav_set_vertical (EOG_THUMB_NAV (cheese_window->thumb_nav), toggled);
341
/* reparent thumb_view */
342
g_object_ref (cheese_window->thumb_scrollwindow);
345
gtk_container_remove (GTK_CONTAINER (cheese_window->video_vbox), cheese_window->thumb_scrollwindow);
346
gtk_container_add (GTK_CONTAINER (cheese_window->netbook_alignment), cheese_window->thumb_scrollwindow);
347
g_object_unref (cheese_window->thumb_scrollwindow);
351
gtk_container_remove (GTK_CONTAINER (cheese_window->netbook_alignment), cheese_window->thumb_scrollwindow);
352
gtk_box_pack_end (GTK_BOX (cheese_window->video_vbox), cheese_window->thumb_scrollwindow, FALSE, FALSE, 0);
353
g_object_unref (cheese_window->thumb_scrollwindow);
354
eog_thumb_nav_set_policy (EOG_THUMB_NAV (cheese_window->thumb_nav),
355
GTK_POLICY_AUTOMATIC,
361
/* NOTE: be really carefull when changing the ui file to update spacing
362
* values here too! */
365
g_object_set (G_OBJECT (cheese_window->toolbar_alignment),
366
"bottom-padding", 10, NULL);
367
g_object_set (G_OBJECT (cheese_window->togglegroup_alignment),
368
"left-padding", 6, NULL);
369
g_object_set (G_OBJECT (cheese_window->effect_button_alignment),
370
"right-padding", 0, NULL);
371
g_object_set (G_OBJECT (cheese_window->netbook_alignment),
372
"left-padding", 6, NULL);
376
g_object_set (G_OBJECT (cheese_window->toolbar_alignment),
377
"bottom-padding", 6, NULL);
378
g_object_set (G_OBJECT (cheese_window->togglegroup_alignment),
379
"left-padding", 24, NULL);
380
g_object_set (G_OBJECT (cheese_window->effect_button_alignment),
381
"right-padding", 24, NULL);
382
g_object_set (G_OBJECT (cheese_window->netbook_alignment),
383
"left-padding", 0, NULL);
386
gtk_container_resize_children (GTK_CONTAINER (cheese_window->thumb_scrollwindow));
389
gtk_widget_size_request (cheese_window->window, &req);
390
gtk_window_resize (GTK_WINDOW (cheese_window->window), req.width, req.height);
391
gtk_widget_set_size_request (cheese_window->notebook, -1, -1);
393
g_object_set (cheese_window->gconf, "gconf_prop_wide_mode", toggled, NULL);
334
397
cheese_window_toggle_fullscreen (GtkWidget *widget, CheeseWindow *cheese_window)
336
399
GdkColor bg_color = {0, 0, 0, 0};
961
1032
cheese_window_cmd_about (GtkAction *action, CheeseWindow *cheese_window)
963
1034
static const char *authors[] = {
964
"daniel g. siegel <dgsiegel@gmail.com>",
1035
"daniel g. siegel <dgsiegel@gnome.org>",
965
1036
"Jaap A. Haitsma <jaap@haitsma.org>",
1037
"Filippo Argiolas <fargiolas@gnome.org>",
1039
"Aidan Delaney <a.j.delaney@brighton.ac.uk>",
967
1040
"Alex \"weej\" Jones <alex@weej.com>",
968
1041
"Andrea Cimitan <andrea.cimitan@gmail.com>",
969
1042
"Baptiste Mille-Mathias <bmm80@free.fr>",
970
1043
"Cosimo Cecchi <anarki@lilik.it>",
971
1044
"Diego Escalante Urrelo <dieguito@gmail.com>",
972
1045
"Felix Kaser <f.kaser@gmx.net>",
973
"Filippo Argiolas <filippo.argiolas@gmail.com>",
974
1046
"Gintautas Miliauskas <gintas@akl.lt>",
1047
"Hans de Goede <jwrdegoede@fedoraproject.org>",
975
1048
"James Liggett <jrliggett@cox.net>",
976
1049
"Luca Ferretti <elle.uca@libero.it>",
977
1050
"Mirco \"MacSlow\" Müller <macslow@bangang.de>",
1387
cheese_window_take_photo (gpointer data)
1390
CheeseWindow *cheese_window = (CheeseWindow *) data;
1392
/* return if burst mode was cancelled */
1393
if (cheese_window->webcam_mode == WEBCAM_MODE_BURST &&
1394
!cheese_window->is_bursting && cheese_window->repeat_count <= 0)
1399
g_object_get (cheese_window->gconf, "gconf_prop_countdown", &countdown, NULL);
1402
if (cheese_window->isFullscreen)
1404
cheese_countdown_start ((CheeseCountdown *) cheese_window->countdown_fullscreen,
1405
cheese_window_countdown_picture_cb,
1406
cheese_window_countdown_hide_cb,
1407
(gpointer) cheese_window);
1408
gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->fullscreen_bar), 1);
1410
/* show bar, start timeout
1411
* ATTENTION: if the countdown is longer than FULLSCREEN_TIMEOUT,
1412
* the bar will disapear before the countdown ends
1414
cheese_window_fullscreen_show_bar (cheese_window);
1415
cheese_window_fullscreen_set_timeout (cheese_window);
1419
cheese_countdown_start ((CheeseCountdown *) cheese_window->countdown,
1420
cheese_window_countdown_picture_cb,
1421
cheese_window_countdown_hide_cb,
1422
(gpointer) cheese_window);
1423
gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook_bar), 1);
1428
cheese_window_countdown_picture_cb (cheese_window);
1431
gtk_widget_set_sensitive (cheese_window->take_picture, FALSE);
1432
gtk_widget_set_sensitive (cheese_window->take_picture_fullscreen, FALSE);
1434
if (cheese_window->webcam_mode == WEBCAM_MODE_BURST)
1436
guint repeat_delay = 1000;
1437
gboolean countdown = FALSE;
1439
g_object_get (cheese_window->gconf, "gconf_prop_burst_delay", &repeat_delay, NULL);
1440
g_object_get (cheese_window->gconf, "gconf_prop_countdown", &countdown, NULL);
1442
if (countdown && repeat_delay < 5000)
1444
/* A countdown takes 4 seconds, leave some headroom before repeating it.
1445
* Magic number chosen via expiriment on Netbook */
1446
repeat_delay = 5000;
1449
/* start burst mode phot series */
1450
if (!cheese_window->is_bursting)
1452
g_timeout_add (repeat_delay, cheese_window_take_photo, cheese_window);
1453
cheese_window->is_bursting = TRUE;
1455
cheese_window->repeat_count--;
1456
if (cheese_window->repeat_count > 0)
1461
cheese_window->is_bursting = FALSE;
1293
1467
cheese_window_action_button_clicked_cb (GtkWidget *widget, CheeseWindow *cheese_window)
1297
if (cheese_window->webcam_mode == WEBCAM_MODE_PHOTO)
1300
g_object_get (cheese_window->gconf, "gconf_prop_countdown", &countdown, NULL);
1303
if (cheese_window->isFullscreen)
1305
cheese_countdown_start ((CheeseCountdown *) cheese_window->countdown_fullscreen,
1306
cheese_window_countdown_picture_cb,
1307
cheese_window_countdown_hide_cb,
1308
(gpointer) cheese_window);
1309
gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->fullscreen_bar), 1);
1311
/* show bar, start timeout
1312
* ATTENTION: if the countdown is longer than FULLSCREEN_TIMEOUT,
1313
* the bar will disapear before the countdown ends
1315
cheese_window_fullscreen_show_bar (cheese_window);
1316
cheese_window_fullscreen_set_timeout (cheese_window);
1320
cheese_countdown_start ((CheeseCountdown *) cheese_window->countdown,
1321
cheese_window_countdown_picture_cb,
1322
cheese_window_countdown_hide_cb,
1323
(gpointer) cheese_window);
1324
gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook_bar), 1);
1329
cheese_window_countdown_picture_cb (cheese_window);
1332
gtk_widget_set_sensitive (cheese_window->take_picture, FALSE);
1333
gtk_widget_set_sensitive (cheese_window->take_picture_fullscreen, FALSE);
1335
/* FIXME: set menu inactive */
1337
else if (cheese_window->webcam_mode == WEBCAM_MODE_VIDEO)
1339
if (!cheese_window->recording)
1471
switch (cheese_window->webcam_mode)
1473
case WEBCAM_MODE_BURST:
1475
/* ignore keybindings and other while bursting */
1476
if (cheese_window->is_bursting)
1341
1480
gtk_action_group_set_sensitive (cheese_window->actions_effects, FALSE);
1342
1481
gtk_action_group_set_sensitive (cheese_window->actions_toggle, FALSE);
1343
str = g_strconcat ("<b>", _("_Stop Recording"), "</b>", NULL);
1344
gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo), str);
1345
gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo_fullscreen), str);
1347
gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo), TRUE);
1348
gtk_image_set_from_stock (GTK_IMAGE (cheese_window->image_take_photo), GTK_STOCK_MEDIA_STOP, GTK_ICON_SIZE_BUTTON);
1349
gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo_fullscreen), TRUE);
1350
gtk_image_set_from_stock (GTK_IMAGE (cheese_window->image_take_photo_fullscreen),
1351
GTK_STOCK_MEDIA_STOP, GTK_ICON_SIZE_BUTTON);
1353
cheese_window->video_filename = cheese_fileutil_get_new_media_filename (cheese_window->fileutil,
1355
cheese_webcam_start_video_recording (cheese_window->webcam, cheese_window->video_filename);
1357
cheese_window->recording = TRUE;
1361
cheese_window_stop_recording (cheese_window);
1482
g_object_get (cheese_window->gconf, "gconf_prop_burst_repeat", &cheese_window->repeat_count, NULL); /* reset burst counter */
1483
case WEBCAM_MODE_PHOTO:
1484
cheese_window_take_photo (cheese_window);
1486
case WEBCAM_MODE_VIDEO:
1487
if (!cheese_window->recording)
1489
gtk_action_group_set_sensitive (cheese_window->actions_effects, FALSE);
1490
gtk_action_group_set_sensitive (cheese_window->actions_toggle, FALSE);
1491
str = g_strconcat ("<b>", _("_Stop Recording"), "</b>", NULL);
1492
gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo), str);
1493
gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo_fullscreen), str);
1495
gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo), TRUE);
1496
gtk_image_set_from_stock (GTK_IMAGE (
1497
cheese_window->image_take_photo), GTK_STOCK_MEDIA_STOP, GTK_ICON_SIZE_BUTTON);
1498
gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo_fullscreen), TRUE);
1499
gtk_image_set_from_stock (GTK_IMAGE (cheese_window->image_take_photo_fullscreen),
1500
GTK_STOCK_MEDIA_STOP, GTK_ICON_SIZE_BUTTON);
1502
cheese_window->video_filename = cheese_fileutil_get_new_media_filename (cheese_window->fileutil,
1504
cheese_webcam_start_video_recording (cheese_window->webcam, cheese_window->video_filename);
1506
cheese_window->recording = TRUE;
1510
cheese_window_stop_recording (cheese_window);
1514
g_assert_not_reached ();
1574
1743
cheese_window->button_effects = GTK_WIDGET (gtk_builder_get_object (builder, "button_effects"));
1575
1744
cheese_window->button_photo = GTK_WIDGET (gtk_builder_get_object (builder, "button_photo"));
1576
1745
cheese_window->button_video = GTK_WIDGET (gtk_builder_get_object (builder, "button_video"));
1746
cheese_window->button_burst = GTK_WIDGET (gtk_builder_get_object (builder, "button_burst"));
1577
1747
cheese_window->image_take_photo = GTK_WIDGET (gtk_builder_get_object (builder, "image_take_photo"));
1578
1748
cheese_window->label_effects = GTK_WIDGET (gtk_builder_get_object (builder, "label_effects"));
1579
1749
cheese_window->label_photo = GTK_WIDGET (gtk_builder_get_object (builder, "label_photo"));
1580
1750
cheese_window->label_take_photo = GTK_WIDGET (gtk_builder_get_object (builder, "label_take_photo"));
1581
1751
cheese_window->label_video = GTK_WIDGET (gtk_builder_get_object (builder, "label_video"));
1582
1752
cheese_window->main_vbox = GTK_WIDGET (gtk_builder_get_object (builder, "main_vbox"));
1753
cheese_window->netbook_alignment = GTK_WIDGET (gtk_builder_get_object (builder, "netbook_alignment"));
1754
cheese_window->togglegroup_alignment = GTK_WIDGET (gtk_builder_get_object (builder, "togglegroup_alignment"));
1755
cheese_window->effect_button_alignment = GTK_WIDGET (gtk_builder_get_object (builder, "effect_button_alignment"));
1756
cheese_window->toolbar_alignment = GTK_WIDGET (gtk_builder_get_object (builder, "toolbar_alignment"));
1583
1757
cheese_window->video_vbox = GTK_WIDGET (gtk_builder_get_object (builder, "video_vbox"));
1584
1758
cheese_window->notebook = GTK_WIDGET (gtk_builder_get_object (builder, "notebook"));
1585
1759
cheese_window->notebook_bar = GTK_WIDGET (gtk_builder_get_object (builder, "notebook_bar"));
1623
1800
G_CALLBACK (cheese_window_exit_fullscreen_button_clicked_cb),
1624
1801
cheese_window);
1627
/* Reparent widgets in case we use hildon. This saves us maintaining two
1628
* GtkBuilder ui files
1630
cheese_window->window = hildon_window_new ();
1631
cheese_window->main_hbox = gtk_hbox_new (FALSE, 0);
1632
hildon_program_add_window (program, HILDON_WINDOW (cheese_window->window));
1633
gtk_container_add (GTK_CONTAINER (cheese_window->window), cheese_window->main_hbox);
1634
g_object_ref (cheese_window->thumb_scrollwindow);
1635
g_object_ref (cheese_window->video_vbox);
1636
gtk_container_remove (GTK_CONTAINER (cheese_window->video_vbox), cheese_window->thumb_scrollwindow);
1637
gtk_container_remove (GTK_CONTAINER (cheese_window->main_vbox), cheese_window->video_vbox);
1638
gtk_box_pack_start (GTK_BOX (cheese_window->main_hbox), cheese_window->video_vbox, TRUE, TRUE, 0);
1639
gtk_box_pack_start (GTK_BOX (cheese_window->main_hbox), GTK_WIDGET (cheese_window->thumb_scrollwindow),
1641
gtk_widget_destroy (cheese_window->main_vbox);
1642
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (cheese_window->thumb_scrollwindow),
1643
GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1644
g_object_unref (cheese_window->thumb_scrollwindow);
1645
g_object_unref (cheese_window->video_vbox);
1648
g_object_unref (builder);
1650
1803
char *str = g_strconcat ("<b>", _("_Take a photo"), "</b>", NULL);
1651
1804
gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo), str);
1652
1805
gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo_fullscreen), str);
1821
1984
gtk_action_group_set_sensitive (cheese_window->actions_file, FALSE);
1823
1986
action = gtk_ui_manager_get_action (cheese_window->ui_manager, "/MainMenu/Edit/Effects");
1824
gtk_action_connect_proxy (GTK_ACTION (action), GTK_WIDGET (cheese_window->button_effects));
1825
gtk_action_connect_proxy (GTK_ACTION (action), GTK_WIDGET (cheese_window->button_effects_fullscreen));
1987
gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_effects), action);
1988
gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_effects_fullscreen), action);
1827
1990
action = gtk_ui_manager_get_action (cheese_window->ui_manager, "/MainMenu/Cheese/Photo");
1828
gtk_action_connect_proxy (GTK_ACTION (action), GTK_WIDGET (cheese_window->button_photo));
1829
gtk_action_connect_proxy (GTK_ACTION (action), GTK_WIDGET (cheese_window->button_photo_fullscreen));
1991
gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_photo), action);
1992
gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_photo_fullscreen), action);
1831
1994
action = gtk_ui_manager_get_action (cheese_window->ui_manager, "/MainMenu/Cheese/Video");
1832
gtk_action_connect_proxy (GTK_ACTION (action), GTK_WIDGET (cheese_window->button_video));
1833
gtk_action_connect_proxy (GTK_ACTION (action), GTK_WIDGET (cheese_window->button_video_fullscreen));
1995
gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_video), action);
1996
gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_video_fullscreen), action);
1998
action = gtk_ui_manager_get_action (cheese_window->ui_manager, "/MainMenu/Cheese/Burst");
1999
gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_burst), action);
2000
gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_burst_fullscreen), action);
1836
2003
/* Default handlers for closing the application */
1911
2094
cheese_webcam_set_effect (cheese_window->webcam,
1912
2095
cheese_effect_chooser_get_selection (CHEESE_EFFECT_CHOOSER (cheese_window->effect_chooser)));
2097
cheese_webcam_set_balance_property (cheese_window->webcam, "brightness", brightness);
2098
cheese_webcam_set_balance_property (cheese_window->webcam, "contrast", contrast);
2099
cheese_webcam_set_balance_property (cheese_window->webcam, "saturation", saturation);
2100
cheese_webcam_set_balance_property (cheese_window->webcam, "hue", hue);
1914
2102
cheese_webcam_play (cheese_window->webcam);
1915
2103
gdk_threads_enter ();
1916
2104
gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook), 0);
1917
2105
ephy_spinner_stop (EPHY_SPINNER (cheese_window->throbber));
1918
2106
if (cheese_webcam_get_num_webcam_devices (cheese_window->webcam) == 0)
1920
message_area = cheese_no_camera_message_area ();
2108
info_bar = cheese_no_camera_info_bar_new ();
1922
g_signal_connect (message_area,
2110
g_signal_connect (info_bar,
1924
G_CALLBACK (cheese_window_no_camera_message_area_response),
2112
G_CALLBACK (cheese_window_no_camera_info_bar_response),
1925
2113
cheese_window);
1927
cheese_window_set_message_area (cheese_window, message_area);
2115
cheese_window_set_info_bar (cheese_window, info_bar);
1929
2117
gtk_widget_set_sensitive (GTK_WIDGET (cheese_window->take_picture), TRUE);
1930
2118
gtk_widget_set_sensitive (GTK_WIDGET (cheese_window->take_picture_fullscreen), TRUE);
1931
2119
gtk_action_group_set_sensitive (cheese_window->actions_effects, TRUE);
1932
2121
gdk_threads_leave ();
1936
cheese_window_init (char *hal_dev_udi, CheeseDbus *dbus_server)
2125
cheese_window_init (char *hal_dev_udi, CheeseDbus *dbus_server, gboolean startup_in_wide_mode)
1938
2127
CheeseWindow *cheese_window;
2128
gboolean startup_in_wide_mode_saved;
1940
2130
cheese_window = g_new0 (CheeseWindow, 1);
1964
2154
cheese_window->webcam_mode = WEBCAM_MODE_PHOTO;
1965
2155
cheese_window->recording = FALSE;
2157
g_object_get (cheese_window->gconf,
2158
"gconf_prop_wide_mode",
2159
&startup_in_wide_mode_saved,
2162
startup_in_wide_mode = startup_in_wide_mode_saved ? TRUE : startup_in_wide_mode;
2164
if (startup_in_wide_mode)
2166
GtkAction *action = gtk_ui_manager_get_action (cheese_window->ui_manager, "/MainMenu/Cheese/WideMode");
2167
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
2170
/* handy trick to set default size of the drawing area while not
2171
* limiting its minimum size, thanks Owen! */
2174
gtk_widget_set_size_request (cheese_window->notebook,
2175
DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT);
2176
gtk_widget_size_request (cheese_window->window, &req);
2177
gtk_window_resize (GTK_WINDOW (cheese_window->window), req.width, req.height);
2178
gtk_widget_set_size_request (cheese_window->notebook, -1, -1);
2180
gtk_widget_show_all (cheese_window->window);
1967
2182
/* Run cam setup in its own thread */
1968
2183
GError *error = NULL;
1969
2184
if (!g_thread_create ((GThreadFunc) setup_camera, cheese_window, FALSE, &error))