Tue, 14 Feb 2006 05:43:43 +0000
[gaim-migrate @ 15646]
Always show a vertical scrollbar on conversations imhtmls. This will solve the shrinking conversation window bug. I chose this approach instead of saving the size of the window (as I had previous talked about), as this prevents the contents of the scrollback from rewrapping when the scrollbars appear or disappear. It also just seems to feel like the right thing to do, but maybe that's me being lazy.
| 12859 | 1 | |
| 2 | ||
| 3 | #include "internal.h" | |
| 4 | ||
|
12924
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
5 | #include "account.h" |
| 12859 | 6 | #include "blist.h" |
| 7 | #include "conversation.h" | |
| 8 | #include "debug.h" | |
| 9 | #include "signals.h" | |
|
12924
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
10 | #include "status.h" |
| 12859 | 11 | #include "version.h" |
| 12 | ||
| 13 | #include "plugin.h" | |
| 14 | #include "pluginpref.h" | |
| 15 | #include "prefs.h" | |
| 16 | ||
| 17 | ||
| 18 | #define DEBUG_INFO(a...) gaim_debug_info("psychic", a) | |
| 19 | ||
| 20 | ||
| 21 | #define PLUGIN_ID "core-psychic" | |
| 22 | #define PLUGIN_NAME N_("Psychic Mode") | |
| 23 | #define PLUGIN_SUMMARY N_("Psychic mode for incoming conversation") | |
| 24 | #define PLUGIN_DESC N_("Causes conversation windows to appear as other" \ | |
|
13248
fffad481d1ad
[gaim-migrate @ 15613]
Mark Doliner <markdoliner@pidgin.im>
parents:
12925
diff
changeset
|
25 | " users begin to message you. This works for" \ |
|
fffad481d1ad
[gaim-migrate @ 15613]
Mark Doliner <markdoliner@pidgin.im>
parents:
12925
diff
changeset
|
26 | " AIM, ICQ, Jabber, Sametime, and Yahoo!") |
| 12859 | 27 | #define PLUGIN_AUTHOR "Christopher O'Brien <siege@preoccupied.net>" |
| 28 | ||
| 29 | ||
| 30 | #define PREFS_BASE "/plugins/core/psychic" | |
| 31 | #define PREF_BUDDIES PREFS_BASE "/buddies_only" | |
| 32 | #define PREF_NOTICE PREFS_BASE "/show_notice" | |
|
12924
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
33 | #define PREF_STATUS PREFS_BASE "/activate_online" |
| 12859 | 34 | |
| 35 | ||
| 36 | static void | |
| 37 | buddy_typing_cb(GaimAccount *acct, const char *name, void *data) { | |
| 38 | GaimConversation *gconv; | |
| 39 | ||
|
12924
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
40 | if(gaim_prefs_get_bool(PREF_STATUS) && |
|
12925
52ae486720a0
[gaim-migrate @ 15278]
Christopher O'Brien <siege@pidgin.im>
parents:
12924
diff
changeset
|
41 | ! gaim_status_is_available(gaim_account_get_active_status(acct))) { |
|
12924
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
42 | DEBUG_INFO("not available, doing nothing\n"); |
|
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
43 | return; |
|
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
44 | } |
|
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
45 | |
|
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
46 | if(gaim_prefs_get_bool(PREF_BUDDIES) && |
|
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
47 | ! gaim_find_buddy(acct, name)) { |
|
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
48 | DEBUG_INFO("not in blist, doing nothing\n"); |
|
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
49 | return; |
| 12859 | 50 | } |
| 51 | ||
| 52 | gconv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, name, acct); | |
| 53 | if(! gconv) { | |
| 54 | DEBUG_INFO("no previous conversation exists\n"); | |
| 55 | gconv = gaim_conversation_new(GAIM_CONV_TYPE_IM, acct, name); | |
| 56 | gaim_conversation_present(gconv); | |
| 57 | ||
| 58 | if(gaim_prefs_get_bool(PREF_NOTICE)) { | |
|
12861
60c0456f1fff
[gaim-migrate @ 15212]
Christopher O'Brien <siege@pidgin.im>
parents:
12859
diff
changeset
|
59 | gaim_conversation_write(gconv, NULL, |
|
60c0456f1fff
[gaim-migrate @ 15212]
Christopher O'Brien <siege@pidgin.im>
parents:
12859
diff
changeset
|
60 | _("You feel a disturbance in the force..."), |
|
12895
e075f4a4bcb3
[gaim-migrate @ 15248]
Richard Laager <rlaager@pidgin.im>
parents:
12861
diff
changeset
|
61 | GAIM_MESSAGE_SYSTEM | GAIM_MESSAGE_NO_LOG, |
|
e075f4a4bcb3
[gaim-migrate @ 15248]
Richard Laager <rlaager@pidgin.im>
parents:
12861
diff
changeset
|
62 | time(NULL)); |
| 12859 | 63 | } |
|
13248
fffad481d1ad
[gaim-migrate @ 15613]
Mark Doliner <markdoliner@pidgin.im>
parents:
12925
diff
changeset
|
64 | |
|
fffad481d1ad
[gaim-migrate @ 15613]
Mark Doliner <markdoliner@pidgin.im>
parents:
12925
diff
changeset
|
65 | gaim_conv_im_set_typing_state(GAIM_CONV_IM(gconv), GAIM_TYPING); |
| 12859 | 66 | } |
| 67 | } | |
| 68 | ||
| 69 | ||
| 70 | static GaimPluginPrefFrame * | |
| 71 | get_plugin_pref_frame(GaimPlugin *plugin) { | |
| 72 | ||
| 73 | GaimPluginPrefFrame *frame; | |
| 74 | GaimPluginPref *pref; | |
| 75 | ||
| 76 | frame = gaim_plugin_pref_frame_new(); | |
| 77 | ||
| 78 | pref = gaim_plugin_pref_new_with_name(PREF_BUDDIES); | |
|
12924
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
79 | gaim_plugin_pref_set_label(pref, _("Only enable for users on" |
|
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
80 | " the buddy list")); |
|
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
81 | gaim_plugin_pref_frame_add(frame, pref); |
|
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
82 | |
|
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
83 | pref = gaim_plugin_pref_new_with_name(PREF_STATUS); |
|
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
84 | gaim_plugin_pref_set_label(pref, _("Disable when away")); |
| 12859 | 85 | gaim_plugin_pref_frame_add(frame, pref); |
| 86 | ||
| 87 | pref = gaim_plugin_pref_new_with_name(PREF_NOTICE); | |
| 88 | gaim_plugin_pref_set_label(pref, _("Display notification message in" | |
| 89 | " conversations")); | |
| 90 | gaim_plugin_pref_frame_add(frame, pref); | |
| 91 | ||
| 92 | return frame; | |
| 93 | } | |
| 94 | ||
| 95 | ||
| 96 | static gboolean | |
| 97 | plugin_load(GaimPlugin *plugin) { | |
| 98 | ||
| 99 | void *convs_handle; | |
| 100 | convs_handle = gaim_conversations_get_handle(); | |
| 101 | ||
| 102 | gaim_signal_connect(convs_handle, "buddy-typing", plugin, | |
| 103 | GAIM_CALLBACK(buddy_typing_cb), NULL); | |
| 104 | ||
| 105 | return TRUE; | |
| 106 | } | |
| 107 | ||
| 108 | ||
| 109 | static GaimPluginUiInfo prefs_info = { | |
| 110 | get_plugin_pref_frame, | |
| 111 | 0, /* page_num (Reserved) */ | |
| 112 | NULL, /* frame (Reserved) */ | |
| 113 | }; | |
| 114 | ||
| 115 | ||
| 116 | static GaimPluginInfo info = { | |
| 117 | GAIM_PLUGIN_MAGIC, | |
| 118 | GAIM_MAJOR_VERSION, | |
| 119 | GAIM_MINOR_VERSION, | |
| 120 | GAIM_PLUGIN_STANDARD, /**< type */ | |
| 121 | NULL, /**< ui_requirement */ | |
| 122 | 0, /**< flags */ | |
| 123 | NULL, /**< dependencies */ | |
| 124 | GAIM_PRIORITY_DEFAULT, /**< priority */ | |
| 125 | ||
| 126 | PLUGIN_ID, /**< id */ | |
| 127 | PLUGIN_NAME, /**< name */ | |
| 128 | VERSION, /**< version */ | |
| 129 | PLUGIN_SUMMARY, /**< summary */ | |
| 130 | PLUGIN_DESC, /**< description */ | |
| 131 | PLUGIN_AUTHOR, /**< author */ | |
| 132 | GAIM_WEBSITE, /**< homepage */ | |
| 133 | ||
| 134 | plugin_load, /**< load */ | |
| 135 | NULL, /**< unload */ | |
| 136 | NULL, /**< destroy */ | |
| 137 | ||
| 138 | NULL, /**< ui_info */ | |
| 139 | NULL, /**< extra_info */ | |
| 140 | &prefs_info, /**< prefs_info */ | |
| 141 | NULL, /**< actions */ | |
| 142 | }; | |
| 143 | ||
| 144 | ||
| 145 | static void | |
| 146 | init_plugin(GaimPlugin *plugin) { | |
| 147 | gaim_prefs_add_none(PREFS_BASE); | |
| 148 | gaim_prefs_add_bool(PREF_BUDDIES, FALSE); | |
| 149 | gaim_prefs_add_bool(PREF_NOTICE, TRUE); | |
|
12924
ed6ed1510bb1
[gaim-migrate @ 15277]
Christopher O'Brien <siege@pidgin.im>
parents:
12895
diff
changeset
|
150 | gaim_prefs_add_bool(PREF_STATUS, TRUE); |
| 12859 | 151 | } |
| 152 | ||
| 153 | ||
| 154 | GAIM_INIT_PLUGIN(psychic, init_plugin, info) |