[gtk+] GtkSwitch: use regular activation
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GtkSwitch: use regular activation
- Date: Fri, 25 Feb 2011 20:48:39 +0000 (UTC)
commit 46cc85fd7e0ff20c83254713f1092e7207c788f8
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Feb 25 15:47:03 2011 -0500
GtkSwitch: use regular activation
GtkSwitch was listening for Space/Enter keyreleases itself, instead
of providing an 'activate' action signal, like e.g GtkButton. As a
side-effect, this fixes
https://bugzilla.gnome.org/show_bug.cgi?id=643321
gtk/gtkswitch.c | 51 ++++++++++++++++++++++++++++++++++++---------------
gtk/gtkswitch.h | 3 ++-
2 files changed, 38 insertions(+), 16 deletions(-)
---
diff --git a/gtk/gtkswitch.c b/gtk/gtkswitch.c
index a425d4d..d69534c 100644
--- a/gtk/gtkswitch.c
+++ b/gtk/gtkswitch.c
@@ -47,6 +47,8 @@
#include "gtkprivate.h"
#include "gtktoggleaction.h"
#include "gtkwidget.h"
+#include "gtkmarshalers.h"
+
#define DEFAULT_SLIDER_WIDTH (36)
#define DEFAULT_SLIDER_HEIGHT (22)
@@ -77,6 +79,14 @@ enum
LAST_PROP
};
+enum
+{
+ ACTIVATE,
+ LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
static GParamSpec *switch_props[LAST_PROP] = { NULL, };
static GType gtk_switch_accessible_factory_get_type (void);
@@ -262,22 +272,12 @@ gtk_switch_leave (GtkWidget *widget,
return FALSE;
}
-static gboolean
-gtk_switch_key_release (GtkWidget *widget,
- GdkEventKey *event)
+static void
+gtk_switch_activate (GtkSwitch *sw)
{
- GtkSwitchPrivate *priv = GTK_SWITCH (widget)->priv;
-
- if (event->keyval == GDK_KEY_Return ||
- event->keyval == GDK_KEY_KP_Enter ||
- event->keyval == GDK_KEY_ISO_Enter ||
- event->keyval == GDK_KEY_space ||
- event->keyval == GDK_KEY_KP_Space)
- {
- gtk_switch_set_active (GTK_SWITCH (widget), !priv->is_active);
- }
+ GtkSwitchPrivate *priv = sw->priv;
- return FALSE;
+ gtk_switch_set_active (sw, !priv->is_active);
}
static void
@@ -756,9 +756,10 @@ gtk_switch_class_init (GtkSwitchClass *klass)
widget_class->motion_notify_event = gtk_switch_motion;
widget_class->enter_notify_event = gtk_switch_enter;
widget_class->leave_notify_event = gtk_switch_leave;
- widget_class->key_release_event = gtk_switch_key_release;
widget_class->get_accessible = gtk_switch_get_accessible;
+ klass->activate = gtk_switch_activate;
+
/**
* GtkSwitch:slider-width:
*
@@ -771,6 +772,26 @@ gtk_switch_class_init (GtkSwitchClass *klass)
DEFAULT_SLIDER_WIDTH, G_MAXINT,
DEFAULT_SLIDER_WIDTH,
GTK_PARAM_READABLE));
+
+ /**
+ * GtkSwitch::activate:
+ * @widget: the object which received the signal.
+ *
+ * The ::activate signal on GtkSwitch is an action signal and
+ * emitting it causes the switch to animate.
+ * Applications should never connect to this signal, but use the
+ * notify::active signal.
+ */
+ signals[ACTIVATE] =
+ g_signal_new (I_("activate"),
+ G_OBJECT_CLASS_TYPE (gobject_class),
+ G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (GtkSwitchClass, activate),
+ NULL, NULL,
+ _gtk_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+ widget_class->activate_signal = signals[ACTIVATE];
+
}
static void
diff --git a/gtk/gtkswitch.h b/gtk/gtkswitch.h
index 3706f61..492f9c3 100644
--- a/gtk/gtkswitch.h
+++ b/gtk/gtkswitch.h
@@ -72,13 +72,14 @@ struct _GtkSwitchClass
/*< private >*/
GtkWidgetClass parent_class;
+ void (* activate) (GtkSwitch *sw);
+
void (* _switch_padding_1) (void);
void (* _switch_padding_2) (void);
void (* _switch_padding_3) (void);
void (* _switch_padding_4) (void);
void (* _switch_padding_5) (void);
void (* _switch_padding_6) (void);
- void (* _switch_padding_7) (void);
};
GType gtk_switch_get_type (void) G_GNUC_CONST;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]