From 072f7c4d5fb0a9886577b300bdceda9f3853954a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Mon, 27 Mar 2023 17:14:59 -0400 Subject: [PATCH] Backport GnomeRR fix for detecting built in panels Resolves: #2076472 --- ...pe-from-mutter-to-fix-detection-of-b.patch | 739 ++++++++++++++++++ gnome-desktop3.spec | 8 +- 2 files changed, 746 insertions(+), 1 deletion(-) create mode 100644 0001-Use-connector_type-from-mutter-to-fix-detection-of-b.patch diff --git a/0001-Use-connector_type-from-mutter-to-fix-detection-of-b.patch b/0001-Use-connector_type-from-mutter-to-fix-detection-of-b.patch new file mode 100644 index 0000000..2560842 --- /dev/null +++ b/0001-Use-connector_type-from-mutter-to-fix-detection-of-b.patch @@ -0,0 +1,739 @@ +From 6b9917479e92adb3bdab99624901fef2f8c0aa4a Mon Sep 17 00:00:00 2001 +From: Jeremy Soller +Date: Tue, 11 Jun 2019 15:25:26 -0600 +Subject: [PATCH] Use connector_type from mutter to fix detection of builtin + display on NVIDIA + +--- + libgnome-desktop/gnome-rr-config.c | 6 +++--- + libgnome-desktop/gnome-rr-output-info.c | 2 ++ + libgnome-desktop/gnome-rr-private.h | 5 +++-- + libgnome-desktop/gnome-rr.c | 27 ++++++++++++++++--------- + 4 files changed, 26 insertions(+), 14 deletions(-) + +diff --git a/libgnome-desktop/gnome-rr-config.c b/libgnome-desktop/gnome-rr-config.c +index 707df697..396f1f4d 100644 +--- a/libgnome-desktop/gnome-rr-config.c ++++ b/libgnome-desktop/gnome-rr-config.c +@@ -136,60 +136,61 @@ gnome_rr_config_finalize (GObject *gobject) + G_OBJECT_CLASS (gnome_rr_config_parent_class)->finalize (gobject); + } + + gboolean + gnome_rr_config_load_current (GnomeRRConfig *config, GError **error) + { + GPtrArray *a; + GnomeRROutput **rr_outputs; + int i; + int clone_width = -1; + int clone_height = -1; + int last_x; + + g_return_val_if_fail (GNOME_IS_RR_CONFIG (config), FALSE); + + a = g_ptr_array_new (); + rr_outputs = gnome_rr_screen_list_outputs (config->priv->screen); + + config->priv->clone = FALSE; + + for (i = 0; rr_outputs[i] != NULL; ++i) + { + GnomeRROutput *rr_output = rr_outputs[i]; + GnomeRROutputInfo *output = g_object_new (GNOME_TYPE_RR_OUTPUT_INFO, NULL); + GnomeRRMode *mode = NULL; + GnomeRRCrtc *crtc; + + output->priv->name = g_strdup (gnome_rr_output_get_name (rr_output)); + output->priv->connected = TRUE; + output->priv->display_name = g_strdup (gnome_rr_output_get_display_name (rr_output)); ++ output->priv->connector_type = g_strdup (_gnome_rr_output_get_connector_type (rr_output)); + output->priv->config = config; + output->priv->is_tiled = _gnome_rr_output_get_tile_info (rr_output, + &output->priv->tile); + if (output->priv->is_tiled) + { + _gnome_rr_output_get_tiled_display_size (rr_output, NULL, NULL, + &output->priv->total_tiled_width, + &output->priv->total_tiled_height); + } + + if (!output->priv->connected) + { + output->priv->x = -1; + output->priv->y = -1; + output->priv->width = -1; + output->priv->height = -1; + output->priv->rate = -1; + } + else + { + gnome_rr_output_get_ids_from_edid (rr_output, + &output->priv->vendor, + &output->priv->product, + &output->priv->serial); + + crtc = gnome_rr_output_get_crtc (rr_output); + mode = crtc ? gnome_rr_crtc_get_current_mode (crtc) : NULL; + + if (crtc && mode) + { +@@ -411,60 +412,61 @@ gnome_rr_config_equal (GnomeRRConfig *c1, + GnomeRROutputInfo *output1 = c1->priv->outputs[i]; + GnomeRROutputInfo *output2; + + output2 = find_output (c2, output1->priv->name); + if (!output2 || !output_equal (output1, output2)) + return FALSE; + } + + return TRUE; + } + + static GnomeRROutputInfo ** + make_outputs (GnomeRRConfig *config) + { + GPtrArray *outputs; + GnomeRROutputInfo *first_on; + int i; + + outputs = g_ptr_array_new (); + + first_on = NULL; + + for (i = 0; config->priv->outputs[i] != NULL; ++i) + { + GnomeRROutputInfo *old = config->priv->outputs[i]; + GnomeRROutputInfo *new = g_object_new (GNOME_TYPE_RR_OUTPUT_INFO, NULL); + *(new->priv) = *(old->priv); + + new->priv->name = g_strdup (old->priv->name); + new->priv->display_name = g_strdup (old->priv->display_name); ++ new->priv->connector_type = g_strdup (old->priv->connector_type); + new->priv->vendor = g_strdup (old->priv->vendor); + new->priv->product = g_strdup (old->priv->product); + new->priv->serial = g_strdup (old->priv->serial); + + if (old->priv->on && !first_on) + first_on = old; + + if (config->priv->clone && new->priv->on) + { + g_assert (first_on); + + new->priv->width = first_on->priv->width; + new->priv->height = first_on->priv->height; + new->priv->rotation = first_on->priv->rotation; + new->priv->x = 0; + new->priv->y = 0; + } + + g_ptr_array_add (outputs, new); + } + + g_ptr_array_add (outputs, NULL); + + return (GnomeRROutputInfo **)g_ptr_array_free (outputs, FALSE); + } + + gboolean + gnome_rr_config_applicable (GnomeRRConfig *configuration, + GnomeRRScreen *screen, + GError **error) +@@ -565,63 +567,61 @@ gnome_rr_config_ensure_primary (GnomeRRConfig *configuration) + g_return_val_if_fail (GNOME_IS_RR_CONFIG (configuration), FALSE); + + builtin_display = NULL; + top_left = NULL; + found = FALSE; + priv = configuration->priv; + + for (i = 0; priv->outputs[i] != NULL; ++i) { + GnomeRROutputInfo *info = priv->outputs[i]; + + if (!info->priv->on) { + info->priv->primary = FALSE; + continue; + } + + /* ensure only one */ + if (info->priv->primary) { + if (found) { + info->priv->primary = FALSE; + } else { + found = TRUE; + } + } + + if (top_left == NULL + || (info->priv->x < top_left->priv->x + && info->priv->y < top_left->priv->y)) { + top_left = info; + } + if (builtin_display == NULL +- && _gnome_rr_output_name_is_builtin_display (info->priv->name)) { +- /* shame we can't find the connector type +- as with gnome_rr_output_is_builtin_display */ ++ && _gnome_rr_output_connector_type_is_builtin_display (info->priv->connector_type)) { + builtin_display = info; + } + } + + if (!found) { + if (builtin_display != NULL) { + builtin_display->priv->primary = TRUE; + } else if (top_left != NULL) { + /* Note: top_left can be NULL if all outputs are off */ + top_left->priv->primary = TRUE; + } + } + + return !found; + } + + static gboolean + gnome_rr_config_apply_helper (GnomeRRConfig *config, + GnomeRRScreen *screen, + gboolean persistent, + GError **error) + { + CrtcAssignment *assignment; + GnomeRROutputInfo **outputs; + gboolean result = FALSE; + int i; + + g_return_val_if_fail (GNOME_IS_RR_CONFIG (config), FALSE); + g_return_val_if_fail (GNOME_IS_RR_SCREEN (screen), FALSE); + +diff --git a/libgnome-desktop/gnome-rr-output-info.c b/libgnome-desktop/gnome-rr-output-info.c +index 7f97ecc1..08e9b45e 100644 +--- a/libgnome-desktop/gnome-rr-output-info.c ++++ b/libgnome-desktop/gnome-rr-output-info.c +@@ -13,69 +13,71 @@ + * The Gnome Library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with the Gnome Desktop Library; see the file COPYING.LIB. If not, + * write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + + #define GNOME_DESKTOP_USE_UNSTABLE_API + + #include + + #include "gnome-rr-config.h" + + #include "gnome-rr-private.h" + + G_DEFINE_TYPE (GnomeRROutputInfo, gnome_rr_output_info, G_TYPE_OBJECT) + + static void + gnome_rr_output_info_init (GnomeRROutputInfo *self) + { + self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GNOME_TYPE_RR_OUTPUT_INFO, GnomeRROutputInfoPrivate); + + self->priv->name = NULL; + self->priv->on = FALSE; + self->priv->rotation = GNOME_RR_ROTATION_0; + self->priv->display_name = NULL; ++ self->priv->connector_type = NULL; + } + + static void + gnome_rr_output_info_finalize (GObject *gobject) + { + GnomeRROutputInfo *self = GNOME_RR_OUTPUT_INFO (gobject); + + g_free (self->priv->name); + g_free (self->priv->display_name); ++ g_free (self->priv->connector_type); + g_free (self->priv->product); + g_free (self->priv->serial); + g_free (self->priv->vendor); + + G_OBJECT_CLASS (gnome_rr_output_info_parent_class)->finalize (gobject); + } + + static void + gnome_rr_output_info_class_init (GnomeRROutputInfoClass *klass) + { + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (GnomeRROutputInfoPrivate)); + + gobject_class->finalize = gnome_rr_output_info_finalize; + } + + /** + * gnome_rr_output_info_get_name: + * + * Returns: (transfer none): the output name + */ + char *gnome_rr_output_info_get_name (GnomeRROutputInfo *self) + { + g_return_val_if_fail (GNOME_IS_RR_OUTPUT_INFO (self), NULL); + + return self->priv->name; + } + + /** +diff --git a/libgnome-desktop/gnome-rr-private.h b/libgnome-desktop/gnome-rr-private.h +index e721e39c..36ad7767 100644 +--- a/libgnome-desktop/gnome-rr-private.h ++++ b/libgnome-desktop/gnome-rr-private.h +@@ -59,65 +59,66 @@ struct GnomeRRTile { + guint max_vert_tiles; + guint loc_horiz; + guint loc_vert; + guint width; + guint height; + }; + + typedef struct GnomeRRTile GnomeRRTile; + + struct _GnomeRROutputInfoPrivate + { + char * name; + + gboolean on; + int width; + int height; + int rate; + int x; + int y; + GnomeRRRotation rotation; + GnomeRRRotation available_rotations; + + gboolean connected; + char * vendor; + char * product; + char * serial; + double aspect; + int pref_width; + int pref_height; + char * display_name; ++ char * connector_type; + gboolean primary; + gboolean underscanning; + + gboolean is_tiled; + GnomeRRTile tile; + + int total_tiled_width; + int total_tiled_height; + /* ptr back to info */ + GnomeRRConfig *config; + }; + + struct _GnomeRRConfigPrivate + { + gboolean clone; + GnomeRRScreen *screen; + GnomeRROutputInfo **outputs; + }; + +-gboolean _gnome_rr_output_name_is_builtin_display (const char *name); ++gboolean _gnome_rr_output_connector_type_is_builtin_display (const char *connector_type); + + gboolean _gnome_rr_screen_apply_configuration (GnomeRRScreen *screen, + gboolean persistent, + GVariant *crtcs, + GVariant *outputs, + GError **error); + +- ++const char * _gnome_rr_output_get_connector_type (GnomeRROutput *output); + gboolean _gnome_rr_output_get_tile_info (GnomeRROutput *output, + GnomeRRTile *tile); + gboolean _gnome_rr_output_get_tiled_display_size (GnomeRROutput *output, + int *tile_w, int *tile_h, + int *width, int *height); + + #endif +diff --git a/libgnome-desktop/gnome-rr.c b/libgnome-desktop/gnome-rr.c +index dca50694..6a7bcfbb 100644 +--- a/libgnome-desktop/gnome-rr.c ++++ b/libgnome-desktop/gnome-rr.c +@@ -37,60 +37,61 @@ + + #include "gnome-rr-private.h" + + /* From xf86drmMode.h: it's ABI so it won't change */ + #define DRM_MODE_FLAG_INTERLACE (1<<4) + + enum { + SCREEN_PROP_0, + SCREEN_PROP_GDK_SCREEN, + SCREEN_PROP_DPMS_MODE, + SCREEN_PROP_LAST, + }; + + enum { + SCREEN_CHANGED, + SCREEN_OUTPUT_CONNECTED, + SCREEN_OUTPUT_DISCONNECTED, + SCREEN_SIGNAL_LAST, + }; + + gint screen_signals[SCREEN_SIGNAL_LAST]; + + struct GnomeRROutput + { + ScreenInfo * info; + guint id; + glong winsys_id; + + char * name; + char * display_name; ++ char * connector_type; + GnomeRRCrtc * current_crtc; + GnomeRRCrtc ** possible_crtcs; + GnomeRROutput ** clones; + GnomeRRMode ** modes; + + char * vendor; + char * product; + char * serial; + int width_mm; + int height_mm; + GBytes * edid; + char * edid_file; + + int backlight; + int min_backlight_step; + + gboolean is_primary; + gboolean is_presentation; + gboolean is_underscanning; + gboolean supports_underscanning; + + GnomeRRTile tile_info; + }; + + struct GnomeRRCrtc + { + ScreenInfo * info; + guint id; + glong winsys_id; + +@@ -1375,153 +1376,156 @@ output_initialize (GnomeRROutput *output, GVariant *info) + while (g_variant_iter_loop (clones, "u", &id)) + { + GnomeRROutput *gnome_rr_output = gnome_rr_output_by_id (output->info, id); + + if (gnome_rr_output) + g_ptr_array_add (a, gnome_rr_output); + } + g_ptr_array_add (a, NULL); + output->clones = (GnomeRROutput **)g_ptr_array_free (a, FALSE); + g_variant_iter_free (clones); + + /* Modes */ + a = g_ptr_array_new (); + while (g_variant_iter_loop (modes, "u", &id)) + { + GnomeRRMode *mode = mode_by_id (output->info, id); + + if (mode) + g_ptr_array_add (a, mode); + } + g_ptr_array_add (a, NULL); + output->modes = (GnomeRRMode **)g_ptr_array_free (a, FALSE); + g_variant_iter_free (modes); + + g_variant_lookup (properties, "vendor", "s", &output->vendor); + g_variant_lookup (properties, "product", "s", &output->product); + g_variant_lookup (properties, "serial", "s", &output->serial); + g_variant_lookup (properties, "width-mm", "i", &output->width_mm); + g_variant_lookup (properties, "height-mm", "i", &output->height_mm); + g_variant_lookup (properties, "display-name", "s", &output->display_name); ++ g_variant_lookup (properties, "connector-type", "s", &output->connector_type); + g_variant_lookup (properties, "backlight", "i", &output->backlight); + g_variant_lookup (properties, "min-backlight-step", "i", &output->min_backlight_step); + g_variant_lookup (properties, "primary", "b", &output->is_primary); + g_variant_lookup (properties, "presentation", "b", &output->is_presentation); + g_variant_lookup (properties, "underscanning", "b", &output->is_underscanning); + g_variant_lookup (properties, "supports-underscanning", "b", &output->supports_underscanning); + + if ((edid = g_variant_lookup_value (properties, "edid", G_VARIANT_TYPE ("ay")))) + { + output->edid = g_variant_get_data_as_bytes (edid); + g_variant_unref (edid); + } + else + g_variant_lookup (properties, "edid-file", "s", &output->edid_file); + + if ((tile = g_variant_lookup_value (properties, "tile", G_VARIANT_TYPE ("(uuuuuuuu)")))) + { + g_variant_get (tile, "(uuuuuuuu)", + &output->tile_info.group_id, &output->tile_info.flags, + &output->tile_info.max_horiz_tiles, &output->tile_info.max_vert_tiles, + &output->tile_info.loc_horiz, &output->tile_info.loc_vert, + &output->tile_info.width, &output->tile_info.height); + g_variant_unref (tile); + } + else + memset(&output->tile_info, 0, sizeof(output->tile_info)); + + if (output->is_primary) + output->info->primary = output; + + g_variant_unref (properties); + } + + static GnomeRROutput* + output_copy (const GnomeRROutput *from) + { + GPtrArray *array; + GnomeRRCrtc **p_crtc; + GnomeRROutput **p_output; + GnomeRRMode **p_mode; + GnomeRROutput *output = g_slice_new0 (GnomeRROutput); + + output->id = from->id; + output->info = from->info; + output->name = g_strdup (from->name); + output->display_name = g_strdup (from->display_name); ++ output->connector_type = g_strdup (from->connector_type); + output->vendor = g_strdup (from->vendor); + output->product = g_strdup (from->product); + output->serial = g_strdup (from->serial); + output->current_crtc = from->current_crtc; + output->backlight = from->backlight; + if (from->edid) + output->edid = g_bytes_ref (from->edid); + output->edid_file = g_strdup (from->edid_file); + + output->is_primary = from->is_primary; + output->is_presentation = from->is_presentation; + + array = g_ptr_array_new (); + for (p_crtc = from->possible_crtcs; *p_crtc != NULL; p_crtc++) + { + g_ptr_array_add (array, *p_crtc); + } + output->possible_crtcs = (GnomeRRCrtc**) g_ptr_array_free (array, FALSE); + + array = g_ptr_array_new (); + for (p_output = from->clones; *p_output != NULL; p_output++) + { + g_ptr_array_add (array, *p_output); + } + output->clones = (GnomeRROutput**) g_ptr_array_free (array, FALSE); + + array = g_ptr_array_new (); + for (p_mode = from->modes; *p_mode != NULL; p_mode++) + { + g_ptr_array_add (array, *p_mode); + } + output->modes = (GnomeRRMode**) g_ptr_array_free (array, FALSE); + + return output; + } + + static void + output_free (GnomeRROutput *output) + { + g_free (output->clones); + g_free (output->modes); + g_free (output->possible_crtcs); + g_free (output->name); + g_free (output->vendor); + g_free (output->product); + g_free (output->serial); + g_free (output->display_name); ++ g_free (output->connector_type); + g_free (output->edid_file); + if (output->edid) + g_bytes_unref (output->edid); + g_slice_free (GnomeRROutput, output); + } + + guint32 + gnome_rr_output_get_id (GnomeRROutput *output) + { + g_assert(output != NULL); + + return output->id; + } + + const guint8 * + gnome_rr_output_get_edid_data (GnomeRROutput *output, + gsize *size) + { + if (output->edid) + return g_bytes_get_data (output->edid, size); + + if (output->edid_file) + { + GMappedFile *mmap; + + mmap = g_mapped_file_new (output->edid_file, FALSE, NULL); + + if (mmap) + { + output->edid = g_mapped_file_get_bytes (mmap); +@@ -1651,82 +1655,79 @@ gnome_rr_screen_get_output_by_name (GnomeRRScreen *screen, + return NULL; + } + + /** + * gnome_rr_output_get_crtc: + * @output: a #GnomeRROutput + * Returns: (transfer none): + */ + GnomeRRCrtc * + gnome_rr_output_get_crtc (GnomeRROutput *output) + { + g_return_val_if_fail (output != NULL, NULL); + + return output->current_crtc; + } + + /** + * gnome_rr_output_get_possible_crtcs: + * @output: a #GnomeRROutput + * Returns: (array zero-terminated=1) (transfer none): + */ + GnomeRRCrtc ** + gnome_rr_output_get_possible_crtcs (GnomeRROutput *output) + { + g_return_val_if_fail (output != NULL, NULL); + + return output->possible_crtcs; + } + + gboolean +-_gnome_rr_output_name_is_builtin_display (const char *name) ++_gnome_rr_output_connector_type_is_builtin_display (const char *connector_type) + { +- if (!name) ++ if (!connector_type) + return FALSE; + +- if (strstr (name, "lvds") || /* Most drivers use an "LVDS" prefix... */ +- strstr (name, "LVDS") || +- strstr (name, "Lvds") || +- strstr (name, "LCD") || /* ... but fglrx uses "LCD" in some versions. Shoot me now, kthxbye. */ +- strstr (name, "eDP") || /* eDP is for internal built-in panel connections */ +- strstr (name, "DSI")) ++ if (strcmp (connector_type, "LVDS") == 0 || ++ strcmp (connector_type, "eDP") == 0 || ++ strcmp (connector_type, "DSI") == 0) + return TRUE; + + return FALSE; + } + + gboolean + gnome_rr_output_is_builtin_display (GnomeRROutput *output) + { + g_return_val_if_fail (output != NULL, FALSE); + +- return _gnome_rr_output_name_is_builtin_display (output->name); ++ return _gnome_rr_output_connector_type_is_builtin_display (output->connector_type); + } + + /** + * gnome_rr_output_get_current_mode: + * @output: a #GnomeRROutput + * Returns: (transfer none): the current mode of this output + */ + GnomeRRMode * + gnome_rr_output_get_current_mode (GnomeRROutput *output) + { + GnomeRRCrtc *crtc; + GnomeRRMode *mode; + g_return_val_if_fail (output != NULL, NULL); + + if ((crtc = gnome_rr_output_get_crtc (output))) + { + int total_w, total_h, tile_w, tile_h; + mode = gnome_rr_crtc_get_current_mode (crtc); + + if (_gnome_rr_output_get_tiled_display_size (output, &tile_w, &tile_h, &total_w, &total_h)) + { + if (mode->width == tile_w && + mode->height == tile_h) { + if (output->modes[0]->tiled) + return output->modes[0]; + } + } + return gnome_rr_crtc_get_current_mode (crtc); + } + return NULL; +@@ -2217,60 +2218,68 @@ gnome_rr_crtc_get_gamma (GnomeRRCrtc *crtc, + if (red) + *red = g_bytes_unref_to_data (red_bytes, &dummy); + else + g_bytes_unref (red_bytes); + if (green) + *green = g_bytes_unref_to_data (green_bytes, &dummy); + else + g_bytes_unref (green_bytes); + if (blue) + *blue = g_bytes_unref_to_data (blue_bytes, &dummy); + else + g_bytes_unref (blue_bytes); + + return TRUE; + } + + gboolean + gnome_rr_output_get_is_underscanning (GnomeRROutput *output) + { + g_assert(output != NULL); + return output->is_underscanning; + } + + gboolean + gnome_rr_output_supports_underscanning (GnomeRROutput *output) + { + g_assert (output != NULL); + return output->supports_underscanning; + } + ++const char * ++_gnome_rr_output_get_connector_type (GnomeRROutput *output) ++{ ++ g_return_val_if_fail (output != NULL, NULL); ++ ++ return output->connector_type; ++} ++ + gboolean + _gnome_rr_output_get_tile_info (GnomeRROutput *output, + GnomeRRTile *tile) + { + if (output->tile_info.group_id == UNDEFINED_GROUP_ID) + return FALSE; + + if (!tile) + return FALSE; + + *tile = output->tile_info; + return TRUE; + } + + GType + gnome_rr_dpms_mode_get_type (void) + { + static GType etype = 0; + if (etype == 0) { + static const GEnumValue values[] = { + { GNOME_RR_DPMS_ON, "GNOME_RR_DPMS_ON", "on" }, + { GNOME_RR_DPMS_STANDBY, "GNOME_RR_DPMS_STANDBY", "standby" }, + { GNOME_RR_DPMS_SUSPEND, "GNOME_RR_DPMS_SUSPEND", "suspend" }, + { GNOME_RR_DPMS_OFF, "GNOME_RR_DPMS_OFF", "off" }, + { GNOME_RR_DPMS_UNKNOWN, "GNOME_RR_DPMS_UNKNOWN", "unknown" }, + { 0, NULL, NULL } + }; + etype = g_enum_register_static ("GnomeRRDpmsModeType", values); + } + return etype; +-- +2.39.2 + diff --git a/gnome-desktop3.spec b/gnome-desktop3.spec index 4c8e5b6..ce1aa6e 100644 --- a/gnome-desktop3.spec +++ b/gnome-desktop3.spec @@ -7,13 +7,15 @@ Name: gnome-desktop3 Version: 3.32.2 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Shared code among gnome-panel, gnome-session, nautilus, etc License: GPLv2+ and LGPLv2+ URL: http://www.gnome.org Source0: http://download.gnome.org/sources/gnome-desktop/3.32/gnome-desktop-%{version}.tar.xz +Patch0: 0001-Use-connector_type-from-mutter-to-fix-detection-of-b.patch + BuildRequires: pkgconfig(gdk-pixbuf-2.0) >= %{gdk_pixbuf2_version} BuildRequires: pkgconfig(gio-2.0) >= %{glib2_version} BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version} @@ -105,6 +107,10 @@ the functionality of the installed %{name} package. %{_datadir}/installed-tests %changelog +* Thu Mar 16 2023 Jonas Ådahl - 3.32.2-2 +- Backport GnomeRR fix for detecting built in panels + Resolves: #2076472 + * Fri Jun 14 2019 Florian Müllner - 3.32.2-1 - Rebase to 3.32.2 Resolves: #1719241