if (individual == NULL)
return NULL;
- menu = empathy_individual_menu_new (individual,
+ menu = empathy_individual_menu_new (individual, NULL,
EMPATHY_INDIVIDUAL_FEATURE_CALL |
EMPATHY_INDIVIDUAL_FEATURE_LOG |
EMPATHY_INDIVIDUAL_FEATURE_INFO |
#define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyIndividualMenu)
typedef struct {
+ gchar *active_group; /* may be NULL */
FolksIndividual *individual; /* owned */
EmpathyIndividualFeatureFlags features;
EmpathyIndividualStore *store; /* may be NULL */
} EmpathyIndividualMenuPriv;
enum {
- PROP_INDIVIDUAL = 1,
+ PROP_ACTIVE_GROUP = 1,
+ PROP_INDIVIDUAL,
PROP_FEATURES,
PROP_STORE,
};
switch (param_id)
{
+ case PROP_ACTIVE_GROUP:
+ g_value_set_string (value, priv->active_group);
+ break;
case PROP_INDIVIDUAL:
g_value_set_object (value, priv->individual);
break;
switch (param_id)
{
+ case PROP_ACTIVE_GROUP:
+ g_assert (priv->active_group == NULL); /* construct only */
+ priv->active_group = g_value_dup_string (value);
+ break;
case PROP_INDIVIDUAL:
priv->individual = g_value_dup_object (value);
break;
G_OBJECT_CLASS (empathy_individual_menu_parent_class)->dispose (object);
}
+static void
+finalize (GObject *object)
+{
+ EmpathyIndividualMenuPriv *priv = GET_PRIV (object);
+
+ g_free (priv->active_group);
+
+ G_OBJECT_CLASS (empathy_individual_menu_parent_class)->finalize (object);
+}
+
static void
empathy_individual_menu_class_init (EmpathyIndividualMenuClass *klass)
{
object_class->get_property = get_property;
object_class->set_property = set_property;
object_class->dispose = dispose;
+ object_class->finalize = finalize;
+
+ /**
+ * gchar *:active-group:
+ *
+ * The group the selected roster-contact widget belongs, or NULL.
+ */
+ g_object_class_install_property (object_class, PROP_ACTIVE_GROUP,
+ g_param_spec_string ("active-group",
+ "Active group",
+ "The group the selected roster-contact widget belongs, or NULL",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
/**
* EmpathyIndividualMenu:individual:
GtkWidget *
empathy_individual_menu_new (FolksIndividual *individual,
+ const gchar *active_group,
EmpathyIndividualFeatureFlags features,
EmpathyIndividualStore *store)
{
g_return_val_if_fail (features != EMPATHY_INDIVIDUAL_FEATURE_NONE, NULL);
return g_object_new (EMPATHY_TYPE_INDIVIDUAL_MENU,
+ "active-group", active_group,
"individual", individual,
"features", features,
"store", store,
GType empathy_individual_menu_get_type (void) G_GNUC_CONST;
GtkWidget * empathy_individual_menu_new (FolksIndividual *individual,
+ const gchar *active_group,
EmpathyIndividualFeatureFlags features,
EmpathyIndividualStore *store);
if (!empathy_folks_individual_contains_contact (individual))
goto out;
- menu = empathy_individual_menu_new (individual, priv->individual_features,
- priv->store);
+ menu = empathy_individual_menu_new (individual, NULL,
+ priv->individual_features, priv->store);
out:
g_object_unref (individual);
{
EmpathyRosterContact *contact;
FolksIndividual *individual;
+ const gchar *active_group;
if (!EMPATHY_IS_ROSTER_CONTACT (child))
return;
contact = EMPATHY_ROSTER_CONTACT (child);
individual = empathy_roster_contact_get_individual (contact);
+ active_group = empathy_roster_contact_get_group (contact);
g_signal_emit (self, signals[SIG_POPUP_INDIVIDUAL_MENU], 0,
- individual, button, time);
+ active_group, individual, button, time);
}
static gboolean
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
G_TYPE_NONE,
- 3, FOLKS_TYPE_INDIVIDUAL, G_TYPE_UINT, G_TYPE_UINT);
+ 4, G_TYPE_STRING, FOLKS_TYPE_INDIVIDUAL, G_TYPE_UINT,
+ G_TYPE_UINT);
signals[SIG_EVENT_ACTIVATED] = g_signal_new ("event-activated",
G_OBJECT_CLASS_TYPE (klass),
static void
popup_individual_menu_cb (EmpathyRosterView *view,
+ const gchar *active_group,
FolksIndividual *individual,
guint button,
guint time,
EMPATHY_INDIVIDUAL_FEATURE_REMOVE |
EMPATHY_INDIVIDUAL_FEATURE_FILE_TRANSFER;
- menu = empathy_individual_menu_new (individual, features, NULL);
+ menu = empathy_individual_menu_new (individual, active_group,
+ features, NULL);
/* menu is initially unowned but gtk_menu_attach_to_widget() takes its
* floating ref. We can either wait for the view to release its ref