Mercurial > pidgin
changeset 29257:ee18c6a99628
Added plugin to vibrate conversation window on attentions.
Currently doesn't have any configuration and may need some polishing...
author | Marcus Lundblad <ml@update.uu.se> |
---|---|
date | Thu, 06 Nov 2008 18:48:04 +0000 |
parents | f050972561d5 |
children | 1ad01909e994 |
files | pidgin/plugins/Makefile.am pidgin/plugins/vibes.c |
diffstat | 2 files changed, 155 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/pidgin/plugins/Makefile.am Thu Oct 30 21:00:25 2008 +0000 +++ b/pidgin/plugins/Makefile.am Thu Nov 06 18:48:04 2008 +0000 @@ -45,6 +45,7 @@ spellchk_la_LDFLAGS = -module -avoid-version timestamp_la_LDFLAGS = -module -avoid-version timestamp_format_la_LDFLAGS = -module -avoid-version +vibes_la_LDFLAGS = -module -avoid-version xmppconsole_la_LDFLAGS = -module -avoid-version if PLUGINS @@ -63,6 +64,7 @@ spellchk.la \ timestamp.la \ timestamp_format.la \ + vibes.la \ xmppconsole.la noinst_LTLIBRARIES = \ @@ -84,6 +86,7 @@ spellchk_la_SOURCES = spellchk.c timestamp_la_SOURCES = timestamp.c timestamp_format_la_SOURCES = timestamp_format.c +vibes_la_SOURCES = vibes.c xmppconsole_la_SOURCES = xmppconsole.c convcolors_la_LIBADD = $(GTK_LIBS) @@ -101,6 +104,7 @@ spellchk_la_LIBADD = $(GTK_LIBS) timestamp_la_LIBADD = $(GTK_LIBS) timestamp_format_la_LIBADD = $(GTK_LIBS) +vibes_la_LIBADD = $(GTK_LIBS) xmppconsole_la_LIBADD = $(GTK_LIBS) endif # PLUGINS
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pidgin/plugins/vibes.c Thu Nov 06 18:48:04 2008 +0000 @@ -0,0 +1,151 @@ +/*************************************************************************** + * vibes.c + * + * Thu Oct 30 23:32:34 2008 + * Copyright 2008 marcus + * <ml@update.uu.se> + ****************************************************************************/ + +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "internal.h" + +#include "version.h" + +#include "pidgin.h" + +#include "gtkconv.h" +#include "gtkplugin.h" +#include "debug.h" + +static void +move_window_sync(GtkWindow *win, guint x, guint y) +{ + GdkDisplay *disp = gdk_display_get_default(); + gtk_window_move(win, x, y); + /* synchronize display */ + gdk_error_trap_pop(); + gdk_display_sync(disp); +} + +static void +vibrate_conv_window(PurpleConversation *conv) +{ + PidginConversation *pconv = PIDGIN_CONVERSATION(conv); + PidginWindow *pwin = pidgin_conv_get_window(pconv); + GtkWindow *win = pwin->window; + int x, y, i; + + gtk_window_get_position(win, &x, &y); + + for (i = 0 ; i < 20 ; i++) { + move_window_sync(win, x, y + 10); + usleep(10); + move_window_sync(win, x, y - 10); + usleep(10); + move_window_sync(win, x - 10, y); + usleep(10); + move_window_sync(win, x, y); + usleep(10); + } +} + +static void +sent_attention_cb(PurpleAccount *account, const char *who, + PurpleConversation *conv, guint type) +{ + purple_debug_info("vibes", "sent_attention_cb called\n"); + vibrate_conv_window(conv); +} + +static void +got_attention_cb(PurpleAccount *account, const char *who, + PurpleConversation *conv, guint type) +{ + purple_debug_info("vibes", "got_attention_cb called\n"); + vibrate_conv_window(conv); +} + +static gboolean +plugin_load(PurplePlugin *plugin) +{ + purple_signal_connect(purple_conversations_get_handle(), + "sent-attention", plugin, + PURPLE_CALLBACK(sent_attention_cb), NULL); + purple_signal_connect(purple_conversations_get_handle(), + "got-attention", plugin, + PURPLE_CALLBACK(got_attention_cb), NULL); + return TRUE; +} + +static gboolean +plugin_unload(PurplePlugin *plugin) +{ + purple_signal_disconnect(purple_conversations_get_handle(), + "sent-attention", plugin, PURPLE_CALLBACK(sent_attention_cb)); + purple_signal_disconnect(purple_conversations_get_handle(), + "got-attention", plugin, PURPLE_CALLBACK(got_attention_cb)); + return TRUE; +} + +static PurplePluginInfo info = +{ + PURPLE_PLUGIN_MAGIC, + PURPLE_MAJOR_VERSION, /**< major version */ + PURPLE_MINOR_VERSION, /**< minor version */ + PURPLE_PLUGIN_STANDARD, /**< type */ + PIDGIN_PLUGIN_TYPE, /**< ui_requirement */ + 0, /**< flags */ + NULL, /**< dependencies */ + PURPLE_PRIORITY_DEFAULT, /**< priority */ + + "gtk-vibes", /**< id */ + N_("Vibes"), /**< name */ + DISPLAY_VERSION, /**< version */ + N_("Shake the Conversation Window on Attentions."), /**< summary */ + N_("Enables shaking of the conversation window " + "when sending and receiving attentions " + "(buzz, nudge etc."), /**< description */ + "Marcus Lundblad <ml@update.uu.se>", /**< author */ + PURPLE_WEBSITE, /**< homepage */ + plugin_load, /**< load */ + plugin_unload, /**< unload */ + NULL, /**< destroy */ + NULL, /**< ui_info */ + NULL, /**< extra_info */ + NULL, /**< prefs_info */ + NULL, /**< actions */ + + /* padding */ + NULL, + NULL, + NULL, + NULL +}; + +static void +init_plugin(PurplePlugin *plugin) +{ + /* register prefs */ + +} + +PURPLE_INIT_PLUGIN(sendbutton, init_plugin, info)