plugins/docklet/docklet.c

Wed, 25 Sep 2002 07:22:28 +0000

author
Sean Egan <seanegan@pidgin.im>
date
Wed, 25 Sep 2002 07:22:28 +0000
changeset 3548
8a9dddb74841
parent 3517
ef03be2348a5
child 3550
d734c112cec8
permissions
-rw-r--r--

[gaim-migrate @ 3623]
fix by Derek Ireland--and by myself before him ;)

3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
1 /* System tray docklet plugin for Gaim
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
2 * Copyright (C) 2002 Robert McQueen <robot101@debian.org>
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
3 * Inspired by a similar plugin by:
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
4 * John (J5) Palmieri <johnp@martianrock.com>
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
5 *
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
7 * modify it under the terms of the GNU General Public License as
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
8 * published by the Free Software Foundation; either version 2 of the
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
9 * License, or (at your option) any later version.
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
10 *
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful, but
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
14 * General Public License for more details.
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
15 *
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
19 * 02111-1307, USA.
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
20 */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
21
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
22 /* todo (in order of importance):
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
23 - don't crash when the plugin gets unloaded (it seems to crash after
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
24 the plugin has gone, when gtk updates the button in the plugins
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
25 dialog. backtrace is always useless. weird)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
26 - handle and update tooltips to show your current accounts
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
27 - dernyi's account status menu in the right click
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
28 - store icons in gtk2 stock icon thing (needs doing for the whole prog)
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
29 - pop up notices when GNOME2's system-tray-applet supports it, with a
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
30 prefs dialog to choose what to alert for */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
31
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
32 /* includes */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
33 #define GAIM_PLUGINS
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
34 #include <gtk/gtk.h>
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
35 #include <fcntl.h>
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
36 #include "gaim.h"
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
37 #include "eggtrayicon.h"
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
38
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
39 /* types */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
40 enum docklet_status {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
41 online,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
42 away,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
43 away_pending,
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
44 unread_pending,
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
45 connecting,
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
46 offline
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
47 };
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
48
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
49 /* functions */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
50 static void docklet_create();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
51
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
52 /* globals */
3513
32f8b1104d15 [gaim-migrate @ 3585]
Robert McQueen <robot101@debian.org>
parents: 3512
diff changeset
53 static EggTrayIcon *docklet = NULL;
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
54 static GtkWidget *icon;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
55 static enum docklet_status status;
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
56 static GtkWidget *configwin = NULL;
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
57
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
58 static void docklet_embedded(GtkWidget *widget, void *data) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
59 debug_printf("Docklet: embedded\n");
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
60 docklet_add();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
61 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
62
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
63 static void docklet_destroyed(GtkWidget *widget, void *data) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
64 debug_printf("Docklet: destroyed\n");
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
65 docklet_remove();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
66 docklet_create();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
67 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
68
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
69
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
70 static void docklet_mute(GtkWidget *toggle, void *data) {
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
71 mute_sounds = GTK_CHECK_MENU_ITEM(toggle)->active;
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
72 if (mute_sounds) {
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
73 debug_printf("Docklet: sounds muted\n");
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
74 } else {
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
75 debug_printf("Docklet: sounds unmuted\n");
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
76 }
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
77 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
78
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
79
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
80 static void docklet_menu(GdkEventButton *event) {
3513
32f8b1104d15 [gaim-migrate @ 3585]
Robert McQueen <robot101@debian.org>
parents: 3512
diff changeset
81 static GtkWidget *menu = NULL;
3512
0748b330d4ec [gaim-migrate @ 3584]
Zyk
parents: 3510
diff changeset
82 GtkWidget *entry;
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
83
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
84 if (menu) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
85 gtk_widget_destroy(menu);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
86 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
87
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
88 menu = gtk_menu_new();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
89
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
90 if (status == offline) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
91 entry = gtk_menu_item_new_with_label(_("Auto-login"));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
92 g_signal_connect(GTK_WIDGET(entry), "activate", G_CALLBACK(auto_login), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
93 gtk_menu_append(GTK_MENU(menu), entry);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
94 } else {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
95 if (status == online) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
96 GtkWidget *docklet_awaymenu;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
97 GSList *awy = NULL;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
98 struct away_message *a = NULL;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
99
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
100 docklet_awaymenu = gtk_menu_new();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
101 awy = away_messages;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
102
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
103 while (awy) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
104 a = (struct away_message *)awy->data;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
105
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
106 entry = gtk_menu_item_new_with_label(a->name);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
107 g_signal_connect(GTK_WIDGET(entry), "activate", G_CALLBACK(do_away_message), a);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
108 gtk_menu_append(GTK_MENU(docklet_awaymenu), entry);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
109
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
110 awy = g_slist_next(awy);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
111 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
112
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
113 entry = gtk_separator_menu_item_new();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
114 gtk_menu_append(GTK_MENU(docklet_awaymenu), entry);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
115
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
116 entry = gtk_menu_item_new_with_label(_("New..."));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
117 g_signal_connect(GTK_WIDGET(entry), "activate", G_CALLBACK(create_away_mess), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
118 gtk_menu_append(GTK_MENU(docklet_awaymenu), entry);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
119
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
120 entry = gtk_menu_item_new_with_label(_("Away"));
3512
0748b330d4ec [gaim-migrate @ 3584]
Zyk
parents: 3510
diff changeset
121 gtk_menu_item_set_submenu(GTK_MENU_ITEM(entry), docklet_awaymenu);
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
122 gtk_menu_append(GTK_MENU(menu), entry);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
123 } else {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
124 entry = gtk_menu_item_new_with_label(_("Back"));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
125 g_signal_connect(GTK_WIDGET(entry), "activate", G_CALLBACK(do_im_back), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
126 gtk_menu_append(GTK_MENU(menu), entry);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
127 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
128
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
129 entry = gtk_menu_item_new_with_label(_("Signoff"));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
130 g_signal_connect(GTK_WIDGET(entry), "activate", G_CALLBACK(signoff_all), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
131 gtk_menu_append(GTK_MENU(menu), entry);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
132 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
133
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
134 entry = gtk_separator_menu_item_new();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
135 gtk_menu_append(GTK_MENU(menu), entry);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
136
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
137 entry = gtk_check_menu_item_new_with_label(_("Mute Sounds"));
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
138 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(entry), mute_sounds);
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
139 g_signal_connect(GTK_WIDGET(entry), "toggled", G_CALLBACK(docklet_mute), NULL);
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
140 gtk_menu_append(GTK_MENU(menu), entry);
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
141
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
142 entry = gtk_menu_item_new_with_label(_("Accounts"));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
143 g_signal_connect(GTK_WIDGET(entry), "activate", G_CALLBACK(account_editor), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
144 gtk_menu_append(GTK_MENU(menu), entry);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
145
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
146 entry = gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
147 g_signal_connect(GTK_WIDGET(entry), "activate", G_CALLBACK(show_prefs), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
148 gtk_menu_append(GTK_MENU(menu), entry);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
149
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
150 entry = gtk_menu_item_new_with_label(_("Plugins"));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
151 g_signal_connect(GTK_WIDGET(entry), "activate", G_CALLBACK(show_plugins), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
152 gtk_menu_append(GTK_MENU(menu), entry);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
153
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
154 entry = gtk_separator_menu_item_new();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
155 gtk_menu_append(GTK_MENU(menu), entry);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
156
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
157 entry = gtk_menu_item_new_with_label(_("About"));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
158 g_signal_connect(GTK_WIDGET(entry), "activate", G_CALLBACK(show_about), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
159 gtk_menu_append(GTK_MENU(menu), entry);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
160
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
161 entry = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
162 g_signal_connect(GTK_WIDGET(entry), "activate", G_CALLBACK(do_quit), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
163 gtk_menu_append(GTK_MENU(menu), entry);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
164
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
165 gtk_widget_show_all(menu);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
166 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
167 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
168
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
169 static void docklet_clicked(GtkWidget *button, GdkEventButton *event, void *data) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
170 switch (event->button) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
171 case 1:
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
172 if (unread_message_queue) {
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
173 purge_away_queue(unread_message_queue);
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
174 unread_message_queue=NULL;
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
175 docklet_update_status();
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
176 }
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
177 else
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
178 docklet_toggle();
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
179 break;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
180 case 2:
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
181 break;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
182 case 3:
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
183 docklet_menu(event);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
184 break;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
185 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
186 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
187
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
188 static void docklet_update_icon() {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
189 gchar *filename;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
190 GdkPixbuf *unscaled;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
191
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
192 switch (status) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
193 case online:
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
194 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "online.png", NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
195 break;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
196 case away:
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
197 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "away.png", NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
198 break;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
199 case away_pending:
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
200 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "msgpend.png", NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
201 break;
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
202 case unread_pending:
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
203 /* XXX MAKE ME BLINK! */
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
204 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "msgunread.png", NULL);
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
205 break;
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
206 case connecting:
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
207 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "connect.png", NULL);
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
208 break;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
209 case offline:
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
210 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "offline.png", NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
211 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
212
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
213 unscaled = gdk_pixbuf_new_from_file(filename, NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
214
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
215 if (unscaled) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
216 GdkPixbuf *scaled;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
217
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
218 scaled = gdk_pixbuf_scale_simple(unscaled, 24, 24, GDK_INTERP_BILINEAR);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
219 gtk_image_set_from_pixbuf(GTK_IMAGE(icon), scaled);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
220 g_object_unref(unscaled);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
221 g_object_unref(scaled);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
222
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
223 debug_printf("Docklet: updated icon to %s\n",filename);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
224 } else {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
225 debug_printf("Docklet: failed to load icon from %s\n",filename);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
226 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
227
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
228 g_free(filename);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
229 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
230
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
231 static void docklet_update_status() {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
232 enum docklet_status oldstatus;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
233
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
234 oldstatus = status;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
235
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
236 if (connections) {
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
237 if (unread_message_queue) {
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
238 status = unread_pending;
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
239 } else if (awaymessage) {
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
240 if (message_queue) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
241 status = away_pending;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
242 } else {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
243 status = away;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
244 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
245 } else {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
246 status = online;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
247 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
248 } else {
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
249 if (connecting_count) {
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
250 status = connecting;
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
251 } else {
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
252 status = offline;
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
253 }
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
254 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
255
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
256 if (status != oldstatus) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
257 docklet_update_icon();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
258 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
259 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
260
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
261 static void docklet_create() {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
262 GtkWidget *box;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
263
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
264 /* is this necessary/wise? */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
265 if (docklet) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
266 g_signal_handlers_disconnect_by_func(GTK_WIDGET(docklet), G_CALLBACK(docklet_destroyed), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
267 gtk_widget_destroy(GTK_WIDGET(docklet));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
268 debug_printf("Docklet: freed\n");
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
269 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
270
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
271 docklet = egg_tray_icon_new("Gaim");
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
272 box = gtk_event_box_new();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
273 icon = gtk_image_new();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
274
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
275 g_signal_connect(GTK_WIDGET(docklet), "embedded", G_CALLBACK(docklet_embedded), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
276 g_signal_connect(GTK_WIDGET(docklet), "destroy", G_CALLBACK(docklet_destroyed), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
277 g_signal_connect(box, "button-press-event", G_CALLBACK(docklet_clicked), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
278
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
279 gtk_container_add(GTK_CONTAINER(box), icon);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
280 gtk_container_add(GTK_CONTAINER(docklet), box);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
281 gtk_widget_show_all(GTK_WIDGET(docklet));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
282
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
283 docklet_update_status();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
284 docklet_update_icon();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
285
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
286 debug_printf("Docklet: created\n");
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
287 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
288
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
289 static void gaim_signon(struct gaim_connection *gc, void *data) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
290 docklet_update_status();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
291 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
292
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
293 static void gaim_signoff(struct gaim_connection *gc, void *data) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
294 docklet_update_status();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
295 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
296
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
297 static void gaim_connecting(struct aim_user *user, void *data) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
298 docklet_update_status();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
299 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
300
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
301 static void gaim_away(struct gaim_connection *gc, char *state, char *message, void *data) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
302 /* we only support global away. this is the way it is, ok? */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
303 docklet_update_status();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
304 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
305
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
306 static void gaim_im_recv(struct gaim_connection *gc, char **who, char **what, void *data) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
307 /* if message queuing while away is enabled, this event could be the first
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
308 message so we need to see if the status (and hence icon) needs changing */
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
309 docklet_update_status();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
310 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
311
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
312 static void gaim_buddy_signon(struct gaim_connection *gc, char *who, void *data) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
313 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
314
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
315 static void gaim_buddy_signoff(struct gaim_connection *gc, char *who, void *data) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
316 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
317
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
318 static void gaim_buddy_away(struct gaim_connection *gc, char *who, void *data) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
319 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
320
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
321 static void gaim_buddy_back(struct gaim_connection *gc, char *who, void *data) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
322 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
323
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
324 static void gaim_new_conversation(char *who, void *data) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
325 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
326
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
327 char *gaim_plugin_init(GModule *handle) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
328 docklet_create();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
329
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
330 gaim_signal_connect(handle, event_signon, gaim_signon, NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
331 gaim_signal_connect(handle, event_signoff, gaim_signoff, NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
332 gaim_signal_connect(handle, event_connecting, gaim_connecting, NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
333 gaim_signal_connect(handle, event_away, gaim_away, NULL);
3548
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
334 gaim_signal_connect(handle, event_im_displayed_rcvd, gaim_im_recv, NULL);
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
335 gaim_signal_connect(handle, event_im_recv, gaim_im_recv, NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
336 gaim_signal_connect(handle, event_buddy_signon, gaim_buddy_signon, NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
337 gaim_signal_connect(handle, event_buddy_signoff, gaim_buddy_signoff, NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
338 gaim_signal_connect(handle, event_buddy_away, gaim_buddy_away, NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
339 gaim_signal_connect(handle, event_buddy_back, gaim_buddy_back, NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
340 gaim_signal_connect(handle, event_new_conversation, gaim_new_conversation, NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
341
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
342 return NULL;
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
343 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
344
3517
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
345 static void toggle_queue (GtkWidget *w, void *null) {
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
346 away_options ^= OPT_AWAY_QUEUE_UNREAD;
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
347 save_prefs();
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
348 }
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
349
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
350 void gaim_plugin_config() {
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
351 /* This is the sorriest dialog ever written ever */
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
352 /* It's a good thing I plan on rewriting it later tonight */
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
353 GtkWidget *button;
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
354 GtkWidget *vbox;
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
355
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
356 if (configwin) return;
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
357 GAIM_DIALOG(configwin);
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
358
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
359 vbox = gtk_vbox_new(0, 6);
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
360 gtk_container_add(GTK_CONTAINER(configwin), vbox);
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
361 gtk_window_set_title(GTK_WINDOW(configwin), "Docklet Configuration");
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
362
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
363 button = gtk_check_button_new_with_mnemonic("_Hide new messages until docklet is clicked");
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
364 gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(button), away_options & OPT_AWAY_QUEUE_UNREAD);
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
365 gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(toggle_queue), NULL);
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
366 gtk_box_pack_end(GTK_BOX(vbox), button, 0, 0, 0);
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
367
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
368 gtk_widget_show_all(configwin);
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
369 }
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
370
ef03be2348a5 [gaim-migrate @ 3590]
Sean Egan <seanegan@pidgin.im>
parents: 3514
diff changeset
371
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
372 void gaim_plugin_remove() {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
373 if (GTK_WIDGET_VISIBLE(docklet)) {
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
374 docklet_remove();
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
375 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
376
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
377 g_signal_handlers_disconnect_by_func(GTK_WIDGET(docklet), G_CALLBACK(docklet_destroyed), NULL);
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
378 gtk_widget_destroy(GTK_WIDGET(docklet));
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
379
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
380 debug_printf("Docklet: removed\n");
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
381 }
3548
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
382
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
383 struct gaim_plugin_description desc;
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
384 struct gaim_plugin_description *gaim_plugin_desc() {
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
385 desc.api_version = PLUGIN_API_VERSION;
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
386 desc.name = g_strdup("System Tray Docklet");
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
387 desc.version = g_strdup(VERSION);
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
388 desc.description = g_strdup("Interacts with a System Tray applet (in GNOME or KDE, for example) to display the current status of Gaim, allow fast access to commonly used functions, and to toggle display of the buddy list or login window.");
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
389 desc.authors = g_strdup("Robert McQueen &lt;robot101@debian.org>");
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
390 desc.url = g_strdup(WEBSITE);
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
391 return &desc;
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
392 }
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
393
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
394
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
395 const char *name() {
3548
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
396 return _("System Tray Docklet 2");
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
397 }
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
398
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
399 const char *description() {
3548
8a9dddb74841 [gaim-migrate @ 3623]
Sean Egan <seanegan@pidgin.im>
parents: 3517
diff changeset
400 return _(" 22 Interacts with a System Tray applet (in GNOME or KDE, for example) to display the current status of Gaim, allow fast access to commonly used functions, and to toggle display of the buddy list or login window.");
3510
eb451ec1bf1c [gaim-migrate @ 3576]
Robert McQueen <robot101@debian.org>
parents:
diff changeset
401 }

mercurial