[cheese/cheese-window-refactor: 3/8] GObjectify CheeseWindow, big step two



commit d3394587f18ff17d6bf93589b539c7269af6a4c7
Author: Filippo Argiolas <filippo argiolas gmail com>
Date:   Tue Jan 26 11:08:52 2010 +0100

    GObjectify CheeseWindow, big step two
    
    Replace CheeseWindow with CheeseWindowPrivate.
    Update glade file since now CheeseWindow is a GtkWindow subclass and we
    don't need a GtkWindow there anymore.
    Move most of the actions callbacks, at least the ones that don't use
    directly CheeseWindow private stuff, into separate files.
    Refactor and reorder code in cheese-window.c (work in progress).
    Temporary disable some code (dbus, wide-mode, something else?).
    Sorry for the huge commit but I had to get it compiling and working
    again and it was really a single big step, quite difficult to separate
    in atomic commits.

 data/cheese.ui             |  767 +++++++++++++++++-----------------
 src/Makefile.am            |    9 +-
 src/cheese-commands-file.c |   73 ++--
 src/cheese-commands-help.c |    4 +-
 src/cheese-commands.h      |   15 +-
 src/cheese-dbus.c          |    2 +-
 src/cheese-ui.h            |   69 ++--
 src/cheese-window.c        | 1015 +++++++++++++++++++++++---------------------
 src/cheese-window.h        |   17 +
 src/cheese.c               |    7 +-
 10 files changed, 1034 insertions(+), 944 deletions(-)
---
diff --git a/data/cheese.ui b/data/cheese.ui
index decb356..0be0be5 100644
--- a/data/cheese.ui
+++ b/data/cheese.ui
@@ -2,392 +2,6 @@
 <interface>
   <requires lib="gtk+" version="2.16"/>
   <!-- interface-naming-policy toplevel-contextual -->
-  <object class="GtkWindow" id="cheese_window">
-    <property name="title" translatable="yes">Cheese</property>
-    <property name="icon_name">cheese</property>
-    <child>
-      <object class="GtkVBox" id="main_vbox">
-        <property name="visible">True</property>
-        <child>
-          <placeholder/>
-        </child>
-        <child>
-          <object class="GtkHBox" id="main_hbox">
-            <property name="visible">True</property>
-            <child>
-              <object class="GtkVBox" id="video_vbox">
-                <property name="visible">True</property>
-                <property name="orientation">vertical</property>
-                <child>
-                  <object class="GtkNotebook" id="notebook">
-                    <property name="visible">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <property name="show_tabs">False</property>
-                    <property name="show_border">False</property>
-                    <child>
-                      <object class="GtkVBox" id="video_frame_vbox">
-                        <property name="visible">True</property>
-                        <property name="orientation">vertical</property>
-                        <child>
-                          <object class="GtkAlignment" id="info_bar_frame">
-                            <property name="visible">True</property>
-                            <child>
-                              <placeholder/>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkDrawingArea" id="video_screen">
-                            <property name="visible">True</property>
-                          </object>
-                          <packing>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                    </child>
-                    <child type="tab">
-                      <placeholder/>
-                    </child>
-                    <child>
-                      <object class="GtkVBox" id="vbox3">
-                        <property name="visible">True</property>
-                        <property name="orientation">vertical</property>
-                        <child>
-                          <object class="GtkAspectFrame" id="effect_frame">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="label_xalign">0</property>
-                            <property name="shadow_type">none</property>
-                            <property name="ratio">1.3300000429153442</property>
-                            <property name="obey_child">False</property>
-                            <child>
-                              <placeholder/>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkAlignment" id="effect_alignment">
-                            <property name="visible">True</property>
-                            <child>
-                              <placeholder/>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </object>
-                      <packing>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child type="tab">
-                      <placeholder/>
-                    </child>
-                    <child>
-                      <placeholder/>
-                    </child>
-                    <child type="tab">
-                      <placeholder/>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkAlignment" id="toolbar_alignment">
-                    <property name="visible">True</property>
-                    <property name="top_padding">6</property>
-                    <property name="bottom_padding">6</property>
-                    <child>
-                      <object class="GtkNotebook" id="notebook_bar">
-                        <property name="visible">True</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <property name="show_tabs">False</property>
-                        <property name="show_border">False</property>
-                        <child>
-                          <object class="GtkHBox" id="toolbar_hbox">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="homogeneous">True</property>
-                            <child>
-                              <object class="GtkAlignment" id="togglegroup_alignment">
-                                <property name="visible">True</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="xalign">0</property>
-                                <property name="xscale">0</property>
-                                <property name="left_padding">24</property>
-                                <child>
-                                  <object class="GtkHBox" id="hbox2">
-                                    <property name="visible">True</property>
-                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <child>
-                                      <object class="GtkToggleButton" id="button_photo">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="receives_default">True</property>
-                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                        <child>
-                                          <object class="GtkAlignment" id="alignment4">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <child>
-                                              <object class="GtkImage" id="image4">
-                                                <property name="visible">True</property>
-                                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                                <property name="icon_name">cheese-take-photo</property>
-                                              </object>
-                                            </child>
-                                          </object>
-                                        </child>
-                                      </object>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                        <property name="position">0</property>
-                                      </packing>
-                                    </child>
-                                    <child>
-                                      <object class="GtkToggleButton" id="button_video">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="receives_default">True</property>
-                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                        <child>
-                                          <object class="GtkAlignment" id="alignment5">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <child>
-                                              <object class="GtkImage" id="image5">
-                                                <property name="visible">True</property>
-                                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                                <property name="icon_name">video-x-generic</property>
-                                              </object>
-                                            </child>
-                                          </object>
-                                        </child>
-                                      </object>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                        <property name="position">1</property>
-                                      </packing>
-                                    </child>
-                                    <child>
-                                      <object class="GtkToggleButton" id="button_burst">
-                                        <property name="visible">True</property>
-                                        <property name="can_focus">True</property>
-                                        <property name="receives_default">True</property>
-                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                        <child>
-                                          <object class="GtkAlignment" id="alignment12">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <child>
-                                              <object class="GtkImage" id="image8">
-                                                <property name="visible">True</property>
-                                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                                <property name="icon_name">cheese-take-burst</property>
-                                              </object>
-                                            </child>
-                                          </object>
-                                        </child>
-                                      </object>
-                                      <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">False</property>
-                                        <property name="position">2</property>
-                                      </packing>
-                                    </child>
-                                  </object>
-                                </child>
-                              </object>
-                              <packing>
-                                <property name="position">0</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkAlignment" id="take_picture_alignment">
-                                <property name="visible">True</property>
-                                <property name="xscale">0.5</property>
-                                <child>
-                                  <object class="GtkButton" id="take_picture">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="receives_default">True</property>
-                                    <child>
-                                      <object class="GtkAlignment" id="alignment3">
-                                        <property name="visible">True</property>
-                                        <property name="xscale">0</property>
-                                        <property name="yscale">0</property>
-                                        <child>
-                                          <object class="GtkHBox" id="hbox3">
-                                            <property name="visible">True</property>
-                                            <property name="spacing">2</property>
-                                            <child>
-                                              <object class="GtkImage" id="image_take_photo">
-                                                <property name="visible">True</property>
-                                                <property name="stock">gtk-media-record</property>
-                                              </object>
-                                              <packing>
-                                                <property name="expand">False</property>
-                                                <property name="fill">False</property>
-                                                <property name="position">0</property>
-                                              </packing>
-                                            </child>
-                                            <child>
-                                              <object class="GtkLabel" id="label_take_photo">
-                                                <property name="visible">True</property>
-                                                <property name="label" translatable="yes">_Take a Photo</property>
-                                                <property name="use_markup">True</property>
-                                                <property name="use_underline">True</property>
-                                              </object>
-                                              <packing>
-                                                <property name="expand">False</property>
-                                                <property name="fill">False</property>
-                                                <property name="position">1</property>
-                                              </packing>
-                                            </child>
-                                          </object>
-                                        </child>
-                                      </object>
-                                    </child>
-                                  </object>
-                                </child>
-                              </object>
-                              <packing>
-                                <property name="expand">False</property>
-                                <property name="position">1</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkAlignment" id="effect_button_alignment">
-                                <property name="visible">True</property>
-                                <property name="xalign">1</property>
-                                <property name="xscale">0</property>
-                                <property name="right_padding">24</property>
-                                <child>
-                                  <object class="GtkToggleButton" id="button_effects">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="receives_default">True</property>
-                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <child>
-                                      <object class="GtkHBox" id="hbox15">
-                                        <property name="visible">True</property>
-                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                        <property name="spacing">2</property>
-                                        <child>
-                                          <object class="GtkImage" id="image2">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <property name="icon_name">browse-webcam-effects</property>
-                                          </object>
-                                          <packing>
-                                            <property name="position">0</property>
-                                          </packing>
-                                        </child>
-                                        <child>
-                                          <object class="GtkLabel" id="label_effects">
-                                            <property name="visible">True</property>
-                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                            <property name="label" translatable="yes">_Effects</property>
-                                            <property name="use_markup">True</property>
-                                            <property name="use_underline">True</property>
-                                          </object>
-                                          <packing>
-                                            <property name="position">1</property>
-                                          </packing>
-                                        </child>
-                                      </object>
-                                    </child>
-                                  </object>
-                                </child>
-                              </object>
-                              <packing>
-                                <property name="pack_type">end</property>
-                                <property name="position">2</property>
-                              </packing>
-                            </child>
-                          </object>
-                        </child>
-                        <child type="tab">
-                          <placeholder/>
-                        </child>
-                        <child>
-                          <object class="GtkAlignment" id="countdown_frame">
-                            <property name="visible">True</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <child>
-                              <placeholder/>
-                            </child>
-                          </object>
-                          <packing>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                        <child type="tab">
-                          <placeholder/>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">1</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkAlignment" id="thumb_scrollwindow">
-                    <property name="visible">True</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                    <child>
-                      <placeholder/>
-                    </child>
-                  </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="position">2</property>
-                  </packing>
-                </child>
-              </object>
-              <packing>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkAlignment" id="netbook_alignment">
-                <property name="visible">True</property>
-                <child>
-                  <placeholder/>
-                </child>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="pack_type">end</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-      </object>
-    </child>
-  </object>
   <object class="GtkWindow" id="fullscreen_popup">
     <property name="type">popup</property>
     <property name="type_hint">utility</property>
@@ -722,4 +336,385 @@
       </object>
     </child>
   </object>
+  <object class="GtkVBox" id="main_vbox">
+    <property name="visible">True</property>
+    <property name="orientation">vertical</property>
+    <child>
+      <placeholder/>
+    </child>
+    <child>
+      <object class="GtkHBox" id="main_hbox">
+        <property name="visible">True</property>
+        <child>
+          <object class="GtkVBox" id="video_vbox">
+            <property name="visible">True</property>
+            <property name="orientation">vertical</property>
+            <child>
+              <object class="GtkNotebook" id="notebook">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <property name="show_tabs">False</property>
+                <property name="show_border">False</property>
+                <child>
+                  <object class="GtkVBox" id="video_frame_vbox">
+                    <property name="visible">True</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkAlignment" id="info_bar_frame">
+                        <property name="visible">True</property>
+                        <child>
+                          <placeholder/>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkDrawingArea" id="video_screen">
+                        <property name="visible">True</property>
+                      </object>
+                      <packing>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                </child>
+                <child type="tab">
+                  <placeholder/>
+                </child>
+                <child>
+                  <object class="GtkVBox" id="vbox3">
+                    <property name="visible">True</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkAspectFrame" id="effect_frame">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="label_xalign">0</property>
+                        <property name="shadow_type">none</property>
+                        <property name="ratio">1.3300000429153442</property>
+                        <property name="obey_child">False</property>
+                        <child>
+                          <placeholder/>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkAlignment" id="effect_alignment">
+                        <property name="visible">True</property>
+                        <child>
+                          <placeholder/>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child type="tab">
+                  <placeholder/>
+                </child>
+                <child>
+                  <placeholder/>
+                </child>
+                <child type="tab">
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkAlignment" id="toolbar_alignment">
+                <property name="visible">True</property>
+                <property name="top_padding">6</property>
+                <property name="bottom_padding">6</property>
+                <child>
+                  <object class="GtkNotebook" id="notebook_bar">
+                    <property name="visible">True</property>
+                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                    <property name="show_tabs">False</property>
+                    <property name="show_border">False</property>
+                    <child>
+                      <object class="GtkHBox" id="toolbar_hbox">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="homogeneous">True</property>
+                        <child>
+                          <object class="GtkAlignment" id="togglegroup_alignment">
+                            <property name="visible">True</property>
+                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                            <property name="xalign">0</property>
+                            <property name="xscale">0</property>
+                            <property name="left_padding">24</property>
+                            <child>
+                              <object class="GtkHBox" id="hbox2">
+                                <property name="visible">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <child>
+                                  <object class="GtkToggleButton" id="button_photo">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">True</property>
+                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                    <child>
+                                      <object class="GtkAlignment" id="alignment4">
+                                        <property name="visible">True</property>
+                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                        <child>
+                                          <object class="GtkImage" id="image4">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="icon_name">cheese-take-photo</property>
+                                          </object>
+                                        </child>
+                                      </object>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkToggleButton" id="button_video">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">True</property>
+                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                    <child>
+                                      <object class="GtkAlignment" id="alignment5">
+                                        <property name="visible">True</property>
+                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                        <child>
+                                          <object class="GtkImage" id="image5">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="icon_name">video-x-generic</property>
+                                          </object>
+                                        </child>
+                                      </object>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkToggleButton" id="button_burst">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">True</property>
+                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                    <child>
+                                      <object class="GtkAlignment" id="alignment12">
+                                        <property name="visible">True</property>
+                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                        <child>
+                                          <object class="GtkImage" id="image8">
+                                            <property name="visible">True</property>
+                                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                            <property name="icon_name">cheese-take-burst</property>
+                                          </object>
+                                        </child>
+                                      </object>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">2</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkAlignment" id="take_picture_alignment">
+                            <property name="visible">True</property>
+                            <property name="xscale">0.5</property>
+                            <child>
+                              <object class="GtkButton" id="take_picture">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">True</property>
+                                <child>
+                                  <object class="GtkAlignment" id="alignment3">
+                                    <property name="visible">True</property>
+                                    <property name="xscale">0</property>
+                                    <property name="yscale">0</property>
+                                    <child>
+                                      <object class="GtkHBox" id="hbox3">
+                                        <property name="visible">True</property>
+                                        <property name="spacing">2</property>
+                                        <child>
+                                          <object class="GtkImage" id="image_take_photo">
+                                            <property name="visible">True</property>
+                                            <property name="stock">gtk-media-record</property>
+                                          </object>
+                                          <packing>
+                                            <property name="expand">False</property>
+                                            <property name="fill">False</property>
+                                            <property name="position">0</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkLabel" id="label_take_photo">
+                                            <property name="visible">True</property>
+                                            <property name="label" translatable="yes">_Take a Photo</property>
+                                            <property name="use_markup">True</property>
+                                            <property name="use_underline">True</property>
+                                          </object>
+                                          <packing>
+                                            <property name="expand">False</property>
+                                            <property name="fill">False</property>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
+                                      </object>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkAlignment" id="effect_button_alignment">
+                            <property name="visible">True</property>
+                            <property name="xalign">1</property>
+                            <property name="xscale">0</property>
+                            <property name="right_padding">24</property>
+                            <child>
+                              <object class="GtkToggleButton" id="button_effects">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">True</property>
+                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                <child>
+                                  <object class="GtkHBox" id="hbox15">
+                                    <property name="visible">True</property>
+                                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                    <property name="spacing">2</property>
+                                    <child>
+                                      <object class="GtkImage" id="image2">
+                                        <property name="visible">True</property>
+                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                        <property name="icon_name">browse-webcam-effects</property>
+                                      </object>
+                                      <packing>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label_effects">
+                                        <property name="visible">True</property>
+                                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                                        <property name="label" translatable="yes">_Effects</property>
+                                        <property name="use_markup">True</property>
+                                        <property name="use_underline">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="pack_type">end</property>
+                            <property name="position">2</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                    <child type="tab">
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <object class="GtkAlignment" id="countdown_frame">
+                        <property name="visible">True</property>
+                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <child>
+                          <placeholder/>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child type="tab">
+                      <placeholder/>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkAlignment" id="thumb_scrollwindow">
+                <property name="visible">True</property>
+                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkAlignment" id="netbook_alignment">
+            <property name="visible">True</property>
+            <child>
+              <placeholder/>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="pack_type">end</property>
+        <property name="position">1</property>
+      </packing>
+    </child>
+  </object>
 </interface>
diff --git a/src/Makefile.am b/src/Makefile.am
index c75e861..04f3a04 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -16,14 +16,19 @@ bin_PROGRAMS = cheese
 
 cheese_SOURCES = \
 	cheese.c \
+	cheese-window.c \
+	cheese-window.h \
+	cheese-ui.h \
+	cheese-commands.h \
+	cheese-commands.c \
+	cheese-commands-help.c \
+	cheese-commands-file.c \
 	cheese-dbus.c \
 	cheese-dbus.h \
 	cheese-effect-chooser.c \
 	cheese-effect-chooser.h \
 	cheese-thumb-view.c \
 	cheese-thumb-view.h \
-	cheese-window.c \
-	cheese-window.h \
 	eog-thumbnail.c \
 	eog-thumbnail.h \
 	eog-thumb-nav.c \
diff --git a/src/cheese-commands-file.c b/src/cheese-commands-file.c
index 3529a29..f832de9 100644
--- a/src/cheese-commands-file.c
+++ b/src/cheese-commands-file.c
@@ -21,7 +21,18 @@
 
 #include "cheese-commands.h"
 
-static void
+typedef enum
+{
+  CHEESE_RESPONSE_SKIP,
+  CHEESE_RESPONSE_SKIP_ALL,
+  CHEESE_RESPONSE_DELETE_ALL
+} CheeseDeleteResponseType;
+
+#define CHEESE_BUTTON_SKIP       _("_Skip")
+#define CHEESE_BUTTON_SKIP_ALL   _("S_kip All")
+#define CHEESE_BUTTON_DELETE_ALL _("Delete _All")
+
+void
 cheese_cmd_file_open (GtkWidget *widget, CheeseWindow *cheese_window)
 {
   char      *uri;
@@ -30,7 +41,7 @@ cheese_cmd_file_open (GtkWidget *widget, CheeseWindow *cheese_window)
   GtkWidget *dialog;
   GdkScreen *screen;
 
-  filename = cheese_thumb_view_get_selected_image (CHEESE_THUMB_VIEW (priv->thumb_view));
+  filename = cheese_thumb_view_get_selected_image (cheese_window_get_thumbview (cheese_window));
   g_return_if_fail (filename);
   uri = g_filename_to_uri (filename, NULL, NULL);
   g_free (filename);
@@ -53,16 +64,15 @@ cheese_cmd_file_open (GtkWidget *widget, CheeseWindow *cheese_window)
   g_free (uri);
 }
 
-static void
+void
 cheese_cmd_file_save_as (GtkWidget *widget, CheeseWindow *cheese_window)
 {
-  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
   GtkWidget *dialog;
   int        response;
   char      *filename;
   char      *basename;
 
-  filename = cheese_thumb_view_get_selected_image (CHEESE_THUMB_VIEW (priv->thumb_view));
+  filename = cheese_thumb_view_get_selected_image (cheese_window_get_thumbview (cheese_window));
   g_return_if_fail (filename);
 
   dialog = gtk_file_chooser_dialog_new (_("Save File"),
@@ -121,16 +131,15 @@ cheese_cmd_file_save_as (GtkWidget *widget, CheeseWindow *cheese_window)
 }
 
 static void
-cheese_window_delete_error_dialog (CheeseWindow *cheese_window, GFile *file, gchar *message)
+_delete_error_dialog (CheeseWindow *cheese_window, GFile *file, gchar *message)
 {
-  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
   gchar     *primary, *secondary;
   GtkWidget *error_dialog;
 
   primary   = g_strdup (_("Error while deleting"));
   secondary = g_strdup_printf (_("The file \"%s\" cannot be deleted. Details: %s"),
                                g_file_get_basename (file), message);
-  error_dialog = gtk_message_dialog_new (GTK_WINDOW (cheese_window->window),
+  error_dialog = gtk_message_dialog_new (GTK_WINDOW (cheese_window),
                                          GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                                          GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "%s", primary);
   gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (error_dialog),
@@ -142,9 +151,8 @@ cheese_window_delete_error_dialog (CheeseWindow *cheese_window, GFile *file, gch
 }
 
 static void
-cheese_window_cmd_delete_file (CheeseWindow *cheese_window, GList *files, gboolean batch)
+_really_delete (CheeseWindow *cheese_window, GList *files, gboolean batch)
 {
-  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
   GList     *l           = NULL;
   GError    *error       = NULL;
   gint       list_length = g_list_length (files);
@@ -167,7 +175,7 @@ cheese_window_cmd_delete_file (CheeseWindow *cheese_window, GList *files, gboole
                                  g_file_get_basename (files->data));
     }
     secondary       = g_strdup_printf (_("If you delete an item, it will be permanently lost."));
-    question_dialog = gtk_message_dialog_new (GTK_WINDOW (cheese_window->window),
+    question_dialog = gtk_message_dialog_new (GTK_WINDOW (cheese_window),
                                               GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                                               GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, "%s", primary);
     gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (question_dialog), "%s", secondary);
@@ -186,8 +194,8 @@ cheese_window_cmd_delete_file (CheeseWindow *cheese_window, GList *files, gboole
     g_print ("deleting %s\n", g_file_get_basename (l->data));
     if (!g_file_delete (l->data, NULL, &error))
     {
-      cheese_window_delete_error_dialog (cheese_window, l->data,
-                                         error != NULL ? error->message : _("Unknown Error"));
+      _delete_error_dialog (cheese_window, l->data,
+                            error != NULL ? error->message : _("Unknown Error"));
       g_error_free (error);
       error = NULL;
     }
@@ -196,9 +204,8 @@ cheese_window_cmd_delete_file (CheeseWindow *cheese_window, GList *files, gboole
 }
 
 static void
-cheese_window_cmd_move_file_to_trash (CheeseWindow *cheese_window, GList *files)
+_really_move_to_trash (CheeseWindow *cheese_window, GList *files)
 {
-  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
   GError    *error = NULL;
   GList     *l     = NULL;
   GList     *d     = NULL;
@@ -221,7 +228,7 @@ cheese_window_cmd_move_file_to_trash (CheeseWindow *cheese_window, GList *files)
       primary   = g_strdup (_("Cannot move file to trash, do you want to delete immediately?"));
       secondary = g_strdup_printf (_("The file \"%s\" cannot be moved to the trash. Details: %s"),
                                    g_file_get_basename (l->data), error->message);
-      question_dialog = gtk_message_dialog_new (GTK_WINDOW (cheese_window->window),
+      question_dialog = gtk_message_dialog_new (GTK_WINDOW (cheese_window),
                                                 GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                                                 GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, "%s", primary);
       gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (question_dialog), "%s", secondary);
@@ -245,14 +252,14 @@ cheese_window_cmd_move_file_to_trash (CheeseWindow *cheese_window, GList *files)
         case CHEESE_RESPONSE_DELETE_ALL:
 
           /* forward the list to cmd_delete */
-          cheese_window_cmd_delete_file (cheese_window, l, TRUE);
+          _really_delete (cheese_window, l, TRUE);
           return;
 
         case GTK_RESPONSE_ACCEPT:
 
           /* create a single file list for cmd_delete */
           d = g_list_append (d, g_object_ref (l->data));
-          cheese_window_cmd_delete_file (cheese_window, d, TRUE);
+          _really_delete (cheese_window, d, TRUE);
           g_list_free (d);
           break;
 
@@ -272,14 +279,14 @@ cheese_window_cmd_move_file_to_trash (CheeseWindow *cheese_window, GList *files)
     }
     else
     {
-      cheese_thumb_view_remove_item (CHEESE_THUMB_VIEW (cheese_window->thumb_view), l->data);
+      cheese_thumb_view_remove_item (cheese_window_get_thumbview (cheese_window), l->data);
     }
     g_object_unref (l->data);
   }
 }
 
-static void
-cheese_window_move_all_media_to_trash (GtkWidget *widget, CheeseWindow *cheese_window)
+void
+cheese_cmd_file_move_all_to_trash (GtkWidget *widget, CheeseWindow *cheese_window)
 {
   GtkWidget  *dlg;
   char       *prompt;
@@ -292,7 +299,7 @@ cheese_window_move_all_media_to_trash (GtkWidget *widget, CheeseWindow *cheese_w
   const char *name;
 
   prompt = g_strdup_printf (_("Really move all photos and videos to the trash?"));
-  dlg    = gtk_message_dialog_new_with_markup (GTK_WINDOW (cheese_window->window),
+  dlg    = gtk_message_dialog_new_with_markup (GTK_WINDOW (cheese_window),
                                                GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                                                GTK_MESSAGE_WARNING, GTK_BUTTONS_NONE,
                                                "<span weight=\"bold\" size=\"larger\">%s</span>",
@@ -311,7 +318,7 @@ cheese_window_move_all_media_to_trash (GtkWidget *widget, CheeseWindow *cheese_w
     return;
 
   /* append all videos */
-  path_videos = cheese_fileutil_get_video_path (cheese_window->fileutil);
+  path_videos = cheese_fileutil_get_video_path (cheese_window_get_fileutil (cheese_window));
   dir_videos  = g_dir_open (path_videos, 0, NULL);
   while ((name = g_dir_read_name (dir_videos)) != NULL)
   {
@@ -327,7 +334,7 @@ cheese_window_move_all_media_to_trash (GtkWidget *widget, CheeseWindow *cheese_w
   g_dir_close (dir_videos);
 
   /* append all photos */
-  path_photos = cheese_fileutil_get_photo_path (cheese_window->fileutil);
+  path_photos = cheese_fileutil_get_photo_path (cheese_window_get_fileutil (cheese_window));
   dir_photos  = g_dir_open (path_photos, 0, NULL);
   while ((name = g_dir_read_name (dir_photos)) != NULL)
   {
@@ -342,29 +349,29 @@ cheese_window_move_all_media_to_trash (GtkWidget *widget, CheeseWindow *cheese_w
   }
 
   /* delete all items */
-  cheese_window_cmd_move_file_to_trash (cheese_window, files_list);
+  _really_move_to_trash (cheese_window, files_list);
   g_list_free (files_list);
   g_dir_close (dir_photos);
 }
 
-static void
-cheese_window_delete_media (GtkWidget *widget, CheeseWindow *cheese_window)
+void
+cheese_cmd_file_delete (GtkWidget *widget, CheeseWindow *cheese_window)
 {
   GList *files_list = NULL;
 
-  files_list = cheese_thumb_view_get_selected_images_list (CHEESE_THUMB_VIEW (cheese_window->thumb_view));
+  files_list = cheese_thumb_view_get_selected_images_list (cheese_window_get_thumbview (cheese_window));
 
-  cheese_window_cmd_delete_file (cheese_window, files_list, FALSE);
+  _really_delete (cheese_window, files_list, FALSE);
   g_list_free (files_list);
 }
 
-static void
-cheese_cmd_file_move_media_to_trash (GtkWidget *widget, CheeseWindow *cheese_window)
+void
+cheese_cmd_file_move_to_trash (GtkWidget *widget, CheeseWindow *cheese_window)
 {
   GList *files_list = NULL;
 
-  files_list = cheese_thumb_view_get_selected_images_list (CHEESE_THUMB_VIEW (cheese_window->thumb_view));
+  files_list = cheese_thumb_view_get_selected_images_list (cheese_window_get_thumbview (cheese_window));
 
-  cheese_window_cmd_move_file_to_trash (cheese_window, files_list);
+  _really_move_to_trash (cheese_window, files_list);
   g_list_free (files_list);
 }
diff --git a/src/cheese-commands-help.c b/src/cheese-commands-help.c
index 4c62d20..cc010bf 100644
--- a/src/cheese-commands-help.c
+++ b/src/cheese-commands-help.c
@@ -22,7 +22,7 @@
 #include "cheese-commands.h"
 
 void
-cheese_window_cmd_help_contents (GtkAction *action, CheeseWindow *cheese_window)
+cheese_cmd_help_contents (GtkAction *action, CheeseWindow *cheese_window)
 {
   GError    *error = NULL;
   GdkScreen *screen;
@@ -44,7 +44,7 @@ cheese_window_cmd_help_contents (GtkAction *action, CheeseWindow *cheese_window)
 }
 
 void
-cheese_window_cmd_about (GtkAction *action, CheeseWindow *cheese_window)
+cheese_cmd_about (GtkAction *action, CheeseWindow *cheese_window)
 {
   static const char *authors[] = {
     "daniel g. siegel <dgsiegel gnome org>",
diff --git a/src/cheese-commands.h b/src/cheese-commands.h
index 1d48b24..94042b4 100644
--- a/src/cheese-commands.h
+++ b/src/cheese-commands.h
@@ -22,14 +22,25 @@
 #ifndef __CHEESE_COMMANDS_H__
 #define __CHEESE_COMMANDS_H__
 
+#ifdef HAVE_CONFIG_H
+  #include "cheese-config.h"
+#endif
+
 #include <glib.h>
+#include <glib/gi18n.h>
 #include <gtk/gtk.h>
 #include "cheese-window.h"
 
 G_BEGIN_DECLS
 
-void cheese_window_cmd_help_contents (GtkAction *action, CheeseWindow *cheese_window);
-void cheese_window_cmd_about (GtkAction *action, CheeseWindow *cheese_window)
+void cheese_cmd_quit (GtkAction *action, CheeseWindow *window);
+void cheese_cmd_help_contents (GtkAction *action, CheeseWindow *cheese_window);
+void cheese_cmd_about (GtkAction *action, CheeseWindow *cheese_window);
+void cheese_cmd_file_open (GtkWidget *widget, CheeseWindow *cheese_window);
+void cheese_cmd_file_save_as (GtkWidget *widget, CheeseWindow *cheese_window);
+void cheese_cmd_file_move_to_trash (GtkWidget *widget, CheeseWindow *cheese_window);
+void cheese_cmd_file_move_all_to_trash (GtkWidget *widget, CheeseWindow *cheese_window);
+void cheese_cmd_file_delete (GtkWidget *widget, CheeseWindow *cheese_window);
 
 G_END_DECLS
 
diff --git a/src/cheese-dbus.c b/src/cheese-dbus.c
index 2c5ec62..161f339 100644
--- a/src/cheese-dbus.c
+++ b/src/cheese-dbus.c
@@ -49,7 +49,7 @@ cheese_dbus_set_window (gpointer data)
 gboolean
 cheese_dbus_notify ()
 {
-  cheese_window_bring_to_front (window_pointer);
+//  cheese_window_bring_to_front (window_pointer);
   return TRUE;
 }
 
diff --git a/src/cheese-ui.h b/src/cheese-ui.h
index 8d0287d..0068b73 100644
--- a/src/cheese-ui.h
+++ b/src/cheese-ui.h
@@ -28,70 +28,63 @@
 
 G_BEGIN_DECLS
 
-static const GtkActionEntry action_entries_main[] = {
+const GtkActionEntry action_entries_main[] = {
   {"Cheese",       NULL,            N_("_Cheese")                       },
 
   {"Edit",         NULL,            N_("_Edit")                         },
-  {"RemoveAll",    NULL,            N_("Move All to Trash"), NULL, NULL,
-   G_CALLBACK (cheese_window_move_all_media_to_trash)},
+  {"Preferences",  GTK_STOCK_PREFERENCES, N_("Preferences"), NULL, NULL, G_CALLBACK (cheese_window_preferences_cb)},
 
   {"Help",         NULL,            N_("_Help")                         },
 
-  {"Quit",         GTK_STOCK_QUIT,  NULL, NULL, NULL, G_CALLBACK (cheese_window_cmd_close)},
+  {"Quit",         GTK_STOCK_QUIT,  NULL, NULL, NULL, G_CALLBACK (cheese_cmd_quit)},
   {"HelpContents", GTK_STOCK_HELP,  N_("_Contents"), "F1", N_("Help on this Application"),
-   G_CALLBACK (cheese_window_cmd_help_contents)},
-  {"About",        GTK_STOCK_ABOUT, NULL, NULL, NULL, G_CALLBACK (cheese_window_cmd_about)},
+   G_CALLBACK (cheese_cmd_help_contents)},
+  {"About",        GTK_STOCK_ABOUT, NULL, NULL, NULL, G_CALLBACK (cheese_cmd_about)},
 };
 
-static const GtkToggleActionEntry action_entries_countdown[] = {
-  {"Countdown", NULL, N_("Countdown"), NULL, NULL, G_CALLBACK (cheese_window_set_countdown), FALSE},
+const GtkRadioActionEntry action_entries_toggle[] = {
+  {"Photo", NULL, N_("_Photo"), NULL, NULL, 0},
+  {"Video", NULL, N_("_Video"), NULL, NULL, 1},
+  {"Burst", NULL, N_("_Burst"), NULL, NULL, 2},
 };
 
-static const GtkToggleActionEntry action_entries_effects[] = {
-  {"Effects", NULL, N_("_Effects"), NULL, NULL, G_CALLBACK (cheese_window_effect_button_pressed_cb), FALSE},
+const GtkToggleActionEntry action_entries_countdown[] = {
+  {"Countdown", NULL, N_("Countdown"), NULL, NULL, G_CALLBACK (cheese_window_toggle_countdown), FALSE},
 };
-
-static const GtkActionEntry action_entries_preferences[] = {
-  {"Preferences", GTK_STOCK_PREFERENCES, N_("Preferences"), NULL, NULL, G_CALLBACK (cheese_window_preferences_cb)},
+const GtkToggleActionEntry action_entries_effects[] = {
+  {"Effects", NULL, N_("_Effects"), NULL, NULL, G_CALLBACK (cheese_window_effect_button_pressed_cb), FALSE},
 };
 
-static const GtkToggleActionEntry action_entries_fullscreen[] = {
+const GtkToggleActionEntry action_entries_fullscreen[] = {
   {"Fullscreen", GTK_STOCK_FULLSCREEN, NULL, "F11", NULL, G_CALLBACK (cheese_window_toggle_fullscreen), FALSE},
 };
-
-static const GtkToggleActionEntry action_entries_wide_mode[] = {
+const GtkToggleActionEntry action_entries_wide_mode[] = {
   {"WideMode", NULL, N_("_Wide mode"), NULL, NULL, G_CALLBACK (cheese_window_toggle_wide_mode), FALSE},
 };
 
-static const GtkRadioActionEntry action_entries_toggle[] = {
-  {"Photo", NULL, N_("_Photo"), NULL, NULL, 0},
-  {"Video", NULL, N_("_Video"), NULL, NULL, 1},
-  {"Burst", NULL, N_("_Burst"), NULL, NULL, 2},
-};
-
-static const GtkActionEntry action_entries_file[] = {
-  {"Open",        GTK_STOCK_OPEN,    N_("_Open"),          "<control>O",    NULL,
-   G_CALLBACK (cheese_window_cmd_open)},
-  {"SaveAs",      GTK_STOCK_SAVE_AS, N_("Save _Asâ?¦"),    "<control>S",    NULL,
-   G_CALLBACK (cheese_window_cmd_save_as)},
-  {"MoveToTrash", "user-trash",      N_("Move to _Trash"), "Delete",        NULL,
-   G_CALLBACK (cheese_window_move_media_to_trash)},
-  {"Delete",      NULL,              N_("Delete"),         "<shift>Delete", NULL,
-   G_CALLBACK (cheese_window_delete_media)},
-};
-
-static const GtkActionEntry action_entries_photo[] = {
+const GtkActionEntry action_entries_photo[] = {
   {"TakePhoto", NULL, N_("_Take a Photo"), "space", NULL, G_CALLBACK (cheese_window_action_button_clicked_cb)},
 };
-
-static const GtkToggleActionEntry action_entries_video[] = {
+const GtkToggleActionEntry action_entries_video[] = {
   {"TakeVideo", NULL, N_("_Recording"), "space", NULL, G_CALLBACK (cheese_window_action_button_clicked_cb), FALSE},
 };
-
-static const GtkActionEntry action_entries_burst[] = {
+const GtkActionEntry action_entries_burst[] = {
   {"TakeBurst", NULL, N_("_Take multiple Photos"), "space", NULL, G_CALLBACK (cheese_window_action_button_clicked_cb)},
 };
 
+const GtkActionEntry action_entries_file[] = {
+  {"Open",        GTK_STOCK_OPEN,    N_("_Open"),          "<control>O",    NULL,
+   G_CALLBACK (cheese_cmd_file_open)},
+  {"SaveAs",      GTK_STOCK_SAVE_AS, N_("Save _Asâ?¦"),      "<control>S",    NULL,
+   G_CALLBACK (cheese_cmd_file_save_as)},
+  {"MoveToTrash", "user-trash",      N_("Move to _Trash"), "Delete",        NULL,
+   G_CALLBACK (cheese_cmd_file_move_to_trash)},
+  {"RemoveAll",    NULL,             N_("Move All to Trash"), NULL, NULL,
+   G_CALLBACK (cheese_cmd_file_move_all_to_trash)},
+  {"Delete",      NULL,              N_("Delete"),         "<shift>Delete", NULL,
+   G_CALLBACK (cheese_cmd_file_delete)},
+};
+
 G_END_DECLS
 
 #endif /* __CHEESE_UI_H__ */
diff --git a/src/cheese-window.c b/src/cheese-window.c
index 19ebc1c..32aecdc 100644
--- a/src/cheese-window.c
+++ b/src/cheese-window.c
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2008-2009 Filippo Argiolas <filippo argiolas gmail com>
+ * Copyright © 2008-2010 Filippo Argiolas <filippo argiolas gmail com>
  * Copyright © 2007-2009 daniel g. siegel <dgsiegel gnome org>
  * Copyright © 2007,2008 Jaap Haitsma <jaap haitsma org>
  * Copyright © 2008 Patryk Zawadzki <patrys pld-linux org>
@@ -45,9 +45,6 @@
 
 #include "cheese-countdown.h"
 #include "cheese-effect-chooser.h"
-#include "cheese-fileutil.h"
-#include "cheese-gconf.h"
-#include "cheese-thumb-view.h"
 #include "eog-thumb-nav.h"
 #include "cheese-no-camera.h"
 #include "cheese-prefs-dialog.h"
@@ -68,23 +65,12 @@ typedef enum
 
 typedef enum
 {
-  CHEESE_RESPONSE_SKIP,
-  CHEESE_RESPONSE_SKIP_ALL,
-  CHEESE_RESPONSE_DELETE_ALL
-} CheeseDeleteResponseType;
-
-typedef enum
-{
   PAGE_WEBCAM  = 0,
   PAGE_EFFECTS = 1,
   PAGE_SPINNER = 2,
   PAGE_PROBLEM = 3,
 } CheeseNotebookPage;
 
-#define CHEESE_BUTTON_SKIP       _("_Skip")
-#define CHEESE_BUTTON_SKIP_ALL   _("S_kip All")
-#define CHEESE_BUTTON_DELETE_ALL _("Delete _All")
-
 typedef struct
 {
   gboolean recording;
@@ -100,7 +86,7 @@ typedef struct
   CheeseGConf *gconf;
   CheeseFileUtil *fileutil;
 
-  CheeseDbus *server;
+//  CheeseDbus *server;
 
   GtkWidget *window;
   GtkWidget *fullscreen_popup;
@@ -162,7 +148,6 @@ typedef struct
 
   GtkActionGroup *actions_countdown;
   GtkActionGroup *actions_effects;
-  GtkActionGroup *actions_preferences;
   GtkActionGroup *actions_file;
   GtkActionGroup *actions_main;
   GtkActionGroup *actions_photo;
@@ -313,8 +298,6 @@ cheese_window_spinner_invert (GtkWidget *spinner, GtkWidget *parent)
   }
 }
 
-static void cheese_window_action_button_clicked_cb (GtkWidget *widget, CheeseWindow *cheese_window);
-
 #if 0
 void
 cheese_window_bring_to_front (gpointer data)
@@ -330,13 +313,6 @@ cheese_window_bring_to_front (gpointer data)
 
 #endif
 
-/* standard event handler */
-static int
-cheese_window_delete_event_cb (GtkWidget *widget, GdkEvent event, gpointer data)
-{
-  return FALSE;
-}
-
 static gboolean
 cheese_window_key_press_event_cb (GtkWidget *win, GdkEventKey *event, CheeseWindow *cheese_window)
 {
@@ -429,7 +405,7 @@ cheese_window_fullscreen_motion_notify_cb (GtkWidget      *widget,
     int height;
     int width;
 
-    gtk_window_get_size (GTK_WINDOW (priv->window), &width, &height);
+    gtk_window_get_size (GTK_WINDOW (cheese_window), &width, &height);
     if (event->y > height - 5)
     {
       cheese_window_fullscreen_show_bar (cheese_window);
@@ -442,7 +418,7 @@ cheese_window_fullscreen_motion_notify_cb (GtkWidget      *widget,
   return FALSE;
 }
 
-static void
+void
 cheese_window_toggle_wide_mode (GtkWidget *widget, CheeseWindow *cheese_window)
 {
   CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
@@ -506,14 +482,14 @@ cheese_window_toggle_wide_mode (GtkWidget *widget, CheeseWindow *cheese_window)
   gtk_container_resize_children (GTK_CONTAINER (priv->thumb_scrollwindow));
 
   GtkRequisition req;
-  gtk_widget_size_request (priv->window, &req);
-  gtk_window_resize (GTK_WINDOW (priv->window), req.width, req.height);
+  gtk_widget_size_request (GTK_WIDGET (cheese_window), &req);
+  gtk_window_resize (GTK_WINDOW (cheese_window), req.width, req.height);
   gtk_widget_set_size_request (priv->notebook, -1, -1);
 
   g_object_set (priv->gconf, "gconf_prop_wide_mode", toggled, NULL);
 }
 
-static void
+void
 cheese_window_toggle_fullscreen (GtkWidget *widget, CheeseWindow *cheese_window)
 {
   CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
@@ -528,19 +504,19 @@ cheese_window_toggle_fullscreen (GtkWidget *widget, CheeseWindow *cheese_window)
     gtk_widget_hide (priv->thumb_scrollwindow);
     gtk_widget_hide (menubar);
     gtk_widget_hide (priv->notebook_bar);
-    gtk_widget_modify_bg (priv->window, GTK_STATE_NORMAL, &bg_color);
+    gtk_widget_modify_bg (GTK_WIDGET (cheese_window), GTK_STATE_NORMAL, &bg_color);
 
-    gtk_widget_add_events (priv->window, GDK_POINTER_MOTION_MASK);
+    gtk_widget_add_events (GTK_WIDGET (cheese_window), GDK_POINTER_MOTION_MASK);
     gtk_widget_add_events (priv->screen, GDK_POINTER_MOTION_MASK);
 
-    g_signal_connect (priv->window, "motion-notify-event",
+    g_signal_connect (cheese_window, "motion-notify-event",
                       G_CALLBACK (cheese_window_fullscreen_motion_notify_cb),
                       cheese_window);
     g_signal_connect (priv->screen, "motion-notify-event",
                       G_CALLBACK (cheese_window_fullscreen_motion_notify_cb),
                       cheese_window);
 
-    gtk_window_fullscreen (GTK_WINDOW (priv->window));
+    gtk_window_fullscreen (GTK_WINDOW (cheese_window));
 
     gtk_widget_set_size_request (priv->effect_alignment, -1, FULLSCREEN_POPUP_HEIGHT);
     cheese_window_fullscreen_show_bar (cheese_window);
@@ -553,16 +529,16 @@ cheese_window_toggle_fullscreen (GtkWidget *widget, CheeseWindow *cheese_window)
   }
   else
   {
-    gtk_widget_show_all (priv->window);
+    gtk_widget_show_all (GTK_WIDGET (cheese_window));
     gtk_widget_hide_all (priv->fullscreen_popup);
-    gtk_widget_modify_bg (priv->window, GTK_STATE_NORMAL, NULL);
+    gtk_widget_modify_bg (GTK_WIDGET (cheese_window), GTK_STATE_NORMAL, NULL);
 
-    g_signal_handlers_disconnect_by_func (priv->window,
+    g_signal_handlers_disconnect_by_func (cheese_window,
                                           (gpointer) cheese_window_fullscreen_motion_notify_cb, cheese_window);
     g_signal_handlers_disconnect_by_func (priv->screen,
                                           (gpointer) cheese_window_fullscreen_motion_notify_cb, cheese_window);
 
-    gtk_window_unfullscreen (GTK_WINDOW (priv->window));
+    gtk_window_unfullscreen (GTK_WINDOW (cheese_window));
     gtk_widget_set_size_request (priv->effect_alignment, -1, -1);
     priv->isFullscreen = FALSE;
 
@@ -621,47 +597,17 @@ cheese_window_video_saved_cb (CheeseCamera *camera, CheeseWindow *cheese_window)
 }
 
 static void
-cheese_window_cmd_close (GtkWidget *widget, CheeseWindow *cheese_window)
-{
-  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
-  g_object_unref (priv->camera);
-  g_object_unref (priv->actions_main);
-  g_object_unref (priv->actions_countdown);
-  g_object_unref (priv->actions_effects);
-  g_object_unref (priv->actions_file);
-  g_object_unref (priv->actions_photo);
-  g_object_unref (priv->actions_toggle);
-  g_object_unref (priv->actions_effects);
-  g_object_unref (priv->actions_preferences);
-  g_object_unref (priv->actions_file);
-  g_object_unref (priv->actions_video);
-  g_object_unref (priv->actions_burst);
-  g_object_unref (priv->actions_fullscreen);
-  g_object_unref (priv->gconf);
-
-  g_free (cheese_window);
-  gtk_main_quit ();
-}
-
-static void
-cheese_window_set_countdown (GtkWidget *widget, CheeseWindow *cheese_window)
-{
-  gboolean countdown = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (widget));
-
-  g_object_set (cheese_window->gconf, "gconf_prop_countdown", countdown, NULL);
-}
-
-static void
 cheese_window_selection_changed_cb (GtkIconView  *iconview,
-                                    CheeseWindow *cheese_window)
+                                    CheeseWindow *window)
 {
-  if (cheese_thumb_view_get_n_selected (CHEESE_THUMB_VIEW (cheese_window->thumb_view)) > 0)
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (window);
+  if (cheese_thumb_view_get_n_selected (CHEESE_THUMB_VIEW (priv->thumb_view)) > 0)
   {
-    gtk_action_group_set_sensitive (cheese_window->actions_file, TRUE);
+    gtk_action_group_set_sensitive (priv->actions_file, TRUE);
   }
   else
   {
-    gtk_action_group_set_sensitive (cheese_window->actions_file, FALSE);
+    gtk_action_group_set_sensitive (priv->actions_file, FALSE);
   }
 }
 
@@ -669,6 +615,7 @@ static gboolean
 cheese_window_button_press_event_cb (GtkWidget *iconview, GdkEventButton *event,
                                      CheeseWindow *cheese_window)
 {
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
   GtkTreePath *path;
 
   if (event->type == GDK_BUTTON_PRESS || event->type == GDK_2BUTTON_PRESS)
@@ -679,11 +626,11 @@ cheese_window_button_press_event_cb (GtkWidget *iconview, GdkEventButton *event,
 
     if (event->type == GDK_BUTTON_PRESS && event->button == 1)
     {
-      if (cheese_thumb_view_get_n_selected (CHEESE_THUMB_VIEW (cheese_window->thumb_view)) > 1)
+      if (cheese_thumb_view_get_n_selected (CHEESE_THUMB_VIEW (priv->thumb_view)) > 1)
       {
-        gtk_icon_view_unselect_all (GTK_ICON_VIEW (cheese_window->thumb_view));
-        gtk_icon_view_select_path (GTK_ICON_VIEW (cheese_window->thumb_view), path);
-        gtk_icon_view_set_cursor (GTK_ICON_VIEW (cheese_window->thumb_view), path, NULL, FALSE);
+        gtk_icon_view_unselect_all (GTK_ICON_VIEW (priv->thumb_view));
+        gtk_icon_view_select_path (GTK_ICON_VIEW (priv->thumb_view), path);
+        gtk_icon_view_set_cursor (GTK_ICON_VIEW (priv->thumb_view), path, NULL, FALSE);
       }
     }
     else if (event->type == GDK_BUTTON_PRESS && event->button == 3)
@@ -701,18 +648,18 @@ cheese_window_button_press_event_cb (GtkWidget *iconview, GdkEventButton *event,
         event_time = gtk_get_current_event_time ();
       }
 
-      if (!gtk_icon_view_path_is_selected (GTK_ICON_VIEW (cheese_window->thumb_view), path) ||
-          cheese_thumb_view_get_n_selected (CHEESE_THUMB_VIEW (cheese_window->thumb_view)) <= 1)
+      if (!gtk_icon_view_path_is_selected (GTK_ICON_VIEW (priv->thumb_view), path) ||
+          cheese_thumb_view_get_n_selected (CHEESE_THUMB_VIEW (priv->thumb_view)) <= 1)
       {
-        gtk_icon_view_unselect_all (GTK_ICON_VIEW (cheese_window->thumb_view));
-        gtk_icon_view_select_path (GTK_ICON_VIEW (cheese_window->thumb_view), path);
-        gtk_icon_view_set_cursor (GTK_ICON_VIEW (cheese_window->thumb_view), path, NULL, FALSE);
+        gtk_icon_view_unselect_all (GTK_ICON_VIEW (priv->thumb_view));
+        gtk_icon_view_select_path (GTK_ICON_VIEW (priv->thumb_view), path);
+        gtk_icon_view_set_cursor (GTK_ICON_VIEW (priv->thumb_view), path, NULL, FALSE);
       }
 
       GList   *l, *files;
       gchar   *file;
       gboolean list_has_videos = FALSE;
-      files = cheese_thumb_view_get_selected_images_list (CHEESE_THUMB_VIEW (cheese_window->thumb_view));
+      files = cheese_thumb_view_get_selected_images_list (CHEESE_THUMB_VIEW (priv->thumb_view));
 
       for (l = files; l != NULL; l = l->next)
       {
@@ -727,86 +674,50 @@ cheese_window_button_press_event_cb (GtkWidget *iconview, GdkEventButton *event,
       g_list_free (l);
       g_list_free (files);
 
-      gtk_menu_popup (GTK_MENU (cheese_window->thumb_view_popup_menu),
+      gtk_menu_popup (GTK_MENU (priv->thumb_view_popup_menu),
                       NULL, iconview, NULL, NULL, button, event_time);
 
       return TRUE;
     }
     else if (event->type == GDK_2BUTTON_PRESS && event->button == 1)
     {
-      cheese_window_cmd_open (NULL, cheese_window);
+      cheese_cmd_file_open (NULL, cheese_window);
       return TRUE;
     }
   }
   return FALSE;
 }
 
-static void
-cheese_window_effect_button_pressed_cb (GtkWidget *widget, CheeseWindow *cheese_window)
-{
-  if (gtk_notebook_get_current_page (GTK_NOTEBOOK (cheese_window->notebook)) == 1)
-  {
-    gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook), PAGE_WEBCAM);
-    gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_effects), _("_Effects"));
-    gtk_widget_set_sensitive (cheese_window->take_picture, TRUE);
-    gtk_widget_set_sensitive (cheese_window->take_picture_fullscreen, TRUE);
-    if (cheese_window->camera_mode == CAMERA_MODE_PHOTO)
-    {
-      gtk_action_group_set_sensitive (cheese_window->actions_photo, TRUE);
-    }
-    else if (cheese_window->camera_mode == CAMERA_MODE_BURST)
-    {
-      gtk_action_group_set_sensitive (cheese_window->actions_burst, TRUE);
-    }
-    else
-    {
-      gtk_action_group_set_sensitive (cheese_window->actions_video, TRUE);
-    }
-    cheese_camera_set_effect (cheese_window->camera,
-                              cheese_effect_chooser_get_selection (CHEESE_EFFECT_CHOOSER (cheese_window->effect_chooser)));
-    g_object_set (cheese_window->gconf, "gconf_prop_selected_effects",
-                  cheese_effect_chooser_get_selection_string (CHEESE_EFFECT_CHOOSER (cheese_window->effect_chooser)),
-                  NULL);
-  }
-  else
-  {
-    gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook), PAGE_EFFECTS);
-    gtk_widget_set_sensitive (GTK_WIDGET (cheese_window->take_picture), FALSE);
-    gtk_widget_set_sensitive (GTK_WIDGET (cheese_window->take_picture_fullscreen), FALSE);
-    gtk_action_group_set_sensitive (cheese_window->actions_photo, FALSE);
-    gtk_action_group_set_sensitive (cheese_window->actions_video, FALSE);
-    gtk_action_group_set_sensitive (cheese_window->actions_burst, FALSE);
-  }
-}
-
 void
 cheese_window_countdown_hide_cb (gpointer data)
 {
   CheeseWindow *cheese_window = (CheeseWindow *) data;
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
 
-  gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook_bar), 0);
-  gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->fullscreen_bar), 0);
+  gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook_bar), 0);
+  gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->fullscreen_bar), 0);
 }
 
 void
 cheese_window_countdown_picture_cb (gpointer data)
 {
   CheeseWindow *cheese_window = (CheeseWindow *) data;
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
   char         *photo_filename;
 
-  if (cheese_window->camera_mode == CAMERA_MODE_BURST)
+  if (priv->camera_mode == CAMERA_MODE_BURST)
   {
-    photo_filename = cheese_fileutil_get_new_media_filename (cheese_window->fileutil, CHEESE_MEDIA_MODE_BURST);
+    photo_filename = cheese_fileutil_get_new_media_filename (priv->fileutil, CHEESE_MEDIA_MODE_BURST);
   }
   else
   {
-    photo_filename = cheese_fileutil_get_new_media_filename (cheese_window->fileutil, CHEESE_MEDIA_MODE_PHOTO);
+    photo_filename = cheese_fileutil_get_new_media_filename (priv->fileutil, CHEESE_MEDIA_MODE_PHOTO);
   }
 
-  if (cheese_camera_take_photo (cheese_window->camera, photo_filename))
+  if (cheese_camera_take_photo (priv->camera, photo_filename))
   {
-    cheese_flash_fire (cheese_window->flash);
-    ca_gtk_play_for_widget (cheese_window->screen, 0,
+    cheese_flash_fire (priv->flash);
+    ca_gtk_play_for_widget (priv->screen, 0,
                             CA_PROP_EVENT_ID, "camera-shutter",
                             CA_PROP_MEDIA_ROLE, "event",
                             CA_PROP_EVENT_DESCRIPTION, _("Shutter sound"),
@@ -828,7 +739,7 @@ cheese_window_no_camera_info_bar_response (GtkWidget *widget, gint response_id,
     if (ret == FALSE)
     {
       GtkWidget *d;
-      d = gtk_message_dialog_new (GTK_WINDOW (cheese_window->window),
+      d = gtk_message_dialog_new (GTK_WINDOW (cheese_window),
                                   GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                                   GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE,
                                   _("Unable to open help file for Cheese"));
@@ -842,23 +753,24 @@ cheese_window_no_camera_info_bar_response (GtkWidget *widget, gint response_id,
 static void
 cheese_window_stop_recording (CheeseWindow *cheese_window)
 {
-  if (cheese_window->recording)
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
+  if (priv->recording)
   {
-    gtk_action_group_set_sensitive (cheese_window->actions_effects, TRUE);
-    gtk_action_group_set_sensitive (cheese_window->actions_toggle, TRUE);
-    gtk_widget_set_sensitive (cheese_window->take_picture, FALSE);
+    gtk_action_group_set_sensitive (priv->actions_effects, TRUE);
+    gtk_action_group_set_sensitive (priv->actions_toggle, TRUE);
+    gtk_widget_set_sensitive (priv->take_picture, FALSE);
     gchar *str = g_strconcat ("<b>", _("_Start Recording"), "</b>", NULL);
-    gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo), str);
-    gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo_fullscreen), str);
+    gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->label_take_photo), str);
+    gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->label_take_photo_fullscreen), str);
     g_free (str);
-    gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo), TRUE);
-    gtk_image_set_from_stock (GTK_IMAGE (cheese_window->image_take_photo), GTK_STOCK_MEDIA_RECORD, GTK_ICON_SIZE_BUTTON);
-    gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo_fullscreen), TRUE);
-    gtk_image_set_from_stock (GTK_IMAGE (cheese_window->image_take_photo_fullscreen),
+    gtk_label_set_use_markup (GTK_LABEL (priv->label_take_photo), TRUE);
+    gtk_image_set_from_stock (GTK_IMAGE (priv->image_take_photo), GTK_STOCK_MEDIA_RECORD, GTK_ICON_SIZE_BUTTON);
+    gtk_label_set_use_markup (GTK_LABEL (priv->label_take_photo_fullscreen), TRUE);
+    gtk_image_set_from_stock (GTK_IMAGE (priv->image_take_photo_fullscreen),
                               GTK_STOCK_MEDIA_RECORD, GTK_ICON_SIZE_BUTTON);
 
-    cheese_camera_stop_video_recording (cheese_window->camera);
-    cheese_window->recording = FALSE;
+    cheese_camera_stop_video_recording (priv->camera);
+    priv->recording = FALSE;
   }
 }
 
@@ -867,40 +779,41 @@ cheese_window_escape_key_cb (CheeseWindow *cheese_window,
                              GtkAccelGroup *accel_group,
                              guint keyval, GdkModifierType modifier)
 {
-  if (cheese_window->isFullscreen)
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
+  if (priv->isFullscreen)
   {
-    if (cheese_countdown_get_state (CHEESE_COUNTDOWN (cheese_window->countdown_fullscreen)) == 0)
+    if (cheese_countdown_get_state (CHEESE_COUNTDOWN (priv->countdown_fullscreen)) == 0)
     {
-      GtkAction *action = gtk_ui_manager_get_action (cheese_window->ui_manager, "/MainMenu/Cheese/Fullscreen");
+      GtkAction *action = gtk_ui_manager_get_action (priv->ui_manager, "/MainMenu/Cheese/Fullscreen");
       gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), FALSE);
       return TRUE;
     }
   }
 
-  cheese_countdown_cancel ((CheeseCountdown *) cheese_window->countdown);
-  cheese_countdown_cancel ((CheeseCountdown *) cheese_window->countdown_fullscreen);
+  cheese_countdown_cancel ((CheeseCountdown *) priv->countdown);
+  cheese_countdown_cancel ((CheeseCountdown *) priv->countdown_fullscreen);
 
-  if (cheese_window->camera_mode == CAMERA_MODE_PHOTO)
+  if (priv->camera_mode == CAMERA_MODE_PHOTO)
   {
-    gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook_bar), 0);
-    gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->fullscreen_bar), 0);
+    gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook_bar), 0);
+    gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->fullscreen_bar), 0);
 
-    gtk_widget_set_sensitive (cheese_window->take_picture, TRUE);
-    gtk_widget_set_sensitive (cheese_window->take_picture_fullscreen, TRUE);
+    gtk_widget_set_sensitive (priv->take_picture, TRUE);
+    gtk_widget_set_sensitive (priv->take_picture_fullscreen, TRUE);
   }
-  else if (cheese_window->camera_mode == CAMERA_MODE_BURST)
+  else if (priv->camera_mode == CAMERA_MODE_BURST)
   {
-    cheese_window->repeat_count = 0;
-    cheese_window->is_bursting  = FALSE;
+    priv->repeat_count = 0;
+    priv->is_bursting  = FALSE;
 
-    gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook_bar), 0);
-    gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->fullscreen_bar), 0);
+    gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook_bar), 0);
+    gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->fullscreen_bar), 0);
 
-    gtk_action_group_set_sensitive (cheese_window->actions_effects, TRUE);
-    gtk_action_group_set_sensitive (cheese_window->actions_toggle, TRUE);
+    gtk_action_group_set_sensitive (priv->actions_effects, TRUE);
+    gtk_action_group_set_sensitive (priv->actions_toggle, TRUE);
 
-    gtk_widget_set_sensitive (cheese_window->take_picture, TRUE);
-    gtk_widget_set_sensitive (cheese_window->take_picture_fullscreen, TRUE);
+    gtk_widget_set_sensitive (priv->take_picture, TRUE);
+    gtk_widget_set_sensitive (priv->take_picture_fullscreen, TRUE);
   }
   else
   {
@@ -914,24 +827,25 @@ cheese_window_take_photo (gpointer data)
 {
   gboolean      countdown;
   CheeseWindow *cheese_window = (CheeseWindow *) data;
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
 
   /* return if burst mode was cancelled */
-  if (cheese_window->camera_mode == CAMERA_MODE_BURST &&
-      !cheese_window->is_bursting && cheese_window->repeat_count <= 0)
+  if (priv->camera_mode == CAMERA_MODE_BURST &&
+      !priv->is_bursting && priv->repeat_count <= 0)
   {
     return FALSE;
   }
 
-  g_object_get (cheese_window->gconf, "gconf_prop_countdown", &countdown, NULL);
+  g_object_get (priv->gconf, "gconf_prop_countdown", &countdown, NULL);
   if (countdown)
   {
-    if (cheese_window->isFullscreen)
+    if (priv->isFullscreen)
     {
-      cheese_countdown_start ((CheeseCountdown *) cheese_window->countdown_fullscreen,
+      cheese_countdown_start ((CheeseCountdown *) priv->countdown_fullscreen,
                               cheese_window_countdown_picture_cb,
                               cheese_window_countdown_hide_cb,
                               (gpointer) cheese_window);
-      gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->fullscreen_bar), 1);
+      gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->fullscreen_bar), 1);
 
       /* show bar, start timeout
        * ATTENTION: if the countdown is longer than FULLSCREEN_TIMEOUT,
@@ -942,11 +856,11 @@ cheese_window_take_photo (gpointer data)
     }
     else
     {
-      cheese_countdown_start ((CheeseCountdown *) cheese_window->countdown,
+      cheese_countdown_start ((CheeseCountdown *) priv->countdown,
                               cheese_window_countdown_picture_cb,
                               cheese_window_countdown_hide_cb,
                               (gpointer) cheese_window);
-      gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook_bar), 1);
+      gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook_bar), 1);
     }
   }
   else
@@ -954,16 +868,16 @@ cheese_window_take_photo (gpointer data)
     cheese_window_countdown_picture_cb (cheese_window);
   }
 
-  gtk_widget_set_sensitive (cheese_window->take_picture, FALSE);
-  gtk_widget_set_sensitive (cheese_window->take_picture_fullscreen, FALSE);
+  gtk_widget_set_sensitive (priv->take_picture, FALSE);
+  gtk_widget_set_sensitive (priv->take_picture_fullscreen, FALSE);
 
-  if (cheese_window->camera_mode == CAMERA_MODE_BURST)
+  if (priv->camera_mode == CAMERA_MODE_BURST)
   {
     guint    repeat_delay = 1000;
     gboolean countdown    = FALSE;
 
-    g_object_get (cheese_window->gconf, "gconf_prop_burst_delay", &repeat_delay, NULL);
-    g_object_get (cheese_window->gconf, "gconf_prop_countdown", &countdown, NULL);
+    g_object_get (priv->gconf, "gconf_prop_burst_delay", &repeat_delay, NULL);
+    g_object_get (priv->gconf, "gconf_prop_countdown", &countdown, NULL);
 
     if (countdown && repeat_delay < 5000)
     {
@@ -973,64 +887,65 @@ cheese_window_take_photo (gpointer data)
     }
 
     /* start burst mode photo series */
-    if (!cheese_window->is_bursting)
+    if (!priv->is_bursting)
     {
       g_timeout_add (repeat_delay, cheese_window_take_photo, cheese_window);
-      cheese_window->is_bursting = TRUE;
+      priv->is_bursting = TRUE;
     }
-    cheese_window->repeat_count--;
-    if (cheese_window->repeat_count > 0)
+    priv->repeat_count--;
+    if (priv->repeat_count > 0)
     {
       return TRUE;
     }
   }
-  cheese_window->is_bursting = FALSE;
+  priv->is_bursting = FALSE;
 
   return FALSE;
 }
 
-static void
+void
 cheese_window_action_button_clicked_cb (GtkWidget *widget, CheeseWindow *cheese_window)
 {
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
   char *str;
 
-  switch (cheese_window->camera_mode)
+  switch (priv->camera_mode)
   {
     case CAMERA_MODE_BURST:
 
       /* ignore keybindings and other while bursting */
-      if (cheese_window->is_bursting)
+      if (priv->is_bursting)
       {
         break;
       }
-      gtk_action_group_set_sensitive (cheese_window->actions_effects, FALSE);
-      gtk_action_group_set_sensitive (cheese_window->actions_toggle, FALSE);
-      g_object_get (cheese_window->gconf, "gconf_prop_burst_repeat", &cheese_window->repeat_count, NULL); /* reset burst counter */
-      cheese_fileutil_reset_burst (cheese_window->fileutil); /* reset filename counter */
+      gtk_action_group_set_sensitive (priv->actions_effects, FALSE);
+      gtk_action_group_set_sensitive (priv->actions_toggle, FALSE);
+      g_object_get (priv->gconf, "gconf_prop_burst_repeat", &priv->repeat_count, NULL); /* reset burst counter */
+      cheese_fileutil_reset_burst (priv->fileutil); /* reset filename counter */
     case CAMERA_MODE_PHOTO:
       cheese_window_take_photo (cheese_window);
       break;
     case CAMERA_MODE_VIDEO:
-      if (!cheese_window->recording)
+      if (!priv->recording)
       {
-        gtk_action_group_set_sensitive (cheese_window->actions_effects, FALSE);
-        gtk_action_group_set_sensitive (cheese_window->actions_toggle, FALSE);
+        gtk_action_group_set_sensitive (priv->actions_effects, FALSE);
+        gtk_action_group_set_sensitive (priv->actions_toggle, FALSE);
         str = g_strconcat ("<b>", _("_Stop Recording"), "</b>", NULL);
-        gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo), str);
-        gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo_fullscreen), str);
+        gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->label_take_photo), str);
+        gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->label_take_photo_fullscreen), str);
         g_free (str);
-        gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo), TRUE);
+        gtk_label_set_use_markup (GTK_LABEL (priv->label_take_photo), TRUE);
         gtk_image_set_from_stock (GTK_IMAGE (
-                                    cheese_window->image_take_photo), GTK_STOCK_MEDIA_STOP, GTK_ICON_SIZE_BUTTON);
-        gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo_fullscreen), TRUE);
-        gtk_image_set_from_stock (GTK_IMAGE (cheese_window->image_take_photo_fullscreen),
+                                    priv->image_take_photo), GTK_STOCK_MEDIA_STOP, GTK_ICON_SIZE_BUTTON);
+        gtk_label_set_use_markup (GTK_LABEL (priv->label_take_photo_fullscreen), TRUE);
+        gtk_image_set_from_stock (GTK_IMAGE (priv->image_take_photo_fullscreen),
                                   GTK_STOCK_MEDIA_STOP, GTK_ICON_SIZE_BUTTON);
 
-        cheese_window->video_filename = cheese_fileutil_get_new_media_filename (cheese_window->fileutil,
+        priv->video_filename = cheese_fileutil_get_new_media_filename (priv->fileutil,
                                                                                 CAMERA_MODE_VIDEO);
-        cheese_camera_start_video_recording (cheese_window->camera, cheese_window->video_filename);
+        cheese_camera_start_video_recording (priv->camera, priv->video_filename);
 
-        cheese_window->recording = TRUE;
+        priv->recording = TRUE;
       }
       else
       {
@@ -1043,56 +958,106 @@ cheese_window_action_button_clicked_cb (GtkWidget *widget, CheeseWindow *cheese_
   }
 }
 
-static void
+void
+cheese_window_effect_button_pressed_cb (GtkWidget *widget, CheeseWindow *cheese_window)
+{
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
+  if (gtk_notebook_get_current_page (GTK_NOTEBOOK (priv->notebook)) == 1)
+  {
+    gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), PAGE_WEBCAM);
+    gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->label_effects), _("_Effects"));
+    gtk_widget_set_sensitive (priv->take_picture, TRUE);
+    gtk_widget_set_sensitive (priv->take_picture_fullscreen, TRUE);
+    if (priv->camera_mode == CAMERA_MODE_PHOTO)
+    {
+      gtk_action_group_set_sensitive (priv->actions_photo, TRUE);
+    }
+    else if (priv->camera_mode == CAMERA_MODE_BURST)
+    {
+      gtk_action_group_set_sensitive (priv->actions_burst, TRUE);
+    }
+    else
+    {
+      gtk_action_group_set_sensitive (priv->actions_video, TRUE);
+    }
+    cheese_camera_set_effect (priv->camera,
+                              cheese_effect_chooser_get_selection (CHEESE_EFFECT_CHOOSER (priv->effect_chooser)));
+    g_object_set (priv->gconf, "gconf_prop_selected_effects",
+                  cheese_effect_chooser_get_selection_string (CHEESE_EFFECT_CHOOSER (priv->effect_chooser)),
+                  NULL);
+  }
+  else
+  {
+    gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), PAGE_EFFECTS);
+    gtk_widget_set_sensitive (GTK_WIDGET (priv->take_picture), FALSE);
+    gtk_widget_set_sensitive (GTK_WIDGET (priv->take_picture_fullscreen), FALSE);
+    gtk_action_group_set_sensitive (priv->actions_photo, FALSE);
+    gtk_action_group_set_sensitive (priv->actions_video, FALSE);
+    gtk_action_group_set_sensitive (priv->actions_burst, FALSE);
+  }
+}
+
+void
 cheese_window_preferences_cb (GtkAction *action, CheeseWindow *cheese_window)
 {
-  cheese_prefs_dialog_run (cheese_window->window, cheese_window->gconf,
-                           cheese_window->camera);
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
+  cheese_prefs_dialog_run (GTK_WIDGET (cheese_window), priv->gconf,
+                           priv->camera);
+}
+
+void
+cheese_window_toggle_countdown (GtkWidget *widget, CheeseWindow *window)
+{
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (window);
+  gboolean countdown = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (widget));
+
+  g_object_set (priv->gconf, "gconf_prop_countdown", countdown, NULL);
 }
 
 static void
 cheese_window_activate_radio_action (GtkAction *action, GtkRadioAction *current, CheeseWindow *cheese_window)
 {
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
   gchar *str;
 
   if (strcmp (gtk_action_get_name (GTK_ACTION (current)), "Photo") == 0)
   {
-    cheese_window->camera_mode = CAMERA_MODE_PHOTO;
+    priv->camera_mode = CAMERA_MODE_PHOTO;
 
     str = g_strconcat ("<b>", _("_Take a Photo"), "</b>", NULL);
-    gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo), g_strdup (str));
-    gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo), TRUE);
-    gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo_fullscreen), g_strdup (str));
-    gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo_fullscreen), TRUE);
-    gtk_action_group_set_sensitive (cheese_window->actions_photo, TRUE);
-    gtk_action_group_set_sensitive (cheese_window->actions_video, FALSE);
-    gtk_action_group_set_sensitive (cheese_window->actions_burst, FALSE);
+    gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->label_take_photo), g_strdup (str));
+    gtk_label_set_use_markup (GTK_LABEL (priv->label_take_photo), TRUE);
+    gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->label_take_photo_fullscreen), g_strdup (str));
+    gtk_label_set_use_markup (GTK_LABEL (priv->label_take_photo_fullscreen), TRUE);
+    gtk_action_group_set_sensitive (priv->actions_photo, TRUE);
+    gtk_action_group_set_sensitive (priv->actions_video, FALSE);
+    gtk_action_group_set_sensitive (priv->actions_burst, FALSE);
   }
   else if (strcmp (gtk_action_get_name (GTK_ACTION (current)), "Burst") == 0)
   {
-    cheese_window->camera_mode = CAMERA_MODE_BURST;
+    priv->camera_mode = CAMERA_MODE_BURST;
 
     str = g_strconcat ("<b>", _("_Take multiple Photos"), "</b>", NULL);
-    gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo), g_strdup (str));
-    gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo), TRUE);
-    gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo_fullscreen), g_strdup (str));
-    gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo_fullscreen), TRUE);
-    gtk_action_group_set_sensitive (cheese_window->actions_photo, FALSE);
-    gtk_action_group_set_sensitive (cheese_window->actions_video, FALSE);
-    gtk_action_group_set_sensitive (cheese_window->actions_burst, TRUE);
+    gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->label_take_photo), g_strdup (str));
+    gtk_label_set_use_markup (GTK_LABEL (priv->label_take_photo), TRUE);
+    gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->label_take_photo_fullscreen), g_strdup (str));
+    gtk_label_set_use_markup (GTK_LABEL (priv->label_take_photo_fullscreen), TRUE);
+    gtk_action_group_set_sensitive (priv->actions_photo, FALSE);
+    gtk_action_group_set_sensitive (priv->actions_video, FALSE);
+    gtk_action_group_set_sensitive (priv->actions_burst, TRUE);
   }
   else
   {
-    cheese_window->camera_mode = CAMERA_MODE_VIDEO;
+    priv->camera_mode = CAMERA_MODE_VIDEO;
 
     str = g_strconcat ("<b>", _("_Start recording"), "</b>", NULL);
-    gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo), g_strdup (str));
-    gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo), TRUE);
-    gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo_fullscreen), g_strdup (str));
-    gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo_fullscreen), TRUE);
-    gtk_action_group_set_sensitive (cheese_window->actions_photo, FALSE);
-    gtk_action_group_set_sensitive (cheese_window->actions_video, TRUE);
-    gtk_action_group_set_sensitive (cheese_window->actions_burst, FALSE);
+    gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->label_take_photo), g_strdup (str));
+    gtk_label_set_use_markup (GTK_LABEL (priv->label_take_photo), TRUE);
+    gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->label_take_photo_fullscreen), g_strdup (str));
+    gtk_label_set_use_markup (GTK_LABEL (priv->label_take_photo_fullscreen), TRUE);
+    gtk_action_group_set_sensitive (priv->actions_photo, FALSE);
+    gtk_action_group_set_sensitive (priv->actions_video, TRUE);
+    gtk_action_group_set_sensitive (priv->actions_burst, FALSE);
   }
   g_free (str);
 }
@@ -1101,13 +1066,14 @@ GtkActionGroup *
 cheese_window_action_group_new (CheeseWindow *cheese_window, char *name,
                                 const GtkActionEntry *action_entries, int num_action_entries)
 {
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
   GtkActionGroup *action_group;
 
   action_group = gtk_action_group_new (name);
   gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
   gtk_action_group_add_actions (action_group, action_entries,
                                 num_action_entries, cheese_window);
-  gtk_ui_manager_insert_action_group (cheese_window->ui_manager, action_group, 0);
+  gtk_ui_manager_insert_action_group (priv->ui_manager, action_group, 0);
 
   return action_group;
 }
@@ -1116,13 +1082,14 @@ GtkActionGroup *
 cheese_window_toggle_action_group_new (CheeseWindow *cheese_window, char *name,
                                        const GtkToggleActionEntry *action_entries, int num_action_entries)
 {
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
   GtkActionGroup *action_group;
 
   action_group = gtk_action_group_new (name);
   gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
   gtk_action_group_add_toggle_actions (action_group, action_entries,
                                        num_action_entries, cheese_window);
-  gtk_ui_manager_insert_action_group (cheese_window->ui_manager, action_group, 0);
+  gtk_ui_manager_insert_action_group (priv->ui_manager, action_group, 0);
 
   return action_group;
 }
@@ -1131,6 +1098,7 @@ GtkActionGroup *
 cheese_window_radio_action_group_new (CheeseWindow *cheese_window, char *name,
                                       const GtkRadioActionEntry *action_entries, int num_action_entries)
 {
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
   GtkActionGroup *action_group;
 
   action_group = gtk_action_group_new (name);
@@ -1139,17 +1107,18 @@ cheese_window_radio_action_group_new (CheeseWindow *cheese_window, char *name,
                                       num_action_entries, 0,
                                       G_CALLBACK (cheese_window_activate_radio_action),
                                       cheese_window);
-  gtk_ui_manager_insert_action_group (cheese_window->ui_manager, action_group, 0);
+  gtk_ui_manager_insert_action_group (priv->ui_manager, action_group, 0);
 
   return action_group;
 }
 
+
 static void
-cheese_window_create_window (CheeseWindow *cheese_window)
+setup_widgets_from_builder (CheeseWindow *cheese_window)
 {
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
   GError     *error = NULL;
   GtkBuilder *builder;
-  GtkWidget  *menubar;
 
   builder = gtk_builder_new ();
   gtk_builder_add_from_file (builder, PACKAGE_DATADIR "/cheese.ui", &error);
@@ -1157,206 +1126,118 @@ cheese_window_create_window (CheeseWindow *cheese_window)
   if (error)
   {
     g_error ("building ui from %s failed: %s", PACKAGE_DATADIR "/cheese.ui", error->message);
-    g_clear_error (&error);
+    g_clear_error (&error); /* bah... */
   }
 
-  cheese_window->window                      = GTK_WIDGET (gtk_builder_get_object (builder, "cheese_window"));
-  cheese_window->button_effects              = GTK_WIDGET (gtk_builder_get_object (builder, "button_effects"));
-  cheese_window->button_photo                = GTK_WIDGET (gtk_builder_get_object (builder, "button_photo"));
-  cheese_window->button_video                = GTK_WIDGET (gtk_builder_get_object (builder, "button_video"));
-  cheese_window->button_burst                = GTK_WIDGET (gtk_builder_get_object (builder, "button_burst"));
-  cheese_window->image_take_photo            = GTK_WIDGET (gtk_builder_get_object (builder, "image_take_photo"));
-  cheese_window->label_effects               = GTK_WIDGET (gtk_builder_get_object (builder, "label_effects"));
-  cheese_window->label_photo                 = GTK_WIDGET (gtk_builder_get_object (builder, "label_photo"));
-  cheese_window->label_take_photo            = GTK_WIDGET (gtk_builder_get_object (builder, "label_take_photo"));
-  cheese_window->label_video                 = GTK_WIDGET (gtk_builder_get_object (builder, "label_video"));
-  cheese_window->main_vbox                   = GTK_WIDGET (gtk_builder_get_object (builder, "main_vbox"));
-  cheese_window->netbook_alignment           = GTK_WIDGET (gtk_builder_get_object (builder, "netbook_alignment"));
-  cheese_window->togglegroup_alignment       = GTK_WIDGET (gtk_builder_get_object (builder, "togglegroup_alignment"));
-  cheese_window->effect_button_alignment     = GTK_WIDGET (gtk_builder_get_object (builder, "effect_button_alignment"));
-  cheese_window->toolbar_alignment           = GTK_WIDGET (gtk_builder_get_object (builder, "toolbar_alignment"));
-  cheese_window->video_vbox                  = GTK_WIDGET (gtk_builder_get_object (builder, "video_vbox"));
-  cheese_window->notebook                    = GTK_WIDGET (gtk_builder_get_object (builder, "notebook"));
-  cheese_window->notebook_bar                = GTK_WIDGET (gtk_builder_get_object (builder, "notebook_bar"));
-  cheese_window->screen                      = GTK_WIDGET (gtk_builder_get_object (builder, "video_screen"));
-  cheese_window->take_picture                = GTK_WIDGET (gtk_builder_get_object (builder, "take_picture"));
-  cheese_window->thumb_scrollwindow          = GTK_WIDGET (gtk_builder_get_object (builder, "thumb_scrollwindow"));
-  cheese_window->countdown_frame             = GTK_WIDGET (gtk_builder_get_object (builder, "countdown_frame"));
-  cheese_window->effect_frame                = GTK_WIDGET (gtk_builder_get_object (builder, "effect_frame"));
-  cheese_window->effect_alignment            = GTK_WIDGET (gtk_builder_get_object (builder, "effect_alignment"));
-  cheese_window->fullscreen_popup            = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_popup"));
-  cheese_window->fullscreen_bar              = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_notebook_bar"));
-  cheese_window->button_effects_fullscreen   = GTK_WIDGET (gtk_builder_get_object (builder, "button_effects_fullscreen"));
-  cheese_window->button_photo_fullscreen     = GTK_WIDGET (gtk_builder_get_object (builder, "button_photo_fullscreen"));
-  cheese_window->button_video_fullscreen     = GTK_WIDGET (gtk_builder_get_object (builder, "button_video_fullscreen"));
-  cheese_window->button_burst_fullscreen     = GTK_WIDGET (gtk_builder_get_object (builder, "button_burst_fullscreen"));
-  cheese_window->take_picture_fullscreen     = GTK_WIDGET (gtk_builder_get_object (builder, "take_picture_fullscreen"));
-  cheese_window->label_take_photo_fullscreen =
+  priv->button_effects              = GTK_WIDGET (gtk_builder_get_object (builder, "button_effects"));
+  priv->button_photo                = GTK_WIDGET (gtk_builder_get_object (builder, "button_photo"));
+  priv->button_video                = GTK_WIDGET (gtk_builder_get_object (builder, "button_video"));
+  priv->button_burst                = GTK_WIDGET (gtk_builder_get_object (builder, "button_burst"));
+  priv->image_take_photo            = GTK_WIDGET (gtk_builder_get_object (builder, "image_take_photo"));
+  priv->label_effects               = GTK_WIDGET (gtk_builder_get_object (builder, "label_effects"));
+  priv->label_photo                 = GTK_WIDGET (gtk_builder_get_object (builder, "label_photo"));
+  priv->label_take_photo            = GTK_WIDGET (gtk_builder_get_object (builder, "label_take_photo"));
+  priv->label_video                 = GTK_WIDGET (gtk_builder_get_object (builder, "label_video"));
+  priv->main_vbox                   = GTK_WIDGET (gtk_builder_get_object (builder, "main_vbox"));
+  priv->netbook_alignment           = GTK_WIDGET (gtk_builder_get_object (builder, "netbook_alignment"));
+  priv->togglegroup_alignment       = GTK_WIDGET (gtk_builder_get_object (builder, "togglegroup_alignment"));
+  priv->effect_button_alignment     = GTK_WIDGET (gtk_builder_get_object (builder, "effect_button_alignment"));
+  priv->toolbar_alignment           = GTK_WIDGET (gtk_builder_get_object (builder, "toolbar_alignment"));
+  priv->video_vbox                  = GTK_WIDGET (gtk_builder_get_object (builder, "video_vbox"));
+  priv->notebook                    = GTK_WIDGET (gtk_builder_get_object (builder, "notebook"));
+  priv->notebook_bar                = GTK_WIDGET (gtk_builder_get_object (builder, "notebook_bar"));
+  priv->screen                      = GTK_WIDGET (gtk_builder_get_object (builder, "video_screen"));
+  priv->take_picture                = GTK_WIDGET (gtk_builder_get_object (builder, "take_picture"));
+  priv->thumb_scrollwindow          = GTK_WIDGET (gtk_builder_get_object (builder, "thumb_scrollwindow"));
+  priv->countdown_frame             = GTK_WIDGET (gtk_builder_get_object (builder, "countdown_frame"));
+  priv->effect_frame                = GTK_WIDGET (gtk_builder_get_object (builder, "effect_frame"));
+  priv->effect_alignment            = GTK_WIDGET (gtk_builder_get_object (builder, "effect_alignment"));
+  priv->fullscreen_popup            = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_popup"));
+  priv->fullscreen_bar              = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_notebook_bar"));
+  priv->button_effects_fullscreen   = GTK_WIDGET (gtk_builder_get_object (builder, "button_effects_fullscreen"));
+  priv->button_photo_fullscreen     = GTK_WIDGET (gtk_builder_get_object (builder, "button_photo_fullscreen"));
+  priv->button_video_fullscreen     = GTK_WIDGET (gtk_builder_get_object (builder, "button_video_fullscreen"));
+  priv->button_burst_fullscreen     = GTK_WIDGET (gtk_builder_get_object (builder, "button_burst_fullscreen"));
+  priv->take_picture_fullscreen     = GTK_WIDGET (gtk_builder_get_object (builder, "take_picture_fullscreen"));
+  priv->label_take_photo_fullscreen =
     GTK_WIDGET (gtk_builder_get_object (builder, "label_take_photo_fullscreen"));
-  cheese_window->image_take_photo_fullscreen =
+  priv->image_take_photo_fullscreen =
     GTK_WIDGET (gtk_builder_get_object (builder, "image_take_photo_fullscreen"));
-  cheese_window->label_photo_fullscreen     = GTK_WIDGET (gtk_builder_get_object (builder, "label_photo_fullscreen"));
-  cheese_window->label_video_fullscreen     = GTK_WIDGET (gtk_builder_get_object (builder, "label_video_fullscreen"));
-  cheese_window->countdown_frame_fullscreen =
+  priv->label_photo_fullscreen     = GTK_WIDGET (gtk_builder_get_object (builder, "label_photo_fullscreen"));
+  priv->label_video_fullscreen     = GTK_WIDGET (gtk_builder_get_object (builder, "label_video_fullscreen"));
+  priv->countdown_frame_fullscreen =
     GTK_WIDGET (gtk_builder_get_object (builder, "countdown_frame_fullscreen"));
-  cheese_window->button_exit_fullscreen = GTK_WIDGET (gtk_builder_get_object (builder, "button_exit_fullscreen"));
-
-  g_object_unref (builder);
-
-  /* Problem page */
-  cheese_window->problem_page = gtk_vbox_new (FALSE, 0);
-  cheese_window->problem_bar  = cheese_no_camera_info_bar_new ();
-  g_signal_connect (cheese_window->problem_bar,
-                    "response",
-                    G_CALLBACK (cheese_window_no_camera_info_bar_response),
-                    cheese_window);
-  cheese_window->problem_area = gtk_drawing_area_new ();
-  gtk_box_pack_start (GTK_BOX (cheese_window->problem_page),
-                      cheese_window->problem_bar,
-                      FALSE, FALSE, 0);
-  gtk_box_pack_start (GTK_BOX (cheese_window->problem_page),
-                      cheese_window->problem_area,
-                      TRUE, TRUE, 0);
-  gtk_notebook_insert_page (GTK_NOTEBOOK (cheese_window->notebook),
-                            cheese_window->problem_page,
-                            gtk_label_new ("got problems"),
-                            PAGE_PROBLEM);
-
-
-  /* configure the popup position and size */
-  GdkScreen *screen = gtk_window_get_screen (GTK_WINDOW (cheese_window->fullscreen_popup));
-  gtk_window_set_default_size (GTK_WINDOW (cheese_window->fullscreen_popup),
-                               gdk_screen_get_width (screen), FULLSCREEN_POPUP_HEIGHT);
-  gtk_window_move (GTK_WINDOW (cheese_window->fullscreen_popup), 0,
-                   gdk_screen_get_height (screen) - FULLSCREEN_POPUP_HEIGHT);
-
-  g_signal_connect (cheese_window->fullscreen_popup,
-                    "enter-notify-event",
-                    G_CALLBACK (cheese_window_fullscreen_leave_notify_cb),
-                    cheese_window);
-
-  g_signal_connect (cheese_window->button_exit_fullscreen, "clicked",
-                    G_CALLBACK (cheese_window_exit_fullscreen_button_clicked_cb),
-                    cheese_window);
-
-  char *str = g_strconcat ("<b>", _("_Take a photo"), "</b>", NULL);
-  gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo), str);
-  gtk_label_set_text_with_mnemonic (GTK_LABEL (cheese_window->label_take_photo_fullscreen), str);
-  g_free (str);
-  gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo), TRUE);
-  gtk_widget_set_sensitive (GTK_WIDGET (cheese_window->take_picture), FALSE);
-  gtk_label_set_use_markup (GTK_LABEL (cheese_window->label_take_photo_fullscreen), TRUE);
-  gtk_widget_set_sensitive (GTK_WIDGET (cheese_window->take_picture_fullscreen), FALSE);
-
-  cheese_window->thumb_view = cheese_thumb_view_new ();
-  cheese_window->thumb_nav  = eog_thumb_nav_new (cheese_window->thumb_view, FALSE);
-
-  gtk_container_add (GTK_CONTAINER (cheese_window->thumb_scrollwindow), cheese_window->thumb_nav);
-
-  /* show the scroll window to get it included in the size requisition done later */
-  gtk_widget_show_all (cheese_window->thumb_scrollwindow);
-
-  char *gconf_effects;
-  g_object_get (cheese_window->gconf, "gconf_prop_selected_effects", &gconf_effects, NULL);
-  cheese_window->effect_chooser = cheese_effect_chooser_new (gconf_effects);
-  gtk_container_add (GTK_CONTAINER (cheese_window->effect_frame), cheese_window->effect_chooser);
-  g_free (gconf_effects);
-
-/* uncomment to debug */
-
-/*
- * gtk_notebook_set_show_tabs (GTK_NOTEBOOK (cheese_window->notebook), TRUE);
- * gtk_notebook_set_show_border (GTK_NOTEBOOK (cheese_window->notebook), TRUE);
- */
-
-  cheese_window->throbber       = gtk_spinner_new ();
-  cheese_window->throbber_box   = gtk_event_box_new ();
-  cheese_window->throbber_align = gtk_alignment_new (0.5, 0.5, 0.6, 0.6);
-  gtk_container_add (GTK_CONTAINER (cheese_window->throbber_box), cheese_window->throbber_align);
-  gtk_container_add (GTK_CONTAINER (cheese_window->throbber_align), cheese_window->throbber);
-  gtk_notebook_insert_page (GTK_NOTEBOOK (cheese_window->notebook),
-                            cheese_window->throbber_box,
-                            gtk_label_new ("spinner"),
-                            PAGE_SPINNER);
-  cheese_window_spinner_invert (cheese_window->throbber, cheese_window->throbber_box);
-  gtk_widget_show_all (cheese_window->throbber_box);
-
-  cheese_window->countdown = cheese_countdown_new ();
-  gtk_container_add (GTK_CONTAINER (cheese_window->countdown_frame), cheese_window->countdown);
-  gtk_widget_show (cheese_window->countdown);
+  priv->button_exit_fullscreen = GTK_WIDGET (gtk_builder_get_object (builder, "button_exit_fullscreen"));
 
-  cheese_window->countdown_fullscreen = cheese_countdown_new ();
-  gtk_container_add (GTK_CONTAINER (cheese_window->countdown_frame_fullscreen), cheese_window->countdown_fullscreen);
+  gtk_container_add (GTK_CONTAINER (cheese_window), priv->main_vbox);
 
-  gtk_widget_realize (cheese_window->screen);
-  GdkWindow *win = gtk_widget_get_window (cheese_window->screen);
-  if (!gdk_window_ensure_native (win))
-  {
-    /* FIXME: this breaks offscreen stuff, we should really find
-     * another way to embed video that doesn't require an XID */
+  g_object_unref (builder);
+}
 
-    /* abort: no native window, no xoverlay, no cheese. */
-    g_error ("Could not create a native X11 window for the drawing area");
-  }
-  gdk_window_set_back_pixmap (gtk_widget_get_window (cheese_window->screen), NULL, FALSE);
-  gtk_widget_set_app_paintable (cheese_window->screen, TRUE);
-  gtk_widget_set_double_buffered (cheese_window->screen, FALSE);
-  gtk_widget_add_events (cheese_window->screen, GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
+static void
+setup_menubar_and_actions (CheeseWindow *cheese_window)
+{
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
+  GError     *error = NULL;
+  GtkWidget  *menubar;
 
-  cheese_window->ui_manager = gtk_ui_manager_new ();
+  priv->ui_manager = gtk_ui_manager_new ();
 
-  cheese_window->actions_main = cheese_window_action_group_new (cheese_window,
+  priv->actions_main = cheese_window_action_group_new (cheese_window,
                                                                 "ActionsMain",
                                                                 action_entries_main,
                                                                 G_N_ELEMENTS (action_entries_main));
-  cheese_window->actions_toggle = cheese_window_radio_action_group_new (cheese_window,
+
+  priv->actions_toggle = cheese_window_radio_action_group_new (cheese_window,
                                                                         "ActionsRadio",
                                                                         action_entries_toggle,
                                                                         G_N_ELEMENTS (action_entries_toggle));
-  cheese_window->actions_effects = cheese_window_toggle_action_group_new (cheese_window,
+
+  priv->actions_countdown = cheese_window_toggle_action_group_new (cheese_window,
+                                                                            "ActionsCountdown",
+                                                                            action_entries_countdown,
+                                                                            G_N_ELEMENTS (action_entries_countdown));
+
+
+  priv->actions_effects = cheese_window_toggle_action_group_new (cheese_window,
                                                                           "ActionsEffects",
                                                                           action_entries_effects,
                                                                           G_N_ELEMENTS (action_entries_effects));
 
-  cheese_window->actions_fullscreen = cheese_window_toggle_action_group_new (cheese_window,
+  priv->actions_fullscreen = cheese_window_toggle_action_group_new (cheese_window,
                                                                              "ActionsFullscreen",
                                                                              action_entries_fullscreen,
                                                                              G_N_ELEMENTS (action_entries_fullscreen));
 
-  cheese_window->actions_wide_mode = cheese_window_toggle_action_group_new (cheese_window,
+  priv->actions_wide_mode = cheese_window_toggle_action_group_new (cheese_window,
                                                                             "ActionsWideMode",
                                                                             action_entries_wide_mode,
                                                                             G_N_ELEMENTS (action_entries_fullscreen));
 
-  cheese_window->actions_preferences = cheese_window_action_group_new (cheese_window,
-                                                                       "ActionsPreferences",
-                                                                       action_entries_preferences,
-                                                                       G_N_ELEMENTS (action_entries_preferences));
-  cheese_window->actions_file = cheese_window_action_group_new (cheese_window,
+  priv->actions_file = cheese_window_action_group_new (cheese_window,
                                                                 "ActionsFile",
                                                                 action_entries_file,
                                                                 G_N_ELEMENTS (action_entries_file));
-  cheese_window->actions_photo = cheese_window_action_group_new (cheese_window,
+  gtk_action_group_set_sensitive (priv->actions_file, FALSE);
+
+  priv->actions_photo = cheese_window_action_group_new (cheese_window,
                                                                  "ActionsPhoto",
                                                                  action_entries_photo,
                                                                  G_N_ELEMENTS (action_entries_photo));
-  cheese_window->actions_countdown = cheese_window_toggle_action_group_new (cheese_window,
-                                                                            "ActionsCountdown",
-                                                                            action_entries_countdown,
-                                                                            G_N_ELEMENTS (action_entries_countdown));
-  cheese_window->actions_video = cheese_window_toggle_action_group_new (cheese_window,
+
+  priv->actions_video = cheese_window_toggle_action_group_new (cheese_window,
                                                                         "ActionsVideo",
                                                                         action_entries_video,
                                                                         G_N_ELEMENTS (action_entries_video));
-  gtk_action_group_set_sensitive (cheese_window->actions_video, FALSE);
-  cheese_window->actions_burst = cheese_window_action_group_new (cheese_window,
+  gtk_action_group_set_sensitive (priv->actions_video, FALSE);
+  priv->actions_burst = cheese_window_action_group_new (cheese_window,
                                                                  "ActionsBurst",
                                                                  action_entries_burst,
                                                                  G_N_ELEMENTS (action_entries_burst));
-  gtk_action_group_set_sensitive (cheese_window->actions_burst, FALSE);
+  gtk_action_group_set_sensitive (priv->actions_burst, FALSE);
 
 
-  gtk_ui_manager_add_ui_from_file (cheese_window->ui_manager, PACKAGE_DATADIR "/cheese-ui.xml", &error);
+  gtk_ui_manager_add_ui_from_file (priv->ui_manager, PACKAGE_DATADIR "/cheese-ui.xml", &error);
 
   if (error)
   {
@@ -1364,75 +1245,178 @@ cheese_window_create_window (CheeseWindow *cheese_window)
     g_error_free (error);
   }
 
-  GtkAction *action = gtk_ui_manager_get_action (cheese_window->ui_manager, "/MainMenu/Cheese/CountdownToggle");
+  GtkAction *action = gtk_ui_manager_get_action (priv->ui_manager, "/MainMenu/Cheese/CountdownToggle");
   gboolean   countdown;
-  g_object_get (cheese_window->gconf, "gconf_prop_countdown", &countdown, NULL);
+  g_object_get (priv->gconf, "gconf_prop_countdown", &countdown, NULL);
   if (countdown)
   {
     gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
   }
 
-  action = gtk_ui_manager_get_action (cheese_window->ui_manager, "/ThumbnailPopup/Delete");
+  action = gtk_ui_manager_get_action (priv->ui_manager, "/ThumbnailPopup/Delete");
   gboolean enable_delete;
-  g_object_get (cheese_window->gconf, "gconf_prop_enable_delete", &enable_delete, NULL);
+  g_object_get (priv->gconf, "gconf_prop_enable_delete", &enable_delete, NULL);
   gtk_action_set_visible (GTK_ACTION (action), enable_delete);
 
-  menubar = gtk_ui_manager_get_widget (cheese_window->ui_manager, "/MainMenu");
-  gtk_box_pack_start (GTK_BOX (cheese_window->main_vbox), menubar, FALSE, FALSE, 0);
 
-  cheese_window->thumb_view_popup_menu = gtk_ui_manager_get_widget (cheese_window->ui_manager,
+  menubar = gtk_ui_manager_get_widget (priv->ui_manager, "/MainMenu");
+  gtk_box_pack_start (GTK_BOX (priv->main_vbox), menubar, FALSE, FALSE, 0);
+
+  priv->thumb_view_popup_menu = gtk_ui_manager_get_widget (priv->ui_manager,
                                                                     "/ThumbnailPopup");
 
-  gtk_window_add_accel_group (GTK_WINDOW (cheese_window->window),
-                              gtk_ui_manager_get_accel_group (cheese_window->ui_manager));
-  gtk_accel_group_connect (gtk_ui_manager_get_accel_group (cheese_window->ui_manager),
+  gtk_window_add_accel_group (GTK_WINDOW (cheese_window),
+                              gtk_ui_manager_get_accel_group (priv->ui_manager));
+  gtk_accel_group_connect (gtk_ui_manager_get_accel_group (priv->ui_manager),
                            GDK_Escape, 0, 0,
                            g_cclosure_new_swap (G_CALLBACK (cheese_window_escape_key_cb),
                                                 cheese_window, NULL));
 
-  gtk_action_group_set_sensitive (cheese_window->actions_file, FALSE);
+  action = gtk_ui_manager_get_action (priv->ui_manager, "/MainMenu/Edit/Effects");
+  gtk_activatable_set_related_action (GTK_ACTIVATABLE (priv->button_effects), action);
+  gtk_activatable_set_related_action (GTK_ACTIVATABLE (priv->button_effects_fullscreen), action);
+
+  action = gtk_ui_manager_get_action (priv->ui_manager, "/MainMenu/Cheese/Photo");
+  gtk_activatable_set_related_action (GTK_ACTIVATABLE (priv->button_photo), action);
+  gtk_activatable_set_related_action (GTK_ACTIVATABLE (priv->button_photo_fullscreen), action);
+
+  action = gtk_ui_manager_get_action (priv->ui_manager, "/MainMenu/Cheese/Video");
+  gtk_activatable_set_related_action (GTK_ACTIVATABLE (priv->button_video), action);
+  gtk_activatable_set_related_action (GTK_ACTIVATABLE (priv->button_video_fullscreen), action);
+
+  action = gtk_ui_manager_get_action (priv->ui_manager, "/MainMenu/Cheese/Burst");
+  gtk_activatable_set_related_action (GTK_ACTIVATABLE (priv->button_burst), action);
+  gtk_activatable_set_related_action (GTK_ACTIVATABLE (priv->button_burst_fullscreen), action);
+}
+
+static void
+cheese_window_create_window (CheeseWindow *cheese_window)
+{
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
+  setup_widgets_from_builder (cheese_window);
+  setup_menubar_and_actions (cheese_window);
+
+  /* Problem page */
+  priv->problem_page = gtk_vbox_new (FALSE, 0);
+  priv->problem_bar  = cheese_no_camera_info_bar_new ();
+
+  g_signal_connect (priv->problem_bar,
+                    "response",
+                    G_CALLBACK (cheese_window_no_camera_info_bar_response),
+                    cheese_window);
+
+  priv->problem_area = gtk_drawing_area_new ();
+  gtk_box_pack_start (GTK_BOX (priv->problem_page),
+                      priv->problem_bar,
+                      FALSE, FALSE, 0);
+  gtk_box_pack_start (GTK_BOX (priv->problem_page),
+                      priv->problem_area,
+                      TRUE, TRUE, 0);
+  gtk_notebook_insert_page (GTK_NOTEBOOK (priv->notebook),
+                            priv->problem_page,
+                            gtk_label_new ("got problems"),
+                            PAGE_PROBLEM);
+
+
+  /* configure the popup position and size */
+  GdkScreen *screen = gtk_window_get_screen (GTK_WINDOW (priv->fullscreen_popup));
+  gtk_window_set_default_size (GTK_WINDOW (priv->fullscreen_popup),
+                               gdk_screen_get_width (screen), FULLSCREEN_POPUP_HEIGHT);
+  gtk_window_move (GTK_WINDOW (priv->fullscreen_popup), 0,
+                   gdk_screen_get_height (screen) - FULLSCREEN_POPUP_HEIGHT);
 
-  action = gtk_ui_manager_get_action (cheese_window->ui_manager, "/MainMenu/Edit/Effects");
-  gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_effects), action);
-  gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_effects_fullscreen), action);
+  g_signal_connect (priv->fullscreen_popup,
+                    "enter-notify-event",
+                    G_CALLBACK (cheese_window_fullscreen_leave_notify_cb),
+                    cheese_window);
+
+  g_signal_connect (priv->button_exit_fullscreen, "clicked",
+                    G_CALLBACK (cheese_window_exit_fullscreen_button_clicked_cb),
+                    cheese_window);
+
+
+  char *str = g_strconcat ("<b>", _("_Take a photo"), "</b>", NULL);
+  gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->label_take_photo), str);
+  gtk_label_set_text_with_mnemonic (GTK_LABEL (priv->label_take_photo_fullscreen), str);
+  g_free (str);
+  gtk_label_set_use_markup (GTK_LABEL (priv->label_take_photo), TRUE);
+  gtk_widget_set_sensitive (GTK_WIDGET (priv->take_picture), FALSE);
+  gtk_label_set_use_markup (GTK_LABEL (priv->label_take_photo_fullscreen), TRUE);
+  gtk_widget_set_sensitive (GTK_WIDGET (priv->take_picture_fullscreen), FALSE);
+
+  priv->thumb_view = cheese_thumb_view_new ();
+  priv->thumb_nav  = eog_thumb_nav_new (priv->thumb_view, FALSE);
+
+  gtk_container_add (GTK_CONTAINER (priv->thumb_scrollwindow), priv->thumb_nav);
+
+  /* show the scroll window to get it included in the size requisition done later */
+  gtk_widget_show_all (priv->thumb_scrollwindow);
+
+  char *gconf_effects;
+  g_object_get (priv->gconf, "gconf_prop_selected_effects", &gconf_effects, NULL);
+  priv->effect_chooser = cheese_effect_chooser_new (gconf_effects);
+  gtk_container_add (GTK_CONTAINER (priv->effect_frame), priv->effect_chooser);
+  g_free (gconf_effects);
+
+/* uncomment to debug */
+
+/*
+ * gtk_notebook_set_show_tabs (GTK_NOTEBOOK (priv->notebook), TRUE);
+ * gtk_notebook_set_show_border (GTK_NOTEBOOK (priv->notebook), TRUE);
+ */
 
-  action = gtk_ui_manager_get_action (cheese_window->ui_manager, "/MainMenu/Cheese/Photo");
-  gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_photo), action);
-  gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_photo_fullscreen), action);
+  priv->throbber       = gtk_spinner_new ();
+  priv->throbber_box   = gtk_event_box_new ();
+  priv->throbber_align = gtk_alignment_new (0.5, 0.5, 0.6, 0.6);
+  gtk_container_add (GTK_CONTAINER (priv->throbber_box), priv->throbber_align);
+  gtk_container_add (GTK_CONTAINER (priv->throbber_align), priv->throbber);
+  gtk_notebook_insert_page (GTK_NOTEBOOK (priv->notebook),
+                            priv->throbber_box,
+                            gtk_label_new ("spinner"),
+                            PAGE_SPINNER);
+  cheese_window_spinner_invert (priv->throbber, priv->throbber_box);
+  gtk_widget_show_all (priv->throbber_box);
 
-  action = gtk_ui_manager_get_action (cheese_window->ui_manager, "/MainMenu/Cheese/Video");
-  gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_video), action);
-  gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_video_fullscreen), action);
+  priv->countdown = cheese_countdown_new ();
+  gtk_container_add (GTK_CONTAINER (priv->countdown_frame), priv->countdown);
+  gtk_widget_show (priv->countdown);
 
-  action = gtk_ui_manager_get_action (cheese_window->ui_manager, "/MainMenu/Cheese/Burst");
-  gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_burst), action);
-  gtk_activatable_set_related_action (GTK_ACTIVATABLE (cheese_window->button_burst_fullscreen), action);
+  priv->countdown_fullscreen = cheese_countdown_new ();
+  gtk_container_add (GTK_CONTAINER (priv->countdown_frame_fullscreen), priv->countdown_fullscreen);
 
+  gtk_widget_realize (priv->screen);
+  GdkWindow *win = gtk_widget_get_window (priv->screen);
+  if (!gdk_window_ensure_native (win))
+  {
+    /* FIXME: this breaks offscreen stuff, we should really find
+     * another way to embed video that doesn't require an XID */
 
-  /* Default handlers for closing the application */
-  g_signal_connect (cheese_window->window, "destroy",
-                    G_CALLBACK (cheese_window_cmd_close), cheese_window);
-  g_signal_connect (cheese_window->window, "delete_event",
-                    G_CALLBACK (cheese_window_delete_event_cb), NULL);
+    /* abort: no native window, no xoverlay, no cheese. */
+    g_error ("Could not create a native X11 window for the drawing area");
+  }
+  gdk_window_set_back_pixmap (gtk_widget_get_window (priv->screen), NULL, FALSE);
+  gtk_widget_set_app_paintable (priv->screen, TRUE);
+  gtk_widget_set_double_buffered (priv->screen, FALSE);
+  gtk_widget_add_events (priv->screen, GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
 
   /* Listen for key presses */
-  gtk_widget_add_events (cheese_window->window, GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
-  g_signal_connect (cheese_window->window, "key_press_event",
+  gtk_widget_add_events (GTK_WIDGET (cheese_window), GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK);
+  g_signal_connect (cheese_window, "key_press_event",
                     G_CALLBACK (cheese_window_key_press_event_cb), cheese_window);
-
-  g_signal_connect (cheese_window->take_picture, "clicked",
+  g_signal_connect (priv->take_picture, "clicked",
                     G_CALLBACK (cheese_window_action_button_clicked_cb), cheese_window);
-  g_signal_connect (cheese_window->take_picture_fullscreen, "clicked",
+  g_signal_connect (priv->take_picture_fullscreen, "clicked",
                     G_CALLBACK (cheese_window_action_button_clicked_cb), cheese_window);
-  g_signal_connect (cheese_window->thumb_view, "selection_changed",
+  g_signal_connect (priv->thumb_view, "selection_changed",
                     G_CALLBACK (cheese_window_selection_changed_cb), cheese_window);
-  g_signal_connect (cheese_window->thumb_view, "button_press_event",
+  g_signal_connect (priv->thumb_view, "button_press_event",
                     G_CALLBACK (cheese_window_button_press_event_cb), cheese_window);
 }
 
 void
 setup_camera (CheeseWindow *cheese_window)
 {
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (cheese_window);
   char   *camera_device = NULL;
   int     x_resolution;
   int     y_resolution;
@@ -1443,7 +1427,7 @@ setup_camera (CheeseWindow *cheese_window)
 
   GError *error;
 
-  g_object_get (cheese_window->gconf,
+  g_object_get (priv->gconf,
                 "gconf_prop_x_resolution", &x_resolution,
                 "gconf_prop_y_resolution", &y_resolution,
                 "gconf_prop_camera", &camera_device,
@@ -1454,7 +1438,7 @@ setup_camera (CheeseWindow *cheese_window)
                 NULL);
 
   gdk_threads_enter ();
-  cheese_window->camera = cheese_camera_new (cheese_window->screen,
+  priv->camera = cheese_camera_new (priv->screen,
                                              camera_device, x_resolution,
                                              y_resolution);
   gdk_threads_leave ();
@@ -1462,13 +1446,13 @@ setup_camera (CheeseWindow *cheese_window)
   g_free (camera_device);
 
   error = NULL;
-  cheese_camera_setup (cheese_window->camera, cheese_window->startup_hal_dev_udi, &error);
+  cheese_camera_setup (priv->camera, NULL, &error);
   if (error != NULL)
   {
     if (error->code == CHEESE_CAMERA_ERROR_NO_DEVICE)
     {
       gdk_threads_enter ();
-      gtk_spinner_stop (GTK_SPINNER (cheese_window->throbber));
+      gtk_spinner_stop (GTK_SPINNER (priv->throbber));
       cheese_window_set_problem_page (cheese_window, "cheese-no-camera");
       gdk_threads_leave ();
       return;
@@ -1495,72 +1479,70 @@ setup_camera (CheeseWindow *cheese_window)
     g_free (secondary);
 
     /* Clean up and exit */
-    cheese_window_cmd_close (NULL, cheese_window);
+    /* FIXME: handle errors in the infobar and remove this shit */
+    gtk_widget_destroy (GTK_WIDGET (cheese_window));
 
     gdk_threads_leave ();
 
     return;
   }
 
-  g_signal_connect (cheese_window->camera, "photo-saved",
+  g_signal_connect (priv->camera, "photo-saved",
                     G_CALLBACK (cheese_window_photo_saved_cb), cheese_window);
-  g_signal_connect (cheese_window->camera, "video-saved",
+  g_signal_connect (priv->camera, "video-saved",
                     G_CALLBACK (cheese_window_video_saved_cb), cheese_window);
 
-  cheese_camera_set_effect (cheese_window->camera,
-                            cheese_effect_chooser_get_selection (CHEESE_EFFECT_CHOOSER (cheese_window->effect_chooser)));
+  cheese_camera_set_effect (priv->camera,
+                            cheese_effect_chooser_get_selection (CHEESE_EFFECT_CHOOSER (priv->effect_chooser)));
 
-  cheese_camera_set_balance_property (cheese_window->camera, "brightness", brightness);
-  cheese_camera_set_balance_property (cheese_window->camera, "contrast", contrast);
-  cheese_camera_set_balance_property (cheese_window->camera, "saturation", saturation);
-  cheese_camera_set_balance_property (cheese_window->camera, "hue", hue);
+  cheese_camera_set_balance_property (priv->camera, "brightness", brightness);
+  cheese_camera_set_balance_property (priv->camera, "contrast", contrast);
+  cheese_camera_set_balance_property (priv->camera, "saturation", saturation);
+  cheese_camera_set_balance_property (priv->camera, "hue", hue);
 
-  cheese_camera_play (cheese_window->camera);
+  cheese_camera_play (priv->camera);
   gdk_threads_enter ();
-  gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook), PAGE_WEBCAM);
-  gtk_spinner_stop (GTK_SPINNER (cheese_window->throbber));
-
-  gtk_widget_set_sensitive (GTK_WIDGET (cheese_window->take_picture), TRUE);
-  gtk_widget_set_sensitive (GTK_WIDGET (cheese_window->take_picture_fullscreen), TRUE);
-  gtk_action_group_set_sensitive (cheese_window->actions_effects, TRUE);
+  gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), PAGE_WEBCAM);
+  gtk_spinner_stop (GTK_SPINNER (priv->throbber));
 
+  gtk_widget_set_sensitive (GTK_WIDGET (priv->take_picture), TRUE);
+  gtk_widget_set_sensitive (GTK_WIDGET (priv->take_picture_fullscreen), TRUE);
+  gtk_action_group_set_sensitive (priv->actions_effects, TRUE);
   gdk_threads_leave ();
 }
 
 void
-cheese_window_init (char *hal_dev_udi, CheeseDbus *dbus_server, gboolean startup_in_wide_mode)
+cheese_window_init (CheeseWindow *window)
 {
-  CheeseWindow *cheese_window;
-  gboolean      startup_in_wide_mode_saved;
-
-  cheese_window = g_new0 (CheeseWindow, 1);
-
-  cheese_window->startup_hal_dev_udi = hal_dev_udi;
-  cheese_window->gconf               = cheese_gconf_new ();
-  cheese_window->fileutil            = cheese_fileutil_new ();
-  cheese_window->flash               = cheese_flash_new (NULL);
-  cheese_window->isFullscreen        = FALSE;
-  cheese_window->is_bursting         = FALSE;
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (window);
 
-  cheese_window->server = dbus_server;
+//  priv->startup_hal_dev_udi = hal_dev_udi;
+  priv->gconf               = cheese_gconf_new ();
+  priv->fileutil            = cheese_fileutil_new ();
+  priv->flash               = cheese_flash_new (NULL);
+  priv->isFullscreen        = FALSE;
+  priv->is_bursting         = FALSE;
 
+//  priv->server = dbus_server;
+#if 0
   /* save a pointer to the cheese window in cheese dbus */
   cheese_dbus_set_window (cheese_window);
+#endif
+  priv->fullscreen_timeout_source = NULL;
 
-  cheese_window->fullscreen_timeout_source = NULL;
-
-  cheese_window_create_window (cheese_window);
-  g_object_set (G_OBJECT (cheese_window->flash), "parent", cheese_window->window, NULL);
-  gtk_action_group_set_sensitive (cheese_window->actions_effects, FALSE);
+  cheese_window_create_window (window);
+  g_object_set (G_OBJECT (priv->flash), "parent", GTK_WIDGET (window), NULL);
 
-  gtk_spinner_start (GTK_SPINNER (cheese_window->throbber));
+  gtk_action_group_set_sensitive (priv->actions_effects, FALSE);
 
-  gtk_notebook_set_current_page (GTK_NOTEBOOK (cheese_window->notebook), PAGE_SPINNER);
+  gtk_spinner_start (GTK_SPINNER (priv->throbber));
 
-  cheese_window->camera_mode = CAMERA_MODE_PHOTO;
-  cheese_window->recording   = FALSE;
+  gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook), PAGE_SPINNER);
 
-  g_object_get (cheese_window->gconf,
+  priv->camera_mode = CAMERA_MODE_PHOTO;
+  priv->recording   = FALSE;
+#if 0
+  g_object_get (priv->gconf,
                 "gconf_prop_wide_mode",
                 &startup_in_wide_mode_saved,
                 NULL);
@@ -1569,28 +1551,105 @@ cheese_window_init (char *hal_dev_udi, CheeseDbus *dbus_server, gboolean startup
 
   if (startup_in_wide_mode)
   {
-    GtkAction *action = gtk_ui_manager_get_action (cheese_window->ui_manager, "/MainMenu/Cheese/WideMode");
+    GtkAction *action = gtk_ui_manager_get_action (priv->ui_manager, "/MainMenu/Cheese/WideMode");
     gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
   }
-
+#endif
   /* handy trick to set default size of the drawing area while not
    * limiting its minimum size, thanks Owen! */
-
   GtkRequisition req;
-  gtk_widget_set_size_request (cheese_window->notebook,
+  gtk_widget_set_size_request (priv->notebook,
                                DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT);
-  gtk_widget_size_request (cheese_window->window, &req);
-  gtk_window_resize (GTK_WINDOW (cheese_window->window), req.width, req.height);
-  gtk_widget_set_size_request (cheese_window->notebook, -1, -1);
+  gtk_widget_size_request (GTK_WIDGET (window), &req);
+  gtk_window_resize (GTK_WINDOW (window), req.width, req.height);
+  gtk_widget_set_size_request (priv->notebook, -1, -1);
 
-  gtk_widget_show_all (cheese_window->window);
+  gtk_widget_show_all (priv->main_vbox);
 
   /* Run cam setup in its own thread */
   GError *error = NULL;
-  if (!g_thread_create ((GThreadFunc) setup_camera, cheese_window, FALSE, &error))
+  if (!g_thread_create ((GThreadFunc) setup_camera, window, FALSE, &error))
   {
     g_error ("Failed to create setup thread: %s\n", error->message);
     g_error_free (error);
     return;
   }
 }
+
+static void
+cheese_window_dispose (GObject *object)
+{
+  CheeseWindow *window = CHEESE_WINDOW (object);
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (window);
+
+  g_object_unref (priv->flash);
+  G_OBJECT_CLASS (cheese_window_parent_class)->dispose (object);
+}
+
+static void
+cheese_window_finalize (GObject *object)
+{
+  CheeseWindow *window = CHEESE_WINDOW (object);
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (window);
+
+  g_message ("FINALIZE");
+
+  g_object_unref (priv->camera);
+  g_object_unref (priv->fileutil);
+#if 0
+  g_object_unref (priv->actions_main);
+  g_object_unref (priv->actions_countdown);
+  g_object_unref (priv->actions_effects);
+  g_object_unref (priv->actions_file);
+  g_object_unref (priv->actions_photo);
+  g_object_unref (priv->actions_toggle);
+  g_object_unref (priv->actions_effects);
+  g_object_unref (priv->actions_file);
+  g_object_unref (priv->actions_video);
+  g_object_unref (priv->actions_burst);
+  g_object_unref (priv->actions_fullscreen);
+#endif
+  g_object_unref (priv->gconf);
+
+  G_OBJECT_CLASS (cheese_window_parent_class)->finalize (object);
+  gtk_main_quit ();
+}
+
+static void
+cheese_window_class_init (CheeseWindowClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->finalize = cheese_window_finalize;
+  object_class->dispose = cheese_window_dispose;
+
+  g_type_class_add_private (object_class, sizeof(CheeseWindowPrivate));
+}
+
+CheeseThumbView *
+cheese_window_get_thumbview (CheeseWindow *window)
+{
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (window);
+  return CHEESE_THUMB_VIEW (priv->thumb_view);
+}
+
+CheeseCamera *
+cheese_window_get_camera (CheeseWindow *window)
+{
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (window);
+  return priv->camera;
+}
+
+CheeseGConf *
+cheese_window_get_gconf (CheeseWindow *window)
+{
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (window);
+  return priv->gconf;
+}
+
+CheeseFileUtil *
+cheese_window_get_fileutil (CheeseWindow *window)
+{
+  CheeseWindowPrivate *priv = CHEESE_WINDOW_GET_PRIVATE (window);
+  return priv->fileutil;
+}
diff --git a/src/cheese-window.h b/src/cheese-window.h
index 76f727a..9a88127 100644
--- a/src/cheese-window.h
+++ b/src/cheese-window.h
@@ -23,6 +23,10 @@
 
 #include <gtk/gtk.h>
 #include "cheese-dbus.h"
+#include "cheese-camera.h"
+#include "cheese-gconf.h"
+#include "cheese-thumb-view.h"
+#include "cheese-fileutil.h"
 
 G_BEGIN_DECLS
 
@@ -47,6 +51,19 @@ GType cheese_window_get_type (void) G_GNUC_CONST;
 
 /* public methods */
 CheeseWindow *cheese_window_new (void);
+CheeseThumbView *cheese_window_get_thumbview (CheeseWindow *window);
+CheeseCamera * cheese_window_get_camera (CheeseWindow *window);
+CheeseGConf *cheese_window_get_gconf (CheeseWindow *window);
+CheeseFileUtil *cheese_window_get_fileutil (CheeseWindow *window);
+
+/* not so public ideally but ok for internal consumption */
+void cheese_window_toggle_countdown (GtkWidget *widget, CheeseWindow *window);
+void cheese_window_preferences_cb (GtkAction *action, CheeseWindow *cheese_window);
+void cheese_window_effect_button_pressed_cb (GtkWidget *widget, CheeseWindow *cheese_window);
+void cheese_window_toggle_fullscreen (GtkWidget *widget, CheeseWindow *cheese_window);
+void cheese_window_toggle_wide_mode (GtkWidget *widget, CheeseWindow *cheese_window);
+void cheese_window_action_button_clicked_cb (GtkWidget *widget, CheeseWindow *cheese_window);
+
 
 #if 0
 void cheese_window_init (char *hal_dev_udi, CheeseDbus *dbus_server, gboolean startup_in_wide_mode);
diff --git a/src/cheese.c b/src/cheese.c
index 47df9d8..95479db 100644
--- a/src/cheese.c
+++ b/src/cheese.c
@@ -31,7 +31,7 @@
 
 #include "cheese-fileutil.h"
 #include "cheese-window.h"
-#include "cheese-dbus.h"
+//#include "cheese-dbus.h"
 
 struct _CheeseOptions
 {
@@ -138,12 +138,14 @@ main (int argc, char **argv)
     return 0;
   }
 
+#if 0
   dbus_server = cheese_dbus_new ();
   if (dbus_server == NULL)
   {
     gdk_notify_startup_complete ();
     return -1;
   }
+#endif
 
   g_set_print_handler ((GPrintFunc) cheese_print_handler);
   g_print ("Cheese " VERSION " \n");
@@ -152,7 +154,8 @@ main (int argc, char **argv)
   gtk_icon_theme_append_search_path (gtk_icon_theme_get_default (),
                                      APPNAME_DATA_DIR G_DIR_SEPARATOR_S "icons");
 
-  cheese_window_init (CheeseOptions.hal_device_id, dbus_server, CheeseOptions.wide_mode);
+  CheeseWindow *window = g_object_new (CHEESE_TYPE_WINDOW, NULL);
+  gtk_widget_show (GTK_WIDGET (window));
 
   gdk_threads_enter ();
   gtk_main ();



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]