[gnome-control-center] Universal access: add dialog for zoom options
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] Universal access: add dialog for zoom options
- Date: Wed, 21 Sep 2011 18:20:34 +0000 (UTC)
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]