Fix crasher do to size calculation bugs
Should resolve https://bugzilla.redhat.com/show_bug.cgi?id=674978
This commit is contained in:
parent
83785c9fb4
commit
de6fb34644
191
fix-crasher.patch
Normal file
191
fix-crasher.patch
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
From 6450a2100767b9d37ebe504e87d9fd5aec5111ff Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ray Strode <rstrode@redhat.com>
|
||||||
|
Date: Mon, 14 Feb 2011 11:45:13 -0500
|
||||||
|
Subject: [PATCH 1/2] greeter: drop child_adjustments_stale thing
|
||||||
|
|
||||||
|
When the greeter went to gtk3, the bit of code that toggled this
|
||||||
|
boolean got dropped, so it was never TRUE. That means all the places
|
||||||
|
that check the boolean are dead code that can be pruned.
|
||||||
|
---
|
||||||
|
gui/simple-greeter/gdm-scrollable-widget.c | 7 -------
|
||||||
|
1 files changed, 0 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/gui/simple-greeter/gdm-scrollable-widget.c b/gui/simple-greeter/gdm-scrollable-widget.c
|
||||||
|
index 1f8e807..dc464af 100644
|
||||||
|
--- a/gui/simple-greeter/gdm-scrollable-widget.c
|
||||||
|
+++ b/gui/simple-greeter/gdm-scrollable-widget.c
|
||||||
|
@@ -61,8 +61,6 @@ struct GdmScrollableWidgetPrivate
|
||||||
|
int forced_height;
|
||||||
|
|
||||||
|
GQueue *key_event_queue;
|
||||||
|
-
|
||||||
|
- guint child_adjustments_stale : 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct GdmScrollableWidgetAnimation
|
||||||
|
@@ -260,10 +258,6 @@ gdm_scrollable_widget_needs_scrollbar (GdmScrollableWidget *widget)
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (widget->priv->child_adjustments_stale) {
|
||||||
|
- return FALSE;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
child = gtk_bin_get_child (GTK_BIN (widget));
|
||||||
|
if (child != NULL) {
|
||||||
|
int available_height;
|
||||||
|
@@ -463,7 +457,6 @@ gdm_scrollable_widget_size_allocate (GtkWidget *widget,
|
||||||
|
|
||||||
|
gtk_widget_size_allocate (child,
|
||||||
|
&child_allocation);
|
||||||
|
- scrollable_widget->priv->child_adjustments_stale = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
1.7.4
|
||||||
|
|
||||||
|
|
||||||
|
From b37803d0436a5ff651415cb4fbb20813b91f4940 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ray Strode <rstrode@redhat.com>
|
||||||
|
Date: Mon, 14 Feb 2011 11:51:20 -0500
|
||||||
|
Subject: [PATCH 2/2] greeter: more gtk3 fixes
|
||||||
|
|
||||||
|
This commit drops use of the deprecated xthickness
|
||||||
|
and ythickness properties throughout, and fixes
|
||||||
|
padding and border calculations in various places,
|
||||||
|
---
|
||||||
|
gui/simple-greeter/gdm-scrollable-widget.c | 66 +++++++++++++++++++++-------
|
||||||
|
1 files changed, 50 insertions(+), 16 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/gui/simple-greeter/gdm-scrollable-widget.c b/gui/simple-greeter/gdm-scrollable-widget.c
|
||||||
|
index dc464af..da813f1 100644
|
||||||
|
--- a/gui/simple-greeter/gdm-scrollable-widget.c
|
||||||
|
+++ b/gui/simple-greeter/gdm-scrollable-widget.c
|
||||||
|
@@ -135,10 +135,20 @@ on_animation_tick (GdmScrollableWidgetAnimation *animation,
|
||||||
|
|
||||||
|
if (animation->step_func != NULL) {
|
||||||
|
GdmTimer *timer;
|
||||||
|
+ GtkStyleContext *context;
|
||||||
|
+ GtkStateFlags state;
|
||||||
|
+ GtkBorder padding, border;
|
||||||
|
|
||||||
|
height = animation->desired_height;
|
||||||
|
|
||||||
|
- height -= gtk_widget_get_style (animation->widget)->ythickness * 2;
|
||||||
|
+ context = gtk_widget_get_style_context (animation->widget);
|
||||||
|
+ state = gtk_widget_get_state_flags (animation->widget);
|
||||||
|
+
|
||||||
|
+ gtk_style_context_get_padding (context, state, &padding);
|
||||||
|
+ gtk_style_context_get_border (context, state, &border);
|
||||||
|
+
|
||||||
|
+ height -= padding.top + padding.bottom;
|
||||||
|
+ height -= border.top + border.bottom;
|
||||||
|
|
||||||
|
timer = g_object_ref (animation->timer);
|
||||||
|
animation->step_func (GDM_SCROLLABLE_WIDGET (animation->widget),
|
||||||
|
@@ -147,7 +157,8 @@ on_animation_tick (GdmScrollableWidgetAnimation *animation,
|
||||||
|
animation->step_func_user_data);
|
||||||
|
|
||||||
|
if (gdm_timer_is_started (timer)) {
|
||||||
|
- height += gtk_widget_get_style (animation->widget)->ythickness * 2;
|
||||||
|
+ height += padding.top + padding.bottom;
|
||||||
|
+ height += border.top + border.bottom;
|
||||||
|
|
||||||
|
animation->desired_height = height;
|
||||||
|
}
|
||||||
|
@@ -259,11 +270,23 @@ gdm_scrollable_widget_needs_scrollbar (GdmScrollableWidget *widget)
|
||||||
|
}
|
||||||
|
|
||||||
|
child = gtk_bin_get_child (GTK_BIN (widget));
|
||||||
|
- if (child != NULL) {
|
||||||
|
+ if (child != NULL && GTK_IS_SCROLLABLE (child)) {
|
||||||
|
+ GtkStyleContext *context;
|
||||||
|
+ GtkStateFlags state;
|
||||||
|
+ GtkBorder padding, border;
|
||||||
|
int available_height;
|
||||||
|
int child_scrolled_height;
|
||||||
|
|
||||||
|
+ context = gtk_widget_get_style_context (GTK_WIDGET (widget));
|
||||||
|
+ state = gtk_widget_get_state_flags (GTK_WIDGET (widget));
|
||||||
|
+
|
||||||
|
+ gtk_style_context_get_padding (context, state, &padding);
|
||||||
|
+ gtk_style_context_get_border (context, state, &border);
|
||||||
|
+
|
||||||
|
available_height = gtk_widget_get_allocated_height (GTK_WIDGET (widget));
|
||||||
|
+ available_height -= padding.top + padding.bottom;
|
||||||
|
+ available_height -= border.top + border.bottom;
|
||||||
|
+
|
||||||
|
gtk_widget_get_preferred_height (child, NULL, &child_scrolled_height);
|
||||||
|
needs_scrollbar = child_scrolled_height > available_height;
|
||||||
|
} else {
|
||||||
|
@@ -295,10 +318,21 @@ gdm_scrollable_widget_get_preferred_size (GtkWidget *widget,
|
||||||
|
gtk_style_context_get_border (context, state, &border);
|
||||||
|
|
||||||
|
scrollable_widget = GDM_SCROLLABLE_WIDGET (widget);
|
||||||
|
+
|
||||||
|
+ minimum_req.width = padding.left + padding.right;
|
||||||
|
+ minimum_req.width += border.left + border.right;
|
||||||
|
+ minimum_req.height = padding.top + padding.bottom;
|
||||||
|
+ minimum_req.height += border.top + border.bottom;
|
||||||
|
+
|
||||||
|
+ natural_req.width = padding.left + padding.right;
|
||||||
|
+ natural_req.width += border.left + border.right;
|
||||||
|
+ natural_req.height = padding.top + padding.bottom;
|
||||||
|
+ natural_req.height += border.top + border.bottom;
|
||||||
|
+
|
||||||
|
if (orientation == GTK_ORIENTATION_VERTICAL
|
||||||
|
&& scrollable_widget->priv->forced_height >= 0) {
|
||||||
|
- minimum_req.height = scrollable_widget->priv->forced_height;
|
||||||
|
- natural_req.height = scrollable_widget->priv->forced_height;
|
||||||
|
+ minimum_req.height += scrollable_widget->priv->forced_height;
|
||||||
|
+ natural_req.height += scrollable_widget->priv->forced_height;
|
||||||
|
} else {
|
||||||
|
child = gtk_bin_get_child (GTK_BIN (widget));
|
||||||
|
|
||||||
|
@@ -306,16 +340,6 @@ gdm_scrollable_widget_get_preferred_size (GtkWidget *widget,
|
||||||
|
&scrollbar_requisition,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
- minimum_req.width = padding.left + padding.right;
|
||||||
|
- minimum_req.width = border.left + border.right;
|
||||||
|
- minimum_req.height = padding.top + padding.bottom;
|
||||||
|
- minimum_req.height = border.top + border.bottom;
|
||||||
|
-
|
||||||
|
- natural_req.width = padding.left + padding.right;
|
||||||
|
- natural_req.width = border.left + border.right;
|
||||||
|
- natural_req.height = padding.top + padding.bottom;
|
||||||
|
- natural_req.height = border.top + border.bottom;
|
||||||
|
-
|
||||||
|
if (child && gtk_widget_get_visible (child)) {
|
||||||
|
if (orientation == GTK_ORIENTATION_HORIZONTAL) {
|
||||||
|
gtk_widget_get_preferred_width (child,
|
||||||
|
@@ -815,6 +839,9 @@ gdm_scrollable_widget_slide_to_height (GdmScrollableWidget *scrollable_widget,
|
||||||
|
GtkWidget *widget;
|
||||||
|
gboolean input_redirected;
|
||||||
|
GtkAllocation widget_allocation;
|
||||||
|
+ GtkStyleContext *context;
|
||||||
|
+ GtkStateFlags state;
|
||||||
|
+ GtkBorder padding, border;
|
||||||
|
|
||||||
|
g_return_if_fail (GDM_IS_SCROLLABLE_WIDGET (scrollable_widget));
|
||||||
|
widget = GTK_WIDGET (scrollable_widget);
|
||||||
|
@@ -841,7 +868,14 @@ gdm_scrollable_widget_slide_to_height (GdmScrollableWidget *scrollable_widget,
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
- height += gtk_widget_get_style (widget)->ythickness * 2;
|
||||||
|
+ context = gtk_widget_get_style_context (widget);
|
||||||
|
+ state = gtk_widget_get_state_flags (widget);
|
||||||
|
+
|
||||||
|
+ gtk_style_context_get_padding (context, state, &padding);
|
||||||
|
+ gtk_style_context_get_border (context, state, &border);
|
||||||
|
+
|
||||||
|
+ height += padding.top + padding.bottom;
|
||||||
|
+ height += border.top + border.bottom;
|
||||||
|
|
||||||
|
gtk_widget_get_allocation (widget, &widget_allocation);
|
||||||
|
|
||||||
|
--
|
||||||
|
1.7.4
|
||||||
|
|
8
gdm.spec
8
gdm.spec
@ -15,7 +15,7 @@
|
|||||||
Summary: The GNOME Display Manager
|
Summary: The GNOME Display Manager
|
||||||
Name: gdm
|
Name: gdm
|
||||||
Version: 2.91.6
|
Version: 2.91.6
|
||||||
Release: 6%{?dist}
|
Release: 7%{?dist}
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
Group: User Interface/X
|
Group: User Interface/X
|
||||||
@ -91,6 +91,7 @@ Requires: audit-libs >= %{libauditver}
|
|||||||
Patch1: 0001-Make-sure-to-disable-g-s-d-plugins-in-greeter.patch
|
Patch1: 0001-Make-sure-to-disable-g-s-d-plugins-in-greeter.patch
|
||||||
Patch2: plymouth.patch
|
Patch2: plymouth.patch
|
||||||
Patch3: fix-theme-related-crash.patch
|
Patch3: fix-theme-related-crash.patch
|
||||||
|
Patch4: fix-crasher.patch
|
||||||
|
|
||||||
Patch96: gdm-multistack.patch
|
Patch96: gdm-multistack.patch
|
||||||
# Fedora-specific
|
# Fedora-specific
|
||||||
@ -123,6 +124,7 @@ The GDM fingerprint plugin provides functionality necessary to use a fingerprint
|
|||||||
%patch1 -p1 -b .gsd-plugins
|
%patch1 -p1 -b .gsd-plugins
|
||||||
%patch2 -p1 -b .plymouth
|
%patch2 -p1 -b .plymouth
|
||||||
%patch3 -p1 -b .fix-theme-related-crash
|
%patch3 -p1 -b .fix-theme-related-crash
|
||||||
|
%patch4 -p1 -b .fix-crasher
|
||||||
%patch96 -p1 -b .multistack
|
%patch96 -p1 -b .multistack
|
||||||
%patch99 -p1 -b .fedora-logo
|
%patch99 -p1 -b .fedora-logo
|
||||||
|
|
||||||
@ -362,6 +364,10 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor >&/dev/ull || :
|
|||||||
%{_libdir}/gdm/simple-greeter/plugins/fingerprint.so
|
%{_libdir}/gdm/simple-greeter/plugins/fingerprint.so
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Feb 14 2011 Ray Strode <rstrode@redhat.com> 2.91.6-7
|
||||||
|
- Fix crasher and rendering glitches
|
||||||
|
Resolves: #674978
|
||||||
|
|
||||||
* Fri Feb 11 2011 Matthias Clasen <mclasen@redhat.com> - 2.91.6-6
|
* Fri Feb 11 2011 Matthias Clasen <mclasen@redhat.com> - 2.91.6-6
|
||||||
- Rebuild against newer gtk
|
- Rebuild against newer gtk
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user