# HG changeset patch # User Sadrul Habib Chowdhury # Date 1181881628 0 # Node ID 5cff2b8bfb08335ba6bccb9ca804e1a28a21adfc # Parent 55ff2a39244e035f33ae5d864b9e4b18424d53d1# Parent f63b3a23280d9dca14677ffd54ffdef702f3d592 merge of '42eba34c013784379084cfe8e5899cc7e9e7dde2' and 'c9b5a303a7b8dc0a0741ecef936ccf9082f18974' diff -r 55ff2a39244e -r 5cff2b8bfb08 finch/gntconv.c --- a/finch/gntconv.c Thu Jun 14 15:33:50 2007 +0000 +++ b/finch/gntconv.c Fri Jun 15 04:27:08 2007 +0000 @@ -440,6 +440,16 @@ } static void +gained_focus_cb(GntWindow *window, FinchConv *fc) +{ + GList *iter; + for (iter = fc->list; iter; iter = iter->next) { + purple_conversation_set_data(iter->data, "unseen-count", 0); + purple_conversation_update(iter->data, PURPLE_CONV_UPDATE_UNSEEN); + } +} + +static void finch_create_conversation(PurpleConversation *conv) { FinchConv *ggc = conv->ui_data; @@ -529,6 +539,7 @@ g_free(title); gnt_box_give_focus_to_child(GNT_BOX(ggc->window), ggc->entry); + g_signal_connect(G_OBJECT(ggc->window), "gained-focus", G_CALLBACK(gained_focus_cb), ggc); } static void @@ -622,6 +633,11 @@ if (flags & (PURPLE_MESSAGE_RECV | PURPLE_MESSAGE_NICK | PURPLE_MESSAGE_ERROR)) gnt_widget_set_urgent(ggconv->tv); + if (flags & PURPLE_MESSAGE_RECV && !gnt_widget_has_focus(ggconv->window)) { + int count = GPOINTER_TO_INT(purple_conversation_get_data(conv, "unseen-count")); + purple_conversation_set_data(conv, "unseen-count", GINT_TO_POINTER(count + 1)); + purple_conversation_update(conv, PURPLE_CONV_UPDATE_UNSEEN); + } } static void diff -r 55ff2a39244e -r 5cff2b8bfb08 finch/gntplugin.c --- a/finch/gntplugin.c Thu Jun 14 15:33:50 2007 +0000 +++ b/finch/gntplugin.c Fri Jun 15 04:27:08 2007 +0000 @@ -106,6 +106,9 @@ char *text; GList *list = NULL, *iter = NULL; + if (!plugin) + return; + /* If the selected plugin was unseen before, mark it as seen. But save the list * only when the plugin list is closed. So if the user enables a plugin, and it * crashes, it won't get marked as seen so the user can fix the bug and still diff -r 55ff2a39244e -r 5cff2b8bfb08 finch/libgnt/gnttree.c --- a/finch/libgnt/gnttree.c Thu Jun 14 15:33:50 2007 +0000 +++ b/finch/libgnt/gnttree.c Fri Jun 15 04:27:08 2007 +0000 @@ -753,15 +753,16 @@ g_signal_emit(tree, signals[SIG_TOGGLED], 0, row->key); redraw_tree(tree); } + } else { + return FALSE; } if (old != tree->current) { tree_selection_changed(tree, old, tree->current); - return TRUE; } - return FALSE; + return TRUE; } static void diff -r 55ff2a39244e -r 5cff2b8bfb08 finch/libgnt/gntwm.c --- a/finch/libgnt/gntwm.c Thu Jun 14 15:33:50 2007 +0000 +++ b/finch/libgnt/gntwm.c Fri Jun 15 04:27:08 2007 +0000 @@ -1561,6 +1561,7 @@ gnt_wm_raise_window(wm, node->me); } else { bottom_panel(node->panel); /* New windows should not grab focus */ + gnt_widget_set_focus(node->me, FALSE); gnt_widget_set_urgent(node->me); if (wm->cws != ws) gnt_ws_widget_hide(widget, wm->nodes);