]> git.0d.be Git - empathy.git/commitdiff
Install property active-group in EmpathyIndividualMenu
authorChandni Verma <chandniverma2112@gmail.com>
Sat, 29 Jun 2013 19:14:20 +0000 (00:44 +0530)
committerChandni Verma <chandniverma2112@gmail.com>
Sat, 20 Jul 2013 19:39:39 +0000 (01:09 +0530)
https://bugzilla.gnome.org/show_bug.cgi?id=585440

libempathy-gtk/empathy-chat.c
libempathy-gtk/empathy-individual-menu.c
libempathy-gtk/empathy-individual-menu.h
libempathy-gtk/empathy-individual-view.c
libempathy-gtk/empathy-roster-view.c
src/empathy-roster-window.c

index 63364b3a2dc0912a30d2c8933ca0268d0a917621..e0460e527b2bbc733e0d32709cbbc29054f006d9 100644 (file)
@@ -4295,7 +4295,7 @@ empathy_chat_get_contact_menu (EmpathyChat *chat)
        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 |
index e70146bf76349a439ad271875781687954da4d2e..8f6334750d079468b95e5488bf0e8a2cc1ea3060 100644 (file)
 #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,
 };
@@ -1038,6 +1040,9 @@ get_property (GObject *object,
 
   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;
@@ -1065,6 +1070,10 @@ set_property (GObject *object,
 
   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;
@@ -1091,6 +1100,16 @@ dispose (GObject *object)
   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)
 {
@@ -1100,6 +1119,19 @@ 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:
@@ -1138,6 +1170,7 @@ empathy_individual_menu_class_init (EmpathyIndividualMenuClass *klass)
 
 GtkWidget *
 empathy_individual_menu_new (FolksIndividual *individual,
+    const gchar *active_group,
     EmpathyIndividualFeatureFlags features,
     EmpathyIndividualStore *store)
 {
@@ -1147,6 +1180,7 @@ empathy_individual_menu_new (FolksIndividual *individual,
   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,
index 41e289f9158fafd9b8de635ce23caab2cd8ca2b7..34ed60a3c66afb44a21ff9b0745980437cd3f1a0 100644 (file)
@@ -72,6 +72,7 @@ typedef struct {
 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);
 
index 87fa3d966d30d28bdc5908eb4c076b5df742e790..d0a367df2510882b4a3721efa879f4df8d9e7aff 100644 (file)
@@ -2472,8 +2472,8 @@ empathy_individual_view_get_individual_menu (EmpathyIndividualView *view)
   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);
index 93b5d0e53c3d73da3ce88daff5912a6d77b1823e..7d168d4716d5c79cb639986a919addf90111af44 100644 (file)
@@ -1146,6 +1146,7 @@ fire_popup_individual_menu (EmpathyRosterView *self,
 {
   EmpathyRosterContact *contact;
   FolksIndividual *individual;
+  const gchar *active_group;
 
   if (!EMPATHY_IS_ROSTER_CONTACT (child))
     return;
@@ -1153,8 +1154,9 @@ fire_popup_individual_menu (EmpathyRosterView *self,
   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
@@ -1347,7 +1349,8 @@ empathy_roster_view_class_init (
       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),
index 7c943b43c3d59c8c852a7edfad570f56d54446f8..0fb2d83a72718de3e9c144bc1226f0e52462a904 100644 (file)
@@ -1949,6 +1949,7 @@ menu_deactivate_cb (GtkMenuShell *menushell,
 
 static void
 popup_individual_menu_cb (EmpathyRosterView *view,
+    const gchar *active_group,
     FolksIndividual *individual,
     guint button,
     guint time,
@@ -1965,7 +1966,8 @@ popup_individual_menu_cb (EmpathyRosterView *view,
     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