[gnome-control-center] Universal access: add dialog for zoom options



commit f7fa758b2bb86698bff2c768a89339b1fc3f317d
Author: Joseph Scheuhammer <clown alum mit edu>
Date:   Wed May 18 16:09:47 2011 -0400

    Universal access: add dialog for zoom options
    
    Added UI and code to spawn a zoom options preferences dialog to
    modify various magnifier settings.  Modified the 'Seeing'
    section of the universal access panel to enable the 'Options...'
    button.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=643086

 panels/universal-access/Makefile.am     |    6 +-
 panels/universal-access/cc-ua-panel.c   |   31 +-
 panels/universal-access/uap.ui          |    4 +-
 panels/universal-access/zoom-options.c  |  330 ++++++++++++
 panels/universal-access/zoom-options.h  |   73 +++
 panels/universal-access/zoom-options.ui |  845 +++++++++++++++++++++++++++++++
 po/POTFILES.in                          |    2 +
 7 files changed, 1284 insertions(+), 7 deletions(-)
---
diff --git a/panels/universal-access/Makefile.am b/panels/universal-access/Makefile.am
index 896143d..80bca2c 100644
--- a/panels/universal-access/Makefile.am
+++ b/panels/universal-access/Makefile.am
@@ -19,13 +19,15 @@ libuniversal_access_la_SOURCES =		\
 	gconf-property-editor.h			\
 	gconf-property-editor.c			\
 	cc-marshal.c				\
-	cc-marshal.h
+	cc-marshal.h				\
+	zoom-options.c				\
+	zoom-options.h
 
 libuniversal_access_la_LIBADD = $(PANEL_LIBS) $(UNIVERSAL_ACCESS_PANEL_LIBS) $(top_builddir)/panels/common/libshortcuts.la
 libuniversal_access_la_LDFLAGS = $(PANEL_LDFLAGS)
 
 uidir = $(pkgdatadir)/ui
-dist_ui_DATA = uap.ui
+dist_ui_DATA = uap.ui zoom-options.ui
 
 
 @INTLTOOL_DESKTOP_RULE@
diff --git a/panels/universal-access/cc-ua-panel.c b/panels/universal-access/cc-ua-panel.c
index 5c232b6..eaf62c6 100644
--- a/panels/universal-access/cc-ua-panel.c
+++ b/panels/universal-access/cc-ua-panel.c
@@ -32,6 +32,8 @@
 #include "eggaccelerators.h"
 #include "gconf-property-editor.h"
 
+#include "zoom-options.h"
+
 #define WID(b, w) (GtkWidget *) gtk_builder_get_object (b, w)
 
 
@@ -50,6 +52,8 @@ struct _CcUaPanelPrivate
   GSettings *application_settings;
   GSettings *mediakeys_settings;
 
+  GObject *zoom_options;
+
   GSList *notify_list;
 };
 
@@ -142,6 +146,12 @@ cc_ua_panel_dispose (GObject *object)
       priv->mediakeys_settings = NULL;
     }
 
+  if (priv->zoom_options)
+    {
+      g_object_unref (priv->zoom_options);
+      priv->zoom_options = NULL;
+    }
+
   G_OBJECT_CLASS (cc_ua_panel_parent_class)->dispose (object);
 }
 
@@ -210,6 +220,17 @@ static gchar *visual_alerts_section[] = {
     NULL
 };
 
+/* zoom options dialog */
+static void
+zoom_options_launch_cb (GtkWidget *options_button, CcUaPanel *self)
+{
+  if (self->priv->zoom_options == NULL)
+    self->priv->zoom_options = g_object_new (ZOOM_TYPE_OPTIONS, NULL);
+
+  if (self->priv->zoom_options != NULL)
+    zoom_options_present_dialog (ZOOM_OPTIONS (self->priv->zoom_options));
+}
+
 static void
 cc_ua_panel_section_switched (GObject    *object,
                               GParamSpec *pspec,
@@ -516,10 +537,12 @@ cc_ua_panel_init_seeing (CcUaPanel *self)
                    WID (priv->builder, "seeing_enable_toggle_keys_checkbutton"), "active",
                    G_SETTINGS_BIND_DEFAULT);
 
-  settings_on_off_editor_new (priv, priv->application_settings,
-                              "screen-magnifier-enabled",
-                              WID (priv->builder, "seeing_zoom_switch"),
-                              NULL);
+  g_signal_connect (WID (priv->builder, "seeing_zoom_preferences_button"),
+                    "clicked",
+                    G_CALLBACK (zoom_options_launch_cb), self);
+  g_settings_bind (priv->application_settings, "screen-magnifier-enabled",
+                   WID (priv->builder, "seeing_zoom_switch"), "active",
+                   G_SETTINGS_BIND_DEFAULT);
 
   settings_on_off_editor_new (priv, priv->application_settings,
                               "screen-reader-enabled",
diff --git a/panels/universal-access/uap.ui b/panels/universal-access/uap.ui
index 0e9c525..14b8f96 100644
--- a/panels/universal-access/uap.ui
+++ b/panels/universal-access/uap.ui
@@ -609,10 +609,12 @@
                                   <object class="GtkButton" id="seeing_zoom_preferences_button">
                                     <property name="can_focus">True</property>
                                     <property name="receives_default">True</property>
+                                    <property name="visible">True</property>
+                                    <property name="sensitive">True</property>
                                     <child>
                                       <object class="GtkLabel" id="seeing_zoom_preferences_label">
                                         <property name="visible">True</property>
-                                        <property name="sensitive">False</property>
+                                        <property name="sensitive">True</property>
                                         <property name="label" translatable="yes">Options...</property>
                                         <property name="use_markup">True</property>
                                       </object>
diff --git a/panels/universal-access/zoom-options.c b/panels/universal-access/zoom-options.c
new file mode 100644
index 0000000..d03ca76
--- /dev/null
+++ b/panels/universal-access/zoom-options.c
@@ -0,0 +1,330 @@
+/*
+ * Copyright 2011 Inclusive Design Research Centre, OCAD University.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Author: Joseph Scheuhammer <clown alum mit edu>
+ */
+
+#include "zoom-options.h"
+#include <gdk/gdk.h>
+#include <glib/gi18n.h>
+#include <string.h>
+
+#define WID(b, w) (GtkWidget *) gtk_builder_get_object (b, w)
+
+struct _ZoomOptionsPrivate
+{
+  GtkBuilder *builder;
+  GSettings *settings;
+
+  GtkWidget *dialog;
+};
+
+G_DEFINE_TYPE (ZoomOptions, zoom_options, G_TYPE_OBJECT);
+
+static void xhairs_color_opacity_changed_cb (GtkColorButton *button, ZoomOptionsPrivate *priv);
+static void xhairs_length_add_marks (GtkScale *scale);
+
+static void
+mouse_mode_radiobutton_toggled_cb (GtkWidget *widget, ZoomOptionsPrivate *priv)
+{
+	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) == TRUE)
+	  {
+        g_settings_set_string (priv->settings, "mouse-tracking",
+	                           gtk_buildable_get_name (GTK_BUILDABLE (widget)));
+      }
+}
+
+static void
+screen_position_radiobutton_toggled_cb (GtkWidget *widget, ZoomOptionsPrivate *priv)
+{
+	if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) == TRUE)
+	  {
+        g_settings_set_string (priv->settings, "screen-position",
+	                           gtk_buildable_get_name (GTK_BUILDABLE (widget)));
+      }
+}
+
+static void
+init_radio_group (GSList *radio_group,
+                  gchar *key,
+                  GCallback radiobutton_toggled_cb,
+                  ZoomOptionsPrivate *priv)
+{
+    gchar *value;
+    gchar *name;
+
+    value = g_settings_get_string (priv->settings, key);
+	for (; radio_group != NULL; radio_group = radio_group->next)
+	  {
+	    name = gtk_buildable_get_name (GTK_BUILDABLE (radio_group->data));
+	    if (strcmp (name, value) == 0)
+	      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_group->data), TRUE);
+	    else
+	      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_group->data), FALSE);
+
+	    g_signal_connect (G_OBJECT (radio_group->data), "toggled",
+                          G_CALLBACK(radiobutton_toggled_cb),
+                          priv);
+	  }
+}
+
+static void
+init_xhairs_color_opacity (GtkColorButton *color_button, ZoomOptionsPrivate *priv)
+{
+    gchar *color_setting;
+    GdkRGBA rgba;
+
+    color_setting = g_settings_get_string (priv->settings, "cross-hairs-color");
+    gdk_rgba_parse (&rgba, color_setting);
+
+    rgba.alpha = g_settings_get_double (priv->settings, "cross-hairs-opacity");
+    gtk_color_button_set_rgba (GTK_COLOR_BUTTON (color_button), &rgba);
+}
+
+static void
+update_xhairs_color_cb (GSettings *settings, gchar *key, GtkColorButton *button)
+{
+    gchar *color;
+    GdkColor rgb;
+
+    color = g_settings_get_string (settings, key);
+    gdk_color_parse (color, &rgb);
+
+    gtk_color_button_set_color (button, &rgb);
+}
+
+static void
+update_xhairs_opacity_cb (GSettings *settings, gchar *key, GtkColorButton *button)
+{
+    gdouble opacity;
+
+    opacity = g_settings_get_double (settings, key);
+    gtk_color_button_set_alpha (button, opacity * 65535);
+}
+
+static void
+xhairs_color_opacity_changed_cb (GtkColorButton *button, ZoomOptionsPrivate *priv)
+{
+    GdkRGBA rgba;
+    GdkColor rgb;
+    gchar *color_string;
+    gchar gsetting_val[8];
+
+    gtk_color_button_get_color (button, &rgb);
+    color_string = gdk_color_to_string (&rgb);
+
+    // color_string is in the form '#rrrrggggbbbb'.  Convert to '#rrggbb'.
+    // Start by copying the leading '#'.
+    g_strlcpy (gsetting_val, color_string, 4);
+    g_strlcpy (gsetting_val+3, color_string+5, 3);
+    g_strlcpy (gsetting_val+5, color_string+9, 3);
+    g_settings_set_string (priv->settings, "cross-hairs-color", gsetting_val);
+
+    gtk_color_button_get_rgba (button, &rgba);
+    g_settings_set_double (priv->settings, "cross-hairs-opacity", rgba.alpha);
+}
+
+static void xhairs_length_add_marks (GtkScale *scale)
+{
+    gint length, quarter_length;
+    GtkAdjustment *scale_model;
+
+    // Get maximum dimension of screen.
+    length = MAX(gdk_screen_width(), gdk_screen_height());
+    scale_model = gtk_range_get_adjustment (GTK_RANGE (scale));
+    if (length < gtk_adjustment_get_upper(scale_model))
+      {
+        gtk_adjustment_set_upper (scale_model, length);
+      }
+
+    // The crosshair is made up of four lines in pairs (top, bottom) and
+    // (left, right).  Stipulating: "quarter of the screen" means that the
+    // length of one hair is 25% of the screen.
+    quarter_length = length / 4;
+
+    gtk_scale_add_mark (scale, quarter_length, GTK_POS_BOTTOM, _("1/4 Screen"));
+    gtk_scale_add_mark (scale, quarter_length * 2 , GTK_POS_BOTTOM, _("1/2 Screen"));
+    gtk_scale_add_mark (scale, quarter_length * 3, GTK_POS_BOTTOM, _("3/4 Screen"));
+}
+
+static void
+zoom_option_close_dialog_cb (GtkWidget *closer, ZoomOptionsPrivate *priv)
+{
+    if (priv->dialog != NULL)
+        gtk_widget_hide (priv->dialog);
+}
+
+static void
+zoom_options_dispose (GObject *object)
+{
+  g_return_if_fail (object != NULL);
+  g_return_if_fail (ZOOM_IS_OPTIONS (object));
+  ZoomOptionsPrivate *priv = ZOOM_OPTIONS (object)->priv;
+
+  if (priv->builder)
+    {
+      g_object_unref (priv->builder);
+      priv->builder = NULL;
+	}
+
+  if (priv->settings)
+    {
+      g_object_unref (priv->settings);
+      priv->settings = NULL;
+    }
+
+  if (priv->dialog)
+    {
+      gtk_widget_destroy (priv->dialog);
+      priv->dialog = NULL;
+    }
+
+  G_OBJECT_CLASS (zoom_options_parent_class)->dispose (object);
+}
+
+static void
+zoom_options_finalize (GObject *object)
+{
+  G_OBJECT_CLASS (zoom_options_parent_class)->finalize (object);
+}
+
+static void
+zoom_options_class_init (ZoomOptionsClass *klass)
+{
+  GObjectClass    *object_class = G_OBJECT_CLASS (klass);
+
+  object_class->dispose = zoom_options_dispose;
+  object_class->finalize = zoom_options_finalize;
+
+  g_type_class_add_private (klass, sizeof (ZoomOptionsPrivate));
+}
+
+static void
+zoom_options_init (ZoomOptions *self)
+{
+  ZoomOptionsPrivate *priv;
+  GtkWidget *w;
+  GSList *radio_group;
+  GError *err = NULL;
+
+  priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ZOOM_TYPE_OPTIONS, ZoomOptionsPrivate);
+
+  priv->builder = gtk_builder_new ();
+  gtk_builder_add_from_file (priv->builder,
+                             GNOMECC_UI_DIR "/zoom-options.ui",
+                             &err);
+  if (err)
+    {
+      g_warning ("Could not load interface file: %s", err->message);
+      g_error_free (err);
+
+      g_object_unref (priv->builder);
+      priv->builder = NULL;
+
+      return;
+    }
+
+  priv->settings = g_settings_new ("org.gnome.desktop.a11y.magnifier");
+
+  /* Magnification factor */
+  w = WID (priv->builder, "magFactorSpinButton");
+  g_settings_bind (priv->settings, "mag-factor",
+				   gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (w)),
+				   "value", G_SETTINGS_BIND_DEFAULT);
+
+  /* Mouse tracking */
+  w = WID (priv->builder, "proportional");
+  radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (w));
+  init_radio_group (radio_group, "mouse-tracking",
+                    G_CALLBACK(mouse_mode_radiobutton_toggled_cb), priv);
+
+  /* Screen position */
+  w = WID (priv->builder, "full-screen");
+  radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (w));
+  init_radio_group (radio_group, "screen-position",
+                    G_CALLBACK(screen_position_radiobutton_toggled_cb), priv);
+
+  /* Lens mode */
+  w = WID (priv->builder, "moveableLensCheckbox");
+  g_settings_bind (priv->settings, "lens-mode", w, "active",
+                   G_SETTINGS_BIND_DEFAULT);
+
+  /* Clamp scrolling at screen edges */
+  w = WID (priv->builder, "scrollAtEdges");
+  g_settings_bind (priv->settings, "scroll-at-edges", w, "active",
+                   G_SETTINGS_BIND_DEFAULT);
+
+  /* Cross hairs: show/hide ... */
+  w = WID (priv->builder, "xhairsEnabledSwitch");
+  g_settings_bind (priv->settings, "show-cross-hairs", w, "active",
+                   G_SETTINGS_BIND_DEFAULT);
+
+  /* ... Cross hairs: color and opacity */
+  w = WID (priv->builder, "xHairsPicker");
+  init_xhairs_color_opacity (GTK_COLOR_BUTTON (w), priv);
+  g_signal_connect (G_OBJECT (priv->settings), "changed::cross-hairs-color",
+                    G_CALLBACK (update_xhairs_color_cb), w);
+  g_signal_connect (G_OBJECT (priv->settings), "changed::cross-hairs-opacity",
+                    G_CALLBACK (update_xhairs_opacity_cb), w);
+  g_signal_connect (G_OBJECT (w), "color-set",
+                    G_CALLBACK(xhairs_color_opacity_changed_cb),
+                    priv);
+
+  /* ... Cross hairs: thickness ... */
+  w = WID (priv->builder, "xHairsThicknessSlider");
+  g_settings_bind (priv->settings, "cross-hairs-thickness",
+                   gtk_range_get_adjustment (GTK_RANGE (w)), "value",
+                   G_SETTINGS_BIND_DEFAULT);
+
+  /* ... Cross hairs: clip ... */
+  w = WID (priv->builder, "xHairsClipCheckbox");
+  g_settings_bind (priv->settings, "cross-hairs-clip", w, "active",
+                   G_SETTINGS_BIND_INVERT_BOOLEAN);
+
+  /* ... Cross hairs: length */
+  w = WID (priv->builder, "xHairsLengthSlider");
+  xhairs_length_add_marks (GTK_SCALE (w));
+  g_settings_bind (priv->settings, "cross-hairs-length",
+                   gtk_range_get_adjustment (GTK_RANGE (w)), "value",
+                   G_SETTINGS_BIND_DEFAULT);
+
+  /* ... Window itself ... */
+  priv->dialog = WID (priv->builder, "magPrefsDialog");
+  w = WID (priv->builder, "closeButton");
+  g_signal_connect (G_OBJECT (w), "clicked",
+                    G_CALLBACK (zoom_option_close_dialog_cb),
+                    priv);
+  g_signal_connect (G_OBJECT (priv->dialog), "delete-event",
+                    G_CALLBACK (gtk_widget_hide_on_delete),
+                    NULL);
+  zoom_options_present_dialog (self);
+}
+
+/**
+ * zoom_options_present_dialog:
+ * @self: the #ZoomOptions object
+ *
+ * Activate the dialog associated with this ZoomOptions.
+ */
+void
+zoom_options_present_dialog (ZoomOptions *self)
+{
+  g_return_if_fail (ZOOM_IS_OPTIONS (self));
+
+  if (self->priv->dialog != NULL)
+    gtk_window_present (GTK_WINDOW (self->priv->dialog));
+}
diff --git a/panels/universal-access/zoom-options.h b/panels/universal-access/zoom-options.h
new file mode 100644
index 0000000..89941aa
--- /dev/null
+++ b/panels/universal-access/zoom-options.h
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2011 Inclusive Design Research Centre, OCAD University.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2.1 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Author: Joseph Scheuhammer <clown alum mit edu>
+ */
+
+#ifndef _ZOOM_OPTIONS_H
+#define _ZOOM_OPTIONS_H
+
+#include <glib-object.h>
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+typedef struct _ZoomOptions			ZoomOptions;
+typedef struct _ZoomOptionsClass	ZoomOptionsClass;
+typedef struct _ZoomOptionsPrivate	ZoomOptionsPrivate;
+
+#define ZOOM_TYPE_OPTIONS (zoom_options_get_type ())
+
+#define ZOOM_OPTIONS(obj) \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+  ZOOM_TYPE_OPTIONS, ZoomOptions))
+
+#define ZOOM_OPTIONS_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_CAST ((klass), \
+  ZOOM_TYPE_OPTIONS, ZoomOptionsClass))
+
+#define ZOOM_IS_OPTIONS(obj) \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+  ZOOM_TYPE_OPTIONS))
+
+#define ZOOM_IS_OPTIONS_CLASS(klass) \
+  (G_TYPE_CHECK_CLASS_TYPE ((klass), \
+  ZOOM_TYPE_OPTIONS))
+
+#define ZOOM_OPTIONS_GET_CLASS(obj) \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj), \
+  ZOOM_TYPE_OPTIONS, ZoomOptionsClass))
+
+struct _ZoomOptionsClass
+{
+  GObjectClass parent_class;
+};
+
+struct _ZoomOptions
+{
+	GObject parent;
+
+	ZoomOptionsPrivate *priv;
+};
+
+GType zoom_options_get_type (void) G_GNUC_CONST;
+
+void zoom_options_present_dialog (ZoomOptions *self);
+
+G_END_DECLS
+
+#endif /* _ZOOM_OPTIONS_H */
diff --git a/panels/universal-access/zoom-options.ui b/panels/universal-access/zoom-options.ui
new file mode 100644
index 0000000..da1f781
--- /dev/null
+++ b/panels/universal-access/zoom-options.ui
@@ -0,0 +1,845 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <requires lib="gtk+" version="2.16"/>
+  <object class="GtkAdjustment" id="adjustment2">
+    <property name="lower">100</property>
+    <property name="upper">4096</property>
+    <property name="value">4096</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+    <property name="page_size">10</property>
+  </object>
+  <object class="GtkAdjustment" id="magFactor">
+    <property name="lower">1</property>
+    <property name="upper">20</property>
+    <property name="value">2</property>
+    <property name="step_increment">0.25</property>
+    <property name="page_increment">1</property>
+  </object>
+  <object class="GtkDialog" id="magPrefsDialog">
+    <property name="width_request">650</property>
+    <property name="can_focus">False</property>
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Zoom Options</property>
+    <property name="resizable">False</property>
+    <property name="window_position">center-on-parent</property>
+    <property name="default_width">600</property>
+    <property name="type_hint">normal</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox1">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">5</property>
+        <child>
+          <object class="GtkNotebook" id="notebook1">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <child>
+              <object class="GtkVBox" id="vbox4">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="spacing">12</property>
+                <child>
+                  <object class="GtkFrame" id="frame2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">none</property>
+                    <child>
+                      <object class="GtkAlignment" id="alignment2">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="yscale">0</property>
+                        <property name="left_padding">12</property>
+                        <child>
+                          <object class="GtkSpinButton" id="magFactorSpinButton">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="halign">start</property>
+                            <property name="invisible_char">â</property>
+                            <property name="adjustment">magFactor</property>
+                            <property name="digits">2</property>
+                            <accessibility>
+                              <relation type="labelled-by" target="mag_factor_label"/>
+                            </accessibility>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child type="label">
+                      <object class="GtkLabel" id="mag_factor_label">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="ypad">2</property>
+                        <property name="label" translatable="yes">Magnification:</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                          <attribute name="scale" value="1.25"/>
+                        </attributes>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkFrame" id="frame1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">in</property>
+                    <child>
+                      <object class="GtkAlignment" id="alignment1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="yscale">0</property>
+                        <property name="left_padding">12</property>
+                        <child>
+                          <object class="GtkVBox" id="vbox1">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <child>
+                              <object class="GtkRadioButton" id="proportional">
+                                <property name="label" translatable="yes">Always</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="use_action_appearance">False</property>
+                                <property name="relief">none</property>
+                                <property name="active">True</property>
+                                <property name="draw_indicator">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="padding">8</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkRadioButton" id="push">
+                                <property name="label" translatable="yes">To keep the pointer visible</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="use_action_appearance">False</property>
+                                <property name="active">True</property>
+                                <property name="draw_indicator">True</property>
+                                <property name="group">proportional</property>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="padding">8</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkRadioButton" id="centered">
+                                <property name="label" translatable="yes">To keep the pointer centered</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="use_action_appearance">False</property>
+                                <property name="active">True</property>
+                                <property name="draw_indicator">True</property>
+                                <property name="group">proportional</property>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="padding">8</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child type="label">
+                      <object class="GtkLabel" id="label1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xpad">1</property>
+                        <property name="label" translatable="yes">Image moves with the mouse pointer:</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                          <attribute name="scale" value="1.25"/>
+                        </attributes>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="padding">8</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkFrame" id="frame4">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">in</property>
+                    <child>
+                      <object class="GtkAlignment" id="alignment3">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="left_padding">12</property>
+                        <child>
+                          <object class="GtkGrid" id="grid1">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="n_rows">4</property>
+                            <child>
+                              <object class="GtkRadioButton" id="full-screen">
+                                <property name="label" translatable="yes">Full Screen</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="use_action_appearance">False</property>
+                                <property name="xalign">0</property>
+                                <property name="active">True</property>
+                                <property name="draw_indicator">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">0</property>
+                                <property name="width">1</property>
+                                <property name="height">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkRadioButton" id="top-half">
+                                <property name="label" translatable="yes">Top Half</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="use_action_appearance">False</property>
+                                <property name="xalign">0</property>
+                                <property name="active">True</property>
+                                <property name="draw_indicator">True</property>
+                                <property name="group">full-screen</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">1</property>
+                                <property name="width">1</property>
+                                <property name="height">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkRadioButton" id="bottom-half">
+                                <property name="label" translatable="yes">Bottom Half</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="use_action_appearance">False</property>
+                                <property name="xalign">0</property>
+                                <property name="active">True</property>
+                                <property name="draw_indicator">True</property>
+                                <property name="group">full-screen</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">3</property>
+                                <property name="width">1</property>
+                                <property name="height">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkRadioButton" id="left-half">
+                                <property name="label" translatable="yes">Left Half</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="use_action_appearance">False</property>
+                                <property name="xalign">0</property>
+                                <property name="active">True</property>
+                                <property name="draw_indicator">True</property>
+                                <property name="group">full-screen</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">2</property>
+                                <property name="width">1</property>
+                                <property name="height">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkRadioButton" id="right-half">
+                                <property name="label" translatable="yes">Right Half</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="use_action_appearance">False</property>
+                                <property name="xalign">0</property>
+                                <property name="active">True</property>
+                                <property name="draw_indicator">True</property>
+                                <property name="group">full-screen</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="top_attach">2</property>
+                                <property name="width">1</property>
+                                <property name="height">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child type="label">
+                      <object class="GtkLabel" id="label6">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Position of magnified view on screen:</property>
+                        <property name="use_markup">True</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                          <attribute name="scale" value="1.25"/>
+                        </attributes>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">3</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="moveableLensCheckbox">
+                    <property name="label" translatable="yes">Moveable lens - magnified view follows mouse movements</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="padding">8</property>
+                    <property name="position">4</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkCheckButton" id="scrollAtEdges">
+                    <property name="label" translatable="yes">Image scrolls at screen edges</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_action_appearance">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="xalign">0</property>
+                    <property name="draw_indicator">True</property>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="padding">8</property>
+                    <property name="position">5</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">General</property>
+              </object>
+              <packing>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkVBox" id="vbox8">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="spacing">12</property>
+                <child>
+                  <object class="GtkFrame" id="frame3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="label_xalign">0</property>
+                    <property name="shadow_type">none</property>
+                    <child>
+                      <object class="GtkAlignment" id="alignment4">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="left_padding">12</property>
+                        <child>
+                          <object class="GtkBox" id="box1">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="orientation">vertical</property>
+                            <child>
+                              <object class="GtkHBox" id="xhairs_enabled_box">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="spacing">6</property>
+                                <child>
+                                  <object class="GtkSwitch" id="xhairsEnabledSwitch">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">False</property>
+                                    <accessibility>
+                                      <relation target="xhairs-section-heading" type="labelled-by"/>
+                                    </accessibility>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkCheckButton" id="xHairsClipCheckbox">
+                                <property name="label" translatable="yes">Show crosshairs intersection</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="use_action_appearance">False</property>
+                                <property name="xalign">0</property>
+                                <property name="draw_indicator">True</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="padding">8</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkHBox" id="hbox3">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="spacing">12</property>
+                                <child>
+                                  <object class="GtkLabel" id="label5">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="yalign">0</property>
+                                    <property name="label" translatable="yes">Color and Opacity:</property>
+                                    <accessibility>
+                                      <relation type="label-for" target="xHairsPicker"/>
+                                    </accessibility>
+                                    <attributes>
+                                      <attribute name="weight" value="bold"/>
+                                      <attribute name="scale" value="1.25"/>
+                                    </attributes>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkColorButton" id="xHairsPicker">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="receives_default">True</property>
+                                    <property name="use_action_appearance">False</property>
+                                    <property name="yalign">0</property>
+                                    <property name="use_alpha">True</property>
+                                    <property name="color">#ffff00000000</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="padding">8</property>
+                                <property name="position">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkHBox" id="hbox5">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="spacing">12</property>
+                                <child>
+                                  <object class="GtkLabel" id="label7">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">Length:</property>
+                                    <accessibility>
+                                      <relation type="label-for" target="xHairsLengthSlider"/>
+                                    </accessibility>
+                                    <attributes>
+                                      <attribute name="weight" value="bold"/>
+                                      <attribute name="scale" value="1.25"/>
+                                    </attributes>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkHBox" id="hbox6">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="spacing">6</property>
+                                    <child>
+                                      <object class="GtkLabel" id="xhairs_length_short_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes" comments="short delay">Short</property>
+                                        <property name="justify">center</property>
+                                        <attributes>
+                                          <attribute name="scale" value="0.82999999999999996"/>
+                                        </attributes>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkHScale" id="xHairsLengthSlider">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="adjustment">xhairsLength</property>
+                                        <property name="draw_value">False</property>
+                                        <property name="value_pos">right</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">True</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="xhairs_length_long_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes" comments="long delay">Long</property>
+                                        <property name="justify">center</property>
+                                        <attributes>
+                                          <attribute name="scale" value="0.82999999999999996"/>
+                                        </attributes>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">True</property>
+                                        <property name="padding">8</property>
+                                        <property name="position">2</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="padding">8</property>
+                                <property name="position">3</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkHBox" id="hbox2">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="spacing">12</property>
+                                <child>
+                                  <object class="GtkLabel" id="label9">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">Thickness:</property>
+                                    <attributes>
+                                      <attribute name="weight" value="bold"/>
+                                      <attribute name="scale" value="1.25"/>
+                                    </attributes>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">False</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkHBox" id="hbox7">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="spacing">6</property>
+                                    <child>
+                                      <object class="GtkLabel" id="xhairs_thickness_thin_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">1</property>
+                                        <property name="label" translatable="yes" comments="short delay">Thin</property>
+                                        <property name="justify">center</property>
+                                        <attributes>
+                                          <attribute name="scale" value="0.82999999999999996"/>
+                                        </attributes>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkHScale" id="xHairsThicknessSlider">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="adjustment">xHairsThickness</property>
+                                        <property name="draw_value">False</property>
+                                        <property name="value_pos">right</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">True</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="xhairs_thickness_thick_label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes" comments="long delay">Thick</property>
+                                        <property name="justify">center</property>
+                                        <attributes>
+                                          <attribute name="scale" value="0.82999999999999996"/>
+                                        </attributes>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">True</property>
+                                        <property name="padding">8</property>
+                                        <property name="position">2</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="padding">8</property>
+                                <property name="position">4</property>
+                              </packing>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child type="label">
+                      <object class="GtkLabel" id="xhairs-section-heading">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Show</property>
+                        <property name="use_markup">True</property>
+                        <attributes>
+                          <attribute name="weight" value="bold"/>
+                          <attribute name="scale" value="1.25"/>
+                        </attributes>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label4">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Crosshairs</property>
+              </object>
+              <packing>
+                <property name="position">1</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area1">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <object class="GtkButton" id="closeButton">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+                <property name="xalign">0.49000000953674316</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="0">closeButton</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkListStore" id="mouseTrackingList">
+    <columns>
+      <!-- column-name gchararray1 -->
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes">None</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Centered</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Push</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Proportional</col>
+      </row>
+    </data>
+  </object>
+  <object class="GtkListStore" id="screenPositionList">
+    <columns>
+      <!-- column-name positions -->
+      <column type="gchararray"/>
+      <!-- column-name scale -->
+      <column type="gdouble"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0" translatable="yes">Full Screen</col>
+        <col id="1">1.25</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Top Half</col>
+        <col id="1">1.25</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Bottom Half</col>
+        <col id="1">1.25</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Left Half</col>
+        <col id="1">1.25</col>
+      </row>
+      <row>
+        <col id="0" translatable="yes">Right Half</col>
+        <col id="1">1.25</col>
+      </row>
+    </data>
+  </object>
+  <object class="GtkAdjustment" id="xHairsThickness">
+    <property name="lower">1</property>
+    <property name="upper">100</property>
+    <property name="value">8</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="xhairsLength">
+    <property name="lower">20</property>
+    <property name="upper">4096</property>
+    <property name="value">4096</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">100</property>
+  </object>
+  <object class="GtkAdjustment" id="xhairsOpacity">
+    <property name="lower">0.10000000000000001</property>
+    <property name="upper">1</property>
+    <property name="value">0.66000000000000003</property>
+    <property name="step_increment">0.01</property>
+    <property name="page_increment">0.10000000000000001</property>
+  </object>
+</interface>
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 971afa2..773b542 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -78,8 +78,10 @@ panels/sound/data/gnome-sound-panel.desktop.in.in
 panels/sound/data/sounds/gnome-sounds-default.xml.in.in
 panels/universal-access/cc-ua-panel.c
 panels/universal-access/gconf-property-editor.c
+panels/universal-access/zoom-options.c
 panels/universal-access/gnome-universal-access-panel.desktop.in.in
 [type: gettext/glade]panels/universal-access/uap.ui
+[type: gettext/glade]panels/universal-access/zoom-options.ui
 panels/user-accounts/run-passwd.c
 panels/user-accounts/um-account-dialog.c
 panels/user-accounts/um-account-type.c



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