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
|
||||
Name: gdm
|
||||
Version: 2.91.6
|
||||
Release: 6%{?dist}
|
||||
Release: 7%{?dist}
|
||||
Epoch: 1
|
||||
License: GPLv2+
|
||||
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
|
||||
Patch2: plymouth.patch
|
||||
Patch3: fix-theme-related-crash.patch
|
||||
Patch4: fix-crasher.patch
|
||||
|
||||
Patch96: gdm-multistack.patch
|
||||
# Fedora-specific
|
||||
@ -123,6 +124,7 @@ The GDM fingerprint plugin provides functionality necessary to use a fingerprint
|
||||
%patch1 -p1 -b .gsd-plugins
|
||||
%patch2 -p1 -b .plymouth
|
||||
%patch3 -p1 -b .fix-theme-related-crash
|
||||
%patch4 -p1 -b .fix-crasher
|
||||
%patch96 -p1 -b .multistack
|
||||
%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
|
||||
|
||||
%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
|
||||
- Rebuild against newer gtk
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user