display: initial implementation of the new design

Add an initial implementation of the new design for the display panel. The
display previews and presentation mode are not yet fully implemented.

https://bugzilla.gnome.org/show_bug.cgi?id=706115
This commit is contained in:
Thomas Wood 2013-08-20 14:48:04 +01:00
parent b5900fc179
commit b4a16be646
6 changed files with 1501 additions and 1894 deletions

View file

@ -94,7 +94,7 @@ NETWORK_MANAGER_REQUIRED_VERSION=0.9.8
NETWORK_MANAGER_APPLET_REQUIRED_VERSION=0.9.7.995 NETWORK_MANAGER_APPLET_REQUIRED_VERSION=0.9.7.995
MODEM_MANAGER_REQUIRED_VERSION=0.7 MODEM_MANAGER_REQUIRED_VERSION=0.7
LIBNOTIFY_REQUIRED_VERSION=0.7.3 LIBNOTIFY_REQUIRED_VERSION=0.7.3
GNOME_DESKTOP_REQUIRED_VERSION=3.9.0 GNOME_DESKTOP_REQUIRED_VERSION=3.9.90
SCHEMAS_REQUIRED_VERSION=3.7.2.2 SCHEMAS_REQUIRED_VERSION=3.7.2.2
LIBWACOM_REQUIRED_VERSION=0.7 LIBWACOM_REQUIRED_VERSION=0.7
CLUTTER_REQUIRED_VERSION=1.11.3 CLUTTER_REQUIRED_VERSION=1.11.3

File diff suppressed because it is too large Load diff

View file

@ -24,6 +24,8 @@
#define _CC_DISPLAY_PANEL_H #define _CC_DISPLAY_PANEL_H
#include <shell/cc-panel.h> #include <shell/cc-panel.h>
#define GNOME_DESKTOP_USE_UNSTABLE_API
#include <libgnome-desktop/gnome-rr-config.h>
G_BEGIN_DECLS G_BEGIN_DECLS
@ -66,6 +68,7 @@ struct _CcDisplayPanelClass
}; };
GType cc_display_panel_get_type (void) G_GNUC_CONST; GType cc_display_panel_get_type (void) G_GNUC_CONST;
gint cc_display_panel_get_output_id (GnomeRROutputInfo *output);
G_END_DECLS G_END_DECLS

View file

@ -38,13 +38,13 @@
#endif #endif
#include "cc-rr-labeler.h" #include "cc-rr-labeler.h"
#include "cc-display-panel.h"
struct _CcRRLabelerPrivate { struct _CcRRLabelerPrivate {
GnomeRRConfig *config; GnomeRRConfig *config;
int num_outputs; int num_outputs;
GdkRGBA *palette;
GtkWidget **windows; GtkWidget **windows;
GdkScreen *screen; GdkScreen *screen;
@ -179,8 +179,6 @@ cc_rr_labeler_finalize (GObject *object)
g_free (labeler->priv->windows); g_free (labeler->priv->windows);
} }
g_free (labeler->priv->palette);
G_OBJECT_CLASS (cc_rr_labeler_parent_class)->finalize (object); G_OBJECT_CLASS (cc_rr_labeler_parent_class)->finalize (object);
} }
@ -196,45 +194,6 @@ count_outputs (GnomeRRConfig *config)
return i; return i;
} }
static void
make_palette (CcRRLabeler *labeler)
{
/* The idea is that we go around an hue color wheel. We want to start
* at red, go around to green/etc. and stop at blue --- because magenta
* is evil. Eeeeek, no magenta, please!
*
* Purple would be nice, though. Remember that we are watered down
* (i.e. low saturation), so that would be like Like berries with cream.
* Mmmmm, berries.
*/
double start_hue;
double end_hue;
int i;
g_assert (labeler->priv->num_outputs > 0);
labeler->priv->palette = g_new (GdkRGBA, labeler->priv->num_outputs);
start_hue = 0.0; /* red */
end_hue = 2.0/3; /* blue */
for (i = 0; i < labeler->priv->num_outputs; i++) {
double h, s, v;
double r, g, b;
h = start_hue + (end_hue - start_hue) / labeler->priv->num_outputs * i;
s = 1.0 / 3;
v = 1.0;
gtk_hsv_to_rgb (h, s, v, &r, &g, &b);
labeler->priv->palette[i].red = r;
labeler->priv->palette[i].green = g;
labeler->priv->palette[i].blue = b;
labeler->priv->palette[i].alpha = 1.0;
}
}
static void static void
rounded_rectangle (cairo_t *cr, rounded_rectangle (cairo_t *cr,
gint x, gint x,
@ -274,7 +233,9 @@ rounded_rectangle (cairo_t *cr,
cairo_close_path (cr); cairo_close_path (cr);
} }
#define LABEL_WINDOW_EDGE_THICKNESS 2 #define LABEL_WINDOW_SIZE 80
#define LABEL_WINDOW_MARGIN 14
#define LABEL_WINDOW_EDGE_THICKNESS 1
#define LABEL_WINDOW_PADDING 12 #define LABEL_WINDOW_PADDING 12
/* Look for panel-corner in: /* Look for panel-corner in:
* http://git.gnome.org/browse/gnome-shell/tree/data/theme/gnome-shell.css * http://git.gnome.org/browse/gnome-shell/tree/data/theme/gnome-shell.css
@ -285,10 +246,9 @@ static void
label_draw_background_and_frame (GtkWidget *widget, cairo_t *cr, gboolean for_shape) label_draw_background_and_frame (GtkWidget *widget, cairo_t *cr, gboolean for_shape)
{ {
GdkRGBA shape_color = { 0, 0, 0, 1 }; GdkRGBA shape_color = { 0, 0, 0, 1 };
GdkRGBA *rgba; GdkRGBA black = { 0, 0, 0, 0.75 };
GtkAllocation allocation; GtkAllocation allocation;
rgba = g_object_get_data (G_OBJECT (widget), "rgba");
gtk_widget_get_allocation (widget, &allocation); gtk_widget_get_allocation (widget, &allocation);
cairo_save (cr); cairo_save (cr);
@ -298,7 +258,7 @@ label_draw_background_and_frame (GtkWidget *widget, cairo_t *cr, gboolean for_sh
if (for_shape) if (for_shape)
gdk_cairo_set_source_rgba (cr, &shape_color); gdk_cairo_set_source_rgba (cr, &shape_color);
else else
cairo_set_source_rgba (cr, 0, 0, 0, 0.5); cairo_set_source_rgba (cr, 0.75, 0.75, 0.75, 0.75);
rounded_rectangle (cr, rounded_rectangle (cr,
LABEL_WINDOW_EDGE_THICKNESS / 2.0, LABEL_WINDOW_EDGE_THICKNESS / 2.0,
@ -313,8 +273,7 @@ label_draw_background_and_frame (GtkWidget *widget, cairo_t *cr, gboolean for_sh
if (for_shape) { if (for_shape) {
gdk_cairo_set_source_rgba (cr, &shape_color); gdk_cairo_set_source_rgba (cr, &shape_color);
} else { } else {
rgba->alpha = 0.75; gdk_cairo_set_source_rgba (cr, &black);
gdk_cairo_set_source_rgba (cr, rgba);
} }
rounded_rectangle (cr, rounded_rectangle (cr,
@ -362,7 +321,8 @@ position_window (CcRRLabeler *labeler,
&monitor); &monitor);
gdk_rectangle_intersect (&monitor, &workarea, &workarea); gdk_rectangle_intersect (&monitor, &workarea, &workarea);
gtk_window_move (GTK_WINDOW (window), workarea.x, workarea.y); gtk_window_move (GTK_WINDOW (window), workarea.x + LABEL_WINDOW_MARGIN,
workarea.y + LABEL_WINDOW_MARGIN);
} }
static void static void
@ -386,17 +346,21 @@ label_window_composited_changed_cb (GtkWidget *widget, CcRRLabeler *labeler)
} }
static GtkWidget * static GtkWidget *
create_label_window (CcRRLabeler *labeler, GnomeRROutputInfo *output, GdkRGBA *rgba) create_label_window (CcRRLabeler *labeler, GnomeRROutputInfo *output)
{ {
GtkWidget *window; GtkWidget *window;
GtkWidget *widget; GtkWidget *widget;
char *str; char *str;
const char *display_name; GdkRGBA white = { 1, 1, 1, 1 };
GdkRGBA black = { 0, 0, 0, 1.0 }; int x, y, display_num;
int x, y;
GdkScreen *screen; GdkScreen *screen;
GdkVisual *visual; GdkVisual *visual;
display_num = cc_display_panel_get_output_id (output);
if (display_num == 0)
return NULL;
window = gtk_window_new (GTK_WINDOW_POPUP); window = gtk_window_new (GTK_WINDOW_POPUP);
gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_TOOLTIP); gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_TOOLTIP);
gtk_window_set_resizable (GTK_WINDOW (window), FALSE); gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
@ -407,13 +371,8 @@ create_label_window (CcRRLabeler *labeler, GnomeRROutputInfo *output, GdkRGBA *r
if (visual != NULL) if (visual != NULL)
gtk_widget_set_visual (window, visual); gtk_widget_set_visual (window, visual);
gtk_container_set_border_width (GTK_CONTAINER (window), LABEL_WINDOW_PADDING + LABEL_WINDOW_EDGE_THICKNESS); gtk_widget_set_size_request (window, LABEL_WINDOW_SIZE,
LABEL_WINDOW_SIZE);
/* This is semi-dangerous. The color is part of the labeler->palette
* array. Note that in cc_rr_labeler_finalize(), we are careful to
* free the palette only after we free the windows.
*/
g_object_set_data (G_OBJECT (window), "rgba", rgba);
g_signal_connect (window, "draw", g_signal_connect (window, "draw",
G_CALLBACK (label_window_draw_event_cb), labeler); G_CALLBACK (label_window_draw_event_cb), labeler);
@ -422,30 +381,18 @@ create_label_window (CcRRLabeler *labeler, GnomeRROutputInfo *output, GdkRGBA *r
g_signal_connect (window, "composited-changed", g_signal_connect (window, "composited-changed",
G_CALLBACK (label_window_composited_changed_cb), labeler); G_CALLBACK (label_window_composited_changed_cb), labeler);
if (gnome_rr_config_get_clone (labeler->priv->config)) { str = g_strdup_printf ("<span size='xx-large' font-weight='bold'>%d</span>", display_num);
/* Keep this string in sync with gnome-control-center/capplets/display/xrandr-capplet.c:get_display_name() */
/* Translators: this is the feature where what you see on your
* laptop's screen is the same as your external projector.
* Here, "Mirrored" is being used as an adjective. For example,
* the Spanish translation could be "Pantallas en Espejo".
*/
display_name = _("Mirrored Displays");
} else
display_name = gnome_rr_output_info_get_display_name (output);
str = g_strdup_printf ("<b>%s</b>", display_name);
widget = gtk_label_new (NULL); widget = gtk_label_new (NULL);
gtk_label_set_markup (GTK_LABEL (widget), str); gtk_label_set_markup (GTK_LABEL (widget), str);
g_free (str); g_free (str);
/* Make the label explicitly black. We don't want it to follow the /* Make the label explicitly white. We don't want it to follow the
* theme's colors, since the label is always shown against a light * theme's colors, since the label is always shown against a black
* pastel background. See bgo#556050 * background. See bgo#556050
*/ */
gtk_widget_override_color (widget, gtk_widget_override_color (widget,
gtk_widget_get_state_flags (widget), gtk_widget_get_state_flags (widget),
&black); &white);
gtk_container_add (GTK_CONTAINER (window), widget); gtk_container_add (GTK_CONTAINER (window), widget);
@ -463,8 +410,6 @@ setup_from_config (CcRRLabeler *labeler)
{ {
labeler->priv->num_outputs = count_outputs (labeler->priv->config); labeler->priv->num_outputs = count_outputs (labeler->priv->config);
make_palette (labeler);
cc_rr_labeler_show (labeler); cc_rr_labeler_show (labeler);
} }
@ -497,7 +442,6 @@ void
cc_rr_labeler_show (CcRRLabeler *labeler) cc_rr_labeler_show (CcRRLabeler *labeler)
{ {
int i; int i;
gboolean created_window_for_clone;
GnomeRROutputInfo **outputs; GnomeRROutputInfo **outputs;
g_return_if_fail (GNOME_IS_RR_LABELER (labeler)); g_return_if_fail (GNOME_IS_RR_LABELER (labeler));
@ -505,18 +449,16 @@ cc_rr_labeler_show (CcRRLabeler *labeler)
if (labeler->priv->windows != NULL) if (labeler->priv->windows != NULL)
return; return;
labeler->priv->windows = g_new (GtkWidget *, labeler->priv->num_outputs); if (gnome_rr_config_get_clone (labeler->priv->config))
return;
created_window_for_clone = FALSE;
outputs = gnome_rr_config_get_outputs (labeler->priv->config); outputs = gnome_rr_config_get_outputs (labeler->priv->config);
for (i = 0; i < labeler->priv->num_outputs; i++) { labeler->priv->windows = g_new (GtkWidget *, labeler->priv->num_outputs);
if (!created_window_for_clone && gnome_rr_output_info_is_active (outputs[i])) {
labeler->priv->windows[i] = create_label_window (labeler, outputs[i], labeler->priv->palette + i);
if (gnome_rr_config_get_clone (labeler->priv->config)) for (i = 0; i < labeler->priv->num_outputs; i++) {
created_window_for_clone = TRUE; if (gnome_rr_output_info_is_active (outputs[i])) {
labeler->priv->windows[i] = create_label_window (labeler, outputs[i]);
} else } else
labeler->priv->windows[i] = NULL; labeler->priv->windows[i] = NULL;
} }
@ -549,37 +491,3 @@ cc_rr_labeler_hide (CcRRLabeler *labeler)
g_free (priv->windows); g_free (priv->windows);
priv->windows = NULL; priv->windows = NULL;
} }
/**
* cc_rr_labeler_get_rgba_for_output:
* @labeler: A #CcRRLabeler
* @output: Output device (i.e. monitor) to query
* @rgba_out: (out): Color of selected monitor.
*
* Get the color used for the label on a given output (monitor).
*/
void
cc_rr_labeler_get_rgba_for_output (CcRRLabeler *labeler, GnomeRROutputInfo *output, GdkRGBA *rgba_out)
{
int i;
GnomeRROutputInfo **outputs;
g_return_if_fail (GNOME_IS_RR_LABELER (labeler));
g_return_if_fail (GNOME_IS_RR_OUTPUT_INFO (output));
g_return_if_fail (rgba_out != NULL);
outputs = gnome_rr_config_get_outputs (labeler->priv->config);
for (i = 0; i < labeler->priv->num_outputs; i++)
if (outputs[i] == output) {
*rgba_out = labeler->priv->palette[i];
return;
}
g_warning ("trying to get the color for unknown GnomeOutputInfo %p; returning magenta!", output);
rgba_out->red = 1.0;
rgba_out->green = 0;
rgba_out->blue = 1.0;
rgba_out->alpha = 1.0;
}

View file

@ -59,6 +59,4 @@ void cc_rr_labeler_show (CcRRLabeler *labeler);
void cc_rr_labeler_hide (CcRRLabeler *labeler); void cc_rr_labeler_hide (CcRRLabeler *labeler);
void cc_rr_labeler_get_rgba_for_output (CcRRLabeler *labeler, GnomeRROutputInfo *output, GdkRGBA *rgba_out);
#endif #endif

View file

@ -1,312 +1,518 @@
<?xml version="1.0"?> <?xml version="1.0" encoding="UTF-8"?>
<interface> <interface>
<requires lib="gtk+" version="2.16"/> <!-- interface-requires gtk+ 3.10 -->
<!-- interface-naming-policy toplevel-contextual -->
<object class="GtkWindow" id="window1"> <object class="GtkWindow" id="window1">
<property name="can_focus">False</property>
<child> <child>
<object class="GtkVBox" id="display-panel"> <object class="GtkFrame" id="frame1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="border_width">10</property> <property name="can_focus">False</property>
<property name="orientation">vertical</property> <property name="margin_left">134</property>
<property name="spacing">12</property> <property name="margin_right">134</property>
<property name="margin-left">6</property> <property name="margin_top">22</property>
<property name="margin-right">6</property> <property name="margin_bottom">22</property>
<property name="margin-top">6</property> <property name="label_xalign">0</property>
<property name="margin-bottom">6</property> <property name="shadow_type">in</property>
<child> <child>
<object class="GtkAlignment" id="align"> <object class="GtkListBox" id="listbox1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<child> <child>
<placeholder/> <object class="GtkListBoxRow" id="listboxrow1">
<property name="can_focus">False</property>
<property name="margin_bottom">67</property>
</object>
</child> </child>
</object> </object>
<packing>
<property name="position">0</property>
</packing>
</child> </child>
</object>
</child>
</object>
<object class="GtkWindow" id="window2">
<property name="can_focus">False</property>
<child> <child>
<object class="GtkHBox" id="hbox1"> <object class="GtkBox" id="box1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="spacing">12</property> <property name="can_focus">False</property>
<child> <child>
<object class="GtkVBox" id="vbox1"> <object class="GtkFrame" id="frame2">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">39</property>
<property name="margin_right">39</property>
<property name="margin_top">22</property>
<property name="margin_bottom">22</property>
<property name="label_xalign">0</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkListBox" id="listbox2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkListBoxRow" id="listboxrow3">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkBox" id="box2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">12</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">12</property>
<child> <child>
<object class="GtkHBox" id="hbox3"> <object class="GtkLabel" id="label3">
<property name="visible">True</property> <property name="visible">True</property>
<property name="spacing">12</property> <property name="can_focus">False</property>
<child> <property name="halign">start</property>
<object class="GtkEventBox" id="current_monitor_event_box"> <property name="label" translatable="yes">Primary</property>
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="current_monitor_label">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="xpad">10</property>
<property name="ypad">5</property>
<property name="label" translatable="yes">Monitor</property>
<attributes> <attributes>
<attribute name="weight" value="bold"/> <attribute name="weight" value="bold"/>
</attributes> </attributes>
</object> </object>
</child>
</object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">False</property> <property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkHBox" id="hbox2"> <object class="GtkLabel" id="label4">
<property name="visible">True</property> <property name="width_request">260</property>
<property name="spacing">12</property>
<child>
<object class="GtkSwitch" id="monitor_switch">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="active">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="pack_type">end</property>
<property name="position">1</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="GtkAlignment" id="alignment1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="xalign">0</property> <property name="xalign">0</property>
<property name="yalign">0</property> <property name="label" translatable="yes">Show the top bar and Activities Overview on this display</property>
<property name="left_padding">12</property> <property name="wrap">True</property>
<child>
<object class="GtkTable" id="table1">
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="n_columns">2</property>
<property name="column_spacing">12</property>
<property name="row_spacing">6</property>
<child>
<object class="GtkAlignment" id="alignment4">
<property name="visible">True</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options"></property>
<property name="y_options"></property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">_Resolution</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">resolution_combo</property>
<style> <style>
<class name="dim-label"/> <class name="dim-label"/>
</style> </style>
</object> </object>
<packing> <packing>
<property name="x_options">GTK_FILL</property> <property name="expand">False</property>
<property name="y_options"></property> <property name="fill">True</property>
<property name="position">1</property>
</packing> </packing>
</child> </child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="listboxrow2">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkBox" id="box3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">12</property>
<property name="orientation">vertical</property>
<child> <child>
<object class="GtkLabel" id="label5"> <object class="GtkLabel" id="label5">
<property name="visible">True</property> <property name="visible">True</property>
<property name="xalign">1</property> <property name="can_focus">False</property>
<property name="label" translatable="yes">R_otation</property> <property name="halign">start</property>
<property name="mnemonic_widget">rotation_combo</property> <property name="label" translatable="yes">Presentation</property>
<property name="use_underline">True</property> <attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label6">
<property name="width_request">260</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Show slideshows and media only</property>
<property name="wrap">True</property>
<style> <style>
<class name="dim-label"/> <class name="dim-label"/>
</style> </style>
</object> </object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="resolution_combo">
<property name="visible">True</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="rotation_combo">
<property name="visible">True</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext1"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
</object> </object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkAlignment" id="alignment2">
<property name="visible">True</property>
<child>
<placeholder/>
</child> </child>
</object> </object>
<packing>
<property name="position">1</property>
</packing>
</child> </child>
<child> <child>
<object class="GtkVBox" id="vbox2"> <object class="GtkListBoxRow" id="listboxrow4">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkBox" id="box4">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">12</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkCheckButton" id="clone_checkbox"> <object class="GtkLabel" id="label7">
<property name="label" translatable="yes" comments="Note that mirror is a verb in this string">_Mirror displays</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">False</property>
<property name="receives_default">False</property> <property name="halign">start</property>
<property name="use_underline">True</property> <property name="label" translatable="yes">Mirror</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="clone_resolution_warning_label">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Note: may limit resolution options</property>
<attributes> <attributes>
<attribute name="style" value="italic"/> <attribute name="weight" value="bold"/>
</attributes> </attributes>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">False</property> <property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkAlignment" id="alignment3">
<property name="visible">True</property>
<property name="top_padding">10</property>
<child>
<object class="GtkHButtonBox" id="hbuttonbox1">
<property name="visible">True</property>
<property name="spacing">6</property>
<property name="layout_style">end</property>
<child>
<object class="GtkButton" id="apply_button">
<property name="label">gtk-apply</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="detect_displays_button">
<property name="label" translatable="yes">_Detect Displays</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_underline">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="pack_type">end</property>
<property name="position">0</property> <property name="position">0</property>
<property name="secondary">True</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkLabel" id="label8">
<property name="width_request">260</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Show your primary display on this screen also</property>
<property name="wrap">True</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="listboxrow5">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkBox" id="box5">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">12</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label9">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Combine</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label10">
<property name="width_request">260</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Join with the primary display to create an extra space</property>
<property name="wrap">True</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow" id="listboxrow6">
<property name="width_request">100</property>
<property name="height_request">80</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<child>
<object class="GtkBox" id="box6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="border_width">12</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label11">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">Turn Off</property>
<attributes>
<attribute name="weight" value="bold"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label12">
<property name="width_request">260</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Don't use the display</property>
<property name="wrap">True</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object> </object>
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">False</property> <property name="fill">True</property>
<property name="position">2</property> <property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkGrid" id="grid1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">67</property>
<property name="margin_right">67</property>
<property name="margin_top">22</property>
<property name="margin_bottom">22</property>
<property name="row_spacing">12</property>
<property name="column_spacing">12</property>
<child>
<object class="GtkDrawingArea" id="drawingarea1">
<property name="height_request">100</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">2</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<style>
<class name="linked"/>
</style>
<child>
<object class="GtkButton" id="button2">
<property name="name">rotate-left-button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">end</property>
<child>
<object class="GtkImage" id="image1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">object-rotate-left-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button3">
<property name="name">rotate-right-button</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="halign">start</property>
<child>
<object class="GtkImage" id="image2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">object-rotate-right-symbolic</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
<property name="width">2</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label13">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Model</property>
<style>
<class name="dim-label"/>
</style>
</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="GtkLabel" id="label14">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Aspect Ratio</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label15">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Resolution</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">4</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label16">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="label" translatable="yes">Refresh Rate</property>
<style>
<class name="dim-label"/>
</style>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">5</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="model-label">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<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>
<object class="GtkLabel" id="aspect-ratio-label">
<property name="visible">True</property>
<property name="can_focus">False</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="GtkComboBox" id="resolution-combobox">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">4</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="refresh-rate-comboboxtext">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">5</property>
<property name="width">1</property>
<property name="height">1</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing> </packing>
</child> </child>
</object> </object>