Mercurial > pidgin.yaz
changeset 9157:bd1ea0a717d7
[gaim-migrate @ 9941]
make deryni's removed placement option a plugin
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Tue, 01 Jun 2004 01:55:55 +0000 |
parents | 41fba1972ed0 |
children | c30d81b4dd22 |
files | plugins/extplacement.c |
diffstat | 1 files changed, 143 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/extplacement.c Tue Jun 01 01:55:55 2004 +0000 @@ -0,0 +1,143 @@ +#include "internal.h" +#include "conversation.h" + +#define EXTPLACEMENT_OPT "/plugins/core/nosnilmot/extplacement" + +static void +conv_placement_last_created_win_split(GaimConversation *conv) +{ + GaimConvWindow *win; + + win = gaim_get_last_window_with_type(gaim_conversation_get_type(conv)); + + if (win == NULL) { + win = gaim_conv_window_new(); + + gaim_conv_window_add_conversation(win, conv); + gaim_conv_window_show(win); + } + else + gaim_conv_window_add_conversation(win, conv); +} + +static void +conv_placement_by_number(GaimConversation *conv) +{ + GaimConvWindow *win = NULL; + + if (gaim_prefs_get_bool("/core/conversations/combine_chat_im")) + win = g_list_last(gaim_get_windows())->data; + else + win = gaim_get_last_window_with_type(gaim_conversation_get_type(conv)); + + if (win == NULL) { + win = gaim_conv_window_new(); + + gaim_conv_window_add_conversation(win, conv); + gaim_conv_window_show(win); + } else { + int max_count = gaim_prefs_get_int(EXTPLACEMENT_OPT "/placement_number"); + int count = gaim_conv_window_get_conversation_count(win); + + if (count < max_count) + gaim_conv_window_add_conversation(win, conv); + else { + GList *l = NULL; + + for (l = gaim_get_windows(); l != NULL; l = l->next) { + win = (GaimConvWindow *)l->data; + + count = gaim_conv_window_get_conversation_count(win); + if (count < max_count) { + gaim_conv_window_add_conversation(win, conv); + return; + } + } + win = gaim_conv_window_new(); + + gaim_conv_window_add_conversation(win, conv); + gaim_conv_window_show(win); + } + } +} + +static gboolean +plugin_load(GaimPlugin *plugin) +{ + gaim_prefs_add_none("/plugins/core/nosnilmot"); + gaim_prefs_add_none("/plugins/core/nosnilmot/extplacement"); + gaim_prefs_add_int(EXTPLACEMENT_OPT "/placement_number", 4); + gaim_conv_placement_add_fnc("im_chat", _("Separate IM and Chat windows"), + &conv_placement_last_created_win_split); + gaim_conv_placement_add_fnc("number", _("By conversation count"), + &conv_placement_by_number); + return TRUE; +} + +static gboolean +plugin_unload(GaimPlugin *plugin) +{ + gaim_conv_placement_remove_fnc("im_chat"); + gaim_conv_placement_remove_fnc("number"); + return TRUE; +} + +static GaimPluginPrefFrame * +get_plugin_pref_frame(GaimPlugin *plugin) { + GaimPluginPrefFrame *frame; + GaimPluginPref *ppref; + + frame = gaim_plugin_pref_frame_new(); + + ppref = gaim_plugin_pref_new_with_label("Conversation Placement"); + gaim_plugin_pref_frame_add(frame, ppref); + + ppref = gaim_plugin_pref_new_with_name_and_label( + EXTPLACEMENT_OPT "/placement_number", + "Number of conversations per window"); + gaim_plugin_pref_set_bounds(ppref, 1, 50); + gaim_plugin_pref_frame_add(frame, ppref); + + return frame; +} + +static GaimPluginUiInfo prefs_info = { + get_plugin_pref_frame +}; + +static GaimPluginInfo info = +{ + GAIM_PLUGIN_API_VERSION, /**< api_version */ + GAIM_PLUGIN_STANDARD, /**< type */ + NULL, /**< ui_requirement */ + 0, /**< flags */ + NULL, /**< dependencies */ + GAIM_PRIORITY_DEFAULT, /**< priority */ + + "core-nosnilmot-extplacement", /**< id */ + N_("ExtPlacement"), /**< name */ + VERSION, /**< version */ + /** summary */ + N_("Extra conversation placement options."), + /** description */ + N_("Either restrict the number of conversations per windows" + " or use separate windows for IMs and Chats"), + "Stu Tomlinson <stu@nosnilmot.com>", /**< author */ + "http://www.nosnilmot.com/gaim/plugins/", /**< homepage */ + + plugin_load, /**< load */ + plugin_unload, /**< unload */ + NULL, /**< destroy */ + + NULL, /**< ui_info */ + NULL, /**< extra_info */ + &prefs_info, /**< prefs_info */ + NULL /**< actions */ +}; + +static void +init_plugin(GaimPlugin *plugin) +{ +} + +GAIM_INIT_PLUGIN(extplacement, init_plugin, info)