Esempio n. 1
0
static void
debug_dialog_dispose (GObject *object)
{
  EmpathyDebugDialog *selector = EMPATHY_DEBUG_DIALOG (object);
  EmpathyDebugDialogPriv *priv = GET_PRIV (selector);

  if (priv->dispose_run)
    return;

  priv->dispose_run = TRUE;

  if (priv->store != NULL)
    g_object_unref (priv->store);

  if (priv->name_owner_changed_signal != NULL)
    tp_proxy_signal_connection_disconnect (priv->name_owner_changed_signal);

  if (priv->proxy != NULL)
    {
      debug_dialog_set_enabled (EMPATHY_DEBUG_DIALOG (object), FALSE);
      g_object_unref (priv->proxy);
    }

  if (priv->new_debug_message_signal != NULL)
    tp_proxy_signal_connection_disconnect (priv->new_debug_message_signal);

  if (priv->cms != NULL)
    g_object_unref (priv->cms);

  if (priv->dbus != NULL)
    g_object_unref (priv->dbus);

  (G_OBJECT_CLASS (empathy_debug_dialog_parent_class)->dispose) (object);
}
Esempio n. 2
0
static void
polari_room_set_channel (PolariRoom *room,
                         TpChannel  *channel)
{
  PolariRoomPrivate *priv;

  g_return_if_fail (POLARI_IS_ROOM (room));
  g_return_if_fail (channel == NULL || TP_IS_TEXT_CHANNEL (channel));

  priv = room->priv;

  if (priv->channel == channel)
    return;

  if (priv->channel)
    {
      g_signal_handler_disconnect (priv->channel, priv->identifier_notify_id);
      g_signal_handler_disconnect (priv->channel, priv->group_contacts_changed_id);

      tp_proxy_signal_connection_disconnect (priv->properties_changed_id);

      g_clear_object (&priv->channel);
    }

  if (channel)
    {
      priv->channel = g_object_ref (channel);

      if (priv->id == NULL)
        priv->id = g_strdup (tp_proxy_get_object_path (TP_PROXY (channel)));

      tp_cli_dbus_properties_call_get_all (channel, -1,
                                     TP_IFACE_CHANNEL_INTERFACE_SUBJECT,
                                     (tp_properties_get_all_cb)subject_get_all,
                                     room, NULL, NULL);


      priv->identifier_notify_id =
        g_signal_connect (channel, "notify::identifier",
                          G_CALLBACK (on_identifier_notify), room);
      priv->group_contacts_changed_id =
        g_signal_connect (channel, "group-contacts-changed",
                          G_CALLBACK (on_group_contacts_changed), room);
      priv->properties_changed_id =
        tp_cli_dbus_properties_connect_to_properties_changed (
                                 channel,
                                 (tp_properties_changed_cb) properties_changed,
                                 room, NULL, NULL, NULL);
    }

    g_object_freeze_notify (G_OBJECT (room));

    update_identifier (room);
    update_icon (room);

    g_object_notify_by_pspec (G_OBJECT (room), props[PROP_CHANNEL]);

    g_object_thaw_notify (G_OBJECT (room));
}
static void
tp_yts_status_dispose (GObject *object)
{
  TpYtsStatus *self = TP_YTS_STATUS (object);

  if (self->priv->service_added_sig)
    tp_proxy_signal_connection_disconnect (self->priv->service_added_sig);
  self->priv->service_added_sig = NULL;
  if (self->priv->service_removed_sig)
    tp_proxy_signal_connection_disconnect (self->priv->service_removed_sig);
  self->priv->service_removed_sig = NULL;
  if (self->priv->status_changed_sig)
    tp_proxy_signal_connection_disconnect (self->priv->status_changed_sig);
  self->priv->status_changed_sig = NULL;

  G_OBJECT_CLASS (tp_yts_status_parent_class)->dispose (object);
}
/* This must be called before the local group members lists are created.  Until
 * this is called, the proxy is listening to both MembersChanged and
 * MembersChangedDetailed, but they are ignored until priv->group_members
 * exists.  If that list is created before one signal is disconnected, the
 * proxy will react to state changes twice and madness will ensue.
 */
static void
_got_initial_group_flags (TpChannel *self,
                          TpChannelGroupFlags flags)
{
  TpChannelPrivate *priv = self->priv;

  g_assert (priv->group_flags == 0);
  g_assert (self->priv->group_members == NULL);

  priv->group_flags = flags;
  DEBUG ("Initial GroupFlags: %u", flags);
  priv->have_group_flags = TRUE;

  if (flags != 0)
    g_object_notify ((GObject *) self, "group-flags");

  if (tp_proxy_get_invalidated (self) != NULL)
    {
      /* Because the proxy has been invalidated, it is not safe to call
       * tp_proxy_signal_connection_disconnect (below), so just return early */
      return;
    }

  /* If the channel claims to support MembersChangedDetailed, disconnect from
   * MembersChanged. Otherwise, disconnect from MembersChangedDetailed in case
   * it secretly emits it anyway, so we're only listening to one change
   * notification.
   */
  if (flags & TP_CHANNEL_GROUP_FLAG_MEMBERS_CHANGED_DETAILED)
    tp_proxy_signal_connection_disconnect (priv->members_changed_sig);
  else
    tp_proxy_signal_connection_disconnect (priv->members_changed_detailed_sig);

  priv->members_changed_sig = NULL;
  priv->members_changed_detailed_sig = NULL;
}
static void
contact_manager_finalize (GObject *object)
{
	EmpathyContactManagerPriv *priv = GET_PRIV (object);

	tp_proxy_signal_connection_disconnect (priv->favourite_contacts_changed_signal);

	if (priv->logger != NULL)
		g_object_unref (priv->logger);

	g_hash_table_foreach (priv->lists,
			      contact_manager_disconnect_foreach,
			      object);
	g_hash_table_destroy (priv->lists);
	g_hash_table_destroy (priv->favourites);

	g_object_unref (priv->account_manager);
}
Esempio n. 6
0
static void
debug_dialog_cm_chooser_changed_cb (GtkComboBox *cm_chooser,
    EmpathyDebugDialog *debug_dialog)
{
  EmpathyDebugDialogPriv *priv = GET_PRIV (debug_dialog);
  MissionControl *mc;
  TpDBusDaemon *dbus;
  GError *error = NULL;
  gchar *bus_name;
  TpProxy *proxy;
  GtkTreeIter iter;

  if (!gtk_combo_box_get_active_iter (cm_chooser, &iter))
    {
      DEBUG ("No CM is selected");
      if (gtk_tree_model_iter_n_children (
          GTK_TREE_MODEL (priv->cms), NULL) > 0)
        {
          gtk_combo_box_set_active (cm_chooser, 0);
        }
      return;
    }

  mc = empathy_mission_control_dup_singleton ();
  dbus = tp_dbus_daemon_dup (&error);

  if (error != NULL)
    {
      DEBUG ("Failed at duping the dbus daemon: %s", error->message);
      g_object_unref (mc);
    }

  gtk_tree_model_get (GTK_TREE_MODEL (priv->cms), &iter,
      COL_CM_UNIQUE_NAME, &bus_name, -1);
  proxy = g_object_new (TP_TYPE_PROXY,
      "bus-name", bus_name,
      "dbus-daemon", dbus,
      "object-path", DEBUG_OBJECT_PATH,
      NULL);
  g_free (bus_name);

  gtk_list_store_clear (priv->store);

  /* Disable debug signalling */
  if (priv->proxy != NULL)
    debug_dialog_set_enabled (debug_dialog, FALSE);

  /* Disconnect from previous NewDebugMessage signal */
  if (priv->new_debug_message_signal != NULL)
    {
      tp_proxy_signal_connection_disconnect (priv->new_debug_message_signal);
      priv->new_debug_message_signal = NULL;
    }

  if (priv->proxy != NULL)
    g_object_unref (priv->proxy);

  priv->proxy = proxy;

  tp_proxy_add_interface_by_id (priv->proxy, emp_iface_quark_debug ());

  emp_cli_debug_call_get_messages (priv->proxy, -1,
      debug_dialog_get_messages_cb, debug_dialog, NULL, NULL);

  g_object_unref (dbus);
  g_object_unref (mc);
}