diff options
-rw-r--r-- | src/empathy-new-chatroom-dialog.c | 1279 | ||||
-rw-r--r-- | src/empathy-new-chatroom-dialog.h | 3 |
2 files changed, 642 insertions, 640 deletions
diff --git a/src/empathy-new-chatroom-dialog.c b/src/empathy-new-chatroom-dialog.c index dd7e70ac1..b4d1c2105 100644 --- a/src/empathy-new-chatroom-dialog.c +++ b/src/empathy-new-chatroom-dialog.c @@ -1,7 +1,6 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * Copyright (C) 2006-2007 Imendio AB - * Copyright (C) 2007-2008 Collabora Ltd. + * Copyright (C) 2007-2011 Collabora Ltd. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -47,93 +46,102 @@ #define DEBUG_FLAG EMPATHY_DEBUG_OTHER #include <libempathy/empathy-debug.h> -typedef struct { - EmpathyTpRoomlist *room_list; - /* Currently selected account */ - TpAccount *account; - /* Signal id of the "status-changed" signal connected on the currently - * selected account */ - gulong status_changed_id; - - GtkWidget *window; - GtkWidget *vbox_widgets; - GtkWidget *table_grid; - GtkWidget *label_account; - GtkWidget *account_chooser; - GtkWidget *label_server; - GtkWidget *entry_server; - GtkWidget *label_room; - GtkWidget *entry_room; - GtkWidget *expander_browse; - GtkWidget *hbox_expander; - GtkWidget *throbber; - GtkWidget *treeview; - GtkTreeModel *model; - GtkWidget *button_join; - GtkWidget *label_error_message; - GtkWidget *viewport_error; - - GSettings *gsettings; +typedef struct +{ + EmpathyTpRoomlist *room_list; + /* Currently selected account */ + TpAccount *account; + /* Signal id of the "status-changed" signal connected on the currently + * selected account */ + gulong status_changed_id; + + GtkWidget *window; + GtkWidget *vbox_widgets; + GtkWidget *table_grid; + GtkWidget *label_account; + GtkWidget *account_chooser; + GtkWidget *label_server; + GtkWidget *entry_server; + GtkWidget *label_room; + GtkWidget *entry_room; + GtkWidget *expander_browse; + GtkWidget *hbox_expander; + GtkWidget *throbber; + GtkWidget *treeview; + GtkTreeModel *model; + GtkWidget *button_join; + GtkWidget *label_error_message; + GtkWidget *viewport_error; + + GSettings *gsettings; } EmpathyNewChatroomDialog; -enum { - COL_NEED_PASSWORD, - COL_INVITE_ONLY, - COL_NAME, - COL_ROOM, - COL_MEMBERS, - COL_MEMBERS_INT, - COL_TOOLTIP, - COL_COUNT +enum +{ + COL_NEED_PASSWORD, + COL_INVITE_ONLY, + COL_NAME, + COL_ROOM, + COL_MEMBERS, + COL_MEMBERS_INT, + COL_TOOLTIP, + COL_COUNT }; -static void new_chatroom_dialog_response_cb (GtkWidget *widget, - gint response, - EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_destroy_cb (GtkWidget *widget, - EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_model_setup (EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_model_add_columns (EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox, - EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_account_ready_cb (EmpathyAccountChooser *combobox, - EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_roomlist_destroy_cb (EmpathyTpRoomlist *room_list, - EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_new_room_cb (EmpathyTpRoomlist *room_list, - EmpathyChatroom *chatroom, - EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_listing_cb (EmpathyTpRoomlist *room_list, - gpointer unused, - EmpathyNewChatroomDialog *dialog); -static void start_listing_error_cb (EmpathyTpRoomlist *room_list, - GError *error, - EmpathyNewChatroomDialog *dialog); -static void stop_listing_error_cb (EmpathyTpRoomlist *room_list, - GError *error, - EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_model_clear (EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_model_row_activated_cb (GtkTreeView *tree_view, - GtkTreePath *path, - GtkTreeViewColumn *column, - EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_model_selection_changed (GtkTreeSelection *selection, - EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_join (EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_entry_changed_cb (GtkWidget *entry, - EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_browse_start (EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_browse_stop (EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_entry_server_activate_cb (GtkWidget *widget, - EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_expander_browse_activate_cb (GtkWidget *widget, - EmpathyNewChatroomDialog *dialog); -static gboolean new_chatroom_dialog_entry_server_focus_out_cb (GtkWidget *widget, - GdkEventFocus *event, - EmpathyNewChatroomDialog *dialog); -static void new_chatroom_dialog_button_close_error_clicked_cb (GtkButton *button, - EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_response_cb (GtkWidget *widget, + gint response, + EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_destroy_cb (GtkWidget *widget, + EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_model_setup (EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_model_add_columns ( + EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_update_widgets ( + EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox, + EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_account_ready_cb ( + EmpathyAccountChooser *combobox, + EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_roomlist_destroy_cb ( + EmpathyTpRoomlist *room_list, + EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_new_room_cb (EmpathyTpRoomlist *room_list, + EmpathyChatroom *chatroom, + EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_listing_cb (EmpathyTpRoomlist *room_list, + gpointer unused, + EmpathyNewChatroomDialog *dialog); +static void start_listing_error_cb (EmpathyTpRoomlist *room_list, + GError *error, + EmpathyNewChatroomDialog *dialog); +static void stop_listing_error_cb (EmpathyTpRoomlist *room_list, + GError *error, + EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_model_clear (EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_model_row_activated_cb (GtkTreeView *tree_view, + GtkTreePath *path, + GtkTreeViewColumn *column, + EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_model_selection_changed ( + GtkTreeSelection *selection, + EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_join (EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_entry_changed_cb (GtkWidget *entry, + EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_browse_start (EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_browse_stop (EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_entry_server_activate_cb (GtkWidget *widget, + EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_expander_browse_activate_cb (GtkWidget *widget, + EmpathyNewChatroomDialog *dialog); +static gboolean new_chatroom_dialog_entry_server_focus_out_cb ( + GtkWidget *widget, + GdkEventFocus *event, + EmpathyNewChatroomDialog *dialog); +static void new_chatroom_dialog_button_close_error_clicked_cb ( + GtkButton *button, + EmpathyNewChatroomDialog *dialog); static EmpathyNewChatroomDialog *dialog_p = NULL; @@ -141,699 +149,694 @@ static EmpathyNewChatroomDialog *dialog_p = NULL; void empathy_new_chatroom_dialog_show (GtkWindow *parent) { - EmpathyNewChatroomDialog *dialog; - GtkBuilder *gui; - GtkSizeGroup *size_group; - gchar *filename; - - if (dialog_p) { - gtk_window_present (GTK_WINDOW (dialog_p->window)); - return; - } - - dialog_p = dialog = g_new0 (EmpathyNewChatroomDialog, 1); - - filename = empathy_file_lookup ("empathy-new-chatroom-dialog.ui", "src"); - gui = empathy_builder_get_file (filename, - "new_chatroom_dialog", &dialog->window, - "table_grid", &dialog->table_grid, - "label_account", &dialog->label_account, - "label_server", &dialog->label_server, - "label_room", &dialog->label_room, - "entry_server", &dialog->entry_server, - "entry_room", &dialog->entry_room, - "treeview", &dialog->treeview, - "button_join", &dialog->button_join, - "expander_browse", &dialog->expander_browse, - "hbox_expander", &dialog->hbox_expander, - "label_error_message", &dialog->label_error_message, - "viewport_error", &dialog->viewport_error, - NULL); - g_free (filename); - - empathy_builder_connect (gui, dialog, - "new_chatroom_dialog", "response", new_chatroom_dialog_response_cb, - "new_chatroom_dialog", "destroy", new_chatroom_dialog_destroy_cb, - "entry_server", "changed", new_chatroom_dialog_entry_changed_cb, - "entry_server", "activate", new_chatroom_dialog_entry_server_activate_cb, - "entry_server", "focus-out-event", new_chatroom_dialog_entry_server_focus_out_cb, - "entry_room", "changed", new_chatroom_dialog_entry_changed_cb, - "expander_browse", "activate", new_chatroom_dialog_expander_browse_activate_cb, - "button_close_error", "clicked", new_chatroom_dialog_button_close_error_clicked_cb, - NULL); - - g_object_unref (gui); - - g_object_add_weak_pointer (G_OBJECT (dialog->window), (gpointer) &dialog_p); - - /* Label alignment */ - size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); - - gtk_size_group_add_widget (size_group, dialog->label_account); - gtk_size_group_add_widget (size_group, dialog->label_server); - gtk_size_group_add_widget (size_group, dialog->label_room); - - g_object_unref (size_group); - - /* Set up chatrooms treeview */ - new_chatroom_dialog_model_setup (dialog); - - /* Add throbber */ - dialog->throbber = gtk_spinner_new (); - gtk_box_pack_start (GTK_BOX (dialog->hbox_expander), dialog->throbber, - TRUE, TRUE, 0); - - dialog->gsettings = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA); - - /* Account chooser for custom */ - dialog->account_chooser = empathy_account_chooser_new (); - empathy_account_chooser_set_filter (EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser), - empathy_account_chooser_filter_supports_chatrooms, - NULL); - gtk_grid_attach (GTK_GRID (dialog->table_grid), - dialog->account_chooser, - 1, 0, 1, 1); - gtk_widget_show (dialog->account_chooser); - - g_signal_connect (EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser), "ready", - G_CALLBACK (new_chatroom_dialog_account_ready_cb), - dialog); - g_signal_connect (GTK_COMBO_BOX (dialog->account_chooser), "changed", - G_CALLBACK (new_chatroom_dialog_account_changed_cb), - dialog); - new_chatroom_dialog_account_changed_cb (GTK_COMBO_BOX (dialog->account_chooser), - dialog); - - if (parent) { - gtk_window_set_transient_for (GTK_WINDOW (dialog->window), - GTK_WINDOW (parent)); - } - - gtk_widget_show (dialog->window); + EmpathyNewChatroomDialog *dialog; + GtkBuilder *gui; + GtkSizeGroup *size_group; + gchar *filename; + + if (dialog_p) + { + gtk_window_present (GTK_WINDOW (dialog_p->window)); + return; + } + + dialog_p = dialog = g_new0 (EmpathyNewChatroomDialog, 1); + + filename = empathy_file_lookup ("empathy-new-chatroom-dialog.ui", "src"); + gui = empathy_builder_get_file (filename, + "new_chatroom_dialog", &dialog->window, + "table_grid", &dialog->table_grid, + "label_account", &dialog->label_account, + "label_server", &dialog->label_server, + "label_room", &dialog->label_room, + "entry_server", &dialog->entry_server, + "entry_room", &dialog->entry_room, + "treeview", &dialog->treeview, + "button_join", &dialog->button_join, + "expander_browse", &dialog->expander_browse, + "hbox_expander", &dialog->hbox_expander, + "label_error_message", &dialog->label_error_message, + "viewport_error", &dialog->viewport_error, + NULL); + g_free (filename); + + empathy_builder_connect (gui, dialog, + "new_chatroom_dialog", "response", new_chatroom_dialog_response_cb, + "new_chatroom_dialog", "destroy", new_chatroom_dialog_destroy_cb, + "entry_server", "changed", new_chatroom_dialog_entry_changed_cb, + "entry_server", "activate", new_chatroom_dialog_entry_server_activate_cb, + "entry_server", "focus-out-event", new_chatroom_dialog_entry_server_focus_out_cb, + "entry_room", "changed", new_chatroom_dialog_entry_changed_cb, + "expander_browse", "activate", new_chatroom_dialog_expander_browse_activate_cb, + "button_close_error", "clicked", new_chatroom_dialog_button_close_error_clicked_cb, + NULL); + + g_object_unref (gui); + + g_object_add_weak_pointer (G_OBJECT (dialog->window), (gpointer) &dialog_p); + + /* Label alignment */ + size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); + + gtk_size_group_add_widget (size_group, dialog->label_account); + gtk_size_group_add_widget (size_group, dialog->label_server); + gtk_size_group_add_widget (size_group, dialog->label_room); + + g_object_unref (size_group); + + /* Set up chatrooms treeview */ + new_chatroom_dialog_model_setup (dialog); + + /* Add throbber */ + dialog->throbber = gtk_spinner_new (); + gtk_box_pack_start (GTK_BOX (dialog->hbox_expander), dialog->throbber, + TRUE, TRUE, 0); + + dialog->gsettings = g_settings_new (EMPATHY_PREFS_CHAT_SCHEMA); + + /* Account chooser for custom */ + dialog->account_chooser = empathy_account_chooser_new (); + empathy_account_chooser_set_filter ( + EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser), + empathy_account_chooser_filter_supports_chatrooms, NULL); + gtk_grid_attach (GTK_GRID (dialog->table_grid), dialog->account_chooser, + 1, 0, 1, 1); + gtk_widget_show (dialog->account_chooser); + + g_signal_connect (EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser), "ready", + G_CALLBACK (new_chatroom_dialog_account_ready_cb), dialog); + g_signal_connect (GTK_COMBO_BOX (dialog->account_chooser), "changed", + G_CALLBACK (new_chatroom_dialog_account_changed_cb), dialog); + new_chatroom_dialog_account_changed_cb ( + GTK_COMBO_BOX (dialog->account_chooser), dialog); + + if (parent) + { + gtk_window_set_transient_for (GTK_WINDOW (dialog->window), + GTK_WINDOW (parent)); + } + + gtk_widget_show (dialog->window); } static void -new_chatroom_dialog_store_last_account (GSettings *gsettings, - EmpathyAccountChooser *account_chooser) +new_chatroom_dialog_store_last_account (GSettings *gsettings, + EmpathyAccountChooser *account_chooser) { - TpAccount *account; - const char *account_path; + TpAccount *account; + const char *account_path; - account = empathy_account_chooser_get_account (account_chooser); - if (account == NULL) - return; + account = empathy_account_chooser_get_account (account_chooser); + if (account == NULL) + return; - account_path = tp_proxy_get_object_path (account); - DEBUG ("Storing account path '%s'", account_path); + account_path = tp_proxy_get_object_path (account); + DEBUG ("Storing account path '%s'", account_path); - g_settings_set (gsettings, EMPATHY_PREFS_CHAT_ROOM_LAST_ACCOUNT, - "o", account_path); + g_settings_set (gsettings, EMPATHY_PREFS_CHAT_ROOM_LAST_ACCOUNT, + "o", account_path); } static void -new_chatroom_dialog_response_cb (GtkWidget *widget, - gint response, - EmpathyNewChatroomDialog *dialog) +new_chatroom_dialog_response_cb (GtkWidget *widget, + gint response, + EmpathyNewChatroomDialog *dialog) { - if (response == GTK_RESPONSE_OK) { - new_chatroom_dialog_join (dialog); - new_chatroom_dialog_store_last_account (dialog->gsettings, - EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser)); - } - - gtk_widget_destroy (widget); + if (response == GTK_RESPONSE_OK) + { + new_chatroom_dialog_join (dialog); + new_chatroom_dialog_store_last_account (dialog->gsettings, + EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser)); + } + + gtk_widget_destroy (widget); } static void -new_chatroom_dialog_destroy_cb (GtkWidget *widget, - EmpathyNewChatroomDialog *dialog) +new_chatroom_dialog_destroy_cb (GtkWidget *widget, + EmpathyNewChatroomDialog *dialog) { - if (dialog->room_list) { - g_object_unref (dialog->room_list); - } - g_object_unref (dialog->model); + if (dialog->room_list) + g_object_unref (dialog->room_list); + + g_object_unref (dialog->model); - if (dialog->account != NULL) { - g_signal_handler_disconnect (dialog->account, dialog->status_changed_id); - g_object_unref (dialog->account); - } + if (dialog->account != NULL) + { + g_signal_handler_disconnect (dialog->account, dialog->status_changed_id); + g_object_unref (dialog->account); + } - g_clear_object (&dialog->gsettings); + g_clear_object (&dialog->gsettings); - g_free (dialog); + g_free (dialog); } static void new_chatroom_dialog_model_setup (EmpathyNewChatroomDialog *dialog) { - GtkTreeView *view; - GtkListStore *store; - GtkTreeSelection *selection; - - /* View */ - view = GTK_TREE_VIEW (dialog->treeview); - - g_signal_connect (view, "row-activated", - G_CALLBACK (new_chatroom_dialog_model_row_activated_cb), - dialog); - - /* Store/Model */ - store = gtk_list_store_new (COL_COUNT, - G_TYPE_STRING, /* Invite */ - G_TYPE_STRING, /* Password */ - G_TYPE_STRING, /* Name */ - G_TYPE_STRING, /* Room */ - G_TYPE_STRING, /* Member count */ - G_TYPE_INT, /* Member count int */ - G_TYPE_STRING); /* Tool tip */ - - dialog->model = GTK_TREE_MODEL (store); - gtk_tree_view_set_model (view, dialog->model); - gtk_tree_view_set_tooltip_column (view, COL_TOOLTIP); - gtk_tree_view_set_search_column (view, COL_NAME); - - /* Selection */ - selection = gtk_tree_view_get_selection (view); - gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), - COL_NAME, GTK_SORT_ASCENDING); - - g_signal_connect (selection, "changed", - G_CALLBACK (new_chatroom_dialog_model_selection_changed), - dialog); - - /* Columns */ - new_chatroom_dialog_model_add_columns (dialog); + GtkTreeView *view; + GtkListStore *store; + GtkTreeSelection *selection; + + /* View */ + view = GTK_TREE_VIEW (dialog->treeview); + + g_signal_connect (view, "row-activated", + G_CALLBACK (new_chatroom_dialog_model_row_activated_cb), dialog); + + /* Store/Model */ + store = gtk_list_store_new (COL_COUNT, + G_TYPE_STRING, /* Invite */ + G_TYPE_STRING, /* Password */ + G_TYPE_STRING, /* Name */ + G_TYPE_STRING, /* Room */ + G_TYPE_STRING, /* Member count */ + G_TYPE_INT, /* Member count int */ + G_TYPE_STRING); /* Tool tip */ + + dialog->model = GTK_TREE_MODEL (store); + gtk_tree_view_set_model (view, dialog->model); + gtk_tree_view_set_tooltip_column (view, COL_TOOLTIP); + gtk_tree_view_set_search_column (view, COL_NAME); + + /* Selection */ + selection = gtk_tree_view_get_selection (view); + gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (store), + COL_NAME, GTK_SORT_ASCENDING); + + g_signal_connect (selection, "changed", + G_CALLBACK (new_chatroom_dialog_model_selection_changed), dialog); + + /* Columns */ + new_chatroom_dialog_model_add_columns (dialog); } static void new_chatroom_dialog_model_add_columns (EmpathyNewChatroomDialog *dialog) { - GtkTreeView *view; - GtkTreeViewColumn *column; - GtkCellRenderer *cell; - gint width, height; - - gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height); - - view = GTK_TREE_VIEW (dialog->treeview); - - cell = gtk_cell_renderer_pixbuf_new (); - g_object_set (cell, - "width", width, - "height", height, - "stock-size", GTK_ICON_SIZE_MENU, - NULL); - column = gtk_tree_view_column_new_with_attributes (NULL, - cell, - "stock-id", COL_INVITE_ONLY, - NULL); - - gtk_tree_view_column_set_sort_column_id (column, COL_INVITE_ONLY); - gtk_tree_view_append_column (view, column); - - column = gtk_tree_view_column_new_with_attributes (NULL, - cell, - "stock-id", COL_NEED_PASSWORD, - NULL); - - gtk_tree_view_column_set_sort_column_id (column, COL_NEED_PASSWORD); - gtk_tree_view_append_column (view, column); - - cell = gtk_cell_renderer_text_new (); - g_object_set (cell, - "xpad", (guint) 4, - "ypad", (guint) 2, - "ellipsize", PANGO_ELLIPSIZE_END, - NULL); - - column = gtk_tree_view_column_new_with_attributes (_("Chat Room"), - cell, - "text", COL_NAME, - NULL); - - gtk_tree_view_column_set_sort_column_id (column, COL_NAME); - gtk_tree_view_column_set_expand (column, TRUE); - gtk_tree_view_append_column (view, column); - - cell = gtk_cell_renderer_text_new (); - g_object_set (cell, - "xpad", (guint) 4, - "ypad", (guint) 2, - "ellipsize", PANGO_ELLIPSIZE_END, - "alignment", PANGO_ALIGN_RIGHT, - NULL); - column = gtk_tree_view_column_new_with_attributes (_("Members"), - cell, - "text", COL_MEMBERS, - NULL); - - gtk_tree_view_column_set_sort_column_id (column, COL_MEMBERS_INT); - gtk_tree_view_append_column (view, column); + GtkTreeView *view; + GtkTreeViewColumn *column; + GtkCellRenderer*cell; + gint width, height; + + gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &width, &height); + + view = GTK_TREE_VIEW (dialog->treeview); + + cell = gtk_cell_renderer_pixbuf_new (); + g_object_set (cell, + "width", width, + "height", height, + "stock-size", GTK_ICON_SIZE_MENU, + NULL); + + column = gtk_tree_view_column_new_with_attributes (NULL, cell, + "stock-id", COL_INVITE_ONLY, NULL); + + gtk_tree_view_column_set_sort_column_id (column, COL_INVITE_ONLY); + gtk_tree_view_append_column (view, column); + + column = gtk_tree_view_column_new_with_attributes (NULL, cell, + "stock-id", COL_NEED_PASSWORD, NULL); + + gtk_tree_view_column_set_sort_column_id (column, COL_NEED_PASSWORD); + gtk_tree_view_append_column (view, column); + + cell = gtk_cell_renderer_text_new (); + g_object_set (cell, + "xpad", (guint) 4, + "ypad", (guint) 2, + "ellipsize", PANGO_ELLIPSIZE_END, + NULL); + + column = gtk_tree_view_column_new_with_attributes (_("Chat Room"), cell, + "text", COL_NAME, NULL); + + gtk_tree_view_column_set_sort_column_id (column, COL_NAME); + gtk_tree_view_column_set_expand (column, TRUE); + gtk_tree_view_append_column (view, column); + + cell = gtk_cell_renderer_text_new (); + g_object_set (cell, + "xpad", (guint) 4, + "ypad", (guint) 2, + "ellipsize", PANGO_ELLIPSIZE_END, + "alignment", PANGO_ALIGN_RIGHT, + NULL); + + column = gtk_tree_view_column_new_with_attributes (_("Members"), cell, + "text", COL_MEMBERS, NULL); + + gtk_tree_view_column_set_sort_column_id (column, COL_MEMBERS_INT); + gtk_tree_view_append_column (view, column); } static void update_join_button_sensitivity (EmpathyNewChatroomDialog *dialog) { - const gchar *room; - const gchar *protocol; - gboolean sensitive = FALSE; + const gchar *room; + const gchar *protocol; + gboolean sensitive = FALSE; + room = gtk_entry_get_text (GTK_ENTRY (dialog->entry_room)); + protocol = tp_account_get_protocol (dialog->account); + if (EMP_STR_EMPTY (room)) + goto out; - room = gtk_entry_get_text (GTK_ENTRY (dialog->entry_room)); - protocol = tp_account_get_protocol (dialog->account); - if (EMP_STR_EMPTY (room)) - goto out; + if (!tp_strdiff (protocol, "irc") && + (!tp_strdiff (room, "#") || !tp_strdiff (room, "&"))) + goto out; - if (!tp_strdiff (protocol, "irc") && (!tp_strdiff (room, "#") || - !tp_strdiff (room, "&"))) - { - goto out; - } + if (dialog->account == NULL) + goto out; - if (dialog->account == NULL) - goto out; + if (tp_account_get_connection_status (dialog->account, NULL) != + TP_CONNECTION_STATUS_CONNECTED) + goto out; - if (tp_account_get_connection_status (dialog->account, NULL) != - TP_CONNECTION_STATUS_CONNECTED) - goto out; - - sensitive = TRUE; + sensitive = TRUE; out: - gtk_widget_set_sensitive (dialog->button_join, sensitive); + gtk_widget_set_sensitive (dialog->button_join, sensitive); } static void new_chatroom_dialog_update_widgets (EmpathyNewChatroomDialog *dialog) { - const gchar *protocol; - - if (dialog->account == NULL) - return; - - protocol = tp_account_get_protocol (dialog->account); - - gtk_entry_set_text (GTK_ENTRY (dialog->entry_server), ""); - - /* hardcode here known protocols */ - if (strcmp (protocol, "jabber") == 0) { - gtk_widget_set_sensitive (dialog->entry_server, TRUE); - } - else if (strcmp (protocol, "local-xmpp") == 0) { - gtk_widget_set_sensitive (dialog->entry_server, FALSE); - } - else if (strcmp (protocol, "irc") == 0) { - gtk_widget_set_sensitive (dialog->entry_server, FALSE); - } - else { - gtk_widget_set_sensitive (dialog->entry_server, TRUE); - } - - if (!tp_strdiff (protocol, "irc")) - gtk_entry_set_text (GTK_ENTRY (dialog->entry_room), "#"); - else - gtk_entry_set_text (GTK_ENTRY (dialog->entry_room), ""); - - update_join_button_sensitivity (dialog); - - /* Final set up of the dialog */ - gtk_widget_grab_focus (dialog->entry_room); - gtk_editable_set_position (GTK_EDITABLE (dialog->entry_room), -1); + const gchar *protocol; + + if (dialog->account == NULL) + return; + + protocol = tp_account_get_protocol (dialog->account); + + gtk_entry_set_text (GTK_ENTRY (dialog->entry_server), ""); + + /* hardcode here known protocols */ + if (strcmp (protocol, "jabber") == 0) + gtk_widget_set_sensitive (dialog->entry_server, TRUE); + else if (strcmp (protocol, "local-xmpp") == 0) + gtk_widget_set_sensitive (dialog->entry_server, FALSE); + else if (strcmp (protocol, "irc") == 0) + gtk_widget_set_sensitive (dialog->entry_server, FALSE); + else + gtk_widget_set_sensitive (dialog->entry_server, TRUE); + + if (!tp_strdiff (protocol, "irc")) + gtk_entry_set_text (GTK_ENTRY (dialog->entry_room), "#"); + else + gtk_entry_set_text (GTK_ENTRY (dialog->entry_room), ""); + + update_join_button_sensitivity (dialog); + + /* Final set up of the dialog */ + gtk_widget_grab_focus (dialog->entry_room); + gtk_editable_set_position (GTK_EDITABLE (dialog->entry_room), -1); } static void account_status_changed_cb (TpAccount *account, - guint old_status, - guint new_status, - guint reason, - gchar *dbus_error_name, - GHashTable *details, - EmpathyNewChatroomDialog *self) + guint old_status, + guint new_status, + guint reason, + gchar *dbus_error_name, + GHashTable *details, + EmpathyNewChatroomDialog *self) { - update_join_button_sensitivity (self); + update_join_button_sensitivity (self); } static void -new_chatroom_dialog_select_last_account (GSettings *gsettings, - EmpathyAccountChooser *account_chooser) +new_chatroom_dialog_select_last_account (GSettings *gsettings, + EmpathyAccountChooser *account_chooser) { - const gchar *account_path; - TpAccountManager *manager; - TpSimpleClientFactory *factory; - TpAccount *account; - TpConnectionStatus status; - - account_path = g_settings_get_string (gsettings, EMPATHY_PREFS_CHAT_ROOM_LAST_ACCOUNT); - DEBUG ("Selecting account path '%s'", account_path); - - manager = tp_account_manager_dup (); - factory = tp_proxy_get_factory (manager); - account = tp_simple_client_factory_ensure_account (factory, - account_path, - NULL, - NULL); - - if (account != NULL) { - status = tp_account_get_connection_status (account, NULL); - if (status == TP_CONNECTION_STATUS_CONNECTED) { - empathy_account_chooser_set_account (account_chooser, - account); - } - g_object_unref (account); - } - g_object_unref (manager); + const gchar *account_path; + TpAccountManager *manager; + TpSimpleClientFactory *factory; + TpAccount *account; + TpConnectionStatus status; + + account_path = g_settings_get_string (gsettings, + EMPATHY_PREFS_CHAT_ROOM_LAST_ACCOUNT); + DEBUG ("Selecting account path '%s'", account_path); + + manager = tp_account_manager_dup (); + factory = tp_proxy_get_factory (manager); + account = tp_simple_client_factory_ensure_account (factory, account_path, + NULL, NULL); + + if (account != NULL) + { + status = tp_account_get_connection_status (account, NULL); + if (status == TP_CONNECTION_STATUS_CONNECTED) + empathy_account_chooser_set_account (account_chooser, account); + g_object_unref (account); + } + + g_object_unref (manager); } static void -new_chatroom_dialog_account_ready_cb (EmpathyAccountChooser *combobox, - EmpathyNewChatroomDialog *dialog) +new_chatroom_dialog_account_ready_cb (EmpathyAccountChooser *combobox, + EmpathyNewChatroomDialog *dialog) { - new_chatroom_dialog_select_last_account (dialog->gsettings, combobox); + new_chatroom_dialog_select_last_account (dialog->gsettings, combobox); } static void -new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox, - EmpathyNewChatroomDialog *dialog) +new_chatroom_dialog_account_changed_cb (GtkComboBox *combobox, + EmpathyNewChatroomDialog *dialog) { - EmpathyAccountChooser *account_chooser; - gboolean listing = FALSE; - gboolean expanded = FALSE; - TpConnection *connection; - TpCapabilities *caps; - - if (dialog->room_list) { - g_object_unref (dialog->room_list); - dialog->room_list = NULL; - } - - gtk_spinner_stop (GTK_SPINNER (dialog->throbber)); - gtk_widget_hide (dialog->throbber); - new_chatroom_dialog_model_clear (dialog); - - if (dialog->account != NULL) { - g_signal_handler_disconnect (dialog->account, dialog->status_changed_id); - g_object_unref (dialog->account); - } - - account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser); - dialog->account = empathy_account_chooser_dup_account (account_chooser); - connection = empathy_account_chooser_get_connection (account_chooser); - if (dialog->account == NULL) - goto out; - - dialog->status_changed_id = g_signal_connect (dialog->account, - "status-changed", G_CALLBACK (account_status_changed_cb), dialog); - - /* empathy_account_chooser_filter_supports_chatrooms ensures that the - * account has a connection and CAPABILITIES has been prepared. */ - g_assert (connection != NULL); - g_assert (tp_proxy_is_prepared (connection, - TP_CONNECTION_FEATURE_CAPABILITIES)); - caps = tp_connection_get_capabilities (connection); - - if (tp_capabilities_supports_room_list (caps, NULL)) { - /* Roomlist channels are supported */ - dialog->room_list = empathy_tp_roomlist_new (dialog->account); - } - else { - dialog->room_list = NULL; - } - - if (dialog->room_list) { - g_signal_connect (dialog->room_list, "destroy", - G_CALLBACK (new_chatroom_dialog_roomlist_destroy_cb), - dialog); - g_signal_connect (dialog->room_list, "new-room", - G_CALLBACK (new_chatroom_dialog_new_room_cb), - dialog); - g_signal_connect (dialog->room_list, "notify::is-listing", - G_CALLBACK (new_chatroom_dialog_listing_cb), - dialog); - g_signal_connect (dialog->room_list, "error::start", - G_CALLBACK (start_listing_error_cb), - dialog); - g_signal_connect (dialog->room_list, "error::stop", - G_CALLBACK (stop_listing_error_cb), - dialog); - - expanded = gtk_expander_get_expanded (GTK_EXPANDER (dialog->expander_browse)); - if (expanded) { - gtk_widget_hide (dialog->viewport_error); - gtk_widget_set_sensitive (dialog->treeview, TRUE); - new_chatroom_dialog_browse_start (dialog); - } - - listing = empathy_tp_roomlist_is_listing (dialog->room_list); - if (listing) { - gtk_spinner_start (GTK_SPINNER (dialog->throbber)); - gtk_widget_show (dialog->throbber); - } - } - - gtk_widget_set_sensitive (dialog->expander_browse, dialog->room_list != NULL); + EmpathyAccountChooser *account_chooser; + gboolean listing = FALSE; + gboolean expanded = FALSE; + TpConnection *connection; + TpCapabilities *caps; + + if (dialog->room_list) + { + g_object_unref (dialog->room_list); + dialog->room_list = NULL; + } + + gtk_spinner_stop (GTK_SPINNER (dialog->throbber)); + gtk_widget_hide (dialog->throbber); + new_chatroom_dialog_model_clear (dialog); + + if (dialog->account != NULL) + { + g_signal_handler_disconnect (dialog->account, dialog->status_changed_id); + g_object_unref (dialog->account); + } + + account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser); + dialog->account = empathy_account_chooser_dup_account (account_chooser); + connection = empathy_account_chooser_get_connection (account_chooser); + if (dialog->account == NULL) + goto out; + + dialog->status_changed_id = g_signal_connect (dialog->account, + "status-changed", G_CALLBACK (account_status_changed_cb), dialog); + + /* empathy_account_chooser_filter_supports_chatrooms ensures that the + * account has a connection and CAPABILITIES has been prepared. */ + g_assert (connection != NULL); + g_assert (tp_proxy_is_prepared (connection, + TP_CONNECTION_FEATURE_CAPABILITIES)); + caps = tp_connection_get_capabilities (connection); + + if (tp_capabilities_supports_room_list (caps, NULL)) + { + /* Roomlist channels are supported */ + dialog->room_list = empathy_tp_roomlist_new (dialog->account); + } + else + { + dialog->room_list = NULL; + } + + if (dialog->room_list) + { + g_signal_connect (dialog->room_list, "destroy", + G_CALLBACK (new_chatroom_dialog_roomlist_destroy_cb), dialog); + g_signal_connect (dialog->room_list, "new-room", + G_CALLBACK (new_chatroom_dialog_new_room_cb), dialog); + g_signal_connect (dialog->room_list, "notify::is-listing", + G_CALLBACK (new_chatroom_dialog_listing_cb), dialog); + g_signal_connect (dialog->room_list, "error::start", + G_CALLBACK (start_listing_error_cb), dialog); + g_signal_connect (dialog->room_list, "error::stop", + G_CALLBACK (stop_listing_error_cb), dialog); + + expanded = gtk_expander_get_expanded ( + GTK_EXPANDER (dialog->expander_browse)); + if (expanded) + { + gtk_widget_hide (dialog->viewport_error); + gtk_widget_set_sensitive (dialog->treeview, TRUE); + new_chatroom_dialog_browse_start (dialog); + } + + listing = empathy_tp_roomlist_is_listing (dialog->room_list); + if (listing) + { + gtk_spinner_start (GTK_SPINNER (dialog->throbber)); + gtk_widget_show (dialog->throbber); + } + } + + gtk_widget_set_sensitive (dialog->expander_browse, dialog->room_list != NULL); out: - new_chatroom_dialog_update_widgets (dialog); + new_chatroom_dialog_update_widgets (dialog); } static void -new_chatroom_dialog_button_close_error_clicked_cb (GtkButton *button, - EmpathyNewChatroomDialog *dialog) +new_chatroom_dialog_button_close_error_clicked_cb (GtkButton *button, + EmpathyNewChatroomDialog *dialog) { - gtk_widget_hide (dialog->viewport_error); + gtk_widget_hide (dialog->viewport_error); } static void -new_chatroom_dialog_roomlist_destroy_cb (EmpathyTpRoomlist *room_list, - EmpathyNewChatroomDialog *dialog) +new_chatroom_dialog_roomlist_destroy_cb (EmpathyTpRoomlist *room_list, + EmpathyNewChatroomDialog *dialog) { - g_object_unref (dialog->room_list); - dialog->room_list = NULL; + g_object_unref (dialog->room_list); + dialog->room_list = NULL; } static void -new_chatroom_dialog_new_room_cb (EmpathyTpRoomlist *room_list, - EmpathyChatroom *chatroom, - EmpathyNewChatroomDialog *dialog) +new_chatroom_dialog_new_room_cb (EmpathyTpRoomlist *room_list, + EmpathyChatroom *chatroom, + EmpathyNewChatroomDialog *dialog) { - GtkListStore *store; - gchar *members; - gchar *tooltip; - const gchar *need_password; - const gchar *invite_only; - gchar *tmp; - - DEBUG ("New chatroom listed: %s (%s)", - empathy_chatroom_get_name (chatroom), - empathy_chatroom_get_room (chatroom)); - - /* Add to model */ - store = GTK_LIST_STORE (dialog->model); - members = g_strdup_printf ("%d", empathy_chatroom_get_members_count (chatroom)); - tmp = g_strdup_printf ("<b>%s</b>", empathy_chatroom_get_name (chatroom)); - /* Translators: Room/Join's roomlist tooltip. Parameters are a channel name, - yes/no, yes/no and a number. */ - tooltip = g_strdup_printf (_("%s\nInvite required: %s\nPassword required: %s\nMembers: %s"), - tmp, - empathy_chatroom_get_invite_only (chatroom) ? _("Yes") : _("No"), - empathy_chatroom_get_need_password (chatroom) ? _("Yes") : _("No"), - members); - g_free (tmp); - invite_only = (empathy_chatroom_get_invite_only (chatroom) ? - GTK_STOCK_INDEX : NULL); - need_password = (empathy_chatroom_get_need_password (chatroom) ? - GTK_STOCK_DIALOG_AUTHENTICATION : NULL); - - gtk_list_store_insert_with_values (store, NULL, -1, - COL_NEED_PASSWORD, need_password, - COL_INVITE_ONLY, invite_only, - COL_NAME, empathy_chatroom_get_name (chatroom), - COL_ROOM, empathy_chatroom_get_room (chatroom), - COL_MEMBERS, members, - COL_MEMBERS_INT, empathy_chatroom_get_members_count (chatroom), - COL_TOOLTIP, tooltip, - -1); - - g_free (members); - g_free (tooltip); + GtkListStore *store; + gchar *members; + gchar *tooltip; + const gchar *need_password; + const gchar *invite_only; + gchar *tmp; + + DEBUG ("New chatroom listed: %s (%s)", empathy_chatroom_get_name (chatroom), + empathy_chatroom_get_room (chatroom)); + + /* Add to model */ + store = GTK_LIST_STORE (dialog->model); + members = g_strdup_printf ("%d", empathy_chatroom_get_members_count ( + chatroom)); + tmp = g_strdup_printf ("<b>%s</b>", empathy_chatroom_get_name (chatroom)); + /* Translators: Room/Join's roomlist tooltip. Parameters are a channel name, + yes/no, yes/no and a number. */ + tooltip = g_strdup_printf ( + _("%s\nInvite required: %s\nPassword required: %s\nMembers: %s"), + tmp, + empathy_chatroom_get_invite_only (chatroom) ? _("Yes") : _("No"), + empathy_chatroom_get_need_password (chatroom) ? _("Yes") : _("No"), + members); + g_free (tmp); + invite_only = (empathy_chatroom_get_invite_only (chatroom) ? + GTK_STOCK_INDEX : NULL); + need_password = (empathy_chatroom_get_need_password (chatroom) ? + GTK_STOCK_DIALOG_AUTHENTICATION : NULL); + + gtk_list_store_insert_with_values (store, NULL, -1, + COL_NEED_PASSWORD, need_password, + COL_INVITE_ONLY, invite_only, + COL_NAME, empathy_chatroom_get_name (chatroom), + COL_ROOM, empathy_chatroom_get_room (chatroom), + COL_MEMBERS, members, + COL_MEMBERS_INT, empathy_chatroom_get_members_count (chatroom), + COL_TOOLTIP, tooltip, + -1); + + g_free (members); + g_free (tooltip); } static void -start_listing_error_cb (EmpathyTpRoomlist *room_list, - GError *error, - EmpathyNewChatroomDialog *dialog) +start_listing_error_cb (EmpathyTpRoomlist *room_list, + GError *error, + EmpathyNewChatroomDialog *dialog) { - gtk_label_set_text (GTK_LABEL (dialog->label_error_message), _("Could not start room listing")); - gtk_widget_show_all (dialog->viewport_error); - gtk_widget_set_sensitive (dialog->treeview, FALSE); + gtk_label_set_text (GTK_LABEL (dialog->label_error_message), + _("Could not start room listing")); + gtk_widget_show_all (dialog->viewport_error); + gtk_widget_set_sensitive (dialog->treeview, FALSE); } static void -stop_listing_error_cb (EmpathyTpRoomlist *room_list, - GError *error, - EmpathyNewChatroomDialog *dialog) +stop_listing_error_cb (EmpathyTpRoomlist *room_list, + GError *error, + EmpathyNewChatroomDialog *dialog) { - gtk_label_set_text (GTK_LABEL (dialog->label_error_message), _("Could not stop room listing")); - gtk_widget_show_all (dialog->viewport_error); - gtk_widget_set_sensitive (dialog->treeview, FALSE); + gtk_label_set_text (GTK_LABEL (dialog->label_error_message), + _("Could not stop room listing")); + gtk_widget_show_all (dialog->viewport_error); + gtk_widget_set_sensitive (dialog->treeview, FALSE); } static void -new_chatroom_dialog_listing_cb (EmpathyTpRoomlist *room_list, - gpointer unused, - EmpathyNewChatroomDialog *dialog) +new_chatroom_dialog_listing_cb (EmpathyTpRoomlist *room_list, + gpointer unused, + EmpathyNewChatroomDialog *dialog) { - gboolean listing; - - listing = empathy_tp_roomlist_is_listing (room_list); - - /* Update the throbber */ - if (listing) { - gtk_spinner_start (GTK_SPINNER (dialog->throbber)); - gtk_widget_show (dialog->throbber); - } else { - gtk_spinner_stop (GTK_SPINNER (dialog->throbber)); - gtk_widget_hide (dialog->throbber); - } + gboolean listing; + + listing = empathy_tp_roomlist_is_listing (room_list); + + /* Update the throbber */ + if (listing) + { + gtk_spinner_start (GTK_SPINNER (dialog->throbber)); + gtk_widget_show (dialog->throbber); + } + else + { + gtk_spinner_stop (GTK_SPINNER (dialog->throbber)); + gtk_widget_hide (dialog->throbber); + } } static void new_chatroom_dialog_model_clear (EmpathyNewChatroomDialog *dialog) { - GtkListStore *store; + GtkListStore *store; - store = GTK_LIST_STORE (dialog->model); - gtk_list_store_clear (store); + store = GTK_LIST_STORE (dialog->model); + gtk_list_store_clear (store); } static void -new_chatroom_dialog_model_row_activated_cb (GtkTreeView *tree_view, - GtkTreePath *path, - GtkTreeViewColumn *column, - EmpathyNewChatroomDialog *dialog) +new_chatroom_dialog_model_row_activated_cb (GtkTreeView *tree_view, + GtkTreePath *path, + GtkTreeViewColumn *column, + EmpathyNewChatroomDialog *dialog) { - gtk_widget_activate (dialog->button_join); + gtk_widget_activate (dialog->button_join); } static void -new_chatroom_dialog_model_selection_changed (GtkTreeSelection *selection, - EmpathyNewChatroomDialog *dialog) +new_chatroom_dialog_model_selection_changed (GtkTreeSelection *selection, + EmpathyNewChatroomDialog *dialog) { - GtkTreeModel *model; - GtkTreeIter iter; - gchar *room = NULL; - gchar *server = NULL; - - if (!gtk_tree_selection_get_selected (selection, &model, &iter)) { - return; - } - - gtk_tree_model_get (model, &iter, COL_ROOM, &room, -1); - server = strstr (room, "@"); - if (server) { - *server = '\0'; - server++; - } - - gtk_entry_set_text (GTK_ENTRY (dialog->entry_server), server ? server : ""); - gtk_entry_set_text (GTK_ENTRY (dialog->entry_room), room ? room : ""); - - g_free (room); + GtkTreeModel *model; + GtkTreeIter iter; + gchar *room = NULL; + gchar *server = NULL; + + if (!gtk_tree_selection_get_selected (selection, &model, &iter)) + return; + + gtk_tree_model_get (model, &iter, COL_ROOM, &room, -1); + server = strstr (room, "@"); + if (server) + { + *server = '\0'; + server++; + } + + gtk_entry_set_text (GTK_ENTRY (dialog->entry_server), server ? server : ""); + gtk_entry_set_text (GTK_ENTRY (dialog->entry_room), room ? room : ""); + + g_free (room); } static void new_chatroom_dialog_join (EmpathyNewChatroomDialog *dialog) { - EmpathyAccountChooser *account_chooser; - TpAccount *account; - const gchar *room; - const gchar *server = NULL; - gchar *room_name = NULL; + EmpathyAccountChooser *account_chooser; + TpAccount *account; + const gchar *room; + const gchar *server = NULL; + gchar *room_name = NULL; - room = gtk_entry_get_text (GTK_ENTRY (dialog->entry_room)); - server = gtk_entry_get_text (GTK_ENTRY (dialog->entry_server)); + room = gtk_entry_get_text (GTK_ENTRY (dialog->entry_room)); + server = gtk_entry_get_text (GTK_ENTRY (dialog->entry_server)); - account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser); - account = empathy_account_chooser_get_account (account_chooser); + account_chooser = EMPATHY_ACCOUNT_CHOOSER (dialog->account_chooser); + account = empathy_account_chooser_get_account (account_chooser); - if (!EMP_STR_EMPTY (server)) { - room_name = g_strconcat (room, "@", server, NULL); - } else { - room_name = g_strdup (room); - } + if (!EMP_STR_EMPTY (server)) + room_name = g_strconcat (room, "@", server, NULL); + else + room_name = g_strdup (room); - g_strstrip (room_name); + g_strstrip (room_name); - DEBUG ("Requesting channel for '%s'", room_name); + DEBUG ("Requesting channel for '%s'", room_name); - empathy_join_muc (account, room_name, empathy_get_current_action_time ()); + empathy_join_muc (account, room_name, empathy_get_current_action_time ()); - g_free (room_name); + g_free (room_name); } static void -new_chatroom_dialog_entry_changed_cb (GtkWidget *entry, - EmpathyNewChatroomDialog *dialog) +new_chatroom_dialog_entry_changed_cb (GtkWidget *entry, + EmpathyNewChatroomDialog *dialog) { - if (entry == dialog->entry_room) { - update_join_button_sensitivity (dialog); + if (entry == dialog->entry_room) + { + update_join_button_sensitivity (dialog); - /* FIXME: Select the room in the list */ - } + /* FIXME: Select the room in the list */ + } } static void new_chatroom_dialog_browse_start (EmpathyNewChatroomDialog *dialog) { - new_chatroom_dialog_model_clear (dialog); - if (dialog->room_list) { - empathy_tp_roomlist_start (dialog->room_list); - } + new_chatroom_dialog_model_clear (dialog); + if (dialog->room_list) + empathy_tp_roomlist_start (dialog->room_list); } static void new_chatroom_dialog_browse_stop (EmpathyNewChatroomDialog *dialog) { - if (dialog->room_list) { - empathy_tp_roomlist_stop (dialog->room_list); - } + if (dialog->room_list) + empathy_tp_roomlist_stop (dialog->room_list); } static void -new_chatroom_dialog_entry_server_activate_cb (GtkWidget *widget, - EmpathyNewChatroomDialog *dialog) +new_chatroom_dialog_entry_server_activate_cb (GtkWidget *widget, + EmpathyNewChatroomDialog *dialog) { - new_chatroom_dialog_browse_start (dialog); + new_chatroom_dialog_browse_start (dialog); } static void -new_chatroom_dialog_expander_browse_activate_cb (GtkWidget *widget, - EmpathyNewChatroomDialog *dialog) +new_chatroom_dialog_expander_browse_activate_cb (GtkWidget *widget, + EmpathyNewChatroomDialog *dialog) { - gboolean expanded; - - expanded = gtk_expander_get_expanded (GTK_EXPANDER (widget)); - if (expanded) { - new_chatroom_dialog_browse_stop (dialog); - gtk_window_set_resizable (GTK_WINDOW (dialog->window), FALSE); - } else { - gtk_widget_hide (dialog->viewport_error); - gtk_widget_set_sensitive (dialog->treeview, TRUE); - new_chatroom_dialog_browse_start (dialog); - gtk_window_set_resizable (GTK_WINDOW (dialog->window), TRUE); - } + gboolean expanded; + + expanded = gtk_expander_get_expanded (GTK_EXPANDER (widget)); + if (expanded) + { + new_chatroom_dialog_browse_stop (dialog); + gtk_window_set_resizable (GTK_WINDOW (dialog->window), FALSE); + } + else + { + gtk_widget_hide (dialog->viewport_error); + gtk_widget_set_sensitive (dialog->treeview, TRUE); + new_chatroom_dialog_browse_start (dialog); + gtk_window_set_resizable (GTK_WINDOW (dialog->window), TRUE); + } } static gboolean -new_chatroom_dialog_entry_server_focus_out_cb (GtkWidget *widget, - GdkEventFocus *event, - EmpathyNewChatroomDialog *dialog) +new_chatroom_dialog_entry_server_focus_out_cb (GtkWidget *widget, + GdkEventFocus *event, + EmpathyNewChatroomDialog *dialog) { - gboolean expanded; + gboolean expanded; + + expanded = gtk_expander_get_expanded (GTK_EXPANDER (dialog->expander_browse)); + if (expanded) + new_chatroom_dialog_browse_start (dialog); - expanded = gtk_expander_get_expanded (GTK_EXPANDER (dialog->expander_browse)); - if (expanded) { - new_chatroom_dialog_browse_start (dialog); - } - return FALSE; + return FALSE; } diff --git a/src/empathy-new-chatroom-dialog.h b/src/empathy-new-chatroom-dialog.h index b1cef0daa..9c3945a55 100644 --- a/src/empathy-new-chatroom-dialog.h +++ b/src/empathy-new-chatroom-dialog.h @@ -1,7 +1,6 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ /* * Copyright (C) 2006-2007 Imendio AB - * Copyright (C) 2007-2008 Collabora Ltd. + * Copyright (C) 2007-2011 Collabora Ltd. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as |