From bc8cde66cd4e92b4fdaf2aa418071f6204bce2ae Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Apr 10 2018 05:55:44 +0000 Subject: import control-center-3.26.2-8.el7 --- diff --git a/.control-center.metadata b/.control-center.metadata new file mode 100644 index 0000000..c95e9f1 --- /dev/null +++ b/.control-center.metadata @@ -0,0 +1 @@ +8a8c415f3d0bf43121bbc1c9396686baeee444e8 SOURCES/gnome-control-center-3.26.2.tar.xz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ec2a1e0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/gnome-control-center-3.26.2.tar.xz diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet 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-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-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-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/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-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/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 new file mode 100644 index 0000000..57e9ad3 --- /dev/null +++ b/SOURCES/distro-logo.patch @@ -0,0 +1,99 @@ +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 + +This makes the distribution logo prominent, and puts GNOME version +information in the small print. + +https://bugzilla.gnome.org/show_bug.cgi?id=695691 +--- + 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-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, *version_id, *pretty_name, *build_id; ++ gchar *name, *version_id, *build_id; + gchar *result = NULL; + g_autofree gchar *name_version = NULL; + +@@ -457,12 +457,9 @@ get_os_name (void) + + 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"); + +- 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.13.0 + diff --git a/SPECS/control-center.spec b/SPECS/control-center.spec new file mode 100644 index 0000000..7fca979 --- /dev/null +++ b/SPECS/control-center.spec @@ -0,0 +1,1011 @@ +%define gettext_package gnome-control-center-2.0 + +%define glib2_version 2.53.0 +%define gtk3_version 3.22.0 +%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.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.26/gnome-control-center-%{version}.tar.xz + +# https://bugzilla.gnome.org/show_bug.cgi?id=695691 +Patch0: distro-logo.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) +BuildRequires: pkgconfig(colord) +BuildRequires: pkgconfig(colord-gtk) +BuildRequires: pkgconfig(gdk-pixbuf-2.0) >= 2.23.0 +%if 0%{?fedora} +BuildRequires: pkgconfig(gdk-wayland-3.0) +%endif +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) >= %{gnome_online_accounts_version} +BuildRequires: pkgconfig(goa-backend-1.0) +BuildRequires: pkgconfig(grilo-0.3) +BuildRequires: pkgconfig(gsettings-desktop-schemas) >= %{gsettings_desktop_schemas_version} +BuildRequires: pkgconfig(gtk+-3.0) >= %{gtk3_version} +BuildRequires: pkgconfig(gudev-1.0) +BuildRequires: pkgconfig(ibus-1.0) +BuildRequires: pkgconfig(libcanberra-gtk3) +BuildRequires: pkgconfig(libgtop-2.0) +BuildRequires: pkgconfig(libnm) +BuildRequires: pkgconfig(libnma) +BuildRequires: pkgconfig(libpulse) +BuildRequires: pkgconfig(libpulse-mainloop-glib) +BuildRequires: pkgconfig(libsoup-2.4) +BuildRequires: pkgconfig(libxml-2.0) +BuildRequires: pkgconfig(mm-glib) +BuildRequires: pkgconfig(NetworkManager) +BuildRequires: pkgconfig(polkit-gobject-1) +BuildRequires: pkgconfig(pwquality) +BuildRequires: pkgconfig(smbclient) +BuildRequires: pkgconfig(upower-glib) +BuildRequires: pkgconfig(x11) +BuildRequires: pkgconfig(xi) +BuildRequires: desktop-file-utils +BuildRequires: gettext +BuildRequires: intltool >= 0.37.1 +BuildRequires: libXxf86misc-devel +BuildRequires: chrpath +BuildRequires: gnome-common +BuildRequires: cups-devel +BuildRequires: docbook-style-xsl +%ifnarch s390 s390x +BuildRequires: pkgconfig(gnome-bluetooth-1.0) >= %{gnome_bluetooth_version} +BuildRequires: pkgconfig(libwacom) +%endif + +Requires: gnome-settings-daemon >= %{gsd_version} +Requires: alsa-lib +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 +Requires: gnome-bluetooth%{?_isa} >= 1:%{gnome_bluetooth_version} +%endif +# for user accounts +Requires: accountsservice +# For the user languages +Requires: iso-codes +# For the sharing panel +%if 0%{?fedora} +Requires: rygel +%endif +Requires: vino +# For the printers panel +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 +Requires: /usr/bin/gkbd-keyboard-display +# For the color panel +Requires: colord +%if 0%{?fedora} +Recommends: gnome-color-manager +%endif + +Provides: control-center-extra = %{epoch}:%{version}-%{release} +Obsoletes: control-center-extra < 1:2.30.3-3 +Obsoletes: accountsdialog <= 0.6 +Provides: accountsdialog = %{epoch}:%{version}-%{release} +Obsoletes: desktop-effects <= 0.8.7-3 +Provides: desktop-effects = %{epoch}:%{version}-%{release} +Provides: control-center-devel = %{epoch}:%{version}-%{release} +Obsoletes: control-center-devel < 1:3.1.4-2 + +%description +This package contains configuration utilities for the GNOME desktop, which +allow to configure accessibility options, desktop fonts, keyboard and mouse +properties, sound setup, desktop theme and background, user interface +properties, screen resolution, and other settings. + +%package filesystem +Summary: GNOME Control Center directories +# NOTE: this is an "inverse dep" subpackage. It gets pulled in +# NOTE: by the main package an MUST not depend on the main package + +%description filesystem +The GNOME control-center provides a number of extension points +for applications. This package contains directories where applications +can install configuration files that are picked up by the control-center +utilities. + + +%prep +%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 + +%build +%configure \ + --disable-static \ + --disable-update-mimedb \ + CFLAGS="$RPM_OPT_FLAGS -Wno-error" + +# drop unneeded direct library deps with --as-needed +# libtool doesn't make this easy, so we do it the hard way +sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' -e 's/ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then/ func_append compile_command " -Wl,-O1,--as-needed"\n func_append finalize_command " -Wl,-O1,--as-needed"\n\0/' libtool + +make %{?_smp_mflags} V=1 + +%install +%make_install + +desktop-file-install --delete-original \ + --dir $RPM_BUILD_ROOT%{_datadir}/applications \ + --add-only-show-in GNOME \ + $RPM_BUILD_ROOT%{_datadir}/applications/*.desktop + +# we do want this +mkdir -p $RPM_BUILD_ROOT%{_datadir}/gnome/wm-properties + +# we don't want these +rm -rf $RPM_BUILD_ROOT%{_datadir}/gnome/autostart +rm -rf $RPM_BUILD_ROOT%{_datadir}/gnome/cursor-fonts + +# remove useless libtool archive files +find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} \; + +# remove rpath +chrpath --delete $RPM_BUILD_ROOT%{_bindir}/gnome-control-center + +%find_lang %{gettext_package} --all-name --with-gnome + +%post +/sbin/ldconfig +update-desktop-database &> /dev/null || : +touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : + +%postun +/sbin/ldconfig +update-desktop-database &> /dev/null || : +if [ $1 -eq 0 ]; then + touch --no-create %{_datadir}/icons/hicolor &>/dev/null + gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : +fi + +%posttrans +gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : + +%files -f %{gettext_package}.lang +%license COPYING +%doc AUTHORS NEWS README +%{_datadir}/gnome-control-center/keybindings/*.xml +%{_datadir}/gnome-control-center/pixmaps +%{_datadir}/gnome-control-center/sounds/gnome-sounds-default.xml +%{_datadir}/appdata/gnome-control-center.appdata.xml +%{_datadir}/applications/*.desktop +%{_datadir}/icons/hicolor/*/*/* +%{_datadir}/gnome-control-center/icons/ +%{_datadir}/polkit-1/actions/org.gnome.controlcenter.*.policy +%{_datadir}/pkgconfig/gnome-keybindings.pc +%{_datadir}/sounds/gnome/default/*/*.ogg +%{_bindir}/gnome-control-center +%{_libexecdir}/cc-remote-login-helper +%{_libexecdir}/gnome-control-center-search-provider +%{_datadir}/pixmaps/faces +%{_datadir}/man/man1/gnome-control-center.1.* +%{_datadir}/dbus-1/services/org.gnome.ControlCenter.SearchProvider.service +%{_datadir}/dbus-1/services/org.gnome.ControlCenter.service +%{_datadir}/gettext/ +%{_datadir}/gnome-shell/search-providers/gnome-control-center-search-provider.ini +%{_datadir}/polkit-1/rules.d/gnome-control-center.rules +%{_datadir}/bash-completion/completions/gnome-control-center + +%files filesystem +%dir %{_datadir}/gnome/wm-properties +%dir %{_datadir}/gnome-control-center +%dir %{_datadir}/gnome-control-center/keybindings +%dir %{_datadir}/gnome-control-center/sounds + + +%changelog +* 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 + +* 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 Oct 20 2017 Rui Matos - 1:3.26.1-2 +- Rebase to 3.26.1 +- Resolves: #1481407 + +* Sun Oct 08 2017 Kalev Lember - 1:3.26.1-1 +- Update to 3.26.1 + +* Wed Sep 13 2017 Kalev Lember - 1:3.26.0-1 +- Update to 3.26.0 + +* Tue Sep 05 2017 Kalev Lember - 1:3.25.92.1-1 +- Update to 3.25.92.1 + +* Thu Aug 24 2017 Kalev Lember - 1:3.25.91-1 +- Update to 3.25.91 + +* 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 + +* 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 Sep 17 2014 Kalev Lember - 1:3.13.92-1 +- Update to 3.13.92 + +* Wed Sep 03 2014 Kalev Lember - 1:3.13.91-1 +- Update to 3.13.91 + +* Tue Aug 19 2014 Kalev Lember - 1:3.13.90-1 +- Update to 3.13.90 + +* Mon Aug 18 2014 Kalev Lember - 1:3.13.4-3 +- Rebuilt for upower 0.99.1 soname bump + +* Sat Aug 16 2014 Fedora Release Engineering - 1:3.13.4-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Wed Jul 23 2014 Kalev Lember - 1:3.13.4-1 +- Update to 3.13.4 +- Drop obsolete gnome-menus and redhat-menus deps + +* Fri Jun 27 2014 Rex Dieter 3.13.3-3 +- drop needless scriptlet deps too + +* 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 + +* Thu Jun 26 2014 Richard Hughes - 1:3.13.3-1 +- Update to 3.13.3 + +* Tue Jun 24 2014 Richard Hughes - 1:3.13.2-1 +- Update to 3.13.2 + +* Sat Jun 07 2014 Fedora Release Engineering - 1:3.13.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Thu May 22 2014 Adam Williamson - 1:3.13.1-5 +- backport upstream fix for BGO #730080 (i need it, so everyone gets it) + +* Wed May 07 2014 Kalev Lember - 1:3.13.1-4 +- Drop gnome-icon-theme and gnome-icon-theme-symbolic dependencies + +* Mon May 05 2014 Kalev Lember - 1:3.13.1-3 +- Drop unused libXrandr dep + +* Wed Apr 30 2014 Richard Hughes - 1:3.13.1-2 +- Rebuild for libgtop + +* Mon Apr 28 2014 Richard Hughes - 1:3.13.1-1 +- Update to 3.13.1 + +* Wed Apr 16 2014 Kalev Lember - 1:3.12.1-1 +- Update to 3.12.1 + +* Sat Apr 05 2014 Kalev Lember - 1:3.12.0-2 +- Update dep versions + +* Mon Mar 24 2014 Richard Hughes - 1:3.12.0-1 +- Update to 3.12.0 + +* Tue Mar 18 2014 Richard Hughes - 1:3.11.92-1 +- Update to 3.11.92 + +* Wed Mar 05 2014 Richard Hughes - 1:3.11.91-1 +- Update to 3.11.91 + +* Wed Feb 19 2014 Richard Hughes - 1:3.11.90-2 +- Rebuilt for gnome-desktop soname bump + +* Tue Feb 18 2014 Richard Hughes - 1:3.11.90-1 +- Update to 3.11.90 + +* Tue Feb 04 2014 Richard Hughes - 1:3.11.5-1 +- Update to 3.11.5 + +* Tue Dec 17 2013 Richard Hughes - 1:3.11.3-1 +- Update to 3.11.3 + +* Mon Nov 25 2013 Richard Hughes - 1:3.11.2-1 +- Update to 3.11.2 + +* Wed Nov 13 2013 Bastien Nocera - 1:3.11.1-2 +- Add vino dependency + +* Thu Oct 31 2013 Florian Müllner - 1:3.11.1-1 +- Update to 3.11.1 + +* Mon Oct 28 2013 Richard Hughes - 1:3.10.1-1 +- Update to 3.10.1 + +* Wed Sep 25 2013 Richard Hughes - 1:3.10.0-1 +- Update to 3.10.0 + +* Wed Sep 18 2013 Kalev Lember - 1:3.9.92-1 +- Update to 3.9.92 + +* Wed Sep 04 2013 Kalev Lember - 1:3.9.91-1 +- Update to 3.9.91 + +* Tue Sep 03 2013 Kalev Lember - 1:3.9.90.1-2 +- Rebuilt for libgnome-desktop soname bump + +* Thu Aug 22 2013 Kalev Lember - 1:3.9.90.1-1 +- Update to 3.9.90.1 + +* Thu Aug 22 2013 Kalev Lember - 1:3.9.90-1 +- Update to 3.9.90 +- Drop obsolete build deps + +* Thu Aug 15 2013 Kalev Lember - 1:3.9.5-2 +- Rebuilt with bluetooth support + +* Wed Jul 31 2013 Adam Williamson - 1:3.9.5-1 +- Update to 3.9.5 +- buildrequires libsoup-devel + +* Tue Jul 30 2013 Richard Hughes - 1:3.9.3-2 +- Rebuild for colord soname bump + +* Tue Jul 16 2013 Richard Hughes - 1:3.9.3-1 +- Update to 3.9.3 + +* Wed Jun 26 2013 Debarshi Ray - 1:3.9.2.1-2 +- Add 'Requires: rygel' for the sharing panel + +* 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 + +* Mon May 06 2013 Kalev Lember - 1:3.8.1.5-1 +- Update to 3.8.1.5 + +* Fri May 3 2013 Matthias Clasen - 1:3.8.1-3 +- Improve the distro logo patch + +* Tue Apr 16 2013 Ray Strode - 1:3.8.1-2 +- Add a requires for the keyboard viewer + +* Tue Apr 16 2013 Richard Hughes - 1:3.8.1-1 +- Update to 3.8.1 + +* Mon Apr 1 2013 Matthias Clasen - 1:3.8.0-3 +- Apply the patch, too + +* Sun Mar 31 2013 Matthias Clasen - 1:3.8.0-2 +- Show the Fedora logo in the details panel + +* Tue Mar 26 2013 Richard Hughes - 1:3.8.0-1 +- Update to 3.8.0 + +* Wed Mar 20 2013 Richard Hughes - 1:3.7.92-1 +- Update to 3.7.92 + +* Tue Mar 05 2013 Debarshi Ray - 1:3.7.91-1 +- Update to 3.7.91 + +* Sat Feb 23 2013 Kalev Lember - 1:3.7.90-2 +- Buildrequire libsmbclient-devel for the printer panel + +* Fri Feb 22 2013 Kalev Lember - 1:3.7.90-1 +- Update to 3.7.90 + +* Thu Feb 07 2013 Richard Hughes - 1:3.7.5.1-1 +- Update to 3.7.5.1 + +* Tue Feb 05 2013 Richard Hughes - 1:3.7.5-1 +- Update to 3.7.5 + +* Fri Jan 25 2013 Peter Robinson 1:3.7.4-3 +- Rebuild for new cogl + +* Wed Jan 16 2013 Matthias Clasen - 1:3.7.4-2 +- Fix linking against libgd + +* Wed Jan 16 2013 Richard Hughes - 1:3.7.4-1 +- Update to 3.7.4 + +* Fri Dec 21 2012 Kalev Lember - 1:3.7.3-1 +- Update to 3.7.3 +- Drop upstreamed wacom-osd-window patch +- Adjust for the statically linked plugins and panel applet removal + +* Tue Nov 20 2012 Richard Hughes - 1:3.7.1-1 +- Update to 3.7.1 + +* Wed Nov 14 2012 Kalev Lember - 1:3.6.3-1 +- Update to 3.6.3 + +* Wed Nov 07 2012 Bastien Nocera 3.6.2-2 +- Require glx-utils for the info panel + +* Tue Oct 23 2012 Kalev Lember - 1:3.6.2-1 +- Update to 3.6.2 + +* Mon Oct 08 2012 Bastien Nocera 3.6.1-1 +- Update to 3.6.1 + +* Fri Oct 5 2012 Olivier Fourdan - 1:3.6.0-2 +- Add Wacom OSD window from upstream bug #683567 + +* Tue Sep 25 2012 Richard Hughes - 1:3.6.0-1 +- Update to 3.6.0 + +* Wed Sep 19 2012 Richard Hughes - 1:3.5.92-1 +- Update to 3.5.92 + +* Thu Sep 06 2012 Richard Hughes - 1:3.5.91-1 +- Update to 3.5.91 + +* Sun Aug 26 2012 Matthias Clasen - 1:3.5.90-2 +- Drop apg dependency, it is no longer used + +* Wed Aug 22 2012 Richard Hughes - 1:3.5.90-1 +- Update to 3.5.90 + +* Sat Aug 18 2012 Debarshi Ray - 1:3.5.6-2 +- Add Requires: nm-connection-editor (RH #849268) + +* Wed Aug 15 2012 Debarshi Ray - 1:3.5.6-1 +- Update to 3.5.6 + +* Wed Aug 15 2012 Dan Horák - 1:3.5.5-4 +- no wacom support on s390(x) + +* Wed Aug 15 2012 Debarshi Ray - 1:3.5.5-3 +- Rebuild against newer gnome-bluetooth + +* Fri Jul 27 2012 Fedora Release Engineering - 1:3.5.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Thu Jul 19 2012 Matthias Clasen - 1:3.5.5-1 +- Update to 3.5.5 + +* Mon Jul 02 2012 Dan Horák - 1:3.5.4-2 +- fix build on s390(x) without Bluetooth + +* Wed Jun 27 2012 Richard Hughes - 1:3.5.4-1 +- Update to 3.5.4 + +* Tue Jun 26 2012 Richard Hughes - 1:3.5.3-1 +- Update to 3.5.3 + +* Wed Jun 06 2012 Richard Hughes - 1:3.5.2-1 +- Update to 3.5.2 + +* Fri May 18 2012 Richard Hughes - 1:3.4.2-1 +- Update to 3.4.2 + +* Tue May 08 2012 Bastien Nocera 3.4.1-2 +- Disable Bluetooth panel on s390 + +* Mon Apr 16 2012 Richard Hughes - 1:3.4.1-1 +- Update to 3.4.1 + +* Thu Apr 12 2012 Marek Kasik - 3.4.0-2 +- Add support for FirewallD1 API +- Resolves: #802381 + +* Mon Mar 26 2012 Richard Hughes - 3.4.0-1 +- New upstream version. + +* Tue Mar 20 2012 Richard Hughes 3.3.92-1 +- Update to 3.3.92 + +* Mon Mar 05 2012 Bastien Nocera 3.3.91-1 +- Update to 3.3.91 + +* Wed Feb 22 2012 Bastien Nocera 3.3.90-1 +- Update to 3.3.90 + +* Tue Feb 7 2012 Matthias Clasen 3.3.5-1 +- Update to 3.3.5 + +* Wed Jan 18 2012 Bastien Nocera 3.3.4.1-1 +- Update to 3.3.4.1 + +* Tue Jan 17 2012 Matthias Clasen 3.3.4-2 +- Use systemd for session tracking + +* Tue Jan 17 2012 Bastien Nocera 3.3.4-1 +- Update to 3.3.4 + +* Thu Jan 12 2012 Fedora Release Engineering - 1:3.3.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Wed Dec 21 2011 Matthias Clasen 3.3.3-1 +- Update to 3.3.3 + +* Wed Nov 23 2011 Matthias Clasen 3.3.2-1 +- Update to 3.3.2 + +* Fri Nov 11 2011 Bastien Nocera 3.2.2-1 +- Update to 3.2.2 + +* Wed Oct 26 2011 Fedora Release Engineering - 1:3.2.1-2 +- Rebuilt for glibc bug#747377 + +* Mon Oct 17 2011 Bastien Nocera 3.2.1-1 +- Update to 3.2.1 + +* Wed Sep 28 2011 Ray - 1:3.2.0-1 +- Update to 3.2.0 + +* Tue Sep 20 2011 Matthias Clasen 3.1.92-1 +- Update to 3.1.92 + +* Tue Sep 6 2011 Matthias Clasen 3.1.91-1 +- Update to 3.1.91 + +* Wed Aug 31 2011 Matthias Clasen 3.1.90-1 +- Update to 3.1.90 + +* Mon Aug 22 2011 Matthias Clasen 3.1.5-3 +- Fix a crash without configured layouts + +* Fri Aug 19 2011 Matthias Clasen 3.1.5-2 +- Obsolete control-center-devel + +* Thu Aug 18 2011 Matthias Clasen 3.1.5-1 +- Update to 3.1.5 + +* Wed Aug 17 2011 Christoph Wickert - 3.1.4-2 +- Fix autostart behavior (#729271) + +* Mon Jul 25 2011 Matthias Clasen 3.1.4-1 +- Update to 3.1.4 + +* Mon Jul 04 2011 Bastien Nocera 3.1.3-1 +- Update to 3.1.3 + +* Fri Jun 17 2011 Tomas Bzatek - 3.0.2-1 +- Update to 3.0.2 + +* Wed Jun 15 2011 Bastien Nocera 3.0.1.1-4 +- Rebuild against new gnome-desktop3 libs + +* Wed Apr 27 2011 Matthias Clasen - 3.0.1.1-3 +- Rebuild against newer cheese-libs + +* Tue Apr 26 2011 Matthias Clasen - 3.0.1.1-1 +- Update to 3.0.1.1 + +* Tue Apr 26 2011 Bastien Nocera 3.0.1-1 +- Update to 3.0.1 + +* Thu Apr 7 2011 Matthias Clasen 3.0.0.1-3 +- Only autostart the sound applet in GNOME 3 (#693548) + +* Wed Apr 6 2011 Matthias Clasen 3.0.0.1-2 +- Add a way to connect to hidden access points + +* Wed Apr 6 2011 Matthias Clasen 3.0.0.1-1 +- Update to 3.0.0.1 + +* Mon Apr 04 2011 Bastien Nocera 3.0.0-1 +- Update to 3.0.0 + +* Mon Mar 28 2011 Matthias Clasen 2.91.93-1 +- 2.91.93 + +* Fri Mar 25 2011 Matthias Clasen 2.91.92-4 +- Rebuild against newer cheese + +* Thu Mar 24 2011 Matthias Clasen 2.91.92-3 +- Rebuild against NetworkManager 0.9 + +* Mon Mar 21 2011 Matthias Clasen 2.91.92-1 +- Update to 2.91.92 + +* Thu Mar 17 2011 Ray Strode 2.91.91-6 +- Drop incomplete "Supervised" account type + Resolves: #688363 + +* Tue Mar 15 2011 Bastien Nocera 2.91.91-5 +- We now replace desktop-effects, with the info panel (#684565) + +* Mon Mar 14 2011 Bastien Nocera 2.91.91-4 +- Add gnome-icon-theme-symbolic dependency (#678696) + +* Wed Mar 09 2011 Richard Hughes 2.91.91-3 +- Ensure we have NetworkManager-glib-devel to get the network panel +- Explicitly list all the panels so we know if one goes missing + +* Tue Mar 8 2011 Matthias Clasen 2.91.91-2 +- Rebuild against NetworkManager 0.9, to get the network panel + +* Tue Mar 08 2011 Bastien Nocera 2.91.91-1 +- Update to 2.91.91 +- Disable libsocialweb support until Flickr integration is fixed upstream + +* Mon Feb 28 2011 Matthias Clasen - 1:2.91.90-2 +- Fix a typo in the autostart condition for the sound applet + +* Tue Feb 22 2011 Matthias Clasen - 1:2.91.90-1 +- Update to 2.91.90 + +* Sun Feb 13 2011 Christopher Aillon - 1:2.91.6-9 +- Rebuild against new libxklavier + +* Thu Feb 10 2011 Matthias Clasen 2.91.6-8 +- Rebuild against newer gtk + +* Tue Feb 08 2011 Fedora Release Engineering - 1:2.91.6-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Mon Feb 07 2011 Bastien Nocera 2.91.6-6 +- Add missing apg Requires (#675227) + +* Sat Feb 05 2011 Bastien Nocera 2.91.6-5 +- Fix crasher running region and language with KDE apps installed + +* Fri Feb 04 2011 Bastien Nocera 2.91.6-4 +- Fix crasher running date and time on the live CD + +* Thu Feb 03 2011 Bastien Nocera 2.91.6-3 +- Add missing iso-codes dependencies + +* Thu Feb 03 2011 Bastien Nocera 2.91.6-2 +- Rebuild against newer GTK+ 3.x + +* Wed Feb 2 2011 Matthias Clasen 2.91.6-1 +- Update to 2.91.6 + +* Mon Jan 10 2011 Matthias Clasen 2.91.5-1 +- Update to 2.91.5 + +* Sat Jan 8 2011 Matthias Clasen 2.91.4-1 +- Update to 2.91.4 + +* Fri Dec 10 2010 Bill Nottingham 2.91.3-4 +- user-accounts: require accountsserivce, obsolete accountsdialog + +* Fri Dec 3 2010 Matthias Clasen 2.91.3-3 +- Fix initial window size + +* Fri Dec 3 2010 Matthias Clasen 2.91.3-2 +- Rebuild against new gtk + +* Wed Dec 01 2010 Bastien Nocera 2.91.3-1 +- Update to 2.91.3 + +* Fri Nov 12 2010 Adam Williamson 2.91.2-2 +- add upstream patch to fix sound module to link against libxml + https://bugzilla.gnome.org/show_bug.cgi?id=634467 + +* Wed Nov 10 2010 Bastien Nocera 2.91.2-1 +- Update to 2.91.2 + +* Wed Oct 06 2010 Richard Hughes 2.91.0-2 +- Rebuild with a new gnome-settings-daemon + +* Wed Oct 06 2010 Richard Hughes 2.91.0-1 +- Update to 2.91.0 + +* Wed Sep 29 2010 jkeating - 1:2.90.1-4 +- Rebuilt for gcc bug 634757 + +* Fri Sep 24 2010 Bastien Nocera 2.90.1-3 +- Force enable libsocialweb support, it's disabled by default + +* Fri Sep 24 2010 Bastien Nocera 2.90.1-2 +- Add libsocialweb BR for the flickr support in background + +* Wed Sep 22 2010 Bastien Nocera 2.90.1-1 +- Update to 2.90.1 + +* Thu Aug 12 2010 Colin Walters - 1:2.31.6-1 +- New upstream + +* Wed Jul 21 2010 Bastien Nocera 2.31.5-2 +- Trim BuildRequires +- Remove libgail-gnome dependency (#616632) + +* Tue Jul 13 2010 Matthias Clasen 2.31.5-1 +- Update to 2.31.5 + +* Wed Jun 30 2010 Matthias Clasen 2.31.4.2-1 +- Update to 2.31.4.2 + +* Wed Jun 30 2010 Matthias Clasen 2.31.4.1-1 +- Update to 2.31.4.1 + +* Wed Jun 23 2010 Bastien Nocera 2.31.3-2 +- Add patches to compile against GTK+ 3.x + +* Tue Jun 8 2010 Matthias Clasen 2.31.3-1 +- Update to 2.31.3 + +* Wed Jun 2 2010 Matthias Clasen 2.31.2-3 +- Add Provides/Obsoletes for the no-longer-existing -extra package + +* Fri May 28 2010 Matthias Clasen 2.31.2-2 +- Update to 2.31.2 +- Remove vendor prefixes from desktop files, since that breaks + the new shell + +* Tue May 11 2010 Matthias Clasen 2.30.1-2 +- Install PolicyKit policy for setting the default background + in the right location + +* Tue Apr 27 2010 Matthias Clasen 2.30.1-1 +- Update to 2.30.1 +- Spec file cleanups + +* Mon Mar 29 2010 Matthias Clasen 2.30.0-1 +- Update to 2.30.0 + +* Mon Mar 22 2010 Bastien Nocera 2.29.92-3 +- Fix crash on exit in gnome-about-me (#574256) + +* Wed Mar 10 2010 Bastien Nocera 2.29.92-2 +- Remove obsoleted patches + +* Tue Mar 09 2010 Bastien Nocera 2.29.92-1 +- Update to 2.29.92 + +* Wed Feb 24 2010 Matthias Clasen - 2.29.91-1 +- Update to 2.29.91 + +* Mon Feb 15 2010 Matthias Clasen - 2.29.90-2 +- Properly initialize threads in the appearance capplet + +* Wed Feb 10 2010 Bastien Nocera 2.29.90-1 +- Update to 2.29.90 + +* Tue Jan 26 2010 Matthias Clasen - 2.29.6-1 +- Update to 2.29.6 + +* Sun Jan 17 2010 Matthias Clasen - 2.29.4-2 +- Rebuild + +* Mon Jan 4 2010 Matthias Clasen - 2.29.4-1 +- Update to 2.29.4 +- Drop many upstreamed patches