[gnome-contacts: 27/35] Add properties to EggListBox
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-contacts: 27/35] Add properties to EggListBox
- Date: Thu, 14 Feb 2013 21:12:35 +0000 (UTC)
commit d42491be7b3f8bb6b78f0e49a407b01e83a0042f
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Feb 10 13:02:09 2013 -0500
Add properties to EggListBox
This makes the widget more useful in glade.
https://bugzilla.gnome.org/show_bug.cgi?id=689711
egg-list-box.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 81 insertions(+), 2 deletions(-)
---
diff --git a/egg-list-box.c b/egg-list-box.c
index 82c27ba..6df807b 100644
--- a/egg-list-box.c
+++ b/egg-list-box.c
@@ -113,7 +113,10 @@ enum {
};
enum {
- PROP_0
+ PROP_0,
+ PROP_SELECTION_MODE,
+ PROP_ACTIVATE_ON_SINGLE_CLICK,
+ LAST_PROPERTY
};
G_DEFINE_TYPE (EggListBox, egg_list_box, GTK_TYPE_CONTAINER)
@@ -211,6 +214,7 @@ static void egg_list_box_real_get_preferred_width_for_height (Gt
gint
*minimum_width,
gint
*natural_width);
+static GParamSpec *properties[LAST_PROPERTY] = { NULL, };
static guint signals[LAST_SIGNAL] = { 0 };
static EggListBoxChildInfo*
@@ -257,6 +261,50 @@ egg_list_box_init (EggListBox *list_box)
}
static void
+egg_list_box_get_property (GObject *obj,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EggListBox *list_box = EGG_LIST_BOX (obj);
+
+ switch (property_id)
+ {
+ case PROP_SELECTION_MODE:
+ g_value_set_enum (value, list_box->priv->selection_mode);
+ break;
+ case PROP_ACTIVATE_ON_SINGLE_CLICK:
+ g_value_set_boolean (value, list_box->priv->activate_single_click);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
+ break;
+ }
+}
+
+static void
+egg_list_box_set_property (GObject *obj,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EggListBox *list_box = EGG_LIST_BOX (obj);
+
+ switch (property_id)
+ {
+ case PROP_SELECTION_MODE:
+ egg_list_box_set_selection_mode (list_box, g_value_get_enum (value));
+ break;
+ case PROP_ACTIVATE_ON_SINGLE_CLICK:
+ egg_list_box_set_activate_on_single_click (list_box, g_value_get_boolean (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
+ break;
+ }
+}
+
+static void
egg_list_box_finalize (GObject *obj)
{
EggListBox *list_box = EGG_LIST_BOX (obj);
@@ -296,6 +344,8 @@ egg_list_box_class_init (EggListBoxClass *klass)
gtk_widget_class_set_accessible_type (widget_class, EGG_TYPE_LIST_BOX_ACCESSIBLE);
+ object_class->get_property = egg_list_box_get_property;
+ object_class->set_property = egg_list_box_set_property;
object_class->finalize = egg_list_box_finalize;
widget_class->enter_notify_event = egg_list_box_real_enter_notify_event;
widget_class->leave_notify_event = egg_list_box_real_leave_notify_event;
@@ -324,6 +374,23 @@ egg_list_box_class_init (EggListBoxClass *klass)
klass->move_cursor = egg_list_box_real_move_cursor;
klass->refilter = egg_list_box_real_refilter;
+ properties[PROP_SELECTION_MODE] =
+ g_param_spec_enum ("selection-mode",
+ "Selection mode",
+ "The selection mode",
+ GTK_TYPE_SELECTION_MODE,
+ GTK_SELECTION_SINGLE,
+ G_PARAM_READWRITE);
+
+ properties[PROP_ACTIVATE_ON_SINGLE_CLICK] =
+ g_param_spec_boolean ("activate-on-single-click",
+ "Activate on Single Click",
+ "Activate row on a single click",
+ TRUE,
+ G_PARAM_READWRITE);
+
+ g_object_class_install_properties (object_class, LAST_PROPERTY, properties);
+
signals[CHILD_SELECTED] =
g_signal_new ("child-selected",
EGG_TYPE_LIST_BOX,
@@ -487,13 +554,18 @@ egg_list_box_set_selection_mode (EggListBox *list_box, GtkSelectionMode mode)
if (mode == GTK_SELECTION_MULTIPLE)
{
- g_warning ("egg-list-box.vala:115: Multiple selections not supported");
+ g_warning ("Multiple selections not supported");
return;
}
+ if (priv->selection_mode == mode)
+ return;
+
priv->selection_mode = mode;
if (mode == GTK_SELECTION_NONE)
egg_list_box_update_selected (list_box, NULL);
+
+ g_object_notify_by_pspec (G_OBJECT (list_box), properties[PROP_SELECTION_MODE]);
}
@@ -651,7 +723,14 @@ egg_list_box_set_activate_on_single_click (EggListBox *list_box,
g_return_if_fail (list_box != NULL);
+ single = single != FALSE;
+
+ if (priv->activate_single_click == single)
+ return;
+
priv->activate_single_click = single;
+
+ g_object_notify_by_pspec (G_OBJECT (list_box), properties[PROP_ACTIVATE_ON_SINGLE_CLICK]);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]