[gtk+/gestures] GtkWindow: Only use a multipress gesture for toplevels
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gestures] GtkWindow: Only use a multipress gesture for toplevels
- Date: Fri, 9 May 2014 22:56:45 +0000 (UTC)
commit 72b2258a7712d9acfe21657407164839053432f7
Author: Matthias Clasen <mclasen redhat com>
Date: Fri May 9 18:55:48 2014 -0400
GtkWindow: Only use a multipress gesture for toplevels
There is no point in creating and attaching this gesture
for override-redirect windows, so don't do it.
gtk/gtkwindow.c | 47 ++++++++++++++++++++++++++++++++++++-----------
1 files changed, 36 insertions(+), 11 deletions(-)
---
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 0038638..6bc4ca4 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -382,6 +382,9 @@ struct _GtkWindowGroupPrivate
GSList *device_grabs;
};
+static GObject *gtk_window_constructor (GType type,
+ guint n_params,
+ GObjectConstructParam *params);
static void gtk_window_dispose (GObject *object);
static void gtk_window_finalize (GObject *object);
static void gtk_window_destroy (GtkWidget *widget);
@@ -661,6 +664,7 @@ gtk_window_class_init (GtkWindowClass *klass)
quark_gtk_window_icon_info = g_quark_from_static_string ("gtk-window-icon-info");
quark_gtk_buildable_accels = g_quark_from_static_string ("gtk-window-buildable-accels");
+ gobject_class->constructor = gtk_window_constructor;
gobject_class->dispose = gtk_window_dispose;
gobject_class->finalize = gtk_window_finalize;
@@ -1539,14 +1543,31 @@ gtk_window_init (GtkWindow *window)
gtk_style_context_add_class (context, GTK_STYLE_CLASS_BACKGROUND);
priv->scale = gtk_widget_get_scale_factor (widget);
+}
+
+static GObject *
+gtk_window_constructor (GType type,
+ guint n_params,
+ GObjectConstructParam *params)
+{
+ GObject *object;
+ GtkWindowPrivate *priv;
+
+ object = G_OBJECT_CLASS (gtk_window_parent_class)->constructor (type, n_params, params);
- priv->multipress_gesture = gtk_gesture_multi_press_new (GTK_WIDGET (window));
- gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (priv->multipress_gesture), FALSE);
- g_signal_connect (priv->multipress_gesture, "pressed",
- G_CALLBACK (multipress_gesture_pressed_cb), window);
- g_signal_connect (priv->multipress_gesture, "stopped",
- G_CALLBACK (multipress_gesture_stopped_cb), window);
- gtk_gesture_attach (priv->multipress_gesture, GTK_PHASE_CAPTURE);
+ priv = GTK_WINDOW (object)->priv;
+ if (priv->type == GTK_WINDOW_TOPLEVEL)
+ {
+ priv->multipress_gesture = gtk_gesture_multi_press_new (GTK_WIDGET (object));
+ gtk_gesture_single_set_touch_only (GTK_GESTURE_SINGLE (priv->multipress_gesture), FALSE);
+ g_signal_connect (priv->multipress_gesture, "pressed",
+ G_CALLBACK (multipress_gesture_pressed_cb), object);
+ g_signal_connect (priv->multipress_gesture, "stopped",
+ G_CALLBACK (multipress_gesture_stopped_cb), object);
+ gtk_gesture_attach (priv->multipress_gesture, GTK_PHASE_CAPTURE);
+ }
+
+ return object;
}
static void
@@ -5429,8 +5450,11 @@ gtk_window_finalize (GObject *object)
priv->mnemonics_display_timeout_id = 0;
}
- gtk_gesture_detach (priv->multipress_gesture);
- g_object_unref (priv->multipress_gesture);
+ if (priv->multipress_gesture)
+ {
+ gtk_gesture_detach (priv->multipress_gesture);
+ g_object_unref (priv->multipress_gesture);
+ }
G_OBJECT_CLASS (gtk_window_parent_class)->finalize (object);
}
@@ -7840,8 +7864,9 @@ _gtk_window_check_handle_wm_event (GdkEvent *event)
event->type == GDK_MOTION_NOTIFY || event->type == GDK_TOUCH_END))
{
priv = GTK_WINDOW (widget)->priv;
- return gtk_event_controller_handle_event (GTK_EVENT_CONTROLLER (priv->multipress_gesture),
- (const GdkEvent*) event);
+ if (priv->multipress_gesture)
+ return gtk_event_controller_handle_event (GTK_EVENT_CONTROLLER (priv->multipress_gesture),
+ (const GdkEvent*) event);
}
return FALSE;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]