From b8fc817ebe09df28e8d3dffc248b27c4e38ef3de Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Apr 10 2018 05:56:18 +0000 Subject: import control-center-3.26.2-8.el7 --- diff --git a/.control-center.metadata b/.control-center.metadata index 9966877..c95e9f1 100644 --- a/.control-center.metadata +++ b/.control-center.metadata @@ -1 +1 @@ -65bef295fc8c9508fb2110847dd4d071763206a2 SOURCES/gnome-control-center-3.22.2.tar.xz +8a8c415f3d0bf43121bbc1c9396686baeee444e8 SOURCES/gnome-control-center-3.26.2.tar.xz diff --git a/.gitignore b/.gitignore index bc8753a..ec2a1e0 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/gnome-control-center-3.22.2.tar.xz +SOURCES/gnome-control-center-3.26.2.tar.xz diff --git a/SOURCES/0001-common-Use-GdkDevices-directly-as-HT-keys-on-GsdDevi.patch b/SOURCES/0001-common-Use-GdkDevices-directly-as-HT-keys-on-GsdDevi.patch new file mode 100644 index 0000000..9d42dc2 --- /dev/null +++ b/SOURCES/0001-common-Use-GdkDevices-directly-as-HT-keys-on-GsdDevi.patch @@ -0,0 +1,101 @@ +From 3bd808127daf9f8f83c711d49ffaa19ce8601164 Mon Sep 17 00:00:00 2001 +From: Carlos Garnacho +Date: Thu, 18 Jan 2018 12:09:43 +0100 +Subject: [PATCH] common: Use GdkDevices directly as HT keys on + GsdDeviceManagerX11 + +The dance we do to fetch event nodes from devices seems a bit superfluous +now, and even wrong if multiple X11 devices boil down to the same event +node. + +Fixes the wacom panel not showing the "Map buttons..." action on older +kernels and wacom.ko modules, because the pad device shares the event node +with the stylus. Pad device lookups in order to enable the action obtain +the stylus device, thus the action is not shown. + +https://bugzilla.gnome.org/show_bug.cgi?id=793029 +--- + panels/common/gsd-device-manager-x11.c | 33 +++++++-------------------------- + 1 file changed, 7 insertions(+), 26 deletions(-) + +diff --git a/panels/common/gsd-device-manager-x11.c b/panels/common/gsd-device-manager-x11.c +index a2704d1a5..a77d6faeb 100644 +--- a/panels/common/gsd-device-manager-x11.c ++++ b/panels/common/gsd-device-manager-x11.c +@@ -117,16 +117,13 @@ add_device (GsdX11DeviceManager *manager, + if (!device_file) + return; + +- /* Takes ownership of device_file */ +- g_hash_table_insert (manager->gdk_devices, gdk_device, device_file); +- +- device = g_hash_table_lookup (manager->devices, device_file); ++ device = g_hash_table_lookup (manager->devices, gdk_device); + + if (device) { + g_signal_emit_by_name (manager, "device-changed", device); + } else { + device = create_device (gdk_device, device_file); +- g_hash_table_insert (manager->devices, g_strdup (device_file), device); ++ g_hash_table_insert (manager->devices, gdk_device, device); + g_signal_emit_by_name (manager, "device-added", device); + } + } +@@ -135,24 +132,17 @@ static void + remove_device (GsdX11DeviceManager *manager, + GdkDevice *gdk_device) + { +- const gchar *device_file; + GsdDevice *device; + +- device_file = g_hash_table_lookup (manager->gdk_devices, gdk_device); +- +- if (!device_file) +- return; +- +- device = g_hash_table_lookup (manager->devices, device_file); ++ device = g_hash_table_lookup (manager->devices, gdk_device); + + if (device) { + g_object_ref (device); + g_signal_emit_by_name (manager, "device-removed", device); + g_object_unref (device); +- } + +- g_hash_table_remove (manager->devices, device_file); +- g_hash_table_remove (manager->gdk_devices, gdk_device); ++ g_hash_table_remove (manager->devices, gdk_device); ++ } + } + + static void +@@ -175,11 +165,8 @@ gsd_x11_device_manager_init (GsdX11DeviceManager *manager) + { + GdkDisplay *display; + +- manager->devices = g_hash_table_new_full (g_str_hash, g_str_equal, +- (GDestroyNotify) g_free, ++ manager->devices = g_hash_table_new_full (NULL, NULL, NULL, + (GDestroyNotify) g_object_unref); +- manager->gdk_devices = g_hash_table_new_full (NULL, NULL, NULL, +- (GDestroyNotify) g_free); + + display = gdk_display_get_default (); + manager->device_manager = gdk_display_get_device_manager (display); +@@ -229,12 +216,6 @@ gsd_x11_device_manager_lookup_gdk_device (GsdDeviceManager *manager, + GdkDevice *gdk_device) + { + GsdX11DeviceManager *manager_x11 = GSD_X11_DEVICE_MANAGER (manager); +- const gchar *device_node; +- +- device_node = g_hash_table_lookup (manager_x11->gdk_devices, gdk_device); +- +- if (!device_node) +- return NULL; + +- return g_hash_table_lookup (manager_x11->devices, device_node); ++ return g_hash_table_lookup (manager_x11->devices, gdk_device); + } +-- +2.16.1 + diff --git a/SOURCES/0001-hostname-helper-don-t-read-past-0.patch b/SOURCES/0001-hostname-helper-don-t-read-past-0.patch deleted file mode 100644 index 5c419ef..0000000 --- a/SOURCES/0001-hostname-helper-don-t-read-past-0.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 96976105f3dc50bdc75cd23b5d163373a6c4d02f Mon Sep 17 00:00:00 2001 -From: Mohammed Sadiq -Date: Fri, 5 May 2017 17:40:33 +0530 -Subject: [PATCH 1/3] hostname-helper: don't read past '\0' - -g_utf8_find_next_char() doesn't do checks whether the char -is '\0' or not. We have to take care of that ourself. - -This commit fixes heap-buffer-overflow found by test-hostname - -ERROR: AddressSanitizer: heap-buffer-overflow on address -READ of size 1 at 0x60200000cd76 thread T0 - #0 0x7f8b26920d08 in g_utf8_find_next_char glib/glib/gutf8.c:179 - #1 0x55c2b8eacaee in pretty_hostname_to_ssid gnome-control-center/shell/hostname-helper.c:199 - -https://bugzilla.gnome.org/show_bug.cgi?id=782216 ---- - shell/hostname-helper.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/shell/hostname-helper.c b/shell/hostname-helper.c -index 45baf5184..ab889b96b 100644 ---- a/shell/hostname-helper.c -+++ b/shell/hostname-helper.c -@@ -208,6 +208,9 @@ pretty_hostname_to_ssid (const char *pretty) - break; - } - -+ if (*p == '\0') -+ break; -+ - prev = p; - } - --- -2.12.2 - diff --git a/SOURCES/0001-info-Fix-build-when-Wayland-is-disabled.patch b/SOURCES/0001-info-Fix-build-when-Wayland-is-disabled.patch deleted file mode 100644 index 339d18c..0000000 --- a/SOURCES/0001-info-Fix-build-when-Wayland-is-disabled.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 135d17454c109f18110330478a3d28c1bf7e8077 Mon Sep 17 00:00:00 2001 -From: Ting-Wei Lan -Date: Thu, 10 Nov 2016 22:27:11 +0800 -Subject: [PATCH] info: Fix build when Wayland is disabled - -https://bugzilla.gnome.org/show_bug.cgi?id=774324 ---- - panels/info/cc-info-panel.c | 11 +++++++++-- - 1 file changed, 9 insertions(+), 2 deletions(-) - -diff --git a/panels/info/cc-info-panel.c b/panels/info/cc-info-panel.c -index 458476660..1d596a3c9 100644 ---- a/panels/info/cc-info-panel.c -+++ b/panels/info/cc-info-panel.c -@@ -351,8 +351,15 @@ get_graphics_data (void) - display = gdk_display_get_default (); - - #if defined(GDK_WINDOWING_X11) || defined(GDK_WINDOWING_WAYLAND) -- if (GDK_IS_X11_DISPLAY (display) || -- GDK_IS_WAYLAND_DISPLAY (display)) -+ gboolean x11_or_wayland = FALSE; -+#ifdef GDK_WINDOWING_X11 -+ x11_or_wayland = GDK_IS_X11_DISPLAY (display); -+#endif -+#ifdef GDK_WINDOWING_WAYLAND -+ x11_or_wayland = x11_or_wayland || GDK_IS_WAYLAND_DISPLAY (display); -+#endif -+ -+ if (x11_or_wayland) - { - char *discrete_renderer = NULL; - char *renderer; --- -2.12.0 - diff --git a/SOURCES/0001-network-Consider-empty-IPv6-gateway-to-be-valid.patch b/SOURCES/0001-network-Consider-empty-IPv6-gateway-to-be-valid.patch new file mode 100644 index 0000000..d27cd43 --- /dev/null +++ b/SOURCES/0001-network-Consider-empty-IPv6-gateway-to-be-valid.patch @@ -0,0 +1,46 @@ +From dd8b63bdebddb736f0e871088762a9d0486bced9 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Tue, 6 Feb 2018 10:30:57 +0100 +Subject: [PATCH] network: Consider empty IPv6 gateway to be valid + +The string we get back from the text entries are never NULL (as long as +the UI isn't broken that is), but can be empty strings. Consider an +empty IPv6 address to be invalid, but an empty gateway to be valid. + +See https://bugzilla.redhat.com/show_bug.cgi?id=1467308 +--- + panels/network/connection-editor/ce-page-ip6.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/panels/network/connection-editor/ce-page-ip6.c b/panels/network/connection-editor/ce-page-ip6.c +index c9daab1ec..995197504 100644 +--- a/panels/network/connection-editor/ce-page-ip6.c ++++ b/panels/network/connection-editor/ce-page-ip6.c +@@ -616,7 +616,7 @@ ui_to_setting (CEPageIP6 *page) + continue; + } + +- if (!text_address || !nm_utils_ipaddr_valid (AF_INET6, text_address)) { ++ if (!*text_address || !nm_utils_ipaddr_valid (AF_INET6, text_address)) { + widget_set_error (GTK_WIDGET (entry)); + ret = FALSE; + } else { +@@ -631,12 +631,13 @@ ui_to_setting (CEPageIP6 *page) + widget_unset_error (g_object_get_data (G_OBJECT (row), "prefix")); + } + +- if (text_gateway && !nm_utils_ipaddr_valid (AF_INET6, text_gateway)) { ++ if (*text_gateway && !nm_utils_ipaddr_valid (AF_INET6, text_gateway)) { + widget_set_error (g_object_get_data (G_OBJECT (row), "gateway")); + ret = FALSE; + } else { + widget_unset_error (g_object_get_data (G_OBJECT (row), "gateway")); +- have_gateway = TRUE; ++ if (*text_gateway) ++ have_gateway = TRUE; + } + + if (!ret) +-- +2.14.3 + diff --git a/SOURCES/0001-network-Fix-cloned-MAC-not-being-saved-for-Ethernet.patch b/SOURCES/0001-network-Fix-cloned-MAC-not-being-saved-for-Ethernet.patch new file mode 100644 index 0000000..75c20c3 --- /dev/null +++ b/SOURCES/0001-network-Fix-cloned-MAC-not-being-saved-for-Ethernet.patch @@ -0,0 +1,46 @@ +From 8087cf31d97607feae71f6ed89ccfed386321c7f Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Wed, 31 Jan 2018 17:00:47 +0100 +Subject: [PATCH] network: Fix cloned MAC not being saved for Ethernet + +We read the MAC as being the cloned MAC, which NM would likely take to +mean that we didn't want a cloned MAC. + +See https://bugzilla.redhat.com/show_bug.cgi?id=1467295 + +https://bugzilla.gnome.org/show_bug.cgi?id=793072 +--- + panels/network/connection-editor/ce-page-ethernet.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/panels/network/connection-editor/ce-page-ethernet.c b/panels/network/connection-editor/ce-page-ethernet.c +index 2163cdbb6..dbca6b934 100644 +--- a/panels/network/connection-editor/ce-page-ethernet.c ++++ b/panels/network/connection-editor/ce-page-ethernet.c +@@ -86,7 +86,7 @@ static void + ui_to_setting (CEPageEthernet *page) + { + gchar *device_mac = NULL; +- gchar *cloned_mac; ++ gchar *cloned_mac = NULL; + const gchar *text; + GtkWidget *entry; + +@@ -95,8 +95,12 @@ ui_to_setting (CEPageEthernet *page) + text = gtk_entry_get_text (GTK_ENTRY (entry)); + device_mac = ce_page_trim_address (text); + } +- text = gtk_entry_get_text (GTK_ENTRY (entry)); +- cloned_mac = ce_page_trim_address (text); ++ ++ entry = gtk_bin_get_child (GTK_BIN (page->cloned_mac)); ++ if (entry) { ++ text = gtk_entry_get_text (GTK_ENTRY (entry)); ++ cloned_mac = ce_page_trim_address (text); ++ } + + g_object_set (page->setting_wired, + NM_SETTING_WIRED_MAC_ADDRESS, device_mac, +-- +2.14.3 + diff --git a/SOURCES/0001-network-Really-fix-clone-MAC-support.patch b/SOURCES/0001-network-Really-fix-clone-MAC-support.patch new file mode 100644 index 0000000..0180a25 --- /dev/null +++ b/SOURCES/0001-network-Really-fix-clone-MAC-support.patch @@ -0,0 +1,32 @@ +From a2a70c7376f6cf3d6161441d2a59e93f83ba21a5 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Tue, 6 Feb 2018 11:10:53 +0100 +Subject: [PATCH] network: Really fix clone MAC support + +This isn't a container, but a text entry. Bug introduced in commit +6b043fd. +--- + panels/network/connection-editor/ce-page-ethernet.c | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +diff --git a/panels/network/connection-editor/ce-page-ethernet.c b/panels/network/connection-editor/ce-page-ethernet.c +index dbca6b934..67c4478eb 100644 +--- a/panels/network/connection-editor/ce-page-ethernet.c ++++ b/panels/network/connection-editor/ce-page-ethernet.c +@@ -96,11 +96,8 @@ ui_to_setting (CEPageEthernet *page) + device_mac = ce_page_trim_address (text); + } + +- entry = gtk_bin_get_child (GTK_BIN (page->cloned_mac)); +- if (entry) { +- text = gtk_entry_get_text (GTK_ENTRY (entry)); +- cloned_mac = ce_page_trim_address (text); +- } ++ text = gtk_entry_get_text (GTK_ENTRY (entry)); ++ cloned_mac = ce_page_trim_address (text); + + g_object_set (page->setting_wired, + NM_SETTING_WIRED_MAC_ADDRESS, device_mac, +-- +2.14.3 + diff --git a/SOURCES/0001-network-Really-really-fix-cloned-MAC-support.patch b/SOURCES/0001-network-Really-really-fix-cloned-MAC-support.patch new file mode 100644 index 0000000..b5f650e --- /dev/null +++ b/SOURCES/0001-network-Really-really-fix-cloned-MAC-support.patch @@ -0,0 +1,30 @@ +From 6df5cc00ce707657f258dcdf3a5590355fdb1cc6 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Fri, 16 Feb 2018 13:23:20 +0100 +Subject: [PATCH] network: Really really fix cloned MAC support +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +And now that we're reading a text entry, read the correct one 🙄 +Follow-up to a2a70c7 +--- + panels/network/connection-editor/ce-page-ethernet.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/panels/network/connection-editor/ce-page-ethernet.c b/panels/network/connection-editor/ce-page-ethernet.c +index 67c4478eb..7b8f5b587 100644 +--- a/panels/network/connection-editor/ce-page-ethernet.c ++++ b/panels/network/connection-editor/ce-page-ethernet.c +@@ -96,7 +96,7 @@ ui_to_setting (CEPageEthernet *page) + device_mac = ce_page_trim_address (text); + } + +- text = gtk_entry_get_text (GTK_ENTRY (entry)); ++ text = gtk_entry_get_text (GTK_ENTRY (page->cloned_mac)); + cloned_mac = ce_page_trim_address (text); + + g_object_set (page->setting_wired, +-- +2.14.3 + diff --git a/SOURCES/0001-network-Request-periodic-Wi-Fi-scans.patch b/SOURCES/0001-network-Request-periodic-Wi-Fi-scans.patch new file mode 100644 index 0000000..9b7b62a --- /dev/null +++ b/SOURCES/0001-network-Request-periodic-Wi-Fi-scans.patch @@ -0,0 +1,153 @@ +From bbce097905a43a3d25d4ee9994837b27e653a111 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Tue, 20 Feb 2018 17:09:35 +0100 +Subject: [PATCH 1/2] network: Request periodic Wi-Fi scans + +As NetworkManager from version 1.10 doesn't handle background scanning +itself, to minimise battery drain, we need to periodically request it to +scan for Wi-Fi Access Points. + +We now do this request every 15 seconds, as NetworkManager-applet and +gnome-shell do, and disable that periodic scan if Wi-Fi is disabled. + +https://bugzilla.gnome.org/show_bug.cgi?id=793647 +--- + panels/network/net-device-wifi.c | 52 ++++++++++++++++++++++++++++++++++++++-- + 1 file changed, 50 insertions(+), 2 deletions(-) + +diff --git a/panels/network/net-device-wifi.c b/panels/network/net-device-wifi.c +index 290f7cd3f..8fc9f8aa1 100644 +--- a/panels/network/net-device-wifi.c ++++ b/panels/network/net-device-wifi.c +@@ -37,6 +37,8 @@ + #include "connection-editor/net-connection-editor.h" + #include "net-device-wifi.h" + ++#define PERIODIC_WIFI_SCAN_TIMEOUT 15 ++ + #define NET_DEVICE_WIFI_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NET_TYPE_DEVICE_WIFI, NetDeviceWifiPrivate)) + + typedef enum { +@@ -61,6 +63,8 @@ struct _NetDeviceWifiPrivate + gchar *selected_ssid_title; + gchar *selected_connection_id; + gchar *selected_ap_id; ++ guint scan_id; ++ GCancellable *cancellable; + }; + + G_DEFINE_TYPE (NetDeviceWifi, net_device_wifi, NET_TYPE_DEVICE) +@@ -263,6 +267,16 @@ net_device_wifi_access_point_changed (NMDeviceWifi *nm_device_wifi, + populate_ap_list (device_wifi); + } + ++static void ++disable_scan_timeout (NetDeviceWifi *device_wifi) ++{ ++ g_debug ("Disabling periodic Wi-Fi scan"); ++ if (device_wifi->priv->scan_id > 0) { ++ g_source_remove (device_wifi->priv->scan_id); ++ device_wifi->priv->scan_id = 0; ++ } ++} ++ + static void + wireless_enabled_toggled (NMClient *client, + GParamSpec *pspec, +@@ -282,6 +296,7 @@ wireless_enabled_toggled (NMClient *client, + + device_wifi->priv->updating_device = TRUE; + gtk_switch_set_active (sw, enabled); ++ disable_scan_timeout (device_wifi); + device_wifi->priv->updating_device = FALSE; + } + +@@ -515,6 +530,21 @@ out: + g_free (last_used); + } + ++static gboolean ++request_scan (gpointer user_data) ++{ ++ NetDeviceWifi *device_wifi = user_data; ++ NMDevice *nm_device; ++ ++ g_debug ("Periodic Wi-Fi scan requested"); ++ ++ nm_device = net_device_get_nm_device (NET_DEVICE (device_wifi)); ++ nm_device_wifi_request_scan_async (NM_DEVICE_WIFI (nm_device), ++ device_wifi->priv->cancellable, NULL, NULL); ++ ++ return G_SOURCE_CONTINUE; ++} ++ + static void + nm_device_wifi_refresh_ui (NetDeviceWifi *device_wifi) + { +@@ -534,22 +564,30 @@ nm_device_wifi_refresh_ui (NetDeviceWifi *device_wifi) + if (device_is_hotspot (device_wifi)) { + nm_device_wifi_refresh_hotspot (device_wifi); + show_hotspot_ui (device_wifi); ++ disable_scan_timeout (device_wifi); + return; + } + +- nm_device = net_device_get_nm_device (NET_DEVICE (device_wifi)); ++ client = net_object_get_client (NET_OBJECT (device_wifi)); ++ ++ if (device_wifi->priv->scan_id == 0 && ++ nm_client_wireless_get_enabled (client)) { ++ device_wifi->priv->scan_id = g_timeout_add_seconds (PERIODIC_WIFI_SCAN_TIMEOUT, ++ request_scan, device_wifi); ++ request_scan (device_wifi); ++ } + + dialog = device_wifi->priv->details_dialog; + + ap = g_object_get_data (G_OBJECT (dialog), "ap"); + connection = g_object_get_data (G_OBJECT (dialog), "connection"); + ++ nm_device = net_device_get_nm_device (NET_DEVICE (device_wifi)); + active_ap = nm_device_wifi_get_active_access_point (NM_DEVICE_WIFI (nm_device)); + + state = nm_device_get_state (nm_device); + + /* keep this in sync with the signal handler setup in cc_network_panel_init */ +- client = net_object_get_client (NET_OBJECT (device_wifi)); + wireless_enabled_toggled (client, NULL, device_wifi); + + if (ap != active_ap) +@@ -647,6 +685,8 @@ device_off_toggled (GtkSwitch *sw, + client = net_object_get_client (NET_OBJECT (device_wifi)); + active = gtk_switch_get_active (sw); + nm_client_wireless_set_enabled (client, active); ++ if (!active) ++ disable_scan_timeout (device_wifi); + } + + static void +@@ -1525,6 +1565,12 @@ net_device_wifi_finalize (GObject *object) + NetDeviceWifi *device_wifi = NET_DEVICE_WIFI (object); + NetDeviceWifiPrivate *priv = device_wifi->priv; + ++ if (priv->cancellable) { ++ g_cancellable_cancel (priv->cancellable); ++ g_clear_object (&priv->cancellable); ++ } ++ disable_scan_timeout (device_wifi); ++ + g_clear_pointer (&priv->details_dialog, gtk_widget_destroy); + g_object_unref (priv->builder); + g_free (priv->selected_ssid_title); +@@ -2185,6 +2231,8 @@ net_device_wifi_init (NetDeviceWifi *device_wifi) + return; + } + ++ device_wifi->priv->cancellable = g_cancellable_new (); ++ + widget = GTK_WIDGET (gtk_builder_get_object (device_wifi->priv->builder, + "details_dialog")); + device_wifi->priv->details_dialog = widget; +-- +2.14.3 + diff --git a/SOURCES/0001-network-Simplify-the-ignored-Network-interface-types.patch b/SOURCES/0001-network-Simplify-the-ignored-Network-interface-types.patch deleted file mode 100644 index aa8186c..0000000 --- a/SOURCES/0001-network-Simplify-the-ignored-Network-interface-types.patch +++ /dev/null @@ -1,58 +0,0 @@ -From d5eaacc6ef749346cc83d6f142e28e0ae15a2623 Mon Sep 17 00:00:00 2001 -From: Bastien Nocera -Date: Tue, 20 Jun 2017 15:40:51 +0200 -Subject: [PATCH] network: Simplify the ignored Network interface types - -We might want to add more ignored types later on, but this is a simple -cleanup. - -https://bugzilla.gnome.org/show_bug.cgi?id=783998 ---- - panels/network/cc-network-panel.c | 19 +++++++++++-------- - 1 file changed, 11 insertions(+), 8 deletions(-) - -diff --git a/panels/network/cc-network-panel.c b/panels/network/cc-network-panel.c -index 0a29c927f..5eca8429e 100644 ---- a/panels/network/cc-network-panel.c -+++ b/panels/network/cc-network-panel.c -@@ -696,19 +696,12 @@ panel_add_device (CcNetworkPanel *panel, NMDevice *device) - if (find_in_model_by_id (panel, udi, NULL) != NULL) - goto out; - -- /* Don't add the libvirtd bridge to the UI */ -- if (g_strrstr (udi, "/virbr0") != NULL) -- goto out; -- /* Don't add VPN devices either */ -- if (g_strrstr (udi, "/tun0") != NULL) -- goto out; -- - type = nm_device_get_device_type (device); - - g_debug ("device %s type %i path %s", - udi, type, nm_object_get_path (NM_OBJECT (device))); - -- /* map the NMDeviceType to the GType */ -+ /* map the NMDeviceType to the GType, or ignore */ - switch (type) { - case NM_DEVICE_TYPE_ETHERNET: - device_g_type = NET_TYPE_DEVICE_ETHERNET; -@@ -719,6 +712,16 @@ panel_add_device (CcNetworkPanel *panel, NMDevice *device) - case NM_DEVICE_TYPE_WIFI: - device_g_type = NET_TYPE_DEVICE_WIFI; - break; -+ /* not going to set up a cluster in GNOME */ -+ case NM_DEVICE_TYPE_VETH: -+ /* enterprise features */ -+ case NM_DEVICE_TYPE_BOND: -+ case NM_DEVICE_TYPE_TEAM: -+ /* Don't need the libvirtd bridge */ -+ case NM_DEVICE_TYPE_BRIDGE: -+ /* Don't add VPN devices */ -+ case NM_DEVICE_TYPE_TUN: -+ goto out; - default: - device_g_type = NET_TYPE_DEVICE_SIMPLE; - break; --- -2.13.0 - diff --git a/SOURCES/0001-printer-Don-t-show-the-supply-level-bar-by-default.patch b/SOURCES/0001-printer-Don-t-show-the-supply-level-bar-by-default.patch new file mode 100644 index 0000000..ec28df0 --- /dev/null +++ b/SOURCES/0001-printer-Don-t-show-the-supply-level-bar-by-default.patch @@ -0,0 +1,90 @@ +From 5d4cb8ea9c35b0a21259328e75d8672924f754e6 Mon Sep 17 00:00:00 2001 +From: Felipe Borges +Date: Tue, 21 Nov 2017 15:16:53 +0100 +Subject: [PATCH] printer: Don't show the supply level bar by default + +We were checking for the ink supply level at the callback of the +supply bar "draw" signal. This way we were making the the widget +visible, causing it to allocate vertical space even when it isn't +desired. + +Now we check for the supply level before setting the visiblity of +the supply level widget. + +https://bugzilla.gnome.org/show_bug.cgi?id=790667 +--- + panels/printers/pp-printer-entry.c | 16 ++++++++++++++-- + panels/printers/printer-entry.ui | 2 -- + 2 files changed, 14 insertions(+), 4 deletions(-) + +diff --git a/panels/printers/pp-printer-entry.c b/panels/printers/pp-printer-entry.c +index ba704b9c7..6aa202aba 100644 +--- a/panels/printers/pp-printer-entry.c ++++ b/panels/printers/pp-printer-entry.c +@@ -227,6 +227,15 @@ sanitize_printer_model (gchar *printer_make_and_model) + return g_strdup (printer_model); + } + ++static gboolean ++supply_level_is_empty (PpPrinterEntry *self) ++{ ++ return !((self->inklevel->marker_levels != NULL) && ++ (self->inklevel->marker_colors != NULL) && ++ (self->inklevel->marker_names != NULL) && ++ (self->inklevel->marker_types != NULL)); ++} ++ + /* To tone down the colors in the supply level bar + * we shade them by darkening the hue. + * +@@ -267,8 +276,7 @@ supply_levels_draw_cb (GtkWidget *widget, + + gtk_render_background (context, cr, 0, 0, width, height); + +- if (self->inklevel->marker_levels && self->inklevel->marker_colors && +- self->inklevel->marker_names && self->inklevel->marker_types) ++ if (!supply_level_is_empty (self)) + { + GSList *markers = NULL; + GSList *tmp_list = NULL; +@@ -694,6 +702,7 @@ pp_printer_entry_new (cups_dest_t printer, + PpPrinterEntry *self; + cups_ptype_t printer_type = 0; + gboolean is_accepting_jobs; ++ gboolean ink_supply_is_empty; + gchar *instance; + gchar *printer_uri = NULL; + gchar *location = NULL; +@@ -935,6 +944,9 @@ pp_printer_entry_new (cups_dest_t printer, + } + + g_signal_connect (self->supply_drawing_area, "draw", G_CALLBACK (supply_levels_draw_cb), self); ++ ink_supply_is_empty = supply_level_is_empty (self); ++ gtk_widget_set_visible (GTK_WIDGET (self->printer_inklevel_label), !ink_supply_is_empty); ++ gtk_widget_set_visible (GTK_WIDGET (self->supply_frame), !ink_supply_is_empty); + + pp_printer_entry_update_jobs_count (self); + +diff --git a/panels/printers/printer-entry.ui b/panels/printers/printer-entry.ui +index 5ac2eb1e3..c72b90a99 100644 +--- a/panels/printers/printer-entry.ui ++++ b/panels/printers/printer-entry.ui +@@ -245,7 +245,6 @@ + + + +- True + Ink Level + end + 1 +@@ -261,7 +260,6 @@ + + + +- True + center + start + 18 +-- +2.14.3 + diff --git a/SOURCES/0001-printers-Fix-compilation-with-RHEL-cups-version.patch b/SOURCES/0001-printers-Fix-compilation-with-RHEL-cups-version.patch new file mode 100644 index 0000000..3270291 --- /dev/null +++ b/SOURCES/0001-printers-Fix-compilation-with-RHEL-cups-version.patch @@ -0,0 +1,25 @@ +From 5c7cc82171f1312c9af2df6b5d5cc07c5f17be50 Mon Sep 17 00:00:00 2001 +From: Rui Matos +Date: Mon, 23 Oct 2017 16:06:14 +0200 +Subject: [PATCH] printers: Fix compilation with RHEL cups version + +--- + panels/printers/pp-printer.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/panels/printers/pp-printer.c b/panels/printers/pp-printer.c +index 79a6301a0..bec3b962c 100644 +--- a/panels/printers/pp-printer.c ++++ b/panels/printers/pp-printer.c +@@ -551,7 +551,7 @@ print_file_thread (GTask *task, + { + if (ippGetState (response) == IPP_ERROR) + g_warning ("An error has occured during printing of test page."); +- if (ippGetState (response) == IPP_STATE_IDLE) ++ if (ippGetState (response) == IPP_IDLE) + ret = TRUE; + + ippDelete (response); +-- +2.13.6 + diff --git a/SOURCES/0001-printers-actualize-printers-list.patch b/SOURCES/0001-printers-actualize-printers-list.patch deleted file mode 100644 index c7e6cd8..0000000 --- a/SOURCES/0001-printers-actualize-printers-list.patch +++ /dev/null @@ -1,127 +0,0 @@ -From b8b0347edfb6896b72fd5a207e6cd12d0e578505 Mon Sep 17 00:00:00 2001 -From: Felipe Borges -Date: Thu, 6 Apr 2017 13:11:36 +0200 -Subject: [PATCH] printers: Make actualize_printers_list* cancellable - -This way we can safely interrupt an update without crashing -g-c-c. - -https://bugzilla.gnome.org/show_bug.cgi?id=780299 ---- - panels/printers/cc-printers-panel.c | 31 ++++++++++++++++++++++++++++--- - panels/printers/pp-cups.c | 6 +++++- - 2 files changed, 33 insertions(+), 4 deletions(-) - -diff --git a/panels/printers/cc-printers-panel.c b/panels/printers/cc-printers-panel.c -index fb5560843..fb1299982 100644 ---- a/panels/printers/cc-printers-panel.c -+++ b/panels/printers/cc-printers-panel.c -@@ -107,6 +107,7 @@ struct _CcPrintersPanelPrivate - GHashTable *preferred_drivers; - GCancellable *get_all_ppds_cancellable; - GCancellable *subscription_renew_cancellable; -+ GCancellable *actualize_printers_list_cancellable; - - gchar *new_printer_name; - gchar *new_printer_location; -@@ -196,6 +197,9 @@ cc_printers_panel_dispose (GObject *object) - g_cancellable_cancel (priv->subscription_renew_cancellable); - g_clear_object (&priv->subscription_renew_cancellable); - -+ g_cancellable_cancel (priv->actualize_printers_list_cancellable); -+ g_clear_object (&priv->actualize_printers_list_cancellable); -+ - detach_from_cups_notifier (CC_PRINTERS_PANEL (object)); - - if (priv->cups_status_check_id > 0) -@@ -1172,6 +1176,7 @@ actualize_printers_list_cb (GObject *source_object, - gboolean valid = FALSE; - PpCups *cups = PP_CUPS (source_object); - PpCupsDests *cups_dests; -+ GError *error = NULL; - gchar *current_printer_name = NULL; - gchar *printer_icon_name = NULL; - gchar *default_icon_name = NULL; -@@ -1181,6 +1186,19 @@ actualize_printers_list_cb (GObject *source_object, - int i, j; - int num_jobs = 0; - -+ cups_dests = pp_cups_get_dests_finish (cups, result, &error); -+ -+ if (cups_dests == NULL && error != NULL) -+ { -+ if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) -+ { -+ g_warning ("Could not get dests: %s", error->message); -+ } -+ -+ g_error_free (error); -+ return; -+ } -+ - priv = PRINTERS_PANEL_PRIVATE (self); - - treeview = (GtkTreeView*) -@@ -1210,7 +1228,6 @@ actualize_printers_list_cb (GObject *source_object, - } - - free_dests (self); -- cups_dests = pp_cups_get_dests_finish (cups, result, NULL); - - priv->dests = cups_dests->dests; - priv->num_dests = cups_dests->num_of_dests; -@@ -1413,10 +1430,16 @@ actualize_printers_list_cb (GObject *source_object, - static void - actualize_printers_list (CcPrintersPanel *self) - { -- PpCups *cups; -+ CcPrintersPanelPrivate *priv; -+ PpCups *cups; -+ -+ priv = PRINTERS_PANEL_PRIVATE (self); - - cups = pp_cups_new (); -- pp_cups_get_dests_async (cups, NULL, actualize_printers_list_cb, self); -+ pp_cups_get_dests_async (cups, -+ priv->actualize_printers_list_cancellable, -+ actualize_printers_list_cb, -+ self); - } - - static void -@@ -3106,6 +3129,8 @@ cc_printers_panel_init (CcPrintersPanel *self) - - priv->preferred_drivers = NULL; - -+ priv->actualize_printers_list_cancellable = g_cancellable_new (); -+ - builder_result = gtk_builder_add_objects_from_resource (priv->builder, - "/org/gnome/control-center/printers/printers.ui", - objects, &error); -diff --git a/panels/printers/pp-cups.c b/panels/printers/pp-cups.c -index 6521b90ba..0d0d4a52b 100644 ---- a/panels/printers/pp-cups.c -+++ b/panels/printers/pp-cups.c -@@ -73,7 +73,10 @@ _pp_cups_get_dests_thread (GTask *task, - dests = g_new0 (PpCupsDests, 1); - dests->num_of_dests = cupsGetDests (&dests->dests); - -- g_task_return_pointer (task, dests, (GDestroyNotify) pp_cups_dests_free); -+ if (g_task_set_return_on_cancel (task, FALSE)) -+ { -+ g_task_return_pointer (task, dests, (GDestroyNotify) pp_cups_dests_free); -+ } - } - - void -@@ -85,6 +88,7 @@ pp_cups_get_dests_async (PpCups *cups, - GTask *task; - - task = g_task_new (cups, cancellable, callback, user_data); -+ g_task_set_return_on_cancel (task, TRUE); - g_task_run_in_thread (task, (GTaskThreadFunc) _pp_cups_get_dests_thread); - g_object_unref (task); - } --- -2.12.2 - diff --git a/SOURCES/0001-user-accounts-Prevent-crashes-if-current-user-is-not.patch b/SOURCES/0001-user-accounts-Prevent-crashes-if-current-user-is-not.patch new file mode 100644 index 0000000..5776f48 --- /dev/null +++ b/SOURCES/0001-user-accounts-Prevent-crashes-if-current-user-is-not.patch @@ -0,0 +1,530 @@ +From f8210aeb65f597c03c6ea54da0b444187618181b Mon Sep 17 00:00:00 2001 +From: Ondrej Holy +Date: Tue, 5 Dec 2017 16:22:29 +0100 +Subject: [PATCH 1/2] user-accounts: Prevent crashes if current user is not in + carousel + +In a specific cases, current user doesn't have to be returned from +accountsservice, or can be skipped by act_user_is_system_account check. +System users should not be shown. This is expected for root account, +but should not happen with regular user accounts. It needs to be fixed +in accountsservice if you see this happening with regular user accounts. +We have to be just sure that Users panel doesn't crash in such cases +and show all non-system user accounts returned from accountsservice. +Empty page is shown currently only if act_user_manager_list_users +returns nothing, but it has to be also shown if only system accounts +are returned. To fix this issue, do not try to show current user, but +show first user account in carousel instead if there is any. First user +account is current user in normal case. + +The patch also fixes problems that current user account is sometimes +selected instead of currently selected user account. This is because +of preselection of first item in um_carousel_add, which causes unwanted +signal emissions... + +https://bugzilla.gnome.org/show_bug.cgi?id=773673 +--- + panels/user-accounts/um-carousel.c | 19 ++++++++++++---- + panels/user-accounts/um-carousel.h | 2 ++ + panels/user-accounts/um-user-panel.c | 44 ++++++++++-------------------------- + 3 files changed, 29 insertions(+), 36 deletions(-) + +diff --git a/panels/user-accounts/um-carousel.c b/panels/user-accounts/um-carousel.c +index f7d0a26b0..78b5d5f94 100644 +--- a/panels/user-accounts/um-carousel.c ++++ b/panels/user-accounts/um-carousel.c +@@ -175,60 +175,69 @@ um_carousel_find_item (UmCarousel *self, + GList *list; + + list = self->children; + while (list != NULL) + { + if (!func (list->data, data)) + return list->data; + list = list->next; + } + + return NULL; + } + + static void + on_item_toggled (UmCarouselItem *item, + GdkEvent *event, + gpointer user_data) + { + UmCarousel *self = UM_CAROUSEL (user_data); + + um_carousel_select_item (self, item); + } + + void + um_carousel_select_item (UmCarousel *self, + UmCarouselItem *item) + { + gchar *page_name; + gboolean page_changed = TRUE; + ++ /* Select first user if none is specified */ ++ if (item == NULL) ++ { ++ if (self->children != NULL) ++ item = self->children->data; ++ else ++ return; ++ } ++ + if (self->selected_item != NULL) + { + page_changed = (self->selected_item->page != item->page); + self->arrow_start_x = um_carousel_item_get_x (self->selected_item, self); + } + + self->selected_item = item; + self->visible_page = item->page; + g_signal_emit (self, signals[ITEM_ACTIVATED], 0, item); + + if (!page_changed) + { + um_carousel_move_arrow (self); + return; + } + + page_name = g_strdup_printf ("%d", self->visible_page); + gtk_stack_set_visible_child_name (self->stack, page_name); + + g_free (page_name); + + update_buttons_visibility (self); + + /* um_carousel_move_arrow is called from on_transition_running */ + } + + static void + um_carousel_select_item_at_index (UmCarousel *self, + gint index) + { +@@ -277,64 +286,60 @@ um_carousel_add (GtkContainer *container, + gboolean last_box_is_full; + + if (!UM_IS_CAROUSEL_ITEM (widget)) { + GTK_CONTAINER_CLASS (um_carousel_parent_class)->add (container, widget); + return; + } + + gtk_style_context_add_class (gtk_widget_get_style_context (widget), "menu"); + gtk_button_set_relief (GTK_BUTTON (widget), GTK_RELIEF_NONE); + + self->children = g_list_append (self->children, widget); + UM_CAROUSEL_ITEM (widget)->page = get_last_page_number (self); + if (self->selected_item != NULL) + gtk_radio_button_join_group (GTK_RADIO_BUTTON (widget), GTK_RADIO_BUTTON (self->selected_item)); + g_signal_connect (widget, "button-press-event", G_CALLBACK (on_item_toggled), self); + + last_box_is_full = ((g_list_length (self->children) - 1) % ITEMS_PER_PAGE == 0); + if (last_box_is_full) { + gchar *page; + + page = g_strdup_printf ("%d", UM_CAROUSEL_ITEM (widget)->page); + self->last_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); + gtk_widget_set_valign (self->last_box, GTK_ALIGN_CENTER); + gtk_stack_add_named (self->stack, self->last_box, page); + } + + gtk_box_pack_start (GTK_BOX (self->last_box), widget, TRUE, FALSE, 10); + gtk_widget_show_all (self->last_box); + + update_buttons_visibility (self); +- +- /* If there's only one child, select it. */ +- if (self->children->next == NULL) +- um_carousel_select_item_at_index (self, 0); + } + + void + um_carousel_purge_items (UmCarousel *self) + { + gtk_container_forall (GTK_CONTAINER (self->stack), + (GtkCallback) gtk_widget_destroy, + NULL); + + g_list_free (self->children); + self->children = NULL; + self->visible_page = 0; + self->selected_item = NULL; + } + + UmCarousel * + um_carousel_new (void) + { + return g_object_new (UM_TYPE_CAROUSEL, NULL); + } + + static void + um_carousel_class_init (UmCarouselClass *klass) + { + GtkWidgetClass *wclass = GTK_WIDGET_CLASS (klass); + GtkContainerClass *container_class = GTK_CONTAINER_CLASS (klass); + + gtk_widget_class_set_template_from_resource (wclass, + "/org/gnome/control-center/user-accounts/carousel.ui"); + +@@ -371,30 +376,36 @@ on_size_allocate (UmCarousel *self) + um_carousel_move_arrow (self); + } + + static void + on_transition_running (UmCarousel *self) + { + if (!gtk_stack_get_transition_running (self->stack)) + um_carousel_move_arrow (self); + } + + static void + um_carousel_init (UmCarousel *self) + { + GtkStyleProvider *provider; + + gtk_widget_init_template (GTK_WIDGET (self)); + + provider = GTK_STYLE_PROVIDER (gtk_css_provider_new ()); + gtk_css_provider_load_from_resource (GTK_CSS_PROVIDER (provider), + "/org/gnome/control-center/user-accounts/carousel.css"); + + gtk_style_context_add_provider_for_screen (gdk_screen_get_default (), + provider, + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + + g_object_unref (provider); + + g_signal_connect_swapped (self->stack, "size-allocate", G_CALLBACK (on_size_allocate), self); + g_signal_connect_swapped (self->stack, "notify::transition-running", G_CALLBACK (on_transition_running), self); + } ++ ++guint ++um_carousel_get_item_count (UmCarousel *self) ++{ ++ return g_list_length (self->children); ++} +diff --git a/panels/user-accounts/um-carousel.h b/panels/user-accounts/um-carousel.h +index 0812ca3ba..731e1c7bd 100644 +--- a/panels/user-accounts/um-carousel.h ++++ b/panels/user-accounts/um-carousel.h +@@ -19,33 +19,35 @@ + */ + + #ifndef UM_CAROUSEL_H + #define UM_CAROUSEL_H + + #include + + G_BEGIN_DECLS + + #define UM_TYPE_CAROUSEL_ITEM (um_carousel_item_get_type ()) + + G_DECLARE_FINAL_TYPE (UmCarouselItem, um_carousel_item, UM, CAROUSEL_ITEM, GtkRadioButton) + + #define UM_TYPE_CAROUSEL (um_carousel_get_type()) + + G_DECLARE_FINAL_TYPE (UmCarousel, um_carousel, UM, CAROUSEL, GtkRevealer) + + GtkWidget *um_carousel_item_new (void); + + UmCarousel *um_carousel_new (void); + + void um_carousel_purge_items (UmCarousel *self); + + UmCarouselItem *um_carousel_find_item (UmCarousel *self, + gconstpointer data, + GCompareFunc func); + + void um_carousel_select_item (UmCarousel *self, + UmCarouselItem *item); + ++guint um_carousel_get_item_count (UmCarousel *self); ++ + G_END_DECLS + + #endif /* UM_CAROUSEL_H */ +diff --git a/panels/user-accounts/um-user-panel.c b/panels/user-accounts/um-user-panel.c +index c1875cb69..4e7009f28 100644 +--- a/panels/user-accounts/um-user-panel.c ++++ b/panels/user-accounts/um-user-panel.c +@@ -206,173 +206,158 @@ create_carousel_entry (CcUserPanelPrivate *d, ActUser *user) + + return box; + } + + static void + user_added (ActUserManager *um, ActUser *user, CcUserPanelPrivate *d) + { + GtkWidget *item, *widget; + gboolean show_carousel; + + if (act_user_is_system_account (user)) { + return; + } + + g_debug ("user added: %d %s\n", act_user_get_uid (user), get_real_or_user_name (user)); + + widget = create_carousel_entry (d, user); + item = um_carousel_item_new (); + gtk_container_add (GTK_CONTAINER (item), widget); + + g_object_set_data (G_OBJECT (item), "uid", GINT_TO_POINTER (act_user_get_uid (user))); + gtk_container_add (GTK_CONTAINER (d->carousel), item); + + if (act_user_get_uid (user) != getuid ()) { + d->other_accounts++; + } + + /* Show heading for other accounts if new one have been added. */ + show_carousel = (d->other_accounts > 0); + gtk_revealer_set_reveal_child (GTK_REVEALER (d->carousel), show_carousel); ++ ++ gtk_stack_set_visible_child_name (GTK_STACK (d->stack), PAGE_USERS); + } + + static gint + sort_users (gconstpointer a, gconstpointer b) + { + ActUser *ua, *ub; + gchar *name1, *name2; + gint result; + + ua = ACT_USER (a); + ub = ACT_USER (b); + + /* Make sure the current user is shown first */ + if (act_user_get_uid (ua) == getuid ()) { + result = -G_MAXINT32; + } + else if (act_user_get_uid (ub) == getuid ()) { + result = G_MAXINT32; + } + else { + name1 = g_utf8_collate_key (get_real_or_user_name (ua), -1); + name2 = g_utf8_collate_key (get_real_or_user_name (ub), -1); + + result = strcmp (name1, name2); + + g_free (name1); + g_free (name2); + } + + return result; + } + + static void + reload_users (CcUserPanelPrivate *d, ActUser *selected_user) + { + ActUser *user; + GSList *list, *l; +- UmCarouselItem *item; ++ UmCarouselItem *item = NULL; + GtkSettings *settings; + gboolean animations; + + settings = gtk_settings_get_default (); + + g_object_get (settings, "gtk-enable-animations", &animations, NULL); + g_object_set (settings, "gtk-enable-animations", FALSE, NULL); + + um_carousel_purge_items (d->carousel); +- + d->other_accounts = 0; + + list = act_user_manager_list_users (d->um); + g_debug ("Got %d users\n", g_slist_length (list)); + + list = g_slist_sort (list, (GCompareFunc) sort_users); + for (l = list; l; l = l->next) { + user = l->data; + g_debug ("adding user %s\n", get_real_or_user_name (user)); + user_added (d->um, user, d); + } + g_slist_free (list); + +- if (selected_user) { ++ if (um_carousel_get_item_count (d->carousel) == 0) ++ gtk_stack_set_visible_child_name (GTK_STACK (d->stack), PAGE_NO_USERS); ++ if (d->other_accounts == 0) ++ gtk_revealer_set_reveal_child (GTK_REVEALER (d->carousel), FALSE); ++ ++ if (selected_user) + item = um_carousel_find_item (d->carousel, selected_user, user_compare); +- um_carousel_select_item (d->carousel, item); +- } ++ um_carousel_select_item (d->carousel, item); + + g_object_set (settings, "gtk-enable-animations", animations, NULL); + } + +-static void +-user_removed (ActUserManager *um, ActUser *user, CcUserPanelPrivate *d) +-{ +- gboolean show_carousel; +- +- d->other_accounts--; +- show_carousel = (d->other_accounts > 0); +- gtk_revealer_set_reveal_child (GTK_REVEALER (d->carousel), +- show_carousel); +- +- reload_users (d, NULL); +- +- /* Show the current user */ +- user = act_user_manager_get_user_by_id (d->um, getuid ()); +- show_user (user, d); +-} +- + static gint + user_compare (gconstpointer i, + gconstpointer u) + { + UmCarouselItem *item; + ActUser *user; + gint uid_a, uid_b; + gint result; + + item = (UmCarouselItem *) i; + user = ACT_USER (u); + + uid_a = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), "uid")); + uid_b = act_user_get_uid (user); + + result = uid_a - uid_b; + + return result; + } + + static void + user_changed (ActUserManager *um, ActUser *user, CcUserPanelPrivate *d) + { +- if (act_user_get_uid (user) != act_user_get_uid (d->selected_user)) +- return; +- +- reload_users (d, user); ++ reload_users (d, d->selected_user); + } + + static void + select_created_user (GObject *object, + GAsyncResult *result, + gpointer user_data) + { + CcUserPanelPrivate *d = user_data; + UmAccountDialog *dialog; + ActUser *user; + + dialog = UM_ACCOUNT_DIALOG (object); + user = um_account_dialog_finish (dialog, result); + gtk_widget_destroy (GTK_WIDGET (dialog)); + d->account_dialog = NULL; + + if (user == NULL) + return; + + reload_users (d, user); + } + + static void + add_user (GtkButton *button, CcUserPanelPrivate *d) + { + d->account_dialog = um_account_dialog_new (); + um_account_dialog_show (d->account_dialog, GTK_WINDOW (gtk_widget_get_toplevel (d->main_box)), + d->permission, select_created_user, d); + } + +@@ -1079,89 +1064,84 @@ change_password (GtkButton *button, CcUserPanelPrivate *d) + static void + change_fingerprint (GtkButton *button, CcUserPanelPrivate *d) + { + GtkWidget *widget; + ActUser *user; + + user = get_selected_user (d); + + g_assert (g_strcmp0 (g_get_user_name (), act_user_get_user_name (user)) == 0); + + widget = get_widget (d, "account-fingerprint-button"); + fingerprint_button_clicked (GTK_WINDOW (gtk_widget_get_toplevel (d->main_box)), widget, user); + } + + static void + show_history (GtkButton *button, CcUserPanelPrivate *d) + { + ActUser *user; + + user = get_selected_user (d); + + um_history_dialog_set_user (d->history_dialog, user); + um_history_dialog_show (d->history_dialog, GTK_WINDOW (gtk_widget_get_toplevel (d->main_box))); + } + + static void + users_loaded (ActUserManager *manager, + GParamSpec *pspec, + CcUserPanelPrivate *d) + { +- ActUser *user; + GtkWidget *dialog; + + if (act_user_manager_no_service (d->um)) { + dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (d->main_box)), + GTK_DIALOG_MODAL, + GTK_MESSAGE_OTHER, + GTK_BUTTONS_CLOSE, + _("Failed to contact the accounts service")); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), + _("Please make sure that the AccountService is installed and enabled.")); + g_signal_connect_swapped (dialog, "response", + G_CALLBACK (gtk_widget_destroy), + dialog); + gtk_widget_show (dialog); + + gtk_widget_set_sensitive (d->main_box, FALSE); + } + + g_signal_connect (d->um, "user-changed", G_CALLBACK (user_changed), d); + g_signal_connect (d->um, "user-is-logged-in-changed", G_CALLBACK (user_changed), d); + g_signal_connect (d->um, "user-added", G_CALLBACK (user_added), d); +- g_signal_connect (d->um, "user-removed", G_CALLBACK (user_removed), d); ++ g_signal_connect (d->um, "user-removed", G_CALLBACK (user_changed), d); + + reload_users (d, NULL); +- +- /* Show the current user firstly. */ +- user = act_user_manager_get_user_by_id (d->um, getuid ()); +- show_user (user, d); + } + + static void + add_unlock_tooltip (GtkWidget *button) + { + gchar *names[3]; + GIcon *icon; + + names[0] = "changes-allow-symbolic"; + names[1] = "changes-allow"; + names[2] = NULL; + icon = (GIcon *)g_themed_icon_new_from_names (names, -1); + setup_tooltip_with_embedded_icon (button, + /* Translator comments: + * We split the line in 2 here to "make it look good", as there's + * no good way to do this in GTK+ for tooltips. See: + * https://bugzilla.gnome.org/show_bug.cgi?id=657168 */ + _("To make changes,\nclick the * icon first"), + "*", + icon); + g_object_unref (icon); + g_signal_connect (button, "button-release-event", + G_CALLBACK (show_tooltip_now), NULL); + } + + static void + remove_unlock_tooltip (GtkWidget *button) + { + setup_tooltip_with_embedded_icon (button, NULL, NULL, NULL); + g_signal_handlers_disconnect_by_func (button, +-- +2.14.3 + diff --git a/SOURCES/0001-wacom-Fix-eraser-pressure-sensitivity.patch b/SOURCES/0001-wacom-Fix-eraser-pressure-sensitivity.patch deleted file mode 100644 index cd58a66..0000000 --- a/SOURCES/0001-wacom-Fix-eraser-pressure-sensitivity.patch +++ /dev/null @@ -1,195 +0,0 @@ -From 563fc80c6baafd4e93b5e470a7666b0e3f7e539b Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Thu, 8 Jun 2017 16:51:58 +0200 -Subject: [PATCH] wacom: Fix eraser pressure sensitivity - -If was made to follow the very same GSettings path than the stylus tip. -Since we don't have easy access to the matching eraser from a GsdWacomStylus, -make it keep both GSettings whenever the stylus has an eraser. ---- - panels/wacom/cc-wacom-stylus-page.c | 2 +- - panels/wacom/gsd-wacom-device.c | 81 ++++++++++++++++++++++++++++++++----- - panels/wacom/gsd-wacom-device.h | 1 + - 3 files changed, 73 insertions(+), 11 deletions(-) - -diff --git a/panels/wacom/cc-wacom-stylus-page.c b/panels/wacom/cc-wacom-stylus-page.c -index 5b8f5b796..e7494c731 100644 ---- a/panels/wacom/cc-wacom-stylus-page.c -+++ b/panels/wacom/cc-wacom-stylus-page.c -@@ -451,7 +451,7 @@ cc_wacom_stylus_page_new (GsdWacomStylus *stylus) - priv->stylus_settings = gsd_wacom_stylus_get_settings (stylus); - has_eraser = gsd_wacom_stylus_get_has_eraser (stylus); - if (has_eraser) -- priv->eraser_settings = gsd_wacom_stylus_get_settings (stylus); -+ priv->eraser_settings = gsd_wacom_stylus_get_eraser_settings (stylus); - - /* Stylus name */ - gtk_label_set_text (GTK_LABEL (WID ("label-stylus")), gsd_wacom_stylus_get_name (stylus)); -diff --git a/panels/wacom/gsd-wacom-device.c b/panels/wacom/gsd-wacom-device.c -index 0cf725b35..b13050538 100644 ---- a/panels/wacom/gsd-wacom-device.c -+++ b/panels/wacom/gsd-wacom-device.c -@@ -69,6 +69,7 @@ struct GsdWacomStylusPrivate - char *name; - const char *icon_name; - GSettings *settings; -+ GSettings *eraser_settings; - gboolean has_eraser; - int num_buttons; - }; -@@ -115,6 +116,11 @@ gsd_wacom_stylus_finalize (GObject *object) - p->settings = NULL; - } - -+ if (p->eraser_settings != NULL) { -+ g_object_unref (p->eraser_settings); -+ p->eraser_settings = NULL; -+ } -+ - g_free (p->name); - p->name = NULL; - -@@ -148,7 +154,8 @@ get_icon_name_from_type (const WacomStylus *wstylus) - static GsdWacomStylus * - gsd_wacom_stylus_new (GsdWacomDevice *device, - const WacomStylus *wstylus, -- GSettings *settings) -+ GSettings *settings, -+ GSettings *eraser_settings) - { - GsdWacomStylus *stylus; - -@@ -161,6 +168,7 @@ gsd_wacom_stylus_new (GsdWacomDevice *device, - stylus->priv->id = libwacom_stylus_get_id (wstylus); - stylus->priv->name = g_strdup (libwacom_stylus_get_name (wstylus)); - stylus->priv->settings = settings; -+ stylus->priv->eraser_settings = eraser_settings; - stylus->priv->type = libwacom_stylus_get_type (wstylus); - stylus->priv->icon_name = get_icon_name_from_type (wstylus); - stylus->priv->has_eraser = libwacom_stylus_has_eraser (wstylus); -@@ -177,6 +185,14 @@ gsd_wacom_stylus_get_settings (GsdWacomStylus *stylus) - return stylus->priv->settings; - } - -+GSettings * -+gsd_wacom_stylus_get_eraser_settings (GsdWacomStylus *stylus) -+{ -+ g_return_val_if_fail (GSD_IS_WACOM_STYLUS (stylus), NULL); -+ -+ return stylus->priv->eraser_settings; -+} -+ - const char * - gsd_wacom_stylus_get_name (GsdWacomStylus *stylus) - { -@@ -878,8 +894,54 @@ gsd_wacom_device_get_display_rotation (GsdWacomDevice *device) - return get_rotation_wacom (rotation); - } - -+static GSettings * -+get_stylus_settings (const WacomStylus *stylus, -+ const gchar *settings_path, -+ const gchar *schema) -+{ -+ gchar *stylus_settings_path; -+ GSettings *settings; -+ -+ stylus_settings_path = g_strdup_printf ("%s0x%x/", settings_path, libwacom_stylus_get_id (stylus)); -+ settings = g_settings_new_with_path (schema, stylus_settings_path); -+ g_free (stylus_settings_path); -+ -+ return settings; -+} -+ -+static GSettings * -+find_eraser_settings (WacomDevice *device, -+ const WacomStylus *stylus, -+ const gchar *settings_path) -+{ -+ const WacomStylus *other; -+ const int *ids; -+ int i, num_styli; -+ -+ if (!libwacom_stylus_has_eraser (stylus) || -+ libwacom_stylus_is_eraser (stylus)) -+ return NULL; -+ -+ ids = libwacom_get_supported_styli (device, &num_styli); -+ -+ for (i = 0; i < num_styli; i++) { -+ if (ids[i] == libwacom_stylus_get_id (stylus)) -+ continue; -+ -+ other = libwacom_stylus_get_for_id (db, ids[i]); -+ -+ if (libwacom_stylus_is_eraser (other) && -+ libwacom_stylus_get_type (other) == libwacom_stylus_get_type (stylus)) { -+ return get_stylus_settings (other, settings_path, WACOM_ERASER_SCHEMA); -+ } -+ } -+ -+ return NULL; -+} -+ - static void - add_stylus_to_device (GsdWacomDevice *device, -+ WacomDevice *wacom_device, - const char *settings_path, - int id) - { -@@ -888,8 +950,7 @@ add_stylus_to_device (GsdWacomDevice *device, - wstylus = libwacom_stylus_get_for_id (db, id); - if (wstylus) { - GsdWacomStylus *stylus; -- char *stylus_settings_path; -- GSettings *settings; -+ GSettings *settings, *eraser_settings; - - if (device->priv->type == WACOM_TYPE_STYLUS && - libwacom_stylus_is_eraser (wstylus)) -@@ -898,15 +959,15 @@ add_stylus_to_device (GsdWacomDevice *device, - libwacom_stylus_is_eraser (wstylus) == FALSE) - return; - -- stylus_settings_path = g_strdup_printf ("%s0x%x/", settings_path, id); - if (device->priv->type == WACOM_TYPE_STYLUS) { -- settings = g_settings_new_with_path (WACOM_STYLUS_SCHEMA, stylus_settings_path); -- stylus = gsd_wacom_stylus_new (device, wstylus, settings); -+ settings = get_stylus_settings (wstylus, settings_path, WACOM_STYLUS_SCHEMA); -+ eraser_settings = find_eraser_settings (wacom_device, wstylus, settings_path); - } else { -- settings = g_settings_new_with_path (WACOM_ERASER_SCHEMA, stylus_settings_path); -- stylus = gsd_wacom_stylus_new (device, wstylus, settings); -+ settings = get_stylus_settings (wstylus, settings_path, WACOM_ERASER_SCHEMA); -+ eraser_settings = NULL; - } -- g_free (stylus_settings_path); -+ -+ stylus = gsd_wacom_stylus_new (device, wstylus, settings, eraser_settings); - device->priv->styli = g_list_prepend (device->priv->styli, stylus); - } - } -@@ -1421,7 +1482,7 @@ gsd_wacom_device_update_from_db (GsdWacomDevice *device, - ids = libwacom_get_supported_styli (wacom_device, &num_styli); - g_assert (num_styli >= 1); - for (i = 0; i < num_styli; i++) -- add_stylus_to_device (device, settings_path, ids[i]); -+ add_stylus_to_device (device, wacom_device, settings_path, ids[i]); - device->priv->styli = g_list_reverse (device->priv->styli); - } - g_free (settings_path); -diff --git a/panels/wacom/gsd-wacom-device.h b/panels/wacom/gsd-wacom-device.h -index 374eca91d..9feafd70b 100644 ---- a/panels/wacom/gsd-wacom-device.h -+++ b/panels/wacom/gsd-wacom-device.h -@@ -79,6 +79,7 @@ typedef enum { - - GType gsd_wacom_stylus_get_type (void); - GSettings * gsd_wacom_stylus_get_settings (GsdWacomStylus *stylus); -+GSettings * gsd_wacom_stylus_get_eraser_settings (GsdWacomStylus *stylus); - const char * gsd_wacom_stylus_get_name (GsdWacomStylus *stylus); - const char * gsd_wacom_stylus_get_icon_name (GsdWacomStylus *stylus); - GsdWacomDevice * gsd_wacom_stylus_get_device (GsdWacomStylus *stylus); --- -2.13.0 - diff --git a/SOURCES/0002-display-night-light-widget-Avoid-c99-requirement.patch b/SOURCES/0002-display-night-light-widget-Avoid-c99-requirement.patch new file mode 100644 index 0000000..71e63fc --- /dev/null +++ b/SOURCES/0002-display-night-light-widget-Avoid-c99-requirement.patch @@ -0,0 +1,27 @@ +From 05ed8042cbb3ecd5b5cc5fbdac32428985809c01 Mon Sep 17 00:00:00 2001 +From: Rui Matos +Date: Mon, 23 Oct 2017 15:12:22 +0200 +Subject: [PATCH 2/2] display/night-light-widget: Avoid c99 requirement + +--- + panels/display/cc-night-light-widget.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/panels/display/cc-night-light-widget.c b/panels/display/cc-night-light-widget.c +index 8b5d60024..683fd966b 100644 +--- a/panels/display/cc-night-light-widget.c ++++ b/panels/display/cc-night-light-widget.c +@@ -278,8 +278,9 @@ cc_night_light_widget_draw (GtkWidget *widget, cairo_t *cr) + gdouble subsect = 24.f / (gdouble) rect.width; + if (gtk_widget_is_sensitive (widget)) + { ++ guint x; + cairo_set_line_width (cr, 1); +- for (guint x = 0; x < rect.width; x += 1) ++ for (x = 0; x < rect.width; x += 1) + { + gdouble frac_hour = subsect * x; + if (is_frac_day_between (frac_hour, self->to - 1, self->to)) +-- +2.13.6 + diff --git a/SOURCES/0002-hostname-helper-fall-back-to-kernel-hostname-when-th.patch b/SOURCES/0002-hostname-helper-fall-back-to-kernel-hostname-when-th.patch deleted file mode 100644 index f2a5c5a..0000000 --- a/SOURCES/0002-hostname-helper-fall-back-to-kernel-hostname-when-th.patch +++ /dev/null @@ -1,32 +0,0 @@ -From a80bb954e0f4809be57c95041051bb359bc98085 Mon Sep 17 00:00:00 2001 -From: Lubomir Rintel -Date: Wed, 2 Nov 2016 17:15:20 +0100 -Subject: [PATCH 2/3] hostname-helper: fall back to kernel hostname when the - pretty one is an empty string - -The empty string is not too useful as an SSID, an attempt to create a -hotspot fails: - - (gnome-control-center:19371): network-cc-panel-WARNING **: - Failed to add new connection: (2) - A 'wireless' setting with a valid SSID is required if no AP path was given. ---- - shell/hostname-helper.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/shell/hostname-helper.c b/shell/hostname-helper.c -index ab889b96b..1a063b5cd 100644 ---- a/shell/hostname-helper.c -+++ b/shell/hostname-helper.c -@@ -178,7 +178,7 @@ pretty_hostname_to_ssid (const char *pretty) - const char *p, *prev; - char *ret = NULL; - -- if (pretty == NULL) { -+ if (pretty == NULL || *pretty == '\0') { - pretty = g_get_host_name (); - if (g_strcmp0 (pretty, "localhost") == 0) - pretty = NULL; --- -2.12.2 - diff --git a/SOURCES/0002-mouse-Handle-Synaptics-devices-again.patch b/SOURCES/0002-mouse-Handle-Synaptics-devices-again.patch new file mode 100644 index 0000000..fb33a5e --- /dev/null +++ b/SOURCES/0002-mouse-Handle-Synaptics-devices-again.patch @@ -0,0 +1,153 @@ +From 6881c089a00b184358de3e6c80f2711f59ec5e04 Mon Sep 17 00:00:00 2001 +From: Carlos Garnacho +Date: Mon, 13 Mar 2017 19:58:42 +0100 +Subject: [PATCH 2/3] mouse: Handle Synaptics devices again + +If mutter can handle those, so can g-c-c +--- + panels/mouse/cc-mouse-caps-helper.c | 85 ++++++++++++++++++++++++++++++++--- + panels/mouse/gnome-mouse-properties.c | 10 +---- + 2 files changed, 79 insertions(+), 16 deletions(-) + +diff --git a/panels/mouse/cc-mouse-caps-helper.c b/panels/mouse/cc-mouse-caps-helper.c +index 65e11df67..521f318d4 100644 +--- a/panels/mouse/cc-mouse-caps-helper.c ++++ b/panels/mouse/cc-mouse-caps-helper.c +@@ -25,9 +25,72 @@ + #include "cc-mouse-caps-helper.h" + + static gboolean +-touchpad_check_capabilities_x11 (gboolean *have_two_finger_scrolling, +- gboolean *have_edge_scrolling, +- gboolean *have_tap_to_click) ++touchpad_check_capabilities_x11_synaptics (gboolean *have_two_finger_scrolling, ++ gboolean *have_edge_scrolling, ++ gboolean *have_tap_to_click) ++{ ++ Display *display; ++ GList *devicelist, *l; ++ Atom realtype, prop_two_finger_scroll, prop_edge_scroll, prop_tap_action; ++ int realformat; ++ unsigned long nitems, bytes_after; ++ unsigned char *data; ++ ++ display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); ++ prop_two_finger_scroll = XInternAtom (display, "Synaptics Two-Finger Scrolling", False); ++ prop_edge_scroll = XInternAtom (display, "Synaptics Edge Scrolling", False); ++ prop_tap_action = XInternAtom (display, "Synaptics Tap Action", False); ++ if (!prop_two_finger_scroll || !prop_edge_scroll || !prop_tap_action) ++ return FALSE; ++ ++ *have_two_finger_scrolling = FALSE; ++ *have_edge_scrolling = FALSE; ++ *have_tap_to_click = FALSE; ++ ++ gdk_error_trap_push (); ++ ++ devicelist = gdk_seat_get_slaves (gdk_display_get_default_seat (gdk_display_get_default ()), ++ GDK_SEAT_CAPABILITY_ALL_POINTING); ++ for (l = devicelist; l != NULL; l = l->next) { ++ GdkDevice *device = l->data; ++ ++ if (gdk_device_get_source (device) != GDK_SOURCE_TOUCHPAD && ++ gdk_device_get_source (device) != GDK_SOURCE_MOUSE) ++ continue; ++ ++ /* xorg-x11-drv-synaptics */ ++ if ((XIGetProperty (display, gdk_x11_device_get_id (device), prop_two_finger_scroll, ++ 0, 2, False, XA_INTEGER, &realtype, &realformat, &nitems, ++ &bytes_after, &data) == Success) && (realtype != None)) { ++ *have_two_finger_scrolling = TRUE; ++ XFree (data); ++ } ++ ++ if ((XIGetProperty (display, gdk_x11_device_get_id (device), prop_edge_scroll, ++ 0, 3, False, XA_INTEGER, &realtype, &realformat, &nitems, ++ &bytes_after, &data) == Success) && (realtype != None)) { ++ *have_edge_scrolling = TRUE; ++ XFree (data); ++ } ++ ++ if ((XIGetProperty (display, gdk_x11_device_get_id (device), prop_tap_action, ++ 0, 8, False, XA_INTEGER, &realtype, &realformat, &nitems, ++ &bytes_after, &data) == Success) && (realtype != None)) { ++ *have_tap_to_click = TRUE; ++ XFree (data); ++ } ++ } ++ g_list_free (devicelist); ++ ++ gdk_error_trap_pop_ignored (); ++ ++ return TRUE; ++} ++ ++static gboolean ++touchpad_check_capabilities_x11_libinput (gboolean *have_two_finger_scrolling, ++ gboolean *have_edge_scrolling, ++ gboolean *have_tap_to_click) + { + Display *display; + GList *devicelist, *l; +@@ -91,10 +154,18 @@ cc_touchpad_check_capabilities (gboolean *have_two_finger_scrolling, + gboolean *have_edge_scrolling, + gboolean *have_tap_to_click) + { +- if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) +- return touchpad_check_capabilities_x11 (have_two_finger_scrolling, +- have_edge_scrolling, +- have_tap_to_click); ++ if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { ++ if (cc_synaptics_check ()) { ++ return touchpad_check_capabilities_x11_synaptics (have_two_finger_scrolling, ++ have_edge_scrolling, ++ have_tap_to_click); ++ } ++ ++ return touchpad_check_capabilities_x11_libinput (have_two_finger_scrolling, ++ have_edge_scrolling, ++ have_tap_to_click); ++ } ++ + /* else we unconditionally show all touchpad knobs */ + *have_two_finger_scrolling = TRUE; + *have_edge_scrolling = TRUE; +diff --git a/panels/mouse/gnome-mouse-properties.c b/panels/mouse/gnome-mouse-properties.c +index 95a74e418..e2053a5cd 100644 +--- a/panels/mouse/gnome-mouse-properties.c ++++ b/panels/mouse/gnome-mouse-properties.c +@@ -61,7 +61,6 @@ struct _CcMousePropertiesPrivate + gboolean have_mouse; + gboolean have_touchpad; + gboolean have_touchscreen; +- gboolean have_synaptics; + + gboolean left_handed; + GtkGesture *left_gesture; +@@ -81,10 +80,6 @@ setup_touchpad_options (CcMousePropertiesPrivate *d) + gboolean have_edge_scrolling; + gboolean have_tap_to_click; + +- gtk_widget_set_visible (WID ("touchpad-frame"), !d->have_synaptics); +- if (d->have_synaptics) +- return; +- + gtk_widget_set_visible (WID ("touchpad-frame"), d->have_touchpad); + if (!d->have_touchpad) + return; +@@ -387,11 +382,8 @@ cc_mouse_properties_init (CcMouseProperties *object) + G_CALLBACK (device_changed), d); + + d->have_mouse = mouse_is_present (); +- d->have_touchpad = touchpad_is_present (); ++ d->have_touchpad = touchpad_is_present () || cc_synaptics_check (); + d->have_touchscreen = touchscreen_is_present (); +- d->have_synaptics = cc_synaptics_check (); +- if (d->have_synaptics) +- g_warning ("Detected synaptics X driver, please migrate to libinput"); + + d->changing_scroll = FALSE; + +-- +2.13.6 + diff --git a/SOURCES/0002-user-accounts-Introduce-an-empty-state-page.patch b/SOURCES/0002-user-accounts-Introduce-an-empty-state-page.patch new file mode 100644 index 0000000..09ba4bc --- /dev/null +++ b/SOURCES/0002-user-accounts-Introduce-an-empty-state-page.patch @@ -0,0 +1,444 @@ +From 099115c26e2df45cca0f9705e614424733724ca9 Mon Sep 17 00:00:00 2001 +From: Felipe Borges +Date: Wed, 22 Feb 2017 12:18:24 +0100 +Subject: [PATCH 2/2] user-accounts: Introduce an empty state page + +There are eventually corner cases where there's no user other than +root in the system and control-center can be launched by the root +user (not recommended). In this cases, the panel crashes without +any user to show (since accountsservice would just list normal +users). + +This patch introduces an empty state[0] "No Users Page". + +[0] https://wiki.gnome.org/Design/OS/EmptyStates + +https://bugzilla.gnome.org/show_bug.cgi?id=773673 +--- + panels/user-accounts/data/user-accounts-dialog.ui | 48 +++++++++++++++++++++++ + panels/user-accounts/um-user-panel.c | 17 +++++++- + 2 files changed, 64 insertions(+), 1 deletion(-) + +diff --git a/panels/user-accounts/data/user-accounts-dialog.ui b/panels/user-accounts/data/user-accounts-dialog.ui +index cdd4951e4..a2c11b197 100644 +--- a/panels/user-accounts/data/user-accounts-dialog.ui ++++ b/panels/user-accounts/data/user-accounts-dialog.ui +@@ -15,60 +15,65 @@ + + + + True + True + _Add User… + True + + + + _adduser + + + + + + + + + + + + + + + + + ++ ++ ++ True ++ empty-state ++ + + True + + + True + GTK_ALIGN_CENTER + GTK_ALIGN_START + + + True + 6 + + + + True + True + 30 + Your session needs to be restarted for changes to take effect + + + + + True + True + GTK_ALIGN_CENTER + Restart Now + + +@@ -408,60 +413,103 @@ + + + + + 1 + 6 + 1 + 1 + + + + + + + True + False + GTK_ALIGN_END + GTK_ALIGN_END + 20 + 20 + 20 + Remove User… + + + + + + ++ ++ _users ++ ++ ++ ++ ++ True ++ GTK_ORIENTATION_VERTICAL ++ GTK_ALIGN_CENTER ++ 12 ++ ++ ++ ++ True ++ avatar-default-symbolic ++ 192 ++ ++ ++ ++ ++ True ++ No Users Found ++ ++ ++ ++ ++ ++ ++ ++ ++ True ++ Unlock to add a user account. ++ ++ ++ ++ ++ _empty_state ++ ++ ++ ++ + + both + + + + + + + both + + + + + + + + + + + both + + + + + + + + + + +diff --git a/panels/user-accounts/um-user-panel.c b/panels/user-accounts/um-user-panel.c +index 4e7009f28..3047295d5 100644 +--- a/panels/user-accounts/um-user-panel.c ++++ b/panels/user-accounts/um-user-panel.c +@@ -44,84 +44,90 @@ + #include "um-account-dialog.h" + #include "cc-language-chooser.h" + #include "um-password-dialog.h" + #include "um-carousel.h" + #include "um-photo-dialog.h" + #include "um-fingerprint-dialog.h" + #include "um-utils.h" + #include "um-resources.h" + #include "um-history-dialog.h" + + #include "cc-common-language.h" + #include "cc-util.h" + + #include "um-realm-manager.h" + + #define USER_ACCOUNTS_PERMISSION "org.gnome.controlcenter.user-accounts.administration" + + CC_PANEL_REGISTER (CcUserPanel, cc_user_panel) + + #define UM_USER_PANEL_PRIVATE(o) \ + (G_TYPE_INSTANCE_GET_PRIVATE ((o), UM_TYPE_USER_PANEL, CcUserPanelPrivate)) + + struct _CcUserPanelPrivate { + ActUserManager *um; + GCancellable *cancellable; + GtkBuilder *builder; + GtkWidget *notification; + GSettings *login_screen_settings; + + GtkWidget *headerbar_buttons; ++ GtkWidget *stack; + GtkWidget *main_box; + UmCarousel *carousel; + ActUser *selected_user; + GPermission *permission; + GtkWidget *language_chooser; + + UmPasswordDialog *password_dialog; + UmPhotoDialog *photo_dialog; + UmHistoryDialog *history_dialog; + + gint other_accounts; + + UmAccountDialog *account_dialog; + }; + + static GtkWidget * + get_widget (CcUserPanelPrivate *d, const char *name) + { + return (GtkWidget *)gtk_builder_get_object (d->builder, name); + } + ++/* Headerbar button states. */ + #define PAGE_LOCK "_lock" + #define PAGE_ADDUSER "_adduser" + ++/* Panel states */ ++#define PAGE_NO_USERS "_empty_state" ++#define PAGE_USERS "_users" ++ + static void show_restart_notification (CcUserPanelPrivate *d, const gchar *locale); + static gint user_compare (gconstpointer i, gconstpointer u); + + typedef struct { + CcUserPanel *self; + GCancellable *cancellable; + gchar *login; + } AsyncDeleteData; + + static void + async_delete_data_free (AsyncDeleteData *data) + { + g_object_unref (data->self); + g_object_unref (data->cancellable); + g_free (data->login); + g_slice_free (AsyncDeleteData, data); + } + + static void + show_error_dialog (CcUserPanelPrivate *d, + const gchar *message, + GError *error) + { + GtkWidget *dialog; + + dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (d->main_box)), + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_USE_HEADER_BAR, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + "%s", message); +@@ -248,72 +254,80 @@ sort_users (gconstpointer a, gconstpointer b) + ub = ACT_USER (b); + + /* Make sure the current user is shown first */ + if (act_user_get_uid (ua) == getuid ()) { + result = -G_MAXINT32; + } + else if (act_user_get_uid (ub) == getuid ()) { + result = G_MAXINT32; + } + else { + name1 = g_utf8_collate_key (get_real_or_user_name (ua), -1); + name2 = g_utf8_collate_key (get_real_or_user_name (ub), -1); + + result = strcmp (name1, name2); + + g_free (name1); + g_free (name2); + } + + return result; + } + + static void + reload_users (CcUserPanelPrivate *d, ActUser *selected_user) + { + ActUser *user; + GSList *list, *l; + UmCarouselItem *item = NULL; + GtkSettings *settings; + gboolean animations; ++ gboolean can_reload; + + settings = gtk_settings_get_default (); + + g_object_get (settings, "gtk-enable-animations", &animations, NULL); + g_object_set (settings, "gtk-enable-animations", FALSE, NULL); + + um_carousel_purge_items (d->carousel); + d->other_accounts = 0; + + list = act_user_manager_list_users (d->um); + g_debug ("Got %d users\n", g_slist_length (list)); + ++ can_reload = (list != NULL); ++ gtk_stack_set_visible_child_name (GTK_STACK (d->stack), ++ can_reload ? PAGE_USERS : PAGE_NO_USERS); ++ ++ if (!can_reload) ++ return; ++ + list = g_slist_sort (list, (GCompareFunc) sort_users); + for (l = list; l; l = l->next) { + user = l->data; + g_debug ("adding user %s\n", get_real_or_user_name (user)); + user_added (d->um, user, d); + } + g_slist_free (list); + + if (um_carousel_get_item_count (d->carousel) == 0) + gtk_stack_set_visible_child_name (GTK_STACK (d->stack), PAGE_NO_USERS); + if (d->other_accounts == 0) + gtk_revealer_set_reveal_child (GTK_REVEALER (d->carousel), FALSE); + + if (selected_user) + item = um_carousel_find_item (d->carousel, selected_user, user_compare); + um_carousel_select_item (d->carousel, item); + + g_object_set (settings, "gtk-enable-animations", animations, NULL); + } + + static gint + user_compare (gconstpointer i, + gconstpointer u) + { + UmCarouselItem *item; + ActUser *user; + gint uid_a, uid_b; + gint result; + + item = (UmCarouselItem *) i; +@@ -1431,67 +1445,68 @@ cc_user_panel_init (CcUserPanel *self) + + d = self->priv = UM_USER_PANEL_PRIVATE (self); + g_resources_register (um_get_resource ()); + + /* register types that the builder might need */ + type = um_user_image_get_type (); + type = um_cell_renderer_user_image_get_type (); + type = um_carousel_get_type (); + + d->builder = gtk_builder_new (); + d->um = act_user_manager_get_default (); + d->cancellable = g_cancellable_new (); + + error = NULL; + if (!gtk_builder_add_from_resource (d->builder, + "/org/gnome/control-center/user-accounts/user-accounts-dialog.ui", + &error)) { + g_error ("%s", error->message); + g_error_free (error); + return; + } + + provider = gtk_css_provider_new (); + gtk_css_provider_load_from_resource (provider, "/org/gnome/control-center/user-accounts/user-accounts-dialog.css"); + gtk_style_context_add_provider_for_screen (gdk_screen_get_default (), + GTK_STYLE_PROVIDER (provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); + g_object_unref (provider); + + d->headerbar_buttons = get_widget (d, "headerbar-buttons"); ++ d->stack = get_widget (d, "stack"); + d->login_screen_settings = settings_or_null ("org.gnome.login-screen"); + + d->password_dialog = um_password_dialog_new (); + button = get_widget (d, "user-icon-button"); + d->photo_dialog = um_photo_dialog_new (button); + d->main_box = get_widget (d, "accounts-vbox"); +- gtk_container_add (GTK_CONTAINER (self), get_widget (d, "overlay")); ++ gtk_container_add (GTK_CONTAINER (self), d->stack); + d->history_dialog = um_history_dialog_new (); + setup_main_window (self); + } + + static void + cc_user_panel_dispose (GObject *object) + { + CcUserPanelPrivate *priv = UM_USER_PANEL (object)->priv; + + g_cancellable_cancel (priv->cancellable); + g_clear_object (&priv->cancellable); + + g_clear_object (&priv->login_screen_settings); + + if (priv->um) { + g_signal_handlers_disconnect_by_data (priv->um, priv); + priv->um = NULL; + } + if (priv->builder) { + g_object_unref (priv->builder); + priv->builder = NULL; + } + if (priv->password_dialog) { + um_password_dialog_free (priv->password_dialog); + priv->password_dialog = NULL; + } + if (priv->photo_dialog) { + um_photo_dialog_free (priv->photo_dialog); + priv->photo_dialog = NULL; + } +-- +2.14.3 + diff --git a/SOURCES/0002-wifi-Show-the-Wi-Fi-disabled-page-if-it-is-disabled.patch b/SOURCES/0002-wifi-Show-the-Wi-Fi-disabled-page-if-it-is-disabled.patch new file mode 100644 index 0000000..e79293f --- /dev/null +++ b/SOURCES/0002-wifi-Show-the-Wi-Fi-disabled-page-if-it-is-disabled.patch @@ -0,0 +1,56 @@ +From b2a844a0df978602befc7cb839ba18aca66c3b13 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Tue, 20 Feb 2018 18:21:47 +0100 +Subject: [PATCH 2/2] wifi: Show the "Wi-Fi disabled" page if it is disabled + +Rather than an empty "Visible Networks" table. + +https://bugzilla.gnome.org/show_bug.cgi?id=793647 +--- + panels/network/cc-wifi-panel.c | 16 +++++++++++++++- + 1 file changed, 15 insertions(+), 1 deletion(-) + +diff --git a/panels/network/cc-wifi-panel.c b/panels/network/cc-wifi-panel.c +index 7fceb354a..2c1cd17b7 100644 +--- a/panels/network/cc-wifi-panel.c ++++ b/panels/network/cc-wifi-panel.c +@@ -125,7 +125,8 @@ check_main_stack_page (CcWifiPanel *self) + + if (!nm_version) + gtk_stack_set_visible_child_name (self->main_stack, "nm-not-running"); +- else if (self->devices->len == 0) ++ else if (self->devices->len == 0 || ++ !nm_client_wireless_get_enabled (self->client)) + gtk_stack_set_visible_child_name (self->main_stack, "no-wifi-devices"); + else + gtk_stack_set_visible_child_name (self->main_stack, "wifi-connections"); +@@ -402,6 +403,14 @@ device_removed_cb (NMClient *client, + check_main_stack_page (self); + } + ++static void ++wireless_enabled_cb (NMClient *client, ++ NMDevice *device, ++ CcWifiPanel *self) ++{ ++ check_main_stack_page (self); ++} ++ + static void + rfkill_proxy_acquired_cb (GObject *source_object, + GAsyncResult *res, +@@ -622,6 +631,11 @@ cc_wifi_panel_init (CcWifiPanel *self) + G_CALLBACK (device_removed_cb), + self); + ++ g_signal_connect (self->client, ++ "notify::wireless-enabled", ++ G_CALLBACK (wireless_enabled_cb), ++ self); ++ + /* Load Wi-Fi devices */ + load_wifi_devices (self); + +-- +2.14.3 + diff --git a/SOURCES/0003-Revert-datetime-12h-time-format-is-now-always-availa.patch b/SOURCES/0003-Revert-datetime-12h-time-format-is-now-always-availa.patch new file mode 100644 index 0000000..f8640c6 --- /dev/null +++ b/SOURCES/0003-Revert-datetime-12h-time-format-is-now-always-availa.patch @@ -0,0 +1,104 @@ +From 06fba30a17bf90da54fb5ef6bc9512cb72729895 Mon Sep 17 00:00:00 2001 +From: Rui Matos +Date: Tue, 17 Oct 2017 21:55:28 +0200 +Subject: [PATCH 3/3] Revert "datetime: 12h time format is now always + available" + +This reverts commit 85cd910af5e021f4ad1e34b4ae539a38aa712a61. +--- + configure.ac | 2 +- + panels/datetime/cc-datetime-panel.c | 23 +++++++++++++++++++---- + 3 files changed, 21 insertions(+), 6 deletions(-) + +diff --git a/configure.ac b/configure.ac +index b16bc1931..9530d1e97 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -86,7 +86,7 @@ dnl ============================================== + dnl Check that we meet the dependencies + dnl ============================================== + +-GLIB_REQUIRED_VERSION=2.53.0 ++GLIB_REQUIRED_VERSION=2.44.0 + GTK_REQUIRED_VERSION=3.22.0 + PA_REQUIRED_VERSION=2.0 + CANBERRA_REQUIRED_VERSION=0.13 +diff --git a/panels/datetime/cc-datetime-panel.c b/panels/datetime/cc-datetime-panel.c +index 5500b0503..a17b14d00 100644 +--- a/panels/datetime/cc-datetime-panel.c ++++ b/panels/datetime/cc-datetime-panel.c +@@ -87,6 +87,7 @@ struct _CcDateTimePanelPrivate + GSettings *datetime_settings; + GSettings *filechooser_settings; + GDesktopClockFormat clock_format; ++ gboolean ampm_available; + GtkWidget *am_label; + GtkWidget *pm_label; + GtkWidget *am_pm_stack; +@@ -288,7 +289,7 @@ update_time (CcDateTimePanel *self) + g_signal_handlers_block_by_func (m_spinbutton, change_time, self); + g_signal_handlers_block_by_func (am_pm_button, am_pm_button_clicked, self); + +- if (priv->clock_format == G_DESKTOP_CLOCK_FORMAT_12H) ++ if (priv->clock_format == G_DESKTOP_CLOCK_FORMAT_12H && priv->ampm_available) + use_ampm = TRUE; + else + use_ampm = FALSE; +@@ -540,7 +541,7 @@ update_timezone (CcDateTimePanel *self) + char *tz_desc; + gboolean use_ampm; + +- if (priv->clock_format == G_DESKTOP_CLOCK_FORMAT_12H) ++ if (priv->clock_format == G_DESKTOP_CLOCK_FORMAT_12H && priv->ampm_available) + use_ampm = TRUE; + else + use_ampm = FALSE; +@@ -714,7 +715,7 @@ change_time (CcDateTimePanel *panel) + h = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (W ("h_spinbutton"))); + m = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (W ("m_spinbutton"))); + +- if (priv->clock_format == G_DESKTOP_CLOCK_FORMAT_12H) ++ if (priv->clock_format == G_DESKTOP_CLOCK_FORMAT_12H && priv->ampm_available) + { + gboolean is_pm_time; + GtkWidget *visible_child; +@@ -1002,7 +1003,7 @@ format_hours_combobox (GtkSpinButton *spin, + int hour; + gboolean use_ampm; + +- if (priv->clock_format == G_DESKTOP_CLOCK_FORMAT_12H) ++ if (priv->clock_format == G_DESKTOP_CLOCK_FORMAT_12H && priv->ampm_available) + use_ampm = TRUE; + else + use_ampm = FALSE; +@@ -1209,6 +1210,7 @@ cc_date_time_panel_init (CcDateTimePanel *self) + GtkWidget *widget; + GError *error; + GtkTreeModelSort *city_modelsort; ++ const char *ampm; + int ret; + const char *date_grid_name; + char *tmp; +@@ -1317,6 +1319,19 @@ cc_date_time_panel_init (CcDateTimePanel *self) + /* Clock settings */ + priv->clock_settings = g_settings_new (CLOCK_SCHEMA); + ++ ampm = nl_langinfo (AM_STR); ++ /* There are no AM/PM indicators for this locale, so ++ * offer the 24 hr clock as the only option */ ++ if (ampm == NULL || ampm[0] == '\0') ++ { ++ gtk_widget_set_visible (W("timeformat-frame"), FALSE); ++ priv->ampm_available = FALSE; ++ } ++ else ++ { ++ priv->ampm_available = TRUE; ++ } ++ + widget = W ("vbox_datetime"); + gtk_container_add (GTK_CONTAINER (self), widget); + +-- +2.13.6 + diff --git a/SOURCES/0003-hostname-helper-use-SSID_MAX_LEN.patch b/SOURCES/0003-hostname-helper-use-SSID_MAX_LEN.patch deleted file mode 100644 index fbf1e90..0000000 --- a/SOURCES/0003-hostname-helper-use-SSID_MAX_LEN.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 1f5267050e60f0902596810d97c16a4f5d5304c4 Mon Sep 17 00:00:00 2001 -From: Lubomir Rintel -Date: Wed, 2 Nov 2016 17:58:15 +0100 -Subject: [PATCH 3/3] hostname-helper: use SSID_MAX_LEN - -It looks a bit weird to define it and still use the numeric literal. ---- - shell/hostname-helper.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/shell/hostname-helper.c b/shell/hostname-helper.c -index 1a063b5cd..df596975e 100644 ---- a/shell/hostname-helper.c -+++ b/shell/hostname-helper.c -@@ -187,7 +187,7 @@ pretty_hostname_to_ssid (const char *pretty) - if (pretty == NULL) { - /* translators: This is the default hotspot name, need to be less than 32-bytes */ - ret = g_strdup (C_("hotspot", "Hotspot")); -- g_assert (strlen (ret) <= 32); -+ g_assert (strlen (ret) <= SSID_MAX_LEN); - return ret; - } - -@@ -199,11 +199,11 @@ pretty_hostname_to_ssid (const char *pretty) - if (p == prev) - break; - -- if (p - pretty > 32) { -+ if (p - pretty > SSID_MAX_LEN) { - ret = g_strndup (pretty, prev - pretty); - break; - } -- if (p - pretty == 32) { -+ if (p - pretty == SSID_MAX_LEN) { - ret = g_strndup (pretty, p - pretty); - break; - } --- -2.12.2 - diff --git a/SOURCES/cursor-size-selection.patch b/SOURCES/cursor-size-selection.patch deleted file mode 100644 index 1439bda..0000000 --- a/SOURCES/cursor-size-selection.patch +++ /dev/null @@ -1,666 +0,0 @@ -From d0e477e42b8d9567d3e675a49e9eafccaa6cda79 Mon Sep 17 00:00:00 2001 -From: Bastien Nocera -Date: Mon, 6 Mar 2017 16:39:29 +0100 -Subject: [PATCH 1/4] universal-access: Don't use C++ style comments - ---- - panels/universal-access/cc-ua-panel.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/panels/universal-access/cc-ua-panel.c b/panels/universal-access/cc-ua-panel.c -index 477a6895a..88e55e66e 100644 ---- a/panels/universal-access/cc-ua-panel.c -+++ b/panels/universal-access/cc-ua-panel.c -@@ -358,7 +358,7 @@ activate_row (CcUaPanel *self, GtkListBoxRow *row) - const gchar *dialog_id; - const gchar *widget_name; - -- // Check switches to toggle -+ /* Check switches to toggle */ - widget_name = gtk_buildable_get_name (GTK_BUILDABLE (row)); - if (widget_name) - { -@@ -384,7 +384,7 @@ activate_row (CcUaPanel *self, GtkListBoxRow *row) - } - } - -- // Check dialog to open -+ /* Check dialog to open */ - dialog_id = (const gchar *)g_object_get_data (G_OBJECT (row), "dialog-id"); - if (g_strcmp0 (dialog_id, "zoom") == 0) - { --- -2.12.0 - - -From 1d3aadcf331572b770b89d22101edc8fdfc1ca8d Mon Sep 17 00:00:00 2001 -From: Bastien Nocera -Date: Mon, 6 Mar 2017 17:30:07 +0100 -Subject: [PATCH 2/4] universal-access: Add bits for glade to shut up - ---- - panels/universal-access/uap.ui | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/panels/universal-access/uap.ui b/panels/universal-access/uap.ui -index e6c7955dc..636b7740d 100644 ---- a/panels/universal-access/uap.ui -+++ b/panels/universal-access/uap.ui -@@ -1,5 +1,7 @@ - -+ - -+ - - 100 - 1000 --- -2.12.0 - - -From d0c8026172f441d00519577064aad04d7cd68429 Mon Sep 17 00:00:00 2001 -From: Bastien Nocera -Date: Mon, 6 Mar 2017 17:28:33 +0100 -Subject: [PATCH 3/4] universal-access: Add Cursor Size selection dialogue - -The dialogue offers the 5 separate cursor sizes that adwaita's cursor -theme supports, aligned in a row. - -The cursor sizes are described in a way that doesn't judge their -respective sizes, but simply describes them. - -https://bugzilla.gnome.org/show_bug.cgi?id=608231 ---- - panels/universal-access/cc-ua-panel.c | 118 +++++++++++++++++++++ - panels/universal-access/left_ptr_24px.png | Bin 0 -> 762 bytes - panels/universal-access/left_ptr_32px.png | Bin 0 -> 1081 bytes - panels/universal-access/left_ptr_48px.png | Bin 0 -> 1766 bytes - panels/universal-access/left_ptr_64px.png | Bin 0 -> 2447 bytes - panels/universal-access/left_ptr_96px.png | Bin 0 -> 3995 bytes - panels/universal-access/uap.ui | 111 +++++++++++++++++++ - .../universal-access.gresource.xml | 5 + - 8 files changed, 234 insertions(+) - create mode 100644 panels/universal-access/left_ptr_24px.png - create mode 100644 panels/universal-access/left_ptr_32px.png - create mode 100644 panels/universal-access/left_ptr_48px.png - create mode 100644 panels/universal-access/left_ptr_64px.png - create mode 100644 panels/universal-access/left_ptr_96px.png - -diff --git a/panels/universal-access/cc-ua-panel.c b/panels/universal-access/cc-ua-panel.c -index 88e55e66e..1985f7718 100644 ---- a/panels/universal-access/cc-ua-panel.c -+++ b/panels/universal-access/cc-ua-panel.c -@@ -50,6 +50,7 @@ - #define KEY_ICON_THEME "icon-theme" - #define KEY_CURSOR_BLINKING "cursor-blink" - #define KEY_CURSOR_BLINKING_TIME "cursor-blink-time" -+#define KEY_MOUSE_CURSOR_SIZE "cursor-size" - - /* application settings */ - #define APPLICATION_SETTINGS "org.gnome.desktop.a11y.applications" -@@ -178,6 +179,67 @@ zoom_options_launch (CcUaPanel *self) - GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (self)))); - } - -+/* cursor size dialog */ -+static void -+cursor_size_toggled (GtkWidget *button, -+ CcUaPanel *self) -+{ -+ CcUaPanelPrivate *priv = self->priv; -+ guint cursor_size; -+ -+ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) -+ return; -+ -+ cursor_size = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (button), "cursor-size")); -+ g_settings_set_int (priv->interface_settings, KEY_MOUSE_CURSOR_SIZE, cursor_size); -+ g_debug ("Setting cursor size to %d", cursor_size); -+} -+ -+static void -+cursor_size_setup (CcUaPanel *self) -+{ -+ guint cursor_sizes[] = { 24, 32, 48, 64, 96 }; -+ guint current_cursor_size, i; -+ CcUaPanelPrivate *priv = self->priv; -+ GtkWidget *grid; -+ GtkSizeGroup *size_group; -+ GtkWidget *last_radio_button = NULL; -+ -+ grid = WID ("cursor_size_grid"); -+ gtk_style_context_add_class (gtk_widget_get_style_context (grid), "linked"); -+ -+ current_cursor_size = g_settings_get_int (priv->interface_settings, -+ KEY_MOUSE_CURSOR_SIZE); -+ size_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH); -+ -+ for (i = 0; i < G_N_ELEMENTS(cursor_sizes); i++) -+ { -+ GtkWidget *image, *button; -+ char *cursor_image_name; -+ -+ cursor_image_name = g_strdup_printf ("/org/gnome/control-center/universal-access/left_ptr_%dpx.png", cursor_sizes[i]); -+ image = gtk_image_new_from_resource (cursor_image_name); -+ g_free (cursor_image_name); -+ -+ button = gtk_radio_button_new_from_widget (GTK_RADIO_BUTTON (last_radio_button)); -+ last_radio_button = button; -+ gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (button), FALSE); -+ g_object_set_data (G_OBJECT (button), "cursor-size", GUINT_TO_POINTER (cursor_sizes[i])); -+ -+ gtk_container_add (GTK_CONTAINER (button), image); -+ gtk_grid_attach (GTK_GRID (grid), button, i, 0, 1, 1); -+ gtk_size_group_add_widget (size_group, button); -+ -+ g_signal_connect (button, "toggled", -+ G_CALLBACK (cursor_size_toggled), self); -+ -+ if (current_cursor_size == cursor_sizes[i]) -+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); -+ } -+ -+ gtk_widget_show_all (grid); -+} -+ - /* seeing section */ - - static gboolean -@@ -271,6 +333,45 @@ on_off_label_mapping_get (GValue *value, - return TRUE; - } - -+static gboolean -+cursor_size_label_mapping_get (GValue *value, -+ GVariant *variant, -+ gpointer user_data) -+{ -+ char *label; -+ int cursor_size; -+ -+ cursor_size = g_variant_get_int32 (variant); -+ -+ switch (cursor_size) -+ { -+ case 24: -+ /* translators: the labels will read: -+ * Cursor Size: Default */ -+ label = g_strdup (C_("cursor size", "Default")); -+ break; -+ case 32: -+ label = g_strdup (C_("cursor size", "Medium")); -+ break; -+ case 48: -+ label = g_strdup (C_("cursor size", "Large")); -+ break; -+ case 64: -+ label = g_strdup (C_("cursor size", "Larger")); -+ break; -+ case 96: -+ label = g_strdup (C_("cursor size", "Largest")); -+ break; -+ default: -+ label = g_strdup_printf (_("%d pixels"), g_variant_get_int32 (variant)); -+ break; -+ } -+ -+ g_value_take_string (value, label); -+ -+ return TRUE; -+} -+ - static void - add_separators (GtkListBox *list) - { -@@ -434,6 +535,23 @@ cc_ua_panel_init_seeing (CcUaPanel *self) - priv->interface_settings, - NULL); - -+ /* cursor size */ -+ -+ cursor_size_setup (self); -+ -+ g_settings_bind_with_mapping (priv->interface_settings, KEY_MOUSE_CURSOR_SIZE, -+ WID ("value_cursor_size"), -+ "label", G_SETTINGS_BIND_GET, -+ cursor_size_label_mapping_get, -+ NULL, NULL, NULL); -+ -+ dialog = WID ("cursor_size_dialog"); -+ priv->toplevels = g_slist_prepend (priv->toplevels, dialog); -+ -+ g_object_set_data (G_OBJECT (WID ("row_cursor_size")), "dialog", dialog); -+ g_signal_connect (dialog, "delete-event", -+ G_CALLBACK (gtk_widget_hide_on_delete), NULL); -+ - /* zoom */ - - g_settings_bind_with_mapping (priv->application_settings, "screen-magnifier-enabled", -diff --git a/panels/universal-access/left_ptr_24px.png b/panels/universal-access/left_ptr_24px.png -new file mode 100644 -index 0000000000000000000000000000000000000000..46f77601dea43e8a9a0739a145633b2218230f0e -GIT binary patch -literal 762 -zcmVVa0*6UN -zK~y-)m6I_@TTv8-KTT5`W71$_B`Q%w;-D_#P>~K!wNh{>3Y|(7B`BR*`#RbwL(EW@ -z2En1yDIgTZfI~rW5W%IOQ>%g^LX>ABrs|9F?-C^{wR)C&hx>o$Kj+*7U^h)O3b=tn -z?ifxUCq+}u~-@m&BeNos6t)YjIPH8V341-!QfxFpH#cB`eO -zMcdok*6i%;XW-Fo04_;#I294zX{ -zUe(mpsHv$*t*xyx3`40@>LeTvzsUz&YeXiK!LqDN=hD&=;c)o=z`($lP$<*|6rTew -zWd`JMIOOyBw7$N6rYn(7rw<~LNC#lQCa$io*5KfvJRXk>!_e~b@)i&TUIJafbD#-$ -za7kQSTdU2@&CLG({%K`prTl)s5{X2nudnYNP?hVrJ7>G_qUJy#z{0}9>GbsUkCl~` -zpTS@-dw6)r#KeTHzrX)Aa1TfW2f!cT>>~5d&Q4}@bo4vWIXpc4!Zb~*qM}0e_4P_7 -zlbP=B?pJ{G+MKi5Y&H^!d;^~4Hp;cSx;j5HGLrRry^6=<*4WtC1W}&bOhwdjU`cl;nVEz{-E~7sl3M3zH_@{r~^~07*qoM6N<$g72Pdm;e9( - -literal 0 -HcmV?d00001 - -diff --git a/panels/universal-access/left_ptr_32px.png b/panels/universal-access/left_ptr_32px.png -new file mode 100644 -index 0000000000000000000000000000000000000000..5d9ba96be4a15321c24a371038e7bbc3b0002a1b -GIT binary patch -literal 1081 -zcmV-91jhS`P)>|vIE)3aBCCE7t#9avL!gUkkF&v^B3q#m(LhCT!{oeQK=G~ZXo;;_1@Lav` -z`+1(@9#@js4?>U{$y8tQy$etO~>-8!kqSMpUgQljYcm5MtU0tmv -zA`(TB5{blt#bSB;nZZ0ZF)=}BXJZ!pz*4NiZHk*yk&(DS9H)z;SD -z3x~rqDwV1h!0nrWB^YB2J3BjYxm+@n$@D=a68TP{P#6I`_itbUBccMv7{lh~CI$xw -zxyHuEmPjP>4S<&bD4zsgTHIocF^2W^bqoy+ab~mmqphv2Q2;eh0xx03Q_aWP+8TU5 -zA7`~%?Hd~#UH}FFigIAdwqL~`%&COwPaS`q9 -z?GF|f7Cr}{%Y*WAm?(;ck2#J*TU#3x3I&u(B@_w;j*gCyNF=!K?(Q#VXJ@kxhvRzy -zj|%N%x7!IoA>?v7RaRD#!C;_BBtqAXTrQUj1Oi_GsFGiI0G&=J=I7_Z7{m1RG^|!D -zy1Kf4SYBTK4ZvRj1S#=j0Dk~bmaWX|^%4=$z`y{h)oQA#siFP-eIXi+J_OJXpaH-u -z0A2=Qly>&{5^QvIlmtPb!^6WrPfkt*tyW7qosL{C7cs`fo}M13)LIn)Zb=~nz+J+o -zrlyE7CXS7b1uYiKSJ`Zqx!rE6s;VNR(Ma)lT-e^;-U4v9Y~$y#-Q8Wv<#OW4$jDCs -zJ^}FV-rnBN$z+mgG#b+D_2lt*=;GpnwYIi?EFB41S&Zj-VR(4>M*#N$ybhq+R2omjK||lr_+(y -zY^GEyCHVdR6##FR+#q_rUbVWq`Wb-t0ho&JeGWi{*Xy-rGMUGzREp(tIWd_`KB}*; -ze*oaMtG&rdrRFR78^DEhMDov7ZnyixmX?{BA0PiEolfrq_#HqRfLM%iQYFP5 -zP&{r)$+XhHAS)pm0Ic|Z?uI`xSy6~mlqCKKwtYsZ`atu@00000NkvXXu0mjfq1E$r - -literal 0 -HcmV?d00001 - -diff --git a/panels/universal-access/left_ptr_48px.png b/panels/universal-access/left_ptr_48px.png -new file mode 100644 -index 0000000000000000000000000000000000000000..51b1dc2f726b2adc3fff54246b5b799a91db35b9 -GIT binary patch -literal 1766 -zcmV|1%~tnU`c<6t~+7CX>v}Gtd0@%Y7c6 -zn90Po*}ZTXEG!)PUlDZ!XY9`6Yj~`zK@FM_)0E`-AR(x0~ -z#=U#@x&XWb!2Nwf3#b{x!^3|TP}lbbwJESvDn*hU7#R4Y25MMos0!S_e?MheCdu@T -z8#jIrpbCIfKy@n)bT}M5a^#4zOkcl#{dWTDSV^b~wApMdEG*=S6DLTLvMkG2u3Y&X -zz&ZiVT?wcPv|6onI-T_Sd~9oLQ_eNj(a~{Sq>OzfpeoR0GSP0gbM@-g^!xp6Z*M0_ -zN|Ka{L?TB4RIUV61saV;=I7_r<#Ms8sE8#cCG70%BuOTd$;7#H=UM?&0I>Z(P!*Vy -zlS8xFOozikkH^D6Ai#=>3U+sQlO*Hu`25L}Cz}D311JEH^EOZwsMqV6mzT$af&#kT -zZWb38v$V97RaI5&>+4gXbH|S#{|$h$w}q-e0L;zJrNv^Q)9Iww>t!$)WJN^`QH_~0I1jNX)>AA6!H80EGsMHx^?SVQ&Yo{kr9$)EEbz? -zX=(WcK*@K7E&u|c!C;`(YNgBNqR;2!nl)=!Sy{>T>({fcu8yOlqa?{_H2QMSo;@D{ -zSo5aPj2bD+GScZZWLZ|HvW~~&2#3RX@ZbTgR;#nEt?i43hK7wo7>oc`WrJn}YGLVg -zdeJ%-i{aqGgP53@fX!xG-PzgMzH{f!YN5MXp&5ZBvwA7ZGG=CG(AwIHM~@!CZnt|c -zUcC6_)~#FL(RixQ1YNT1Eazo9oyPR^G!7j)geOm)!0mPiu3fv5@s%+3@f!Vy2 -zWf@abQwWE{c=qfW+-`SCcX#)f)z#G%LIM{-vliAj@luv$OioTB91df0auQyzx3aIV -z?~AgsvQiCHr$Dm;m+~sp`uX$cIC}IbUcP(@zu&)pXlUpU!CJ@^);Jbr^gKaLC%P%BQE#Qk1UpsX=9gRk#s;}kc<(!(D;+u|%iHTve -z*}PF{KbQ58Kg(xo>R>a}av{`~&^`=^XXqYZ#TCp`Qg0O)j?1!DK^-RSM@ -zh0$n)!C-*LQ0OxN?~BS&DEe8am=1Ai%tG8V1J9m4tMoH+EEY?UWPN?T+Jg9eKKAtV -zkR(S&Muq`w2H+PP=Zejhxk@Vl3xGPEPVLx|$)p?(hp%^ab$uXyWLKY$HUE= -zH&d2nCK8EcU0q$H2wj0jytQ+2J=E!RJb(VY7WNf@PXmEK)7;!#lq5r;keVVzMMb=I -z>lR6}zrVi^z|R19mTQ_-;DrkpNRo*}BGuB;as|L|0qg+q{^;oFC6XK*9Hhl!p~K;z -z*Xw0NLxa+G#LCOdKNhW|HJggrw22yz$ED`x=F8&deIOn+foV{p8zxg_=PwVm$=TJ@$vDCBzg1Z%>`Zh -zzJ2>hlH=p!;{dh+2m;7ksvZ&mlF8)!fddC39UUFF0sIrdzeS=(MMBS>K7G1flBD@i -zD1@4t8dZTLNdf@m=H}*!Te@Tc27r7?l4gz_JJt%|*8sMNcZ5UpHq?m_6+V3Uu!|(e -z#>Uv#*vKfj^M0C}!zaMns&z9}mw^vV3 -zPd|QLq=$xv?(6mXW?^t(sgNp`TZBbv0CNE50i=|0Yrf3^P_S#)uIi?yroB$5bM1>4 -zFXnrCdj1}XME)l9@?YXN3P65s57lx-4Jbg1KGYM8zP!pBK@I3s}Z|-sZWbKv!urlENEVOe|&ew@NkcY$HW^Hvj+t07*qo -IM6N<$g64`j8 -zK~z}7&6$62RMi#7KfBpLl4Y}OLVo`u8ces8Snv-NP^f5sSddc3U=1`Rng*;*15$s~ -zI56O#)Qnq0bO0v;!%!yE5Sz>dC&G+tW+G^HqB6rMqs0zl8WJ~~ADe78yYKW5?`~g0 -zvSj&X@64Iqef!>hpZ7iIo_p_k0EozH{*T&p5gGaX^UogwW&tySIKTuL0mF?3iW3nD -z1Omg&&CTn8*+4R22BN(yu5rp@WUGo6#{B%YLbSAh7i=? -z;Gk>$`t=V3b`|JxHv%dI)Y#Z4$;rvm+}s?38Wf?U9+%TZC+3d%VCfF4NGH2V7bShsE+XU?1fASERw -zueG)H6}#P@eLd#AunGmu?RHaAQo@&CehENoYHI%5Z@=xx$;ru5P}eM*PYFoVG`hRH -zDJd!8>#x5CATu*_URzt+%bA&(nL4Ge8tSqx(_3d}C&k6Zbar+Eke!|VW2e)(%Vx8s -zDX7@1g^CDB(=;wzxIkH189hBc0Ni}@%?sPx+jqpo#H6Y~kG-07a0yU2w*~FoxpS14 -zm*aN30kGTc%Rc<@!|f)MDH*Wp+!ryFaiW8l1JX2&vuDq;VZ#Rc`}+ZyJ9qB#_uqfN -zN=+|To%x86>jI>pwlTk-q-0NiuWJ;lw<&5!EbHzg=zINC^|+S=OKzI{7^Kmfq7a^=bm -zZ@&3vaU@EG1&RbFXile->gsAl1i*0r{r5k9`0(L1I;iQo$=DDP(3L{H_10TB91cVT -zqtR$wvu4efef##U1`+{_Qffk|>jI={8Z9j??A^N;fT*absM6BXKkwPIXQfhVQYhn8 -za>JEEH8wVK=+L1clRoI?6c3_2_%e%GEQ}lxf&pVy1F`A -zT3WsUfcAfjC0Y=l+0>#J2^WuvyVl)~@%`98CEb=-~T-;2D!|}4;@87t8|Nf7G -zfbmL!^!D0ouU+vP+H5w@s;Q}|DJ?C%35YXA+QE_~OE`J*z$l<8x1c^Xz^BgX1-=DL5h?WKlTUK|_;K>`@+MWuXfztOZQHg0 -z7yx>J3&6jDf9dR;vhzR};0A^O|CE8YZr#eRUAu^iisGrKp1K66wY8NmzW4%w#ful) -z@3`ZR7@$wx@VtULr-S-R9UBkzzpZqAeZ2&uU2i*g?i^Fl8XX-KyWK8kvsq@&oGD33 -zNs^Y9CR?^_37vD|#0e+x0I(3aNiA&?)b2!YRyFCG)e18_&`U496uOC~X`%0Lyzz#_ -z#>Pr~e7qzkCQ3?5isa_zN@r(hunIRaZ{ED$0gHef-I^$R0y8O#niR-jFo?t9(AOSE -zAA9Vv#;&feZ-dpg{QP{GF=K|qUR9j1skzIjo4Y2m -zOMwgqgY4eDTVHb=EiW%W0z6k!Q}g%W@x6QZN?cr=Sglq`OiYy2)KtmO&li`=6)X!5 -zW@l#?0k;8ZYI}6q!o(OLgTWxLzWS;j##dHWb_n8GyKr%xYL6C@QC6_;f1;1(M&n9XLhE)RtrX$c}C!^6Yfg@uJr0L8$sfjd?HNE%nR -zGpfauZQ;U&1zxYWS45=0zhAPlvczh&N^)|tR8>_;AP^7{k*=<;9^g?Ghru|Sv{*XR -z=ks0IxN+lyz|Vo7DQV{@e~&N!8q^cU0qGxo^wBFpzg)a{QQmpy9qI1w4uyc<@7FeM -z+O!||t$N5D<@!m1EVZ?@3)MS~1!^Sas-@**wP-_7CA-}|*X?$nl?j^H>-AMvSN{We -z9Qc(Q`l;cDeiUFlcI;R`5CDc%tPH5{qv|-iwG8@>dU|@aQ>RX~<>uxZ&1Q3=&*$^I -zTrT&!@4owSSy@?qU0q!Va8bo#kLuf}>vv2uCsbNb$~&qbkw*UBMKle!J2x)_Fu0HG1 - -literal 0 -HcmV?d00001 - -diff --git a/panels/universal-access/left_ptr_96px.png b/panels/universal-access/left_ptr_96px.png -new file mode 100644 -index 0000000000000000000000000000000000000000..5897a7c3d03a87d018184fbcc2a23ade15ad6a02 -GIT binary patch -literal 3995 -zcmX9>2{=^W`@f83tV6O>gNp1$c4N-W -zk$r9K{ut)uCPzum4B>TvK -z9fggqraEx>@5MFczXM08JhYy?000`Me~ko4O=klKDZRAyH7MsHlvL7?Uc0qz0DuW- -ztE(8l`n8$iYiK-{Noc8&PR&c>R#)NO&DM%h`#9HTyA&F7C97OqEhguoSn$1XG;AMw -zg6Q{${Z3+N67+f*(ixaFwIj6k;3l^;pr`^irkGtLIl)%-cag#s+jRQG6eStf{-)Py -zaH;7a;v?^)MLP3NcSv;QUe19tHmEKmMt%Ci|%B`a9C@&m98dptbqH(kDY0#KeM -zMb(H0qY)V$V`F2nq;L@tk?r-vlL-JrLI&)R%~9j2f~bQ?0nKRPY6c_{>C^TDsdRoo -zALId4lJo#`uH+bS!pFx4$(vC0s5Fywhb*WLz}P_-1>`dN(zLWpOiU0#0>J(axPU!W -z>WZ|q^mQAJuI}zx(z5sUH&`(D!%*@-vmM!O5s~wI(Ekhr89cqc5Bd0_>k0~1TLj2v -zxP3bro>StjzU$DRT5RhqChQ8;CVFD^A^hUotQKO{@CJ%YXkKCdxBU5Gz -zouk5QgrRH!OG`_;&0k-0TUx9DYY&fsZH()0U(ohUWKH#zMlT+o6=IT6e(AZ -zlsmQ*on2iOK?7i%;!{&kkN^wF3mLwnqoa-b6Ee#HgTZJS7+}dmGBY!i4%f#nN${#b -zOE$xlJ=B(LZev4lYHEtCHMs_pBJnJtu~C5rIz2tDFV?uzMnTagNv$HJR*M7-3=F=R -z;wfxrs2zG!HK?hnh2dUaUc>x1ZYUsmdOk56Ty4wE8Za7PR}FbPZzGjvEtMvMm~8Tw -zoUKOHkaC}i>FUx^;SLN8Y`HBYB!88ILoT*FM4Qf9wH97z3xPn!>%E0U -zEgJ<22(z9@bMo -zbKjtRfE;fX;ewJ9(Z+*8-J|*N>tu(aAtA!e9`kKk>FMc>$@mS)6u7{~>(*0Gm5tre -zQPbSq+_}G-lbDmXwzedzdapmTCW49iP>iwOTap+l?nJrKsi~OZVdLSE5vny>7!3XS -z^XE0IKSA7SAES6YV2VMfvE&PjbaZrD+S)2=YQea^h=_>UEG0A|R&_w7cFnC#)q^eQ -zXSHA9;^E=pc$E{AnVA{cp{Pau!SUYS9-2kvEr-N{9bg+n9&miTl2vZs%>srUx`vI7 -zoi;QxtB-#Q8@rn{Cmhc$%Y|u+XT4rTa|Io^+{K)m -zpZ^Ud4uyZQY?9j?E__&&l03)Dn9NPxnhktU#p=BITvGDAFGJp1l4JW^CRDZDZMq)a -z3Fc=Fsmi<~lv?u?Uk(Dpf$Ws|Y+EMleVRW>)XBRmD=RC(&%eU%KsFNUsY$;nBF}{n -z{)bIaNT}R>7LnZRz=9FHdGqG}Tx&2|$eN127klgK|KRs$$cJxiJZDf1E6sUOC^=c} -zdb&T;91t@{P&%Yg9tQm8IXmsY`N9i!$!sy?fDUOTcRI`s7-ZR$B1r -zL4j&5%{(kCE9+vf^z2o0-JGAb8#7I(BUM#ZEsRev@A%-LCkuM85afr4__ZE@b -zB-5f1d+^E2%~jZPgfd+TDwcCPE5~3+8;LXim~~ls`Sr@mN?7sJ8c{voTLPQp)~Y0B -zCUSx%d;9yIzkAqQ?^#$_G|l*}7jJ+YtnNw@>H}2<6$DjPj{1TF=EloykCxsc+Zh6| -z*A)E(K=mSP(+(_5WPwovPxEp%?lfPdr*lQ$)AVaX;L6IxT_!5*CD@^Te}lxcffz{z -zYnq}t9xg<{xJ_?-e*Q|&!otEBn6|;F*QUL{?}{3Oi=Q_%G;oe56&uD}TqNq;e6MrU -zSa4*=rMf3Yf)e~QqREQm^44_2z3vZUvoFt24&?xDzz<*pXo1zNJr+1KO}j`#bu|m< -zy7-@~l2VH-_(cf{)3VTf)Q%wuTW818(o)RiA%v9lniBfrtQCiY!;F*zUjb*SN-bW0 -zu7Eq?J5w8z75e-TVP$3YVV6wYn&`zBg75E#>Feto3S3PP|L?^MMs{}D0BolnuWpjC -ztoQChhr?PWCBWu%2Li8BKKKBLld$CmHp7%zgADv)I7`2OPA&kdT_?l(5vR0VgeS4& -zAggC?c{*sN8Q8I#O!tKKQIjyW#0dMB!=H_2SMMViRF){TUF4q`o{Jk4hHTsdt -z+r;759%ahGkk%Um3!3p7_blaOK-_&s;fs0QptGinhX(^8?mBBa)Aj4u+1c0%9Nv%V -zpZiiSCX5fN>I#L98npBWFOuld$NT9dIC&>54`i#E`uLn|HEc(i7BMTh^dRinIXHC8 -zo<1dCNk_b{hvMY`Pk_K!`|=FMMg&Eo0gdSnm4BDsH(Q@FcBAGl}I6w&YwA&&-(iMGMR-;xgcef_^i)GMWy8gG4ooKHTgyo -zrIC@59SWsvxZ+aU^p_%N*4B}js7Z2Uc!}VtmMin8H55$z(ce#q7HbwbY6P=b`u6QV -zoBs+csjPA^r)negSy{y_W0I5Eipp^%CG_AakMSETv1mx37>dv2Ni(zQB^`FYcRUvi -z6E+J3mH3&SUJoOX0!Tr|p>x|L3h2|no822eLV|)IKVR#2HJ?BK(&1*Fl9ED6as%bq -z63LKC73s5(`ilkk)6wJPz)68P^#apB`RkY5qhd4f&lMGW&rq@^8D7KVb3ryYVDC2~FIZuKw}k$0ga0J1_`*p)9+C -zcXx7$1sEm<26l=aS1dX=-H%Y|$;pnM#j%{yTcl;AYMc>Dm~2IzjQP3PZ<{tGTm&8- -z9+jOZwzjrU0|L%E!336zyyna)!VSpvr^~(wQIr-Hr3cw1-ZO6UULQ62_!#H#KJNB5 -z=CPBbqhn-rw7lo>-m)Br$0S=vjReG65%3!v9Bg)Wayk}zs_Ex<67hmU6U)U2b5baO -zK2ZS(wT@fs4sX)Wf#-^Td3pKqqf$%Ps*h))auFj!jDn+Sd5L0 -z=f1~s5(5iVvtJ!Af5<7E{Aq(ZqlATKBwAhP!npxk{?^!oQfpAvR(?%R -zmX^7>60qESTZ%Vk&Th-d$V3RvM0%=p6(*BEp*sOoQN|Ba0c3&<# -z9VOt~N)}r5vD4{BWxvf#qpzv0iobuu+%;oC<}8vzc3@#UtL|jJlZ8( -zPh(rIiNyslNr?6%nK?lGi0#$Y+CH;Zu)ery@z$*Pdl(%j8F9B;tfgvUrXJb6jBJAU -zcutj(OWwO@5sSsn_^*!^-@4Vm@)RB3o-AMbYS(-d0KV0|SRpelbLiy=2@j_+AJ~|v -zGU_qx<|CkP!=UUC^e&z?Pd;qQOiQBY7|F^j%zN=R*p7i@S}ed0Ei -z=D++D5nrpxd^lOc5&ONeuC7iie<*a%%F*3jQ(K#gmI9I)u&1r?cifhRc(7SBd$Ijd -zBN}Vt*cG1@_&kqjjeFZWYQCC#1-x(cgSELBi>NubZg^3 -zaYJKq1D?k}w=msm1BUj;5NL5>p{ydu@}ozO#=^qFE<&+)&LNw0Vjpc)5!h=?9HlgS -z(JABfaVedSM-#W+{n%s>BK}Y_9Fm&`UL_?ZUD$eg9YmWIj|MBYI!dOx%`_fAR8eV_ -zE^R(pvtq9y#7XS7wuH~Xl-BKih!U2-kpX?$8l#c3><_X@tJ8TdCYs@^W%NPemZijr -zDyN~3Z{NPvg!1&&xJ|DiUT%yRfB$|TQ9yjC;d4hDP@3-(mF2~vfB|Y*`n~a -z)F+6<<o;ovqdht=&<$02|wa{SC6Vyf6o< -p4&;Tw2jPkzywU$mckcU3O4qYJ*qKyxICzZ)v^5OWOH@&q{{x(hmxBNR - -literal 0 -HcmV?d00001 - -diff --git a/panels/universal-access/uap.ui b/panels/universal-access/uap.ui -index 636b7740d..ab0c0c4a7 100644 ---- a/panels/universal-access/uap.ui -+++ b/panels/universal-access/uap.ui -@@ -224,6 +224,53 @@ - - - -+ -+ True -+ True -+ -+ -+ True -+ False -+ -+ -+ True -+ False -+ 20 -+ 20 -+ 6 -+ 6 -+ C_ursor Size -+ True -+ 0 -+ -+ -+ True -+ True -+ 0 -+ -+ -+ -+ -+ True -+ False -+ 20 -+ 20 -+ 6 -+ 6 -+ 24 pixels -+ 1 -+ -+ -+ False -+ True -+ 1 -+ -+ -+ -+ -+ -+ -+ - - True - True -@@ -952,6 +999,7 @@ - - - -+ - - - -@@ -962,6 +1010,69 @@ - - - -+ -+ False -+ 5 -+ Cursor Size -+ False -+ True -+ dialog -+ -+ -+ False -+ vertical -+ 2 -+ -+ -+ False -+ -+ -+ False -+ False -+ 0 -+ -+ -+ -+ -+ True -+ False -+ 12 -+ 6 -+ 6 -+ 6 -+ Cursor size can be combined with zoom to make it easier to see the cursor. -+ True -+ 45 -+ 0 -+ -+ -+ False -+ True -+ 0 -+ -+ -+ -+ -+ True -+ False -+ -+ -+ False -+ True -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ False -+ -+ -+ - - False - 5 -diff --git a/panels/universal-access/universal-access.gresource.xml b/panels/universal-access/universal-access.gresource.xml -index bc07b356f..d7f2e337a 100644 ---- a/panels/universal-access/universal-access.gresource.xml -+++ b/panels/universal-access/universal-access.gresource.xml -@@ -3,5 +3,10 @@ - - uap.ui - zoom-options.ui -+ left_ptr_24px.png -+ left_ptr_32px.png -+ left_ptr_48px.png -+ left_ptr_64px.png -+ left_ptr_96px.png - - --- -2.12.0 - - -From 4196874fcd6ed1ceac1923065d9bda2dce67fbe2 Mon Sep 17 00:00:00 2001 -From: Bastien Nocera -Date: Thu, 9 Mar 2017 12:44:25 +0100 -Subject: [PATCH 4/4] universal-access: Handle "pixels" plural correctly - -Using g_dngettext() as required. - -https://bugzilla.gnome.org/show_bug.cgi?id=779798 ---- - panels/universal-access/cc-ua-panel.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/panels/universal-access/cc-ua-panel.c b/panels/universal-access/cc-ua-panel.c -index 1985f7718..f0928555e 100644 ---- a/panels/universal-access/cc-ua-panel.c -+++ b/panels/universal-access/cc-ua-panel.c -@@ -363,7 +363,11 @@ cursor_size_label_mapping_get (GValue *value, - label = g_strdup (C_("cursor size", "Largest")); - break; - default: -- label = g_strdup_printf (_("%d pixels"), g_variant_get_int32 (variant)); -+ label = g_strdup_printf (g_dngettext (GETTEXT_PACKAGE, -+ "%d pixel", -+ "%d pixels", -+ cursor_size), -+ cursor_size); - break; - } - --- -2.12.0 - diff --git a/SOURCES/display-fix-multi-monitor-layout.patch b/SOURCES/display-fix-multi-monitor-layout.patch new file mode 100644 index 0000000..cb4430c --- /dev/null +++ b/SOURCES/display-fix-multi-monitor-layout.patch @@ -0,0 +1,403 @@ +From 38318c7e6fdc8e4035cb75f13a1e66ea3e05eebc Mon Sep 17 00:00:00 2001 +From: Rui Matos +Date: Mon, 13 Nov 2017 17:28:44 +0100 +Subject: [PATCH 1/2] display: Remove automatic layout adjustments + +As the comment hinted at, fixing layouts automatically to ensure their +applicability doesn't actually work in all cases and in fact may force +users to redo their layout completely after a seemingly small change. + +So, let's stop pretending we can do it and instead leave it to users +to fix it manually. + +https://bugzilla.gnome.org/show_bug.cgi?id=789711 +--- + panels/display/cc-display-config-dbus.c | 89 --------------------------------- + 1 file changed, 89 deletions(-) + +diff --git a/panels/display/cc-display-config-dbus.c b/panels/display/cc-display-config-dbus.c +index 48e0145ee..26dbcdf45 100644 +--- a/panels/display/cc-display-config-dbus.c ++++ b/panels/display/cc-display-config-dbus.c +@@ -331,8 +331,6 @@ static void + cc_display_config_dbus_append_right (CcDisplayConfigDBus *self, + CcDisplayLogicalMonitor *monitor); + static void +-cc_display_config_dbus_ensure_gapless (CcDisplayConfigDBus *self); +-static void + cc_display_config_dbus_make_linear (CcDisplayConfigDBus *self); + + +@@ -447,7 +445,6 @@ cc_display_monitor_dbus_set_active (CcDisplayMonitor *pself, + else if (self->logical_monitor && !active) + { + cc_display_monitor_dbus_set_logical_monitor (self, NULL); +- cc_display_config_dbus_ensure_gapless (self->config); + } + + g_signal_emit_by_name (self, "active"); +@@ -476,9 +473,6 @@ cc_display_monitor_dbus_set_rotation (CcDisplayMonitor *pself, + if (self->logical_monitor->rotation != rotation) + { + self->logical_monitor->rotation = rotation; +- /* See comment in ensure_gapless() for why we disregard the +- existing layout here. */ +- cc_display_config_dbus_make_linear (self->config); + + g_signal_emit_by_name (self, "rotation"); + } +@@ -644,28 +638,13 @@ cc_display_monitor_dbus_set_mode (CcDisplayMonitor *pself, + { + CcDisplayMonitorDBus *self = CC_DISPLAY_MONITOR_DBUS (pself); + CcDisplayMode *mode; +- int w1, w2, h1, h2; + + g_return_if_fail (new_mode != NULL); + +- if (self->current_mode) +- cc_display_mode_get_resolution (self->current_mode, &w1, &h1); +- else +- w1 = h1 = 0; +- + mode = cc_display_monitor_dbus_get_closest_mode (self, CC_DISPLAY_MODE_DBUS (new_mode)); +- if (mode) +- cc_display_mode_get_resolution (mode, &w2, &h2); +- else +- w2 = h2 = 0; + + self->current_mode = mode; + +- /* See comment in ensure_gapless() for why we disregard the +- existing layout here. */ +- if (w1 != w2 || h1 != h2) +- cc_display_config_dbus_make_linear (self->config); +- + if (!cc_display_mode_dbus_is_supported_scale (mode, cc_display_monitor_get_scale (pself))) + cc_display_monitor_set_scale (pself, cc_display_mode_get_preferred_scale (mode)); + +@@ -714,9 +693,6 @@ cc_display_monitor_dbus_set_scale (CcDisplayMonitor *pself, + if (self->logical_monitor->scale != scale) + { + self->logical_monitor->scale = scale; +- /* See comment in ensure_gapless() for why we disregard the +- existing layout here. */ +- cc_display_config_dbus_make_linear (self->config); + + g_signal_emit_by_name (self, "scale"); + } +@@ -1553,28 +1529,6 @@ add_y_delta (gpointer d1, gpointer d2) + m->y += delta; + } + +-static int +-logical_monitor_height (CcDisplayLogicalMonitor *lm) +-{ +- CcDisplayMonitorDBus *monitor; +- CcDisplayModeDBus *mode; +- GHashTableIter iter; +- int height; +- +- g_hash_table_iter_init (&iter, lm->monitors); +- g_hash_table_iter_next (&iter, (void **) &monitor, NULL); +- mode = CC_DISPLAY_MODE_DBUS (monitor->current_mode); +- if (logical_monitor_is_rotated (lm)) +- height = mode ? mode->width : 0; +- else +- height = mode ? mode->height : 0; +- +- if (monitor->config->layout_mode == CC_DISPLAY_LAYOUT_MODE_LOGICAL) +- return round (height / lm->scale); +- else +- return height; +-} +- + static void + cc_display_config_dbus_ensure_non_offset_coords (CcDisplayConfigDBus *self) + { +@@ -1624,49 +1578,6 @@ cc_display_config_dbus_append_right (CcDisplayConfigDBus *self, + g_list_free (x_axis); + } + +-static void +-cc_display_config_dbus_ensure_gapless (CcDisplayConfigDBus *self) +-{ +- GList *x_axis, *y_axis, *l; +- +- if (g_hash_table_size (self->logical_monitors) == 0) +- return; +- +- x_axis = g_hash_table_get_keys (self->logical_monitors); +- x_axis = g_list_sort (x_axis, sort_x_axis); +- y_axis = g_hash_table_get_keys (self->logical_monitors); +- y_axis = g_list_sort (y_axis, sort_y_axis); +- +- /* This might produce overlaps which will fail validation. +- Unfortunately, automating this to avoid gaps and overlaps with +- arbitrary rectangles is a hard problem and we'd probably not find +- the layout the user wants anyway. We'll need a panel re-design +- that allows manual layout adjustments after monitor operations +- and before applying. */ +- for (l = x_axis; l != NULL && l->next != NULL; l = l->next) +- { +- CcDisplayLogicalMonitor *m = l->data; +- CcDisplayLogicalMonitor *n = l->next->data; +- int mx2 = m->x + logical_monitor_width (m); +- +- if (n->x > mx2) +- n->x = mx2; +- } +- +- for (l = y_axis; l != NULL && l->next != NULL; l = l->next) +- { +- CcDisplayLogicalMonitor *m = l->data; +- CcDisplayLogicalMonitor *n = l->next->data; +- int my2 = m->y + logical_monitor_height (m); +- +- if (n->y > my2) +- n->y = my2; +- } +- +- g_list_free (x_axis); +- g_list_free (y_axis); +-} +- + static void + cc_display_config_dbus_make_linear (CcDisplayConfigDBus *self) + { +-- +2.14.2 + +From 377f1effdd2c04005024cb621993b0175ea009ac Mon Sep 17 00:00:00 2001 +From: Rui Matos +Date: Tue, 14 Nov 2017 17:02:39 +0100 +Subject: [PATCH 2/2] display: Ignore disabled and closed builtin panels in + layout geometry + +Extend the existing checks for this kind of outputs to the layout +geometry routines. +--- + panels/display/cc-display-panel.c | 90 +++++++++++++++++++++++++-------------- + 1 file changed, 58 insertions(+), 32 deletions(-) + +diff --git a/panels/display/cc-display-panel.c b/panels/display/cc-display-panel.c +index 32e5102de..071e98689 100644 +--- a/panels/display/cc-display-panel.c ++++ b/panels/display/cc-display-panel.c +@@ -144,13 +144,13 @@ make_output_ui_name (CcDisplayMonitor *output) + } + + static void +-ensure_output_numbers (CcDisplayConfig *config) ++ensure_output_numbers (CcDisplayPanel *self) + { + GList *outputs, *l; + GList *sorted = NULL; + gint n = 0; + +- outputs = cc_display_config_get_monitors (config); ++ outputs = cc_display_config_get_monitors (self->priv->current_config); + + for (l = outputs; l != NULL; l = l->next) + { +@@ -165,15 +165,20 @@ ensure_output_numbers (CcDisplayConfig *config) + { + CcDisplayMonitor *output = l->data; + gchar *ui_name = make_output_ui_name (output); ++ gboolean lid_is_closed = (cc_display_monitor_is_builtin (output) && ++ self->priv->lid_is_closed); + + g_object_set_data (G_OBJECT (output), "ui-number", GINT_TO_POINTER (++n)); + g_object_set_data_full (G_OBJECT (output), "ui-number-name", + g_strdup_printf ("%d\u2003%s", n, ui_name), + g_free); + g_object_set_data_full (G_OBJECT (output), "ui-name", ui_name, g_free); ++ ++ g_object_set_data (G_OBJECT (output), "lid-is-closed", GINT_TO_POINTER (lid_is_closed)); + } + +- g_object_set_data_full (G_OBJECT (config), "ui-sorted-outputs", sorted, (GDestroyNotify) g_list_free); ++ g_object_set_data_full (G_OBJECT (self->priv->current_config), "ui-sorted-outputs", ++ sorted, (GDestroyNotify) g_list_free); + } + + static void +@@ -1397,6 +1402,32 @@ make_arrangement_row (CcDisplayPanel *panel) + return row; + } + ++static gboolean ++is_output_useful (CcDisplayMonitor *output) ++{ ++ return (cc_display_monitor_is_active (output) && ++ !g_object_get_data (G_OBJECT (output), "lid-is-closed")); ++} ++ ++static guint ++count_useful_outputs (CcDisplayPanel *panel) ++{ ++ CcDisplayPanelPrivate *priv = panel->priv; ++ GList *outputs, *l; ++ guint active = 0; ++ ++ outputs = cc_display_config_get_monitors (priv->current_config); ++ for (l = outputs; l != NULL; l = l->next) ++ { ++ CcDisplayMonitor *output = l->data; ++ if (!is_output_useful (output)) ++ continue; ++ else ++ active++; ++ } ++ return active; ++} ++ + static void + primary_label_sync (GtkWidget *label, + CcDisplayConfig *config) +@@ -1465,6 +1496,9 @@ show_primary_chooser_dialog (CcDisplayPanel *panel) + GtkWidget *row, *check; + gchar *text; + ++ if (!is_output_useful (output)) ++ continue; ++ + check = gtk_image_new (); + gtk_image_set_from_icon_name (GTK_IMAGE (check), "object-select-symbolic", GTK_ICON_SIZE_MENU); + if (!cc_display_monitor_is_primary (output)) +@@ -1518,26 +1552,6 @@ replace_current_output_ui (GtkWidget *frame, + g_clear_object (&priv->rows_size_group); + } + +-static guint +-count_active_outputs (CcDisplayPanel *panel) +-{ +- CcDisplayPanelPrivate *priv = panel->priv; +- GList *outputs, *l; +- guint active = 0; +- +- outputs = cc_display_config_get_monitors (priv->current_config); +- for (l = outputs; l != NULL; l = l->next) +- { +- CcDisplayMonitor *output = l->data; +- if (!cc_display_monitor_is_active (output) || +- (cc_display_monitor_is_builtin (output) && priv->lid_is_closed)) +- continue; +- else +- active++; +- } +- return active; +-} +- + static GtkWidget * + make_arrangement_ui (CcDisplayPanel *panel) + { +@@ -2015,7 +2029,7 @@ make_two_output_ui (CcDisplayPanel *panel) + + if (cc_display_config_is_cloning (priv->current_config) && show_mirror) + gtk_stack_set_visible_child_name (GTK_STACK (stack), "mirror"); +- else if (count_active_outputs (panel) > 1) ++ else if (count_useful_outputs (panel) > 1) + gtk_stack_set_visible_child_name (GTK_STACK (stack), "join"); + else + gtk_stack_set_visible_child_name (GTK_STACK (stack), "single"); +@@ -2052,7 +2066,7 @@ make_output_switch (CcDisplayPanel *panel) + button, G_CONNECT_SWAPPED); + output_switch_sync (button, priv->current_output); + +- if ((count_active_outputs (panel) < 2 && cc_display_monitor_is_active (priv->current_output)) || ++ if ((count_useful_outputs (panel) < 2 && cc_display_monitor_is_active (priv->current_output)) || + (cc_display_monitor_is_builtin (priv->current_output) && priv->lid_is_closed)) + gtk_widget_set_sensitive (button, FALSE); + +@@ -2197,7 +2211,7 @@ on_screen_changed (CcDisplayPanel *panel) + + priv->current_config = current; + +- ensure_output_numbers (current); ++ ensure_output_numbers (panel); + ensure_monitor_labels (panel); + + priv->current_output = NULL; +@@ -2206,8 +2220,7 @@ on_screen_changed (CcDisplayPanel *panel) + { + CcDisplayMonitor *output = l->data; + +- if (!cc_display_monitor_is_active (output) || +- (cc_display_monitor_is_builtin (output) && priv->lid_is_closed)) ++ if (!is_output_useful (output)) + continue; + + priv->current_output = output; +@@ -2261,6 +2274,9 @@ get_total_size (CcDisplayPanel *self, int *total_w, int *total_h) + CcDisplayMonitor *output = l->data; + int w, h; + ++ if (!is_output_useful (output)) ++ continue; ++ + get_geometry (output, NULL, NULL, &w, &h); + + if (cc_display_config_is_layout_logical (self->priv->current_config)) +@@ -2287,7 +2303,7 @@ compute_scale (CcDisplayPanel *self, FooScrollArea *area) + + get_total_size (self, &total_w, &total_h); + +- n_monitors = g_list_length (cc_display_config_get_monitors (self->priv->current_config)); ++ n_monitors = count_useful_outputs (self); + + available_w = viewport.width - 2 * MARGIN - (n_monitors - 1) * SPACE; + available_h = viewport.height - 2 * MARGIN - (n_monitors - 1) * SPACE; +@@ -2357,6 +2373,9 @@ list_edges (CcDisplayPanel *panel, GArray *edges) + { + CcDisplayMonitor *output = l->data; + ++ if (!is_output_useful (output)) ++ continue; ++ + list_edges_for_output (output, edges, should_scale); + } + } +@@ -2562,6 +2581,10 @@ output_overlaps (CcDisplayMonitor *output, CcDisplayPanel *panel) + for (l = outputs; l != NULL; l = l->next) + { + CcDisplayMonitor *o = l->data; ++ ++ if (!is_output_useful (o)) ++ continue; ++ + if (o != output) + { + GdkRectangle other_rect; +@@ -2584,6 +2607,10 @@ config_is_aligned (CcDisplayPanel *panel, GArray *edges) + for (l = outputs; l != NULL; l = l->next) + { + CcDisplayMonitor *output = l->data; ++ ++ if (!is_output_useful (output)) ++ continue; ++ + if (!output_is_aligned (output, edges)) + return FALSE; + +@@ -2767,7 +2794,7 @@ on_output_event (FooScrollArea *area, + return; + } + +- n_monitors = g_list_length (cc_display_config_get_monitors (self->priv->current_config)); ++ n_monitors = count_useful_outputs (self); + + /* If the mouse is inside the outputs, set the cursor to "you can move me". See + * on_canvas_event() for where we reset the cursor to the default if it +@@ -2929,8 +2956,7 @@ on_area_paint (FooScrollArea *area, + CcDisplayMonitor *output = list->data; + GdkRectangle viewport; + +- if (!cc_display_monitor_is_active (output) || +- (cc_display_monitor_is_builtin (output) && self->priv->lid_is_closed)) ++ if (!is_output_useful (output)) + continue; + + cairo_save (cr); +-- +2.14.2 + diff --git a/SOURCES/distro-logo.patch b/SOURCES/distro-logo.patch index 65a2cb4..57e9ad3 100644 --- a/SOURCES/distro-logo.patch +++ b/SOURCES/distro-logo.patch @@ -1,4 +1,4 @@ -From 12c6bf272242bff469627013ed1e566429b6a571 Mon Sep 17 00:00:00 2001 +From 73be5fcb0764cb8e7bdcbcf3ee06b833078d576a Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 31 Mar 2013 20:28:19 -0400 Subject: [PATCH] info: Switch around GNOME and distro information @@ -8,276 +8,92 @@ information in the small print. https://bugzilla.gnome.org/show_bug.cgi?id=695691 --- - panels/info/cc-info-panel.c | 55 +++++++++++++++++--------------- - panels/info/info.ui | 77 ++++++++++++++++++++++++++++++++------------- - 2 files changed, 84 insertions(+), 48 deletions(-) + panels/info/cc-info-overview-panel.c | 7 ++----- + panels/info/info-overview.ui | 14 ++++++++------ + 2 files changed, 10 insertions(+), 11 deletions(-) -diff --git a/panels/info/cc-info-panel.c b/panels/info/cc-info-panel.c -index 79729dd..bc3789f 100644 ---- a/panels/info/cc-info-panel.c -+++ b/panels/info/cc-info-panel.c -@@ -455,42 +455,23 @@ static char * - get_os_type (void) +diff --git a/panels/info/cc-info-overview-panel.c b/panels/info/cc-info-overview-panel.c +index 7a5879c6b..ce15e92d0 100644 +--- a/panels/info/cc-info-overview-panel.c ++++ b/panels/info/cc-info-overview-panel.c +@@ -446,7 +446,7 @@ static char * + get_os_name (void) { GHashTable *os_info; -- gchar *name, *result, *build_id; -- int bits; -+ gchar *name, *result, *version; +- gchar *name, *version_id, *pretty_name, *build_id; ++ gchar *name, *version_id, *build_id; + gchar *result = NULL; + g_autofree gchar *name_version = NULL; - os_info = get_os_info (); +@@ -457,12 +457,9 @@ get_os_name (void) - if (!os_info) - return NULL; + name = g_hash_table_lookup (os_info, "NAME"); + version_id = g_hash_table_lookup (os_info, "VERSION_ID"); +- pretty_name = g_hash_table_lookup (os_info, "PRETTY_NAME"); + build_id = g_hash_table_lookup (os_info, "BUILD_ID"); -- name = g_hash_table_lookup (os_info, "PRETTY_NAME"); -- build_id = g_hash_table_lookup (os_info, "BUILD_ID"); -+ name = g_hash_table_lookup (os_info, "NAME"); -+ version = g_hash_table_lookup (os_info, "VERSION_ID"); - -- if (GLIB_SIZEOF_VOID_P == 8) -- bits = 64; -- else -- bits = 32; -- -- if (build_id) -+ if (name && version) - { -- /* translators: This is the name of the OS, followed by the type -- * of architecture and the build id, for example: -- * "Fedora 18 (Spherical Cow) 64-bit (Build ID: xyz)" or -- * "Ubuntu (Oneric Ocelot) 32-bit (Build ID: jki)" */ -- if (name) -- result = g_strdup_printf (_("%s %d-bit (Build ID: %s)"), name, bits, build_id); -- else -- result = g_strdup_printf (_("%d-bit (Build ID: %s)"), bits, build_id); -+ result = g_strconcat (name, " ", version, NULL); - } -- else -+ else if (name) - { -- /* translators: This is the name of the OS, followed by the type -- * of architecture, for example: -- * "Fedora 18 (Spherical Cow) 64-bit" or "Ubuntu (Oneric Ocelot) 32-bit" */ -- if (name) -- result = g_strdup_printf (_("%s %d-bit"), name, bits); -- else -- result = g_strdup_printf (_("%d-bit"), bits); -+ result = g_strdup (name); - } - - g_clear_pointer (&os_info, g_hash_table_destroy); -@@ -498,6 +479,23 @@ get_os_type (void) - return result; - } - -+static char * -+get_os_description (void) -+{ -+ int bits; -+ gchar *result; -+ -+ if (GLIB_SIZEOF_VOID_P == 8) -+ bits = 64; -+ else -+ bits = 32; -+ -+ /* translators: This is the the type of OS architecture, eg: "64-bit" or "32-bit" */ -+ result = g_strdup_printf (_("%d-bit"), bits); -+ -+ return result; -+} -+ - static void - query_done (GFile *file, - GAsyncResult *res, -@@ -1519,6 +1517,11 @@ info_panel_setup_overview (CcInfoPanel *self) - gtk_label_set_text (GTK_LABEL (widget), text ? text : ""); - g_free (text); - -+ widget = WID ("os_description_label"); -+ text = get_os_description (); -+ gtk_label_set_text (GTK_LABEL (widget), text ? text : ""); -+ g_free (text); -+ - get_primary_disc_info (self); - - widget = WID ("graphics_label"); -diff --git a/panels/info/info.ui b/panels/info/info.ui -index 1967fdf..0bdfc1a 100644 ---- a/panels/info/info.ui -+++ b/panels/info/info.ui -@@ -199,13 +199,14 @@ - - True - False -- 18 -+ 6 - vertical - - - True - False -- /org/gnome/control-center/info/GnomeLogoVerticalMedium.svg -+ 128 -+ fedora-logo-icon - - - False -@@ -214,11 +215,12 @@ - - - -- -+ - True - False - Version 3.0 - True -+ 24 - - - -@@ -282,19 +284,35 @@ - - - -+ -+ True -+ False -+ 1 -+ OS Type -+ os_description_label -+ -+ -+ -+ 3 -+ 4 -+ -+ -+ - - True - False - 1 -- Base system -- os_type_label -+ GNOME -+ version_label - - - -- 4 -- 5 -+ 5 -+ 6 - - - -@@ -309,8 +327,8 @@ - - - -- 6 -- 7 -+ 7 -+ 8 - - - -@@ -354,7 +372,7 @@ - - - -- -+ - True - False - 0 -@@ -364,8 +382,23 @@ - - 1 - 2 -- 4 -- 5 -+ 3 -+ 4 -+ -+ -+ -+ -+ True -+ False -+ 0 -+ Unknown -+ True -+ -+ -+ 1 -+ 2 -+ 5 -+ 6 - - - -@@ -379,8 +412,8 @@ - - 1 - 2 -- 6 -- 7 -+ 7 -+ 8 - - - -@@ -462,8 +495,8 @@ - - - -- 3 -- 4 -+ 4 -+ 5 - - - -@@ -491,8 +524,8 @@ - - 1 - 2 -- 3 -- 4 -+ 4 -+ 5 - - - -@@ -510,8 +543,8 @@ - - - -- 5 -- 6 -+ 6 -+ 7 - - - -@@ -525,8 +558,8 @@ - - 1 - 2 -- 5 -- 6 -+ 6 -+ 7 - - - +- if (pretty_name) +- name_version = g_strdup (pretty_name); +- else if (name && version_id) ++ if (name && version_id) + name_version = g_strdup_printf ("%s %s", name, version_id); + else + name_version = g_strdup (_("Unknown")); +diff --git a/panels/info/info-overview.ui b/panels/info/info-overview.ui +index 219a83c4c..aa87fbec2 100644 +--- a/panels/info/info-overview.ui ++++ b/panels/info/info-overview.ui +@@ -12,13 +12,14 @@ + + True + False +- 18 ++ 6 + vertical + + + True + False +- /org/gnome/control-center/info/GnomeLogoVerticalMedium.svg ++ 128 ++ fedora-logo-icon + + + False +@@ -27,11 +28,12 @@ + + + +- ++ + True + False + Version 3.0 + True ++ 24 + + + +@@ -118,8 +120,8 @@ + True + False + 1 +- OS name +- os_name_label ++ GNOME ++ version_label + +@@ -228,7 +230,7 @@ + + + +- ++ + True + False + 0 -- -2.9.3 +2.13.0 diff --git a/SOURCES/handle-synaptics-touchpads.patch b/SOURCES/handle-synaptics-touchpads.patch deleted file mode 100644 index 3c54685..0000000 --- a/SOURCES/handle-synaptics-touchpads.patch +++ /dev/null @@ -1,166 +0,0 @@ -From a78163475f2abf9c64d71e803bceaedb05f3a6c1 Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -Date: Mon, 13 Mar 2017 19:58:42 +0100 -Subject: [PATCH] mouse: Handle Synaptics devices again - -If mutter can handle those, so can g-c-c ---- - panels/mouse/cc-mouse-caps-helper.c | 90 +++++++++++++++++++++++++++++++---- - panels/mouse/gnome-mouse-properties.c | 10 +--- - 2 files changed, 82 insertions(+), 18 deletions(-) - -diff --git a/panels/mouse/cc-mouse-caps-helper.c b/panels/mouse/cc-mouse-caps-helper.c -index 3b912ce..0a8ccae 100644 ---- a/panels/mouse/cc-mouse-caps-helper.c -+++ b/panels/mouse/cc-mouse-caps-helper.c -@@ -25,9 +25,72 @@ - #include "cc-mouse-caps-helper.h" - - static gboolean --touchpad_check_capabilities_x11 (gboolean *have_two_finger_scrolling, -- gboolean *have_edge_scrolling, -- gboolean *have_tap_to_click) -+touchpad_check_capabilities_x11_synaptics (gboolean *have_two_finger_scrolling, -+ gboolean *have_edge_scrolling, -+ gboolean *have_tap_to_click) -+{ -+ Display *display; -+ GList *devicelist, *l; -+ Atom realtype, prop_two_finger_scroll, prop_edge_scroll, prop_tap_action; -+ int realformat; -+ unsigned long nitems, bytes_after; -+ unsigned char *data; -+ -+ display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); -+ prop_two_finger_scroll = XInternAtom (display, "Synaptics Two-Finger Scrolling", False); -+ prop_edge_scroll = XInternAtom (display, "Synaptics Edge Scrolling", False); -+ prop_tap_action = XInternAtom (display, "Synaptics Tap Action", False); -+ if (!prop_two_finger_scroll || !prop_edge_scroll || !prop_tap_action) -+ return FALSE; -+ -+ *have_two_finger_scrolling = FALSE; -+ *have_edge_scrolling = FALSE; -+ *have_tap_to_click = FALSE; -+ -+ gdk_error_trap_push (); -+ -+ devicelist = gdk_seat_get_slaves (gdk_display_get_default_seat (gdk_display_get_default ()), -+ GDK_SEAT_CAPABILITY_ALL_POINTING); -+ for (l = devicelist; l != NULL; l = l->next) { -+ GdkDevice *device = l->data; -+ -+ if (gdk_device_get_source (device) != GDK_SOURCE_TOUCHPAD && -+ gdk_device_get_source (device) != GDK_SOURCE_MOUSE) -+ continue; -+ -+ /* xorg-x11-drv-synaptics */ -+ if ((XIGetProperty (display, gdk_x11_device_get_id (device), prop_two_finger_scroll, -+ 0, 2, False, XA_INTEGER, &realtype, &realformat, &nitems, -+ &bytes_after, &data) == Success) && (realtype != None)) { -+ *have_two_finger_scrolling = TRUE; -+ XFree (data); -+ } -+ -+ if ((XIGetProperty (display, gdk_x11_device_get_id (device), prop_edge_scroll, -+ 0, 3, False, XA_INTEGER, &realtype, &realformat, &nitems, -+ &bytes_after, &data) == Success) && (realtype != None)) { -+ *have_edge_scrolling = TRUE; -+ XFree (data); -+ } -+ -+ if ((XIGetProperty (display, gdk_x11_device_get_id (device), prop_tap_action, -+ 0, 8, False, XA_INTEGER, &realtype, &realformat, &nitems, -+ &bytes_after, &data) == Success) && (realtype != None)) { -+ *have_tap_to_click = TRUE; -+ XFree (data); -+ } -+ } -+ g_list_free (devicelist); -+ -+ gdk_error_trap_pop_ignored (); -+ -+ return TRUE; -+} -+ -+static gboolean -+touchpad_check_capabilities_x11_libinput (gboolean *have_two_finger_scrolling, -+ gboolean *have_edge_scrolling, -+ gboolean *have_tap_to_click) - { - Display *display; - GList *devicelist, *l; -@@ -91,10 +154,18 @@ cc_touchpad_check_capabilities (gboolean *have_two_finger_scrolling, - gboolean *have_edge_scrolling, - gboolean *have_tap_to_click) - { -- if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) -- return touchpad_check_capabilities_x11 (have_two_finger_scrolling, -- have_edge_scrolling, -- have_tap_to_click); -+ if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) { -+ if (cc_synaptics_check ()) { -+ return touchpad_check_capabilities_x11_synaptics (have_two_finger_scrolling, -+ have_edge_scrolling, -+ have_tap_to_click); -+ } -+ -+ return touchpad_check_capabilities_x11_libinput (have_two_finger_scrolling, -+ have_edge_scrolling, -+ have_tap_to_click); -+ } -+ - /* else we unconditionally show all touchpad knobs */ - *have_two_finger_scrolling = TRUE; - *have_edge_scrolling = TRUE; -@@ -125,9 +196,10 @@ cc_synaptics_check (void) - GDK_SEAT_CAPABILITY_ALL_POINTING); - for (l = devicelist; l != NULL; l = l->next) { - GdkDevice *device = l->data; -- if (gdk_device_get_source (device) != GDK_SOURCE_TOUCHPAD) -- continue; - -+ if (gdk_device_get_source (device) != GDK_SOURCE_TOUCHPAD && -+ gdk_device_get_source (device) != GDK_SOURCE_MOUSE) -+ continue; - if ((XIGetProperty (display, gdk_x11_device_get_id (device), prop, - 0, 2, False, XA_INTEGER, &realtype, &realformat, &nitems, - &bytes_after, &data) == Success) && (realtype != None)) { -diff --git a/panels/mouse/gnome-mouse-properties.c b/panels/mouse/gnome-mouse-properties.c -index 126b762..d0196d3 100644 ---- a/panels/mouse/gnome-mouse-properties.c -+++ b/panels/mouse/gnome-mouse-properties.c -@@ -61,7 +61,6 @@ struct _CcMousePropertiesPrivate - gboolean have_mouse; - gboolean have_touchpad; - gboolean have_touchscreen; -- gboolean have_synaptics; - - gboolean left_handed; - GtkGesture *left_gesture; -@@ -81,10 +80,6 @@ setup_touchpad_options (CcMousePropertiesPrivate *d) - gboolean have_edge_scrolling; - gboolean have_tap_to_click; - -- gtk_widget_set_visible (WID ("touchpad-frame"), !d->have_synaptics); -- if (d->have_synaptics) -- return; -- - gtk_widget_set_visible (WID ("touchpad-frame"), d->have_touchpad); - if (!d->have_touchpad) - return; -@@ -383,11 +378,8 @@ cc_mouse_properties_init (CcMouseProperties *object) - G_CALLBACK (device_changed), d); - - d->have_mouse = mouse_is_present (); -- d->have_touchpad = touchpad_is_present (); -+ d->have_touchpad = touchpad_is_present () || cc_synaptics_check (); - d->have_touchscreen = touchscreen_is_present (); -- d->have_synaptics = cc_synaptics_check (); -- if (d->have_synaptics) -- g_warning ("Detected synaptics X driver, please migrate to libinput"); - - d->changing_scroll = FALSE; - --- -2.9.3 - diff --git a/SOURCES/wacom-ekr.patch b/SOURCES/wacom-ekr.patch deleted file mode 100644 index 77b7b41..0000000 --- a/SOURCES/wacom-ekr.patch +++ /dev/null @@ -1,355 +0,0 @@ -From 9257ef03d3ae0be9a588016121ee8adc5e9a85b7 Mon Sep 17 00:00:00 2001 -From: Aaron Skomra -Date: Tue, 10 Nov 2015 11:31:53 -0800 -Subject: [PATCH] add Wacom panel support for the ExpressKey Remote - ---- - configure.ac | 2 +- - panels/wacom/cc-wacom-page.c | 60 ++++++++++++++++++++------- - panels/wacom/cc-wacom-panel.c | 9 ++++- - panels/wacom/gsd-wacom-device.c | 22 ++++++++++ - panels/wacom/gsd-wacom-device.h | 2 + - panels/wacom/wacom-remote.svg | 87 ++++++++++++++++++++++++++++++++++++++++ - panels/wacom/wacom.gresource.xml | 1 + - 7 files changed, 167 insertions(+), 16 deletions(-) - create mode 100644 panels/wacom/wacom-remote.svg - -diff --git a/configure.ac b/configure.ac -index 4f6c59e..2dffcac 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -98,7 +98,7 @@ MODEM_MANAGER_REQUIRED_VERSION=0.7 - LIBNOTIFY_REQUIRED_VERSION=0.7.3 - GNOME_DESKTOP_REQUIRED_VERSION=3.21.2 - SCHEMAS_REQUIRED_VERSION=3.21.4 --LIBWACOM_REQUIRED_VERSION=0.7 -+LIBWACOM_REQUIRED_VERSION=0.17 - CLUTTER_REQUIRED_VERSION=1.11.3 - GOA_REQUIRED_VERSION=3.21.5 - ACCOUNTSSERVICE_REQUIRED_VERSION=0.6.39 -diff --git a/panels/wacom/cc-wacom-page.c b/panels/wacom/cc-wacom-page.c -index fc31328..b8644e2 100644 ---- a/panels/wacom/cc-wacom-page.c -+++ b/panels/wacom/cc-wacom-page.c -@@ -104,7 +104,8 @@ enum { - enum { - LAYOUT_NORMAL, /* tracking mode, button mapping */ - LAYOUT_REVERSIBLE, /* tracking mode, button mapping, left-hand orientation */ -- LAYOUT_SCREEN /* button mapping, calibration, display resolution */ -+ LAYOUT_SCREEN, /* button mapping, calibration, display resolution */ -+ LAYOUT_REMOTE, /* button mapping */ - }; - - static void -@@ -120,6 +121,8 @@ get_layout_type (GsdWacomDevice *device) - layout = LAYOUT_SCREEN; - else if (gsd_wacom_device_reversible (device)) - layout = LAYOUT_REVERSIBLE; -+ else if (gsd_wacom_device_is_remote (device)) -+ layout = LAYOUT_REMOTE; - else - layout = LAYOUT_NORMAL; - -@@ -893,6 +896,14 @@ remove_mouse_link (CcWacomPagePrivate *priv) - "top_attach", 2, NULL); - } - -+static void -+remove_for_remote (CcWacomPagePrivate *priv) -+{ -+ gtk_widget_destroy (WID ("label-trackingmode")); -+ gtk_widget_destroy (WID ("combo-tabletmode")); -+ gtk_widget_destroy (WID ("display-mapping-button")); -+} -+ - static gboolean - has_monitor (CcWacomPage *page) - { -@@ -907,7 +918,8 @@ update_tablet_ui (CcWacomPage *page, - GsdWacomStylus *puck; - - priv = page->priv; -- puck = gsd_wacom_device_get_stylus_for_type (priv->stylus, WACOM_STYLUS_TYPE_PUCK); -+ if (priv->stylus != NULL) -+ puck = gsd_wacom_device_get_stylus_for_type (priv->stylus, WACOM_STYLUS_TYPE_PUCK); - if (puck == NULL) - remove_mouse_link (priv); - -@@ -940,6 +952,11 @@ update_tablet_ui (CcWacomPage *page, - WID ("display-link"), - "top_attach", 2, NULL); - break; -+ case LAYOUT_REMOTE: -+ remove_for_remote (priv); -+ remove_left_handed (priv); -+ remove_display_link (priv); -+ break; - default: - g_assert_not_reached (); - } -@@ -955,7 +972,10 @@ cc_wacom_page_update_tools (CcWacomPage *page, - gboolean changed; - - /* Type of layout */ -- layout = get_layout_type (stylus); -+ if (pad != NULL && stylus == NULL) -+ layout = get_layout_type (pad); -+ else -+ layout = get_layout_type (stylus); - - priv = page->priv; - changed = (priv->stylus != stylus || priv->pad != pad); -@@ -978,8 +998,10 @@ cc_wacom_page_new (CcWacomPanel *panel, - CcWacomPage *page; - CcWacomPagePrivate *priv; - -- g_return_val_if_fail (GSD_IS_WACOM_DEVICE (stylus), NULL); -- g_return_val_if_fail (gsd_wacom_device_get_device_type (stylus) == WACOM_TYPE_STYLUS, NULL); -+ if (stylus != NULL) { -+ g_return_val_if_fail (GSD_IS_WACOM_DEVICE (stylus), NULL); -+ g_return_val_if_fail (gsd_wacom_device_get_device_type (stylus) == WACOM_TYPE_STYLUS, NULL); -+ } - - if (pad != NULL) - g_return_val_if_fail (gsd_wacom_device_get_device_type (pad) == WACOM_TYPE_PAD, NULL); -@@ -992,26 +1014,36 @@ cc_wacom_page_new (CcWacomPanel *panel, - cc_wacom_page_update_tools (page, stylus, pad); - - /* FIXME move this to construct */ -- priv->wacom_settings = gsd_wacom_device_get_settings (stylus); -- set_mode_from_gsettings (GTK_COMBO_BOX (WID ("combo-tabletmode")), page); -+ if (stylus != NULL) { -+ priv->wacom_settings = gsd_wacom_device_get_settings (stylus); -+ set_mode_from_gsettings (GTK_COMBO_BOX (WID ("combo-tabletmode")), page); -+ } - - /* Tablet name */ -- gtk_label_set_text (GTK_LABEL (WID ("label-tabletmodel")), gsd_wacom_device_get_name (stylus)); -+ if (stylus != NULL) -+ gtk_label_set_text (GTK_LABEL (WID ("label-tabletmodel")), gsd_wacom_device_get_name (stylus)); -+ else if (pad != NULL) -+ gtk_label_set_text (GTK_LABEL (WID ("label-tabletmodel")), gsd_wacom_device_get_name (pad)); - - /* Left-handedness */ -- if (gsd_wacom_device_reversible (stylus)) -+ if (stylus != NULL && gsd_wacom_device_reversible (stylus)) - set_left_handed_from_gsettings (page); - - /* Tablet icon */ -- set_icon_name (page, "image-tablet", gsd_wacom_device_get_icon_name (stylus)); -+ if (pad != NULL && gsd_wacom_device_is_remote (pad)) -+ set_icon_name (page, "image-tablet", gsd_wacom_device_get_icon_name (pad)); -+ else -+ set_icon_name (page, "image-tablet", gsd_wacom_device_get_icon_name (stylus)); - - /* Add styli */ -- add_styli (page); -+ if (stylus != NULL) { -+ add_styli (page); - - /* Get the current stylus and switch to its page */ -- stylus_changed (priv->stylus, NULL, page); -- g_signal_connect (G_OBJECT (priv->stylus), "notify::last-stylus", -- G_CALLBACK (stylus_changed), page); -+ stylus_changed (priv->stylus, NULL, page); -+ g_signal_connect (G_OBJECT (priv->stylus), "notify::last-stylus", -+ G_CALLBACK (stylus_changed), page); -+ } - - return GTK_WIDGET (page); - } -diff --git a/panels/wacom/cc-wacom-panel.c b/panels/wacom/cc-wacom-panel.c -index aedd5ed..91a245e 100644 ---- a/panels/wacom/cc-wacom-panel.c -+++ b/panels/wacom/cc-wacom-panel.c -@@ -316,7 +316,14 @@ update_current_page (CcWacomPanel *self) - GtkWidget *page; - - tablet = l->data; -- if (tablet->stylus == NULL) { -+ /* For most "Tablets" a NULL tablet->stylus will trigger a cleanup. However, if the device -+ * has no stylus (e.g. ExpressKey Remote), we skip the the cleanup and proceed to page -+ * creation. Since both GsdWacomDevice members (tablet/pad) of a Tablet know if their -+ * physical device has a stylus, we can find out from the solo pad device if the hardware -+ * supports a stylus. */ -+ if (tablet->pad != NULL && !gsd_wacom_device_get_has_stylus (tablet->pad)){ -+ /* This is a full device but it doesn't have a stylus - skip the cleanup */ -+ } else if (tablet->stylus == NULL) { - page = g_hash_table_lookup (priv->pages, tablet->name); - if (page != NULL) { - remove_page (GTK_NOTEBOOK (priv->notebook), page); -diff --git a/panels/wacom/gsd-wacom-device.c b/panels/wacom/gsd-wacom-device.c -index 0cf725b..ed8d852 100644 ---- a/panels/wacom/gsd-wacom-device.c -+++ b/panels/wacom/gsd-wacom-device.c -@@ -353,6 +353,8 @@ struct GsdWacomDevicePrivate - GHashTable *modes; /* key = int (group), value = int (index) */ - GHashTable *num_modes; /* key = int (group), value = int (index) */ - GSettings *wacom_settings; -+ gboolean has_stylus; -+ WacomClass class; - }; - - enum { -@@ -1389,6 +1391,8 @@ gsd_wacom_device_update_from_db (GsdWacomDevice *device, - device->priv->wacom_settings = g_settings_new_with_path (WACOM_TABLET_SCHEMA, - settings_path); - -+ device->priv->class = libwacom_get_class (wacom_device); -+ device->priv->has_stylus = libwacom_has_stylus (wacom_device); - device->priv->name = g_strdup (libwacom_get_name (wacom_device)); - device->priv->layout_path = g_strdup (libwacom_get_layout_filename (wacom_device)); - device->priv->reversible = libwacom_is_reversible (wacom_device); -@@ -1400,6 +1404,8 @@ gsd_wacom_device_update_from_db (GsdWacomDevice *device, - device->priv->icon_name = "wacom-tablet-cintiq"; - else - device->priv->icon_name = "wacom-tablet-pc"; -+ } else if (gsd_wacom_device_is_remote (device)) { -+ device->priv->icon_name = "wacom-remote"; - } else { - device->priv->icon_name = "wacom-tablet"; - } -@@ -1784,6 +1790,22 @@ gsd_wacom_device_get_num_rings (GsdWacomDevice *device) - return device->priv->num_rings; - } - -+gboolean -+gsd_wacom_device_get_has_stylus (GsdWacomDevice *device) -+{ -+ g_return_val_if_fail (GSD_IS_WACOM_DEVICE (device), FALSE); -+ -+ return device->priv->has_stylus; -+} -+ -+gboolean -+gsd_wacom_device_is_remote (GsdWacomDevice *device) -+{ -+ g_return_val_if_fail (GSD_IS_WACOM_DEVICE (device), FALSE); -+ -+ return device->priv->class == WCLASS_REMOTE; -+} -+ - GSettings * - gsd_wacom_device_get_settings (GsdWacomDevice *device) - { -diff --git a/panels/wacom/gsd-wacom-device.h b/panels/wacom/gsd-wacom-device.h -index 374eca9..04d893b 100644 ---- a/panels/wacom/gsd-wacom-device.h -+++ b/panels/wacom/gsd-wacom-device.h -@@ -158,6 +158,8 @@ gboolean gsd_wacom_device_reversible (GsdWacomDevice *device); - gboolean gsd_wacom_device_is_screen_tablet (GsdWacomDevice *device); - gboolean gsd_wacom_device_is_isd (GsdWacomDevice *device); - gboolean gsd_wacom_device_is_fallback (GsdWacomDevice *device); -+gboolean gsd_wacom_device_is_remote (GsdWacomDevice *device); -+gboolean gsd_wacom_device_get_has_stylus (GsdWacomDevice *device); - gint gsd_wacom_device_get_num_strips (GsdWacomDevice *device); - gint gsd_wacom_device_get_num_rings (GsdWacomDevice *device); - GSettings * gsd_wacom_device_get_settings (GsdWacomDevice *device); -diff --git a/panels/wacom/wacom-remote.svg b/panels/wacom/wacom-remote.svg -new file mode 100644 -index 0000000..fedc369 ---- /dev/null -+++ b/panels/wacom/wacom-remote.svg -@@ -0,0 +1,87 @@ -+ -+ -+ -+ -+ -+ -+ -+ image/svg+xml -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -diff --git a/panels/wacom/wacom.gresource.xml b/panels/wacom/wacom.gresource.xml -index 7683b4d..14d41c1 100644 ---- a/panels/wacom/wacom.gresource.xml -+++ b/panels/wacom/wacom.gresource.xml -@@ -5,6 +5,7 @@ - wacom-stylus-page.ui - button-mapping.ui - wacom-tablet.svg -+ wacom-remote.svg - wacom-stylus.svg - wacom-stylus-no-eraser.svg - wacom-stylus-airbrush.svg --- -2.9.3 - diff --git a/SPECS/control-center.spec b/SPECS/control-center.spec index e31e429..7fca979 100644 --- a/SPECS/control-center.spec +++ b/SPECS/control-center.spec @@ -1,42 +1,48 @@ %define gettext_package gnome-control-center-2.0 -%define glib2_version 2.44.0 +%define glib2_version 2.53.0 %define gtk3_version 3.22.0 -%define gsd_version 3.19.1 +%define gsd_version 3.25.90 %define gnome_desktop_version 3.21.2 %define gsettings_desktop_schemas_version 3.21.4 +%define gnome_online_accounts_version 3.25.3 %define gnome_bluetooth_version 3.18.2 Name: control-center Epoch: 1 -Version: 3.22.2 -Release: 5%{?dist} +Version: 3.26.2 +Release: 8%{?dist} Summary: Utilities to configure the GNOME desktop License: GPLv2+ and GFDL URL: http://www.gnome.org -Source0: https://download.gnome.org/sources/gnome-control-center/3.22/gnome-control-center-%{version}.tar.xz +Source0: https://download.gnome.org/sources/gnome-control-center/3.26/gnome-control-center-%{version}.tar.xz # https://bugzilla.gnome.org/show_bug.cgi?id=695691 Patch0: distro-logo.patch -Patch1: wacom-ekr.patch -Patch2: handle-synaptics-touchpads.patch -# https://bugzilla.redhat.com/show_bug.cgi?id=1298881 -Patch3: cursor-size-selection.patch -# https://bugzilla.gnome.org/show_bug.cgi?id=774324 -Patch4: 0001-info-Fix-build-when-Wayland-is-disabled.patch -# https://bugzilla.redhat.com/show_bug.cgi?id=1440816 -Patch5: 0001-printers-actualize-printers-list.patch -# https://bugzilla.redhat.com/show_bug.cgi?id=1309331 -Patch6: 0001-hostname-helper-don-t-read-past-0.patch -Patch7: 0002-hostname-helper-fall-back-to-kernel-hostname-when-th.patch -Patch8: 0003-hostname-helper-use-SSID_MAX_LEN.patch -Patch9: 0001-wacom-Fix-eraser-pressure-sensitivity.patch -# https://bugzilla.redhat.com/show_bug.cgi?id=1457691 -Patch10: 0001-network-Simplify-the-ignored-Network-interface-types.patch +Patch1: 0002-mouse-Handle-Synaptics-devices-again.patch +Patch2: 0003-Revert-datetime-12h-time-format-is-now-always-availa.patch +Patch3: 0002-display-night-light-widget-Avoid-c99-requirement.patch +Patch4: 0001-printers-Fix-compilation-with-RHEL-cups-version.patch +Patch5: display-fix-multi-monitor-layout.patch +Patch6: 0001-printer-Don-t-show-the-supply-level-bar-by-default.patch +Patch7: 0001-common-Use-GdkDevices-directly-as-HT-keys-on-GsdDevi.patch + +Patch10: 0001-user-accounts-Prevent-crashes-if-current-user-is-not.patch +Patch11: 0002-user-accounts-Introduce-an-empty-state-page.patch + +Patch20: 0001-network-Fix-cloned-MAC-not-being-saved-for-Ethernet.patch +Patch21: 0001-network-Really-fix-clone-MAC-support.patch +Patch22: 0001-network-Really-really-fix-cloned-MAC-support.patch + +Patch23: 0001-network-Consider-empty-IPv6-gateway-to-be-valid.patch + +Patch24: 0001-network-Request-periodic-Wi-Fi-scans.patch +Patch25: 0002-wifi-Show-the-Wi-Fi-disabled-page-if-it-is-disabled.patch BuildRequires: autoconf automake libtool intltool gnome-common +BuildRequires: gnome-settings-daemon-devel BuildRequires: pkgconfig(accountsservice) BuildRequires: pkgconfig(cheese-gtk) >= 3.5.91 BuildRequires: pkgconfig(clutter-gtk-1.0) @@ -49,7 +55,7 @@ BuildRequires: pkgconfig(gdk-wayland-3.0) BuildRequires: pkgconfig(gio-2.0) >= %{glib2_version} BuildRequires: pkgconfig(gnome-desktop-3.0) >= %{gnome_desktop_version} BuildRequires: pkgconfig(gnome-settings-daemon) >= %{gsd_version} -BuildRequires: pkgconfig(goa-1.0) +BuildRequires: pkgconfig(goa-1.0) >= %{gnome_online_accounts_version} BuildRequires: pkgconfig(goa-backend-1.0) BuildRequires: pkgconfig(grilo-0.3) BuildRequires: pkgconfig(gsettings-desktop-schemas) >= %{gsettings_desktop_schemas_version} @@ -91,6 +97,7 @@ Requires: gnome-desktop3 >= %{gnome_desktop_version} Requires: dbus-x11 Requires: control-center-filesystem = %{epoch}:%{version}-%{release} Requires: glib2%{?_isa} >= %{glib2_version} +Requires: gnome-online-accounts%{?_isa} >= %{gnome_online_accounts_version} Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version} Requires: gtk3%{?_isa} >= %{gtk3_version} %ifnarch s390 s390x @@ -109,6 +116,7 @@ Requires: vino Requires: cups-pk-helper # For the network panel Requires: nm-connection-editor +Requires: NetworkManager-wifi # For the info/details panel Requires: glx-utils # For the keyboard panel @@ -147,7 +155,27 @@ utilities. %prep -%autosetup -S git -n gnome-control-center-%{version} +%setup -q -n gnome-control-center-%{version} +%patch0 -p1 -b .distro-logo +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 + +%patch10 -p1 +%patch11 -p1 + +%patch20 -p1 +%patch21 -p1 +%patch22 -p1 + +%patch23 -p1 + +%patch24 -p1 +%patch25 -p1 autoreconf -f -i @@ -235,208 +263,343 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %changelog -* Tue Jun 20 2017 Bastien Nocera - 3.22.2-5 -+ control-center-3.22.2-5 -- Don't show veth interfaces, we don't have code to set them up -Resolves: #1457691 +* Tue Feb 20 2018 Bastien Nocera - 3.26.2-8 ++ control-center-3.26.2-8 +- Fix Wi-Fi networks not getting updated +- Show "Wi-Fi disabled" page when Wi-Fi is disabled +- Resolves: #1545713 + +* Tue Feb 20 2018 Bastien Nocera - 3.26.2-7 ++ control-center-3.26.2-7 +- Allow empty IPv6 gateway +- Resolves: #1467308 + +* Fri Feb 16 2018 Bastien Nocera - 3.26.2-6 ++ control-center-3.26.2-6 +- Fix Clone MAC not being saved in Ethernet device properties +- Resolves: #1467295 + +* Tue Feb 13 2018 Ray Strode - 3.26.2-5 +- Fix crash with root user + Resolves: #1544369 + +* Wed Feb 07 2018 Carlos Garnacho - 1:3.26.2-4 +- Handle multiple tablet devices sharing the same event node +- Resolves: #1528356 + +* Tue Dec 19 2017 Marek Kasik - 1:3.26.2-3 +- Don't show the supply level bar by default +- Resolves: #1525062 + +* Wed Nov 15 2017 Rui Matos - 1:3.26.2-2 +- Fix display arrangement widget +- Resolves: #1512448 + +* Wed Nov 01 2017 Kalev Lember - 1:3.26.2-1 +- Update to 3.26.2 +- Related: #1481407 -* Tue Jun 13 2017 Carlos Garnacho - 3.22.2-4 -- Fix eraser pressure mimicking tip pressure -Resolves: #1458352 +* Mon Oct 30 2017 Rui Matos - 1:3.26.1-3 +- network/eap-method-tls: Don't require a private key password +- Resolves: #1415760 -* Fri May 05 2017 Bastien Nocera - 3.22.2-3 -- Fix Hotspot not working when PrettyHostname is unset -Resolves: #1309331 +* Fri Oct 20 2017 Rui Matos - 1:3.26.1-2 +- Rebase to 3.26.1 +- Resolves: #1481407 -* Tue Apr 18 2017 Felipe Borges - 3.22.2-2 -- Make actualize_printers_list cancellable -- Resolves: #1440816 +* Sun Oct 08 2017 Kalev Lember - 1:3.26.1-1 +- Update to 3.26.1 -* Tue Mar 14 2017 Bastien Nocera - 3.22.2-1 -+ control-center-3.22.2-1 -- Update to 3.22.2 -- Add cursor size selection patch -Resolves: #1386839, #1298881 +* Wed Sep 13 2017 Kalev Lember - 1:3.26.0-1 +- Update to 3.26.0 -* Mon Mar 13 2017 Carlos Garnacho - 1:3.22.1-4 -- Handle synaptics touchpads, in sync with mutter -- Resolves: #1386839 +* Tue Sep 05 2017 Kalev Lember - 1:3.25.92.1-1 +- Update to 3.25.92.1 -* Fri Mar 10 2017 Carlos Garnacho - 1:3.22.1-3 -- Support Wacom EKR devices -- Resolves: #1342998 +* Thu Aug 24 2017 Kalev Lember - 1:3.25.91-1 +- Update to 3.25.91 -* Thu Feb 23 2017 Kalev Lember - 1:3.22.1-2 -- Remove a workaround for older accountsservice -- Resolves: #1386839 +* Wed Aug 02 2017 Fedora Release Engineering - 1:3.25.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Kalev Lember - 1:3.25.4-1 +- Update to 3.25.4 +- Rebase distro-logo.patch + +* Wed Jul 26 2017 Fedora Release Engineering - 1:3.24.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Mon Jun 12 2017 Kevin Fenzi - 1:3.24.2-2 +- Rebuild for new libgtop2 + +* Wed May 10 2017 Kalev Lember - 1:3.24.2-1 +- Update to 3.24.2 + +* Wed Apr 12 2017 Kalev Lember - 1:3.24.1-1 +- Update to 3.24.1 + +* Tue Mar 28 2017 Bastien Nocera - 3.24.0-2 ++ control-center-3.24.0-2 +- Require NetworkManager-wifi so it doesn't get auto-removed + +* Tue Mar 21 2017 Kalev Lember - 1:3.24.0-1 +- Update to 3.24.0 + +* Thu Mar 16 2017 Kalev Lember - 1:3.23.92-1 +- Update to 3.23.92 + +* Mon Mar 06 2017 Kalev Lember - 1:3.23.91-1 +- Update to 3.23.91 +- Restore distro-logo.patch + +* Wed Feb 15 2017 Richard Hughes - 1:3.23.90-1 +- Update to 3.23.90 + +* Fri Feb 10 2017 Fedora Release Engineering - 1:3.22.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Fri Oct 21 2016 Bastien Nocera - 3.22.1-3 ++ control-center-3.22.1-3 +- Remove trailing spaces from renderer strings + +* Fri Oct 21 2016 Bastien Nocera - 1:3.22.1-2 ++ control-center-3.22.1-2 +- Show the correct GPUs available when under Wayland or with dual GPUs * Wed Oct 12 2016 Kalev Lember - 1:3.22.1-1 - Update to 3.22.1 -- Resolves: #1386839 -* Thu Jun 30 2016 Bastien Nocera - 3.14.5-19 -- Update translations again -Resolves: #1273273 +* Thu Sep 22 2016 Kalev Lember - 1:3.22.0-1 +- Update to 3.22.0 +- Rebase distro-logo.patch + +* Wed Apr 13 2016 Kalev Lember - 1:3.20.1-1 +- Update to 3.20.1 + +* Tue Mar 22 2016 Kalev Lember - 1:3.20.0-1 +- Update to 3.20.0 + +* Thu Mar 17 2016 Kalev Lember - 1:3.19.92-1 +- Update to 3.19.92 + +* Fri Mar 04 2016 Kalev Lember - 1:3.19.91-1 +- Update to 3.19.91 + +* Wed Feb 17 2016 Richard Hughes - 1:3.19.90-1 +- Update to 3.19.90 + +* Wed Feb 03 2016 Fedora Release Engineering - 1:3.19.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Jan 20 2016 Kalev Lember - 1:3.19.5-1 +- Update to 3.19.5 + +* Mon Jan 18 2016 Michael Catanzaro - 1:3.19.4-2 +- Add Recommends: gnome-color-manager for the Color panel + +* Fri Dec 18 2015 Kalev Lember - 1:3.19.4-1 +- Update to 3.19.4 +- Build with grilo 0.3 + +* Tue Dec 15 2015 Kalev Lember - 1:3.19.3-1 +- Update to 3.19.3 + +* Tue Nov 10 2015 Kalev Lember - 1:3.18.2-1 +- Update to 3.18.2 + +* Mon Oct 12 2015 Kalev Lember - 1:3.18.1-1 +- Update to 3.18.1 + +* Mon Sep 21 2015 Kalev Lember - 1:3.18.0-1 +- Update to 3.18.0 + +* Tue Sep 15 2015 Kalev Lember - 1:3.17.92-2 +- Set minimum gnome-bluetooth version + +* Tue Sep 15 2015 Kalev Lember - 1:3.17.92-1 +- Update to 3.17.92 + +* Tue Aug 18 2015 Kalev Lember - 1:3.17.90-1 +- Update to 3.17.90 +- Use make_install macro + +* Mon Aug 17 2015 Kalev Lember - 1:3.17.3-2 +- Rebuilt for libcheese soname bump + +* Wed Jul 22 2015 David King - 1:3.17.3-1 +- Update to 3.17.3 +- Use pkgconfig for BuildRequires + +* Wed Jun 17 2015 Fedora Release Engineering - 1:3.17.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri Jun 05 2015 Kalev Lember - 1:3.17.2-1 +- Update to 3.17.2 + +* Tue May 12 2015 Kalev Lember - 1:3.16.2-1 +- Update to 3.16.2 + +* Thu Apr 16 2015 Kalev Lember - 1:3.16.1-1 +- Update to 3.16.1 + +* Mon Mar 23 2015 Kalev Lember - 1:3.16.0-1 +- Update to 3.16.0 + +* Tue Mar 17 2015 Kalev Lember - 1:3.15.92-1 +- Update to 3.15.92 + +* Tue Mar 03 2015 Kalev Lember - 1:3.15.91-1 +- Update to 3.15.91 +- Use the %%license macro for the COPYING file + +* Tue Feb 17 2015 Richard Hughes - 1:3.15.90-1 +- Update to 3.15.90 + +* Sun Jan 25 2015 David King - 1:3.15.4-1 +- Update to 3.15.4 +- Depend on gudev in order to build udev device manager + +* Tue Nov 11 2014 Kalev Lember - 1:3.14.2-1 +- Update to 3.14.2 + +* Fri Oct 31 2014 Richard Hughes - 1:3.14.1-3 +- Do not depend on rygel on non-Fedora; the UI should do the right thing. + +* Wed Oct 15 2014 Kalev Lember - 1:3.14.1-2 +- Fix a symbol collision with cheese + +* Tue Oct 14 2014 Kalev Lember - 1:3.14.1-1 +- Update to 3.14.1 + +* Mon Sep 22 2014 Kalev Lember - 1:3.14.0-1 +- Update to 3.14.0 -* Wed May 18 2016 Bastien Nocera - 3.14.5-17 -- Fix VPN passwords being blank when editing -Resolves: #1319744 +* Wed Sep 17 2014 Kalev Lember - 1:3.13.92-1 +- Update to 3.13.92 -* Wed May 18 2016 Bastien Nocera - 3.14.5-16 -- Fix empty Wi-Fi list -Resolves: #1306253 +* Wed Sep 03 2014 Kalev Lember - 1:3.13.91-1 +- Update to 3.13.91 -* Mon Apr 25 2016 Rui Matos - 1:3.14.5-15 -- Input chooser improvements - Resolves: #1293068 +* Tue Aug 19 2014 Kalev Lember - 1:3.13.90-1 +- Update to 3.13.90 -* Wed Apr 20 2016 Carlos Garnacho - 3.15.5-14 -- Calibrate Wacom ISD devices in builtin output - Resolves: #1089037 +* Mon Aug 18 2014 Kalev Lember - 1:3.13.4-3 +- Rebuilt for upower 0.99.1 soname bump -* Wed Apr 13 2016 Matthias Clasen - 3.15.5-13 -- Translation updates - Resolves: #1273273 +* Sat Aug 16 2014 Fedora Release Engineering - 1:3.13.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild -* Wed Mar 16 2016 Martin Hatina - 3.14.5-12 -- Add missing patches -- Resolves: #1298951 +* Wed Jul 23 2014 Kalev Lember - 1:3.13.4-1 +- Update to 3.13.4 +- Drop obsolete gnome-menus and redhat-menus deps -* Wed Mar 16 2016 Martin Hatina - 3.14.5-11 -- Check zero length string and invalid pointer -- Resolves: #1298951 +* Fri Jun 27 2014 Rex Dieter 3.13.3-3 +- drop needless scriptlet deps too -* Mon Mar 14 2016 Martin Hatina - 3.14.5-10 -- Do not show nameless applications -- Resolves: #1298943 +* Fri Jun 27 2014 Bastien Nocera 3.13.3-2 +- Don't run update-mime-database in post, we don't ship mime XML + files anymore -* Mon Feb 15 2016 Felipe Borges - 3.14.5-9 -- Avoid crashes when searching for printers with special chars -Resolves: #1298952 +* Thu Jun 26 2014 Richard Hughes - 1:3.13.3-1 +- Update to 3.13.3 -* Wed Aug 26 2015 Rui Matos - 3.14.5-8 -- Update timezones for new "Pyongyang Time" -Related: #1256633 +* Tue Jun 24 2014 Richard Hughes - 1:3.13.2-1 +- Update to 3.13.2 -* Tue Aug 25 2015 Rui Matos - 3.14.5-7 -- If language isn't set in AccountsService, show current locale -Resolves: #1256633 +* Sat Jun 07 2014 Fedora Release Engineering - 1:3.13.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild -* Thu Jun 18 2015 Marek Kasik 3.14.5-6 -- Fix setting of page size in Printers panel -Resolves: #1232751 +* Thu May 22 2014 Adam Williamson - 1:3.13.1-5 +- backport upstream fix for BGO #730080 (i need it, so everyone gets it) -* Thu Jun 18 2015 Marek Kasik 3.14.5-5 -- Show border around 'No printers detected' text -Resolves: #1232758 +* Wed May 07 2014 Kalev Lember - 1:3.13.1-4 +- Drop gnome-icon-theme and gnome-icon-theme-symbolic dependencies -* Tue Jun 2 2015 Ondrej Holy 3.14.5-4 -- Fix enterprise accounts deleting -Resolves: #1141949 +* Mon May 05 2014 Kalev Lember - 1:3.13.1-3 +- Drop unused libXrandr dep -* Wed May 27 2015 Rui Matos - 3.14.5-3 -- Add patch to fix a network panel crash -Resolves: #1221078 +* Wed Apr 30 2014 Richard Hughes - 1:3.13.1-2 +- Rebuild for libgtop -* Tue May 12 2015 Matthias Clasen 3.14.5-2 -- Rebuild against new colord -Related: #1174602 +* Mon Apr 28 2014 Richard Hughes - 1:3.13.1-1 +- Update to 3.13.1 -* Thu Apr 30 2015 Bastien Nocera 3.14.5-1 -- Update to 3.14.5 -Resolves: #1174602 +* Wed Apr 16 2014 Kalev Lember - 1:3.12.1-1 +- Update to 3.12.1 -* Thu Jan 15 2015 Bastien Nocera 3.8.6-18 -- Make network panel work with NetworkManager 1.0 -Resolves: #1175499 +* Sat Apr 05 2014 Kalev Lember - 1:3.12.0-2 +- Update dep versions -* Thu Oct 09 2014 David King - 3.8.6-17 -- Rebuild for libgtop2 soversion bump (#1151155) +* Mon Mar 24 2014 Richard Hughes - 1:3.12.0-1 +- Update to 3.12.0 -* Fri Sep 05 2014 Bastien Nocera 3.8.6-16 -- Fix possible crasher after visiting keyboard panel -Resolves: #1094480 +* Tue Mar 18 2014 Richard Hughes - 1:3.11.92-1 +- Update to 3.11.92 -* Thu Mar 27 2014 Debarshi Ray 3.8.6-15 -- Disable the apply button if the display can not be applied -Resolves: #840913 +* Wed Mar 05 2014 Richard Hughes - 1:3.11.91-1 +- Update to 3.11.91 -* Tue Mar 18 2014 Matthias Clasen 3.8.6-14 -- Translation updates for Bengali -Resolves: #1030321 +* Wed Feb 19 2014 Richard Hughes - 1:3.11.90-2 +- Rebuilt for gnome-desktop soname bump -* Thu Feb 27 2014 Bastien Nocera 3.8.6-13 -- Fix untruthful "Immediately" option in Privacy panel -Resolves: #1056247 +* Tue Feb 18 2014 Richard Hughes - 1:3.11.90-1 +- Update to 3.11.90 -* Wed Feb 26 2014 Bastien Nocera 3.8.6-12 -- Fix unexpected Off label in Usage & History dialogue -Resolves: #1054404 +* Tue Feb 04 2014 Richard Hughes - 1:3.11.5-1 +- Update to 3.11.5 -* Tue Feb 18 2014 Matthias Clasen 3.8.6-11 -- Translation updates -Resolves: #1030321 +* Tue Dec 17 2013 Richard Hughes - 1:3.11.3-1 +- Update to 3.11.3 -* Tue Feb 18 2014 Bastien Nocera 3.8.6-10 -- Add support for network Teams -Resolves: #1040525 +* Mon Nov 25 2013 Richard Hughes - 1:3.11.2-1 +- Update to 3.11.2 -* Mon Feb 17 2014 Matthias Clasen - 1:3.8.6-9 -- Fix a typo in the German translation -Resolves: #1054796 +* Wed Nov 13 2013 Bastien Nocera - 1:3.11.1-2 +- Add vino dependency -* Fri Jan 24 2014 Daniel Mach - 1:3.8.6-8 -- Mass rebuild 2014-01-24 +* Thu Oct 31 2013 Florian Müllner - 1:3.11.1-1 +- Update to 3.11.1 -* Wed Jan 22 2014 Ray Strode - 1:3.8.6-7 -- Update logo to better match mockups from Brand team -Resolves: #1053000 +* Mon Oct 28 2013 Richard Hughes - 1:3.10.1-1 +- Update to 3.10.1 -* Fri Jan 10 2014 Matthias Clasen - 1:3.8.6-6 -- Improve user deletion dialog -Resolves: #1051525 +* Wed Sep 25 2013 Richard Hughes - 1:3.10.0-1 +- Update to 3.10.0 -* Fri Dec 27 2013 Daniel Mach - 1:3.8.6-5 -- Mass rebuild 2013-12-27 +* Wed Sep 18 2013 Kalev Lember - 1:3.9.92-1 +- Update to 3.9.92 -* Mon Dec 09 2013 Bastien Nocera 3.8.6-4 -- Add mnemonic widget links -Resolves: #1039111 +* Wed Sep 04 2013 Kalev Lember - 1:3.9.91-1 +- Update to 3.9.91 -* Tue Nov 26 2013 Matthias Clasen 3.8.6-3 -- Fix network panel apply button -Resolves: #1029788 +* Tue Sep 03 2013 Kalev Lember - 1:3.9.90.1-2 +- Rebuilt for libgnome-desktop soname bump -* Fri Nov 22 2013 Bastien Nocera 3.8.6-2 -- Fix potential unset variable use in distro logo patch -- Fix crasher when NM restarts -- Fix crasher when disconnecting from a Bluetooth device -Resolves: #1030904, #1032736 +* Thu Aug 22 2013 Kalev Lember - 1:3.9.90.1-1 +- Update to 3.9.90.1 -* Thu Oct 31 2013 Bastien Nocera 3.8.6-1 -- Update to 3.8.6 -Resolves: #1016208 +* Thu Aug 22 2013 Kalev Lember - 1:3.9.90-1 +- Update to 3.9.90 +- Drop obsolete build deps -* Thu Sep 19 2013 Bastien Nocera 3.8.5-3 -- Patch from Bill Nottingham to use the Pretty name in priority - to the name+version in the details panel - Resolves: #988613 +* Thu Aug 15 2013 Kalev Lember - 1:3.9.5-2 +- Rebuilt with bluetooth support -* Wed Sep 18 2013 Ray Strode 1:3.8.5-2 -- Drop 'Requires: rygel' so there's no sharing panel - Resolves: #1009020 +* Wed Jul 31 2013 Adam Williamson - 1:3.9.5-1 +- Update to 3.9.5 +- buildrequires libsoup-devel -* Fri Sep 13 2013 Rui Matos - 1:3.8.5-1 -- Update to 3.8.5 +* Tue Jul 30 2013 Richard Hughes - 1:3.9.3-2 +- Rebuild for colord soname bump -* Mon Aug 19 2013 Marek Kasik - 1:3.8.4.1-1 -- Update to 3.8.4.1 +* Tue Jul 16 2013 Richard Hughes - 1:3.9.3-1 +- Update to 3.9.3 -* Wed Jun 26 2013 Debarshi Ray - 1:3.8.3-2 +* Wed Jun 26 2013 Debarshi Ray - 1:3.9.2.1-2 - Add 'Requires: rygel' for the sharing panel -* Fri Jun 7 2013 Rui Matos - 1:3.8.3-1 -- Update to 3.8.3 +* Mon Jun 03 2013 Kalev Lember - 1:3.9.2.1-1 +- Update to 3.9.2.1 * Tue May 14 2013 Richard Hughes - 1:3.8.2-1 - Update to 3.8.2