pidgin: 616afc59: Add support for conversation-extended si...
qulogic at pidgin.im
qulogic at pidgin.im
Sun Feb 5 21:50:41 EST 2012
----------------------------------------------------------------------
Revision: 616afc598850231cef51aab0c21aa5c28db2ecc9
Parent: ba1eb9b8a9a30e66ae62f2ee9e02571eb9ce27f5
Author: qulogic at pidgin.im
Date: 02/05/12 21:45:16
Branch: im.pidgin.pidgin
URL: http://d.pidgin.im/viewmtn/revision/info/616afc598850231cef51aab0c21aa5c28db2ecc9
Changelog:
Add support for conversation-extended signals in Finch.
Fixes #14818.
Changes against parent ba1eb9b8a9a30e66ae62f2ee9e02571eb9ce27f5
patched finch/Makefile.am
patched finch/gntblist.c
patched finch/gntconv.c
patched finch/gntconv.h
-------------- next part --------------
============================================================
--- finch/gntblist.c 108396f3750bc1c3f1b01a1065021ea62f1ac0ef
+++ finch/gntblist.c c955a1f7ab288d35bfc5446946d3967f3cd244ef
@@ -50,6 +50,7 @@
#include "gntmenu.h"
#include "gntmenuitem.h"
#include "gntmenuitemcheck.h"
+#include "gntmenuutil.h"
#include "gntpounce.h"
#include "gntstyle.h"
#include "gnttree.h"
@@ -1072,46 +1073,6 @@ static void
}
static void
-context_menu_callback(GntMenuItem *item, gpointer data)
-{
- PurpleMenuAction *action = data;
- PurpleBlistNode *node = ggblist->cnode;
- if (action) {
- void (*callback)(PurpleBlistNode *, gpointer);
- callback = (void (*)(PurpleBlistNode *, gpointer))
- purple_menu_action_get_callback(action);
- if (callback)
- callback(node, purple_menu_action_get_data(action));
- else
- return;
- }
-}
-
-static void
-gnt_append_menu_action(GntMenu *menu, PurpleMenuAction *action, gpointer parent)
-{
- GList *list;
- GntMenuItem *item;
-
- if (action == NULL)
- return;
-
- item = gnt_menuitem_new(purple_menu_action_get_label(action));
- if (purple_menu_action_get_callback(action))
- gnt_menuitem_set_callback(GNT_MENU_ITEM(item), context_menu_callback, action);
- gnt_menu_add_item(menu, GNT_MENU_ITEM(item));
-
- list = purple_menu_action_get_children(action);
-
- if (list) {
- GntWidget *sub = gnt_menu_new(GNT_MENU_POPUP);
- gnt_menuitem_set_submenu(item, GNT_MENU(sub));
- for (; list; list = list->next)
- gnt_append_menu_action(GNT_MENU(sub), list->data, action);
- }
-}
-
-static void
append_proto_menu(GntMenu *menu, PurpleConnection *gc, PurpleBlistNode *node)
{
GList *list;
@@ -1127,9 +1088,7 @@ append_proto_menu(GntMenu *menu, PurpleC
if (!act)
continue;
purple_menu_action_set_data(act, node);
- gnt_append_menu_action(menu, act, NULL);
- g_signal_connect_swapped(G_OBJECT(menu), "destroy",
- G_CALLBACK(purple_menu_action_free), act);
+ gnt_append_menu_action(menu, act, node);
}
}
@@ -1139,8 +1098,6 @@ add_custom_action(GntMenu *menu, const c
{
PurpleMenuAction *action = purple_menu_action_new(label, callback, data, NULL);
gnt_append_menu_action(menu, action, NULL);
- g_signal_connect_swapped(G_OBJECT(menu), "destroy",
- G_CALLBACK(purple_menu_action_free), action);
}
static void
@@ -1379,9 +1336,7 @@ append_extended_menu(GntMenu *menu, Purp
for (iter = purple_blist_node_get_extended_menu(node);
iter; iter = g_list_delete_link(iter, iter))
{
- gnt_append_menu_action(menu, iter->data, NULL);
- g_signal_connect_swapped(G_OBJECT(menu), "destroy",
- G_CALLBACK(purple_menu_action_free), iter->data);
+ gnt_append_menu_action(menu, iter->data, node);
}
}
============================================================
--- finch/gntconv.c bc01c894f215b8eb38cc8797028459561fe0420a
+++ finch/gntconv.c b206e72f06d05548d47c6fc49c06b5679393999a
@@ -52,6 +52,7 @@
#include "gntmenu.h"
#include "gntmenuitem.h"
#include "gntmenuitemcheck.h"
+#include "gntmenuutil.h"
#include "gntstyle.h"
#include "gnttextview.h"
#include "gnttree.h"
@@ -404,6 +405,30 @@ static void
}
static void
+gg_extended_menu(FinchConv *ggc)
+{
+ GntWidget *sub;
+ GList *list;
+
+ sub = gnt_menu_new(GNT_MENU_POPUP);
+ gnt_menuitem_set_submenu(ggc->plugins, GNT_MENU(sub));
+
+ for (list = purple_conversation_get_extended_menu(ggc->active_conv);
+ list; list = g_list_delete_link(list, list))
+ {
+ gnt_append_menu_action(GNT_MENU(sub), list->data, ggc->active_conv);
+ }
+}
+
+static void
+conv_updated(PurpleConversation *conv, PurpleConvUpdateType type)
+{
+ if (type == PURPLE_CONV_UPDATE_FEATURES) {
+ gg_extended_menu(purple_conversation_get_ui_data(conv));
+ }
+}
+
+static void
clear_scrollback_cb(GntMenuItem *item, gpointer ggconv)
{
FinchConv *ggc = ggconv;
@@ -595,6 +620,12 @@ static void
}
static void
+plugin_changed_cb(PurplePlugin *p, gpointer data)
+{
+ gg_extended_menu(data);
+}
+
+static void
gg_create_menu(FinchConv *ggc)
{
GntWidget *menu, *sub;
@@ -665,6 +696,12 @@ gg_create_menu(FinchConv *ggc)
!(ggc->flags & FINCH_CONV_NO_SOUND));
gnt_menu_add_item(GNT_MENU(sub), item);
gnt_menuitem_set_callback(item, toggle_sound_cb, ggc);
+
+ item = gnt_menuitem_new(_("Plugins"));
+ gnt_menu_add_item(GNT_MENU(menu), item);
+ ggc->plugins = item;
+
+ gg_extended_menu(ggc);
}
static void
@@ -876,6 +913,11 @@ finch_create_conversation(PurpleConversa
purple_signal_connect(purple_cmds_get_handle(), "cmd-removed", ggc,
G_CALLBACK(cmd_removed_cb), ggc);
+ purple_signal_connect(purple_plugins_get_handle(), "plugin-load", ggc,
+ PURPLE_CALLBACK(plugin_changed_cb), ggc);
+ purple_signal_connect(purple_plugins_get_handle(), "plugin-unload", ggc,
+ PURPLE_CALLBACK(plugin_changed_cb), ggc);
+
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);
@@ -1475,6 +1517,8 @@ void finch_conversation_init()
PURPLE_CALLBACK(chat_left_cb), NULL);
purple_signal_connect(purple_conversations_get_handle(), "cleared-message-history", finch_conv_get_handle(),
PURPLE_CALLBACK(cleared_message_history_cb), NULL);
+ purple_signal_connect(purple_conversations_get_handle(), "conversation-updated", finch_conv_get_handle(),
+ PURPLE_CALLBACK(conv_updated), NULL);
purple_signal_connect(purple_blist_get_handle(), "buddy-signed-on", finch_conv_get_handle(),
PURPLE_CALLBACK(buddy_signed_on_off), NULL);
purple_signal_connect(purple_blist_get_handle(), "buddy-signed-off", finch_conv_get_handle(),
============================================================
--- finch/gntconv.h 810181081f79c10bcb1ca1792013a70b4150a778
+++ finch/gntconv.h 71f0a7be4be6b0b2290f1d766a1af4bb195e6789
@@ -59,6 +59,7 @@ struct _FinchConv
GntWidget *tv; /* text-view */
GntWidget *menu;
GntWidget *info;
+ GntMenuItem *plugins;
FinchConversationFlag flags;
union
============================================================
--- finch/Makefile.am 059853f082e9aff96218119a09d9e0bf75137cff
+++ finch/Makefile.am 8908dc23e5f6f3fbbaeb16a6d9677dfe277b7235
@@ -27,6 +27,7 @@ finch_SOURCES = \
gntidle.c \
gntlog.c \
gntmedia.c \
+ gntmenuutil.c \
gntnotify.c \
gntplugin.c \
gntpounce.c \
@@ -49,6 +50,7 @@ finch_headers = \
gntidle.h \
gntlog.h \
gntmedia.h \
+ gntmenuutil.h \
gntnotify.h \
gntplugin.h \
gntpounce.h \
More information about the Commits
mailing list