[gnome-builder] source-view: don't beep if toplevel is offscreen window
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] source-view: don't beep if toplevel is offscreen window
- Date: Thu, 23 Apr 2015 00:08:58 +0000 (UTC)
commit e509baa35dac597a08dfa0a972707e3253aa3117
Author: Christian Hergert <christian hergert me>
Date: Wed Apr 22 16:38:12 2015 -0700
source-view: don't beep if toplevel is offscreen window
GdkOffscreenWindowImpl will segfault if beep is called.
libide/ide-source-view-mode.c | 26 +++++++++++++++++++++++++-
1 files changed, 25 insertions(+), 1 deletions(-)
---
diff --git a/libide/ide-source-view-mode.c b/libide/ide-source-view-mode.c
index cec0944..7ecebd6 100644
--- a/libide/ide-source-view-mode.c
+++ b/libide/ide-source-view-mode.c
@@ -378,6 +378,30 @@ is_modifier_key (GdkEventKey *event)
return FALSE;
}
+static gboolean
+toplevel_is_offscreen (GdkWindow *window)
+{
+ /*
+ * FIXME: This function is a workaround for a segfault in gdk_window_beep()
+ * with offscreen windows.
+ *
+ * https://bugzilla.gnome.org/show_bug.cgi?id=748341
+ */
+ for (;
+ window != NULL;
+ window = gdk_window_get_parent (window))
+ {
+ GdkWindowType type;
+
+ type = gdk_window_get_window_type (window);
+
+ if (type == GDK_WINDOW_OFFSCREEN)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
gboolean
_ide_source_view_mode_do_event (IdeSourceViewMode *mode,
GdkEventKey *event,
@@ -427,7 +451,7 @@ _ide_source_view_mode_do_event (IdeSourceViewMode *mode,
/* don't block possible accelerators, but supress others */
if (!handled && suppress_unbound && ((event->state & GDK_MODIFIER_MASK) == 0))
{
- if (!is_modifier_key (event))
+ if (!is_modifier_key (event) && !toplevel_is_offscreen (event->window))
gdk_window_beep (event->window);
/* cancel any inflight macros */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]