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



commit 9d5e654bec5697b115806201f1c9cf48e467244b
Author: Joseph Scheuhammer <clown alum mit edu>
Date:   Fri Dec 16 16:55:39 2011 -0500

    Universal access: add dialog for zoom options
    
    Modified zoom options dialog to implement hbons wireframe.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=643086

 panels/universal-access/uap.ui          |    6 +-
 panels/universal-access/zoom-options.c  |  295 ++++++++--
 panels/universal-access/zoom-options.ui |  917 +++++++++++++------------------
 3 files changed, 631 insertions(+), 587 deletions(-)
---
diff --git a/panels/universal-access/uap.ui b/panels/universal-access/uap.ui
index 0181297..8017855 100644
--- a/panels/universal-access/uap.ui
+++ b/panels/universal-access/uap.ui
@@ -609,12 +609,16 @@
                                   <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>
                                     <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>
+                                        <attributes>
+                                          <attribute name="scale" value="1.25"/>
+                                        </attributes>
                                       </object>
                                     </child>
                                   </object>
diff --git a/panels/universal-access/zoom-options.c b/panels/universal-access/zoom-options.c
index 9151a6c..ad7c20e 100644
--- a/panels/universal-access/zoom-options.c
+++ b/panels/universal-access/zoom-options.c
@@ -25,61 +25,244 @@
 
 #define WID(w) (GtkWidget *) gtk_builder_get_object (priv->builder, w)
 
+#define POSITION_MODEL_VALUE_COLUMN     2
+#define FONT_SCALE                      1.25
+
 struct _ZoomOptionsPrivate
 {
   GtkBuilder *builder;
   GSettings *settings;
 
+  GtkWidget *position_combobox;
+  GtkWidget *follow_mouse_radio;
+  GtkWidget *screen_part_radio;
+  GtkWidget *centered_radio;
+  GtkWidget *push_radio;
+  GtkWidget *proportional_radio;
+  GtkWidget *extend_beyond_checkbox;
+
   GtkWidget *dialog;
 };
 
 G_DEFINE_TYPE (ZoomOptions, zoom_options, G_TYPE_OBJECT);
 
-static void xhairs_color_opacity_changed_cb (GtkColorButton *button, ZoomOptionsPrivate *priv);
+inline void set_active (GtkWidget* toggle, gboolean sense);
+inline gboolean get_active (GtkWidget* toggle);
+inline void set_sensitive (GtkWidget *widget, gboolean sense);
+
+static void set_enable_screen_part_ui (GtkWidget *widget, ZoomOptionsPrivate *priv);
+static void mouse_tracking_notify_cb (GSettings *settings, const gchar *key, ZoomOptionsPrivate *priv);
+static void scale_label (GtkBin *toggle, PangoAttrList *attrs);
+static void xhairs_color_opacity_changed (GtkColorButton *button, ZoomOptionsPrivate *priv);
 static void xhairs_length_add_marks (GtkScale *scale);
 
+/* Utilties to save on line length */
+
+inline void
+set_active (GtkWidget* toggle, gboolean sense)
+{
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), sense);
+}
+
+inline gboolean
+get_active (GtkWidget* toggle)
+{
+    return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (toggle));
+}
+
+inline void
+set_sensitive (GtkWidget *widget, gboolean sense)
+{
+    gtk_widget_set_sensitive (widget, sense);
+}
+
 static void
-mouse_mode_radiobutton_toggled_cb (GtkWidget *widget, ZoomOptionsPrivate *priv)
+mouse_tracking_radio_toggled_cb (GtkWidget *widget, ZoomOptionsPrivate *priv)
 {
-    if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)) == TRUE)
-      {
+	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)));
+	                           gtk_buildable_get_name (GTK_BUILDABLE (widget)));
       }
 }
 
 static void
-screen_position_radiobutton_toggled_cb (GtkWidget *widget, ZoomOptionsPrivate *priv)
+init_mouse_mode_radio_group (GSList *mode_group, 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)));
-      }
+    gchar *mode;
+    gchar *name;
+
+    mode = g_settings_get_string (priv->settings, "mouse-tracking");
+	for (; mode_group != NULL; mode_group = mode_group->next)
+	  {
+	    name = (gchar *) gtk_buildable_get_name (GTK_BUILDABLE (mode_group->data));
+	    if (g_strcmp0 (name, mode) == 0)
+	      set_active (GTK_WIDGET (mode_group->data), TRUE);
+	    else
+	      set_active (GTK_WIDGET (mode_group->data), FALSE);
+
+	    g_signal_connect (G_OBJECT (mode_group->data), "toggled",
+                          G_CALLBACK(mouse_tracking_radio_toggled_cb),
+                          priv);
+	  }
 }
 
 static void
-init_radio_group (GSList *radio_group,
-                  gchar *key,
-                  GCallback radiobutton_toggled_cb,
-                  ZoomOptionsPrivate *priv)
+init_screen_part_section (ZoomOptionsPrivate *priv, PangoAttrList *pango_attrs)
 {
-    gchar *value;
-    const gchar *name;
+  gboolean lens_mode;
+  GSList *mouse_mode_group;
+
+  priv->follow_mouse_radio = WID ("moveableLens");
+  priv->screen_part_radio = WID ("screenPart");
+  priv->centered_radio = WID ("centered");
+  priv->push_radio = WID ("push");
+  priv->proportional_radio = WID ("proportional");
+  priv->extend_beyond_checkbox = WID ("scrollAtEdges");
+
+  /* Scale the labels of the toggles */
+  scale_label (GTK_BIN(priv->follow_mouse_radio), pango_attrs);
+  scale_label (GTK_BIN(priv->screen_part_radio), pango_attrs);
+  scale_label (GTK_BIN(priv->centered_radio), pango_attrs);
+  scale_label (GTK_BIN(priv->push_radio), pango_attrs);
+  scale_label (GTK_BIN(priv->proportional_radio), pango_attrs);
+  scale_label (GTK_BIN(priv->extend_beyond_checkbox), pango_attrs);
+
+  lens_mode = g_settings_get_boolean (priv->settings, "lens-mode");
+  set_active (priv->follow_mouse_radio, lens_mode);
+  set_active (priv->screen_part_radio, !lens_mode);
+
+  mouse_mode_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (priv->centered_radio));
+  init_mouse_mode_radio_group (mouse_mode_group, priv);
+  set_enable_screen_part_ui (priv->screen_part_radio, priv);
+
+  g_settings_bind (priv->settings, "lens-mode",
+                   priv->follow_mouse_radio, "active",
+                   G_SETTINGS_BIND_DEFAULT);
+
+  g_settings_bind (priv->settings, "scroll-at-edges",
+                   priv->extend_beyond_checkbox, "active",
+                   G_SETTINGS_BIND_DEFAULT);
+
+  g_signal_connect (G_OBJECT (priv->screen_part_radio), "toggled",
+                    G_CALLBACK (set_enable_screen_part_ui), priv);
+
+  g_signal_connect (G_OBJECT (priv->settings), "changed::mouse-tracking",
+                    G_CALLBACK (mouse_tracking_notify_cb), priv);
+}
+
+static void
+set_enable_screen_part_ui (GtkWidget *widget, ZoomOptionsPrivate *priv)
+{
+    gboolean screen_part;
 
-    value = g_settings_get_string (priv->settings, key);
-    for (; radio_group != NULL; radio_group = radio_group->next)
+    /* If the "screen part" radio is not checked, then the "follow mouse" radio
+     * is checked (== lens mode). Set mouse tracking back to the default.
+     */
+    screen_part = get_active (priv->screen_part_radio);
+    if (!screen_part)
       {
-        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);
+        g_settings_set_string (priv->settings,
+                               "mouse-tracking", "proportional");
       }
+
+    set_sensitive (priv->centered_radio, screen_part);
+    set_sensitive (priv->push_radio, screen_part);
+    set_sensitive (priv->proportional_radio, screen_part);
+    set_sensitive (priv->extend_beyond_checkbox, screen_part);
+}
+
+static void
+mouse_tracking_notify_cb (GSettings             *settings,
+                          const gchar           *key,
+                          ZoomOptionsPrivate    *priv)
+{
+  gchar *tracking;
+
+  tracking = g_settings_get_string (settings, key);
+  if (g_strcmp0 (tracking, "proportional") == 0)
+    {
+      set_active (priv->proportional_radio, TRUE);
+    }
+  else if (g_strcmp0 (tracking, "centered") == 0)
+    {
+      set_active (priv->centered_radio, TRUE);
+    }
+  else
+    {
+      set_active (priv->push_radio, TRUE);
+    }
+}
+
+static void
+scale_label (GtkBin *toggle, PangoAttrList *attrs)
+{
+  GtkWidget *label;
+
+  label = gtk_bin_get_child (toggle);
+  gtk_label_set_attributes (GTK_LABEL (label), attrs);
+}
+
+static void
+screen_position_combo_changed_cb (GtkWidget *combobox, ZoomOptions *options)
+{
+  ZoomOptionsPrivate *priv = options->priv;
+  gchar *combo_value = NULL;
+  GtkTreeIter iter;
+
+  gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combobox), &iter);
+
+  gtk_tree_model_get (gtk_combo_box_get_model (GTK_COMBO_BOX (combobox)), &iter,
+                      POSITION_MODEL_VALUE_COLUMN, &combo_value,
+                      -1);
+
+  if (g_strcmp0 (combo_value, ""))
+    {
+      g_settings_set_string (priv->settings, "screen-position", combo_value);
+    }
+
+  g_free (combo_value);
+}
+
+static void
+screen_position_notify_cb (GSettings *settings,
+                           const gchar *key,
+                           ZoomOptions *options)
+{
+  ZoomOptionsPrivate *priv = options->priv;
+  gchar *position;
+  GtkTreeIter iter;
+  GtkTreeModel *model;
+  GtkComboBox *combobox;
+  gboolean valid;
+  gchar *combo_value;
+
+  position = g_settings_get_string (settings, key);
+  position = g_settings_get_string (priv->settings, key);
+  combobox = GTK_COMBO_BOX (WID ("screen_position_combo_box"));
+  model = gtk_combo_box_get_model (combobox);
+
+  /* Find the matching screen position value in the combobox model.  If nothing
+   * matches, leave the combobox as is.
+   */
+  valid = gtk_tree_model_get_iter_first (model, &iter);
+  while (valid)
+    {
+        gtk_tree_model_get (model, &iter,
+                            POSITION_MODEL_VALUE_COLUMN, &combo_value,
+                            -1);
+        if (!g_strcmp0 (combo_value, position))
+          {
+            g_signal_handlers_block_by_func (combobox, screen_position_combo_changed_cb, priv);
+            gtk_combo_box_set_active_iter (combobox, &iter);
+            g_signal_handlers_unblock_by_func (combobox, screen_position_combo_changed_cb, priv);
+            g_free (combo_value);
+            break;
+          }
+
+        g_free (combo_value);
+        valid = gtk_tree_model_iter_next (model, &iter);
+    }
 }
 
 static void
@@ -96,7 +279,7 @@ init_xhairs_color_opacity (GtkColorButton *color_button, ZoomOptionsPrivate *pri
 }
 
 static void
-update_xhairs_color_cb (GSettings *settings, gchar *key, GtkColorButton *button)
+xhairs_color_notify_cb (GSettings *settings, gchar *key, GtkColorButton *button)
 {
     gchar *color;
     GdkColor rgb;
@@ -108,7 +291,7 @@ update_xhairs_color_cb (GSettings *settings, gchar *key, GtkColorButton *button)
 }
 
 static void
-update_xhairs_opacity_cb (GSettings *settings, gchar *key, GtkColorButton *button)
+xhairs_opacity_notify_cb (GSettings *settings, gchar *key, GtkColorButton *button)
 {
     gdouble opacity;
 
@@ -118,7 +301,7 @@ update_xhairs_opacity_cb (GSettings *settings, gchar *key, GtkColorButton *butto
 
 #define TO_HEX(x) (int) ((gdouble) x * 255.0)
 static void
-xhairs_color_opacity_changed_cb (GtkColorButton *button, ZoomOptionsPrivate *priv)
+xhairs_color_opacity_changed (GtkColorButton *button, ZoomOptionsPrivate *priv)
 {
     GdkRGBA rgba;
     gchar *color_string;
@@ -153,9 +336,11 @@ static void xhairs_length_add_marks (GtkScale *scale)
        length of one hair is 25% of the screen. */
     quarter_length = length / 4;
 
+    gtk_scale_add_mark (scale, 0, GTK_POS_BOTTOM, _("Short"));
     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"));
+    gtk_scale_add_mark (scale, length, GTK_POS_BOTTOM, _("Long"));
 }
 
 static void
@@ -215,7 +400,8 @@ zoom_options_init (ZoomOptions *self)
 {
   ZoomOptionsPrivate *priv;
   GtkWidget *w;
-  GSList *radio_group;
+  PangoAttrList *pango_attrs;
+  PangoAttribute *attr;
   GError *err = NULL;
 
   priv = self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, ZOOM_TYPE_OPTIONS, ZoomOptionsPrivate);
@@ -237,33 +423,26 @@ zoom_options_init (ZoomOptions *self)
 
   priv->settings = g_settings_new ("org.gnome.desktop.a11y.magnifier");
 
+  pango_attrs = pango_attr_list_new ();
+  attr = pango_attr_scale_new (FONT_SCALE);
+  pango_attr_list_insert (pango_attrs, attr);
+
   /* Magnification factor */
   w = WID ("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 ("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 ("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 ("moveableLensCheckbox");
-  g_settings_bind (priv->settings, "lens-mode", w, "active",
-                   G_SETTINGS_BIND_DEFAULT);
+  /* Screen position combo */
+  w = WID ("screen_position_combo_box");
+  screen_position_notify_cb (priv->settings, "screen-position", self);
+  g_signal_connect (G_OBJECT (priv->settings), "changed::screen-position",
+                    G_CALLBACK (screen_position_notify_cb), self);
+  g_signal_connect (G_OBJECT (w), "changed",
+                    G_CALLBACK (screen_position_combo_changed_cb), self);
 
-  /* Clamp scrolling at screen edges */
-  w = WID ("scrollAtEdges");
-  g_settings_bind (priv->settings, "scroll-at-edges", w, "active",
-                   G_SETTINGS_BIND_DEFAULT);
+  /* Screen part section */
+  init_screen_part_section (priv, pango_attrs);
 
   /* Cross hairs: show/hide ... */
   w = WID ("xhairsEnabledSwitch");
@@ -274,11 +453,11 @@ zoom_options_init (ZoomOptions *self)
   w = WID ("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_CALLBACK (xhairs_color_notify_cb), w);
   g_signal_connect (G_OBJECT (priv->settings), "changed::cross-hairs-opacity",
-                    G_CALLBACK (update_xhairs_opacity_cb), w);
+                    G_CALLBACK (xhairs_opacity_notify_cb), w);
   g_signal_connect (G_OBJECT (w), "color-set",
-                    G_CALLBACK(xhairs_color_opacity_changed_cb),
+                    G_CALLBACK (xhairs_color_opacity_changed),
                     priv);
 
   /* ... Cross hairs: thickness ... */
@@ -289,6 +468,7 @@ zoom_options_init (ZoomOptions *self)
 
   /* ... Cross hairs: clip ... */
   w = WID ("xHairsClipCheckbox");
+  scale_label (GTK_BIN(w), pango_attrs);
   g_settings_bind (priv->settings, "cross-hairs-clip", w, "active",
                    G_SETTINGS_BIND_INVERT_BOOLEAN);
 
@@ -301,6 +481,8 @@ zoom_options_init (ZoomOptions *self)
 
   /* ... Window itself ... */
   priv->dialog = WID ("magPrefsDialog");
+  gtk_window_set_position (GTK_WINDOW (priv->dialog),
+                           GTK_WIN_POS_CENTER);
   w = WID ("closeButton");
   g_signal_connect (G_OBJECT (w), "clicked",
                     G_CALLBACK (zoom_option_close_dialog_cb),
@@ -308,6 +490,9 @@ zoom_options_init (ZoomOptions *self)
   g_signal_connect (G_OBJECT (priv->dialog), "delete-event",
                     G_CALLBACK (gtk_widget_hide_on_delete),
                     NULL);
+
+  pango_attr_list_unref (pango_attrs);
+
   zoom_options_present_dialog (self);
 }
 
diff --git a/panels/universal-access/zoom-options.ui b/panels/universal-access/zoom-options.ui
index 51b50f0..9936637 100644
--- a/panels/universal-access/zoom-options.ui
+++ b/panels/universal-access/zoom-options.ui
@@ -17,13 +17,11 @@
     <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">
@@ -32,173 +30,96 @@
         <property name="orientation">vertical</property>
         <property name="spacing">5</property>
         <child>
-          <object class="GtkNotebook" id="notebook1">
+          <object class="GtkVBox" id="vbox4">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
+            <property name="can_focus">False</property>
+            <property name="spacing">12</property>
+            <property name="margin-left">16</property>
+            <property name="margin-right">40</property>
             <child>
-              <object class="GtkVBox" id="vbox4">
+              <object class="GtkFrame" id="frame2">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="spacing">12</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">none</property>
                 <child>
-                  <object class="GtkFrame" id="frame2">
+                  <placeholder/>
+                </child>
+                <child type="label">
+                  <object class="GtkBox" id="box5">
                     <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="xalign">0</property>
                         <property name="ypad">2</property>
-                        <property name="label" translatable="yes">Magnification</property>
+                        <property name="label" translatable="yes">Magnification:</property>
                         <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>
-                  </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">
+                      <object class="GtkSpinButton" id="magFactorSpinButton">
                         <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>
+                        <property name="can_focus">True</property>
+                        <property name="halign">start</property>
+                        <property name="invisible_char">â</property>
+                        <property name="invisible_char_set">True</property>
+                        <property name="adjustment">magFactor</property>
+                        <property name="digits">2</property>
                       </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="padding">21</property>
+                        <property name="position">1</property>
+                      </packing>
                     </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>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="padding">4</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFrame" id="frame5">
+                <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="GtkFrame" id="frame4">
+                  <object class="GtkAlignment" id="alignment5">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="label_xalign">0</property>
-                    <property name="shadow_type">in</property>
+                    <property name="top_padding">6</property>
+                    <property name="left_padding">24</property>
                     <child>
-                      <object class="GtkAlignment" id="alignment3">
+                      <object class="GtkBox" id="box3">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="left_padding">12</property>
+                        <property name="orientation">vertical</property>
                         <child>
-                          <object class="GtkGrid" id="grid1">
+                          <object class="GtkGrid" id="grid4">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="n_rows">4</property>
+                            <property name="n_rows">2</property>
+                            <property name="n_columns">2</property>
                             <child>
-                              <object class="GtkRadioButton" id="full-screen">
-                                <property name="label" translatable="yes">Full Screen</property>
+                              <object class="GtkRadioButton" id="moveableLens">
+                                <property name="label" translatable="yes">Follow mouse cursor</property>
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="receives_default">False</property>
@@ -208,267 +129,231 @@
                                 <property name="draw_indicator">True</property>
                               </object>
                               <packing>
-                                <property name="left_attach">1</property>
+                                <property name="left_attach">0</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>
+                              <object class="GtkRadioButton" id="screenPart">
+                                <property name="label" translatable="yes">Screen part:</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="yalign">0</property>
                                 <property name="active">True</property>
                                 <property name="draw_indicator">True</property>
-                                <property name="group">full-screen</property>
+                                <property name="group">moveableLens</property>
                               </object>
                               <packing>
-                                <property name="left_attach">1</property>
+                                <property name="left_attach">0</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>
+                              <object class="GtkComboBox" id="screen_position_combo_box">
                                 <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>
+                                <property name="can_focus">False</property>
+                                <property name="model">screen_position_model</property>
+                                <property name="active">0</property>
+                                <child>
+                                  <object class="GtkCellRendererText" id="screen_position_renderer"/>
+                                  <attributes>
+                                    <attribute name="scale">1</attribute>
+                                    <attribute name="text">0</attribute>
+                                  </attributes>
+                                </child>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
-                                <property name="top_attach">3</property>
+                                <property name="top_attach">1</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>
+                              <placeholder/>
                             </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkAlignment" id="alignment6">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="left_padding">18</property>
                             <child>
-                              <object class="GtkRadioButton" id="right-half">
-                                <property name="label" translatable="yes">Right Half</property>
+                              <object class="GtkBox" id="box4">
                                 <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>
+                                <property name="can_focus">False</property>
+                                <property name="orientation">vertical</property>
+                                <child>
+                                  <object class="GtkCheckButton" id="scrollAtEdges">
+                                    <property name="label" translatable="yes">Magnifier extends outside of 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="draw_indicator">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="padding">2</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkRadioButton" id="centered">
+                                    <property name="label" translatable="yes">Keep magnifier cursor 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="xalign">0</property>
+                                    <property name="active">True</property>
+                                    <property name="draw_indicator">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkRadioButton" id="push">
+                                    <property name="label" translatable="yes">Magnifier cursor pushes contents around</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>
+                                    <property name="group">centered</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">2</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkRadioButton" id="proportional">
+                                    <property name="label" translatable="yes">Magnifier cursor moves with contents</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>
+                                    <property name="group">centered</property>
+                                  </object>
+                                  <packing>
+                                    <property name="expand">False</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">3</property>
+                                  </packing>
+                                </child>
                               </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>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
                         </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>
+                <child type="label">
+                  <object class="GtkLabel" id="label3">
                     <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>
+                    <property name="can_focus">False</property>
+                    <property name="label" translatable="yes">Magnifier Position:</property>
+                    <attributes>
+                      <attribute name="weight" value="bold"/>
+                      <attribute name="scale" value="1.25"/>
+                    </attributes>
                   </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>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="padding">4</property>
+                <property name="position">1</property>
               </packing>
             </child>
             <child>
-              <object class="GtkVBox" id="vbox8">
+              <object class="GtkFrame" id="frame3">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="spacing">12</property>
+                <property name="label_xalign">0</property>
+                <property name="shadow_type">none</property>
                 <child>
-                  <object class="GtkFrame" id="frame3">
+                  <object class="GtkAlignment" id="alignment4">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
-                    <property name="label_xalign">0</property>
-                    <property name="shadow_type">none</property>
+                    <property name="top_padding">8</property>
+                    <property name="left_padding">16</property>
                     <child>
-                      <object class="GtkAlignment" id="alignment4">
+                      <object class="GtkBox" id="box1">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="left_padding">12</property>
+                        <property name="orientation">vertical</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <placeholder/>
+                        </child>
                         <child>
-                          <object class="GtkBox" id="box1">
+                          <object class="GtkGrid" id="grid2">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="orientation">vertical</property>
+                            <property name="row_spacing">16</property>
                             <child>
-                              <object class="GtkHBox" id="xhairs_enabled_box">
+                              <object class="GtkLabel" id="label9">
                                 <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>
+                                <property name="label" translatable="yes">Thickness:</property>
+                                <property name="justify">center</property>
+                                <property name="width_chars">12</property>
+                                <attributes>
+                                  <attribute name="scale" value="1.25"/>
+                                </attributes>
                               </object>
                               <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="padding">8</property>
-                                <property name="position">1</property>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                                <property name="width">1</property>
+                                <property name="height">1</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox3">
+                              <object class="GtkHBox" id="hbox7">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="spacing">12</property>
+                                <property name="spacing">3</property>
                                 <child>
-                                  <object class="GtkLabel" id="label5">
+                                  <object class="GtkLabel" id="xhairs_thickness_thin_label">
                                     <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>
+                                    <property name="xalign">1</property>
+                                    <property name="label" translatable="yes" comments="short delay">Thin</property>
+                                    <property name="justify">center</property>
                                     <attributes>
-                                      <attribute name="weight" value="bold"/>
                                       <attribute name="scale" value="1.25"/>
                                     </attributes>
                                   </object>
@@ -479,108 +364,79 @@
                                   </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkColorButton" id="xHairsPicker">
+                                  <object class="GtkHScale" id="xHairsThicknessSlider">
                                     <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>
+                                    <property name="adjustment">xHairsThickness</property>
+                                    <property name="draw_value">False</property>
+                                    <property name="value_pos">right</property>
                                   </object>
                                   <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
+                                    <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">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">
+                                  <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">Length</property>
-                                    <accessibility>
-                                      <relation type="label-for" target="xHairsLengthSlider"/>
-                                    </accessibility>
+                                    <property name="label" translatable="yes" comments="long delay">Thick</property>
+                                    <property name="justify">center</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>
+                                    <property name="fill">True</property>
+                                    <property name="padding">8</property>
+                                    <property name="position">2</property>
                                   </packing>
                                 </child>
+                              </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="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>
+                                <property name="justify">center</property>
+                                <property name="width_chars">12</property>
+                                <accessibility>
+                                  <relation type="label-for" target="xHairsLengthSlider"/>
+                                </accessibility>
+                                <attributes>
+                                  <attribute name="scale" value="1.25"/>
+                                </attributes>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                                <property name="width">1</property>
+                                <property name="height">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkHBox" id="hbox6">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="spacing">3</property>
                                 <child>
-                                  <object class="GtkHBox" id="hbox6">
+                                  <object class="GtkHScale" id="xHairsLengthSlider">
                                     <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>
+                                    <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>
@@ -590,140 +446,159 @@
                                 </child>
                               </object>
                               <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="padding">8</property>
-                                <property name="position">3</property>
+                                <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="GtkHBox" id="hbox2">
+                              <object class="GtkLabel" id="label5">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="spacing">12</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">Color:</property>
+                                <attributes>
+                                  <attribute name="scale" value="1.25"/>
+                                </attributes>
+                              </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="GtkBox" id="box7">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="spacing">3</property>
                                 <child>
-                                  <object class="GtkLabel" id="label9">
+                                  <object class="GtkColorButton" id="xHairsPicker">
                                     <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>
+                                    <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">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>
+                                    <property name="position">0</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>
+                                <property name="left_attach">1</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>
                           </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
                         </child>
                       </object>
                     </child>
-                    <child type="label">
+                  </object>
+                </child>
+                <child type="label">
+                  <object class="GtkBox" id="box2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="spacing">12</property>
+                    <child>
                       <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="label" translatable="yes">Crosshairs:</property>
                         <property name="use_markup">True</property>
                         <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="GtkBox" id="box6">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="spacing">12</property>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <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">1</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkCheckButton" id="xHairsClipCheckbox">
+                        <property name="label" translatable="yes">Overlaps mouse cursor</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="halign">start</property>
+                        <property name="hexpand">True</property>
+                        <property name="use_action_appearance">False</property>
+                        <property name="xalign">0</property>
+                        <property name="draw_indicator">True</property>
+                        <property name="margin-left">100</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">2</property>
+                      </packing>
                     </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>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="padding">4</property>
+                <property name="position">2</property>
               </packing>
             </child>
           </object>
@@ -771,53 +646,40 @@
       <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">
+  <object class="GtkListStore" id="screen_position_model">
     <columns>
       <!-- column-name positions -->
       <column type="gchararray"/>
-      <!-- column-name scale -->
-      <column type="gdouble"/>
+      <!-- column-name text_scale -->
+      <column type="gfloat"/>
+      <!-- column-name setting_value -->
+      <column type="gchararray"/>
     </columns>
     <data>
       <row>
         <col id="0" translatable="yes">Full Screen</col>
         <col id="1">1.25</col>
+        <col id="2">full-screen</col>
       </row>
       <row>
         <col id="0" translatable="yes">Top Half</col>
         <col id="1">1.25</col>
+        <col id="2">top-half</col>
       </row>
       <row>
         <col id="0" translatable="yes">Bottom Half</col>
         <col id="1">1.25</col>
+        <col id="2">bottom-half</col>
       </row>
       <row>
         <col id="0" translatable="yes">Left Half</col>
         <col id="1">1.25</col>
+        <col id="2">left-half</col>
       </row>
       <row>
         <col id="0" translatable="yes">Right Half</col>
         <col id="1">1.25</col>
+        <col id="2">right-half</col>
       </row>
     </data>
   </object>
@@ -835,11 +697,4 @@
     <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>



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