changeset 133:e277d5f0c1dd

[gaim-migrate @ 143] Let's see if I can remember everything I did: - Fixed a bug I let slip. If you choose the new option to not play login sounds when you log in, and then quit before the timeout is up, it would save that you didn't want login sounds at all. - Added two new plugin events: event_away and event_buddy_away. - Made GtkWidget *imaway in away.c and void play(uchar *, int) in sound.c not static any more (though not referenced in gaim.h). This is so plugins can use those (and not have to worry about writing their own sound code). - Wrote a quick plugin to auto-iconify windows when you go away. I had just been locally patching my own copy, since I figured it wasn't worth including as an option. It also demonstrates some of the issues of deciding between USE_APPLET and not. Perhaps plugins are the way to go with some things that would otherwise have been options (for example, the Lag-O-Meter is one of those things that could possibly have been a plugin instead of hard-coded in). I think that's everything. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Wed, 19 Apr 2000 02:04:30 +0000
parents f12425e6660d
children 00c1ee609648
files plugins/Makefile plugins/SIGNALS plugins/iconaway.c src/aim.c src/away.c src/buddy.c src/gaim.h src/sound.c
diffstat 8 files changed, 92 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/plugins/Makefile	Tue Apr 18 09:05:55 2000 +0000
+++ b/plugins/Makefile	Wed Apr 19 02:04:30 2000 +0000
@@ -2,7 +2,8 @@
 CFLAGS = -Wall `gnome-config --cflags gtk` -I../src -g
 LDFLAGS = -ggdb `gnome-config --libs gtk` -shared -lpthread
 
-all: simple.so gaiminc.so autorecon.so spellchk.so chkmail.so filectl.so
+all: simple.so gaiminc.so autorecon.so spellchk.so chkmail.so \
+	filectl.so iconaway.so
 
 .SUFFIXES: .c .so
 
--- a/plugins/SIGNALS	Tue Apr 18 09:05:55 2000 +0000
+++ b/plugins/SIGNALS	Wed Apr 19 02:04:30 2000 +0000
@@ -1,10 +1,12 @@
 enum gaim_event {
 	event_signon = 0,
 	event_signoff,
+	event_away,
 	event_im_recv,
 	event_im_send,
 	event_buddy_signon,
 	event_buddy_signoff,
+	event_buddy_away,
 	event_blist_update
 };
 
@@ -44,6 +46,9 @@
 event_signoff:
 	(none)
 
+event_away:
+	(none)
+
 event_im_recv:
 	char **who, char **text
 
@@ -75,6 +80,11 @@
 
 	'who' is who signed off.
 
+event_buddy_away:
+	char *who
+
+	'who' is who went away.
+
 event_blist_update:
 	(none)
 	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/iconaway.c	Wed Apr 19 02:04:30 2000 +0000
@@ -0,0 +1,40 @@
+#define GAIM_PLUGINS
+#include "gaim.h"
+
+#include <gdk/gdkx.h>
+#include <X11/Xlib.h>
+
+void *handle;
+
+extern GtkWidget *imaway;
+extern GtkWidget *blist;
+
+extern void set_applet_draw_closed();
+
+void iconify_windows(void *data) {
+	XIconifyWindow(GDK_DISPLAY(),
+			GDK_WINDOW_XWINDOW(imaway->window),
+			((_XPrivDisplay)GDK_DISPLAY())->default_screen);
+#ifdef USE_APPLET
+	gnome_buddy_hide();
+	set_applet_draw_closed();
+#else
+	XIconifyWindow(GDK_DISPLAY(),
+			GDK_WINDOW_XWINDOW(blist->window),
+			((_XPrivDisplay)GDK_DISPLAY())->default_screen);
+#endif
+}
+
+void gaim_plugin_init(void *h) {
+	handle = h;
+
+	gaim_signal_connect(handle, event_away, iconify_windows, NULL);
+}
+
+char *name() {
+	return "Iconify On Away";
+}
+
+char *description() {
+	return "Iconifies the away box and the buddy list when you go away.";
+}
--- a/src/aim.c	Tue Apr 18 09:05:55 2000 +0000
+++ b/src/aim.c	Wed Apr 19 02:04:30 2000 +0000
@@ -110,8 +110,9 @@
 }
 
 static int snd_tmout;
+int logins_not_muted = 1;
 static void sound_timeout() {
-	sound_options += OPT_SOUND_LOGIN;
+	logins_not_muted = 1;
 	gtk_timeout_remove(snd_tmout);
 }
 
@@ -148,7 +149,7 @@
 
 	if (sound_options & OPT_SOUND_LOGIN &&
 		sound_options & OPT_SOUND_SILENT_SIGNON) {
-		sound_options -= OPT_SOUND_LOGIN;
+		logins_not_muted = 0;
 		snd_tmout = gtk_timeout_add(10000, (GtkFunction)sound_timeout,
 				NULL);
 	}
--- a/src/away.c	Tue Apr 18 09:05:55 2000 +0000
+++ b/src/away.c	Wed Apr 19 02:04:30 2000 +0000
@@ -32,7 +32,7 @@
 #include <gtk/gtk.h>
 #include "gaim.h"
 
-static GtkWidget *imaway=NULL;
+GtkWidget *imaway=NULL;
 #ifdef USE_APPLET
 extern enum gaim_user_states MRI_user_status;
 #endif
@@ -165,6 +165,21 @@
         serv_set_away(buf2);
         g_free(buf2);
 	gtk_widget_show(imaway);
+#ifdef GAIM_PLUGINS
+	{
+		GList *c = callbacks;
+		struct gaim_callback *g;
+		void (*function)(void *);
+		while (c) {
+			g = (struct gaim_callback *)c->data;
+			if (g->event == event_away && g->function != NULL) { 
+				function = g->function;
+				(*function)(g->data);
+			}
+			c = c->next;
+		}
+	}
+#endif
 }
 
 void rem_away_mess(GtkWidget *w, struct away_message *a)
--- a/src/buddy.c	Tue Apr 18 09:05:55 2000 +0000
+++ b/src/buddy.c	Wed Apr 19 02:04:30 2000 +0000
@@ -1450,6 +1450,20 @@
                 if (!b->log_timer) {
                         gtk_widget_hide(b->pix);
                         if (b->uc & UC_UNAVAILABLE) {
+#ifdef GAIM_PLUGINS
+				GList *c = callbacks;
+				struct gaim_callback *g;
+				void (*function)(char *, void *);
+				while (c) {
+					g = (struct gaim_callback *)c->data;
+					if (g->event == event_buddy_away &&
+							g->function != NULL) {
+						function = g->function;
+						(*function)(b->name, g->data);
+					}
+					c = c->next;
+				}
+#endif
                                 pm = gdk_pixmap_create_from_xpm_d(blist->window, &bm,
                                                                   NULL, (gchar **)away_icon_xpm);
                                 gtk_pixmap_set(GTK_PIXMAP(b->pix), pm, bm);
--- a/src/gaim.h	Tue Apr 18 09:05:55 2000 +0000
+++ b/src/gaim.h	Wed Apr 19 02:04:30 2000 +0000
@@ -131,10 +131,12 @@
 enum gaim_event {
 	event_signon = 0,
 	event_signoff,
+	event_away,
 	event_im_recv,
 	event_im_send,
 	event_buddy_signon,
 	event_buddy_signoff,
+	event_buddy_away,
 	event_blist_update,
 	/* any others? it's easy to add... */
 };
@@ -291,7 +293,7 @@
 #define TYPE_SIGNOFF   4
 #define TYPE_KEEPALIVE 5
 
-#define REVISION "gaim:$Revision: 125 $"
+#define REVISION "gaim:$Revision: 143 $"
 #define FLAPON "FLAPON\r\n\r\n"
 
 #define ROAST "Tic/Toc"
--- a/src/sound.c	Tue Apr 18 09:05:55 2000 +0000
+++ b/src/sound.c	Wed Apr 19 02:04:30 2000 +0000
@@ -220,7 +220,7 @@
 
 #endif
 
-static void play(unsigned char *data, int size)
+void play(unsigned char *data, int size)
 {
         int pid;
 
@@ -260,7 +260,7 @@
         }
 }
 
-
+extern int logins_not_muted;
 #ifndef USE_APPLET
 
 void play_sound(int sound)
@@ -268,7 +268,7 @@
 
 	switch(sound) {
 	case BUDDY_ARRIVE:
-		if (sound_options & OPT_SOUND_LOGIN)
+		if ((sound_options & OPT_SOUND_LOGIN) && logins_not_muted)
 			play(BuddyArrive, sizeof(BuddyArrive));
 		break;
 	case BUDDY_LEAVE:
@@ -302,7 +302,7 @@
 
 	switch(sound) {
 	case BUDDY_ARRIVE:
-		if (sound_options & OPT_SOUND_LOGIN)
+		if ((sound_options & OPT_SOUND_LOGIN) && logins_not_muted)
 			gnome_triggers_do("", "program", "gaim_applet", "login", NULL);
 		break;
 	case BUDDY_LEAVE: