[
Return IP Messenger / All view / Newest title / New post / Admin
]
![]()
[removed by sender] : Yuan Qingyun(09/8/14 18:33)
![]()
Re:Patch for GNOME2 IP Messenger : Yuan Qingyun(09/8/14 18:35)
![]()
Re[2]:Patch for GNOME2 IP Messenger : Yuan Qingyun(09/8/14 18:43)
![]()
Re[2]:Patch for GNOME2 IP Messenger : Yuan Qingyun(09/8/14 18:43)
![]()
Re[2]:Patch for GNOME2 IP Messenger : Yuan Qingyun(09/8/14 18:44)
![]()
Re[2]:Patch for GNOME2 IP Messenger : Yuan Qingyun(09/8/14 18:45)
![]()
Re[2]:Patch for GNOME2 IP Messenger : Yuan Qingyun(09/8/14 18:45)
![]()
Re[2]:Patch for GNOME2 IP Messenger : Yuan Qingyun(09/8/14 18:46)
![]()
Re[2]:Patch for GNOME2 IP Messenger : Yuan Qingyun(09/8/14 18:46)
![]()
Re[2]:Patch for GNOME2 IP Messenger : Yuan Qingyun(09/8/14 18:47)
![]()
Re[2]:Patch for GNOME2 IP Messenger : Yuan Qingyun(09/8/14 18:47)
![]()
Re[2]:Patch for GNOME2 IP Messenger : Yuan Qingyun(09/8/14 18:48)
![]()
Re[2]:Patch for GNOME2 IP Messenger : Yuan Qingyun(09/8/14 18:48)
![]()
Re[2]:Patch for GNOME2 IP Messenger : Yuan Qingyun(09/8/14 18:52)
![]()
concentrations capacity intensity percent : jeneviever(09/12/16 17:12)
391
^[380]
None
Re[2]:Patch for GNOME2 IP Messenger
-int
+int
userdb_cleanup_userdb(void){
}
+
+void selected_user_nick_changed(const GtkWidget *message_window,
+ const gchar* nick,
+ gboolean is_selected)
+{
+ if (!g_static_mutex_trylock(&selected_users_mutex))
+ return;
+
+ if (selected_by_reselected)
+ selected_by_reselected = FALSE;
+
+ GtkTreeView * treeview = GTK_TREE_VIEW(lookup_widget(GTK_WIDGET(message_window),"messageUserTree"));
+ gboolean is_find = FALSE;
+ GList* selected_users = NULL;
+ //the tree_user list first element must be the pointer to the window tree.
+ if (NULL == selected_user_nick) {
+ if (!is_selected) {
+ GList* tree_users = g_list_append(NULL, (gpointer)treeview);
+ gchar* nick_name = g_strdup(nick);
+ tree_users = g_list_append(tree_users, nick_name);
+ selected_user_nick = g_list_append(NULL, tree_users);
+ }
+ goto unlock_out;
+
+ }
+
+ //find the tree view in list.
+ GList* treeview_node = g_list_first(selected_user_nick);
+ for (;treeview_node != NULL; treeview_node = g_list_next(treeview_node))
+ {
+ GList* first_node = g_list_first(treeview_node->data);
+ if (first_node != NULL && treeview == first_node->data) {
+ treeview_node = first_node;
+ break;
+ }
+ }
+ //can not find the treeview node for record selected users.
+ if (NULL == treeview_node)
+ {
+ if (!is_selected) {
+ treeview_node = g_list_append(treeview_node, (gpointer)treeview);
+ gchar* nick_name = g_strdup(nick);
+ treeview_node = g_list_append(treeview_node, nick_name);
+ selected_user_nick = g_list_append(selected_user_nick, treeview_node);
+ }
+ goto unlock_out;
+ }
+ else
+ {
+ //remove the tree node from selected_user_nick to avoid append
+ //new user node the pointer address changed.
+ selected_user_nick = g_list_remove(selected_user_nick, treeview_node);
+ //skip the first record, it is recode the tree view window pointer.
+ GList* user_node = g_list_first(treeview_node);
+ if (user_node != NULL)
+ user_node = g_list_next(user_node);
+ for ( ; user_node != NULL; user_node = g_list_next(user_node))
+ {
+ if (user_node->data) {
+ if (strcmp(user_node->data, nick) == 0) {
+ is_find = TRUE;
+ //the user in tree is going to unselected, so remove it.
+ if (is_selected) {
+ gchar* temp_name = user_node->data;
+ treeview_node = g_list_remove(treeview_node, user_node->data);
+ g_free(temp_name);
+ }
+ break;
+ }
+ }
+ }
+ //the user is going to selected and can not find it in record
+ if (!is_find && !is_selected) {
+ gchar* nick_name = g_strdup(nick);
+ treeview_node = g_list_append(treeview_node, nick_name);
+ }
+ selected_user_nick = g_list_append(selected_user_nick, treeview_node);
+ }
+unlock_out:
+ g_static_mutex_unlock(&selected_users_mutex);
+}
+
+void
+reselect_previous_selected_user(gpointer data, gpointer user_data) {
+ const GtkWidget *window = GTK_WIDGET(data);
+ if (NULL == window)
+ return;
+
+ g_static_mutex_lock(&selected_users_mutex);
+ GtkTreeIter iter;
+ gboolean valid;
+ gchar *name = NULL;
+
+ GtkTreeView *treeview = GTK_TREE_VIEW(lookup_widget(GTK_WIDGET(window),
+ "messageUserTree"));
+ GtkTreeModel *model = gtk_tree_view_get_model(treeview);
+ GtkTreeSelection *selection = gtk_tree_view_get_selection(treeview);
+ //find the trewview selected user stroage glist.
+ GList* trewview_node = g_list_first(selected_user_nick);
+ while (trewview_node != NULL && trewview_node->data != NULL)
+ {
+ GList* temp = g_list_first(trewview_node->data);
+ if (treeview == temp->data) {
+ //skip the first node, because the first node record the tree view pointer.
+ trewview_node = g_list_next(temp);
+ break;
+ }
+ trewview_node = g_list_next(trewview_node);
+ }
+
+ //find recorded user in tree to reselected.
+ while (trewview_node != NULL) {
+ valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter);
+ while (valid) {
+ gtk_tree_model_get(model, &iter, USER_VIEW_NICKNAME_ID, &name, -1);
+ if (strcmp(name, trewview_node->data) == 0) {
+ selected_by_reselected = TRUE;
+ gtk_tree_selection_select_iter(selection, &iter);
+ //g_printf ("reselected user %s\n", name);
+ g_free(name);
+ break;
+ }
+ else
+ {
+ //g_printf ("user %s not match reselected user %s\n", name, trewview_node->data);
+ g_free(name);
+ valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter);
+ }
+ }
+ trewview_node = g_list_next(trewview_node);
+ }
+
+ g_static_mutex_unlock(&selected_users_mutex);
+}
+
+void remove_selected_users_from_storage(GtkWidget *window)
+{
+
+ g_static_mutex_lock(&selected_users_mutex);
+ if (NULL == selected_user_nick)
+ goto unlock_out;
+ GtkTreeView * treeview = GTK_TREE_VIEW(lookup_widget(GTK_WIDGET(window),
+ "messageUserTree"));
+ //find the tree view in list.
+ GList* treeview_node = g_list_first(selected_user_nick);
+ for (;treeview_node != NULL; treeview_node = g_list_next(treeview_node))
+ {
+ GList* first_node = g_list_first(treeview_node->data);
+ if (first_node != NULL && treeview == first_node->data) {
+ selected_user_nick = g_list_remove(selected_user_nick, first_node);
+ //skip the first node, it use to stroage the tree view address.
+ first_node = g_list_first(first_node);
+ first_node = g_list_next(first_node);
+ while(first_node != NULL) {
+ gchar* name = first_node->data;
+ first_node = g_list_next(first_node);
+ g_free(name);
+ }
+ break;
+ }
+ }
+
+unlock_out:
+ g_static_mutex_unlock(&selected_users_mutex);
+}
diff -Nur g2ipmsg-0.9.6.ori/src/userdb.h g2ipmsg-0.9.6/src/userdb.h
--- g2ipmsg-0.9.6.ori/src/userdb.h 2008-10-27 02:15:38.000000000 +0800
+++ g2ipmsg-0.9.6/src/userdb.h 2009-08-05 09:44:53.000000000 +0800
@@ -33,7 +33,6 @@
#define make_entry_canonical(the_string) ((strncmp((the_string),HOSTLIST_DUMMY,1))?(the_string):(_("UnKnown")))
-
typedef struct _userdb{
gchar *user;
gchar *host;
@@ -69,4 +68,7 @@
int userdb_cleanup_userdb(void);
GList *refer_user_list(void);
GList *get_group_list(void);
+void selected_user_nick_changed( const GtkWidget *message_window, const gchar* nick, gboolean is_selected);
+void reselect_previous_selected_user(gpointer data, gpointer user_data);
+void remove_selected_users_from_storage(GtkWidget *window);
#endif /* USERDB_H */