[gtkhtml3/f17] Add patch for Red Hat bug #829915 (input freeze in editor)
Milan Crha
mcrha at fedoraproject.org
Fri Jun 8 09:06:37 UTC 2012
commit c951453842fb7ad8c90915fc8dd9cb3bd73d3774
Author: Milan Crha <mcrha at redhat.com>
Date: Fri Jun 8 11:06:25 2012 +0200
Add patch for Red Hat bug #829915 (input freeze in editor)
gtkhtml-4.4.2-fix-input-freeze.patch | 108 ++++++++++++++++++++++++++++++++++
gtkhtml3.spec | 10 ++-
2 files changed, 114 insertions(+), 4 deletions(-)
---
diff --git a/gtkhtml-4.4.2-fix-input-freeze.patch b/gtkhtml-4.4.2-fix-input-freeze.patch
new file mode 100644
index 0000000..6ae6382
--- /dev/null
+++ b/gtkhtml-4.4.2-fix-input-freeze.patch
@@ -0,0 +1,108 @@
+diff --git a/components/editor/gtkhtml-color-combo.c b/components/editor/gtkhtml-color-combo.c
+index 8ea4d9f..d30ee54 100644
+--- a/components/editor/gtkhtml-color-combo.c
++++ b/components/editor/gtkhtml-color-combo.c
+@@ -61,6 +61,8 @@ struct _GtkhtmlColorComboPrivate {
+
+ guint popup_shown : 1;
+ guint popup_in_progress : 1;
++ GdkDevice *grab_keyboard;
++ GdkDevice *grab_mouse;
+ };
+
+ static gpointer parent_class;
+@@ -637,15 +639,29 @@ color_combo_popup (GtkhtmlColorCombo *combo)
+ GtkToggleButton *toggle_button;
+ GtkButton *button;
+ GdkWindow *window;
+- GdkGrabStatus status;
++ gboolean grab_status;
++ GdkDevice *device, *mouse, *keyboard;
++ guint32 activate_time;
+ const gchar *label;
+
++ device = gtk_get_current_event_device ();
++ g_return_if_fail (device != NULL);
++
+ if (!gtk_widget_get_realized (GTK_WIDGET (combo)))
+ return;
+
+ if (combo->priv->popup_shown)
+ return;
+
++ activate_time = gtk_get_current_event_time ();
++ if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD) {
++ keyboard = device;
++ mouse = gdk_device_get_associated_device (device);
++ } else {
++ keyboard = gdk_device_get_associated_device (device);
++ mouse = device;
++ }
++
+ /* Update the default button label. */
+ button = GTK_BUTTON (combo->priv->default_button);
+ label = gtkhtml_color_state_get_default_label (combo->priv->state);
+@@ -664,22 +680,28 @@ color_combo_popup (GtkhtmlColorCombo *combo)
+
+ /* Try to grab the pointer and keyboard. */
+ window = gtk_widget_get_window (combo->priv->window);
+- status = gdk_pointer_grab (
+- window, TRUE,
+- GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |
+- GDK_POINTER_MOTION_MASK, NULL, NULL, GDK_CURRENT_TIME);
+- if (status == GDK_GRAB_SUCCESS) {
+- status = gdk_keyboard_grab (window, TRUE, GDK_CURRENT_TIME);
+- if (status != GDK_GRAB_SUCCESS)
+- gdk_display_pointer_ungrab (
+- gdk_window_get_display (window),
+- GDK_CURRENT_TIME);
++ grab_status = !keyboard ||
++ gdk_device_grab (keyboard, window,
++ GDK_OWNERSHIP_WINDOW, TRUE,
++ GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK,
++ NULL, activate_time) == GDK_GRAB_SUCCESS;
++ if (grab_status) {
++ grab_status = !mouse ||
++ gdk_device_grab (mouse, window,
++ GDK_OWNERSHIP_WINDOW, TRUE,
++ GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK,
++ NULL, activate_time) == GDK_GRAB_SUCCESS;
++ if (!grab_status && keyboard)
++ gdk_device_ungrab (keyboard, activate_time);
+ }
+
+- if (status == GDK_GRAB_SUCCESS)
+- gtk_grab_add (combo->priv->window);
+- else
++ if (grab_status) {
++ gtk_device_grab_add (combo->priv->window, mouse, TRUE);
++ combo->priv->grab_keyboard = keyboard;
++ combo->priv->grab_mouse = mouse;
++ } else {
+ gtk_widget_hide (combo->priv->window);
++ }
+ }
+
+ static void
+@@ -694,12 +716,20 @@ color_combo_popdown (GtkhtmlColorCombo *combo)
+ return;
+
+ /* Hide the pop-up. */
+- gtk_grab_remove (combo->priv->window);
++ gtk_device_grab_remove (combo->priv->window, combo->priv->grab_mouse);
+ gtk_widget_hide (combo->priv->window);
+
+ /* Deactivate the toggle button. */
+ toggle_button = GTK_TOGGLE_BUTTON (combo->priv->toggle_button);
+ gtk_toggle_button_set_active (toggle_button, FALSE);
++
++ if (combo->priv->grab_keyboard)
++ gdk_device_ungrab (combo->priv->grab_keyboard, GDK_CURRENT_TIME);
++ if (combo->priv->grab_mouse)
++ gdk_device_ungrab (combo->priv->grab_mouse, GDK_CURRENT_TIME);
++
++ combo->priv->grab_keyboard = NULL;
++ combo->priv->grab_mouse = NULL;
+ }
+
+ static void
diff --git a/gtkhtml3.spec b/gtkhtml3.spec
index 434a473..dbc4477 100644
--- a/gtkhtml3.spec
+++ b/gtkhtml3.spec
@@ -5,7 +5,7 @@
Name: gtkhtml3
Version: 4.4.2
-Release: 1%{?dist}
+Release: 2%{?dist}
Group: System Environment/Libraries
Summary: GtkHTML library
License: LGPLv2+ and GPLv2
@@ -14,8 +14,7 @@ Source: http://download.gnome.org/sources/gtkhtml/4.4/gtkhtml-%{version}.tar.xz
### Patches ###
-# GNOME bug #672582
-#Patch01: gtkhtml-4.4.1-fix-iframe-selection.patch
+Patch01: gtkhtml-4.4.2-fix-input-freeze.patch
### Build Dependencies ###
@@ -46,7 +45,7 @@ developing applications that use %{name}.
%prep
%setup -q -n gtkhtml-%{version}
-#%patch01 -p1 -b .fix-iframe-selection
+%patch01 -p1 -b .fix-input-freeze
%build
autoreconf -fi
@@ -79,6 +78,9 @@ find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%{_libdir}/pkgconfig/*.pc
%changelog
+* Fri Jun 08 2012 Milan Crha <mcrha at redhat.com> - 4.4.2-2
+- Add patch for Red Hat bug #829915 (input freeze in editor)
+
* Mon May 14 2012 Milan Crha <mcrha at redhat.com> - 4.4.2-1
- Update to 4.4.2
- Remove patch for GNOME bug #672582 (fixed upstream).
More information about the scm-commits
mailing list