Commit graph

393 commits

Author SHA1 Message Date
Benjamin Berg
21bb6416be display: Reset resolution when switching configuration types
It generally makes more sense to reset the resolution of a monitor after
we switch configuration types. The main case where this is relevant is
switching from a mirror configuration (CLONE) to either join or single.
In this case, higher resolutions for monitors may become available.

Note that this might be annoying to some users, because there may be
monitors reporting a lower "preferred" resolution than the highest
supported resolution. There is little we can do though, as always
selecting the highest resolution doesn't seem like a much better
approach.
2019-03-20 17:26:56 +01:00
Benjamin Berg
ae22f72cac display: Prevent error when serializing invalid configuration
If no monitors are enabled, then the variant would end up with an
invalid variant type, causing a crash later on. This case only happened
due to other bugs (i.e. in principle we should never send a
configuration without any monitors to the server).

Prevent the serialization error by specifying the correct type for the
builder, therefore potentially preventing a crash in such a corner case.
2019-03-20 17:26:56 +01:00
Benjamin Berg
0c4e84e417 display: Ensure we have a primary monitor after all were disabled
When enabling the first monitor, we need to select it as primary as we
otherwise end up without a primary monitor (rendering the configuration
invalid). "Unsetting" the NULL primary monitor effectively causes the
first and only available monitor to become the primary, while not doing
anything if we have a primary monitor.
2019-03-20 17:26:08 +01:00
Benjamin Berg
20d24992ee display: Enable all monitors when switching to join config
The new code had a bug in that it only ever enabled the first monitor
rather than all usable ones. Fix this by removing the erroronuous break.
Also clarify the comment a bit that the current solution is not really
ideal as it may result in invalid configurations (i.e. we enable more
outputs than are possible with the number of available CRTCs).

Fixes #418
2019-03-18 17:08:35 +00:00
Marco Trevisan (Treviño)
49957ef818 display: Don't always set the primary monitor to the first in list
As per the binding that we have between the list store and the combo-box, when
the first element is added to the list-store, the combo box set this value as
the selected-index, and this leads to a call to cc_display_monitor_set_primary
which set the first-listed monitor as primary and unset the real primary monitor.

To avoid this, just ignore the binding when rebuilding the UI, since in this
phase control-center should just reflect the actual state without changing
anything.

Fixes https://gitlab.gnome.org/GNOME/gnome-control-center/issues/419
2019-03-18 11:53:18 +00:00
Benjamin Berg
37c768ab0f display: Fix Apply button showing for changes to disabled monitor
Disabled monitors may or may not have a mode selected. This means, we
need to skip the mode comparison if the two compared monitors are
disabled (i.e. have no logical monitor).
Move the mode check to the end and skip it if both monitors are disabled.

This fixes cases where identical configurations are misdetected, because
we applied a mode to a monitor and disabled the monitor again. This
happens for example when switching the active monitor in "single" mode.
2019-03-11 18:32:21 +00:00
Benjamin Berg
1f29dad46f display: Keep current monitor enabled when forcing an update
In the case where the user plugged/unplugged a screen, we could run into
the case where we would first enable and then disable the same output.
This could potentially result in an invalid configuration.

Prevent this by not disabling the output if no switch happened.
2019-03-11 18:32:21 +00:00
Benjamin Berg
75bf1b8cd1 display: Update apply button when switching output in "single" mode
While the configuration was updated, the apply button was not synced.
This meant users could not switch the active monitor properly.

Fixes #405
2019-03-11 18:32:21 +00:00
Benjamin Berg
5aa17c6984 display: Correctly select "single" mode when opening display panel
The dialog tried to retain the current configuration mode. However,
doing so means that we end up in the wrong mode in some situation (e.g.
opening the dialog with two displays but only one enabled).

Fix this by always selecting a configuration mode. This potentially
switches the user from "join" to "single" if only one monitor is left.
However, the user has no way to do this manually, so no unexpected UI
change will happen.
2019-03-11 18:32:21 +00:00
Benjamin Berg
42006249af Remove internal copy of HdyValueObject
The relevant code is included in libhandy 0.8 and can be removed now
that we depend on a new enough version.
2019-03-04 16:59:25 +00:00
Benjamin Berg
e786b5a767 display: Mark "Scale" label as translatable
These strings were not marked as translatable when the panel was ported
to use templates.

Follow up for 9fba7cc2
2019-02-27 10:39:51 +00:00
Benjamin Berg
c4d60b9d1d display: Add context to display setting strings
Note that no context is added for "Refresh Rate" and "Adjust for TV" at
least for now.

Fixes #393
2019-02-26 19:40:07 +01:00
Bastien Nocera
9fba7cc2ad display: Mark strings as translatable
Those were translatable before the "templating" of this section of the
panel.

Fixes: 8503dab5
2019-02-26 18:54:14 +01:00
Benjamin Berg
638f2065a5 display: Do not expand display enabled switch
Fixes #367
2019-02-22 13:44:39 +00:00
Benjamin Berg
1accfac4ef display: Move arrangement instructions outside of view area
Having the instructions inside can be slightly confusing because
monitors cannot be moved around in the labels area. Simply moving the
instructions to be at the top again improves this.

With this change the dialogs UI matches the old layout more closely.
2019-02-11 18:59:32 +01:00
Benjamin Berg
b69fbc88c2 display: Resurrect the old scale buttons
This means we show the first 5 scales that are supported for the
display. That is the same behaviour as 3.30 had, therefore minimizing
the UI changes that users will see.

Note that there are plans to improve the scaling UI, however, it is not
yet clear how this will look like.
2019-02-11 18:54:54 +01:00
Adrien Plazas
ba6106dfca display: Use a HdyColumn
This allows the panel to better adapt to the available width.
2019-01-29 17:23:20 +01:00
Benjamin Berg
d9a7c84905 display: Rewrite as a template widget 2019-01-29 12:05:43 +01:00
Benjamin Berg
e5925f5eb6 display: Hookup new CcDisplaySettings 2019-01-29 12:05:43 +01:00
Benjamin Berg
8503dab530 display: Add settings widget for output configuration
This widget now uses libhandy for the rows.
2019-01-29 12:05:43 +01:00
Benjamin Berg
afe8661704 display: Allow config to be modified in arrangement widget 2019-01-29 12:05:43 +01:00
Benjamin Berg
9025f79b5f display: Add helper that returns the monitor name as new string 2019-01-29 12:05:43 +01:00
Benjamin Berg
4360288c74 display: Move setter for cloning mode into CcDisplayConfig
It will be used from multiple files in the future.
2019-01-29 12:05:43 +01:00
Benjamin Berg
be3fbd8bef display: Redraw arrangement widget after monitor selection change 2019-01-29 12:05:43 +01:00
Benjamin Berg
5b53f026c8 display: Chain up CcDisplayConfig finalize handler 2019-01-29 12:05:43 +01:00
Benjamin Berg
e520ab8952 display: Chain up CcDisplayArrangement finalize handler 2019-01-29 12:05:43 +01:00
Benjamin Berg
713e209783 display: Add missing finalize handler for CcDisplayMonitor
This caused the UI related strings to be leaked.
2019-01-29 12:05:43 +01:00
Benjamin Berg
41717253c8 display: Fix leak in night light dialog 2019-01-29 12:05:43 +01:00
Benjamin Berg
d9aab36609 display: Compare configurations without monitor offset
When comparing configurations, the monitor positions are compared
directly. This comparison will not work properly if one of the
configurations has an offset.

This results in the "Apply" button to show up incorrectly after moving
the top/left monitor position.
2019-01-29 12:05:43 +01:00
Benjamin Berg
4db431d7f1 display: Correctly round scaled monitor size
We were converting the floating point numbers to integers using a cast,
which causes them to be always rounded down. The result is that a
monitor may be too small by a pixel, creating broken configurations.

Also fix the same issue when calculating whether a scale should be
supported.

See https://gitlab.gnome.org/GNOME/mutter/issues/412
2019-01-18 11:19:16 +01:00
Jeremy Bicha
d9e07460ae night-light: Add a frame around Schedule section for accessibility
This way the Schedule label is correctly read as a header
for the section by screen readers
2019-01-07 10:57:17 -05:00
Jeremy Bicha
7f6d19441f night-light: Add mnemonic_widget and ATK descriptions for a11y 2019-01-07 10:41:32 -05:00
Jeremy Bicha
0858fd5d36 night-light: Turn on Night Light for 5 seconds when adjusting Color Temp
Closes: https://gitlab.gnome.org/GNOME/gnome-control-center/issues/147
2019-01-07 14:13:38 +00:00
Jeremy Bicha
bc68377e77 night-light: minor adjustments to dialog layout
- Move Schedule label to its own row
- Center align "From" and "To" labels

https://gitlab.gnome.org/Teams/Design/settings-mockups/blob/master/displays/night-light.png
2019-01-07 14:13:38 +00:00
Jeremy Bicha
d1fc7e64b3 night-light: Add Color Temperature slider
This adds a scale to change the color temperature from 3000K to
6000K. A mark is added to the default value and a second one for
aesthetics.

Initial implementation by Benjamin Berg
Color choices by Daniel Foré and elementary OS

Closes #147
2019-01-07 14:13:37 +00:00
Jeremy Bicha
a5f902c124 night-light: Update UI when gsettings schemas are nonwritable
Presumably, they are nonwritable because a system administrator has locked
these settings down.

https://help.gnome.org/admin/system-admin-guide/stable/dconf-lockdown.html

If Night Light is locked on, don't show the Off button.

If Night Light is locked off, don't show the Manual or "Sunset to Sunrise" buttons.

If Manual is force-enabled, don't show "Sunset to Sunrise" or the other way around.
2019-01-07 14:13:37 +00:00
Jeremy Bicha
07c1de1893 night-light: Move Off to the schedule switcher row
As recommended by the mockup:
https://gitlab.gnome.org/Teams/Design/settings-mockups/blob/master/displays/night-light.png
2019-01-07 14:13:37 +00:00
Jeremy Bicha
e5d8b6275a night-light: Drop the sunrise/sunset indicator
It's not in the latest design mockup:

https://gitlab.gnome.org/Teams/Design/settings-mockups/raw/master/displays/night-light.png
2019-01-07 14:13:37 +00:00
Alex Hirsch
b4809cd210 display: Mode compare takes interlaced into account
When changing the display mode, the apply button does not appear if the
current mode and new mode differ only in their interlaced flag.

The display mode comparison function now takes the interlaced flag into
account.
2018-11-10 20:38:02 +01:00
Benjamin Berg
c9fc833ddc display: typedef data structures related to snapping
Simply a small cleanup to typedef the relevant data structures.
2018-10-24 10:36:13 +02:00
Benjamin Berg
32a6f9befa display: Run snapping after certain modifications
Anything that affects the size of the screen (or its existance) may
result in invalid configurations. Do a small effort in trying to fix
this by calling into the snapping algorithm for the modified monitor.

Addresses issue #247 to a large extend.
2018-10-24 10:36:13 +02:00
Benjamin Berg
adf7cb26ea display: Add function to run the snapping algorithm on a monitor
This is a function working only on a configuration which runs the
snapping with infinite snapping. This allows forcing a monitor that has
been modified to be adjacent to at least one monitor.
2018-10-24 10:36:13 +02:00
Benjamin Berg
1ad0eaba7c display: Do not require widget for snapping
Just move everything needed into the SnapData struct.
2018-10-24 10:36:13 +02:00
Daniel Drake
79dc78b819 display: Hide unsupported resolutions again
Previously, low resolutions were hidden from the control center
because when such display modes are activated, GNOME is unusable;
many important UI elements do not fit on the screen at all.
https://bugzilla.gnome.org/show_bug.cgi?id=626822

This was removed in c0f686bb0f
without explanation; reinstate it here.

Also prevent the scaling from being selected or activated if the
effective scaled resolution would result in an equivalently low
resolution being used.
2018-10-17 22:08:03 +00:00
Benjamin Berg
f95ded101c display: Sync scale button state after update
We need to re-sync the scale button scale when updating the state
dynamically. Otherwise changing the resolution will always show a scale
of 100% (first item) rather than the actual active one.
2018-10-17 22:08:03 +00:00
Benjamin Berg
d534f67047 display: Do not show scale and refresh rate rows
The visibility is explicitly controlled in the functions that create the
rows in question. This regression was introduced in commit 3d177b67
(display: Don't use gtk_widget_show_all).
2018-10-17 22:08:03 +00:00
Robert Ancell
04b0b68be4 display: Fix compile warnings using g_clear_pointer 2018-10-17 09:19:37 +13:00
Robert Ancell
044eeb0d06 display: Stop night light dialog being destroyed twice
The night light dialog is both marked as "destroy_with_parent" and explicitly
destroyed in the panel. Drop one of these.

Causes the warning after opening the dialog then closing the app:
(gnome-control-center:19887): Gtk-CRITICAL **: 11:00:01.370: gtk_widget_destroy: assertion 'GTK_IS_WIDGET (widget)' failed

This bug was introduced in ed36688c58
2018-10-14 22:51:22 +00:00
Robert Ancell
3d177b6769 display: Don't use gtk_widget_show_all
It is removed in GTK+ 4
2018-10-11 22:21:34 +00:00
Benjamin Berg
22a512f032 display: Correctly add minor axis to snapping
There was an issue where the "minor" axis snapping would not be done if
the "major" axis snapping had a zero distance. This could be seen when e.g.
moving a monitor on the right up/down slightly. In that case, no
snapping to align the bottom/top edges were done unless you also moved
the mouse sideways a bit.

Fixes #211
2018-10-04 04:58:22 +00:00