#include <libempathy-gtk/empathy-geometry.h>
#include <telepathy-glib/dbus.h>
+#include <telepathy-glib/interfaces.h>
#include <telepathy-glib/util.h>
#include <telepathy-glib/proxy-subclass.h>
TpProxy *proxy;
TpProxySignalConnection *new_debug_message_signal;
TpProxySignalConnection *name_owner_changed_signal;
+ gulong invalid_signal_id;
/* Whether NewDebugMessage will be fired */
gboolean paused;
{
switch (level)
{
- case EMP_DEBUG_LEVEL_ERROR:
+ case TP_DEBUG_LEVEL_ERROR:
return "Error";
break;
- case EMP_DEBUG_LEVEL_CRITICAL:
+ case TP_DEBUG_LEVEL_CRITICAL:
return "Critical";
break;
- case EMP_DEBUG_LEVEL_WARNING:
+ case TP_DEBUG_LEVEL_WARNING:
return "Warning";
break;
- case EMP_DEBUG_LEVEL_MESSAGE:
+ case TP_DEBUG_LEVEL_MESSAGE:
return "Message";
break;
- case EMP_DEBUG_LEVEL_INFO:
+ case TP_DEBUG_LEVEL_INFO:
return "Info";
break;
- case EMP_DEBUG_LEVEL_DEBUG:
+ case TP_DEBUG_LEVEL_DEBUG:
return "Debug";
break;
default:
val = tp_g_value_slice_new_boolean (enabled);
- tp_cli_dbus_properties_call_set (priv->proxy, -1, EMP_IFACE_DEBUG,
+ tp_cli_dbus_properties_call_set (priv->proxy, -1, TP_IFACE_DEBUG,
"Enabled", val, NULL, NULL, NULL, NULL);
tp_g_value_slice_free (val);
}
}
+static void
+proxy_invalidated_cb (TpProxy *proxy,
+ guint domain,
+ gint code,
+ gchar *msg,
+ EmpathyDebugWindowPriv *self)
+{
+ EmpathyDebugWindowPriv *priv = GET_PRIV (self);
+
+ /* Proxy has been invalidated so we can't disconnect the signal any more */
+ priv->new_debug_message_signal = NULL;
+}
+
static void
debug_window_cm_chooser_changed_cb (GtkComboBox *cm_chooser,
EmpathyDebugWindow *debug_window)
}
if (priv->proxy != NULL)
- g_object_unref (priv->proxy);
+ {
+ g_signal_handler_disconnect (priv->proxy, priv->invalid_signal_id);
+ g_object_unref (priv->proxy);
+ }
priv->proxy = proxy;
emp_cli_debug_call_get_messages (priv->proxy, -1,
debug_window_get_messages_cb, debug_window, NULL, NULL);
+ priv->invalid_signal_id = g_signal_connect (proxy, "invalidated",
+ G_CALLBACK (proxy_invalidated_cb), debug_window);
+
g_object_unref (dbus);
}
/* Add empathy */
gtk_list_store_append (priv->cms, &iter);
gtk_list_store_set (priv->cms, &iter,
- COL_CM_NAME, "empathy",
- COL_CM_UNIQUE_NAME, "org.gnome.Empathy",
+ COL_CM_NAME, _(PACKAGE_NAME),
+ COL_CM_UNIQUE_NAME, "org.gnome."PACKAGE_NAME,
-1);
gtk_combo_box_set_active (GTK_COMBO_BOX (priv->cm_chooser), 0);
gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL,
data->button, data->time);
+ g_object_ref_sink (menu);
+ g_object_unref (menu);
g_slice_free (MenuPopupData, user_data);
return FALSE;
}
+static gboolean
+tree_view_search_equal_func_cb (GtkTreeModel *model,
+ gint column,
+ const gchar *key,
+ GtkTreeIter *iter,
+ gpointer search_data)
+{
+ gchar *str;
+ gint key_len;
+ gint len;
+ gint i;
+ gboolean ret = TRUE; /* The return value is counter-intuitive */
+
+ gtk_tree_model_get (model, iter, column, &str, -1);
+
+ key_len = strlen (key);
+ len = strlen (str) - key_len;
+
+ for (i = 0; i <= len; ++i)
+ {
+ if (!g_ascii_strncasecmp (key, str + i, key_len))
+ {
+ ret = FALSE;
+ break;
+ }
+ }
+
+ g_free (str);
+ return ret;
+}
+
static GObject *
debug_window_constructor (GType type,
guint n_construct_params,
gtk_list_store_append (level_store, &iter);
gtk_list_store_set (level_store, &iter,
COL_LEVEL_NAME, _("Debug"),
- COL_LEVEL_VALUE, EMP_DEBUG_LEVEL_DEBUG,
+ COL_LEVEL_VALUE, TP_DEBUG_LEVEL_DEBUG,
-1);
gtk_list_store_append (level_store, &iter);
gtk_list_store_set (level_store, &iter,
COL_LEVEL_NAME, _("Info"),
- COL_LEVEL_VALUE, EMP_DEBUG_LEVEL_INFO,
+ COL_LEVEL_VALUE, TP_DEBUG_LEVEL_INFO,
-1);
gtk_list_store_append (level_store, &iter);
gtk_list_store_set (level_store, &iter,
COL_LEVEL_NAME, _("Message"),
- COL_LEVEL_VALUE, EMP_DEBUG_LEVEL_MESSAGE,
+ COL_LEVEL_VALUE, TP_DEBUG_LEVEL_MESSAGE,
-1);
gtk_list_store_append (level_store, &iter);
gtk_list_store_set (level_store, &iter,
COL_LEVEL_NAME, _("Warning"),
- COL_LEVEL_VALUE, EMP_DEBUG_LEVEL_WARNING,
+ COL_LEVEL_VALUE, TP_DEBUG_LEVEL_WARNING,
-1);
gtk_list_store_append (level_store, &iter);
gtk_list_store_set (level_store, &iter,
COL_LEVEL_NAME, _("Critical"),
- COL_LEVEL_VALUE, EMP_DEBUG_LEVEL_CRITICAL,
+ COL_LEVEL_VALUE, TP_DEBUG_LEVEL_CRITICAL,
-1);
gtk_list_store_append (level_store, &iter);
gtk_list_store_set (level_store, &iter,
COL_LEVEL_NAME, _("Error"),
- COL_LEVEL_VALUE, EMP_DEBUG_LEVEL_ERROR,
+ COL_LEVEL_VALUE, TP_DEBUG_LEVEL_ERROR,
-1);
gtk_combo_box_set_active (GTK_COMBO_BOX (priv->level_filter), 0);
gtk_tree_view_set_model (GTK_TREE_VIEW (priv->view), priv->store_filter);
+ gtk_tree_view_set_search_column (GTK_TREE_VIEW (priv->view),
+ COL_DEBUG_MESSAGE);
+ gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (priv->view),
+ tree_view_search_equal_func_cb, NULL, NULL);
+
/* Scrolled window */
priv->scrolled_win = g_object_ref (gtk_scrolled_window_new (NULL, NULL));
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->scrolled_win),
if (priv->proxy != NULL)
{
debug_window_set_enabled (EMPATHY_DEBUG_WINDOW (object), FALSE);
+ g_signal_handler_disconnect (priv->proxy, priv->invalid_signal_id);
g_object_unref (priv->proxy);
}