diff options
author | Xavier Claessens <xclaesse@gmail.com> | 2007-06-02 04:25:05 +0800 |
---|---|---|
committer | Xavier Claessens <xclaesse@src.gnome.org> | 2007-06-02 04:25:05 +0800 |
commit | 9223336edde583afe690a3757d71188ed6ebf16d (patch) | |
tree | 1554ddeff64a9fcdb14978076ce6cb63a29d0aeb /libempathy-gtk | |
parent | 7a99a96e5b81b8d573104d1809364d5969b6b83d (diff) | |
download | gsoc2013-empathy-9223336edde583afe690a3757d71188ed6ebf16d.tar gsoc2013-empathy-9223336edde583afe690a3757d71188ed6ebf16d.tar.gz gsoc2013-empathy-9223336edde583afe690a3757d71188ed6ebf16d.tar.bz2 gsoc2013-empathy-9223336edde583afe690a3757d71188ed6ebf16d.tar.lz gsoc2013-empathy-9223336edde583afe690a3757d71188ed6ebf16d.tar.xz gsoc2013-empathy-9223336edde583afe690a3757d71188ed6ebf16d.tar.zst gsoc2013-empathy-9223336edde583afe690a3757d71188ed6ebf16d.zip |
Monitor changes on chatrooms.xml file and relead it when it's modified.
2007-06-01 Xavier Claessens <xclaesse@gmail.com>
* libempathy-gtk/gossip-chatrooms-window.c:
* libempathy-gtk/gossip-chat-window.c:
* libempathy/gossip-chatroom.c:
* libempathy/gossip-chatroom-manager.c:
* configure.ac: Monitor changes on chatrooms.xml file and relead it
when it's modified. connect chatroom-added/removed in some places where
needed.
svn path=/trunk/; revision=111
Diffstat (limited to 'libempathy-gtk')
-rw-r--r-- | libempathy-gtk/gossip-chat-window.c | 94 | ||||
-rw-r--r-- | libempathy-gtk/gossip-chatrooms-window.c | 45 |
2 files changed, 96 insertions, 43 deletions
diff --git a/libempathy-gtk/gossip-chat-window.c b/libempathy-gtk/gossip-chat-window.c index 6979e450e..aef972cff 100644 --- a/libempathy-gtk/gossip-chat-window.c +++ b/libempathy-gtk/gossip-chat-window.c @@ -63,49 +63,50 @@ #define URGENCY_TIMEOUT 60*1000 struct _GossipChatWindowPriv { - GList *chats; - GList *chats_new_msg; - GList *chats_composing; + GossipChatroomManager *chatroom_manager; + GList *chats; + GList *chats_new_msg; + GList *chats_composing; - GossipChat *current_chat; + GossipChat *current_chat; - gboolean page_added; - gboolean dnd_same_window; + gboolean page_added; + gboolean dnd_same_window; - guint urgency_timeout_id; + guint urgency_timeout_id; - GtkWidget *dialog; - GtkWidget *notebook; + GtkWidget *dialog; + GtkWidget *notebook; - GtkTooltips *tooltips; + GtkTooltips *tooltips; /* Menu items. */ - GtkWidget *menu_conv_clear; - GtkWidget *menu_conv_insert_smiley; - GtkWidget *menu_conv_log; - GtkWidget *menu_conv_separator; - GtkWidget *menu_conv_add_contact; - GtkWidget *menu_conv_info; - GtkWidget *menu_conv_close; - - GtkWidget *menu_room; - GtkWidget *menu_room_set_topic; - GtkWidget *menu_room_join_new; - GtkWidget *menu_room_invite; - GtkWidget *menu_room_add; - GtkWidget *menu_room_show_contacts; - - GtkWidget *menu_edit_cut; - GtkWidget *menu_edit_copy; - GtkWidget *menu_edit_paste; - - GtkWidget *menu_tabs_next; - GtkWidget *menu_tabs_prev; - GtkWidget *menu_tabs_left; - GtkWidget *menu_tabs_right; - GtkWidget *menu_tabs_detach; - - guint save_geometry_id; + GtkWidget *menu_conv_clear; + GtkWidget *menu_conv_insert_smiley; + GtkWidget *menu_conv_log; + GtkWidget *menu_conv_separator; + GtkWidget *menu_conv_add_contact; + GtkWidget *menu_conv_info; + GtkWidget *menu_conv_close; + + GtkWidget *menu_room; + GtkWidget *menu_room_set_topic; + GtkWidget *menu_room_join_new; + GtkWidget *menu_room_invite; + GtkWidget *menu_room_add; + GtkWidget *menu_room_show_contacts; + + GtkWidget *menu_edit_cut; + GtkWidget *menu_edit_copy; + GtkWidget *menu_edit_paste; + + GtkWidget *menu_tabs_next; + GtkWidget *menu_tabs_prev; + GtkWidget *menu_tabs_left; + GtkWidget *menu_tabs_right; + GtkWidget *menu_tabs_detach; + + guint save_geometry_id; }; static void gossip_chat_window_class_init (GossipChatWindowClass *klass); @@ -331,6 +332,15 @@ gossip_chat_window_init (GossipChatWindow *window) g_object_unref (glade); + /* Set up chatroom manager */ + priv->chatroom_manager = gossip_chatroom_manager_new (); + g_signal_connect_swapped (priv->chatroom_manager, "chatroom-added", + G_CALLBACK (chat_window_update_menu), + window); + g_signal_connect_swapped (priv->chatroom_manager, "chatroom-removed", + G_CALLBACK (chat_window_update_menu), + window); + priv->notebook = gtk_notebook_new (); gtk_notebook_set_group_id (GTK_NOTEBOOK (priv->notebook), 1); gtk_box_pack_start (GTK_BOX (chat_vbox), priv->notebook, TRUE, TRUE, 0); @@ -500,6 +510,7 @@ gossip_chat_window_finalize (GObject *object) chat_windows = g_list_remove (chat_windows, window); gtk_widget_destroy (priv->dialog); + g_object_unref (priv->chatroom_manager); g_object_unref (priv->tooltips); G_OBJECT_CLASS (gossip_chat_window_parent_class)->finalize (object); @@ -763,10 +774,9 @@ chat_window_update_menu (GossipChatWindow *window) is_connected = gossip_chat_is_connected (priv->current_chat); if (gossip_chat_is_group_chat (priv->current_chat)) { - GossipGroupChat *group_chat; - GossipChatroom *chatroom; - GossipChatroomManager *manager; - gboolean show_contacts; + GossipGroupChat *group_chat; + GossipChatroom *chatroom; + gboolean show_contacts; group_chat = GOSSIP_GROUP_CHAT (priv->current_chat); @@ -780,11 +790,9 @@ chat_window_update_menu (GossipChatWindow *window) /* Can we add this room to our favourites and are we * connected to the room? */ - manager = gossip_chatroom_manager_new (); - chatroom = gossip_chatroom_manager_find (manager, + chatroom = gossip_chatroom_manager_find (priv->chatroom_manager, priv->current_chat->account, gossip_chat_get_id (priv->current_chat)); - g_object_unref (manager); gtk_widget_set_sensitive (priv->menu_room_add, chatroom == NULL); gtk_widget_set_sensitive (priv->menu_conv_insert_smiley, is_connected); diff --git a/libempathy-gtk/gossip-chatrooms-window.c b/libempathy-gtk/gossip-chatrooms-window.c index 5ff5d8812..4d4333e8d 100644 --- a/libempathy-gtk/gossip-chatrooms-window.c +++ b/libempathy-gtk/gossip-chatrooms-window.c @@ -84,6 +84,13 @@ static void chatrooms_window_button_close_clicked_cb (GtkWid static void chatrooms_window_chatroom_added_cb (GossipChatroomManager *manager, GossipChatroom *chatroom, GossipChatroomsWindow *window); +static void chatrooms_window_chatroom_removed_cb (GossipChatroomManager *manager, + GossipChatroom *chatroom, + GossipChatroomsWindow *window); +static gboolean chatrooms_window_remove_chatroom_foreach (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + GossipChatroom *chatroom); static void chatrooms_window_account_changed_cb (GtkWidget *combo_box, GossipChatroomsWindow *window); @@ -139,6 +146,9 @@ gossip_chatrooms_window_show (GtkWindow *parent) g_signal_connect (window->manager, "chatroom-added", G_CALLBACK (chatrooms_window_chatroom_added_cb), window); + g_signal_connect (window->manager, "chatroom-removed", + G_CALLBACK (chatrooms_window_chatroom_removed_cb), + window); /* Account chooser for chat rooms */ window->account_chooser = gossip_account_chooser_new (); @@ -522,6 +532,41 @@ chatrooms_window_chatroom_added_cb (GossipChatroomManager *manager, } static void +chatrooms_window_chatroom_removed_cb (GossipChatroomManager *manager, + GossipChatroom *chatroom, + GossipChatroomsWindow *window) +{ + GtkTreeModel *model; + + model = gtk_tree_view_get_model (GTK_TREE_VIEW (window->treeview)); + + gtk_tree_model_foreach (model, + (GtkTreeModelForeachFunc) chatrooms_window_remove_chatroom_foreach, + chatroom); +} + +static gboolean +chatrooms_window_remove_chatroom_foreach (GtkTreeModel *model, + GtkTreePath *path, + GtkTreeIter *iter, + GossipChatroom *chatroom) +{ + GossipChatroom *this_chatroom; + + gtk_tree_model_get (model, iter, COL_POINTER, &this_chatroom, -1); + + if (gossip_chatroom_equal (chatroom, this_chatroom)) { + gtk_list_store_remove (GTK_LIST_STORE (model), iter); + g_object_unref (this_chatroom); + return TRUE; + } + + g_object_unref (this_chatroom); + + return FALSE; +} + +static void chatrooms_window_account_changed_cb (GtkWidget *combo_box, GossipChatroomsWindow *window) { |