Code

Cleanup of named icon background rendering and added pref for workaround
[inkscape.git] / src / ui / dialog / inkscape-preferences.cpp
index e179f1581ed15db73203358a13d18df485ebd13c..62c8750e2b46b1293ac38e8767de2da6d1b64aad 100644 (file)
@@ -86,27 +86,35 @@ InkscapePreferences::InkscapePreferences()
     //Pages
     Gtk::VBox* vbox_page = Gtk::manage(new Gtk::VBox());
     Gtk::Frame* title_frame = Gtk::manage(new Gtk::Frame());
-    hbox_list_page->pack_start(*vbox_page, true, true, 0);
+
+    Gtk::ScrolledWindow* pageScroller = Gtk::manage(new Gtk::ScrolledWindow());
+    pageScroller->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
+    pageScroller->add(*vbox_page);
+    hbox_list_page->pack_start(*pageScroller, true, true, 0);
+
     title_frame->add(_page_title);
     vbox_page->pack_start(*title_frame, false, false, 0);
     vbox_page->pack_start(_page_frame, true, true, 0);
     _page_frame.set_shadow_type(Gtk::SHADOW_IN);
     title_frame->set_shadow_type(Gtk::SHADOW_IN);
 
-    initPageMouse();
-    initPageScrolling();
-    initPageSteps();
     initPageTools();
-    initPageWindows();
+    initPageSelecting();
+    initPageTransforms();
     initPageClones();
     initPageMasks();
-    initPageTransforms();
     initPageFilters();
-    initPageSelecting();
-    initPageImportExport();
+    initPageBitmaps();
     initPageCMS();
     initPageGrids();
     initPageSVGOutput();
+    initPageAutosave();
+    initPageImportExport();
+    initPageUI();
+    initPageMouse();
+    initPageScrolling();
+    initPageSteps();
+    initPageWindows();
     initPageMisc();
 
     signalPresent().connect(sigc::mem_fun(*this, &InkscapePreferences::_presentPages));
@@ -298,11 +306,12 @@ void StyleFromSelectionToTool(gchar const *prefs_path, StyleSwatch *swatch)
     }
 }
 
-void InkscapePreferences::AddNewObjectsStyle(DialogPage& p, const std::string& prefs_path)
+void InkscapePreferences::AddNewObjectsStyle(DialogPage& p, const std::string& prefs_path, const gchar* banner)
 {
-
-
-    p.add_group_header( _("Create new objects with:"));
+    if (banner)
+        p.add_group_header(banner);
+    else
+        p.add_group_header( _("Create new objects with:"));
     PrefRadioButton* current = Gtk::manage( new PrefRadioButton);
     current->init ( _("Last used style"), prefs_path, "usecurrent", 1, true, 0);
     p.add_line( true, "", *current, "",
@@ -395,49 +404,56 @@ void InkscapePreferences::initPageTools()
     _page_node.add_line( false, _("Flash time"), _t_node_pathflash_timeout, "ms", _("Specifies how long the path outline will be visible after a mouse-over (in milliseconds). Specify 0 to have the outline shown until mouse leaves the path."), false);
 
     //Tweak
-    this->AddPage(_page_tweak, _("Tweak"), iter_tools, PREFS_PAGE_TOOLS_NODE);
+    this->AddPage(_page_tweak, _("Tweak"), iter_tools, PREFS_PAGE_TOOLS_TWEAK);
+    this->AddNewObjectsStyle(_page_tweak, "tools.tweak", _("Paint objects with:"));
     AddSelcueCheckbox(_page_tweak, "tools.tweak", true);
     AddGradientCheckbox(_page_tweak, "tools.tweak", false);
+
     //Zoom
     this->AddPage(_page_zoom, _("Zoom"), iter_tools, PREFS_PAGE_TOOLS_ZOOM);
     AddSelcueCheckbox(_page_zoom, "tools.zoom", true);
     AddGradientCheckbox(_page_zoom, "tools.zoom", false);
+
     //Shapes
     Gtk::TreeModel::iterator iter_shapes = this->AddPage(_page_shapes, _("Shapes"), iter_tools, PREFS_PAGE_TOOLS_SHAPES);
     _path_shapes = _page_list.get_model()->get_path(iter_shapes);
     this->AddSelcueCheckbox(_page_shapes, "tools.shapes", true);
     this->AddGradientCheckbox(_page_shapes, "tools.shapes", true);
+
     //Rectangle
     this->AddPage(_page_rectangle, _("Rectangle"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_RECT);
     this->AddNewObjectsStyle(_page_rectangle, "tools.shapes.rect");
     this->AddConvertGuidesCheckbox(_page_rectangle, "tools.shapes.rect", true);
+
     //3D box
     this->AddPage(_page_3dbox, _("3D Box"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_3DBOX);
     this->AddNewObjectsStyle(_page_3dbox, "tools.shapes.3dbox");
     this->AddConvertGuidesCheckbox(_page_3dbox, "tools.shapes.3dbox", true);
+
     //ellipse
     this->AddPage(_page_ellipse, _("Ellipse"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_ELLIPSE);
     this->AddNewObjectsStyle(_page_ellipse, "tools.shapes.arc");
+
     //star
     this->AddPage(_page_star, _("Star"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_STAR);
     this->AddNewObjectsStyle(_page_star, "tools.shapes.star");
+
     //spiral
     this->AddPage(_page_spiral, _("Spiral"), iter_shapes, PREFS_PAGE_TOOLS_SHAPES_SPIRAL);
     this->AddNewObjectsStyle(_page_spiral, "tools.shapes.spiral");
+
     //Pencil
     this->AddPage(_page_pencil, _("Pencil"), iter_tools, PREFS_PAGE_TOOLS_PENCIL);
     this->AddSelcueCheckbox(_page_pencil, "tools.freehand.pencil", true);
-    _t_pencil_tolerance.init ( "tools.freehand.pencil", "tolerance", 0.0, 100.0, 0.5, 1.0, 10.0, false, false);
-    _page_pencil.add_line( false, _("Tolerance:"), _t_pencil_tolerance, "",
-                           _("This value affects the amount of smoothing applied to freehand lines; lower values produce more uneven paths with more nodes"),
-                           false );
     this->AddNewObjectsStyle(_page_pencil, "tools.freehand.pencil");
     this->AddDotSizeSpinbutton(_page_pencil, "tools.freehand.pencil", 3.0);
+
     //Pen
     this->AddPage(_page_pen, _("Pen"), iter_tools, PREFS_PAGE_TOOLS_PEN);
     this->AddSelcueCheckbox(_page_pen, "tools.freehand.pen", true);
     this->AddNewObjectsStyle(_page_pen, "tools.freehand.pen");
     this->AddDotSizeSpinbutton(_page_pen, "tools.freehand.pen", 3.0);
+
     //Calligraphy
     this->AddPage(_page_calligraphy, _("Calligraphy"), iter_tools, PREFS_PAGE_TOOLS_CALLIGRAPHY);
     this->AddSelcueCheckbox(_page_calligraphy, "tools.calligraphic", false);
@@ -450,16 +466,25 @@ void InkscapePreferences::initPageTools()
     this->AddPage(_page_paintbucket, _("Paint Bucket"), iter_tools, PREFS_PAGE_TOOLS_PAINTBUCKET);
     this->AddSelcueCheckbox(_page_paintbucket, "tools.paintbucket", false);
     this->AddNewObjectsStyle(_page_paintbucket, "tools.paintbucket");
-    //Calligraphy
+
+    //Eraser
     this->AddPage(_page_eraser, _("Eraser"), iter_tools, PREFS_PAGE_TOOLS_ERASER);
+    this->AddNewObjectsStyle(_page_eraser, "tools.eraser");
+
+    //LPETool
+    this->AddPage(_page_lpetool, _("LPE Tool"), iter_tools, PREFS_PAGE_TOOLS_LPETOOL);
+    this->AddNewObjectsStyle(_page_lpetool, "tools.lpetool");
+
     //Text
     this->AddPage(_page_text, _("Text"), iter_tools, PREFS_PAGE_TOOLS_TEXT);
     this->AddSelcueCheckbox(_page_text, "tools.text", true);
     this->AddGradientCheckbox(_page_text, "tools.text", true);
     this->AddNewObjectsStyle(_page_text, "tools.text");
+
     //Gradient
     this->AddPage(_page_gradient, _("Gradient"), iter_tools, PREFS_PAGE_TOOLS_GRADIENT);
     this->AddSelcueCheckbox(_page_gradient, "tools.gradient", true);
+
     //Connector
     this->AddPage(_page_connector, _("Connector"), iter_tools, PREFS_PAGE_TOOLS_CONNECTOR);
     this->AddSelcueCheckbox(_page_connector, "tools.connector", true);
@@ -502,7 +527,7 @@ void InkscapePreferences::initPageWindows()
                             _("Floating"));
 
 #ifndef WIN32 // non-Win32 special code to enable transient dialogs
-       _page_windows.add_group_header( _("Dialogs on top:"));
+    _page_windows.add_group_header( _("Dialogs on top:"));
 
     _page_windows.add_line( true, "", _win_ontop_none, "",
                             _("Dialogs are treated as regular windows"));
@@ -550,6 +575,12 @@ void InkscapePreferences::initPageClones()
     _page_clones.add_line( true, "", _clone_option_delete, "",
                            _("Orphaned clones are deleted along with their original."));
 
+    _page_clones.add_group_header( _("When duplicating original+clones:"));
+
+    _clone_relink_on_duplicate.init ( _("Relink duplicated clones"), "options.relinkclonesonduplicate", "value", false);
+    _page_clones.add_line(true, "", _clone_relink_on_duplicate, "",
+                        _("When duplicating a selection containing both a clone and its original (possibly in groups), relink the duplicated clone to the duplicated original instead of the old original"));
+
     //TRANSLATORS: Heading for the Inkscape Preferences "Clones" Page
     this->AddPage(_page_clones, _("Clones"), PREFS_PAGE_CLONES);
 }
@@ -859,13 +890,13 @@ void InkscapePreferences::initPageGrids()
         _grids_xy.add_line( false, _("Spacing Y"), _grids_xy_spacing_y, "", _("Distance between horizontal grid lines"), false);
 
         _grids_xy_color.init(_("Grid line color"), "options.grids.xy", "color", 0x0000ff20);
-        _grids_xy.add_line( false, _("Grid line color"), _grids_xy_color, "", _("Selects the color used for normal grid lines."), false);
+        _grids_xy.add_line( false, _("Grid line color"), _grids_xy_color, "", _("Color used for normal grid lines"), false);
         _grids_xy_empcolor.init(_("Major grid line color"), "options.grids.xy", "empcolor", 0x0000ff40);
-        _grids_xy.add_line( false, _("Major grid line color"), _grids_xy_empcolor, "", _("Selects the color used for major (highlighted) grid lines."), false);
+        _grids_xy.add_line( false, _("Major grid line color"), _grids_xy_empcolor, "", _("Color used for major (highlighted) grid lines"), false);
         _grids_xy_empspacing.init("options.grids.xy", "empspacing", 1.0, 1000.0, 1.0, 5.0, 5.0, true, false);
         _grids_xy.add_line( false, _("Major grid line every"), _grids_xy_empspacing, "", "", false);
         _grids_xy_dotted.init( _("Show dots instead of lines"), "options.grids.xy", "dotted", false);
-        _grids_xy.add_line( false, "", _grids_xy_dotted, "", _("If set, displays dots at gridpoints instead of gridlines"), false);
+        _grids_xy.add_line( false, "", _grids_xy_dotted, "", _("If set, display dots at gridpoints instead of gridlines"), false);
 
     // CanvasAxonomGrid properties:
         _grids_axonom_units.init("options.grids.axonom", "units");
@@ -881,9 +912,9 @@ void InkscapePreferences::initPageGrids()
         _grids_axonom.add_line( false, _("Angle X"), _grids_axonom_angle_x, "", _("Angle of x-axis"), false);
         _grids_axonom.add_line( false, _("Angle Z"), _grids_axonom_angle_z, "", _("Angle of z-axis"), false);
         _grids_axonom_color.init(_("Grid line color"), "options.grids.axonom", "color", 0x0000ff20);
-        _grids_axonom.add_line( false, _("Grid line color"), _grids_axonom_color, "", _("Selects the color used for normal grid lines."), false);
+        _grids_axonom.add_line( false, _("Grid line color"), _grids_axonom_color, "", _("Color used for normal grid lines"), false);
         _grids_axonom_empcolor.init(_("Major grid line color"), "options.grids.axonom", "empcolor", 0x0000ff40);
-        _grids_axonom.add_line( false, _("Major grid line color"), _grids_axonom_empcolor, "", _("Selects the color used for major (highlighted) grid lines."), false);
+        _grids_axonom.add_line( false, _("Major grid line color"), _grids_axonom_empcolor, "", _("Color used for major (highlighted) grid lines"), false);
         _grids_axonom_empspacing.init("options.grids.axonom", "empspacing", 1.0, 1000.0, 1.0, 5.0, 5.0, true, false);
         _grids_axonom.add_line( false, _("Major grid line every"), _grids_axonom_empspacing, "", "", false);
 
@@ -893,89 +924,104 @@ void InkscapePreferences::initPageGrids()
 void InkscapePreferences::initPageSVGOutput()
 {
     _svgoutput_usenamedcolors.init( _("Use named colors"), "options.svgoutput", "usenamedcolors", false);
-    _page_svgoutput.add_line( false, "", _svgoutput_usenamedcolors, "", _("If set, write the CSS name of the color instead of it's numeric value."), false);
+    _page_svgoutput.add_line( false, "", _svgoutput_usenamedcolors, "", _("If set, write the CSS name of the color when available (e.g. 'red' or 'magenta') instead of the numeric value"), false);
 
-    _page_svgoutput.add_group_header( _("XML looks"));
+    _page_svgoutput.add_group_header( _("XML formatting"));
 
     _svgoutput_inlineattrs.init( _("Inline attributes"), "options.svgoutput", "inlineattrs", false);
-    _page_svgoutput.add_line( false, "", _svgoutput_inlineattrs, "", _("Inline the XML attributes"), false);
+    _page_svgoutput.add_line( false, "", _svgoutput_inlineattrs, "", _("Put attributes on the same line as the element tag"), false);
 
     _svgoutput_indent.init("options.svgoutput", "indent", 0.0, 1000.0, 1.0, 2.0, 2.0, true, false);
-    _page_svgoutput.add_line( false, _("Indent spaces"), _svgoutput_indent, "", _("The number of spaces to use for indentation."), false);
+    _page_svgoutput.add_line( false, _("Indent, spaces"), _svgoutput_indent, "", _("The number of spaces to use for indenting nested elements; set to 0 for no indentation"), false);
 
-    _page_svgoutput.add_group_header( _("Path string"));
+    _page_svgoutput.add_group_header( _("Path data"));
 
     _svgoutput_allowrelativecoordinates.init( _("Allow relative coordinates"), "options.svgoutput", "allowrelativecoordinates", true);
     _page_svgoutput.add_line( false, "", _svgoutput_allowrelativecoordinates, "", _("If set, relative coordinates may be used in path data"), false);
 
-    /* seems this is never used in Inkscape code
-    _svgoutput_allowshorthands.init( _("Allow shorthands"), "options.svgoutput", "allowshorthands", true);
-    _page_svgoutput.add_line( false, "", _svgoutput_allowshorthands, "", _(""), false);
-    */
-
     _svgoutput_forcerepeatcommands.init( _("Force repeat commands"), "options.svgoutput", "forcerepeatcommands", false);
-    _page_svgoutput.add_line( false, "", _svgoutput_forcerepeatcommands, "", _("If set, force repeating of the same command (i.e. output 'L 1,2 L 3,4' instead of 'L 1,2 3,4')."), false);
+    _page_svgoutput.add_line( false, "", _svgoutput_forcerepeatcommands, "", _("Force repeating of the same path command (for example, 'L 1,2 L 3,4' instead of 'L 1,2 3,4')"), false);
 
-    _page_svgoutput.add_group_header( _("Numeric data"));
+    _page_svgoutput.add_group_header( _("Numbers"));
 
-    _svgoutput_numericprecision.init("options.svgoutput", "numericprecision", 0.0, 1000.0, 1.0, 2.0, 8.0, true, false);
-    _page_svgoutput.add_line( false, _("Numeric precision"), _svgoutput_numericprecision, "", _("The number of digits to use behind the comma."), false);
+    _svgoutput_numericprecision.init("options.svgoutput", "numericprecision", 1.0, 16.0, 1.0, 2.0, 8.0, true, false);
+    _page_svgoutput.add_line( false, _("Numeric precision"), _svgoutput_numericprecision, "", _("How many digits to write after the decimal dot"), false);
 
-    _svgoutput_minimumexponent.init("options.svgoutput", "minimumexponent", -100.0, 100.0, 1.0, 2.0, -8.0, true, false);
-    _page_svgoutput.add_line( false, _("Minimum exponent"), _svgoutput_minimumexponent, "", _("The minimum size of a number (10 to the power of this exponent), smaller numbers will be written as zero."), false);
+    _svgoutput_minimumexponent.init("options.svgoutput", "minimumexponent", -32.0, -1, 1.0, 2.0, -8.0, true, false);
+    _page_svgoutput.add_line( false, _("Minimum exponent"), _svgoutput_minimumexponent, "", _("The smallest number written to SVG is 10 to the power of this exponent; anything smaller is written as zero."), false);
 
-    this->AddPage(_page_svgoutput, _("SVG Output"), PREFS_PAGE_SVGOUTPUT);
+    this->AddPage(_page_svgoutput, _("SVG output"), PREFS_PAGE_SVGOUTPUT);
 }
 
-void InkscapePreferences::initPageMisc()
+void InkscapePreferences::initPageUI()
 {
-    _misc_comment.init( _("Add label comments to printing output"), "printing.debug", "show-label-comments", false);
-    _page_misc.add_line( false, "", _misc_comment, "",
-                           _("When on, a comment will be added to the raw print output, marking the rendered output for an object with its label"), true);
-
-    _misc_forkvectors.init( _("Prevent sharing of gradient definitions"), "options.forkgradientvectors", "value", true);
-    _page_misc.add_line( false, "", _misc_forkvectors, "",
-                           _("When on, shared gradient definitions are automatically forked on change; uncheck to allow sharing of gradient definitions so that editing one object may affect other objects using the same gradient"), true);
-
-    _page_misc.add_line( false, _("Simplification threshold:"), _misc_simpl, "",
-                           _("How strong is the Simplify command by default. If you invoke this command several times in quick succession, it will act more and more aggressively; invoking it again after a pause restores the default threshold."), false);
-    {
-        Glib::ustring labels[] = {_("None"), _("2x2"), _("4x4"), _("8x8"), _("16x16")};
-        int values[] = {0, 1, 2, 3, 4};
-        _misc_overs_bitmap.set_size_request(_sb_width);
-        _misc_overs_bitmap.init("options.bitmapoversample", "value", labels, values, G_N_ELEMENTS(values), 1);
-        _page_misc.add_line( false, _("Oversample bitmaps:"), _misc_overs_bitmap, "", "", false);
-    }
-
-
-    // consider moving this to an UI tab:
-
-    Glib::ustring sizeLabels[] = {_("Normal"), _("Medium"), _("Small")};
+     Glib::ustring sizeLabels[] = {_("Normal"), _("Medium"), _("Small")};
     int sizeValues[] = {0, 1, 2};
 
     _misc_small_toolbar.init( "toolbox", "small", sizeLabels, sizeValues, G_N_ELEMENTS(sizeLabels), 0 );
-    _page_misc.add_line( false, _("Commands bar icon size"), _misc_small_toolbar, "",
+    _page_ui.add_line( false, _("Commands bar icon size"), _misc_small_toolbar, "",
                            _("Set the size for the commands toolbar to use (requires restart)"), false);
 
     _misc_small_secondary.init( "toolbox", "secondary", sizeLabels, sizeValues, G_N_ELEMENTS(sizeLabels), 1 );
-    _page_misc.add_line( false, _("Tool controls bar icon size"), _misc_small_secondary, "",
+    _page_ui.add_line( false, _("Tool controls bar icon size"), _misc_small_secondary, "",
                            _("Set the size for the secondary toolbar to use (requires restart)"), false);
 
     _misc_small_tools.init( "toolbox.tools", "small", sizeLabels, sizeValues, G_N_ELEMENTS(sizeLabels), 0 );
-    _page_misc.add_line( false, _("Main toolbar icon size"), _misc_small_tools, "",
+    _page_ui.add_line( false, _("Main toolbar icon size"), _misc_small_tools, "",
                            _("Set the size for the main tools to use (requires restart)"), false);
 
     _misc_recent.init("options.maxrecentdocuments", "value", 0.0, 1000.0, 1.0, 1.0, 1.0, true, false);
-    _page_misc.add_line( false, _("Maximum number of recent documents:"), _misc_recent, "",
+    _page_ui.add_line( false, _("Maximum documents in Open Recent:"), _misc_recent, "",
                            _("The maximum length of the Open Recent list in the File menu"), false);
-    _misc_simpl.init("options.simplifythreshold", "value", 0.0001, 1.0, 0.0001, 0.0010, 0.0010, false, false);
 
+    this->AddPage(_page_ui, _("Interface"), PREFS_PAGE_UI);
+}
+
+
+void InkscapePreferences::initPageAutosave()
+{
+    // Autosave options 
+    _autosave_autosave_enable.init( _("Enable autosave (requires restart)"), "options.autosave", "enable", false);
+    _page_autosave.add_line(false, "", _autosave_autosave_enable, "", _("Automatically save the current document(s) at a given interval, thus minimizing loss in case of a crash"), false);
+    _autosave_autosave_interval.init("options.autosave", "interval", 1.0, 10800.0, 1.0, 10.0, 10.0, true, false);
+    _page_autosave.add_line(true, _("Interval (in minutes)"), _autosave_autosave_interval, "", _("Interval (in minutes) at which document will be autosaved"), false);
+    _autosave_autosave_path.init("options.autosave", "path", true);
+    _page_autosave.add_line(true, _("Path"), _autosave_autosave_path, "", _("The directory where autosaves will be written"), false);
+    _autosave_autosave_max.init("options.autosave", "max", 1.0, 100.0, 1.0, 10.0, 10.0, true, false);
+    _page_autosave.add_line(true, _("Maximum number of autosaves"), _autosave_autosave_max, "", _("Maximum number of autosaved files; use this to limit the storage space used"), false);
+
+    /* When changing the interval or enabling/disabling the autosave function,
+     * update our running configuration
+     *
+     * FIXME!
+     * the inkscape_autosave_init should be called AFTER the values have been changed
+     * (which cannot be guaranteed from here)
+     *
+     * For now, autosave-settings will not change until restart
+     */
+    /*
+    _autosave_autosave_enable.signal_toggled().connect( sigc::ptr_fun(inkscape_autosave_init), TRUE );
+    _autosave_autosave_interval.signal_changed().connect( sigc::ptr_fun(inkscape_autosave_init), TRUE );
+    */
 
     // -----------
 
+    this->AddPage(_page_autosave, _("Autosave"), PREFS_PAGE_AUTOSAVE);
+}
+
+void InkscapePreferences::initPageBitmaps()
+{
+    {
+        Glib::ustring labels[] = {_("None"), _("2x2"), _("4x4"), _("8x8"), _("16x16")};
+        int values[] = {0, 1, 2, 3, 4};
+        _misc_overs_bitmap.set_size_request(_sb_width);
+        _misc_overs_bitmap.init("options.bitmapoversample", "value", labels, values, G_N_ELEMENTS(values), 1);
+        _page_bitmaps.add_line( false, _("Oversample bitmaps:"), _misc_overs_bitmap, "", "", false);
+    }
+
     _misc_bitmap_autoreload.init(_("Automatically reload bitmaps"), "options.bitmapautoreload", "value", true);
-    _page_misc.add_line( false, "", _misc_bitmap_autoreload, "",
-                           _("Enbles automatic reload of linked images when changed on disk."));
+    _page_bitmaps.add_line( false, "", _misc_bitmap_autoreload, "",
+                           _("Automatically reload linked images when file is changed on disk"));
     gchar const *choices = prefs_get_string_attribute("options.bitmapeditor", "choices");
     if ( choices && choices[0] ) {
         gchar** splits = g_strsplit(choices, ",", 0);
@@ -988,11 +1034,40 @@ void InkscapePreferences::initPageMisc()
             labels[i] = splits[i];
         }
         _misc_bitmap_editor.init("options.bitmapeditor", "value", labels, values, numIems, 0);
-        _page_misc.add_line( false, _("Bitmap editor:"), _misc_bitmap_editor, "", "", false);
+        _page_bitmaps.add_line( false, _("Bitmap editor:"), _misc_bitmap_editor, "", "", false);
 
         g_strfreev(splits);
     }
 
+    _bitmap_copy_res.init("options.createbitmap", "resolution", 1.0, 6000.0, 1.0, 1.0, PX_PER_IN, true, false);
+    _page_bitmaps.add_line( false, _("Resolution for Create Bitmap Copy:"), _bitmap_copy_res, _("dpi"),
+                            _("Resolution used by the Create Bitmap Copy command"), false);
+
+    this->AddPage(_page_bitmaps, _("Bitmaps"), PREFS_PAGE_BITMAPS);
+}
+
+
+void InkscapePreferences::initPageMisc()
+{
+    _misc_comment.init( _("Add label comments to printing output"), "printing.debug", "show-label-comments", false);
+    _page_misc.add_line( false, "", _misc_comment, "",
+                           _("When on, a comment will be added to the raw print output, marking the rendered output for an object with its label"), true);
+
+    _misc_forkvectors.init( _("Prevent sharing of gradient definitions"), "options.forkgradientvectors", "value", true);
+    _page_misc.add_line( false, "", _misc_forkvectors, "",
+                           _("When on, shared gradient definitions are automatically forked on change; uncheck to allow sharing of gradient definitions so that editing one object may affect other objects using the same gradient"), true);
+
+    _misc_simpl.init("options.simplifythreshold", "value", 0.0001, 1.0, 0.0001, 0.0010, 0.0010, false, false);
+    _page_misc.add_line( false, _("Simplification threshold:"), _misc_simpl, "",
+                           _("How strong is the Simplify command by default. If you invoke this command several times in quick succession, it will act more and more aggressively; invoking it again after a pause restores the default threshold."), false);
+
+    _misc_latency_skew.init("debug.latency", "skew", 0.5, 2.0, 0.01, 0.10, 1.0, false, false);
+    _page_misc.add_line( false, _("Latency skew:"), _misc_latency_skew, _("(requires restart)"),
+                           _("Factor by which the event clock is skewed from the actual time (0.9766 on some systems)."), false);
+
+    _misc_namedicon_delay.init( _("Pre-render named icons"), "options.iconrender", "named_nodelay", false);
+    _page_misc.add_line( false, "", _misc_namedicon_delay, "",
+                           _("When on, named icons will be rendered before displaying the ui. This is for working around bugs in GTK+ named icon notification"), true);
 
     this->AddPage(_page_misc, _("Misc"), PREFS_PAGE_MISC);
 }