Blob Blame History Raw
/* cheese-preferences.c generated by valac 0.39.7.25-e3fff, the Vala compiler
 * generated from cheese-preferences.vala, do not modify */

/*
 * Copyright © 2010 Yuvaraj Pandian T <yuvipanda@yuvi.in>
 * Copyright © 2010 daniel g. siegel <dgsiegel@gnome.org>
 * Copyright © 2008 Filippo Argiolas <filippo.argiolas@gmail.com>
 *
 * Licensed under the GNU General Public License Version 2
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <glib.h>
#include <glib-object.h>
#include <gtk/gtk.h>
#include <cheese-camera.h>
#include <gio/gio.h>
#include <cheese-fileutil.h>
#include <stdlib.h>
#include <string.h>
#include <cheese-camera-device.h>
#include <float.h>
#include <math.h>
#include <gdk/gdk.h>


#define CHEESE_TYPE_PREFERENCES_DIALOG (cheese_preferences_dialog_get_type ())
#define CHEESE_PREFERENCES_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CHEESE_TYPE_PREFERENCES_DIALOG, CheesePreferencesDialog))
#define CHEESE_PREFERENCES_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CHEESE_TYPE_PREFERENCES_DIALOG, CheesePreferencesDialogClass))
#define CHEESE_IS_PREFERENCES_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CHEESE_TYPE_PREFERENCES_DIALOG))
#define CHEESE_IS_PREFERENCES_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CHEESE_TYPE_PREFERENCES_DIALOG))
#define CHEESE_PREFERENCES_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CHEESE_TYPE_PREFERENCES_DIALOG, CheesePreferencesDialogClass))

typedef struct _CheesePreferencesDialog CheesePreferencesDialog;
typedef struct _CheesePreferencesDialogClass CheesePreferencesDialogClass;
typedef struct _CheesePreferencesDialogPrivate CheesePreferencesDialogPrivate;
enum  {
	CHEESE_PREFERENCES_DIALOG_0_PROPERTY,
	CHEESE_PREFERENCES_DIALOG_NUM_PROPERTIES
};
static GParamSpec* cheese_preferences_dialog_properties[CHEESE_PREFERENCES_DIALOG_NUM_PROPERTIES];
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
typedef struct _Block1Data Block1Data;
#define _g_free0(var) (var = (g_free (var), NULL))
#define _g_list_free0(var) ((var == NULL) ? NULL : (var = (g_list_free (var), NULL)))
#define __vala_CheeseVideoFormat_free0(var) ((var == NULL) ? NULL : (var = (_vala_CheeseVideoFormat_free (var), NULL)))
typedef struct _Block2Data Block2Data;

struct _CheesePreferencesDialog {
	GtkDialog parent_instance;
	CheesePreferencesDialogPrivate * priv;
};

struct _CheesePreferencesDialogClass {
	GtkDialogClass parent_class;
};

struct _CheesePreferencesDialogPrivate {
	CheeseCamera* camera;
	GSettings* settings;
	GtkComboBox* photo_resolution_combo;
	GtkComboBox* video_resolution_combo;
	GtkComboBox* source_combo;
	GtkListStore* camera_model;
	GtkAdjustment* brightness_adjustment;
	GtkAdjustment* contrast_adjustment;
	GtkAdjustment* hue_adjustment;
	GtkAdjustment* saturation_adjustment;
	GtkSpinButton* burst_repeat_spin;
	GtkSpinButton* burst_delay_spin;
	GtkCheckButton* countdown_check;
	GtkCheckButton* flash_check;
	CheeseMediaMode current_mode;
};

struct _Block1Data {
	int _ref_count_;
	CheesePreferencesDialog* self;
	GtkListStore* resolution_model;
};

struct _Block2Data {
	int _ref_count_;
	CheesePreferencesDialog* self;
	GtkTreeIter iter;
	CheeseCameraDevice* active_device;
	gboolean device_removed;
};


static gpointer cheese_preferences_dialog_parent_class = NULL;

GType cheese_preferences_dialog_get_type (void) G_GNUC_CONST;
#define CHEESE_PREFERENCES_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CHEESE_TYPE_PREFERENCES_DIALOG, CheesePreferencesDialogPrivate))
CheesePreferencesDialog* cheese_preferences_dialog_new (CheeseCamera* camera);
CheesePreferencesDialog* cheese_preferences_dialog_construct (GType object_type,
                                                              CheeseCamera* camera);
static void cheese_preferences_dialog_setup_combo_box_models (CheesePreferencesDialog* self);
static void cheese_preferences_dialog_initialize_camera_devices (CheesePreferencesDialog* self);
static void cheese_preferences_dialog_initialize_values_from_settings (CheesePreferencesDialog* self);
static void cheese_preferences_dialog_on_camera_update_num_camera_devices (CheesePreferencesDialog* self);
static void _cheese_preferences_dialog_on_camera_update_num_camera_devices_g_object_notify (GObject* _sender,
                                                                                     GParamSpec* pspec,
                                                                                     gpointer self);
static void cheese_preferences_dialog_add_camera_device (CheesePreferencesDialog* self,
                                                  void* device);
static void _cheese_preferences_dialog_add_camera_device_gfunc (gconstpointer data,
                                                         gpointer self);
static void cheese_preferences_dialog_setup_resolutions_for_device (CheesePreferencesDialog* self,
                                                             CheeseCameraDevice* device);
static Block1Data* block1_data_ref (Block1Data* _data1_);
static void block1_data_unref (void * _userdata_);
static void __lambda5_ (Block1Data* _data1_,
                 CheeseVideoFormat* format);
static void ___lambda5__gfunc (gconstpointer data,
                        gpointer self);
static void cheese_preferences_dialog_on_source_change (CheesePreferencesDialog* self,
                                                 GtkComboBox* combo);
static void _cheese_preferences_dialog_on_source_change_gtk_combo_box_changed (GtkComboBox* _sender,
                                                                        gpointer self);
static void cheese_preferences_dialog_on_photo_resolution_change (CheesePreferencesDialog* self,
                                                           GtkComboBox* combo);
static void _vala_CheeseVideoFormat_free (CheeseVideoFormat* self);
static void _cheese_preferences_dialog_on_photo_resolution_change_gtk_combo_box_changed (GtkComboBox* _sender,
                                                                                  gpointer self);
static void cheese_preferences_dialog_on_video_resolution_change (CheesePreferencesDialog* self,
                                                           GtkComboBox* combo);
static void _cheese_preferences_dialog_on_video_resolution_change_gtk_combo_box_changed (GtkComboBox* _sender,
                                                                                  gpointer self);
static gboolean cheese_preferences_dialog_on_delete (CheesePreferencesDialog* self);
static gboolean _cheese_preferences_dialog_on_delete_gtk_widget_delete_event (GtkWidget* _sender,
                                                                       GdkEventAny* event,
                                                                       gpointer self);
static void cheese_preferences_dialog_on_dialog_close (CheesePreferencesDialog* self,
                                                GtkButton* button);
static void _cheese_preferences_dialog_on_dialog_close_gtk_button_clicked (GtkButton* _sender,
                                                                    gpointer self);
static void cheese_preferences_dialog_on_dialog_help (CheesePreferencesDialog* self,
                                               GtkButton* button);
static void _cheese_preferences_dialog_on_dialog_help_gtk_button_clicked (GtkButton* _sender,
                                                                   gpointer self);
static void cheese_preferences_dialog_on_burst_delay_change (CheesePreferencesDialog* self,
                                                      GtkSpinButton* spinbutton);
static void _cheese_preferences_dialog_on_burst_delay_change_gtk_spin_button_value_changed (GtkSpinButton* _sender,
                                                                                     gpointer self);
static void cheese_preferences_dialog_on_brightness_change (CheesePreferencesDialog* self,
                                                     GtkAdjustment* adjustment);
static void _cheese_preferences_dialog_on_brightness_change_gtk_adjustment_value_changed (GtkAdjustment* _sender,
                                                                                   gpointer self);
static void cheese_preferences_dialog_on_contrast_change (CheesePreferencesDialog* self,
                                                   GtkAdjustment* adjustment);
static void _cheese_preferences_dialog_on_contrast_change_gtk_adjustment_value_changed (GtkAdjustment* _sender,
                                                                                 gpointer self);
static void cheese_preferences_dialog_on_hue_change (CheesePreferencesDialog* self,
                                              GtkAdjustment* adjustment);
static void _cheese_preferences_dialog_on_hue_change_gtk_adjustment_value_changed (GtkAdjustment* _sender,
                                                                            gpointer self);
static void cheese_preferences_dialog_on_saturation_change (CheesePreferencesDialog* self,
                                                     GtkAdjustment* adjustment);
static void _cheese_preferences_dialog_on_saturation_change_gtk_adjustment_value_changed (GtkAdjustment* _sender,
                                                                                   gpointer self);
static Block2Data* block2_data_ref (Block2Data* _data2_);
static void block2_data_unref (void * _userdata_);
static void ___lambda6_ (Block2Data* _data2_,
                  void* device);
static void cheese_preferences_dialog_remove_camera_device (CheesePreferencesDialog* self,
                                                     GtkTreeIter* iter,
                                                     CheeseCameraDevice* device_node,
                                                     CheeseCameraDevice* active_device_node);
static void ____lambda6__gfunc (gconstpointer data,
                         gpointer self);
static void cheese_preferences_dialog_set_new_available_camera_device (CheesePreferencesDialog* self,
                                                                GtkTreeIter* iter);
void cheese_preferences_dialog_set_current_mode (CheesePreferencesDialog* self,
                                                 CheeseMediaMode mode);
static void cheese_preferences_dialog_finalize (GObject * obj);


static gpointer
_g_object_ref0 (gpointer self)
{
	return self ? g_object_ref (self) : NULL;
}


static void
_cheese_preferences_dialog_on_camera_update_num_camera_devices_g_object_notify (GObject* _sender,
                                                                                GParamSpec* pspec,
                                                                                gpointer self)
{
	cheese_preferences_dialog_on_camera_update_num_camera_devices ((CheesePreferencesDialog*) self);
}


CheesePreferencesDialog*
cheese_preferences_dialog_construct (GType object_type,
                                     CheeseCamera* camera)
{
	CheesePreferencesDialog * self = NULL;
	GtkSettings* gtk_settings = NULL;
	GtkSettings* _tmp0_;
	GtkSettings* _tmp1_;
	gint _tmp2_ = 0;
	GtkSettings* _tmp3_;
	gboolean _tmp4_;
	gboolean _tmp5_;
	CheeseCamera* _tmp6_;
	GSettings* _tmp7_;
	g_return_val_if_fail (camera != NULL, NULL);
	_tmp0_ = gtk_settings_get_default ();
	_tmp1_ = _g_object_ref0 (_tmp0_);
	gtk_settings = _tmp1_;
	_tmp3_ = gtk_settings;
	g_object_get (_tmp3_, "gtk-dialogs-use-header", &_tmp4_, NULL);
	_tmp5_ = _tmp4_;
	if (_tmp5_) {
		_tmp2_ = 1;
	} else {
		_tmp2_ = 0;
	}
	self = (CheesePreferencesDialog*) g_object_new (object_type, "use-header-bar", _tmp2_, NULL);
	_tmp6_ = _g_object_ref0 (camera);
	_g_object_unref0 (self->priv->camera);
	self->priv->camera = _tmp6_;
	_tmp7_ = g_settings_new ("org.gnome.Cheese");
	_g_object_unref0 (self->priv->settings);
	self->priv->settings = _tmp7_;
	cheese_preferences_dialog_setup_combo_box_models (self);
	cheese_preferences_dialog_initialize_camera_devices (self);
	cheese_preferences_dialog_initialize_values_from_settings (self);
	g_signal_connect_object ((GObject*) camera, "notify::num-camera-devices", (GCallback) _cheese_preferences_dialog_on_camera_update_num_camera_devices_g_object_notify, self, 0);
	_g_object_unref0 (gtk_settings);
	return self;
}


CheesePreferencesDialog*
cheese_preferences_dialog_new (CheeseCamera* camera)
{
	return cheese_preferences_dialog_construct (CHEESE_TYPE_PREFERENCES_DIALOG, camera);
}


/**
   * Set up combo box cell renderers.
   */
static void
cheese_preferences_dialog_setup_combo_box_models (CheesePreferencesDialog* self)
{
	GtkCellRendererText* cell = NULL;
	GtkCellRendererText* _tmp0_;
	GtkComboBox* _tmp1_;
	GtkComboBox* _tmp2_;
	GtkComboBox* _tmp3_;
	GtkComboBox* _tmp4_;
	GtkComboBox* _tmp5_;
	GtkComboBox* _tmp6_;
	g_return_if_fail (self != NULL);
	_tmp0_ = (GtkCellRendererText*) gtk_cell_renderer_text_new ();
	g_object_ref_sink (_tmp0_);
	cell = _tmp0_;
	_tmp1_ = self->priv->photo_resolution_combo;
	gtk_cell_layout_pack_start ((GtkCellLayout*) _tmp1_, (GtkCellRenderer*) cell, FALSE);
	_tmp2_ = self->priv->photo_resolution_combo;
	gtk_cell_layout_set_attributes ((GtkCellLayout*) _tmp2_, (GtkCellRenderer*) cell, "text", 0, NULL);
	_tmp3_ = self->priv->video_resolution_combo;
	gtk_cell_layout_pack_start ((GtkCellLayout*) _tmp3_, (GtkCellRenderer*) cell, FALSE);
	_tmp4_ = self->priv->video_resolution_combo;
	gtk_cell_layout_set_attributes ((GtkCellLayout*) _tmp4_, (GtkCellRenderer*) cell, "text", 0, NULL);
	_tmp5_ = self->priv->source_combo;
	gtk_cell_layout_pack_start ((GtkCellLayout*) _tmp5_, (GtkCellRenderer*) cell, FALSE);
	_tmp6_ = self->priv->source_combo;
	gtk_cell_layout_set_attributes ((GtkCellLayout*) _tmp6_, (GtkCellRenderer*) cell, "text", 0, NULL);
	_g_object_unref0 (cell);
}


/**
   * Initialize and populate the camera device combo box model.
   */
static void
_cheese_preferences_dialog_add_camera_device_gfunc (gconstpointer data,
                                                    gpointer self)
{
	cheese_preferences_dialog_add_camera_device ((CheesePreferencesDialog*) self, data);
}


static void
cheese_preferences_dialog_initialize_camera_devices (CheesePreferencesDialog* self)
{
	GPtrArray* devices = NULL;
	CheeseCamera* _tmp0_;
	GPtrArray* _tmp1_;
	GtkListStore* _tmp2_;
	GtkComboBox* _tmp3_;
	GtkListStore* _tmp4_;
	GtkComboBox* _tmp5_;
	GSettings* _tmp6_;
	CheeseCamera* _tmp7_;
	CheeseCameraDevice* _tmp8_;
	const gchar* _tmp9_;
	CheeseCamera* _tmp10_;
	CheeseCameraDevice* _tmp11_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->priv->camera;
	_tmp1_ = cheese_camera_get_camera_devices (_tmp0_);
	devices = _tmp1_;
	_tmp2_ = gtk_list_store_new (2, G_TYPE_STRING, CHEESE_TYPE_CAMERA_DEVICE, -1);
	_g_object_unref0 (self->priv->camera_model);
	self->priv->camera_model = _tmp2_;
	_tmp3_ = self->priv->source_combo;
	_tmp4_ = self->priv->camera_model;
	gtk_combo_box_set_model (_tmp3_, (GtkTreeModel*) _tmp4_);
	_tmp5_ = self->priv->source_combo;
	gtk_widget_set_sensitive ((GtkWidget*) _tmp5_, FALSE);
	g_ptr_array_foreach (devices, _cheese_preferences_dialog_add_camera_device_gfunc, self);
	_tmp6_ = self->priv->settings;
	_tmp7_ = self->priv->camera;
	_tmp8_ = cheese_camera_get_selected_device (_tmp7_);
	_tmp9_ = cheese_camera_device_get_name (_tmp8_);
	g_settings_set_string (_tmp6_, "camera", _tmp9_);
	_tmp10_ = self->priv->camera;
	_tmp11_ = cheese_camera_get_selected_device (_tmp10_);
	cheese_preferences_dialog_setup_resolutions_for_device (self, _tmp11_);
}


/**
   * Initialize and populate the resolution combo box models for the device.
   *
   * @param device the Cheese.CameraDevice for which to enumerate resolutions
   */
static Block1Data*
block1_data_ref (Block1Data* _data1_)
{
	g_atomic_int_inc (&_data1_->_ref_count_);
	return _data1_;
}


static void
block1_data_unref (void * _userdata_)
{
	Block1Data* _data1_;
	_data1_ = (Block1Data*) _userdata_;
	if (g_atomic_int_dec_and_test (&_data1_->_ref_count_)) {
		CheesePreferencesDialog* self;
		self = _data1_->self;
		_g_object_unref0 (_data1_->resolution_model);
		_g_object_unref0 (self);
		g_slice_free (Block1Data, _data1_);
	}
}


static void
__lambda5_ (Block1Data* _data1_,
            CheeseVideoFormat* format)
{
	CheesePreferencesDialog* self;
	GtkTreeIter iter = {0};
	GtkListStore* _tmp0_;
	GtkTreeIter _tmp1_ = {0};
	GtkListStore* _tmp2_;
	GtkTreeIter _tmp3_;
	gint _tmp4_;
	gchar* _tmp5_;
	gchar* _tmp6_;
	gchar* _tmp7_;
	gchar* _tmp8_;
	gint _tmp9_;
	gchar* _tmp10_;
	gchar* _tmp11_;
	gchar* _tmp12_;
	gchar* _tmp13_;
	gboolean _tmp14_ = FALSE;
	CheeseCamera* _tmp15_;
	CheeseVideoFormat* _tmp16_;
	gint _tmp17_;
	gint _tmp18_;
	gboolean _tmp29_ = FALSE;
	GSettings* _tmp30_;
	gint _tmp31_;
	self = _data1_->self;
	g_return_if_fail (format != NULL);
	_tmp0_ = _data1_->resolution_model;
	gtk_list_store_append (_tmp0_, &_tmp1_);
	iter = _tmp1_;
	_tmp2_ = _data1_->resolution_model;
	_tmp3_ = iter;
	_tmp4_ = format->width;
	_tmp5_ = g_strdup_printf ("%i", _tmp4_);
	_tmp6_ = _tmp5_;
	_tmp7_ = g_strconcat (_tmp6_, " × ", NULL);
	_tmp8_ = _tmp7_;
	_tmp9_ = format->height;
	_tmp10_ = g_strdup_printf ("%i", _tmp9_);
	_tmp11_ = _tmp10_;
	_tmp12_ = g_strconcat (_tmp8_, _tmp11_, NULL);
	_tmp13_ = _tmp12_;
	gtk_list_store_set (_tmp2_, &_tmp3_, 0, _tmp13_, 1, format, -1);
	_g_free0 (_tmp13_);
	_g_free0 (_tmp11_);
	_g_free0 (_tmp8_);
	_g_free0 (_tmp6_);
	_tmp15_ = self->priv->camera;
	_tmp16_ = cheese_camera_get_current_video_format (_tmp15_);
	_tmp17_ = _tmp16_->width;
	_tmp18_ = format->width;
	if (_tmp17_ == _tmp18_) {
		CheeseCamera* _tmp19_;
		CheeseVideoFormat* _tmp20_;
		gint _tmp21_;
		gint _tmp22_;
		_tmp19_ = self->priv->camera;
		_tmp20_ = cheese_camera_get_current_video_format (_tmp19_);
		_tmp21_ = _tmp20_->height;
		_tmp22_ = format->height;
		_tmp14_ = _tmp21_ == _tmp22_;
	} else {
		_tmp14_ = FALSE;
	}
	if (_tmp14_) {
		GtkComboBox* _tmp23_;
		GtkTreeIter _tmp24_;
		GSettings* _tmp25_;
		gint _tmp26_;
		GSettings* _tmp27_;
		gint _tmp28_;
		_tmp23_ = self->priv->photo_resolution_combo;
		_tmp24_ = iter;
		gtk_combo_box_set_active_iter (_tmp23_, &_tmp24_);
		_tmp25_ = self->priv->settings;
		_tmp26_ = format->width;
		g_settings_set_int (_tmp25_, "photo-x-resolution", _tmp26_);
		_tmp27_ = self->priv->settings;
		_tmp28_ = format->height;
		g_settings_set_int (_tmp27_, "photo-y-resolution", _tmp28_);
	}
	_tmp30_ = self->priv->settings;
	_tmp31_ = format->width;
	if (g_settings_get_int (_tmp30_, "video-x-resolution") == _tmp31_) {
		GSettings* _tmp32_;
		gint _tmp33_;
		_tmp32_ = self->priv->settings;
		_tmp33_ = format->height;
		_tmp29_ = g_settings_get_int (_tmp32_, "video-y-resolution") == _tmp33_;
	} else {
		_tmp29_ = FALSE;
	}
	if (_tmp29_) {
		GtkComboBox* _tmp34_;
		GtkTreeIter _tmp35_;
		_tmp34_ = self->priv->video_resolution_combo;
		_tmp35_ = iter;
		gtk_combo_box_set_active_iter (_tmp34_, &_tmp35_);
	}
}


static void
___lambda5__gfunc (gconstpointer data,
                   gpointer self)
{
	__lambda5_ (self, (CheeseVideoFormat*) data);
}


static void
cheese_preferences_dialog_setup_resolutions_for_device (CheesePreferencesDialog* self,
                                                        CheeseCameraDevice* device)
{
	Block1Data* _data1_;
	GList* formats = NULL;
	GList* _tmp0_;
	GtkListStore* _tmp1_;
	GtkComboBox* _tmp2_;
	GtkListStore* _tmp3_;
	GtkComboBox* _tmp4_;
	GtkListStore* _tmp5_;
	GList* _tmp6_;
	GtkComboBox* _tmp7_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (device != NULL);
	_data1_ = g_slice_new0 (Block1Data);
	_data1_->_ref_count_ = 1;
	_data1_->self = g_object_ref (self);
	_tmp0_ = cheese_camera_device_get_format_list (device);
	formats = _tmp0_;
	_tmp1_ = gtk_list_store_new (2, G_TYPE_STRING, CHEESE_TYPE_VIDEO_FORMAT, -1);
	_data1_->resolution_model = _tmp1_;
	_tmp2_ = self->priv->photo_resolution_combo;
	_tmp3_ = _data1_->resolution_model;
	gtk_combo_box_set_model (_tmp2_, (GtkTreeModel*) _tmp3_);
	_tmp4_ = self->priv->video_resolution_combo;
	_tmp5_ = _data1_->resolution_model;
	gtk_combo_box_set_model (_tmp4_, (GtkTreeModel*) _tmp5_);
	_tmp6_ = formats;
	g_list_foreach (_tmp6_, ___lambda5__gfunc, _data1_);
	_tmp7_ = self->priv->video_resolution_combo;
	if (gtk_combo_box_get_active (_tmp7_) == -1) {
		GtkComboBox* _tmp8_;
		GtkComboBox* _tmp9_;
		GSettings* _tmp10_;
		GSettings* _tmp11_;
		GSettings* _tmp12_;
		GSettings* _tmp13_;
		_tmp8_ = self->priv->video_resolution_combo;
		_tmp9_ = self->priv->photo_resolution_combo;
		gtk_combo_box_set_active (_tmp8_, gtk_combo_box_get_active (_tmp9_));
		_tmp10_ = self->priv->settings;
		_tmp11_ = self->priv->settings;
		g_settings_set_int (_tmp10_, "video-x-resolution", g_settings_get_int (_tmp11_, "photo-x-resolution"));
		_tmp12_ = self->priv->settings;
		_tmp13_ = self->priv->settings;
		g_settings_set_int (_tmp12_, "video-y-resolution", g_settings_get_int (_tmp13_, "photo-y-resolution"));
	}
	_g_list_free0 (formats);
	block1_data_unref (_data1_);
	_data1_ = NULL;
}


/**
     * Take the user preferences from GSettings.
     */
static void
cheese_preferences_dialog_initialize_values_from_settings (CheesePreferencesDialog* self)
{
	GtkAdjustment* _tmp0_;
	GSettings* _tmp1_;
	GtkAdjustment* _tmp2_;
	GSettings* _tmp3_;
	GtkAdjustment* _tmp4_;
	GSettings* _tmp5_;
	GtkAdjustment* _tmp6_;
	GSettings* _tmp7_;
	GSettings* _tmp8_;
	GtkSpinButton* _tmp9_;
	GtkSpinButton* _tmp10_;
	GSettings* _tmp11_;
	GSettings* _tmp12_;
	GtkCheckButton* _tmp13_;
	GSettings* _tmp14_;
	GtkCheckButton* _tmp15_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->priv->brightness_adjustment;
	_tmp1_ = self->priv->settings;
	gtk_adjustment_set_value (_tmp0_, g_settings_get_double (_tmp1_, "brightness"));
	_tmp2_ = self->priv->contrast_adjustment;
	_tmp3_ = self->priv->settings;
	gtk_adjustment_set_value (_tmp2_, g_settings_get_double (_tmp3_, "contrast"));
	_tmp4_ = self->priv->hue_adjustment;
	_tmp5_ = self->priv->settings;
	gtk_adjustment_set_value (_tmp4_, g_settings_get_double (_tmp5_, "hue"));
	_tmp6_ = self->priv->saturation_adjustment;
	_tmp7_ = self->priv->settings;
	gtk_adjustment_set_value (_tmp6_, g_settings_get_double (_tmp7_, "saturation"));
	_tmp8_ = self->priv->settings;
	_tmp9_ = self->priv->burst_repeat_spin;
	g_settings_bind (_tmp8_, "burst-repeat", (GObject*) _tmp9_, "value", G_SETTINGS_BIND_DEFAULT);
	_tmp10_ = self->priv->burst_delay_spin;
	_tmp11_ = self->priv->settings;
	gtk_spin_button_set_value (_tmp10_, (gdouble) (g_settings_get_int (_tmp11_, "burst-delay") / 1000));
	_tmp12_ = self->priv->settings;
	_tmp13_ = self->priv->countdown_check;
	g_settings_bind (_tmp12_, "countdown", (GObject*) _tmp13_, "active", G_SETTINGS_BIND_DEFAULT);
	_tmp14_ = self->priv->settings;
	_tmp15_ = self->priv->flash_check;
	g_settings_bind (_tmp14_, "flash", (GObject*) _tmp15_, "active", G_SETTINGS_BIND_DEFAULT);
}


/**
   * Update the active device to the active iter of the device combo box.
   *
   * @param combo the video device combo box
   */
static void
cheese_preferences_dialog_on_source_change (CheesePreferencesDialog* self,
                                            GtkComboBox* combo)
{
	CheeseCamera* _tmp0_;
	guint _tmp1_;
	guint _tmp2_;
	GtkTreeIter iter = {0};
	CheeseCameraDevice* dev = NULL;
	GtkTreeIter _tmp3_ = {0};
	GtkTreeModel* _tmp4_;
	GtkTreeModel* _tmp5_;
	GtkTreeIter _tmp6_;
	CheeseCamera* _tmp7_;
	CheeseCamera* _tmp8_;
	CheeseCamera* _tmp9_;
	CheeseCameraDevice* _tmp10_;
	GSettings* _tmp11_;
	const gchar* _tmp12_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (combo != NULL);
	_tmp0_ = self->priv->camera;
	g_object_get (_tmp0_, "num-camera-devices", &_tmp1_, NULL);
	_tmp2_ = _tmp1_;
	g_return_if_fail (_tmp2_ > ((guint) 0));
	gtk_combo_box_get_active_iter (combo, &_tmp3_);
	iter = _tmp3_;
	_tmp4_ = gtk_combo_box_get_model (combo);
	_tmp5_ = _tmp4_;
	_tmp6_ = iter;
	gtk_tree_model_get (_tmp5_, &_tmp6_, 1, &dev, -1);
	_tmp7_ = self->priv->camera;
	cheese_camera_set_device (_tmp7_, dev);
	_tmp8_ = self->priv->camera;
	cheese_camera_switch_camera_device (_tmp8_);
	_tmp9_ = self->priv->camera;
	_tmp10_ = cheese_camera_get_selected_device (_tmp9_);
	cheese_preferences_dialog_setup_resolutions_for_device (self, _tmp10_);
	_tmp11_ = self->priv->settings;
	_tmp12_ = cheese_camera_device_get_name (dev);
	g_settings_set_string (_tmp11_, "camera", _tmp12_);
	_g_object_unref0 (dev);
}


static void
_cheese_preferences_dialog_on_source_change_gtk_combo_box_changed (GtkComboBox* _sender,
                                                                   gpointer self)
{
	cheese_preferences_dialog_on_source_change ((CheesePreferencesDialog*) self, _sender);
}


/**
   * Update the current photo capture resolution to the active iter of the
   * photo resolution combo box.
   *
   * @param combo the photo resolution combo box
   */
static void
_vala_CheeseVideoFormat_free (CheeseVideoFormat* self)
{
	g_boxed_free (CHEESE_TYPE_VIDEO_FORMAT, self);
}


static void
cheese_preferences_dialog_on_photo_resolution_change (CheesePreferencesDialog* self,
                                                      GtkComboBox* combo)
{
	GtkTreeIter iter = {0};
	CheeseVideoFormat* format = NULL;
	GtkTreeIter _tmp0_ = {0};
	GtkTreeModel* _tmp1_;
	GtkTreeModel* _tmp2_;
	GtkTreeIter _tmp3_;
	gboolean _tmp4_ = FALSE;
	CheeseMediaMode _tmp5_;
	GSettings* _tmp9_;
	CheeseVideoFormat* _tmp10_;
	gint _tmp11_;
	GSettings* _tmp12_;
	CheeseVideoFormat* _tmp13_;
	gint _tmp14_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (combo != NULL);
	gtk_combo_box_get_active_iter (combo, &_tmp0_);
	iter = _tmp0_;
	_tmp1_ = gtk_combo_box_get_model (combo);
	_tmp2_ = _tmp1_;
	_tmp3_ = iter;
	gtk_tree_model_get (_tmp2_, &_tmp3_, 1, &format, -1);
	_tmp5_ = self->priv->current_mode;
	if (_tmp5_ == CHEESE_MEDIA_MODE_PHOTO) {
		_tmp4_ = TRUE;
	} else {
		CheeseMediaMode _tmp6_;
		_tmp6_ = self->priv->current_mode;
		_tmp4_ = _tmp6_ == CHEESE_MEDIA_MODE_BURST;
	}
	if (_tmp4_) {
		CheeseCamera* _tmp7_;
		CheeseVideoFormat* _tmp8_;
		_tmp7_ = self->priv->camera;
		_tmp8_ = format;
		cheese_camera_set_video_format (_tmp7_, _tmp8_);
	}
	_tmp9_ = self->priv->settings;
	_tmp10_ = format;
	_tmp11_ = _tmp10_->width;
	g_settings_set_int (_tmp9_, "photo-x-resolution", _tmp11_);
	_tmp12_ = self->priv->settings;
	_tmp13_ = format;
	_tmp14_ = _tmp13_->height;
	g_settings_set_int (_tmp12_, "photo-y-resolution", _tmp14_);
	__vala_CheeseVideoFormat_free0 (format);
}


static void
_cheese_preferences_dialog_on_photo_resolution_change_gtk_combo_box_changed (GtkComboBox* _sender,
                                                                             gpointer self)
{
	cheese_preferences_dialog_on_photo_resolution_change ((CheesePreferencesDialog*) self, _sender);
}


/**
   * Update the current video capture resolution to the active iter of the
   * video resolution combo box.
   *
   * @param combo the video resolution combo box
   */
static void
cheese_preferences_dialog_on_video_resolution_change (CheesePreferencesDialog* self,
                                                      GtkComboBox* combo)
{
	GtkTreeIter iter = {0};
	CheeseVideoFormat* format = NULL;
	GtkTreeIter _tmp0_ = {0};
	GtkTreeModel* _tmp1_;
	GtkTreeModel* _tmp2_;
	GtkTreeIter _tmp3_;
	CheeseMediaMode _tmp4_;
	GSettings* _tmp7_;
	CheeseVideoFormat* _tmp8_;
	gint _tmp9_;
	GSettings* _tmp10_;
	CheeseVideoFormat* _tmp11_;
	gint _tmp12_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (combo != NULL);
	gtk_combo_box_get_active_iter (combo, &_tmp0_);
	iter = _tmp0_;
	_tmp1_ = gtk_combo_box_get_model (combo);
	_tmp2_ = _tmp1_;
	_tmp3_ = iter;
	gtk_tree_model_get (_tmp2_, &_tmp3_, 1, &format, -1);
	_tmp4_ = self->priv->current_mode;
	if (_tmp4_ == CHEESE_MEDIA_MODE_VIDEO) {
		CheeseCamera* _tmp5_;
		CheeseVideoFormat* _tmp6_;
		_tmp5_ = self->priv->camera;
		_tmp6_ = format;
		cheese_camera_set_video_format (_tmp5_, _tmp6_);
	}
	_tmp7_ = self->priv->settings;
	_tmp8_ = format;
	_tmp9_ = _tmp8_->width;
	g_settings_set_int (_tmp7_, "video-x-resolution", _tmp9_);
	_tmp10_ = self->priv->settings;
	_tmp11_ = format;
	_tmp12_ = _tmp11_->height;
	g_settings_set_int (_tmp10_, "video-y-resolution", _tmp12_);
	__vala_CheeseVideoFormat_free0 (format);
}


static void
_cheese_preferences_dialog_on_video_resolution_change_gtk_combo_box_changed (GtkComboBox* _sender,
                                                                             gpointer self)
{
	cheese_preferences_dialog_on_video_resolution_change ((CheesePreferencesDialog*) self, _sender);
}


/**
    * Hide the dialog when it is closed, rather than deleting it.
    */
static gboolean
cheese_preferences_dialog_on_delete (CheesePreferencesDialog* self)
{
	gboolean result = FALSE;
	g_return_val_if_fail (self != NULL, FALSE);
	result = gtk_widget_hide_on_delete ((GtkWidget*) self);
	return result;
}


static gboolean
_cheese_preferences_dialog_on_delete_gtk_widget_delete_event (GtkWidget* _sender,
                                                              GdkEventAny* event,
                                                              gpointer self)
{
	gboolean result;
	result = cheese_preferences_dialog_on_delete ((CheesePreferencesDialog*) self);
	return result;
}


/**
    * Hide the dialog when it is closed, rather than deleting it.
    */
static void
cheese_preferences_dialog_on_dialog_close (CheesePreferencesDialog* self,
                                           GtkButton* button)
{
	g_return_if_fail (self != NULL);
	g_return_if_fail (button != NULL);
	gtk_widget_hide ((GtkWidget*) self);
}


static void
_cheese_preferences_dialog_on_dialog_close_gtk_button_clicked (GtkButton* _sender,
                                                               gpointer self)
{
	cheese_preferences_dialog_on_dialog_close ((CheesePreferencesDialog*) self, _sender);
}


/**
    * Show the help for the preferences dialog.
    *
    * @param button the help button
    */
static void
cheese_preferences_dialog_on_dialog_help (CheesePreferencesDialog* self,
                                          GtkButton* button)
{
	GError * _inner_error_ = NULL;
	g_return_if_fail (self != NULL);
	g_return_if_fail (button != NULL);
	{
		GdkScreen* _tmp0_;
		_tmp0_ = gtk_window_get_screen ((GtkWindow*) self);
		gtk_show_uri (_tmp0_, "help:cheese/index#preferences", (guint32) GDK_CURRENT_TIME, &_inner_error_);
		if (G_UNLIKELY (_inner_error_ != NULL)) {
			goto __catch3_g_error;
		}
	}
	goto __finally3;
	__catch3_g_error:
	{
		g_clear_error (&_inner_error_);
		_inner_error_ = NULL;
		g_warning ("cheese-preferences.vala:284: %s", "Error showing help");
	}
	__finally3:
	if (G_UNLIKELY (_inner_error_ != NULL)) {
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _inner_error_->message, g_quark_to_string (_inner_error_->domain), _inner_error_->code);
		g_clear_error (&_inner_error_);
		return;
	}
}


static void
_cheese_preferences_dialog_on_dialog_help_gtk_button_clicked (GtkButton* _sender,
                                                              gpointer self)
{
	cheese_preferences_dialog_on_dialog_help ((CheesePreferencesDialog*) self, _sender);
}


/**
   * Change the burst-delay GSetting when changing the spin button.
   *
   * The burst delay is the time, in milliseconds, between individual photos in
   * a burst.
   *
   * @param spinbutton the burst-delay spin button
   */
static void
cheese_preferences_dialog_on_burst_delay_change (CheesePreferencesDialog* self,
                                                 GtkSpinButton* spinbutton)
{
	GSettings* _tmp0_;
	gdouble _tmp1_;
	gdouble _tmp2_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (spinbutton != NULL);
	_tmp0_ = self->priv->settings;
	_tmp1_ = gtk_spin_button_get_value (spinbutton);
	_tmp2_ = _tmp1_;
	g_settings_set_int (_tmp0_, "burst-delay", ((gint) _tmp2_) * 1000);
}


static void
_cheese_preferences_dialog_on_burst_delay_change_gtk_spin_button_value_changed (GtkSpinButton* _sender,
                                                                                gpointer self)
{
	cheese_preferences_dialog_on_burst_delay_change ((CheesePreferencesDialog*) self, _sender);
}


/**
   * Change the brightness of the image, and update the GSetting, when changing
   * the scale.
   *
   * @param adjustment the adjustment of the brightness Gtk.Scale
   */
static void
cheese_preferences_dialog_on_brightness_change (CheesePreferencesDialog* self,
                                                GtkAdjustment* adjustment)
{
	CheeseCamera* _tmp0_;
	gdouble _tmp1_;
	gdouble _tmp2_;
	GSettings* _tmp3_;
	gdouble _tmp4_;
	gdouble _tmp5_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (adjustment != NULL);
	_tmp0_ = self->priv->camera;
	_tmp1_ = gtk_adjustment_get_value (adjustment);
	_tmp2_ = _tmp1_;
	cheese_camera_set_balance_property (_tmp0_, "brightness", _tmp2_);
	_tmp3_ = self->priv->settings;
	_tmp4_ = gtk_adjustment_get_value (adjustment);
	_tmp5_ = _tmp4_;
	g_settings_set_double (_tmp3_, "brightness", _tmp5_);
}


static void
_cheese_preferences_dialog_on_brightness_change_gtk_adjustment_value_changed (GtkAdjustment* _sender,
                                                                              gpointer self)
{
	cheese_preferences_dialog_on_brightness_change ((CheesePreferencesDialog*) self, _sender);
}


/**
   * Change the contrast of the image, and update the GSetting, when changing
   * the scale.
   *
   * @param adjustment the adjustment of the contrast Gtk.Scale
   */
static void
cheese_preferences_dialog_on_contrast_change (CheesePreferencesDialog* self,
                                              GtkAdjustment* adjustment)
{
	CheeseCamera* _tmp0_;
	gdouble _tmp1_;
	gdouble _tmp2_;
	GSettings* _tmp3_;
	gdouble _tmp4_;
	gdouble _tmp5_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (adjustment != NULL);
	_tmp0_ = self->priv->camera;
	_tmp1_ = gtk_adjustment_get_value (adjustment);
	_tmp2_ = _tmp1_;
	cheese_camera_set_balance_property (_tmp0_, "contrast", _tmp2_);
	_tmp3_ = self->priv->settings;
	_tmp4_ = gtk_adjustment_get_value (adjustment);
	_tmp5_ = _tmp4_;
	g_settings_set_double (_tmp3_, "contrast", _tmp5_);
}


static void
_cheese_preferences_dialog_on_contrast_change_gtk_adjustment_value_changed (GtkAdjustment* _sender,
                                                                            gpointer self)
{
	cheese_preferences_dialog_on_contrast_change ((CheesePreferencesDialog*) self, _sender);
}


/**
   * Change the hue of the image, and update the GSetting, when changing the
   * scale.
   *
   * @param adjustment the adjustment of the hue Gtk.Scale
   */
static void
cheese_preferences_dialog_on_hue_change (CheesePreferencesDialog* self,
                                         GtkAdjustment* adjustment)
{
	CheeseCamera* _tmp0_;
	gdouble _tmp1_;
	gdouble _tmp2_;
	GSettings* _tmp3_;
	gdouble _tmp4_;
	gdouble _tmp5_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (adjustment != NULL);
	_tmp0_ = self->priv->camera;
	_tmp1_ = gtk_adjustment_get_value (adjustment);
	_tmp2_ = _tmp1_;
	cheese_camera_set_balance_property (_tmp0_, "hue", _tmp2_);
	_tmp3_ = self->priv->settings;
	_tmp4_ = gtk_adjustment_get_value (adjustment);
	_tmp5_ = _tmp4_;
	g_settings_set_double (_tmp3_, "hue", _tmp5_);
}


static void
_cheese_preferences_dialog_on_hue_change_gtk_adjustment_value_changed (GtkAdjustment* _sender,
                                                                       gpointer self)
{
	cheese_preferences_dialog_on_hue_change ((CheesePreferencesDialog*) self, _sender);
}


/**
   * Change the saturation of the image, and update the GSetting, when changing
   * the scale.
   *
   * @param adjustment the adjustment of the saturation Gtk.Scale
   */
static void
cheese_preferences_dialog_on_saturation_change (CheesePreferencesDialog* self,
                                                GtkAdjustment* adjustment)
{
	CheeseCamera* _tmp0_;
	gdouble _tmp1_;
	gdouble _tmp2_;
	GSettings* _tmp3_;
	gdouble _tmp4_;
	gdouble _tmp5_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (adjustment != NULL);
	_tmp0_ = self->priv->camera;
	_tmp1_ = gtk_adjustment_get_value (adjustment);
	_tmp2_ = _tmp1_;
	cheese_camera_set_balance_property (_tmp0_, "saturation", _tmp2_);
	_tmp3_ = self->priv->settings;
	_tmp4_ = gtk_adjustment_get_value (adjustment);
	_tmp5_ = _tmp4_;
	g_settings_set_double (_tmp3_, "saturation", _tmp5_);
}


static void
_cheese_preferences_dialog_on_saturation_change_gtk_adjustment_value_changed (GtkAdjustment* _sender,
                                                                              gpointer self)
{
	cheese_preferences_dialog_on_saturation_change ((CheesePreferencesDialog*) self, _sender);
}


/**
   * Update the video device combo box when a camera device was added or
   * removed.
   */
static Block2Data*
block2_data_ref (Block2Data* _data2_)
{
	g_atomic_int_inc (&_data2_->_ref_count_);
	return _data2_;
}


static void
block2_data_unref (void * _userdata_)
{
	Block2Data* _data2_;
	_data2_ = (Block2Data*) _userdata_;
	if (g_atomic_int_dec_and_test (&_data2_->_ref_count_)) {
		CheesePreferencesDialog* self;
		self = _data2_->self;
		_g_object_unref0 (_data2_->active_device);
		_g_object_unref0 (self);
		g_slice_free (Block2Data, _data2_);
	}
}


static void
___lambda6_ (Block2Data* _data2_,
             void* device)
{
	CheesePreferencesDialog* self;
	CheeseCameraDevice* old_device = NULL;
	CheeseCameraDevice* _tmp0_;
	CheeseCameraDevice* new_device = NULL;
	GtkListStore* _tmp1_;
	GtkTreeIter _tmp2_;
	CheeseCameraDevice* _tmp3_;
	CheeseCameraDevice* _tmp4_;
	GtkListStore* _tmp8_;
	self = _data2_->self;
	_tmp0_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (device, CHEESE_TYPE_CAMERA_DEVICE, CheeseCameraDevice));
	old_device = _tmp0_;
	_tmp1_ = self->priv->camera_model;
	_tmp2_ = _data2_->iter;
	gtk_tree_model_get ((GtkTreeModel*) _tmp1_, &_tmp2_, 1, &new_device, -1, -1);
	_tmp3_ = old_device;
	_tmp4_ = new_device;
	if (_tmp3_ != _tmp4_) {
		GtkTreeIter _tmp5_;
		CheeseCameraDevice* _tmp6_;
		CheeseCameraDevice* _tmp7_;
		_tmp5_ = _data2_->iter;
		_tmp6_ = new_device;
		_tmp7_ = _data2_->active_device;
		cheese_preferences_dialog_remove_camera_device (self, &_tmp5_, _tmp6_, _tmp7_);
		_data2_->device_removed = TRUE;
		_g_object_unref0 (new_device);
		_g_object_unref0 (old_device);
		return;
	}
	_tmp8_ = self->priv->camera_model;
	gtk_tree_model_iter_next ((GtkTreeModel*) _tmp8_, &_data2_->iter);
	_g_object_unref0 (new_device);
	_g_object_unref0 (old_device);
}


static void
____lambda6__gfunc (gconstpointer data,
                    gpointer self)
{
	___lambda6_ (self, data);
}


static void
cheese_preferences_dialog_on_camera_update_num_camera_devices (CheesePreferencesDialog* self)
{
	GPtrArray* devices = NULL;
	CheeseCamera* _tmp0_;
	GPtrArray* _tmp1_;
	CheeseCameraDevice* dev = NULL;
	GPtrArray* _tmp2_;
	guint _tmp3_;
	GtkListStore* _tmp4_;
	GSettings* _tmp24_;
	CheeseCamera* _tmp25_;
	CheeseCameraDevice* _tmp26_;
	const gchar* _tmp27_;
	CheeseCamera* _tmp28_;
	CheeseCameraDevice* _tmp29_;
	g_return_if_fail (self != NULL);
	_tmp0_ = self->priv->camera;
	_tmp1_ = cheese_camera_get_camera_devices (_tmp0_);
	devices = _tmp1_;
	_tmp2_ = devices;
	_tmp3_ = _tmp2_->len;
	_tmp4_ = self->priv->camera_model;
	if (_tmp3_ > ((guint) gtk_tree_model_iter_n_children ((GtkTreeModel*) _tmp4_, NULL))) {
		GPtrArray* _tmp5_;
		GPtrArray* _tmp6_;
		guint _tmp7_;
		void* _tmp8_;
		CheeseCameraDevice* _tmp9_;
		CheeseCameraDevice* _tmp10_;
		_tmp5_ = devices;
		_tmp6_ = devices;
		_tmp7_ = _tmp6_->len;
		_tmp8_ = g_ptr_array_index (_tmp5_, _tmp7_ - 1);
		_tmp9_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (_tmp8_, CHEESE_TYPE_CAMERA_DEVICE, CheeseCameraDevice));
		_g_object_unref0 (dev);
		dev = _tmp9_;
		_tmp10_ = dev;
		cheese_preferences_dialog_add_camera_device (self, _tmp10_);
	} else {
		Block2Data* _data2_;
		GtkListStore* _tmp11_;
		GtkTreeIter _tmp12_ = {0};
		GtkTreeIter active_iter = {0};
		GtkComboBox* _tmp13_;
		GtkTreeIter _tmp14_ = {0};
		GtkListStore* _tmp15_;
		GtkTreeIter _tmp16_;
		GPtrArray* _tmp17_;
		gboolean _tmp18_;
		_data2_ = g_slice_new0 (Block2Data);
		_data2_->_ref_count_ = 1;
		_data2_->self = g_object_ref (self);
		_tmp11_ = self->priv->camera_model;
		gtk_tree_model_get_iter_first ((GtkTreeModel*) _tmp11_, &_tmp12_);
		_data2_->iter = _tmp12_;
		_tmp13_ = self->priv->source_combo;
		gtk_combo_box_get_active_iter (_tmp13_, &_tmp14_);
		active_iter = _tmp14_;
		_tmp15_ = self->priv->camera_model;
		_tmp16_ = active_iter;
		gtk_tree_model_get ((GtkTreeModel*) _tmp15_, &_tmp16_, 1, &_data2_->active_device, -1, -1);
		_data2_->device_removed = FALSE;
		_tmp17_ = devices;
		g_ptr_array_foreach (_tmp17_, ____lambda6__gfunc, _data2_);
		_tmp18_ = _data2_->device_removed;
		if (!_tmp18_) {
			CheeseCameraDevice* old_device = NULL;
			GtkListStore* _tmp19_;
			GtkTreeIter _tmp20_;
			GtkTreeIter _tmp21_;
			CheeseCameraDevice* _tmp22_;
			CheeseCameraDevice* _tmp23_;
			_tmp19_ = self->priv->camera_model;
			_tmp20_ = _data2_->iter;
			gtk_tree_model_get ((GtkTreeModel*) _tmp19_, &_tmp20_, 1, &old_device, -1, -1);
			_tmp21_ = _data2_->iter;
			_tmp22_ = old_device;
			_tmp23_ = _data2_->active_device;
			cheese_preferences_dialog_remove_camera_device (self, &_tmp21_, _tmp22_, _tmp23_);
			_g_object_unref0 (old_device);
		}
		block2_data_unref (_data2_);
		_data2_ = NULL;
	}
	_tmp24_ = self->priv->settings;
	_tmp25_ = self->priv->camera;
	_tmp26_ = cheese_camera_get_selected_device (_tmp25_);
	_tmp27_ = cheese_camera_device_get_name (_tmp26_);
	g_settings_set_string (_tmp24_, "camera", _tmp27_);
	_tmp28_ = self->priv->camera;
	_tmp29_ = cheese_camera_get_selected_device (_tmp28_);
	cheese_preferences_dialog_setup_resolutions_for_device (self, _tmp29_);
	_g_object_unref0 (dev);
}


/**
   * Add the supplied camera device to the device combo box model.
   *
   * This method is intended to be used with the foreach method of GLib
   * containers.
   *
   * @param device a Cheese.CameraDevice to add to the device combo box model
   */
static void
cheese_preferences_dialog_add_camera_device (CheesePreferencesDialog* self,
                                             void* device)
{
	GtkTreeIter iter = {0};
	CheeseCameraDevice* dev = NULL;
	CheeseCameraDevice* _tmp0_;
	GtkListStore* _tmp1_;
	GtkTreeIter _tmp2_ = {0};
	GtkListStore* _tmp3_;
	GtkTreeIter _tmp4_;
	CheeseCameraDevice* _tmp5_;
	const gchar* _tmp6_;
	CheeseCameraDevice* _tmp7_;
	CheeseCamera* _tmp8_;
	CheeseCameraDevice* _tmp9_;
	CheeseCameraDevice* _tmp10_;
	GtkListStore* _tmp13_;
	g_return_if_fail (self != NULL);
	_tmp0_ = _g_object_ref0 (G_TYPE_CHECK_INSTANCE_CAST (device, CHEESE_TYPE_CAMERA_DEVICE, CheeseCameraDevice));
	dev = _tmp0_;
	_tmp1_ = self->priv->camera_model;
	gtk_list_store_append (_tmp1_, &_tmp2_);
	iter = _tmp2_;
	_tmp3_ = self->priv->camera_model;
	_tmp4_ = iter;
	_tmp5_ = dev;
	_tmp6_ = cheese_camera_device_get_name (_tmp5_);
	_tmp7_ = dev;
	gtk_list_store_set (_tmp3_, &_tmp4_, 0, _tmp6_, 1, _tmp7_, -1);
	_tmp8_ = self->priv->camera;
	_tmp9_ = cheese_camera_get_selected_device (_tmp8_);
	_tmp10_ = dev;
	if (_tmp9_ == _tmp10_) {
		GtkComboBox* _tmp11_;
		GtkTreeIter _tmp12_;
		_tmp11_ = self->priv->source_combo;
		_tmp12_ = iter;
		gtk_combo_box_set_active_iter (_tmp11_, &_tmp12_);
	}
	_tmp13_ = self->priv->camera_model;
	if (gtk_tree_model_iter_n_children ((GtkTreeModel*) _tmp13_, NULL) > 1) {
		GtkComboBox* _tmp14_;
		_tmp14_ = self->priv->source_combo;
		gtk_widget_set_sensitive ((GtkWidget*) _tmp14_, TRUE);
	}
	_g_object_unref0 (dev);
}


/**
   * Remove the supplied camera device from the device combo box model.
   *
   * @param iter the iterator of the device to remove
   * @param device_node the device to remove from the combo box model
   * @param active_device_node the currently-active camera device
   */
static void
cheese_preferences_dialog_remove_camera_device (CheesePreferencesDialog* self,
                                                GtkTreeIter* iter,
                                                CheeseCameraDevice* device_node,
                                                CheeseCameraDevice* active_device_node)
{
	GPtrArray* devices = NULL;
	CheeseCamera* _tmp0_;
	GPtrArray* _tmp1_;
	GtkListStore* _tmp5_;
	GtkListStore* _tmp6_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (iter != NULL);
	g_return_if_fail (device_node != NULL);
	g_return_if_fail (active_device_node != NULL);
	_tmp0_ = self->priv->camera;
	_tmp1_ = cheese_camera_get_camera_devices (_tmp0_);
	devices = _tmp1_;
	if (device_node == active_device_node) {
		GPtrArray* _tmp2_;
		guint _tmp3_;
		_tmp2_ = devices;
		_tmp3_ = _tmp2_->len;
		if (_tmp3_ > ((guint) 0)) {
			GtkTreeIter _tmp4_;
			_tmp4_ = *iter;
			cheese_preferences_dialog_set_new_available_camera_device (self, &_tmp4_);
		} else {
			gtk_widget_hide ((GtkWidget*) self);
		}
	}
	_tmp5_ = self->priv->camera_model;
	gtk_list_store_remove (_tmp5_, iter);
	_tmp6_ = self->priv->camera_model;
	if (gtk_tree_model_iter_n_children ((GtkTreeModel*) _tmp6_, NULL) <= 1) {
		GtkComboBox* _tmp7_;
		_tmp7_ = self->priv->source_combo;
		gtk_widget_set_sensitive ((GtkWidget*) _tmp7_, FALSE);
	}
}


/**
   * Search for an available camera device and activate it in the device combo
   * box model.
   *
   * @param iter a device in the combo box model to search either side of
   */
static void
cheese_preferences_dialog_set_new_available_camera_device (CheesePreferencesDialog* self,
                                                           GtkTreeIter* iter)
{
	GtkTreeIter new_iter = {0};
	GtkTreeIter _tmp0_;
	GtkListStore* _tmp1_;
	gboolean _tmp2_;
	GtkComboBox* _tmp5_;
	GtkTreeIter _tmp6_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (iter != NULL);
	_tmp0_ = *iter;
	new_iter = _tmp0_;
	_tmp1_ = self->priv->camera_model;
	_tmp2_ = gtk_tree_model_iter_next ((GtkTreeModel*) _tmp1_, &new_iter);
	if (!_tmp2_) {
		GtkTreeIter _tmp3_;
		GtkListStore* _tmp4_;
		_tmp3_ = *iter;
		new_iter = _tmp3_;
		_tmp4_ = self->priv->camera_model;
		gtk_tree_model_iter_previous ((GtkTreeModel*) _tmp4_, &new_iter);
	}
	_tmp5_ = self->priv->source_combo;
	_tmp6_ = new_iter;
	gtk_combo_box_set_active_iter (_tmp5_, &_tmp6_);
}


/**
     * Set the current media mode (photo, video or burst).
     *
     * The current mode is used to update the video format on the Cheese.Camera
     * when the resolution for the current mode is changed.
     *
     * @param mode the media mode to set
     */
void
cheese_preferences_dialog_set_current_mode (CheesePreferencesDialog* self,
                                            CheeseMediaMode mode)
{
	g_return_if_fail (self != NULL);
	self->priv->current_mode = mode;
}


static void
cheese_preferences_dialog_class_init (CheesePreferencesDialogClass * klass)
{
	gint CheesePreferencesDialog_private_offset;
	cheese_preferences_dialog_parent_class = g_type_class_peek_parent (klass);
	g_type_class_add_private (klass, sizeof (CheesePreferencesDialogPrivate));
	G_OBJECT_CLASS (klass)->finalize = cheese_preferences_dialog_finalize;
	CheesePreferencesDialog_private_offset = g_type_class_get_instance_private_offset (klass);
	gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass), "/org/gnome/Cheese/cheese-prefs.ui");
	gtk_widget_class_bind_template_child_full (GTK_WIDGET_CLASS (klass), "photo_resolution_combo", FALSE, CheesePreferencesDialog_private_offset + G_STRUCT_OFFSET (CheesePreferencesDialogPrivate, photo_resolution_combo));
	gtk_widget_class_bind_template_child_full (GTK_WIDGET_CLASS (klass), "video_resolution_combo", FALSE, CheesePreferencesDialog_private_offset + G_STRUCT_OFFSET (CheesePreferencesDialogPrivate, video_resolution_combo));
	gtk_widget_class_bind_template_child_full (GTK_WIDGET_CLASS (klass), "source_combo", FALSE, CheesePreferencesDialog_private_offset + G_STRUCT_OFFSET (CheesePreferencesDialogPrivate, source_combo));
	gtk_widget_class_bind_template_child_full (GTK_WIDGET_CLASS (klass), "brightness_adjustment", FALSE, CheesePreferencesDialog_private_offset + G_STRUCT_OFFSET (CheesePreferencesDialogPrivate, brightness_adjustment));
	gtk_widget_class_bind_template_child_full (GTK_WIDGET_CLASS (klass), "contrast_adjustment", FALSE, CheesePreferencesDialog_private_offset + G_STRUCT_OFFSET (CheesePreferencesDialogPrivate, contrast_adjustment));
	gtk_widget_class_bind_template_child_full (GTK_WIDGET_CLASS (klass), "hue_adjustment", FALSE, CheesePreferencesDialog_private_offset + G_STRUCT_OFFSET (CheesePreferencesDialogPrivate, hue_adjustment));
	gtk_widget_class_bind_template_child_full (GTK_WIDGET_CLASS (klass), "saturation_adjustment", FALSE, CheesePreferencesDialog_private_offset + G_STRUCT_OFFSET (CheesePreferencesDialogPrivate, saturation_adjustment));
	gtk_widget_class_bind_template_child_full (GTK_WIDGET_CLASS (klass), "burst_repeat_spin", FALSE, CheesePreferencesDialog_private_offset + G_STRUCT_OFFSET (CheesePreferencesDialogPrivate, burst_repeat_spin));
	gtk_widget_class_bind_template_child_full (GTK_WIDGET_CLASS (klass), "burst_delay_spin", FALSE, CheesePreferencesDialog_private_offset + G_STRUCT_OFFSET (CheesePreferencesDialogPrivate, burst_delay_spin));
	gtk_widget_class_bind_template_child_full (GTK_WIDGET_CLASS (klass), "countdown_check", FALSE, CheesePreferencesDialog_private_offset + G_STRUCT_OFFSET (CheesePreferencesDialogPrivate, countdown_check));
	gtk_widget_class_bind_template_child_full (GTK_WIDGET_CLASS (klass), "flash_check", FALSE, CheesePreferencesDialog_private_offset + G_STRUCT_OFFSET (CheesePreferencesDialogPrivate, flash_check));
	gtk_widget_class_bind_template_callback_full (GTK_WIDGET_CLASS (klass), "on_source_change", G_CALLBACK(_cheese_preferences_dialog_on_source_change_gtk_combo_box_changed));
	gtk_widget_class_bind_template_callback_full (GTK_WIDGET_CLASS (klass), "on_photo_resolution_change", G_CALLBACK(_cheese_preferences_dialog_on_photo_resolution_change_gtk_combo_box_changed));
	gtk_widget_class_bind_template_callback_full (GTK_WIDGET_CLASS (klass), "on_video_resolution_change", G_CALLBACK(_cheese_preferences_dialog_on_video_resolution_change_gtk_combo_box_changed));
	gtk_widget_class_bind_template_callback_full (GTK_WIDGET_CLASS (klass), "on_delete", G_CALLBACK(_cheese_preferences_dialog_on_delete_gtk_widget_delete_event));
	gtk_widget_class_bind_template_callback_full (GTK_WIDGET_CLASS (klass), "on_dialog_close", G_CALLBACK(_cheese_preferences_dialog_on_dialog_close_gtk_button_clicked));
	gtk_widget_class_bind_template_callback_full (GTK_WIDGET_CLASS (klass), "on_dialog_help", G_CALLBACK(_cheese_preferences_dialog_on_dialog_help_gtk_button_clicked));
	gtk_widget_class_bind_template_callback_full (GTK_WIDGET_CLASS (klass), "on_burst_delay_change", G_CALLBACK(_cheese_preferences_dialog_on_burst_delay_change_gtk_spin_button_value_changed));
	gtk_widget_class_bind_template_callback_full (GTK_WIDGET_CLASS (klass), "on_brightness_change", G_CALLBACK(_cheese_preferences_dialog_on_brightness_change_gtk_adjustment_value_changed));
	gtk_widget_class_bind_template_callback_full (GTK_WIDGET_CLASS (klass), "on_contrast_change", G_CALLBACK(_cheese_preferences_dialog_on_contrast_change_gtk_adjustment_value_changed));
	gtk_widget_class_bind_template_callback_full (GTK_WIDGET_CLASS (klass), "on_hue_change", G_CALLBACK(_cheese_preferences_dialog_on_hue_change_gtk_adjustment_value_changed));
	gtk_widget_class_bind_template_callback_full (GTK_WIDGET_CLASS (klass), "on_saturation_change", G_CALLBACK(_cheese_preferences_dialog_on_saturation_change_gtk_adjustment_value_changed));
}


static void
cheese_preferences_dialog_instance_init (CheesePreferencesDialog * self)
{
	self->priv = CHEESE_PREFERENCES_DIALOG_GET_PRIVATE (self);
	gtk_widget_init_template (GTK_WIDGET (self));
}


static void
cheese_preferences_dialog_finalize (GObject * obj)
{
	CheesePreferencesDialog * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, CHEESE_TYPE_PREFERENCES_DIALOG, CheesePreferencesDialog);
	_g_object_unref0 (self->priv->camera);
	_g_object_unref0 (self->priv->settings);
	_g_object_unref0 (self->priv->photo_resolution_combo);
	_g_object_unref0 (self->priv->video_resolution_combo);
	_g_object_unref0 (self->priv->source_combo);
	_g_object_unref0 (self->priv->camera_model);
	_g_object_unref0 (self->priv->brightness_adjustment);
	_g_object_unref0 (self->priv->contrast_adjustment);
	_g_object_unref0 (self->priv->hue_adjustment);
	_g_object_unref0 (self->priv->saturation_adjustment);
	_g_object_unref0 (self->priv->burst_repeat_spin);
	_g_object_unref0 (self->priv->burst_delay_spin);
	_g_object_unref0 (self->priv->countdown_check);
	_g_object_unref0 (self->priv->flash_check);
	G_OBJECT_CLASS (cheese_preferences_dialog_parent_class)->finalize (obj);
}


GType
cheese_preferences_dialog_get_type (void)
{
	static volatile gsize cheese_preferences_dialog_type_id__volatile = 0;
	if (g_once_init_enter (&cheese_preferences_dialog_type_id__volatile)) {
		static const GTypeInfo g_define_type_info = { sizeof (CheesePreferencesDialogClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) cheese_preferences_dialog_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (CheesePreferencesDialog), 0, (GInstanceInitFunc) cheese_preferences_dialog_instance_init, NULL };
		GType cheese_preferences_dialog_type_id;
		cheese_preferences_dialog_type_id = g_type_register_static (gtk_dialog_get_type (), "CheesePreferencesDialog", &g_define_type_info, 0);
		g_once_init_leave (&cheese_preferences_dialog_type_id__volatile, cheese_preferences_dialog_type_id);
	}
	return cheese_preferences_dialog_type_id__volatile;
}