Sat, 24 Dec 2005 08:10:32 +0000
[gaim-migrate @ 14987]
I'm pretty sure this is what valgrind was just telling me was leaking in
creating tooltips, it certainly doesn't seem to affect showing tooltips, but
it's late and I'm tired so if I'm wrong that's my excuse.
| 5228 | 1 | /* |
|
10297
b36800725b7a
[gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents:
10288
diff
changeset
|
2 | * @file gtkblist.c GTK+ BuddyList API |
|
b36800725b7a
[gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents:
10288
diff
changeset
|
3 | * @ingroup gtkui |
|
b36800725b7a
[gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents:
10288
diff
changeset
|
4 | * |
| 5228 | 5 | * gaim |
| 6 | * | |
| 8046 | 7 | * Gaim is the legal property of its developers, whose names are too numerous |
| 8 | * to list here. Please refer to the COPYRIGHT file distributed with this | |
| 9 | * source distribution. | |
| 5228 | 10 | * |
| 11 | * This program is free software; you can redistribute it and/or modify | |
| 12 | * it under the terms of the GNU General Public License as published by | |
| 13 | * the Free Software Foundation; either version 2 of the License, or | |
| 14 | * (at your option) any later version. | |
| 15 | * | |
| 16 | * This program is distributed in the hope that it will be useful, | |
| 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 19 | * GNU General Public License for more details. | |
| 20 | * | |
| 21 | * You should have received a copy of the GNU General Public License | |
| 22 | * along with this program; if not, write to the Free Software | |
| 23 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 24 | * | |
| 25 | */ | |
| 9791 | 26 | #include "internal.h" |
| 27 | #include "gtkgaim.h" | |
| 7620 | 28 | |
| 29 | #include "account.h" | |
|
9015
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
30 | #include "connection.h" |
| 7620 | 31 | #include "core.h" |
| 32 | #include "debug.h" | |
| 33 | #include "notify.h" | |
| 34 | #include "prpl.h" | |
| 35 | #include "prefs.h" | |
|
8986
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
36 | #include "plugin.h" |
| 7620 | 37 | #include "request.h" |
| 38 | #include "signals.h" | |
|
10297
b36800725b7a
[gaim-migrate @ 11480]
Evan Schoenberg <evands@pidgin.im>
parents:
10288
diff
changeset
|
39 | #include "gtkstock.h" |
| 7620 | 40 | #include "util.h" |
| 41 | ||
| 42 | #include "gtkaccount.h" | |
| 43 | #include "gtkblist.h" | |
| 44 | #include "gtkconv.h" | |
| 45 | #include "gtkdebug.h" | |
|
9709
2e73f176cc80
[gaim-migrate @ 10570]
Mark Doliner <markdoliner@pidgin.im>
parents:
9686
diff
changeset
|
46 | #include "gtkdialogs.h" |
| 7620 | 47 | #include "gtkft.h" |
| 48 | #include "gtklog.h" | |
|
12116
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
49 | #include "gtkmenutray.h" |
| 7620 | 50 | #include "gtkpounce.h" |
| 11740 | 51 | #include "gtkplugin.h" |
| 7620 | 52 | #include "gtkprefs.h" |
| 53 | #include "gtkprivacy.h" | |
| 8113 | 54 | #include "gtkroomlist.h" |
| 10643 | 55 | #include "gtkstatusbox.h" |
| 7620 | 56 | #include "gtkutils.h" |
| 57 | ||
| 5228 | 58 | #include <gdk/gdkkeysyms.h> |
| 59 | #include <gtk/gtk.h> | |
| 7620 | 60 | #include <gdk/gdk.h> |
| 61 | ||
| 62 | typedef struct | |
| 63 | { | |
| 64 | GaimAccount *account; | |
| 65 | ||
| 66 | GtkWidget *window; | |
| 67 | GtkWidget *combo; | |
| 68 | GtkWidget *entry; | |
| 69 | GtkWidget *entry_for_alias; | |
| 70 | GtkWidget *account_box; | |
| 71 | ||
| 72 | } GaimGtkAddBuddyData; | |
| 73 | ||
| 74 | typedef struct | |
| 75 | { | |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
76 | GaimAccount *account; |
|
9812
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
77 | gchar *default_chat_name; |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
78 | |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
79 | GtkWidget *window; |
| 7620 | 80 | GtkWidget *account_menu; |
| 81 | GtkWidget *alias_entry; | |
| 82 | GtkWidget *group_combo; | |
| 83 | GtkWidget *entries_box; | |
| 84 | GtkSizeGroup *sg; | |
| 85 | ||
| 86 | GList *entries; | |
| 87 | ||
| 88 | } GaimGtkAddChatData; | |
| 89 | ||
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
90 | typedef struct |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
91 | { |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
92 | GaimAccount *account; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
93 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
94 | GtkWidget *window; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
95 | GtkWidget *account_menu; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
96 | GtkWidget *entries_box; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
97 | GtkSizeGroup *sg; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
98 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
99 | GList *entries; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
100 | } GaimGtkJoinChatData; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
101 | |
| 7620 | 102 | |
| 12296 | 103 | static GtkWidget *accountmenu = NULL; |
| 5228 | 104 | |
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
105 | static guint visibility_manager_count = 0; |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
106 | static gboolean gtk_blist_obscured = FALSE; |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
107 | |
| 11796 | 108 | static GList *gaim_gtk_blist_sort_methods = NULL; |
| 5422 | 109 | static struct gaim_gtk_blist_sort_method *current_sort_method = NULL; |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
110 | static void sort_method_none(GaimBlistNode *node, GaimBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter); |
| 7620 | 111 | |
| 112 | /* The functions we use for sorting aren't available in gtk 2.0.x, and | |
| 113 | * segfault in 2.2.0. 2.2.1 is known to work, so I'll require that */ | |
| 114 | #if GTK_CHECK_VERSION(2,2,1) | |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
115 | static void sort_method_alphabetical(GaimBlistNode *node, GaimBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter); |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
116 | static void sort_method_status(GaimBlistNode *node, GaimBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter); |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
117 | static void sort_method_log(GaimBlistNode *node, GaimBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter); |
| 7620 | 118 | #endif |
| 119 | static GaimGtkBuddyList *gtkblist = NULL; | |
| 5228 | 120 | |
|
12116
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
121 | static void gaim_gtk_blist_update_buddy(GaimBuddyList *list, GaimBlistNode *node); |
| 5228 | 122 | static void gaim_gtk_blist_selection_changed(GtkTreeSelection *selection, gpointer data); |
| 7620 | 123 | static void gaim_gtk_blist_update(GaimBuddyList *list, GaimBlistNode *node); |
| 12530 | 124 | static char *gaim_get_tooltip_text(GaimBlistNode *node, gboolean full); |
| 5228 | 125 | static char *item_factory_translate_func (const char *path, gpointer func_data); |
| 5273 | 126 | static gboolean get_iter_from_node(GaimBlistNode *node, GtkTreeIter *iter); |
| 7620 | 127 | static void redo_buddy_list(GaimBuddyList *list, gboolean remove); |
| 128 | static void gaim_gtk_blist_collapse_contact_cb(GtkWidget *w, GaimBlistNode *node); | |
| 129 | ||
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
130 | static void gaim_gtk_blist_tooltip_destroy(void); |
|
11059
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
131 | |
| 5256 | 132 | struct _gaim_gtk_blist_node { |
| 133 | GtkTreeRowReference *row; | |
| 7620 | 134 | gboolean contact_expanded; |
| 11910 | 135 | gboolean recent_signonoff; |
| 136 | gint recent_signonoff_timer; | |
| 5256 | 137 | }; |
| 138 | ||
|
10968
7f5963c40b21
[gaim-migrate @ 12789]
Christopher O'Brien <siege@pidgin.im>
parents:
10924
diff
changeset
|
139 | |
| 10118 | 140 | static char dim_grey_string[8] = ""; |
|
10144
22c7584a403d
[gaim-migrate @ 11216]
Mark Doliner <markdoliner@pidgin.im>
parents:
10129
diff
changeset
|
141 | static char *dim_grey() |
| 10118 | 142 | { |
| 143 | if (!gtkblist) | |
| 144 | return "dim grey"; | |
| 145 | if (!dim_grey_string[0]) { | |
| 146 | GtkStyle *style = gtk_widget_get_style(gtkblist->treeview); | |
| 147 | snprintf(dim_grey_string, sizeof(dim_grey_string), "#%02x%02x%02x", | |
| 148 | style->text_aa[GTK_STATE_NORMAL].red >> 8, | |
| 149 | style->text_aa[GTK_STATE_NORMAL].green >> 8, | |
| 150 | style->text_aa[GTK_STATE_NORMAL].blue >> 8); | |
| 151 | } | |
| 152 | return dim_grey_string; | |
| 153 | } | |
|
10144
22c7584a403d
[gaim-migrate @ 11216]
Mark Doliner <markdoliner@pidgin.im>
parents:
10129
diff
changeset
|
154 | |
| 5228 | 155 | /*************************************************** |
| 156 | * Callbacks * | |
| 157 | ***************************************************/ | |
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
158 | static gboolean gtk_blist_visibility_cb(GtkWidget *w, GdkEventVisibility *event, gpointer data) |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
159 | { |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
160 | if (event->state == GDK_VISIBILITY_FULLY_OBSCURED) |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
161 | gtk_blist_obscured = TRUE; |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
162 | else |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
163 | gtk_blist_obscured = FALSE; |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
164 | |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
165 | /* continue to handle event normally */ |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
166 | return FALSE; |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
167 | } |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
168 | |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
169 | static gboolean gtk_blist_window_state_cb(GtkWidget *w, GdkEventWindowState *event, gpointer data) |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
170 | { |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
171 | if(event->changed_mask & GDK_WINDOW_STATE_WITHDRAWN) { |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
172 | if(event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
173 | gaim_prefs_set_bool("/gaim/gtk/blist/list_visible", FALSE); |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
174 | else |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
175 | gaim_prefs_set_bool("/gaim/gtk/blist/list_visible", TRUE); |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
176 | } |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
177 | |
|
12279
9418540cb3bb
[gaim-migrate @ 14583]
Casey Harkins <charkins@pidgin.im>
parents:
12246
diff
changeset
|
178 | if(event->changed_mask & GDK_WINDOW_STATE_MAXIMIZED) { |
|
9418540cb3bb
[gaim-migrate @ 14583]
Casey Harkins <charkins@pidgin.im>
parents:
12246
diff
changeset
|
179 | if(event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) |
|
9418540cb3bb
[gaim-migrate @ 14583]
Casey Harkins <charkins@pidgin.im>
parents:
12246
diff
changeset
|
180 | gaim_prefs_set_bool("/gaim/gtk/blist/list_maximized", TRUE); |
|
9418540cb3bb
[gaim-migrate @ 14583]
Casey Harkins <charkins@pidgin.im>
parents:
12246
diff
changeset
|
181 | else |
|
9418540cb3bb
[gaim-migrate @ 14583]
Casey Harkins <charkins@pidgin.im>
parents:
12246
diff
changeset
|
182 | gaim_prefs_set_bool("/gaim/gtk/blist/list_maximized", FALSE); |
|
9418540cb3bb
[gaim-migrate @ 14583]
Casey Harkins <charkins@pidgin.im>
parents:
12246
diff
changeset
|
183 | } |
|
9418540cb3bb
[gaim-migrate @ 14583]
Casey Harkins <charkins@pidgin.im>
parents:
12246
diff
changeset
|
184 | |
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
185 | return FALSE; |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
186 | } |
| 5228 | 187 | |
| 188 | static gboolean gtk_blist_delete_cb(GtkWidget *w, GdkEventAny *event, gpointer data) | |
| 189 | { | |
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
190 | if(visibility_manager_count) |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
191 | gaim_blist_set_visible(FALSE); |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
192 | else |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
193 | gaim_core_quit(); |
| 5228 | 194 | |
| 195 | /* we handle everything, event should not propogate further */ | |
| 196 | return TRUE; | |
| 197 | } | |
| 198 | ||
| 199 | static gboolean gtk_blist_configure_cb(GtkWidget *w, GdkEventConfigure *event, gpointer data) | |
| 200 | { | |
| 201 | /* unfortunately GdkEventConfigure ignores the window gravity, but * | |
| 202 | * the only way we have of setting the position doesn't. we have to * | |
| 7620 | 203 | * call get_position because it does pay attention to the gravity. * |
| 204 | * this is inefficient and I agree it sucks, but it's more likely * | |
| 205 | * to work correctly. - Robot101 */ | |
| 5228 | 206 | gint x, y; |
| 207 | ||
| 208 | /* check for visibility because when we aren't visible, this will * | |
| 209 | * give us bogus (0,0) coordinates. - xOr */ | |
| 7620 | 210 | if (GTK_WIDGET_VISIBLE(w)) |
| 5228 | 211 | gtk_window_get_position(GTK_WINDOW(w), &x, &y); |
| 7620 | 212 | else |
| 213 | return FALSE; /* carry on normally */ | |
| 214 | ||
| 215 | /* don't save if nothing changed */ | |
| 216 | if (x == gaim_prefs_get_int("/gaim/gtk/blist/x") && | |
| 217 | y == gaim_prefs_get_int("/gaim/gtk/blist/y") && | |
| 218 | event->width == gaim_prefs_get_int("/gaim/gtk/blist/width") && | |
| 219 | event->height == gaim_prefs_get_int("/gaim/gtk/blist/height")) { | |
| 220 | ||
| 221 | return FALSE; /* carry on normally */ | |
| 5228 | 222 | } |
| 223 | ||
| 7620 | 224 | /* don't save off-screen positioning */ |
| 225 | if (x + event->width < 0 || | |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
226 | y + event->height < 0 || |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
227 | x > gdk_screen_width() || |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
228 | y > gdk_screen_height()) { |
| 7620 | 229 | |
| 230 | return FALSE; /* carry on normally */ | |
| 231 | } | |
| 232 | ||
|
12279
9418540cb3bb
[gaim-migrate @ 14583]
Casey Harkins <charkins@pidgin.im>
parents:
12246
diff
changeset
|
233 | /* ignore changes when maximized */ |
|
9418540cb3bb
[gaim-migrate @ 14583]
Casey Harkins <charkins@pidgin.im>
parents:
12246
diff
changeset
|
234 | if(gaim_prefs_get_bool("/gaim/gtk/blist/list_maximized")) |
|
9418540cb3bb
[gaim-migrate @ 14583]
Casey Harkins <charkins@pidgin.im>
parents:
12246
diff
changeset
|
235 | return FALSE; |
|
9418540cb3bb
[gaim-migrate @ 14583]
Casey Harkins <charkins@pidgin.im>
parents:
12246
diff
changeset
|
236 | |
| 7620 | 237 | /* store the position */ |
| 238 | gaim_prefs_set_int("/gaim/gtk/blist/x", x); | |
| 239 | gaim_prefs_set_int("/gaim/gtk/blist/y", y); | |
| 240 | gaim_prefs_set_int("/gaim/gtk/blist/width", event->width); | |
| 241 | gaim_prefs_set_int("/gaim/gtk/blist/height", event->height); | |
| 242 | ||
| 5228 | 243 | /* continue to handle event normally */ |
| 244 | return FALSE; | |
| 245 | } | |
| 246 | ||
| 7620 | 247 | static void gtk_blist_menu_info_cb(GtkWidget *w, GaimBuddy *b) |
| 5228 | 248 | { |
| 249 | serv_get_info(b->account->gc, b->name); | |
| 250 | } | |
| 251 | ||
| 7620 | 252 | static void gtk_blist_menu_im_cb(GtkWidget *w, GaimBuddy *b) |
| 5228 | 253 | { |
|
9728
038c6946e043
[gaim-migrate @ 10589]
Mark Doliner <markdoliner@pidgin.im>
parents:
9714
diff
changeset
|
254 | gaim_gtkdialogs_im_with_user(b->account, b->name); |
| 5228 | 255 | } |
| 256 | ||
|
9466
b6425eab60ca
[gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents:
9460
diff
changeset
|
257 | static void gtk_blist_menu_send_file_cb(GtkWidget *w, GaimBuddy *b) |
|
b6425eab60ca
[gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents:
9460
diff
changeset
|
258 | { |
|
b6425eab60ca
[gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents:
9460
diff
changeset
|
259 | serv_send_file(b->account->gc, b->name, NULL); |
|
b6425eab60ca
[gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents:
9460
diff
changeset
|
260 | } |
|
b6425eab60ca
[gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents:
9460
diff
changeset
|
261 | |
| 12024 | 262 | static void gtk_blist_menu_voice_chat_cb(GtkWidget *w, GaimBuddy *b) |
| 263 | { | |
| 264 | serv_voice_chat(b->account->gc, b->name); | |
| 265 | } | |
| 266 | ||
| 7620 | 267 | static void gtk_blist_menu_autojoin_cb(GtkWidget *w, GaimChat *chat) |
| 268 | { | |
| 7693 | 269 | gaim_blist_node_set_bool((GaimBlistNode*)chat, "gtk-autojoin", |
| 270 | gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w))); | |
| 7620 | 271 | } |
| 272 | ||
|
12576
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
273 | static void gtk_blist_join_chat(GaimChat *chat) |
|
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
274 | { |
|
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
275 | GaimConversation *conv; |
|
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
276 | |
|
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
277 | conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_CHAT, |
|
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
278 | gaim_chat_get_name(chat), |
|
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
279 | chat->account); |
|
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
280 | |
|
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
281 | if (conv != NULL) |
|
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
282 | gaim_gtkconv_present_conversation(conv); |
|
12592
5e1ce1a49ddb
[gaim-migrate @ 14922]
Richard Laager <rlaager@pidgin.im>
parents:
12589
diff
changeset
|
283 | |
|
5e1ce1a49ddb
[gaim-migrate @ 14922]
Richard Laager <rlaager@pidgin.im>
parents:
12589
diff
changeset
|
284 | serv_join_chat(chat->account->gc, chat->components); |
|
12576
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
285 | } |
|
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
286 | |
| 7620 | 287 | static void gtk_blist_menu_join_cb(GtkWidget *w, GaimChat *chat) |
| 5228 | 288 | { |
|
12576
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
289 | gtk_blist_join_chat(chat); |
| 5234 | 290 | } |
| 291 | ||
| 11016 | 292 | static void gtk_blist_renderer_edited_cb(GtkCellRendererText *text_rend, char *arg1, |
| 293 | char *arg2, gpointer nada) | |
| 294 | { | |
| 295 | GtkTreeIter iter; | |
| 296 | GtkTreePath *path; | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
297 | GValue val; |
| 11016 | 298 | GaimBlistNode *node; |
| 299 | ||
| 300 | path = gtk_tree_path_new_from_string (arg1); | |
| 301 | gtk_tree_model_get_iter (GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); | |
| 302 | gtk_tree_path_free (path); | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
303 | val.g_type = 0; |
| 11016 | 304 | gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val); |
| 305 | node = g_value_get_pointer(&val); | |
| 306 | gtk_tree_view_set_enable_search (GTK_TREE_VIEW(gtkblist->treeview), TRUE); | |
| 307 | g_object_set(G_OBJECT(gtkblist->text_rend), "editable", FALSE, NULL); | |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
308 | |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
309 | switch (node->type) |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
310 | { |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
311 | case GAIM_BLIST_CONTACT_NODE: |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
312 | { |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
313 | GaimContact *contact = (GaimContact *)node; |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
314 | struct _gaim_gtk_blist_node *gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
315 | |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
316 | if (contact->alias || gtknode->contact_expanded) |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
317 | gaim_blist_alias_contact(contact, arg2); |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
318 | else |
|
12478
e752c74ff854
[gaim-migrate @ 14789]
Aleksander Piotrowski <alek@nic.com.pl>
parents:
12474
diff
changeset
|
319 | { |
|
e752c74ff854
[gaim-migrate @ 14789]
Aleksander Piotrowski <alek@nic.com.pl>
parents:
12474
diff
changeset
|
320 | GaimBuddy *buddy = gaim_contact_get_priority_buddy(contact); |
|
e752c74ff854
[gaim-migrate @ 14789]
Aleksander Piotrowski <alek@nic.com.pl>
parents:
12474
diff
changeset
|
321 | gaim_blist_alias_buddy(buddy, arg2); |
|
e752c74ff854
[gaim-migrate @ 14789]
Aleksander Piotrowski <alek@nic.com.pl>
parents:
12474
diff
changeset
|
322 | serv_alias_buddy(buddy); |
|
e752c74ff854
[gaim-migrate @ 14789]
Aleksander Piotrowski <alek@nic.com.pl>
parents:
12474
diff
changeset
|
323 | } |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
324 | } |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
325 | break; |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
326 | |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
327 | case GAIM_BLIST_BUDDY_NODE: |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
328 | gaim_blist_alias_buddy((GaimBuddy*)node, arg2); |
|
12478
e752c74ff854
[gaim-migrate @ 14789]
Aleksander Piotrowski <alek@nic.com.pl>
parents:
12474
diff
changeset
|
329 | serv_alias_buddy((GaimBuddy *)node); |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
330 | break; |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
331 | case GAIM_BLIST_GROUP_NODE: |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
332 | gaim_blist_rename_group((GaimGroup*)node, arg2); |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
333 | break; |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
334 | case GAIM_BLIST_CHAT_NODE: |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
335 | gaim_blist_alias_chat((GaimChat*)node, arg2); |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
336 | break; |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
337 | default: |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
338 | break; |
| 11016 | 339 | } |
| 340 | } | |
| 341 | ||
| 5234 | 342 | static void gtk_blist_menu_alias_cb(GtkWidget *w, GaimBlistNode *node) |
| 343 | { | |
| 11016 | 344 | GtkTreeIter iter; |
| 345 | GtkTreePath *path; | |
|
11258
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
346 | const char *text = NULL; |
|
11494
60bfb30f6cba
[gaim-migrate @ 13738]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11490
diff
changeset
|
347 | |
|
11258
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
348 | if (!(get_iter_from_node(node, &iter))) { |
| 11016 | 349 | /* This is either a bug, or the buddy is in a collapsed contact */ |
| 350 | node = node->parent; | |
| 351 | if (!get_iter_from_node(node, &iter)) | |
| 352 | /* Now it's definitely a bug */ | |
| 353 | return; | |
| 354 | } | |
|
11258
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
355 | |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
356 | switch (node->type) { |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
357 | case GAIM_BLIST_BUDDY_NODE: |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
358 | text = gaim_buddy_get_alias((GaimBuddy *)node); |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
359 | break; |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
360 | case GAIM_BLIST_CONTACT_NODE: |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
361 | text = gaim_contact_get_alias((GaimContact *)node); |
|
11258
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
362 | break; |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
363 | case GAIM_BLIST_GROUP_NODE: |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
364 | text = ((GaimGroup *)node)->name; |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
365 | break; |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
366 | case GAIM_BLIST_CHAT_NODE: |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
367 | text = gaim_chat_get_name((GaimChat *)node); |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
368 | break; |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
369 | default: |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
370 | g_return_if_reached(); |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
371 | } |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
372 | |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
373 | gtk_tree_store_set(gtkblist->treemodel, &iter, NAME_COLUMN, text, -1); |
|
6863ab327ec2
[gaim-migrate @ 13433]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11257
diff
changeset
|
374 | |
| 11016 | 375 | path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); |
| 376 | g_object_set(G_OBJECT(gtkblist->text_rend), "editable", TRUE, NULL); | |
| 377 | gtk_tree_view_set_enable_search (GTK_TREE_VIEW(gtkblist->treeview), FALSE); | |
| 378 | gtk_widget_grab_focus(gtkblist->treeview); | |
| 379 | gtk_tree_view_set_cursor(GTK_TREE_VIEW(gtkblist->treeview), path, gtkblist->text_column, TRUE); | |
| 380 | gtk_tree_path_free(path); | |
| 5228 | 381 | } |
| 382 | ||
| 7620 | 383 | static void gtk_blist_menu_bp_cb(GtkWidget *w, GaimBuddy *b) |
| 5228 | 384 | { |
| 12136 | 385 | gaim_gtk_pounce_editor_show(b->account, b->name, NULL); |
| 5228 | 386 | } |
| 387 | ||
|
9917
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
388 | static void gtk_blist_menu_showlog_cb(GtkWidget *w, GaimBlistNode *node) |
| 5228 | 389 | { |
|
12232
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
390 | GdkCursor *cursor = gdk_cursor_new(GDK_WATCH); |
|
9917
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
391 | GaimLogType type; |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
392 | GaimAccount *account; |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
393 | char *name = NULL; |
| 10663 | 394 | |
|
12232
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
395 | gdk_window_set_cursor(gtkblist->window->window, cursor); |
|
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
396 | gdk_cursor_unref(cursor); |
|
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
397 | while (gtk_events_pending()) |
|
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
398 | gtk_main_iteration(); |
|
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
399 | |
|
9917
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
400 | if (GAIM_BLIST_NODE_IS_BUDDY(node)) { |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
401 | GaimBuddy *b = (GaimBuddy*) node; |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
402 | type = GAIM_LOG_IM; |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
403 | name = g_strdup(b->name); |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
404 | account = b->account; |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
405 | } else if (GAIM_BLIST_NODE_IS_CHAT(node)) { |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
406 | GaimChat *c = (GaimChat*) node; |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
407 | GaimPluginProtocolInfo *prpl_info = NULL; |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
408 | type = GAIM_LOG_CHAT; |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
409 | account = c->account; |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
410 | prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gaim_find_prpl(gaim_account_get_protocol_id(account))); |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
411 | if (prpl_info && prpl_info->get_chat_name) { |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
412 | name = prpl_info->get_chat_name(c->components); |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
413 | } |
| 10663 | 414 | } else if (GAIM_BLIST_NODE_IS_CONTACT(node)) { |
| 415 | gaim_gtk_log_show_contact((GaimContact *)node); | |
|
12232
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
416 | gdk_window_set_cursor(gtkblist->window->window, NULL); |
| 10663 | 417 | return; |
|
12232
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
418 | } else { |
|
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
419 | gdk_window_set_cursor(gtkblist->window->window, NULL); |
|
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
420 | |
|
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
421 | /* This callback should not have been registered for a node |
|
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
422 | * that doesn't match the type of one of the blocks above. */ |
|
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
423 | g_return_if_reached(); |
|
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
424 | } |
|
9917
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
425 | |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
426 | if (name && account) { |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
427 | gaim_gtk_log_show(type, name, account); |
|
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
428 | g_free(name); |
|
12232
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
429 | |
|
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
430 | gdk_window_set_cursor(gtkblist->window->window, NULL); |
|
9917
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
431 | } |
| 7620 | 432 | } |
| 433 | ||
| 5228 | 434 | static void gtk_blist_show_systemlog_cb() |
| 435 | { | |
| 8573 | 436 | gaim_gtk_syslog_show(); |
| 5228 | 437 | } |
| 438 | ||
| 439 | static void gtk_blist_show_onlinehelp_cb() | |
| 440 | { | |
|
10240
09342bc554d9
[gaim-migrate @ 11377]
Herman Bloggs <herman@bluedigits.com>
parents:
10229
diff
changeset
|
441 | gaim_notify_uri(NULL, GAIM_WEBSITE "documentation.php"); |
| 5228 | 442 | } |
| 443 | ||
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
444 | static void |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
445 | do_join_chat(GaimGtkJoinChatData *data) |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
446 | { |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
447 | if (data) |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
448 | { |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
449 | GHashTable *components = |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
450 | g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
451 | GList *tmp; |
|
12576
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
452 | GaimChat *chat; |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
453 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
454 | for (tmp = data->entries; tmp != NULL; tmp = tmp->next) |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
455 | { |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
456 | if (g_object_get_data(tmp->data, "is_spin")) |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
457 | { |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
458 | g_hash_table_replace(components, |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
459 | g_strdup(g_object_get_data(tmp->data, "identifier")), |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
460 | g_strdup_printf("%d", |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
461 | gtk_spin_button_get_value_as_int(tmp->data))); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
462 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
463 | else |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
464 | { |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
465 | g_hash_table_replace(components, |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
466 | g_strdup(g_object_get_data(tmp->data, "identifier")), |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
467 | g_strdup(gtk_entry_get_text(tmp->data))); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
468 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
469 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
470 | |
|
12576
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
471 | chat = gaim_chat_new(data->account, NULL, components); |
|
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
472 | gtk_blist_join_chat(chat); |
|
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
473 | gaim_blist_remove_chat(chat); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
474 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
475 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
476 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
477 | static void |
|
8940
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
478 | do_joinchat(GtkWidget *dialog, int id, GaimGtkJoinChatData *info) |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
479 | { |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
480 | switch(id) |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
481 | { |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
482 | case GTK_RESPONSE_OK: |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
483 | do_join_chat(info); |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
484 | |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
485 | break; |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
486 | } |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
487 | |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
488 | gtk_widget_destroy(GTK_WIDGET(dialog)); |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
489 | g_list_free(info->entries); |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
490 | g_free(info); |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
491 | } |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
492 | |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
493 | /* |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
494 | * Check the values of all the text entry boxes. If any required input |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
495 | * strings are empty then don't allow the user to click on "OK." |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
496 | */ |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
497 | static void |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
498 | joinchat_set_sensitive_if_input_cb(GtkWidget *entry, gpointer user_data) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
499 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
500 | GaimGtkJoinChatData *data; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
501 | GList *tmp; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
502 | const char *text; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
503 | gboolean required; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
504 | gboolean sensitive = TRUE; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
505 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
506 | data = user_data; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
507 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
508 | for (tmp = data->entries; tmp != NULL; tmp = tmp->next) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
509 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
510 | if (!g_object_get_data(tmp->data, "is_spin")) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
511 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
512 | required = GPOINTER_TO_INT(g_object_get_data(tmp->data, "required")); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
513 | text = gtk_entry_get_text(tmp->data); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
514 | if (required && (*text == '\0')) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
515 | sensitive = FALSE; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
516 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
517 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
518 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
519 | gtk_dialog_set_response_sensitive(GTK_DIALOG(data->window), GTK_RESPONSE_OK, sensitive); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
520 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
521 | |
|
8940
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
522 | static void |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
523 | rebuild_joinchat_entries(GaimGtkJoinChatData *data) |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
524 | { |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
525 | GaimConnection *gc; |
| 9959 | 526 | GList *list = NULL, *tmp = NULL; |
|
9770
d61fe8dcb6d9
[gaim-migrate @ 10638]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9754
diff
changeset
|
527 | GHashTable *defaults = NULL; |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
528 | struct proto_chat_entry *pce; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
529 | gboolean focus = TRUE; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
530 | |
|
10127
3ea502c95653
[gaim-migrate @ 11165]
Daniel Atallah <datallah@pidgin.im>
parents:
10118
diff
changeset
|
531 | g_return_if_fail(data->account != NULL); |
|
3ea502c95653
[gaim-migrate @ 11165]
Daniel Atallah <datallah@pidgin.im>
parents:
10118
diff
changeset
|
532 | |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
533 | gc = gaim_account_get_connection(data->account); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
534 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
535 | while (GTK_BOX(data->entries_box)->children) |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
536 | { |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
537 | gtk_container_remove(GTK_CONTAINER(data->entries_box), |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
538 | ((GtkBoxChild *)GTK_BOX(data->entries_box)->children->data)->widget); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
539 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
540 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
541 | if (data->entries != NULL) |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
542 | g_list_free(data->entries); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
543 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
544 | data->entries = NULL; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
545 | |
|
9987
2396bd099335
[gaim-migrate @ 10900]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9959
diff
changeset
|
546 | if (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL) |
| 9959 | 547 | list = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info(gc); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
548 | |
|
9770
d61fe8dcb6d9
[gaim-migrate @ 10638]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9754
diff
changeset
|
549 | if (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults != NULL) |
|
d61fe8dcb6d9
[gaim-migrate @ 10638]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9754
diff
changeset
|
550 | defaults = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults(gc, NULL); |
|
d61fe8dcb6d9
[gaim-migrate @ 10638]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9754
diff
changeset
|
551 | |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
552 | for (tmp = list; tmp; tmp = tmp->next) |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
553 | { |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
554 | GtkWidget *label; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
555 | GtkWidget *rowbox; |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
556 | GtkWidget *input; |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
557 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
558 | pce = tmp->data; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
559 | |
| 11243 | 560 | rowbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
561 | gtk_box_pack_start(GTK_BOX(data->entries_box), rowbox, FALSE, FALSE, 0); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
562 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
563 | label = gtk_label_new_with_mnemonic(pce->label); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
564 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
565 | gtk_size_group_add_widget(data->sg, label); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
566 | gtk_box_pack_start(GTK_BOX(rowbox), label, FALSE, FALSE, 0); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
567 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
568 | if (pce->is_int) |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
569 | { |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
570 | GtkObject *adjust; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
571 | adjust = gtk_adjustment_new(pce->min, pce->min, pce->max, |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
572 | 1, 10, 10); |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
573 | input = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 1, 0); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
574 | gtk_widget_set_size_request(input, 50, -1); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
575 | gtk_box_pack_end(GTK_BOX(rowbox), input, FALSE, FALSE, 0); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
576 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
577 | else |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
578 | { |
|
9770
d61fe8dcb6d9
[gaim-migrate @ 10638]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9754
diff
changeset
|
579 | char *value; |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
580 | input = gtk_entry_new(); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
581 | gtk_entry_set_activates_default(GTK_ENTRY(input), TRUE); |
|
9770
d61fe8dcb6d9
[gaim-migrate @ 10638]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9754
diff
changeset
|
582 | value = g_hash_table_lookup(defaults, pce->identifier); |
|
d61fe8dcb6d9
[gaim-migrate @ 10638]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9754
diff
changeset
|
583 | if (value != NULL) |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
584 | gtk_entry_set_text(GTK_ENTRY(input), value); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
585 | if (pce->secret) |
|
11986
21d2ab6421a7
[gaim-migrate @ 14279]
Mark Doliner <markdoliner@pidgin.im>
parents:
11983
diff
changeset
|
586 | { |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
587 | gtk_entry_set_visibility(GTK_ENTRY(input), FALSE); |
|
11986
21d2ab6421a7
[gaim-migrate @ 14279]
Mark Doliner <markdoliner@pidgin.im>
parents:
11983
diff
changeset
|
588 | gtk_entry_set_invisible_char(GTK_ENTRY(input), GAIM_INVISIBLE_CHAR); |
|
21d2ab6421a7
[gaim-migrate @ 14279]
Mark Doliner <markdoliner@pidgin.im>
parents:
11983
diff
changeset
|
589 | } |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
590 | gtk_box_pack_end(GTK_BOX(rowbox), input, TRUE, TRUE, 0); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
591 | g_signal_connect(G_OBJECT(input), "changed", |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
592 | G_CALLBACK(joinchat_set_sensitive_if_input_cb), data); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
593 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
594 | |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
595 | /* Do the following for any type of input widget */ |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
596 | if (focus) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
597 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
598 | gtk_widget_grab_focus(input); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
599 | focus = FALSE; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
600 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
601 | gtk_label_set_mnemonic_widget(GTK_LABEL(label), input); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
602 | gaim_set_accessible_label(input, label); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
603 | g_object_set_data(G_OBJECT(input), "identifier", pce->identifier); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
604 | g_object_set_data(G_OBJECT(input), "is_spin", GINT_TO_POINTER(pce->is_int)); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
605 | g_object_set_data(G_OBJECT(input), "required", GINT_TO_POINTER(pce->required)); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
606 | data->entries = g_list_append(data->entries, input); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
607 | |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
608 | g_free(pce); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
609 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
610 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
611 | g_list_free(list); |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
612 | g_hash_table_destroy(defaults); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
613 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
614 | /* Set whether the "OK" button should be clickable initially */ |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
615 | joinchat_set_sensitive_if_input_cb(NULL, data); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
616 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
617 | gtk_widget_show_all(data->entries_box); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
618 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
619 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
620 | static void |
|
8940
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
621 | joinchat_select_account_cb(GObject *w, GaimAccount *account, |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
622 | GaimGtkJoinChatData *data) |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
623 | { |
|
9460
7c1ab9155fe2
[gaim-migrate @ 10285]
Daniel Atallah <datallah@pidgin.im>
parents:
9396
diff
changeset
|
624 | if (strcmp(gaim_account_get_protocol_id(data->account), |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
625 | gaim_account_get_protocol_id(account)) == 0) |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
626 | { |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
627 | data->account = account; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
628 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
629 | else |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
630 | { |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
631 | data->account = account; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
632 | rebuild_joinchat_entries(data); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
633 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
634 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
635 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
636 | static gboolean |
|
9987
2396bd099335
[gaim-migrate @ 10900]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9959
diff
changeset
|
637 | chat_account_filter_func(GaimAccount *account) |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
638 | { |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
639 | GaimConnection *gc = gaim_account_get_connection(account); |
|
8940
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
640 | GaimPluginProtocolInfo *prpl_info = NULL; |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
641 | |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
642 | prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
643 | |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
644 | return (prpl_info->chat_info != NULL); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
645 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
646 | |
|
8940
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
647 | gboolean |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
648 | gaim_gtk_blist_joinchat_is_showable() |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
649 | { |
|
8940
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
650 | GList *c; |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
651 | GaimConnection *gc; |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
652 | |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
653 | for (c = gaim_connections_get_all(); c != NULL; c = c->next) { |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
654 | gc = c->data; |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
655 | |
|
9987
2396bd099335
[gaim-migrate @ 10900]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9959
diff
changeset
|
656 | if (chat_account_filter_func(gaim_connection_get_account(gc))) |
|
8940
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
657 | return TRUE; |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
658 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
659 | |
|
8940
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
660 | return FALSE; |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
661 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
662 | |
|
8305
5a6d1168a8b3
[gaim-migrate @ 9029]
Christian Hammond <chipx86@chipx86.com>
parents:
8303
diff
changeset
|
663 | void |
|
8940
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
664 | gaim_gtk_blist_joinchat_show(void) |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
665 | { |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
666 | GtkWidget *hbox, *vbox; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
667 | GtkWidget *rowbox; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
668 | GtkWidget *label; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
669 | GaimGtkBuddyList *gtkblist; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
670 | GtkWidget *img = NULL; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
671 | GaimGtkJoinChatData *data = NULL; |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
672 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
673 | gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
674 | img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
675 | GTK_ICON_SIZE_DIALOG); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
676 | data = g_new0(GaimGtkJoinChatData, 1); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
677 | |
| 8975 | 678 | data->window = gtk_dialog_new_with_buttons(_("Join a Chat"), |
| 679 | NULL, GTK_DIALOG_NO_SEPARATOR, | |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
680 | GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
|
8308
88f1dc8588a8
[gaim-migrate @ 9032]
Mark Doliner <markdoliner@pidgin.im>
parents:
8305
diff
changeset
|
681 | GAIM_STOCK_CHAT, GTK_RESPONSE_OK, NULL); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
682 | gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); |
| 11243 | 683 | gtk_container_set_border_width(GTK_CONTAINER(data->window), GAIM_HIG_BOX_SPACE); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
684 | gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); |
| 11243 | 685 | gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), GAIM_HIG_BORDER); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
686 | gtk_container_set_border_width( |
| 11243 | 687 | GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), GAIM_HIG_BOX_SPACE); |
| 8975 | 688 | gtk_window_set_role(GTK_WINDOW(data->window), "join_chat"); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
689 | |
| 11243 | 690 | hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
691 | gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
692 | gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
693 | gtk_misc_set_alignment(GTK_MISC(img), 0, 0); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
694 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
695 | vbox = gtk_vbox_new(FALSE, 5); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
696 | gtk_container_set_border_width(GTK_CONTAINER(vbox), 0); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
697 | gtk_container_add(GTK_CONTAINER(hbox), vbox); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
698 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
699 | label = gtk_label_new(_("Please enter the appropriate information " |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
700 | "about the chat you would like to join.\n")); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
701 | gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
702 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
703 | gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
704 | |
| 11243 | 705 | rowbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
706 | gtk_box_pack_start(GTK_BOX(vbox), rowbox, TRUE, TRUE, 0); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
707 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
708 | data->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
709 | |
|
8940
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
710 | label = gtk_label_new_with_mnemonic(_("_Account:")); |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
711 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
712 | gtk_box_pack_start(GTK_BOX(rowbox), label, FALSE, FALSE, 0); |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
713 | gtk_size_group_add_widget(data->sg, label); |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
714 | |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
715 | data->account_menu = gaim_gtk_account_option_menu_new(NULL, FALSE, |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
716 | G_CALLBACK(joinchat_select_account_cb), |
|
9987
2396bd099335
[gaim-migrate @ 10900]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9959
diff
changeset
|
717 | chat_account_filter_func, data); |
|
8940
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
718 | gtk_box_pack_start(GTK_BOX(rowbox), data->account_menu, TRUE, TRUE, 0); |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
719 | gtk_label_set_mnemonic_widget(GTK_LABEL(label), |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
720 | GTK_WIDGET(data->account_menu)); |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
721 | gaim_set_accessible_label (data->account_menu, label); |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
722 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
723 | data->entries_box = gtk_vbox_new(FALSE, 5); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
724 | gtk_container_add(GTK_CONTAINER(vbox), data->entries_box); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
725 | gtk_container_set_border_width(GTK_CONTAINER(data->entries_box), 0); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
726 | |
|
8940
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
727 | data->account = gaim_gtk_account_option_menu_get_selected(data->account_menu); |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
728 | |
|
8303
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
729 | rebuild_joinchat_entries(data); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
730 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
731 | g_signal_connect(G_OBJECT(data->window), "response", |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
732 | G_CALLBACK(do_joinchat), data); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
733 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
734 | g_object_unref(data->sg); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
735 | |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
736 | gtk_widget_show_all(data->window); |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
737 | } |
|
bbe7d3420549
[gaim-migrate @ 9027]
Christian Hammond <chipx86@chipx86.com>
parents:
8302
diff
changeset
|
738 | |
| 5228 | 739 | static void gtk_blist_row_expanded_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data) { |
| 740 | GaimBlistNode *node; | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
741 | GValue val; |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
742 | |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
743 | val.g_type = 0; |
| 5228 | 744 | gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel), iter, NODE_COLUMN, &val); |
| 745 | ||
| 746 | node = g_value_get_pointer(&val); | |
| 747 | ||
| 748 | if (GAIM_BLIST_NODE_IS_GROUP(node)) { | |
| 7693 | 749 | gaim_blist_node_set_bool(node, "collapsed", FALSE); |
| 5228 | 750 | } |
| 751 | } | |
| 752 | ||
| 753 | static void gtk_blist_row_collapsed_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data) { | |
| 754 | GaimBlistNode *node; | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
755 | GValue val; |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
756 | |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
757 | val.g_type = 0; |
| 5228 | 758 | gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel), iter, NODE_COLUMN, &val); |
| 759 | ||
| 760 | node = g_value_get_pointer(&val); | |
| 761 | ||
| 762 | if (GAIM_BLIST_NODE_IS_GROUP(node)) { | |
| 7693 | 763 | gaim_blist_node_set_bool(node, "collapsed", TRUE); |
| 7620 | 764 | } else if(GAIM_BLIST_NODE_IS_CONTACT(node)) { |
| 765 | gaim_gtk_blist_collapse_contact_cb(NULL, node); | |
| 5228 | 766 | } |
| 767 | } | |
| 768 | ||
| 769 | static void gtk_blist_row_activated_cb(GtkTreeView *tv, GtkTreePath *path, GtkTreeViewColumn *col, gpointer data) { | |
| 770 | GaimBlistNode *node; | |
| 771 | GtkTreeIter iter; | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
772 | GValue val; |
| 5228 | 773 | |
| 774 | gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); | |
| 775 | ||
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
776 | val.g_type = 0; |
| 5228 | 777 | gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val); |
| 778 | node = g_value_get_pointer(&val); | |
| 779 | ||
| 7620 | 780 | if(GAIM_BLIST_NODE_IS_CONTACT(node) || GAIM_BLIST_NODE_IS_BUDDY(node)) { |
| 781 | GaimBuddy *buddy; | |
| 782 | ||
| 783 | if(GAIM_BLIST_NODE_IS_CONTACT(node)) | |
| 784 | buddy = gaim_contact_get_priority_buddy((GaimContact*)node); | |
| 785 | else | |
| 786 | buddy = (GaimBuddy*)node; | |
| 787 | ||
|
9728
038c6946e043
[gaim-migrate @ 10589]
Mark Doliner <markdoliner@pidgin.im>
parents:
9714
diff
changeset
|
788 | gaim_gtkdialogs_im_with_user(buddy->account, buddy->name); |
| 5234 | 789 | } else if (GAIM_BLIST_NODE_IS_CHAT(node)) { |
|
12576
df739b5606f6
[gaim-migrate @ 14898]
Richard Laager <rlaager@pidgin.im>
parents:
12569
diff
changeset
|
790 | gtk_blist_join_chat((GaimChat *)node); |
| 5228 | 791 | } else if (GAIM_BLIST_NODE_IS_GROUP(node)) { |
| 792 | if (gtk_tree_view_row_expanded(tv, path)) | |
| 793 | gtk_tree_view_collapse_row(tv, path); | |
| 794 | else | |
| 795 | gtk_tree_view_expand_row(tv,path,FALSE); | |
| 796 | } | |
| 797 | } | |
| 798 | ||
| 5234 | 799 | static void gaim_gtk_blist_add_chat_cb() |
| 800 | { | |
| 801 | GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkblist->treeview)); | |
| 802 | GtkTreeIter iter; | |
| 803 | GaimBlistNode *node; | |
| 804 | ||
| 805 | if(gtk_tree_selection_get_selected(sel, NULL, &iter)){ | |
| 806 | gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1); | |
| 7620 | 807 | if (GAIM_BLIST_NODE_IS_BUDDY(node)) |
|
9754
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9753
diff
changeset
|
808 | gaim_blist_request_add_chat(NULL, (GaimGroup*)node->parent->parent, NULL, NULL); |
| 7620 | 809 | if (GAIM_BLIST_NODE_IS_CONTACT(node) || GAIM_BLIST_NODE_IS_CHAT(node)) |
|
9754
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9753
diff
changeset
|
810 | gaim_blist_request_add_chat(NULL, (GaimGroup*)node->parent, NULL, NULL); |
| 5234 | 811 | else if (GAIM_BLIST_NODE_IS_GROUP(node)) |
|
9754
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9753
diff
changeset
|
812 | gaim_blist_request_add_chat(NULL, (GaimGroup*)node, NULL, NULL); |
| 5234 | 813 | } |
| 814 | else { | |
|
9754
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9753
diff
changeset
|
815 | gaim_blist_request_add_chat(NULL, NULL, NULL, NULL); |
| 5234 | 816 | } |
| 817 | } | |
| 818 | ||
| 5228 | 819 | static void gaim_gtk_blist_add_buddy_cb() |
| 820 | { | |
| 821 | GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkblist->treeview)); | |
| 822 | GtkTreeIter iter; | |
| 823 | GaimBlistNode *node; | |
| 824 | ||
| 825 | if(gtk_tree_selection_get_selected(sel, NULL, &iter)){ | |
| 826 | gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1); | |
| 7620 | 827 | if (GAIM_BLIST_NODE_IS_BUDDY(node)) { |
| 828 | gaim_blist_request_add_buddy(NULL, NULL, ((GaimGroup*)node->parent->parent)->name, | |
| 829 | NULL); | |
| 830 | } else if (GAIM_BLIST_NODE_IS_CONTACT(node) | |
| 831 | || GAIM_BLIST_NODE_IS_CHAT(node)) { | |
| 832 | gaim_blist_request_add_buddy(NULL, NULL, ((GaimGroup*)node->parent)->name, NULL); | |
| 833 | } else if (GAIM_BLIST_NODE_IS_GROUP(node)) { | |
| 834 | gaim_blist_request_add_buddy(NULL, NULL, ((GaimGroup*)node)->name, NULL); | |
| 835 | } | |
| 5228 | 836 | } |
| 837 | else { | |
| 7620 | 838 | gaim_blist_request_add_buddy(NULL, NULL, NULL, NULL); |
| 839 | } | |
| 840 | } | |
| 841 | ||
| 842 | static void | |
| 843 | gaim_gtk_blist_remove_cb (GtkWidget *w, GaimBlistNode *node) | |
| 844 | { | |
| 845 | if (GAIM_BLIST_NODE_IS_BUDDY(node)) { | |
|
9730
e59812364b8b
[gaim-migrate @ 10591]
Mark Doliner <markdoliner@pidgin.im>
parents:
9728
diff
changeset
|
846 | gaim_gtkdialogs_remove_buddy((GaimBuddy*)node); |
| 7620 | 847 | } else if (GAIM_BLIST_NODE_IS_CHAT(node)) { |
|
9730
e59812364b8b
[gaim-migrate @ 10591]
Mark Doliner <markdoliner@pidgin.im>
parents:
9728
diff
changeset
|
848 | gaim_gtkdialogs_remove_chat((GaimChat*)node); |
| 7620 | 849 | } else if (GAIM_BLIST_NODE_IS_GROUP(node)) { |
|
9730
e59812364b8b
[gaim-migrate @ 10591]
Mark Doliner <markdoliner@pidgin.im>
parents:
9728
diff
changeset
|
850 | gaim_gtkdialogs_remove_group((GaimGroup*)node); |
| 7620 | 851 | } else if (GAIM_BLIST_NODE_IS_CONTACT(node)) { |
|
9730
e59812364b8b
[gaim-migrate @ 10591]
Mark Doliner <markdoliner@pidgin.im>
parents:
9728
diff
changeset
|
852 | gaim_gtkdialogs_remove_contact((GaimContact*)node); |
| 5228 | 853 | } |
| 854 | } | |
| 855 | ||
| 856 | static void | |
| 7620 | 857 | gaim_gtk_blist_expand_contact_cb(GtkWidget *w, GaimBlistNode *node) |
| 5228 | 858 | { |
| 7620 | 859 | struct _gaim_gtk_blist_node *gtknode; |
| 9632 | 860 | GtkTreeIter iter, parent; |
| 7620 | 861 | GaimBlistNode *bnode; |
|
10325
9bb530214bae
[gaim-migrate @ 11532]
Mark Doliner <markdoliner@pidgin.im>
parents:
10320
diff
changeset
|
862 | GtkTreePath *path; |
| 7620 | 863 | |
| 864 | if(!GAIM_BLIST_NODE_IS_CONTACT(node)) | |
| 865 | return; | |
| 866 | ||
| 867 | gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; | |
| 868 | ||
| 869 | gtknode->contact_expanded = TRUE; | |
| 870 | ||
| 871 | for(bnode = node->child; bnode; bnode = bnode->next) { | |
| 872 | gaim_gtk_blist_update(NULL, bnode); | |
| 873 | } | |
|
10353
830e54bb7fa0
[gaim-migrate @ 11570]
Mark Doliner <markdoliner@pidgin.im>
parents:
10352
diff
changeset
|
874 | |
| 9632 | 875 | /* This ensures that the bottom buddy is visible, i.e. not scrolled off the alignment */ |
| 876 | get_iter_from_node(node, &parent); | |
|
10353
830e54bb7fa0
[gaim-migrate @ 11570]
Mark Doliner <markdoliner@pidgin.im>
parents:
10352
diff
changeset
|
877 | gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(gtkblist->treemodel), &iter, &parent, |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
878 | gtk_tree_model_iter_n_children(GTK_TREE_MODEL(gtkblist->treemodel), &parent) -1); |
| 9632 | 879 | path = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &iter); |
| 880 | /* Let the treeview draw so it knows where to scroll */ | |
| 881 | while (gtk_events_pending()) | |
| 882 | gtk_main_iteration(); | |
|
10353
830e54bb7fa0
[gaim-migrate @ 11570]
Mark Doliner <markdoliner@pidgin.im>
parents:
10352
diff
changeset
|
883 | gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW(gtkblist->treeview), path, NULL, FALSE, 0, 0); |
|
830e54bb7fa0
[gaim-migrate @ 11570]
Mark Doliner <markdoliner@pidgin.im>
parents:
10352
diff
changeset
|
884 | |
| 9632 | 885 | |
| 7620 | 886 | gaim_gtk_blist_update(NULL, node); |
| 9632 | 887 | gtk_tree_path_free(path); |
| 7620 | 888 | } |
| 889 | ||
| 890 | static void | |
| 891 | gaim_gtk_blist_collapse_contact_cb(GtkWidget *w, GaimBlistNode *node) | |
| 892 | { | |
| 893 | GaimBlistNode *bnode; | |
| 894 | struct _gaim_gtk_blist_node *gtknode; | |
| 895 | ||
| 896 | if(!GAIM_BLIST_NODE_IS_CONTACT(node)) | |
| 897 | return; | |
| 898 | ||
| 899 | gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; | |
| 900 | ||
| 901 | gtknode->contact_expanded = FALSE; | |
| 902 | ||
| 903 | for(bnode = node->child; bnode; bnode = bnode->next) { | |
| 904 | gaim_gtk_blist_update(NULL, bnode); | |
| 5228 | 905 | } |
| 906 | } | |
| 907 | ||
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
908 | |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
909 | static void |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
910 | blist_node_menu_cb(GtkMenuItem *item, GaimBlistNode *node) |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
911 | { |
|
11638
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11636
diff
changeset
|
912 | void (*callback)(GaimBlistNode *, gpointer); |
|
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11636
diff
changeset
|
913 | gpointer data; |
|
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11636
diff
changeset
|
914 | callback = g_object_get_data(G_OBJECT(item), "gaimcallback"); |
|
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11636
diff
changeset
|
915 | data = g_object_get_data(G_OBJECT(item), "gaimcallbackdata"); |
|
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11636
diff
changeset
|
916 | if (callback) |
|
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11636
diff
changeset
|
917 | callback(node, data); |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
918 | } |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
919 | |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
920 | |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
921 | static void |
| 10662 | 922 | append_blist_node_action(GtkWidget *menu, GaimBlistNodeAction *act, |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
923 | GaimBlistNode *node, gboolean *dup_separator) |
| 5228 | 924 | { |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
925 | if(act == NULL) { |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
926 | if(! *dup_separator) { |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
927 | gaim_separator(menu); |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
928 | *dup_separator = TRUE; |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
929 | } |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
930 | } else { |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
931 | GtkWidget *menuitem; |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
932 | |
| 10662 | 933 | if (act->children == NULL) { |
| 934 | *dup_separator = FALSE; | |
| 935 | ||
| 936 | menuitem = gtk_menu_item_new_with_mnemonic(act->label); | |
|
11038
1daaec30158c
[gaim-migrate @ 12935]
Richard Laager <rlaager@pidgin.im>
parents:
11033
diff
changeset
|
937 | if (act->callback != NULL) { |
|
1daaec30158c
[gaim-migrate @ 12935]
Richard Laager <rlaager@pidgin.im>
parents:
11033
diff
changeset
|
938 | g_object_set_data(G_OBJECT(menuitem), "gaimcallback", |
|
11638
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11636
diff
changeset
|
939 | act->callback); |
|
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11636
diff
changeset
|
940 | g_object_set_data(G_OBJECT(menuitem), "gaimcallbackdata", |
|
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11636
diff
changeset
|
941 | act->data); |
|
11038
1daaec30158c
[gaim-migrate @ 12935]
Richard Laager <rlaager@pidgin.im>
parents:
11033
diff
changeset
|
942 | g_signal_connect(G_OBJECT(menuitem), "activate", |
|
1daaec30158c
[gaim-migrate @ 12935]
Richard Laager <rlaager@pidgin.im>
parents:
11033
diff
changeset
|
943 | G_CALLBACK(blist_node_menu_cb), node); |
|
1daaec30158c
[gaim-migrate @ 12935]
Richard Laager <rlaager@pidgin.im>
parents:
11033
diff
changeset
|
944 | } else { |
|
1daaec30158c
[gaim-migrate @ 12935]
Richard Laager <rlaager@pidgin.im>
parents:
11033
diff
changeset
|
945 | gtk_widget_set_sensitive(menuitem, FALSE); |
|
1daaec30158c
[gaim-migrate @ 12935]
Richard Laager <rlaager@pidgin.im>
parents:
11033
diff
changeset
|
946 | } |
| 10662 | 947 | gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); |
| 948 | } else { | |
| 949 | GtkWidget *submenu = NULL; | |
| 950 | GList *l = NULL; | |
| 951 | ||
| 952 | menuitem = gtk_menu_item_new_with_mnemonic(act->label); | |
| 953 | gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
| 954 | ||
| 955 | submenu = gtk_menu_new(); | |
| 956 | gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); | |
| 957 | ||
| 958 | for (l = act->children; l; l = l->next) { | |
| 959 | GaimBlistNodeAction *act = (GaimBlistNodeAction *) l->data; | |
| 960 | ||
| 961 | append_blist_node_action(submenu, act, node, dup_separator); | |
| 962 | } | |
|
11638
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11636
diff
changeset
|
963 | g_list_free(act->children); |
|
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11636
diff
changeset
|
964 | act->children = NULL; |
| 10662 | 965 | } |
|
11638
1821b40269a3
[gaim-migrate @ 13914]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11636
diff
changeset
|
966 | g_free(act); |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
967 | } |
| 5228 | 968 | } |
| 969 | ||
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
970 | |
| 9051 | 971 | void |
| 10662 | 972 | gaim_gtk_append_blist_node_proto_menu(GtkWidget *menu, GaimConnection *gc, |
| 973 | GaimBlistNode *node) | |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
974 | { |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
975 | GList *l, *ll; |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
976 | gboolean dup_separator = FALSE; |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
977 | GaimPluginProtocolInfo *prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
978 | |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
979 | if(!prpl_info || !prpl_info->blist_node_menu) |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
980 | return; |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
981 | |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
982 | for(l = ll = prpl_info->blist_node_menu(node); l; l = l->next) { |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
983 | GaimBlistNodeAction *act = (GaimBlistNodeAction *) l->data; |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
984 | append_blist_node_action(menu, act, node, &dup_separator); |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
985 | } |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
986 | g_list_free(ll); |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
987 | } |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
988 | |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
989 | |
| 9051 | 990 | void |
| 991 | gaim_gtk_append_blist_node_extended_menu (GtkWidget *menu, GaimBlistNode *node) | |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
992 | { |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
993 | GList *l, *ll; |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
994 | gboolean dup_separator = FALSE; |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
995 | |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
996 | for(l = ll = gaim_blist_node_get_extended_menu(node); l; l = l->next) { |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
997 | GaimBlistNodeAction *act = (GaimBlistNodeAction *) l->data; |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
998 | append_blist_node_action(menu, act, node, &dup_separator); |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
999 | } |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
1000 | g_list_free(ll); |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
1001 | } |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
1002 | |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
1003 | |
| 9774 | 1004 | void |
| 10484 | 1005 | gaim_gtk_blist_make_buddy_menu(GtkWidget *menu, GaimBuddy *buddy, gboolean sub) { |
| 9774 | 1006 | GaimPluginProtocolInfo *prpl_info; |
| 10663 | 1007 | GaimContact *contact; |
| 1008 | gboolean contact_expanded = FALSE; | |
| 9774 | 1009 | |
| 1010 | g_return_if_fail(menu); | |
| 1011 | g_return_if_fail(buddy); | |
| 1012 | ||
| 1013 | prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(buddy->account->gc->prpl); | |
| 1014 | ||
| 10663 | 1015 | contact = gaim_buddy_get_contact(buddy); |
| 1016 | if (contact) { | |
| 1017 | contact_expanded = ((struct _gaim_gtk_blist_node *)(((GaimBlistNode*)contact)->ui_data))->contact_expanded; | |
| 1018 | } | |
| 1019 | ||
| 7620 | 1020 | if (prpl_info && prpl_info->get_info) { |
| 8137 | 1021 | gaim_new_item_from_stock(menu, _("Get _Info"), GAIM_STOCK_INFO, |
| 9774 | 1022 | G_CALLBACK(gtk_blist_menu_info_cb), buddy, 0, 0, NULL); |
| 7620 | 1023 | } |
| 8137 | 1024 | gaim_new_item_from_stock(menu, _("I_M"), GAIM_STOCK_IM, |
| 9774 | 1025 | G_CALLBACK(gtk_blist_menu_im_cb), buddy, 0, 0, NULL); |
|
9466
b6425eab60ca
[gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents:
9460
diff
changeset
|
1026 | if (prpl_info && prpl_info->send_file) { |
| 9774 | 1027 | if (!prpl_info->can_receive_file || |
| 1028 | prpl_info->can_receive_file(buddy->account->gc, buddy->name)) | |
| 1029 | { | |
| 1030 | gaim_new_item_from_stock(menu, _("_Send File"), | |
| 1031 | GAIM_STOCK_FILE_TRANSFER, | |
| 1032 | G_CALLBACK(gtk_blist_menu_send_file_cb), | |
| 1033 | buddy, 0, 0, NULL); | |
|
9466
b6425eab60ca
[gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents:
9460
diff
changeset
|
1034 | } |
|
b6425eab60ca
[gaim-migrate @ 10291]
Daniel Atallah <datallah@pidgin.im>
parents:
9460
diff
changeset
|
1035 | } |
| 12024 | 1036 | |
| 1037 | if (prpl_info && prpl_info->media_prpl_ops && prpl_info->media_prpl_ops->call) { | |
| 1038 | gaim_new_item_from_stock(menu, _("Start _Voice Chat"), | |
| 1039 | GAIM_STOCK_VOICE_CHAT, | |
| 1040 | G_CALLBACK(gtk_blist_menu_voice_chat_cb), | |
| 1041 | buddy, 0, 0, NULL); | |
| 1042 | } | |
| 1043 | ||
|
12191
327f2d9ceaa7
[gaim-migrate @ 14493]
Richard Laager <rlaager@pidgin.im>
parents:
12179
diff
changeset
|
1044 | gaim_new_item_from_stock(menu, _("Add Buddy _Pounce"), GAIM_STOCK_POUNCE, |
| 9774 | 1045 | G_CALLBACK(gtk_blist_menu_bp_cb), buddy, 0, 0, NULL); |
| 10663 | 1046 | |
| 1047 | if(((GaimBlistNode*)buddy)->parent->child->next && !sub && !contact_expanded) { | |
|
12191
327f2d9ceaa7
[gaim-migrate @ 14493]
Richard Laager <rlaager@pidgin.im>
parents:
12179
diff
changeset
|
1048 | gaim_new_item_from_stock(menu, _("View _Log"), GAIM_STOCK_LOG, |
| 10663 | 1049 | G_CALLBACK(gtk_blist_menu_showlog_cb), |
| 1050 | contact, 0, 0, NULL); | |
| 1051 | } else if (!sub) { | |
|
12191
327f2d9ceaa7
[gaim-migrate @ 14493]
Richard Laager <rlaager@pidgin.im>
parents:
12179
diff
changeset
|
1052 | gaim_new_item_from_stock(menu, _("View _Log"), GAIM_STOCK_LOG, |
| 10663 | 1053 | G_CALLBACK(gtk_blist_menu_showlog_cb), buddy, 0, 0, NULL); |
| 1054 | } | |
| 9774 | 1055 | |
| 1056 | gaim_gtk_append_blist_node_proto_menu(menu, buddy->account->gc, | |
| 1057 | (GaimBlistNode *)buddy); | |
| 1058 | gaim_gtk_append_blist_node_extended_menu(menu, (GaimBlistNode *)buddy); | |
| 7620 | 1059 | |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
1060 | if (((GaimBlistNode*)buddy)->parent->child->next && !sub && !contact_expanded) { |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
1061 | gaim_separator(menu); |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
1062 | |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
1063 | gaim_new_item_from_stock(menu, _("Alias..."), GAIM_STOCK_ALIAS, |
| 9925 | 1064 | G_CALLBACK(gtk_blist_menu_alias_cb), |
| 10663 | 1065 | contact, 0, 0, NULL); |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
1066 | gaim_new_item_from_stock(menu, _("Remove"), GTK_STOCK_REMOVE, |
| 9925 | 1067 | G_CALLBACK(gaim_gtk_blist_remove_cb), |
| 10663 | 1068 | contact, 0, 0, NULL); |
|
12319
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
1069 | } else if (!sub || contact_expanded) { |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
1070 | gaim_separator(menu); |
|
42a0e8cecea3
[gaim-migrate @ 14623]
Richard Laager <rlaager@pidgin.im>
parents:
12302
diff
changeset
|
1071 | |
| 9925 | 1072 | gaim_new_item_from_stock(menu, _("_Alias..."), GAIM_STOCK_ALIAS, |
| 1073 | G_CALLBACK(gtk_blist_menu_alias_cb), buddy, 0, 0, NULL); | |
| 1074 | gaim_new_item_from_stock(menu, _("_Remove"), GTK_STOCK_REMOVE, | |
| 1075 | G_CALLBACK(gaim_gtk_blist_remove_cb), buddy, | |
| 1076 | 0, 0, NULL); | |
| 1077 | } | |
| 7620 | 1078 | } |
| 1079 | ||
| 9774 | 1080 | static gboolean |
| 1081 | gtk_blist_key_press_cb(GtkWidget *tv, GdkEventKey *event, gpointer data) { | |
| 7620 | 1082 | GaimBlistNode *node; |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1083 | GValue val; |
| 7620 | 1084 | GtkTreeIter iter; |
| 1085 | GtkTreeSelection *sel; | |
| 1086 | ||
| 1087 | sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv)); | |
| 1088 | if(!gtk_tree_selection_get_selected(sel, NULL, &iter)) | |
| 1089 | return FALSE; | |
| 1090 | ||
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1091 | val.g_type = 0; |
| 7620 | 1092 | gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel), &iter, |
| 1093 | NODE_COLUMN, &val); | |
| 1094 | node = g_value_get_pointer(&val); | |
| 1095 | ||
| 1096 | if(event->state & GDK_CONTROL_MASK && | |
| 1097 | (event->keyval == 'o' || event->keyval == 'O')) { | |
| 1098 | GaimBuddy *buddy; | |
| 1099 | ||
| 1100 | if(GAIM_BLIST_NODE_IS_CONTACT(node)) { | |
| 1101 | buddy = gaim_contact_get_priority_buddy((GaimContact*)node); | |
| 1102 | } else if(GAIM_BLIST_NODE_IS_BUDDY(node)) { | |
| 1103 | buddy = (GaimBuddy*)node; | |
| 1104 | } else { | |
| 1105 | return FALSE; | |
| 1106 | } | |
| 1107 | if(buddy) | |
| 1108 | serv_get_info(buddy->account->gc, buddy->name); | |
| 1109 | } | |
| 1110 | ||
| 1111 | return FALSE; | |
| 1112 | } | |
| 1113 | ||
| 9013 | 1114 | |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1115 | static GtkWidget * |
| 8952 | 1116 | create_group_menu (GaimBlistNode *node, GaimGroup *g) |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1117 | { |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1118 | GtkWidget *menu; |
|
11988
7ed733ed806b
[gaim-migrate @ 14281]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11986
diff
changeset
|
1119 | GtkWidget *item; |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1120 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1121 | menu = gtk_menu_new(); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1122 | gaim_new_item_from_stock(menu, _("Add a _Buddy"), GTK_STOCK_ADD, |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1123 | G_CALLBACK(gaim_gtk_blist_add_buddy_cb), node, 0, 0, NULL); |
|
11988
7ed733ed806b
[gaim-migrate @ 14281]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11986
diff
changeset
|
1124 | item = gaim_new_item_from_stock(menu, _("Add a C_hat"), GTK_STOCK_ADD, |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1125 | G_CALLBACK(gaim_gtk_blist_add_chat_cb), node, 0, 0, NULL); |
|
11988
7ed733ed806b
[gaim-migrate @ 14281]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11986
diff
changeset
|
1126 | gtk_widget_set_sensitive(item, gaim_gtk_blist_joinchat_is_showable()); |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1127 | gaim_new_item_from_stock(menu, _("_Delete Group"), GTK_STOCK_REMOVE, |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1128 | G_CALLBACK(gaim_gtk_blist_remove_cb), node, 0, 0, NULL); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1129 | gaim_new_item_from_stock(menu, _("_Rename"), NULL, |
| 11016 | 1130 | G_CALLBACK(gtk_blist_menu_alias_cb), node, 0, 0, NULL); |
| 8952 | 1131 | |
| 9051 | 1132 | gaim_gtk_append_blist_node_extended_menu(menu, node); |
| 8952 | 1133 | |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1134 | return menu; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1135 | } |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1136 | |
|
8586
c8c7a19da549
[gaim-migrate @ 9336]
Pekka Riikonen <priikone@silcnet.org>
parents:
8573
diff
changeset
|
1137 | |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1138 | static GtkWidget * |
| 9774 | 1139 | create_chat_menu(GaimBlistNode *node, GaimChat *c) { |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1140 | GtkWidget *menu; |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
1141 | gboolean autojoin; |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1142 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1143 | menu = gtk_menu_new(); |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
1144 | autojoin = (gaim_blist_node_get_bool(node, "gtk-autojoin") || |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
1145 | (gaim_blist_node_get_string(node, "gtk-autojoin") != NULL)); |
|
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
1146 | |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1147 | gaim_new_item_from_stock(menu, _("_Join"), GAIM_STOCK_CHAT, |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
1148 | G_CALLBACK(gtk_blist_menu_join_cb), node, 0, 0, NULL); |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1149 | gaim_new_check_item(menu, _("Auto-Join"), |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
1150 | G_CALLBACK(gtk_blist_menu_autojoin_cb), node, autojoin); |
|
12191
327f2d9ceaa7
[gaim-migrate @ 14493]
Richard Laager <rlaager@pidgin.im>
parents:
12179
diff
changeset
|
1151 | gaim_new_item_from_stock(menu, _("View _Log"), GAIM_STOCK_LOG, |
|
9917
2fbb3c9fab2b
[gaim-migrate @ 10809]
Daniel Atallah <datallah@pidgin.im>
parents:
9869
diff
changeset
|
1152 | G_CALLBACK(gtk_blist_menu_showlog_cb), node, 0, 0, NULL); |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
1153 | |
| 9051 | 1154 | gaim_gtk_append_blist_node_proto_menu(menu, c->account->gc, node); |
| 1155 | gaim_gtk_append_blist_node_extended_menu(menu, node); | |
|
8586
c8c7a19da549
[gaim-migrate @ 9336]
Pekka Riikonen <priikone@silcnet.org>
parents:
8573
diff
changeset
|
1156 | |
|
c8c7a19da549
[gaim-migrate @ 9336]
Pekka Riikonen <priikone@silcnet.org>
parents:
8573
diff
changeset
|
1157 | gaim_separator(menu); |
|
9030
7b574a641391
[gaim-migrate @ 9806]
Mark Doliner <markdoliner@pidgin.im>
parents:
9019
diff
changeset
|
1158 | |
|
8302
e23e9c8f05f7
[gaim-migrate @ 9026]
Christian Hammond <chipx86@chipx86.com>
parents:
8259
diff
changeset
|
1159 | gaim_new_item_from_stock(menu, _("_Alias..."), GAIM_STOCK_ALIAS, |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1160 | G_CALLBACK(gtk_blist_menu_alias_cb), node, 0, 0, NULL); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1161 | gaim_new_item_from_stock(menu, _("_Remove"), GTK_STOCK_REMOVE, |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1162 | G_CALLBACK(gaim_gtk_blist_remove_cb), node, 0, 0, NULL); |
|
8586
c8c7a19da549
[gaim-migrate @ 9336]
Pekka Riikonen <priikone@silcnet.org>
parents:
8573
diff
changeset
|
1163 | |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1164 | return menu; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1165 | } |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1166 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1167 | static GtkWidget * |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1168 | create_contact_menu (GaimBlistNode *node) |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1169 | { |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1170 | GtkWidget *menu; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1171 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1172 | menu = gtk_menu_new(); |
| 10663 | 1173 | |
|
12191
327f2d9ceaa7
[gaim-migrate @ 14493]
Richard Laager <rlaager@pidgin.im>
parents:
12179
diff
changeset
|
1174 | gaim_new_item_from_stock(menu, _("View _Log"), GAIM_STOCK_LOG, |
| 10663 | 1175 | G_CALLBACK(gtk_blist_menu_showlog_cb), |
| 1176 | node, 0, 0, NULL); | |
| 1177 | ||
| 1178 | gaim_separator(menu); | |
| 1179 | ||
|
8302
e23e9c8f05f7
[gaim-migrate @ 9026]
Christian Hammond <chipx86@chipx86.com>
parents:
8259
diff
changeset
|
1180 | gaim_new_item_from_stock(menu, _("_Alias..."), GAIM_STOCK_ALIAS, |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1181 | G_CALLBACK(gtk_blist_menu_alias_cb), node, 0, 0, NULL); |
| 10663 | 1182 | gaim_new_item_from_stock(menu, _("_Remove"), GTK_STOCK_REMOVE, |
| 1183 | G_CALLBACK(gaim_gtk_blist_remove_cb), node, 0, 0, NULL); | |
| 1184 | ||
| 1185 | gaim_separator(menu); | |
| 1186 | ||
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1187 | gaim_new_item_from_stock(menu, _("_Collapse"), GTK_STOCK_ZOOM_OUT, |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1188 | G_CALLBACK(gaim_gtk_blist_collapse_contact_cb), |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1189 | node, 0, 0, NULL); |
| 9051 | 1190 | |
| 1191 | gaim_gtk_append_blist_node_extended_menu(menu, node); | |
| 1192 | ||
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1193 | return menu; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1194 | } |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1195 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1196 | static GtkWidget * |
| 9774 | 1197 | create_buddy_menu(GaimBlistNode *node, GaimBuddy *b) { |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1198 | struct _gaim_gtk_blist_node *gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1199 | GtkWidget *menu; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1200 | GtkWidget *menuitem; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1201 | gboolean show_offline = gaim_prefs_get_bool("/gaim/gtk/blist/show_offline_buddies"); |
|
8470
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
1202 | |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1203 | menu = gtk_menu_new(); |
| 10484 | 1204 | gaim_gtk_blist_make_buddy_menu(menu, b, FALSE); |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1205 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1206 | if(GAIM_BLIST_NODE_IS_CONTACT(node)) { |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1207 | gaim_separator(menu); |
|
8470
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
1208 | |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1209 | if(gtknode->contact_expanded) { |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1210 | gaim_new_item_from_stock(menu, _("_Collapse"), |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1211 | GTK_STOCK_ZOOM_OUT, |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1212 | G_CALLBACK(gaim_gtk_blist_collapse_contact_cb), |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1213 | node, 0, 0, NULL); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1214 | } else { |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1215 | gaim_new_item_from_stock(menu, _("_Expand"), |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1216 | GTK_STOCK_ZOOM_IN, |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1217 | G_CALLBACK(gaim_gtk_blist_expand_contact_cb), node, |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1218 | 0, 0, NULL); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1219 | } |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1220 | if(node->child->next) { |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1221 | GaimBlistNode *bnode; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1222 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1223 | for(bnode = node->child; bnode; bnode = bnode->next) { |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1224 | GaimBuddy *buddy = (GaimBuddy*)bnode; |
|
9340
d9a87f3abbdf
[gaim-migrate @ 10148]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9337
diff
changeset
|
1225 | GdkPixbuf *buf; |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1226 | GtkWidget *submenu; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1227 | GtkWidget *image; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1228 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1229 | if(buddy == b) |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1230 | continue; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1231 | if(!buddy->account->gc) |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1232 | continue; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1233 | if(!show_offline && !GAIM_BUDDY_IS_ONLINE(buddy)) |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1234 | continue; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1235 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1236 | menuitem = gtk_image_menu_item_new_with_label(buddy->name); |
|
9340
d9a87f3abbdf
[gaim-migrate @ 10148]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9337
diff
changeset
|
1237 | buf = gaim_gtk_blist_get_status_icon(bnode, |
|
d9a87f3abbdf
[gaim-migrate @ 10148]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9337
diff
changeset
|
1238 | GAIM_STATUS_ICON_SMALL); |
|
d9a87f3abbdf
[gaim-migrate @ 10148]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9337
diff
changeset
|
1239 | image = gtk_image_new_from_pixbuf(buf); |
|
d9a87f3abbdf
[gaim-migrate @ 10148]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9337
diff
changeset
|
1240 | g_object_unref(G_OBJECT(buf)); |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1241 | gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
1242 | image); |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1243 | gtk_widget_show(image); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1244 | gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1245 | gtk_widget_show(menuitem); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1246 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1247 | submenu = gtk_menu_new(); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1248 | gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1249 | gtk_widget_show(submenu); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1250 | |
| 10484 | 1251 | gaim_gtk_blist_make_buddy_menu(submenu, buddy, TRUE); |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1252 | } |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1253 | } |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1254 | } |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1255 | return menu; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1256 | } |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1257 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1258 | static gboolean |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1259 | gaim_gtk_blist_show_context_menu(GaimBlistNode *node, |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1260 | GtkMenuPositionFunc func, |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1261 | GtkWidget *tv, |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1262 | guint button, |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1263 | guint32 time) |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1264 | { |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1265 | struct _gaim_gtk_blist_node *gtknode; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1266 | GtkWidget *menu = NULL; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1267 | gboolean handled = FALSE; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1268 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1269 | gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1270 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1271 | /* Create a menu based on the thing we right-clicked on */ |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1272 | if (GAIM_BLIST_NODE_IS_GROUP(node)) { |
| 8952 | 1273 | GaimGroup *g = (GaimGroup *)node; |
| 9774 | 1274 | |
| 8952 | 1275 | menu = create_group_menu(node, g); |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1276 | } else if (GAIM_BLIST_NODE_IS_CHAT(node)) { |
|
8586
c8c7a19da549
[gaim-migrate @ 9336]
Pekka Riikonen <priikone@silcnet.org>
parents:
8573
diff
changeset
|
1277 | GaimChat *c = (GaimChat *)node; |
| 9774 | 1278 | |
| 1279 | menu = create_chat_menu(node, c); | |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1280 | } else if ((GAIM_BLIST_NODE_IS_CONTACT(node)) && (gtknode->contact_expanded)) { |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1281 | menu = create_contact_menu(node); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1282 | } else if (GAIM_BLIST_NODE_IS_CONTACT(node) || GAIM_BLIST_NODE_IS_BUDDY(node)) { |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1283 | GaimBuddy *b; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1284 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1285 | if (GAIM_BLIST_NODE_IS_CONTACT(node)) |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1286 | b = gaim_contact_get_priority_buddy((GaimContact*)node); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1287 | else |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1288 | b = (GaimBuddy *)node; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1289 | |
| 9774 | 1290 | menu = create_buddy_menu(node, b); |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1291 | } |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1292 | |
|
11059
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1293 | #ifdef _WIN32 |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1294 | /* Unhook the tooltip-timeout since we don't want a tooltip |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1295 | * to appear and obscure the context menu we are about to show |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1296 | This is a workaround for GTK+ bug 107320. */ |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1297 | if (gtkblist->timeout) { |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1298 | g_source_remove(gtkblist->timeout); |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1299 | gtkblist->timeout = 0; |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1300 | } |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1301 | #endif |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1302 | |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1303 | /* Now display the menu */ |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1304 | if (menu != NULL) { |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1305 | gtk_widget_show_all(menu); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1306 | gtk_menu_popup(GTK_MENU(menu), NULL, NULL, func, tv, button, time); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1307 | handled = TRUE; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1308 | } |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1309 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1310 | return handled; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1311 | } |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1312 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1313 | static gboolean gtk_blist_button_press_cb(GtkWidget *tv, GdkEventButton *event, gpointer user_data) |
| 5228 | 1314 | { |
| 1315 | GtkTreePath *path; | |
| 1316 | GaimBlistNode *node; | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1317 | GValue val; |
| 5228 | 1318 | GtkTreeIter iter; |
| 1319 | GtkTreeSelection *sel; | |
| 1320 | GaimPlugin *prpl = NULL; | |
| 1321 | GaimPluginProtocolInfo *prpl_info = NULL; | |
| 7620 | 1322 | struct _gaim_gtk_blist_node *gtknode; |
| 1323 | gboolean handled = FALSE; | |
| 5228 | 1324 | |
| 1325 | /* Here we figure out which node was clicked */ | |
| 1326 | if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), event->x, event->y, &path, NULL, NULL, NULL)) | |
| 1327 | return FALSE; | |
| 1328 | gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1329 | val.g_type = 0; |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1330 | gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val); |
| 5228 | 1331 | node = g_value_get_pointer(&val); |
| 7620 | 1332 | gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; |
| 1333 | ||
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1334 | /* Right click draws a context menu */ |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1335 | if ((event->button == 3) && (event->type == GDK_BUTTON_PRESS)) { |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1336 | handled = gaim_gtk_blist_show_context_menu(node, NULL, tv, 3, event->time); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1337 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1338 | /* CTRL+middle click expands or collapse a contact */ |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1339 | } else if ((event->button == 2) && (event->type == GDK_BUTTON_PRESS) && |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1340 | (event->state & GDK_CONTROL_MASK) && (GAIM_BLIST_NODE_IS_CONTACT(node))) { |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1341 | if (gtknode->contact_expanded) |
| 7620 | 1342 | gaim_gtk_blist_collapse_contact_cb(NULL, node); |
| 1343 | else | |
| 1344 | gaim_gtk_blist_expand_contact_cb(NULL, node); | |
| 1345 | handled = TRUE; | |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1346 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1347 | /* Double middle click gets info */ |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1348 | } else if ((event->button == 2) && (event->type == GDK_2BUTTON_PRESS) && |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1349 | ((GAIM_BLIST_NODE_IS_CONTACT(node)) || (GAIM_BLIST_NODE_IS_BUDDY(node)))) { |
| 7620 | 1350 | GaimBuddy *b; |
| 1351 | if(GAIM_BLIST_NODE_IS_CONTACT(node)) | |
| 1352 | b = gaim_contact_get_priority_buddy((GaimContact*)node); | |
| 1353 | else | |
| 1354 | b = (GaimBuddy *)node; | |
| 1355 | ||
| 7956 | 1356 | prpl = gaim_find_prpl(gaim_account_get_protocol_id(b->account)); |
| 5228 | 1357 | if (prpl != NULL) |
| 1358 | prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); | |
| 1359 | ||
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1360 | if (prpl && prpl_info->get_info) |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1361 | serv_get_info(b->account->gc, b->name); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1362 | handled = TRUE; |
| 5228 | 1363 | } |
| 1364 | ||
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1365 | #if (1) |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1366 | /* |
|
10814
7e17cb56b019
[gaim-migrate @ 12468]
Luke Schierer <lschiere@pidgin.im>
parents:
10780
diff
changeset
|
1367 | * This code only exists because GTK+ doesn't work. If we return |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1368 | * FALSE here, as would be normal the event propoagates down and |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1369 | * somehow gets interpreted as the start of a drag event. |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1370 | * |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1371 | * Um, isn't it _normal_ to return TRUE here? Since the event |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1372 | * was handled? --Mark |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1373 | */ |
| 7620 | 1374 | if(handled) { |
| 1375 | sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv)); | |
| 1376 | gtk_tree_selection_select_path(sel, path); | |
| 1377 | gtk_tree_path_free(path); | |
| 1378 | return TRUE; | |
| 1379 | } | |
| 5228 | 1380 | #endif |
| 7753 | 1381 | gtk_tree_path_free(path); |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1382 | |
| 7620 | 1383 | return FALSE; |
| 5228 | 1384 | } |
| 1385 | ||
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1386 | static gboolean |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1387 | gaim_gtk_blist_popup_menu_cb(GtkWidget *tv, void *user_data) |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1388 | { |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1389 | GaimBlistNode *node; |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1390 | GValue val; |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1391 | GtkTreeIter iter; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1392 | GtkTreeSelection *sel; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1393 | gboolean handled = FALSE; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1394 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1395 | sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv)); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1396 | if (!gtk_tree_selection_get_selected(sel, NULL, &iter)) |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1397 | return FALSE; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1398 | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1399 | val.g_type = 0; |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1400 | gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel), |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1401 | &iter, NODE_COLUMN, &val); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1402 | node = g_value_get_pointer(&val); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1403 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1404 | /* Shift+F10 draws a context menu */ |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1405 | handled = gaim_gtk_blist_show_context_menu(node, gaim_gtk_treeview_popup_menu_position_func, tv, 0, GDK_CURRENT_TIME); |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1406 | |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1407 | return handled; |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1408 | } |
|
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
1409 | |
| 11796 | 1410 | static void gaim_gtk_blist_buddy_details_cb(gpointer data, guint action, GtkWidget *item) |
| 1411 | { | |
|
12569
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1412 | if (gtkblist->window->window) |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1413 | { |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1414 | GdkCursor *cursor = gdk_cursor_new(GDK_WATCH); |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1415 | gdk_window_set_cursor(gtkblist->window->window, cursor); |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1416 | while (gtk_events_pending()) |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1417 | gtk_main_iteration(); |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1418 | gdk_cursor_unref(cursor); |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1419 | } |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1420 | |
| 11796 | 1421 | gaim_prefs_set_bool("/gaim/gtk/blist/show_buddy_icons", |
| 1422 | gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item))); | |
|
12569
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1423 | |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1424 | if (gtkblist->window->window) |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1425 | gdk_window_set_cursor(gtkblist->window->window, NULL); |
| 11796 | 1426 | } |
| 1427 | ||
| 5228 | 1428 | static void gaim_gtk_blist_show_empty_groups_cb(gpointer data, guint action, GtkWidget *item) |
| 1429 | { | |
|
12569
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1430 | if (gtkblist->window->window) |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1431 | { |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1432 | GdkCursor *cursor = gdk_cursor_new(GDK_WATCH); |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1433 | gdk_window_set_cursor(gtkblist->window->window, cursor); |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1434 | while (gtk_events_pending()) |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1435 | gtk_main_iteration(); |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1436 | gdk_cursor_unref(cursor); |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1437 | } |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1438 | |
| 7620 | 1439 | gaim_prefs_set_bool("/gaim/gtk/blist/show_empty_groups", |
| 1440 | gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item))); | |
|
12569
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1441 | |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1442 | if (gtkblist->window->window) |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1443 | gdk_window_set_cursor(gtkblist->window->window, NULL); |
| 5228 | 1444 | } |
| 1445 | ||
| 1446 | static void gaim_gtk_blist_edit_mode_cb(gpointer callback_data, guint callback_action, | |
|
12569
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1447 | GtkWidget *checkitem) |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1448 | { |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1449 | if (gtkblist->window->window) |
|
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1450 | { |
| 5228 | 1451 | GdkCursor *cursor = gdk_cursor_new(GDK_WATCH); |
| 1452 | gdk_window_set_cursor(gtkblist->window->window, cursor); | |
| 1453 | while (gtk_events_pending()) | |
| 1454 | gtk_main_iteration(); | |
| 1455 | gdk_cursor_unref(cursor); | |
| 1456 | } | |
| 1457 | ||
| 7620 | 1458 | gaim_prefs_set_bool("/gaim/gtk/blist/show_offline_buddies", |
| 1459 | gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(checkitem))); | |
| 5228 | 1460 | |
|
12569
5ed47be3e4c3
[gaim-migrate @ 14888]
Richard Laager <rlaager@pidgin.im>
parents:
12530
diff
changeset
|
1461 | if (gtkblist->window->window) |
|
12232
857f087ec86b
[gaim-migrate @ 14534]
Richard Laager <rlaager@pidgin.im>
parents:
12226
diff
changeset
|
1462 | gdk_window_set_cursor(gtkblist->window->window, NULL); |
| 5228 | 1463 | } |
| 1464 | ||
|
10074
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1465 | static void gaim_gtk_blist_mute_sounds_cb(gpointer data, guint action, GtkWidget *item) |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1466 | { |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1467 | gaim_prefs_set_bool("/gaim/gtk/sound/mute", GTK_CHECK_MENU_ITEM(item)->active); |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1468 | } |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1469 | |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1470 | static void gaim_gtk_blist_mute_pref_cb(const char *name, GaimPrefType type, gpointer value, gpointer data) |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1471 | { |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1472 | gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item(gtkblist->ift, |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1473 | N_("/Tools/Mute Sounds"))), (gboolean)GPOINTER_TO_INT(value)); |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1474 | } |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1475 | |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1476 | static void gaim_gtk_blist_sound_method_pref_cb(const char *name, GaimPrefType type, gpointer value, gpointer data) |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1477 | { |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1478 | gboolean sensitive = TRUE; |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1479 | |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1480 | if(!strcmp(value, "none")) |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1481 | sensitive = FALSE; |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1482 | |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1483 | gtk_widget_set_sensitive(gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Mute Sounds")), sensitive); |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1484 | } |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
1485 | |
| 8089 | 1486 | static void |
| 1487 | add_buddies_from_vcard(const char *prpl_id, GaimGroup *group, GList *list, | |
| 1488 | const char *alias) | |
| 1489 | { | |
| 1490 | GList *l; | |
| 1491 | GaimAccount *account = NULL; | |
| 1492 | GaimConnection *gc; | |
| 1493 | ||
| 1494 | if (list == NULL) | |
| 1495 | return; | |
| 1496 | ||
| 1497 | for (l = gaim_connections_get_all(); l != NULL; l = l->next) | |
| 1498 | { | |
| 1499 | gc = (GaimConnection *)l->data; | |
| 1500 | account = gaim_connection_get_account(gc); | |
| 1501 | ||
| 1502 | if (!strcmp(gaim_account_get_protocol_id(account), prpl_id)) | |
| 1503 | break; | |
| 1504 | ||
| 1505 | account = NULL; | |
| 1506 | } | |
| 1507 | ||
| 1508 | if (account != NULL) | |
| 1509 | { | |
| 1510 | for (l = list; l != NULL; l = l->next) | |
| 1511 | { | |
| 1512 | gaim_blist_request_add_buddy(account, l->data, | |
| 1513 | (group ? group->name : NULL), | |
| 1514 | alias); | |
| 1515 | } | |
| 1516 | } | |
| 1517 | ||
| 1518 | g_list_foreach(list, (GFunc)g_free, NULL); | |
| 1519 | g_list_free(list); | |
| 1520 | } | |
| 1521 | ||
| 1522 | static gboolean | |
| 1523 | parse_vcard(const char *vcard, GaimGroup *group) | |
| 1524 | { | |
| 1525 | char *temp_vcard; | |
| 1526 | char *s, *c; | |
| 1527 | char *alias = NULL; | |
| 1528 | GList *aims = NULL; | |
| 1529 | GList *icqs = NULL; | |
| 1530 | GList *yahoos = NULL; | |
| 1531 | GList *msns = NULL; | |
| 1532 | GList *jabbers = NULL; | |
| 1533 | ||
| 1534 | s = temp_vcard = g_strdup(vcard); | |
| 1535 | ||
| 1536 | while (*s != '\0' && strncmp(s, "END:vCard", strlen("END:vCard"))) | |
| 1537 | { | |
| 1538 | char *field, *value; | |
| 1539 | ||
| 1540 | field = s; | |
| 1541 | ||
| 1542 | /* Grab the field */ | |
| 1543 | while (*s != '\r' && *s != '\n' && *s != '\0' && *s != ':') | |
| 1544 | s++; | |
| 1545 | ||
| 1546 | if (*s == '\r') s++; | |
| 1547 | if (*s == '\n') | |
| 1548 | { | |
| 1549 | s++; | |
| 1550 | continue; | |
| 1551 | } | |
| 1552 | ||
| 1553 | if (*s != '\0') *s++ = '\0'; | |
| 1554 | ||
| 1555 | if ((c = strchr(field, ';')) != NULL) | |
| 1556 | *c = '\0'; | |
| 1557 | ||
| 1558 | /* Proceed to the end of the line */ | |
| 1559 | value = s; | |
| 1560 | ||
| 1561 | while (*s != '\r' && *s != '\n' && *s != '\0') | |
| 1562 | s++; | |
| 1563 | ||
| 1564 | if (*s == '\r') *s++ = '\0'; | |
| 1565 | if (*s == '\n') *s++ = '\0'; | |
| 1566 | ||
| 1567 | /* We only want to worry about a few fields here. */ | |
| 1568 | if (!strcmp(field, "FN")) | |
| 1569 | alias = g_strdup(value); | |
| 1570 | else if (!strcmp(field, "X-AIM") || !strcmp(field, "X-ICQ") || | |
| 1571 | !strcmp(field, "X-YAHOO") || !strcmp(field, "X-MSN") || | |
| 1572 | !strcmp(field, "X-JABBER")) | |
| 1573 | { | |
| 1574 | char **values = g_strsplit(value, ":", 0); | |
| 1575 | char **im; | |
| 1576 | ||
| 1577 | for (im = values; *im != NULL; im++) | |
| 1578 | { | |
| 1579 | if (!strcmp(field, "X-AIM")) | |
| 1580 | aims = g_list_append(aims, g_strdup(*im)); | |
| 1581 | else if (!strcmp(field, "X-ICQ")) | |
| 1582 | icqs = g_list_append(icqs, g_strdup(*im)); | |
| 1583 | else if (!strcmp(field, "X-YAHOO")) | |
| 1584 | yahoos = g_list_append(yahoos, g_strdup(*im)); | |
| 1585 | else if (!strcmp(field, "X-MSN")) | |
| 1586 | msns = g_list_append(msns, g_strdup(*im)); | |
| 1587 | else if (!strcmp(field, "X-JABBER")) | |
| 1588 | jabbers = g_list_append(jabbers, g_strdup(*im)); | |
| 1589 | } | |
| 1590 | ||
| 1591 | g_strfreev(values); | |
| 1592 | } | |
| 1593 | } | |
| 1594 | ||
| 1595 | g_free(temp_vcard); | |
| 1596 | ||
| 1597 | if (aims == NULL && icqs == NULL && yahoos == NULL && | |
| 1598 | msns == NULL && jabbers == NULL) | |
| 1599 | { | |
| 1600 | if (alias != NULL) | |
| 1601 | g_free(alias); | |
| 1602 | ||
| 1603 | return FALSE; | |
| 1604 | } | |
| 1605 | ||
| 1606 | add_buddies_from_vcard("prpl-oscar", group, aims, alias); | |
| 1607 | add_buddies_from_vcard("prpl-oscar", group, icqs, alias); | |
| 1608 | add_buddies_from_vcard("prpl-yahoo", group, yahoos, alias); | |
| 1609 | add_buddies_from_vcard("prpl-msn", group, msns, alias); | |
| 1610 | add_buddies_from_vcard("prpl-jabber", group, jabbers, alias); | |
| 1611 | ||
| 1612 | if (alias != NULL) | |
| 1613 | g_free(alias); | |
| 1614 | ||
| 1615 | return TRUE; | |
| 1616 | } | |
| 1617 | ||
|
11059
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1618 | #ifdef _WIN32 |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1619 | static void gaim_gtk_blist_drag_begin(GtkWidget *widget, |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1620 | GdkDragContext *drag_context, gpointer user_data) |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1621 | { |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1622 | gaim_gtk_blist_tooltip_destroy(); |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1623 | |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1624 | |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1625 | /* Unhook the tooltip-timeout since we don't want a tooltip |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1626 | * to appear and obscure the dragging operation. |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1627 | * This is a workaround for GTK+ bug 107320. */ |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1628 | if (gtkblist->timeout) { |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1629 | g_source_remove(gtkblist->timeout); |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1630 | gtkblist->timeout = 0; |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1631 | } |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1632 | } |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1633 | #endif |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1634 | |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
1635 | static void gaim_gtk_blist_drag_data_get_cb(GtkWidget *widget, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
1636 | GdkDragContext *dc, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
1637 | GtkSelectionData *data, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
1638 | guint info, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
1639 | guint time, |
|
11059
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1640 | gpointer null) |
| 5228 | 1641 | { |
|
11059
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
1642 | |
| 8089 | 1643 | if (data->target == gdk_atom_intern("GAIM_BLIST_NODE", FALSE)) |
| 1644 | { | |
| 5228 | 1645 | GtkTreeRowReference *ref = g_object_get_data(G_OBJECT(dc), "gtk-tree-view-source-row"); |
| 1646 | GtkTreePath *sourcerow = gtk_tree_row_reference_get_path(ref); | |
| 1647 | GtkTreeIter iter; | |
| 1648 | GaimBlistNode *node = NULL; | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1649 | GValue val; |
| 5273 | 1650 | if(!sourcerow) |
| 1651 | return; | |
| 5228 | 1652 | gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, sourcerow); |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1653 | val.g_type = 0; |
| 5228 | 1654 | gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val); |
| 1655 | node = g_value_get_pointer(&val); | |
| 1656 | gtk_selection_data_set (data, | |
| 1657 | gdk_atom_intern ("GAIM_BLIST_NODE", FALSE), | |
| 1658 | 8, /* bits */ | |
| 1659 | (void*)&node, | |
| 1660 | sizeof (node)); | |
| 5273 | 1661 | |
| 5228 | 1662 | gtk_tree_path_free(sourcerow); |
| 1663 | } | |
| 8089 | 1664 | else if (data->target == gdk_atom_intern("application/x-im-contact", FALSE)) |
| 1665 | { | |
| 7706 | 1666 | GtkTreeRowReference *ref; |
| 1667 | GtkTreePath *sourcerow; | |
| 1668 | GtkTreeIter iter; | |
| 1669 | GaimBlistNode *node = NULL; | |
| 1670 | GaimBuddy *buddy; | |
| 1671 | GaimConnection *gc; | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1672 | GValue val; |
| 7706 | 1673 | GString *str; |
| 1674 | const char *protocol; | |
| 1675 | char *mime_str; | |
| 1676 | ||
| 1677 | ref = g_object_get_data(G_OBJECT(dc), "gtk-tree-view-source-row"); | |
| 1678 | sourcerow = gtk_tree_row_reference_get_path(ref); | |
| 1679 | ||
| 1680 | if (!sourcerow) | |
| 1681 | return; | |
| 1682 | ||
| 1683 | gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, | |
| 1684 | sourcerow); | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1685 | val.g_type = 0; |
| 7706 | 1686 | gtk_tree_model_get_value(GTK_TREE_MODEL(gtkblist->treemodel), &iter, |
| 1687 | NODE_COLUMN, &val); | |
| 1688 | ||
| 1689 | node = g_value_get_pointer(&val); | |
| 1690 | ||
| 1691 | if (GAIM_BLIST_NODE_IS_CONTACT(node)) | |
| 1692 | { | |
| 1693 | buddy = gaim_contact_get_priority_buddy((GaimContact *)node); | |
| 1694 | } | |
| 1695 | else if (!GAIM_BLIST_NODE_IS_BUDDY(node)) | |
| 1696 | { | |
| 1697 | gtk_tree_path_free(sourcerow); | |
| 1698 | return; | |
| 1699 | } | |
| 1700 | else | |
| 1701 | { | |
| 1702 | buddy = (GaimBuddy *)node; | |
| 1703 | } | |
| 1704 | ||
| 1705 | gc = gaim_account_get_connection(buddy->account); | |
| 1706 | ||
| 1707 | if (gc == NULL) | |
| 1708 | { | |
| 1709 | gtk_tree_path_free(sourcerow); | |
| 1710 | return; | |
| 1711 | } | |
| 1712 | ||
| 1713 | protocol = | |
| 1714 | GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->list_icon(buddy->account, | |
| 1715 | buddy); | |
| 1716 | ||
| 1717 | str = g_string_new(NULL); | |
| 1718 | g_string_printf(str, | |
| 1719 | "MIME-Version: 1.0\r\n" | |
| 1720 | "Content-Type: application/x-im-contact\r\n" | |
| 1721 | "X-IM-Protocol: %s\r\n" | |
| 1722 | "X-IM-Username: %s\r\n", | |
| 1723 | protocol, | |
| 1724 | buddy->name); | |
| 1725 | ||
| 1726 | if (buddy->alias != NULL) | |
| 1727 | { | |
| 1728 | g_string_append_printf(str, | |
| 1729 | "X-IM-Alias: %s\r\n", | |
| 1730 | buddy->alias); | |
| 1731 | } | |
| 1732 | ||
| 1733 | str = g_string_append(str, "\r\n"); | |
| 1734 | ||
| 1735 | mime_str = g_string_free(str, FALSE); | |
| 1736 | ||
| 1737 | gtk_selection_data_set(data, | |
| 1738 | gdk_atom_intern("application/x-im-contact", FALSE), | |
| 1739 | 8, /* bits */ | |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11134
diff
changeset
|
1740 | (const guchar *)mime_str, |
| 7706 | 1741 | strlen(mime_str) + 1); |
| 1742 | ||
| 1743 | g_free(mime_str); | |
| 1744 | gtk_tree_path_free(sourcerow); | |
| 1745 | } | |
| 5228 | 1746 | } |
| 1747 | ||
| 1748 | static void gaim_gtk_blist_drag_data_rcv_cb(GtkWidget *widget, GdkDragContext *dc, guint x, guint y, | |
| 1749 | GtkSelectionData *sd, guint info, guint t) | |
| 7620 | 1750 | { |
| 5228 | 1751 | if (sd->target == gdk_atom_intern("GAIM_BLIST_NODE", FALSE) && sd->data) { |
| 1752 | GaimBlistNode *n = NULL; | |
| 1753 | GtkTreePath *path = NULL; | |
| 1754 | GtkTreeViewDropPosition position; | |
| 1755 | memcpy(&n, sd->data, sizeof(n)); | |
| 1756 | if(gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget), x, y, &path, &position)) { | |
|
8470
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
1757 | /* if we're here, I think it means the drop is ok */ |
| 7642 | 1758 | GtkTreeIter iter; |
| 5228 | 1759 | GaimBlistNode *node; |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1760 | GValue val; |
| 7620 | 1761 | struct _gaim_gtk_blist_node *gtknode; |
| 1762 | ||
| 1763 | gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), | |
| 1764 | &iter, path); | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1765 | val.g_type = 0; |
| 7620 | 1766 | gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), |
| 1767 | &iter, NODE_COLUMN, &val); | |
| 5228 | 1768 | node = g_value_get_pointer(&val); |
| 7620 | 1769 | gtknode = node->ui_data; |
| 1770 | ||
| 1771 | if (GAIM_BLIST_NODE_IS_CONTACT(n)) { | |
| 1772 | GaimContact *c = (GaimContact*)n; | |
| 1773 | if (GAIM_BLIST_NODE_IS_CONTACT(node) && gtknode->contact_expanded) { | |
| 1774 | gaim_blist_merge_contact(c, node); | |
| 1775 | } else if (GAIM_BLIST_NODE_IS_CONTACT(node) || | |
| 5234 | 1776 | GAIM_BLIST_NODE_IS_CHAT(node)) { |
| 5228 | 1777 | switch(position) { |
| 1778 | case GTK_TREE_VIEW_DROP_AFTER: | |
| 1779 | case GTK_TREE_VIEW_DROP_INTO_OR_AFTER: | |
| 7620 | 1780 | gaim_blist_add_contact(c, (GaimGroup*)node->parent, |
| 1781 | node); | |
| 1782 | break; | |
| 1783 | case GTK_TREE_VIEW_DROP_BEFORE: | |
| 1784 | case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE: | |
| 1785 | gaim_blist_add_contact(c, (GaimGroup*)node->parent, | |
| 1786 | node->prev); | |
| 1787 | break; | |
| 1788 | } | |
| 1789 | } else if(GAIM_BLIST_NODE_IS_GROUP(node)) { | |
| 1790 | gaim_blist_add_contact(c, (GaimGroup*)node, NULL); | |
| 1791 | } else if(GAIM_BLIST_NODE_IS_BUDDY(node)) { | |
| 1792 | gaim_blist_merge_contact(c, node); | |
| 1793 | } | |
| 1794 | } else if (GAIM_BLIST_NODE_IS_BUDDY(n)) { | |
| 1795 | GaimBuddy *b = (GaimBuddy*)n; | |
| 1796 | if (GAIM_BLIST_NODE_IS_BUDDY(node)) { | |
| 1797 | switch(position) { | |
| 1798 | case GTK_TREE_VIEW_DROP_AFTER: | |
| 1799 | case GTK_TREE_VIEW_DROP_INTO_OR_AFTER: | |
| 1800 | gaim_blist_add_buddy(b, (GaimContact*)node->parent, | |
| 1801 | (GaimGroup*)node->parent->parent, node); | |
| 5228 | 1802 | break; |
| 1803 | case GTK_TREE_VIEW_DROP_BEFORE: | |
| 1804 | case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE: | |
| 7620 | 1805 | gaim_blist_add_buddy(b, (GaimContact*)node->parent, |
| 1806 | (GaimGroup*)node->parent->parent, | |
| 1807 | node->prev); | |
| 5228 | 1808 | break; |
| 1809 | } | |
| 7620 | 1810 | } else if(GAIM_BLIST_NODE_IS_CHAT(node)) { |
| 1811 | gaim_blist_add_buddy(b, NULL, (GaimGroup*)node->parent, | |
| 1812 | NULL); | |
| 5228 | 1813 | } else if (GAIM_BLIST_NODE_IS_GROUP(node)) { |
| 7620 | 1814 | gaim_blist_add_buddy(b, NULL, (GaimGroup*)node, NULL); |
| 1815 | } else if (GAIM_BLIST_NODE_IS_CONTACT(node)) { | |
| 1816 | if(gtknode->contact_expanded) { | |
| 1817 | switch(position) { | |
| 1818 | case GTK_TREE_VIEW_DROP_INTO_OR_AFTER: | |
| 1819 | case GTK_TREE_VIEW_DROP_AFTER: | |
| 1820 | case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE: | |
| 1821 | gaim_blist_add_buddy(b, (GaimContact*)node, | |
| 1822 | (GaimGroup*)node->parent, NULL); | |
| 1823 | break; | |
| 1824 | case GTK_TREE_VIEW_DROP_BEFORE: | |
| 1825 | gaim_blist_add_buddy(b, NULL, | |
| 1826 | (GaimGroup*)node->parent, node->prev); | |
| 1827 | break; | |
| 1828 | } | |
| 1829 | } else { | |
| 1830 | switch(position) { | |
| 1831 | case GTK_TREE_VIEW_DROP_INTO_OR_AFTER: | |
| 1832 | case GTK_TREE_VIEW_DROP_AFTER: | |
| 1833 | gaim_blist_add_buddy(b, NULL, | |
| 1834 | (GaimGroup*)node->parent, NULL); | |
| 1835 | break; | |
| 1836 | case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE: | |
| 1837 | case GTK_TREE_VIEW_DROP_BEFORE: | |
| 1838 | gaim_blist_add_buddy(b, NULL, | |
| 1839 | (GaimGroup*)node->parent, node->prev); | |
| 1840 | break; | |
| 1841 | } | |
| 1842 | } | |
| 5228 | 1843 | } |
| 5234 | 1844 | } else if (GAIM_BLIST_NODE_IS_CHAT(n)) { |
| 7620 | 1845 | GaimChat *chat = (GaimChat *)n; |
| 1846 | if (GAIM_BLIST_NODE_IS_BUDDY(node)) { | |
| 1847 | switch(position) { | |
| 1848 | case GTK_TREE_VIEW_DROP_AFTER: | |
| 1849 | case GTK_TREE_VIEW_DROP_INTO_OR_AFTER: | |
| 1850 | gaim_blist_add_chat(chat, | |
| 1851 | (GaimGroup*)node->parent->parent, node); | |
| 1852 | break; | |
| 1853 | case GTK_TREE_VIEW_DROP_BEFORE: | |
| 1854 | case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE: | |
| 1855 | gaim_blist_add_chat(chat, | |
| 1856 | (GaimGroup*)node->parent->parent, | |
| 1857 | node->prev); | |
| 1858 | break; | |
| 1859 | } | |
| 1860 | } else if(GAIM_BLIST_NODE_IS_CONTACT(node) || | |
| 5234 | 1861 | GAIM_BLIST_NODE_IS_CHAT(node)) { |
| 1862 | switch(position) { | |
| 1863 | case GTK_TREE_VIEW_DROP_AFTER: | |
| 1864 | case GTK_TREE_VIEW_DROP_INTO_OR_AFTER: | |
| 7620 | 1865 | gaim_blist_add_chat(chat, (GaimGroup*)node->parent, node); |
| 5234 | 1866 | break; |
| 1867 | case GTK_TREE_VIEW_DROP_BEFORE: | |
| 1868 | case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE: | |
| 7620 | 1869 | gaim_blist_add_chat(chat, (GaimGroup*)node->parent, node->prev); |
| 5234 | 1870 | break; |
| 1871 | } | |
| 1872 | } else if (GAIM_BLIST_NODE_IS_GROUP(node)) { | |
| 7620 | 1873 | gaim_blist_add_chat(chat, (GaimGroup*)node, NULL); |
| 5234 | 1874 | } |
| 5228 | 1875 | } else if (GAIM_BLIST_NODE_IS_GROUP(n)) { |
| 7620 | 1876 | GaimGroup *g = (GaimGroup*)n; |
| 5228 | 1877 | if (GAIM_BLIST_NODE_IS_GROUP(node)) { |
| 1878 | switch (position) { | |
| 1879 | case GTK_TREE_VIEW_DROP_INTO_OR_AFTER: | |
| 1880 | case GTK_TREE_VIEW_DROP_AFTER: | |
| 1881 | gaim_blist_add_group(g, node); | |
| 1882 | break; | |
| 1883 | case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE: | |
| 1884 | case GTK_TREE_VIEW_DROP_BEFORE: | |
| 1885 | gaim_blist_add_group(g, node->prev); | |
| 1886 | break; | |
| 1887 | } | |
| 7620 | 1888 | } else if(GAIM_BLIST_NODE_IS_BUDDY(node)) { |
| 1889 | gaim_blist_add_group(g, node->parent->parent); | |
| 1890 | } else if(GAIM_BLIST_NODE_IS_CONTACT(node) || | |
| 5234 | 1891 | GAIM_BLIST_NODE_IS_CHAT(node)) { |
| 5228 | 1892 | gaim_blist_add_group(g, node->parent); |
| 1893 | } | |
| 1894 | } | |
| 1895 | ||
| 1896 | gtk_tree_path_free(path); | |
| 7620 | 1897 | gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); |
| 5228 | 1898 | } |
| 1899 | } | |
| 7706 | 1900 | else if (sd->target == gdk_atom_intern("application/x-im-contact", |
| 1901 | FALSE) && sd->data) | |
| 1902 | { | |
| 1903 | GaimGroup *group = NULL; | |
| 1904 | GtkTreePath *path = NULL; | |
| 1905 | GtkTreeViewDropPosition position; | |
|
7712
74af9358b808
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7706
diff
changeset
|
1906 | GaimAccount *account; |
| 7706 | 1907 | char *protocol = NULL; |
| 1908 | char *username = NULL; | |
| 1909 | char *alias = NULL; | |
| 1910 | ||
| 1911 | if (gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget), | |
| 1912 | x, y, &path, &position)) | |
| 1913 | { | |
| 1914 | GtkTreeIter iter; | |
| 1915 | GaimBlistNode *node; | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1916 | GValue val; |
| 7706 | 1917 | |
| 1918 | gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), | |
| 1919 | &iter, path); | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1920 | val.g_type = 0; |
| 7706 | 1921 | gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), |
| 1922 | &iter, NODE_COLUMN, &val); | |
| 1923 | node = g_value_get_pointer(&val); | |
| 1924 | ||
| 1925 | if (GAIM_BLIST_NODE_IS_BUDDY(node)) | |
| 1926 | { | |
| 1927 | group = (GaimGroup *)node->parent->parent; | |
| 1928 | } | |
| 1929 | else if (GAIM_BLIST_NODE_IS_CHAT(node) || | |
| 1930 | GAIM_BLIST_NODE_IS_CONTACT(node)) | |
| 1931 | { | |
| 1932 | group = (GaimGroup *)node->parent; | |
| 1933 | } | |
| 1934 | else if (GAIM_BLIST_NODE_IS_GROUP(node)) | |
| 1935 | { | |
| 1936 | group = (GaimGroup *)node; | |
| 1937 | } | |
| 1938 | } | |
| 1939 | ||
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11134
diff
changeset
|
1940 | if (gaim_gtk_parse_x_im_contact((const char *)sd->data, FALSE, &account, |
|
7712
74af9358b808
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7706
diff
changeset
|
1941 | &protocol, &username, &alias)) |
| 7706 | 1942 | { |
| 1943 | if (account == NULL) | |
| 1944 | { | |
| 1945 | gaim_notify_error(NULL, NULL, | |
| 1946 | _("You are not currently signed on with an account that " | |
| 1947 | "can add that buddy."), NULL); | |
| 1948 | } | |
| 1949 | else | |
| 1950 | { | |
| 1951 | gaim_blist_request_add_buddy(account, username, | |
| 1952 | (group ? group->name : NULL), | |
| 1953 | alias); | |
| 1954 | } | |
| 1955 | } | |
| 1956 | ||
| 1957 | if (username != NULL) g_free(username); | |
| 1958 | if (protocol != NULL) g_free(protocol); | |
| 1959 | if (alias != NULL) g_free(alias); | |
| 1960 | ||
| 1961 | if (path != NULL) | |
| 1962 | gtk_tree_path_free(path); | |
| 1963 | ||
| 1964 | gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); | |
| 1965 | } | |
| 8089 | 1966 | else if (sd->target == gdk_atom_intern("text/x-vcard", FALSE) && sd->data) |
| 1967 | { | |
| 1968 | gboolean result; | |
| 1969 | GaimGroup *group = NULL; | |
| 1970 | GtkTreePath *path = NULL; | |
| 1971 | GtkTreeViewDropPosition position; | |
| 1972 | ||
| 1973 | if (gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget), | |
| 1974 | x, y, &path, &position)) | |
| 1975 | { | |
| 1976 | GtkTreeIter iter; | |
| 1977 | GaimBlistNode *node; | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1978 | GValue val; |
| 8089 | 1979 | |
| 1980 | gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), | |
| 1981 | &iter, path); | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
1982 | val.g_type = 0; |
| 8089 | 1983 | gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), |
| 1984 | &iter, NODE_COLUMN, &val); | |
| 1985 | node = g_value_get_pointer(&val); | |
| 1986 | ||
| 1987 | if (GAIM_BLIST_NODE_IS_BUDDY(node)) | |
| 1988 | { | |
| 1989 | group = (GaimGroup *)node->parent->parent; | |
| 1990 | } | |
| 1991 | else if (GAIM_BLIST_NODE_IS_CHAT(node) || | |
| 1992 | GAIM_BLIST_NODE_IS_CONTACT(node)) | |
| 1993 | { | |
| 1994 | group = (GaimGroup *)node->parent; | |
| 1995 | } | |
| 1996 | else if (GAIM_BLIST_NODE_IS_GROUP(node)) | |
| 1997 | { | |
| 1998 | group = (GaimGroup *)node; | |
| 1999 | } | |
| 2000 | } | |
| 2001 | ||
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11134
diff
changeset
|
2002 | result = parse_vcard((const gchar *)sd->data, group); |
| 8089 | 2003 | |
| 2004 | gtk_drag_finish(dc, result, (dc->action == GDK_ACTION_MOVE), t); | |
| 9525 | 2005 | } else if (sd->target == gdk_atom_intern("text/uri-list", FALSE) && sd->data) { |
| 9495 | 2006 | GtkTreePath *path = NULL; |
| 2007 | GtkTreeViewDropPosition position; | |
| 2008 | ||
| 2009 | if (gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget), | |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
2010 | x, y, &path, &position)) |
| 9495 | 2011 | { |
| 2012 | GtkTreeIter iter; | |
| 2013 | GaimBlistNode *node; | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2014 | GValue val; |
|
10382
32e07712e224
[gaim-migrate @ 11608]
Luke Schierer <lschiere@pidgin.im>
parents:
10357
diff
changeset
|
2015 | |
| 9495 | 2016 | gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), |
| 2017 | &iter, path); | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2018 | val.g_type = 0; |
| 9495 | 2019 | gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), |
| 2020 | &iter, NODE_COLUMN, &val); | |
| 2021 | node = g_value_get_pointer(&val); | |
|
10382
32e07712e224
[gaim-migrate @ 11608]
Luke Schierer <lschiere@pidgin.im>
parents:
10357
diff
changeset
|
2022 | |
| 9495 | 2023 | if (GAIM_BLIST_NODE_IS_BUDDY(node) || GAIM_BLIST_NODE_IS_CONTACT(node)) { |
| 2024 | GaimBuddy *b = GAIM_BLIST_NODE_IS_BUDDY(node) ? (GaimBuddy*)node : gaim_contact_get_priority_buddy((GaimContact*)node); | |
|
10229
39ffee70c286
[gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents:
10222
diff
changeset
|
2025 | gaim_dnd_file_manage(sd, b->account, b->name); |
|
39ffee70c286
[gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents:
10222
diff
changeset
|
2026 | gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); |
|
39ffee70c286
[gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents:
10222
diff
changeset
|
2027 | } else { |
|
39ffee70c286
[gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents:
10222
diff
changeset
|
2028 | gtk_drag_finish(dc, FALSE, FALSE, t); |
| 9495 | 2029 | } |
|
10382
32e07712e224
[gaim-migrate @ 11608]
Luke Schierer <lschiere@pidgin.im>
parents:
10357
diff
changeset
|
2030 | } |
| 8089 | 2031 | } |
| 5228 | 2032 | } |
| 2033 | ||
|
10482
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2034 | static GdkPixbuf *gaim_gtk_blist_get_buddy_icon(GaimBlistNode *node, |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2035 | gboolean scaled, gboolean greyed) |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2036 | { |
| 10483 | 2037 | GdkPixbuf *buf, *ret = NULL; |
|
10482
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2038 | GdkPixbufLoader *loader; |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2039 | GaimBuddyIcon *icon; |
|
11137
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11134
diff
changeset
|
2040 | const guchar *data; |
|
cf40226ddff7
[gaim-migrate @ 13201]
Mark Doliner <markdoliner@pidgin.im>
parents:
11134
diff
changeset
|
2041 | gsize len; |
|
10482
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2042 | GaimBuddy *buddy = (GaimBuddy *)node; |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2043 | |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2044 | if(GAIM_BLIST_NODE_IS_CONTACT(node)) { |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2045 | buddy = gaim_contact_get_priority_buddy((GaimContact*)node); |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2046 | } else if(GAIM_BLIST_NODE_IS_BUDDY(node)) { |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2047 | buddy = (GaimBuddy*)node; |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2048 | } else { |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2049 | return NULL; |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2050 | } |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2051 | |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2052 | #if 0 |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2053 | if (!gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2054 | return NULL; |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2055 | #endif |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2056 | |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2057 | if (!(icon = gaim_buddy_get_icon(buddy))) |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2058 | if (!(icon = gaim_buddy_icons_find(buddy->account, buddy->name))) /* Not sure I like this...*/ |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2059 | return NULL; |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2060 | |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2061 | loader = gdk_pixbuf_loader_new(); |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2062 | data = gaim_buddy_icon_get_data(icon, &len); |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2063 | gdk_pixbuf_loader_write(loader, data, len, NULL); |
|
12601
be19ef28e2ce
[gaim-migrate @ 14935]
Richard Laager <rlaager@pidgin.im>
parents:
12600
diff
changeset
|
2064 | gdk_pixbuf_loader_close(loader, NULL); |
|
10482
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2065 | buf = gdk_pixbuf_loader_get_pixbuf(loader); |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2066 | if (buf) |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2067 | g_object_ref(G_OBJECT(buf)); |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2068 | g_object_unref(G_OBJECT(loader)); |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2069 | |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2070 | if (buf) { |
| 10544 | 2071 | GaimAccount *account = gaim_buddy_get_account(buddy); |
| 2072 | GaimPluginProtocolInfo *prpl_info = NULL; | |
| 2073 | int orig_width, orig_height; | |
| 2074 | int scale_width, scale_height; | |
| 2075 | ||
| 2076 | if(account && account->gc) | |
| 2077 | prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); | |
| 2078 | ||
|
10482
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2079 | if (greyed) { |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2080 | GaimPresence *presence = gaim_buddy_get_presence(buddy); |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2081 | if (!GAIM_BUDDY_IS_ONLINE(buddy)) |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2082 | gdk_pixbuf_saturate_and_pixelate(buf, buf, 0.0, FALSE); |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2083 | if (gaim_presence_is_idle(presence)) |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2084 | gdk_pixbuf_saturate_and_pixelate(buf, buf, 0.25, FALSE); |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2085 | } |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2086 | |
| 10544 | 2087 | /* i'd use the gaim_gtk_buddy_icon_get_scale_size() thing, |
| 2088 | * but it won't tell me the original size, which I need for scaling | |
| 2089 | * purposes */ | |
| 2090 | scale_width = orig_width = gdk_pixbuf_get_width(buf); | |
| 2091 | scale_height = orig_height = gdk_pixbuf_get_height(buf); | |
| 2092 | ||
| 2093 | gaim_buddy_icon_get_scale_size(prpl_info ? &prpl_info->icon_spec : NULL, &scale_width, &scale_height); | |
| 2094 | ||
|
10482
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2095 | if (scaled) { |
| 10544 | 2096 | if(scale_height > scale_width) { |
| 2097 | scale_width = 30.0 * (double)scale_width / (double)scale_height; | |
| 2098 | scale_height = 30; | |
| 2099 | } else { | |
| 2100 | scale_height = 30.0 * (double)scale_height / (double)scale_width; | |
| 2101 | scale_width = 30; | |
| 2102 | } | |
| 2103 | ||
| 2104 | ret = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 30, 30); | |
| 2105 | gdk_pixbuf_fill(ret, 0x00000000); | |
| 2106 | gdk_pixbuf_scale(buf, ret, (30-scale_width)/2, (30-scale_height)/2, scale_width, scale_height, (30-scale_width)/2, (30-scale_height)/2, (double)scale_width/(double)orig_width, (double)scale_height/(double)orig_height, GDK_INTERP_BILINEAR); | |
| 10483 | 2107 | } else { |
| 2108 | ret = gdk_pixbuf_scale_simple(buf,scale_width,scale_height, GDK_INTERP_BILINEAR); | |
| 2109 | } | |
| 10544 | 2110 | g_object_unref(G_OBJECT(buf)); |
|
10482
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2111 | } |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2112 | |
| 10483 | 2113 | return ret; |
|
10482
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2114 | } |
|
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2115 | |
| 11890 | 2116 | struct tooltip_data { |
| 2117 | PangoLayout *layout; | |
| 2118 | GdkPixbuf *status_icon; | |
| 2119 | GdkPixbuf *avatar; | |
| 11892 | 2120 | int avatar_width; |
| 2121 | int width; | |
| 2122 | int height; | |
| 11890 | 2123 | }; |
| 2124 | ||
| 12530 | 2125 | static struct tooltip_data * create_tip_for_node(GaimBlistNode *node, gboolean full) |
| 11890 | 2126 | { |
| 12519 | 2127 | char *tooltip_text = NULL; |
| 11890 | 2128 | struct tooltip_data *td = g_new0(struct tooltip_data, 1); |
| 12519 | 2129 | |
| 12530 | 2130 | td->status_icon = gaim_gtk_blist_get_status_icon(node, GAIM_STATUS_ICON_LARGE); |
| 2131 | td->avatar = gaim_gtk_blist_get_buddy_icon(node, FALSE, FALSE); | |
| 2132 | tooltip_text = gaim_get_tooltip_text(node, full); | |
| 11890 | 2133 | td->layout = gtk_widget_create_pango_layout(gtkblist->tipwindow, NULL); |
| 2134 | pango_layout_set_markup(td->layout, tooltip_text, strlen(tooltip_text)); | |
| 2135 | pango_layout_set_wrap(td->layout, PANGO_WRAP_WORD); | |
| 2136 | pango_layout_set_width(td->layout, 300000); | |
| 11983 | 2137 | |
| 11892 | 2138 | pango_layout_get_size (td->layout, &td->width, &td->height); |
| 2139 | td->width = PANGO_PIXELS(td->width) + 38 + 8; | |
| 12530 | 2140 | td->height = MAX(PANGO_PIXELS(td->height + 4) + 8, 38); |
| 11892 | 2141 | |
| 2142 | if(td->avatar) { | |
| 2143 | td->avatar_width = gdk_pixbuf_get_width(td->avatar); | |
| 2144 | td->width += td->avatar_width + 8; | |
| 2145 | td->height = MAX(td->height, gdk_pixbuf_get_height(td->avatar) + 8); | |
| 2146 | } | |
| 11890 | 2147 | |
| 12649 | 2148 | g_free(tooltip_text); |
| 11890 | 2149 | return td; |
| 2150 | } | |
| 2151 | ||
| 5234 | 2152 | static void gaim_gtk_blist_paint_tip(GtkWidget *widget, GdkEventExpose *event, GaimBlistNode *node) |
| 5228 | 2153 | { |
| 2154 | GtkStyle *style; | |
| 11892 | 2155 | int current_height, max_width; |
| 11890 | 2156 | GList *l; |
| 2157 | ||
| 2158 | if(gtkblist->tooltipdata == NULL) | |
| 7620 | 2159 | return; |
| 2160 | ||
| 11890 | 2161 | style = gtkblist->tipwindow->style; |
| 2162 | gtk_paint_flat_box(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, GTK_SHADOW_OUT, | |
| 2163 | NULL, gtkblist->tipwindow, "tooltip", 0, 0, -1, -1); | |
| 2164 | ||
| 11892 | 2165 | max_width = 0; |
| 2166 | for(l = gtkblist->tooltipdata; l; l = l->next) | |
| 2167 | { | |
| 2168 | struct tooltip_data *td = l->data; | |
| 2169 | max_width = MAX(max_width, td->width); | |
| 2170 | } | |
| 2171 | ||
| 12519 | 2172 | current_height = 4; |
| 11890 | 2173 | for(l = gtkblist->tooltipdata; l; l = l->next) |
|
10482
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
2174 | { |
| 11890 | 2175 | struct tooltip_data *td = l->data; |
| 5228 | 2176 | |
| 2177 | #if GTK_CHECK_VERSION(2,2,0) | |
| 11890 | 2178 | gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, td->status_icon, |
| 12530 | 2179 | 0, 0, 4, current_height, -1 , -1, GDK_RGB_DITHER_NONE, 0, 0); |
| 11890 | 2180 | if(td->avatar) |
| 2181 | gdk_draw_pixbuf(GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, | |
| 12519 | 2182 | td->avatar, 0, 0, max_width - (td->avatar_width + 4), current_height, -1 , -1, GDK_RGB_DITHER_NONE, 0, 0); |
| 5228 | 2183 | #else |
| 12519 | 2184 | gdk_pixbuf_render_to_drawable(td->status_icon, GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0, 4, current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); |
| 11890 | 2185 | if(td->avatar) |
| 2186 | gdk_pixbuf_render_to_drawable(td->avatar, | |
| 11983 | 2187 | GDK_DRAWABLE(gtkblist->tipwindow->window), NULL, 0, 0, |
| 12530 | 2188 | max_width - (td->avatar_width + 4), |
| 12519 | 2189 | current_height, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); |
| 5228 | 2190 | #endif |
| 2191 | ||
| 11890 | 2192 | gtk_paint_layout (style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, FALSE, |
| 12519 | 2193 | NULL, gtkblist->tipwindow, "tooltip", 38 + 4, current_height, td->layout); |
| 11890 | 2194 | |
| 11895 | 2195 | current_height += td->height; |
| 2196 | ||
| 12530 | 2197 | if(l->next) |
| 2198 | gtk_paint_hline(style, gtkblist->tipwindow->window, GTK_STATE_NORMAL, NULL, NULL, NULL, 4, max_width - 4, current_height-6); | |
| 2199 | ||
| 11890 | 2200 | } |
| 5228 | 2201 | } |
| 2202 | ||
|
8254
3b3d86ef983b
[gaim-migrate @ 8977]
Mark Doliner <markdoliner@pidgin.im>
parents:
8252
diff
changeset
|
2203 | static void gaim_gtk_blist_tooltip_destroy() |
|
3b3d86ef983b
[gaim-migrate @ 8977]
Mark Doliner <markdoliner@pidgin.im>
parents:
8252
diff
changeset
|
2204 | { |
| 11890 | 2205 | while(gtkblist->tooltipdata) { |
| 2206 | struct tooltip_data *td = gtkblist->tooltipdata->data; | |
| 2207 | ||
| 2208 | if(td->avatar) | |
| 2209 | g_object_unref(td->avatar); | |
| 2210 | if(td->status_icon) | |
| 2211 | g_object_unref(td->status_icon); | |
| 2212 | g_object_unref(td->layout); | |
| 2213 | g_free(td); | |
| 2214 | gtkblist->tooltipdata = g_list_delete_link(gtkblist->tooltipdata, gtkblist->tooltipdata); | |
| 2215 | } | |
|
11636
7512e00792be
[gaim-migrate @ 13912]
Mark Doliner <markdoliner@pidgin.im>
parents:
11634
diff
changeset
|
2216 | |
|
8254
3b3d86ef983b
[gaim-migrate @ 8977]
Mark Doliner <markdoliner@pidgin.im>
parents:
8252
diff
changeset
|
2217 | if (gtkblist->tipwindow == NULL) |
|
3b3d86ef983b
[gaim-migrate @ 8977]
Mark Doliner <markdoliner@pidgin.im>
parents:
8252
diff
changeset
|
2218 | return; |
|
3b3d86ef983b
[gaim-migrate @ 8977]
Mark Doliner <markdoliner@pidgin.im>
parents:
8252
diff
changeset
|
2219 | |
|
3b3d86ef983b
[gaim-migrate @ 8977]
Mark Doliner <markdoliner@pidgin.im>
parents:
8252
diff
changeset
|
2220 | gtk_widget_destroy(gtkblist->tipwindow); |
|
3b3d86ef983b
[gaim-migrate @ 8977]
Mark Doliner <markdoliner@pidgin.im>
parents:
8252
diff
changeset
|
2221 | gtkblist->tipwindow = NULL; |
|
3b3d86ef983b
[gaim-migrate @ 8977]
Mark Doliner <markdoliner@pidgin.im>
parents:
8252
diff
changeset
|
2222 | } |
|
3b3d86ef983b
[gaim-migrate @ 8977]
Mark Doliner <markdoliner@pidgin.im>
parents:
8252
diff
changeset
|
2223 | |
| 10354 | 2224 | static gboolean gaim_gtk_blist_expand_timeout(GtkWidget *tv) |
| 2225 | { | |
| 2226 | GtkTreePath *path; | |
| 2227 | GtkTreeIter iter; | |
| 2228 | GaimBlistNode *node; | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2229 | GValue val; |
| 10354 | 2230 | struct _gaim_gtk_blist_node *gtknode; |
| 2231 | ||
| 2232 | if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y, &path, NULL, NULL, NULL)) | |
| 2233 | return FALSE; | |
| 2234 | gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2235 | val.g_type = 0; |
| 10354 | 2236 | gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val); |
| 2237 | node = g_value_get_pointer(&val); | |
| 2238 | ||
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10501
diff
changeset
|
2239 | if(!GAIM_BLIST_NODE_IS_CONTACT(node)) { |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10501
diff
changeset
|
2240 | gtk_tree_path_free(path); |
| 10354 | 2241 | return FALSE; |
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10501
diff
changeset
|
2242 | } |
| 10354 | 2243 | |
| 2244 | gtknode = node->ui_data; | |
| 2245 | ||
| 2246 | if (!gtknode->contact_expanded) { | |
| 2247 | GtkTreeIter i; | |
|
10382
32e07712e224
[gaim-migrate @ 11608]
Luke Schierer <lschiere@pidgin.im>
parents:
10357
diff
changeset
|
2248 | |
| 10354 | 2249 | gaim_gtk_blist_expand_contact_cb(NULL, node); |
|
10382
32e07712e224
[gaim-migrate @ 11608]
Luke Schierer <lschiere@pidgin.im>
parents:
10357
diff
changeset
|
2250 | |
| 10354 | 2251 | gtk_tree_view_get_cell_area(GTK_TREE_VIEW(tv), path, NULL, >kblist->contact_rect); |
| 2252 | gdk_drawable_get_size(GDK_DRAWABLE(tv->window), &(gtkblist->contact_rect.width), NULL); | |
| 2253 | gtkblist->mouseover_contact = node; | |
| 2254 | gtk_tree_path_down (path); | |
| 2255 | while (gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &i, path)) { | |
| 2256 | GdkRectangle rect; | |
| 2257 | gtk_tree_view_get_cell_area(GTK_TREE_VIEW(tv), path, NULL, &rect); | |
| 2258 | gtkblist->contact_rect.height += rect.height; | |
| 2259 | gtk_tree_path_next(path); | |
| 2260 | } | |
| 2261 | } | |
| 2262 | gtk_tree_path_free(path); | |
| 2263 | return FALSE; | |
| 2264 | } | |
| 2265 | ||
| 11890 | 2266 | static gboolean buddy_is_displayable(GaimBuddy *buddy) |
| 2267 | { | |
| 11910 | 2268 | struct _gaim_gtk_blist_node *gtknode; |
| 2269 | ||
| 2270 | if(!buddy) | |
| 2271 | return FALSE; | |
| 2272 | ||
| 2273 | gtknode = ((GaimBlistNode*)buddy)->ui_data; | |
| 2274 | ||
| 2275 | return (gaim_account_is_connected(buddy->account) && | |
| 11890 | 2276 | (gaim_presence_is_online(buddy->presence) || |
| 11910 | 2277 | (gtknode && gtknode->recent_signonoff) || |
| 2278 | gaim_prefs_get_bool("/gaim/gtk/blist/show_offline_buddies") || | |
| 2279 | gaim_blist_node_get_bool((GaimBlistNode*)buddy, "show_offline"))); | |
| 11890 | 2280 | } |
| 2281 | ||
| 5228 | 2282 | static gboolean gaim_gtk_blist_tooltip_timeout(GtkWidget *tv) |
| 2283 | { | |
| 2284 | GtkTreePath *path; | |
| 2285 | GtkTreeIter iter; | |
| 2286 | GaimBlistNode *node; | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2287 | GValue val; |
|
9869
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2288 | int scr_w, scr_h, w, h, x, y; |
|
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2289 | #if GTK_CHECK_VERSION(2,2,0) |
|
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2290 | int mon_num; |
|
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2291 | GdkScreen *screen = NULL; |
|
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2292 | #endif |
| 7636 | 2293 | gboolean tooltip_top = FALSE; |
| 2294 | struct _gaim_gtk_blist_node *gtknode; | |
|
9773
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2295 | GdkRectangle mon_size; |
| 5228 | 2296 | |
|
11636
7512e00792be
[gaim-migrate @ 13912]
Mark Doliner <markdoliner@pidgin.im>
parents:
11634
diff
changeset
|
2297 | /* |
|
7512e00792be
[gaim-migrate @ 13912]
Mark Doliner <markdoliner@pidgin.im>
parents:
11634
diff
changeset
|
2298 | * Attempt to free the previous tooltip. I have a feeling |
|
7512e00792be
[gaim-migrate @ 13912]
Mark Doliner <markdoliner@pidgin.im>
parents:
11634
diff
changeset
|
2299 | * this is never needed... but just in case. |
|
7512e00792be
[gaim-migrate @ 13912]
Mark Doliner <markdoliner@pidgin.im>
parents:
11634
diff
changeset
|
2300 | */ |
|
7512e00792be
[gaim-migrate @ 13912]
Mark Doliner <markdoliner@pidgin.im>
parents:
11634
diff
changeset
|
2301 | gaim_gtk_blist_tooltip_destroy(); |
|
7512e00792be
[gaim-migrate @ 13912]
Mark Doliner <markdoliner@pidgin.im>
parents:
11634
diff
changeset
|
2302 | |
| 7636 | 2303 | if (!gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), gtkblist->tip_rect.x, gtkblist->tip_rect.y, &path, NULL, NULL, NULL)) |
| 5228 | 2304 | return FALSE; |
| 2305 | gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), &iter, path); | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2306 | val.g_type = 0; |
| 5228 | 2307 | gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &val); |
| 2308 | node = g_value_get_pointer(&val); | |
| 7620 | 2309 | |
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10501
diff
changeset
|
2310 | gtk_tree_path_free(path); |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10501
diff
changeset
|
2311 | |
| 11890 | 2312 | gtkblist->tipwindow = gtk_window_new(GTK_WINDOW_POPUP); |
| 2313 | ||
| 2314 | if(GAIM_BLIST_NODE_IS_CHAT(node) || GAIM_BLIST_NODE_IS_BUDDY(node)) { | |
| 12530 | 2315 | struct tooltip_data *td = create_tip_for_node(node, TRUE); |
| 11890 | 2316 | gtkblist->tooltipdata = g_list_append(gtkblist->tooltipdata, td); |
| 11892 | 2317 | w = td->width; |
| 12530 | 2318 | h = td->height + 8; |
| 11890 | 2319 | } else if(GAIM_BLIST_NODE_IS_CONTACT(node)) { |
| 2320 | GaimBlistNode *child; | |
|
11988
7ed733ed806b
[gaim-migrate @ 14281]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11986
diff
changeset
|
2321 | GaimBuddy *b = gaim_contact_get_priority_buddy((GaimContact *)node); |
| 11890 | 2322 | w = h = 0; |
| 12530 | 2323 | for(child = node->child; child; child = child->next) |
| 11890 | 2324 | { |
| 2325 | if(GAIM_BLIST_NODE_IS_BUDDY(child) && buddy_is_displayable((GaimBuddy*)child)) { | |
| 12530 | 2326 | struct tooltip_data *td = create_tip_for_node(child, (b == (GaimBuddy*)child)); |
|
11988
7ed733ed806b
[gaim-migrate @ 14281]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11986
diff
changeset
|
2327 | if (b == (GaimBuddy *)child) { |
|
7ed733ed806b
[gaim-migrate @ 14281]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11986
diff
changeset
|
2328 | gtkblist->tooltipdata = g_list_prepend(gtkblist->tooltipdata, td); |
|
7ed733ed806b
[gaim-migrate @ 14281]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11986
diff
changeset
|
2329 | } else { |
|
7ed733ed806b
[gaim-migrate @ 14281]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11986
diff
changeset
|
2330 | gtkblist->tooltipdata = g_list_append(gtkblist->tooltipdata, td); |
|
7ed733ed806b
[gaim-migrate @ 14281]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11986
diff
changeset
|
2331 | } |
| 11892 | 2332 | w = MAX(w, td->width); |
| 2333 | h += td->height; | |
| 11890 | 2334 | } |
| 2335 | } | |
| 2336 | } else { | |
| 2337 | gtk_widget_destroy(gtkblist->tipwindow); | |
| 11892 | 2338 | gtkblist->tipwindow = NULL; |
| 5234 | 2339 | return FALSE; |
| 11890 | 2340 | } |
| 2341 | ||
| 2342 | if (gtkblist->tooltipdata == NULL) { | |
| 2343 | gtk_widget_destroy(gtkblist->tipwindow); | |
| 11892 | 2344 | gtkblist->tipwindow = NULL; |
| 11890 | 2345 | return FALSE; |
| 2346 | } | |
| 5228 | 2347 | |
| 7636 | 2348 | gtknode = node->ui_data; |
| 2349 | ||
| 5234 | 2350 | gtk_widget_set_app_paintable(gtkblist->tipwindow, TRUE); |
| 2351 | gtk_window_set_resizable(GTK_WINDOW(gtkblist->tipwindow), FALSE); | |
| 2352 | gtk_widget_set_name(gtkblist->tipwindow, "gtk-tooltips"); | |
| 2353 | g_signal_connect(G_OBJECT(gtkblist->tipwindow), "expose_event", | |
| 11890 | 2354 | G_CALLBACK(gaim_gtk_blist_paint_tip), NULL); |
| 5234 | 2355 | gtk_widget_ensure_style (gtkblist->tipwindow); |
| 7837 | 2356 | |
|
9773
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2357 | |
|
9869
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2358 | #if GTK_CHECK_VERSION(2,2,0) |
|
9773
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2359 | gdk_display_get_pointer(gdk_display_get_default(), &screen, &x, &y, NULL); |
|
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2360 | mon_num = gdk_screen_get_monitor_at_point(screen, x, y); |
|
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2361 | gdk_screen_get_monitor_geometry(screen, mon_num, &mon_size); |
|
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2362 | |
|
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2363 | scr_w = mon_size.width + mon_size.x; |
|
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2364 | scr_h = mon_size.height + mon_size.y; |
|
9869
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2365 | #else |
|
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2366 | scr_w = gdk_screen_width(); |
|
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2367 | scr_h = gdk_screen_height(); |
|
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2368 | gdk_window_get_pointer(NULL, &x, &y, NULL); |
|
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2369 | mon_size.x = 0; |
|
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2370 | mon_size.y = 0; |
|
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2371 | #endif |
|
9773
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2372 | |
|
9869
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2373 | #if GTK_CHECK_VERSION(2,2,0) |
|
10046
7e9175ee9b63
[gaim-migrate @ 11007]
Mark Doliner <markdoliner@pidgin.im>
parents:
10036
diff
changeset
|
2374 | if (w > mon_size.width) |
|
9773
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2375 | w = mon_size.width - 10; |
|
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2376 | |
|
10046
7e9175ee9b63
[gaim-migrate @ 11007]
Mark Doliner <markdoliner@pidgin.im>
parents:
10036
diff
changeset
|
2377 | if (h > mon_size.height) |
|
9773
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2378 | h = mon_size.height - 10; |
|
9869
22c820135ca5
[gaim-migrate @ 10748]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9834
diff
changeset
|
2379 | #endif |
|
9773
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2380 | |
| 5234 | 2381 | if (GTK_WIDGET_NO_WINDOW(gtkblist->window)) |
| 2382 | y+=gtkblist->window->allocation.y; | |
| 2383 | ||
| 2384 | x -= ((w >> 1) + 4); | |
| 5228 | 2385 | |
| 7636 | 2386 | if ((y + h + 4) > scr_h || tooltip_top) |
| 7620 | 2387 | y = y - h - 5; |
| 5234 | 2388 | else |
| 2389 | y = y + 6; | |
| 7620 | 2390 | |
|
9773
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2391 | if (y < mon_size.y) |
|
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2392 | y = mon_size.y; |
|
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2393 | |
|
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2394 | if (y != mon_size.y) { |
| 7719 | 2395 | if ((x + w) > scr_w) |
| 2396 | x -= (x + w + 5) - scr_w; | |
|
9773
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2397 | else if (x < mon_size.x) |
|
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2398 | x = mon_size.x; |
| 7719 | 2399 | } else { |
| 2400 | x -= (w / 2 + 10); | |
|
9773
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2401 | if (x < mon_size.x) |
|
68834782c27a
[gaim-migrate @ 10641]
Mark Doliner <markdoliner@pidgin.im>
parents:
9770
diff
changeset
|
2402 | x = mon_size.x; |
| 7719 | 2403 | } |
| 2404 | ||
| 5234 | 2405 | gtk_widget_set_size_request(gtkblist->tipwindow, w, h); |
| 2406 | gtk_window_move(GTK_WINDOW(gtkblist->tipwindow), x, y); | |
| 2407 | gtk_widget_show(gtkblist->tipwindow); | |
| 5228 | 2408 | |
| 2409 | return FALSE; | |
| 2410 | } | |
| 2411 | ||
| 10354 | 2412 | static gboolean gaim_gtk_blist_drag_motion_cb(GtkWidget *tv, GdkDragContext *drag_context, |
| 2413 | gint x, gint y, guint time, gpointer user_data) | |
| 2414 | { | |
| 2415 | GtkTreePath *path; | |
| 2416 | int delay; | |
| 2417 | ||
| 2418 | delay = 500; | |
| 2419 | ||
| 2420 | if (gtkblist->drag_timeout) { | |
| 2421 | if ((y > gtkblist->tip_rect.y) && ((y - gtkblist->tip_rect.height) < gtkblist->tip_rect.y)) | |
| 2422 | return FALSE; | |
| 2423 | /* We've left the cell. Remove the timeout and create a new one below */ | |
| 2424 | g_source_remove(gtkblist->drag_timeout); | |
| 2425 | } | |
| 2426 | ||
| 2427 | gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), x, y, &path, NULL, NULL, NULL); | |
| 2428 | gtk_tree_view_get_cell_area(GTK_TREE_VIEW(tv), path, NULL, >kblist->tip_rect); | |
| 2429 | ||
| 2430 | if (path) | |
| 2431 | gtk_tree_path_free(path); | |
| 2432 | gtkblist->drag_timeout = g_timeout_add(delay, (GSourceFunc)gaim_gtk_blist_expand_timeout, tv); | |
| 2433 | ||
| 2434 | if (gtkblist->mouseover_contact) { | |
| 2435 | if ((y < gtkblist->contact_rect.y) || ((y - gtkblist->contact_rect.height) > gtkblist->contact_rect.y)) { | |
| 2436 | gaim_gtk_blist_collapse_contact_cb(NULL, gtkblist->mouseover_contact); | |
| 2437 | gtkblist->mouseover_contact = NULL; | |
| 2438 | } | |
| 2439 | } | |
| 2440 | ||
| 2441 | return FALSE; | |
| 2442 | } | |
| 2443 | ||
| 5228 | 2444 | static gboolean gaim_gtk_blist_motion_cb (GtkWidget *tv, GdkEventMotion *event, gpointer null) |
| 2445 | { | |
| 2446 | GtkTreePath *path; | |
|
8470
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
2447 | int delay; |
|
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
2448 | |
|
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
2449 | delay = gaim_prefs_get_int("/gaim/gtk/blist/tooltip_delay"); |
|
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
2450 | |
|
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
2451 | if (delay == 0) |
|
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
2452 | return FALSE; |
| 8083 | 2453 | |
| 5228 | 2454 | if (gtkblist->timeout) { |
| 7636 | 2455 | if ((event->y > gtkblist->tip_rect.y) && ((event->y - gtkblist->tip_rect.height) < gtkblist->tip_rect.y)) |
| 5228 | 2456 | return FALSE; |
| 2457 | /* We've left the cell. Remove the timeout and create a new one below */ | |
|
8254
3b3d86ef983b
[gaim-migrate @ 8977]
Mark Doliner <markdoliner@pidgin.im>
parents:
8252
diff
changeset
|
2458 | gaim_gtk_blist_tooltip_destroy(); |
| 5228 | 2459 | g_source_remove(gtkblist->timeout); |
| 2460 | } | |
|
8470
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
2461 | |
| 5228 | 2462 | gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tv), event->x, event->y, &path, NULL, NULL, NULL); |
| 7636 | 2463 | gtk_tree_view_get_cell_area(GTK_TREE_VIEW(tv), path, NULL, >kblist->tip_rect); |
|
8470
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
2464 | |
| 5228 | 2465 | if (path) |
| 2466 | gtk_tree_path_free(path); | |
|
8470
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
2467 | gtkblist->timeout = g_timeout_add(delay, (GSourceFunc)gaim_gtk_blist_tooltip_timeout, tv); |
| 7636 | 2468 | |
| 2469 | if (gtkblist->mouseover_contact) { | |
| 2470 | if ((event->y < gtkblist->contact_rect.y) || ((event->y - gtkblist->contact_rect.height) > gtkblist->contact_rect.y)) { | |
| 2471 | gaim_gtk_blist_collapse_contact_cb(NULL, gtkblist->mouseover_contact); | |
| 2472 | gtkblist->mouseover_contact = NULL; | |
| 2473 | } | |
| 2474 | } | |
|
8470
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
2475 | |
| 5228 | 2476 | return FALSE; |
| 2477 | } | |
| 2478 | ||
| 2479 | static void gaim_gtk_blist_leave_cb (GtkWidget *w, GdkEventCrossing *e, gpointer n) | |
| 2480 | { | |
| 8083 | 2481 | |
| 5228 | 2482 | if (gtkblist->timeout) { |
| 2483 | g_source_remove(gtkblist->timeout); | |
| 2484 | gtkblist->timeout = 0; | |
| 2485 | } | |
|
10382
32e07712e224
[gaim-migrate @ 11608]
Luke Schierer <lschiere@pidgin.im>
parents:
10357
diff
changeset
|
2486 | |
| 10354 | 2487 | if (gtkblist->drag_timeout) { |
| 2488 | g_source_remove(gtkblist->drag_timeout); | |
| 2489 | gtkblist->drag_timeout = 0; | |
| 2490 | } | |
| 2491 | ||
|
8254
3b3d86ef983b
[gaim-migrate @ 8977]
Mark Doliner <markdoliner@pidgin.im>
parents:
8252
diff
changeset
|
2492 | gaim_gtk_blist_tooltip_destroy(); |
| 7720 | 2493 | |
|
8470
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
2494 | if (gtkblist->mouseover_contact && |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
2495 | !((e->x > gtkblist->contact_rect.x) && (e->x < (gtkblist->contact_rect.x + gtkblist->contact_rect.width)) && |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
2496 | (e->y > gtkblist->contact_rect.y) && (e->y < (gtkblist->contact_rect.y + gtkblist->contact_rect.height)))) { |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
2497 | gaim_gtk_blist_collapse_contact_cb(NULL, gtkblist->mouseover_contact); |
| 7636 | 2498 | gtkblist->mouseover_contact = NULL; |
| 2499 | } | |
| 5228 | 2500 | } |
| 2501 | ||
| 2502 | static void | |
| 2503 | toggle_debug(void) | |
| 2504 | { | |
| 7620 | 2505 | gaim_prefs_set_bool("/gaim/gtk/debug/enabled", |
| 2506 | !gaim_prefs_get_bool("/gaim/gtk/debug/enabled")); | |
| 5228 | 2507 | } |
| 2508 | ||
| 2509 | ||
| 2510 | /*************************************************** | |
| 2511 | * Crap * | |
| 2512 | ***************************************************/ | |
| 2513 | static GtkItemFactoryEntry blist_menu[] = | |
| 2514 | { | |
| 2515 | /* Buddies menu */ | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2516 | { N_("/_Buddies"), NULL, NULL, 0, "<Branch>", NULL }, |
|
9714
589046af53cb
[gaim-migrate @ 10575]
Mark Doliner <markdoliner@pidgin.im>
parents:
9713
diff
changeset
|
2517 | { N_("/Buddies/New Instant _Message..."), "<CTL>M", gaim_gtkdialogs_im, 0, "<StockItem>", GAIM_STOCK_IM }, |
|
8940
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
2518 | { N_("/Buddies/Join a _Chat..."), "<CTL>C", gaim_gtk_blist_joinchat_show, 0, "<StockItem>", GAIM_STOCK_CHAT }, |
|
9714
589046af53cb
[gaim-migrate @ 10575]
Mark Doliner <markdoliner@pidgin.im>
parents:
9713
diff
changeset
|
2519 | { N_("/Buddies/Get User _Info..."), "<CTL>I", gaim_gtkdialogs_info, 0, "<StockItem>", GAIM_STOCK_INFO }, |
|
12191
327f2d9ceaa7
[gaim-migrate @ 14493]
Richard Laager <rlaager@pidgin.im>
parents:
12179
diff
changeset
|
2520 | { N_("/Buddies/View User _Log..."), "<CTL>L", gaim_gtkdialogs_log, 0, "<StockItem>", GAIM_STOCK_LOG }, |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2521 | { "/Buddies/sep1", NULL, NULL, 0, "<Separator>", NULL }, |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2522 | { N_("/Buddies/Show _Offline Buddies"), NULL, gaim_gtk_blist_edit_mode_cb, 1, "<CheckItem>", NULL }, |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2523 | { N_("/Buddies/Show _Empty Groups"), NULL, gaim_gtk_blist_show_empty_groups_cb, 1, "<CheckItem>", NULL }, |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2524 | { N_("/Buddies/Show Buddy _Details"), NULL, gaim_gtk_blist_buddy_details_cb, 1, "<CheckItem>", NULL }, |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2525 | { N_("/Buddies/_Sort Buddies"), NULL, NULL, 0, "<Branch>", NULL }, |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2526 | { "/Buddies/sep2", NULL, NULL, 0, "<Separator>", NULL }, |
|
7853
cd8b631ff166
[gaim-migrate @ 8507]
Mark Doliner <markdoliner@pidgin.im>
parents:
7843
diff
changeset
|
2527 | { N_("/Buddies/_Add Buddy..."), "<CTL>B", gaim_gtk_blist_add_buddy_cb, 0, "<StockItem>", GTK_STOCK_ADD }, |
|
cd8b631ff166
[gaim-migrate @ 8507]
Mark Doliner <markdoliner@pidgin.im>
parents:
7843
diff
changeset
|
2528 | { N_("/Buddies/Add C_hat..."), NULL, gaim_gtk_blist_add_chat_cb, 0, "<StockItem>", GTK_STOCK_ADD }, |
|
cd8b631ff166
[gaim-migrate @ 8507]
Mark Doliner <markdoliner@pidgin.im>
parents:
7843
diff
changeset
|
2529 | { N_("/Buddies/Add _Group..."), NULL, gaim_blist_request_add_group, 0, "<StockItem>", GTK_STOCK_ADD }, |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2530 | { "/Buddies/sep2", NULL, NULL, 0, "<Separator>", NULL }, |
|
12300
c24609bae42d
[gaim-migrate @ 14604]
Peter Lawler <pidgin@bleeter.id.au>
parents:
12298
diff
changeset
|
2531 | { N_("/Buddies/_Quit"), "<CTL>Q", gaim_core_quit, 0, "<StockItem>", GTK_STOCK_QUIT }, |
|
c24609bae42d
[gaim-migrate @ 14604]
Peter Lawler <pidgin@bleeter.id.au>
parents:
12298
diff
changeset
|
2532 | |
|
c24609bae42d
[gaim-migrate @ 14604]
Peter Lawler <pidgin@bleeter.id.au>
parents:
12298
diff
changeset
|
2533 | /* Accounts menu */ |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2534 | { N_("/_Accounts"), NULL, NULL, 0, "<Branch>", NULL }, |
| 12348 | 2535 | { N_("/Accounts/Add\\/Edit"), "<CTL>A", gaim_gtk_accounts_window_show, 0, "<StockItem>", GAIM_STOCK_ACCOUNTS }, |
| 5228 | 2536 | |
|
8470
100fc1feea95
[gaim-migrate @ 9203]
Christian Hammond <chipx86@chipx86.com>
parents:
8444
diff
changeset
|
2537 | /* Tools */ |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2538 | { N_("/_Tools"), NULL, NULL, 0, "<Branch>", NULL }, |
|
12191
327f2d9ceaa7
[gaim-migrate @ 14493]
Richard Laager <rlaager@pidgin.im>
parents:
12179
diff
changeset
|
2539 | { N_("/Tools/Buddy _Pounces"), NULL, gaim_gtk_pounces_manager_show, 0, "<StockItem>", GAIM_STOCK_POUNCE }, |
|
12163
483d8be2deec
[gaim-migrate @ 14464]
Richard Laager <rlaager@pidgin.im>
parents:
12136
diff
changeset
|
2540 | { N_("/Tools/Plu_gins"), "<CTL>U", gaim_gtk_plugin_dialog_show, 0, "<StockItem>", GAIM_STOCK_PLUGIN }, |
| 12136 | 2541 | { N_("/Tools/Pr_eferences"), "<CTL>P", gaim_gtk_prefs_show, 0, "<StockItem>", GTK_STOCK_PREFERENCES }, |
| 10694 | 2542 | { N_("/Tools/Pr_ivacy"), NULL, gaim_gtk_privacy_dialog_show, 0, "<StockItem>", GTK_STOCK_DIALOG_ERROR }, |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2543 | { "/Tools/sep2", NULL, NULL, 0, "<Separator>", NULL }, |
| 10019 | 2544 | { N_("/Tools/_File Transfers"), "<CTL>T", gaim_show_xfer_dialog, 0, "<StockItem>", GAIM_STOCK_FILE_TRANSFER }, |
| 10694 | 2545 | { N_("/Tools/R_oom List"), NULL, gaim_gtk_roomlist_dialog_show, 0, "<StockItem>", GTK_STOCK_INDEX }, |
|
12334
f88c9f928f51
[gaim-migrate @ 14638]
Mark Doliner <markdoliner@pidgin.im>
parents:
12333
diff
changeset
|
2546 | { N_("/Tools/System _Log"), NULL, gtk_blist_show_systemlog_cb, 0, "<StockItem>", GAIM_STOCK_LOG }, |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2547 | { "/Tools/sep3", NULL, NULL, 0, "<Separator>", NULL }, |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2548 | { N_("/Tools/Mute _Sounds"), "<CTL>S", gaim_gtk_blist_mute_sounds_cb, 0, "<CheckItem>", NULL }, |
| 5228 | 2549 | |
| 2550 | /* Help */ | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
2551 | { N_("/_Help"), NULL, NULL, 0, "<Branch>", NULL }, |
| 5228 | 2552 | { N_("/Help/Online _Help"), "F1", gtk_blist_show_onlinehelp_cb, 0, "<StockItem>", GTK_STOCK_HELP }, |
|
12333
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
2553 | { N_("/Help/_Debug Window"), NULL, toggle_debug, 0, "<StockItem>", GAIM_STOCK_DEBUG }, |
|
9753
5951fd24250e
[gaim-migrate @ 10620]
Mark Doliner <markdoliner@pidgin.im>
parents:
9749
diff
changeset
|
2554 | { N_("/Help/_About"), NULL, gaim_gtkdialogs_about, 0, "<StockItem>", GAIM_STOCK_ABOUT }, |
| 5228 | 2555 | }; |
| 2556 | ||
| 2557 | /********************************************************* | |
| 2558 | * Private Utility functions * | |
| 2559 | *********************************************************/ | |
| 2560 | ||
| 12530 | 2561 | static char *gaim_get_tooltip_text(GaimBlistNode *node, gboolean full) |
| 5228 | 2562 | { |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2563 | GString *str = g_string_new(""); |
| 5237 | 2564 | GaimPlugin *prpl; |
| 2565 | GaimPluginProtocolInfo *prpl_info = NULL; | |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2566 | char *tmp; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2567 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2568 | if (GAIM_BLIST_NODE_IS_CHAT(node)) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2569 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2570 | GaimChat *chat; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2571 | GList *cur; |
| 5274 | 2572 | struct proto_chat_entry *pce; |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2573 | char *name, *value; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2574 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2575 | chat = (GaimChat *)node; |
| 7956 | 2576 | prpl = gaim_find_prpl(gaim_account_get_protocol_id(chat->account)); |
| 5274 | 2577 | prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); |
| 2578 | ||
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2579 | tmp = g_markup_escape_text(gaim_chat_get_name(chat), -1); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2580 | g_string_append_printf(str, "<span size='larger' weight='bold'>%s</span>", tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2581 | g_free(tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2582 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2583 | if (g_list_length(gaim_connections_get_all()) > 1) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2584 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2585 | tmp = g_markup_escape_text(chat->account->username, -1); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2586 | g_string_append_printf(str, _("\n<b>Account:</b> %s"), tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2587 | g_free(tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2588 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2589 | |
| 9959 | 2590 | if (prpl_info->chat_info != NULL) |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2591 | cur = prpl_info->chat_info(chat->account->gc); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2592 | else |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2593 | cur = NULL; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2594 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2595 | while (cur != NULL) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2596 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2597 | pce = cur->data; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2598 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2599 | if (!pce->secret && (!pce->required && |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2600 | g_hash_table_lookup(chat->components, pce->identifier) == NULL)) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2601 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2602 | tmp = gaim_text_strip_mnemonic(pce->label); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2603 | name = g_markup_escape_text(tmp, -1); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2604 | g_free(tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2605 | value = g_markup_escape_text(g_hash_table_lookup( |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2606 | chat->components, pce->identifier), -1); |
|
10924
248233a58180
[gaim-migrate @ 12695]
Daniel Atallah <datallah@pidgin.im>
parents:
10918
diff
changeset
|
2607 | g_string_append_printf(str, "\n<b>%s</b> %s", |
|
248233a58180
[gaim-migrate @ 12695]
Daniel Atallah <datallah@pidgin.im>
parents:
10918
diff
changeset
|
2608 | name ? name : "", |
|
248233a58180
[gaim-migrate @ 12695]
Daniel Atallah <datallah@pidgin.im>
parents:
10918
diff
changeset
|
2609 | value ? value : ""); |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2610 | g_free(name); |
| 8020 | 2611 | g_free(value); |
| 2612 | } | |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2613 | |
| 5274 | 2614 | g_free(pce); |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2615 | cur = g_list_remove(cur, pce); |
| 5274 | 2616 | } |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2617 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2618 | else if (GAIM_BLIST_NODE_IS_CONTACT(node) || GAIM_BLIST_NODE_IS_BUDDY(node)) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2619 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2620 | GaimContact *c; |
| 7620 | 2621 | GaimBuddy *b; |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2622 | GaimPresence *presence; |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2623 | char *tmp; |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2624 | gboolean idle; |
|
10567
87b02dd40349
[gaim-migrate @ 11951]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10544
diff
changeset
|
2625 | time_t idle_secs, signon; |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2626 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2627 | if (GAIM_BLIST_NODE_IS_CONTACT(node)) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2628 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2629 | c = (GaimContact *)node; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2630 | b = gaim_contact_get_priority_buddy(c); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2631 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2632 | else |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2633 | { |
| 7620 | 2634 | b = (GaimBuddy *)node; |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2635 | c = gaim_buddy_get_contact(b); |
| 7620 | 2636 | } |
| 2637 | ||
| 7956 | 2638 | prpl = gaim_find_prpl(gaim_account_get_protocol_id(b->account)); |
| 5234 | 2639 | prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); |
| 2640 | ||
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2641 | presence = gaim_buddy_get_presence(b); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2642 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2643 | /* Buddy Name */ |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2644 | tmp = g_markup_escape_text(gaim_buddy_get_name(b), -1); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2645 | g_string_append_printf(str, "<span size='larger' weight='bold'>%s</span>", tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2646 | g_free(tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2647 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2648 | /* Account */ |
| 12530 | 2649 | if (full && g_list_length(gaim_connections_get_all()) > 1) |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2650 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2651 | tmp = g_markup_escape_text(gaim_account_get_username( |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2652 | gaim_buddy_get_account(b)), -1); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2653 | g_string_append_printf(str, _("\n<b>Account:</b> %s"), tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2654 | g_free(tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2655 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2656 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2657 | /* Contact Alias */ |
| 12530 | 2658 | if (full && GAIM_BLIST_NODE_IS_CONTACT(node) && |
|
10499
265bcc62a1cc
[gaim-migrate @ 11791]
Mark Doliner <markdoliner@pidgin.im>
parents:
10484
diff
changeset
|
2659 | (c->alias != NULL)) |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2660 | { |
|
10499
265bcc62a1cc
[gaim-migrate @ 11791]
Mark Doliner <markdoliner@pidgin.im>
parents:
10484
diff
changeset
|
2661 | tmp = g_markup_escape_text(c->alias, -1); |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2662 | g_string_append_printf(str, _("\n<b>Contact Alias:</b> %s"), tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2663 | g_free(tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2664 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2665 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2666 | /* Alias */ |
| 12530 | 2667 | if (full && (b->alias != NULL) && (b->alias[0] != '\0')) |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2668 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2669 | tmp = g_markup_escape_text(b->alias, -1); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2670 | g_string_append_printf(str, _("\n<b>Alias:</b> %s"), tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2671 | g_free(tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2672 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2673 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2674 | /* Nickname/Server Alias */ |
| 12530 | 2675 | if (full && b->server_alias != NULL) |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2676 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2677 | tmp = g_markup_escape_text(b->server_alias, -1); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2678 | g_string_append_printf(str, _("\n<b>Nickname:</b> %s"), tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2679 | g_free(tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2680 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2681 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2682 | /* Logged In */ |
|
10567
87b02dd40349
[gaim-migrate @ 11951]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10544
diff
changeset
|
2683 | signon = gaim_presence_get_login_time(presence); |
| 12530 | 2684 | if (full && GAIM_BUDDY_IS_ONLINE(b) && signon > 0) |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2685 | { |
|
10567
87b02dd40349
[gaim-migrate @ 11951]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10544
diff
changeset
|
2686 | tmp = gaim_str_seconds_to_string(time(NULL) - signon); |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2687 | g_string_append_printf(str, _("\n<b>Logged In:</b> %s"), tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2688 | g_free(tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2689 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2690 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2691 | /* Idle */ |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2692 | idle = gaim_presence_is_idle(presence); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2693 | if (idle) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2694 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2695 | idle_secs = gaim_presence_get_idle_time(presence); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2696 | if (idle_secs > 0) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2697 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2698 | tmp = gaim_str_seconds_to_string(time(NULL) - idle_secs); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2699 | g_string_append_printf(str, _("\n<b>Idle:</b> %s"), tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2700 | g_free(tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2701 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2702 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2703 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2704 | /* Last Seen */ |
| 11910 | 2705 | if (!GAIM_BUDDY_IS_ONLINE(b)) |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2706 | { |
|
11023
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2707 | struct _gaim_gtk_blist_node *gtknode = ((GaimBlistNode *)c)->ui_data; |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2708 | GaimBlistNode *bnode; |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2709 | int lastseen = 0; |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2710 | |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2711 | if (!gtknode->contact_expanded || GAIM_BLIST_NODE_IS_CONTACT(node)) |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2712 | { |
|
11437
20ba0815b4f8
[gaim-migrate @ 13674]
Richard Laager <rlaager@pidgin.im>
parents:
11436
diff
changeset
|
2713 | /* We're either looking at a buddy for a collapsed contact or |
|
11438
46e5a461d0aa
[gaim-migrate @ 13675]
Richard Laager <rlaager@pidgin.im>
parents:
11437
diff
changeset
|
2714 | * an expanded contact itself so we show the most recent |
|
11023
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2715 | * (largest) last_seen time for any of the buddies under |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2716 | * the contact. */ |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2717 | for (bnode = ((GaimBlistNode *)c)->child ; bnode != NULL ; bnode = bnode->next) |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2718 | { |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2719 | int value = gaim_blist_node_get_int(bnode, "last_seen"); |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2720 | if (value > lastseen) |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2721 | lastseen = value; |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2722 | } |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2723 | } |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2724 | else |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2725 | { |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2726 | /* We're dealing with a buddy under an expanded contact, |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2727 | * so we show the last_seen time for the buddy. */ |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2728 | lastseen = gaim_blist_node_get_int(&b->node, "last_seen"); |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2729 | } |
|
1e39a0e74a18
[gaim-migrate @ 12895]
Richard Laager <rlaager@pidgin.im>
parents:
11018
diff
changeset
|
2730 | |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2731 | if (lastseen > 0) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2732 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2733 | tmp = gaim_str_seconds_to_string(time(NULL) - lastseen); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2734 | g_string_append_printf(str, _("\n<b>Last Seen:</b> %s ago"), tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2735 | g_free(tmp); |
| 5234 | 2736 | } |
| 2737 | } | |
| 2738 | ||
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2739 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2740 | /* Offline? */ |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2741 | if (!GAIM_BUDDY_IS_ONLINE(b)) { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2742 | g_string_append_printf(str, _("\n<b>Status:</b> Offline")); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2743 | } |
|
10992
ccf59743dae4
[gaim-migrate @ 12830]
Daniel Atallah <datallah@pidgin.im>
parents:
10968
diff
changeset
|
2744 | |
|
ccf59743dae4
[gaim-migrate @ 12830]
Daniel Atallah <datallah@pidgin.im>
parents:
10968
diff
changeset
|
2745 | if (prpl_info && prpl_info->tooltip_text) |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2746 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2747 | /* Additional text from the PRPL */ |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2748 | const char *end; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2749 | tmp = prpl_info->tooltip_text(b); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2750 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2751 | if (tmp && !g_utf8_validate(tmp, -1, &end)) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2752 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2753 | char *new = g_strndup(tmp, g_utf8_pointer_to_offset(tmp, end)); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2754 | g_free(tmp); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2755 | tmp = new; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2756 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2757 | |
|
11634
a22747609a84
[gaim-migrate @ 13910]
Mark Doliner <markdoliner@pidgin.im>
parents:
11624
diff
changeset
|
2758 | if (tmp != NULL) |
|
a22747609a84
[gaim-migrate @ 13910]
Mark Doliner <markdoliner@pidgin.im>
parents:
11624
diff
changeset
|
2759 | g_string_append(str, tmp); |
|
10476
7c4035135c73
[gaim-migrate @ 11763]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10475
diff
changeset
|
2760 | g_free(tmp); |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2761 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2762 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2763 | /* These are Easter Eggs. Patches to remove them will be rejected. */ |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2764 | if (!g_ascii_strcasecmp(b->name, "robflynn")) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2765 | g_string_append(str, _("\n<b>Description:</b> Spooky")); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2766 | if (!g_ascii_strcasecmp(b->name, "seanegn")) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2767 | g_string_append(str, _("\n<b>Status:</b> Awesome")); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2768 | if (!g_ascii_strcasecmp(b->name, "chipx86")) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2769 | g_string_append(str, _("\n<b>Status:</b> Rockin'")); |
| 5234 | 2770 | } |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2771 | |
| 8824 | 2772 | gaim_signal_emit(gaim_gtk_blist_get_handle(), |
|
10477
7d0641ba585c
[gaim-migrate @ 11764]
Mark Doliner <markdoliner@pidgin.im>
parents:
10476
diff
changeset
|
2773 | "drawing-tooltip", node, str); |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2774 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
2775 | return g_string_free(str, FALSE); |
| 5228 | 2776 | } |
| 2777 | ||
| 7620 | 2778 | struct _emblem_data { |
| 9954 | 2779 | const char *filename; |
| 7620 | 2780 | int x; |
| 2781 | int y; | |
| 2782 | }; | |
| 2783 | ||
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2784 | GdkPixbuf * |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2785 | gaim_gtk_blist_get_status_icon(GaimBlistNode *node, GaimStatusIconSize size) |
| 5228 | 2786 | { |
| 7620 | 2787 | GdkPixbuf *scale, *status = NULL; |
| 2788 | int i, scalesize = 30; | |
| 2789 | char *filename; | |
| 5228 | 2790 | const char *protoname = NULL; |
| 7620 | 2791 | struct _gaim_gtk_blist_node *gtknode = node->ui_data; |
| 11910 | 2792 | struct _gaim_gtk_blist_node *gtkbuddynode = NULL; |
| 7620 | 2793 | struct _emblem_data emblems[4] = {{NULL, 15, 15}, {NULL, 0, 15}, |
| 2794 | {NULL, 0, 0}, {NULL, 15, 0}}; | |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2795 | GaimPresence *presence = NULL; |
| 7620 | 2796 | GaimBuddy *buddy = NULL; |
| 2797 | GaimChat *chat = NULL; | |
| 2798 | ||
| 2799 | if(GAIM_BLIST_NODE_IS_CONTACT(node)) { | |
| 11910 | 2800 | if(!gtknode->contact_expanded) { |
| 7620 | 2801 | buddy = gaim_contact_get_priority_buddy((GaimContact*)node); |
| 11910 | 2802 | gtkbuddynode = ((GaimBlistNode*)buddy)->ui_data; |
| 2803 | } | |
| 7620 | 2804 | } else if(GAIM_BLIST_NODE_IS_BUDDY(node)) { |
| 2805 | buddy = (GaimBuddy*)node; | |
| 11910 | 2806 | gtkbuddynode = node->ui_data; |
| 7620 | 2807 | } else if(GAIM_BLIST_NODE_IS_CHAT(node)) { |
| 2808 | chat = (GaimChat*)node; | |
| 2809 | } else { | |
| 5228 | 2810 | return NULL; |
| 5234 | 2811 | } |
| 2812 | ||
| 7620 | 2813 | if(buddy || chat) { |
| 2814 | GaimAccount *account; | |
| 2815 | GaimPlugin *prpl; | |
| 2816 | GaimPluginProtocolInfo *prpl_info; | |
| 2817 | ||
| 2818 | if(buddy) | |
| 2819 | account = buddy->account; | |
| 2820 | else | |
| 2821 | account = chat->account; | |
| 2822 | ||
| 7956 | 2823 | prpl = gaim_find_prpl(gaim_account_get_protocol_id(account)); |
| 7620 | 2824 | if(!prpl) |
| 2825 | return NULL; | |
| 2826 | ||
| 2827 | prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); | |
| 2828 | ||
| 2829 | if(prpl_info && prpl_info->list_icon) { | |
| 2830 | protoname = prpl_info->list_icon(account, buddy); | |
| 2831 | } | |
| 2832 | if(prpl_info && prpl_info->list_emblems && buddy) { | |
|
11924
a42748d67df3
[gaim-migrate @ 14215]
Mark Doliner <markdoliner@pidgin.im>
parents:
11923
diff
changeset
|
2833 | if(gtknode && !gtknode->recent_signonoff) |
| 7620 | 2834 | prpl_info->list_emblems(buddy, &emblems[0].filename, |
| 2835 | &emblems[1].filename, &emblems[2].filename, | |
| 2836 | &emblems[3].filename); | |
| 2837 | } | |
| 5234 | 2838 | } |
| 5228 | 2839 | |
| 7620 | 2840 | if(size == GAIM_STATUS_ICON_SMALL) { |
| 5228 | 2841 | scalesize = 15; |
| 7620 | 2842 | /* So that only the se icon will composite */ |
| 2843 | emblems[1].filename = emblems[2].filename = emblems[3].filename = NULL; | |
| 5228 | 2844 | } |
| 2845 | ||
| 11917 | 2846 | if(buddy && GAIM_BUDDY_IS_ONLINE(buddy) && gtkbuddynode && gtkbuddynode->recent_signonoff) { |
| 7620 | 2847 | filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "login.png", NULL); |
| 11917 | 2848 | } else if(buddy && !GAIM_BUDDY_IS_ONLINE(buddy) && gtkbuddynode && gtkbuddynode->recent_signonoff) { |
| 7620 | 2849 | filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "logout.png", NULL); |
| 2850 | } else if(buddy || chat) { | |
| 5228 | 2851 | char *image = g_strdup_printf("%s.png", protoname); |
| 2852 | filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", image, NULL); | |
| 2853 | g_free(image); | |
| 7620 | 2854 | } else { |
| 2855 | /* gaim dude */ | |
| 2856 | filename = g_build_filename(DATADIR, "pixmaps", "gaim.png", NULL); | |
| 5228 | 2857 | } |
| 7620 | 2858 | |
| 2859 | status = gdk_pixbuf_new_from_file(filename, NULL); | |
| 2860 | g_free(filename); | |
| 2861 | ||
| 2862 | if(!status) | |
| 2863 | return NULL; | |
| 2864 | ||
| 2865 | scale = gdk_pixbuf_scale_simple(status, scalesize, scalesize, | |
| 2866 | GDK_INTERP_BILINEAR); | |
| 2867 | g_object_unref(status); | |
| 2868 | ||
| 2869 | for(i=0; i<4; i++) { | |
| 2870 | if(emblems[i].filename) { | |
| 2871 | GdkPixbuf *emblem; | |
| 2872 | char *image = g_strdup_printf("%s.png", emblems[i].filename); | |
| 2873 | filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", image, NULL); | |
| 2874 | g_free(image); | |
| 2875 | emblem = gdk_pixbuf_new_from_file(filename, NULL); | |
| 2876 | g_free(filename); | |
| 2877 | if(emblem) { | |
| 2878 | if(i == 0 && size == GAIM_STATUS_ICON_SMALL) { | |
| 2879 | gdk_pixbuf_composite(emblem, | |
| 2880 | scale, 5, 5, | |
| 2881 | 10, 10, | |
| 2882 | 5, 5, | |
| 2883 | .6, .6, | |
| 2884 | GDK_INTERP_BILINEAR, | |
| 2885 | 255); | |
| 2886 | } else { | |
| 2887 | gdk_pixbuf_composite(emblem, | |
| 2888 | scale, emblems[i].x, emblems[i].y, | |
| 2889 | 15, 15, | |
| 2890 | emblems[i].x, emblems[i].y, | |
| 2891 | 1, 1, | |
| 2892 | GDK_INTERP_BILINEAR, | |
| 2893 | 255); | |
| 2894 | } | |
| 2895 | g_object_unref(emblem); | |
| 2896 | } | |
| 5228 | 2897 | } |
| 2898 | } | |
| 7620 | 2899 | |
| 2900 | if(buddy) { | |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2901 | presence = gaim_buddy_get_presence(buddy); |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2902 | |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2903 | if (!GAIM_BUDDY_IS_ONLINE(buddy)) |
| 7620 | 2904 | gdk_pixbuf_saturate_and_pixelate(scale, scale, 0.0, FALSE); |
| 10118 | 2905 | else if (gaim_presence_is_idle(presence)) |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2906 | { |
| 7620 | 2907 | gdk_pixbuf_saturate_and_pixelate(scale, scale, 0.25, FALSE); |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2908 | } |
|
11111
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2909 | |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2910 | if (!gaim_privacy_check(buddy->account, gaim_buddy_get_name(buddy))) |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2911 | { |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2912 | GdkPixbuf *emblem; |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2913 | char *filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "blocked.png", NULL); |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2914 | |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2915 | emblem = gdk_pixbuf_new_from_file(filename, NULL); |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2916 | g_free(filename); |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2917 | |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2918 | if (emblem) |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2919 | { |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2920 | gdk_pixbuf_composite(emblem, scale, |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2921 | 0, 0, scalesize, scalesize, |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2922 | 0, 0, |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2923 | (double)scalesize / gdk_pixbuf_get_width(emblem), |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2924 | (double)scalesize / gdk_pixbuf_get_height(emblem), |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2925 | GDK_INTERP_BILINEAR, |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2926 | 224); |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2927 | g_object_unref(emblem); |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2928 | } |
|
4621d9b973a4
[gaim-migrate @ 13163]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11059
diff
changeset
|
2929 | } |
| 5228 | 2930 | } |
| 7620 | 2931 | |
| 5228 | 2932 | return scale; |
| 2933 | } | |
| 2934 | ||
| 7620 | 2935 | static gchar *gaim_gtk_blist_get_name_markup(GaimBuddy *b, gboolean selected) |
| 5228 | 2936 | { |
| 7620 | 2937 | const char *name; |
| 2938 | char *esc, *text = NULL; | |
| 5228 | 2939 | GaimPlugin *prpl; |
| 2940 | GaimPluginProtocolInfo *prpl_info = NULL; | |
| 7620 | 2941 | GaimContact *contact; |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2942 | GaimPresence *presence; |
| 7620 | 2943 | struct _gaim_gtk_blist_node *gtkcontactnode = NULL; |
| 11257 | 2944 | char *idletime = NULL, *statustext = NULL; |
| 5228 | 2945 | time_t t; |
| 7620 | 2946 | /* XXX Clean up this crap */ |
| 2947 | ||
| 2948 | contact = (GaimContact*)((GaimBlistNode*)b)->parent; | |
| 2949 | if(contact) | |
| 2950 | gtkcontactnode = ((GaimBlistNode*)contact)->ui_data; | |
| 2951 | ||
| 2952 | if(gtkcontactnode && !gtkcontactnode->contact_expanded && contact->alias) | |
| 2953 | name = contact->alias; | |
| 2954 | else | |
|
9620
fe99fcea5c1c
[gaim-migrate @ 10464]
Christopher O'Brien <siege@pidgin.im>
parents:
9606
diff
changeset
|
2955 | name = gaim_buddy_get_alias(b); |
| 7620 | 2956 | esc = g_markup_escape_text(name, strlen(name)); |
| 2957 | ||
| 7956 | 2958 | prpl = gaim_find_prpl(gaim_account_get_protocol_id(b->account)); |
| 5228 | 2959 | |
| 2960 | if (prpl != NULL) | |
| 2961 | prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); | |
| 2962 | ||
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2963 | presence = gaim_buddy_get_presence(b); |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2964 | |
| 7620 | 2965 | if (!gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) { |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2966 | |
| 10118 | 2967 | if ((gaim_presence_is_idle(presence) || !GAIM_BUDDY_IS_ONLINE(b)) && !selected) |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2968 | { |
| 10118 | 2969 | text = g_strdup_printf("<span color='%s'>%s</span>", |
| 2970 | dim_grey(), esc); | |
| 5228 | 2971 | g_free(esc); |
| 2972 | return text; | |
| 7620 | 2973 | } |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
2974 | else |
| 5228 | 2975 | return esc; |
| 2976 | } | |
| 2977 | ||
|
8122
64dc12809940
[gaim-migrate @ 8826]
Christian Hammond <chipx86@chipx86.com>
parents:
8113
diff
changeset
|
2978 | if (prpl_info && prpl_info->status_text && b->account->gc) { |
| 5228 | 2979 | char *tmp = prpl_info->status_text(b); |
| 2980 | const char *end; | |
| 2981 | ||
| 2982 | if(tmp && !g_utf8_validate(tmp, -1, &end)) { | |
| 2983 | char *new = g_strndup(tmp, | |
| 2984 | g_utf8_pointer_to_offset(tmp, end)); | |
| 2985 | g_free(tmp); | |
| 2986 | tmp = new; | |
| 2987 | } | |
| 2988 | ||
| 10288 | 2989 | #if !GTK_CHECK_VERSION(2,6,0) |
| 5228 | 2990 | if(tmp) { |
| 2991 | char buf[32]; | |
| 2992 | char *c = tmp; | |
| 2993 | int length = 0, vis=0; | |
| 2994 | gboolean inside = FALSE; | |
| 2995 | g_strdelimit(tmp, "\n", ' '); | |
|
11920
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11917
diff
changeset
|
2996 | gaim_str_strip_char(tmp, '\r'); |
| 5228 | 2997 | |
| 2998 | while(*c && vis < 20) { | |
| 2999 | if(*c == '&') | |
| 3000 | inside = TRUE; | |
| 3001 | else if(*c == ';') | |
| 3002 | inside = FALSE; | |
| 3003 | if(!inside) | |
| 3004 | vis++; | |
| 7620 | 3005 | c = g_utf8_next_char(c); /* this is fun */ |
| 5228 | 3006 | } |
| 3007 | ||
| 7620 | 3008 | length = c - tmp; |
| 3009 | ||
| 5228 | 3010 | if(vis == 20) |
| 3011 | g_snprintf(buf, sizeof(buf), "%%.%ds...", length); | |
| 3012 | else | |
| 3013 | g_snprintf(buf, sizeof(buf), "%%s "); | |
| 3014 | ||
| 3015 | statustext = g_strdup_printf(buf, tmp); | |
| 3016 | ||
| 3017 | g_free(tmp); | |
| 3018 | } | |
| 10288 | 3019 | #else |
| 12437 | 3020 | if(tmp) |
| 3021 | g_strdelimit(tmp, "\n", ' '); | |
| 10288 | 3022 | statustext = tmp; |
| 3023 | #endif | |
| 5228 | 3024 | } |
| 3025 | ||
| 10351 | 3026 | if (gaim_presence_is_idle(presence)) { |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3027 | time_t idle_secs = gaim_presence_get_idle_time(presence); |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3028 | |
| 10351 | 3029 | if (idle_secs > 0) { |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3030 | int ihrs, imin; |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3031 | |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3032 | time(&t); |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3033 | ihrs = (t - idle_secs) / 3600; |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3034 | imin = ((t - idle_secs) / 60) % 60; |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3035 | |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3036 | if (ihrs) |
|
12450
39c1b70f3997
[gaim-migrate @ 14759]
Mark Doliner <markdoliner@pidgin.im>
parents:
12437
diff
changeset
|
3037 | idletime = g_strdup_printf(_("Idle %dh %02dm"), ihrs, imin); |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3038 | else |
|
12450
39c1b70f3997
[gaim-migrate @ 14759]
Mark Doliner <markdoliner@pidgin.im>
parents:
12437
diff
changeset
|
3039 | idletime = g_strdup_printf(_("Idle %dm"), imin); |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3040 | } |
| 5228 | 3041 | else |
|
12450
39c1b70f3997
[gaim-migrate @ 14759]
Mark Doliner <markdoliner@pidgin.im>
parents:
12437
diff
changeset
|
3042 | idletime = g_strdup(_("Idle")); |
| 5228 | 3043 | } |
| 3044 | ||
| 3045 | if(!GAIM_BUDDY_IS_ONLINE(b) && !statustext) | |
| 7620 | 3046 | statustext = g_strdup(_("Offline ")); |
| 3047 | ||
| 10118 | 3048 | if (gaim_presence_is_idle(presence) && !selected) { |
| 3049 | text = g_strdup_printf("<span color='%s'>%s</span>\n" | |
| 11257 | 3050 | "<span color='%s' size='smaller'>%s%s%s</span>", |
| 10118 | 3051 | dim_grey(), esc, dim_grey(), |
|
12366
dfc28505ed56
[gaim-migrate @ 14670]
Mark Doliner <markdoliner@pidgin.im>
parents:
12357
diff
changeset
|
3052 | idletime != NULL ? idletime : "", |
|
11134
15a1c78f84a7
[gaim-migrate @ 13195]
Richard Laager <rlaager@pidgin.im>
parents:
11111
diff
changeset
|
3053 | (idletime != NULL && statustext != NULL) ? " - " : "", |
|
12366
dfc28505ed56
[gaim-migrate @ 14670]
Mark Doliner <markdoliner@pidgin.im>
parents:
12357
diff
changeset
|
3054 | statustext != NULL ? statustext : ""); |
| 11257 | 3055 | } else if (statustext == NULL && idletime == NULL && GAIM_BUDDY_IS_ONLINE(b)) { |
| 5228 | 3056 | text = g_strdup(esc); |
| 3057 | } else { | |
| 10118 | 3058 | if (selected) |
| 3059 | text = g_strdup_printf("%s\n" | |
| 11257 | 3060 | "<span size='smaller'>%s%s%s</span>", esc, |
|
12366
dfc28505ed56
[gaim-migrate @ 14670]
Mark Doliner <markdoliner@pidgin.im>
parents:
12357
diff
changeset
|
3061 | idletime != NULL ? idletime : "", |
|
11134
15a1c78f84a7
[gaim-migrate @ 13195]
Richard Laager <rlaager@pidgin.im>
parents:
11111
diff
changeset
|
3062 | (idletime != NULL && statustext != NULL) ? " - " : "", |
|
12366
dfc28505ed56
[gaim-migrate @ 14670]
Mark Doliner <markdoliner@pidgin.im>
parents:
12357
diff
changeset
|
3063 | statustext != NULL ? statustext : ""); |
| 10118 | 3064 | else |
| 3065 | text = g_strdup_printf("%s\n" | |
| 11257 | 3066 | "<span color='%s' size='smaller'>%s%s%s</span>", esc, |
|
10144
22c7584a403d
[gaim-migrate @ 11216]
Mark Doliner <markdoliner@pidgin.im>
parents:
10129
diff
changeset
|
3067 | dim_grey(), |
|
12366
dfc28505ed56
[gaim-migrate @ 14670]
Mark Doliner <markdoliner@pidgin.im>
parents:
12357
diff
changeset
|
3068 | idletime != NULL ? idletime : "", |
|
11134
15a1c78f84a7
[gaim-migrate @ 13195]
Richard Laager <rlaager@pidgin.im>
parents:
11111
diff
changeset
|
3069 | (idletime != NULL && statustext != NULL) ? " - " : "", |
|
12366
dfc28505ed56
[gaim-migrate @ 14670]
Mark Doliner <markdoliner@pidgin.im>
parents:
12357
diff
changeset
|
3070 | statustext != NULL ? statustext : ""); |
| 5228 | 3071 | } |
| 3072 | if (idletime) | |
| 3073 | g_free(idletime); | |
| 3074 | if (statustext) | |
| 3075 | g_free(statustext); | |
| 3076 | if (esc) | |
| 3077 | g_free(esc); | |
| 3078 | ||
| 3079 | return text; | |
| 3080 | } | |
| 3081 | ||
| 3082 | static void gaim_gtk_blist_restore_position() | |
| 3083 | { | |
| 7620 | 3084 | int blist_x, blist_y, blist_width, blist_height; |
| 3085 | ||
| 3086 | blist_width = gaim_prefs_get_int("/gaim/gtk/blist/width"); | |
| 3087 | ||
| 3088 | /* if the window exists, is hidden, we're saving positions, and the | |
| 3089 | * position is sane... */ | |
| 3090 | if (gtkblist && gtkblist->window && | |
| 3091 | !GTK_WIDGET_VISIBLE(gtkblist->window) && blist_width != 0) { | |
| 3092 | ||
| 3093 | blist_x = gaim_prefs_get_int("/gaim/gtk/blist/x"); | |
| 3094 | blist_y = gaim_prefs_get_int("/gaim/gtk/blist/y"); | |
| 3095 | blist_height = gaim_prefs_get_int("/gaim/gtk/blist/height"); | |
| 3096 | ||
| 5228 | 3097 | /* ...check position is on screen... */ |
| 7620 | 3098 | if (blist_x >= gdk_screen_width()) |
| 3099 | blist_x = gdk_screen_width() - 100; | |
| 3100 | else if (blist_x + blist_width < 0) | |
| 3101 | blist_x = 100; | |
| 3102 | ||
| 3103 | if (blist_y >= gdk_screen_height()) | |
| 3104 | blist_y = gdk_screen_height() - 100; | |
| 3105 | else if (blist_y + blist_height < 0) | |
| 3106 | blist_y = 100; | |
| 3107 | ||
| 5228 | 3108 | /* ...and move it back. */ |
| 7620 | 3109 | gtk_window_move(GTK_WINDOW(gtkblist->window), blist_x, blist_y); |
| 3110 | gtk_window_resize(GTK_WINDOW(gtkblist->window), blist_width, blist_height); | |
|
12279
9418540cb3bb
[gaim-migrate @ 14583]
Casey Harkins <charkins@pidgin.im>
parents:
12246
diff
changeset
|
3111 | if (gaim_prefs_get_bool("/gaim/gtk/blist/list_maximized")) |
|
9418540cb3bb
[gaim-migrate @ 14583]
Casey Harkins <charkins@pidgin.im>
parents:
12246
diff
changeset
|
3112 | gtk_window_maximize(GTK_WINDOW(gtkblist->window)); |
| 5228 | 3113 | } |
| 3114 | } | |
| 3115 | ||
| 7620 | 3116 | static gboolean gaim_gtk_blist_refresh_timer(GaimBuddyList *list) |
| 5228 | 3117 | { |
| 7620 | 3118 | GaimBlistNode *gnode, *cnode; |
| 3119 | ||
| 3120 | for(gnode = list->root; gnode; gnode = gnode->next) { | |
| 3121 | if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
| 5234 | 3122 | continue; |
| 7620 | 3123 | for(cnode = gnode->child; cnode; cnode = cnode->next) { |
| 3124 | if(GAIM_BLIST_NODE_IS_CONTACT(cnode)) { | |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3125 | GaimBuddy *buddy; |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3126 | |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3127 | buddy = gaim_contact_get_priority_buddy((GaimContact*)cnode); |
| 10012 | 3128 | |
| 3129 | if (buddy && | |
| 3130 | gaim_presence_is_idle(gaim_buddy_get_presence(buddy))) | |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3131 | gaim_gtk_blist_update(list, cnode); |
| 7620 | 3132 | } |
| 5228 | 3133 | } |
| 3134 | } | |
| 3135 | ||
| 3136 | /* keep on going */ | |
| 3137 | return TRUE; | |
| 3138 | } | |
| 3139 | ||
| 7620 | 3140 | static void gaim_gtk_blist_hide_node(GaimBuddyList *list, GaimBlistNode *node) |
| 5260 | 3141 | { |
| 3142 | struct _gaim_gtk_blist_node *gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; | |
| 3143 | GtkTreeIter iter; | |
| 3144 | ||
| 3145 | if (!gtknode || !gtknode->row || !gtkblist) | |
| 3146 | return; | |
| 3147 | ||
| 3148 | if(gtkblist->selected_node == node) | |
| 3149 | gtkblist->selected_node = NULL; | |
| 3150 | ||
| 3151 | if (get_iter_from_node(node, &iter)) { | |
| 3152 | gtk_tree_store_remove(gtkblist->treemodel, &iter); | |
| 7620 | 3153 | if(GAIM_BLIST_NODE_IS_CONTACT(node) || GAIM_BLIST_NODE_IS_BUDDY(node) |
| 3154 | || GAIM_BLIST_NODE_IS_CHAT(node)) { | |
| 5260 | 3155 | gaim_gtk_blist_update(list, node->parent); |
| 3156 | } | |
| 3157 | } | |
| 3158 | gtk_tree_row_reference_free(gtknode->row); | |
| 3159 | gtknode->row = NULL; | |
| 3160 | } | |
| 3161 | ||
|
10352
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3162 | static const char *require_connection[] = |
| 7620 | 3163 | { |
|
10352
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3164 | N_("/Buddies/New Instant Message..."), |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3165 | N_("/Buddies/Join a Chat..."), |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3166 | N_("/Buddies/Get User Info..."), |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3167 | N_("/Buddies/Add Buddy..."), |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3168 | N_("/Buddies/Add Chat..."), |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3169 | N_("/Buddies/Add Group..."), |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3170 | }; |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3171 | |
|
10357
f5ad7a664200
[gaim-migrate @ 11575]
Mark Doliner <markdoliner@pidgin.im>
parents:
10354
diff
changeset
|
3172 | static const int require_connection_size = sizeof(require_connection) |
|
f5ad7a664200
[gaim-migrate @ 11575]
Mark Doliner <markdoliner@pidgin.im>
parents:
10354
diff
changeset
|
3173 | / sizeof(*require_connection); |
|
10352
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3174 | |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3175 | /** |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3176 | * Rebuild dynamic menus and make menu items sensitive/insensitive |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3177 | * where appropriate. |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3178 | */ |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3179 | static void |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3180 | update_menu_bar(GaimGtkBuddyList *gtkblist) |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3181 | { |
|
8937
b436e9cbd701
[gaim-migrate @ 9707]
Mark Doliner <markdoliner@pidgin.im>
parents:
8911
diff
changeset
|
3182 | GtkWidget *widget; |
|
10352
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3183 | gboolean sensitive; |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3184 | int i; |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3185 | |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3186 | g_return_if_fail(gtkblist != NULL); |
|
8259
7ed91862683d
[gaim-migrate @ 8982]
Christian Hammond <chipx86@chipx86.com>
parents:
8254
diff
changeset
|
3187 | |
| 12296 | 3188 | gaim_gtk_blist_update_accounts_menu(); |
|
8937
b436e9cbd701
[gaim-migrate @ 9707]
Mark Doliner <markdoliner@pidgin.im>
parents:
8911
diff
changeset
|
3189 | |
|
10352
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3190 | sensitive = (gaim_connections_get_all() != NULL); |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3191 | |
|
10357
f5ad7a664200
[gaim-migrate @ 11575]
Mark Doliner <markdoliner@pidgin.im>
parents:
10354
diff
changeset
|
3192 | for (i = 0; i < require_connection_size; i++) |
|
10352
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3193 | { |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3194 | widget = gtk_item_factory_get_widget(gtkblist->ift, require_connection[i]); |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3195 | gtk_widget_set_sensitive(widget, sensitive); |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3196 | } |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3197 | |
|
8940
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
3198 | widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Buddies/Join a Chat...")); |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
3199 | gtk_widget_set_sensitive(widget, gaim_gtk_blist_joinchat_is_showable()); |
|
3e22cf150db0
[gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents:
8939
diff
changeset
|
3200 | |
|
11988
7ed733ed806b
[gaim-migrate @ 14281]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11986
diff
changeset
|
3201 | widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Buddies/Add Chat...")); |
|
7ed733ed806b
[gaim-migrate @ 14281]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11986
diff
changeset
|
3202 | gtk_widget_set_sensitive(widget, gaim_gtk_blist_joinchat_is_showable()); |
|
7ed733ed806b
[gaim-migrate @ 14281]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11986
diff
changeset
|
3203 | |
| 12136 | 3204 | widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Buddy Pounces")); |
| 3205 | gtk_widget_set_sensitive(widget, (gaim_connections_get_all() != NULL)); | |
|
8938
d13ed7491e43
[gaim-migrate @ 9708]
Mark Doliner <markdoliner@pidgin.im>
parents:
8937
diff
changeset
|
3206 | |
|
d13ed7491e43
[gaim-migrate @ 9708]
Mark Doliner <markdoliner@pidgin.im>
parents:
8937
diff
changeset
|
3207 | widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Privacy")); |
|
d13ed7491e43
[gaim-migrate @ 9708]
Mark Doliner <markdoliner@pidgin.im>
parents:
8937
diff
changeset
|
3208 | gtk_widget_set_sensitive(widget, gaim_gtk_privacy_is_showable()); |
| 12136 | 3209 | |
| 3210 | widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Room List")); | |
| 3211 | gtk_widget_set_sensitive(widget, gaim_gtk_roomlist_is_showable()); | |
| 7620 | 3212 | } |
| 3213 | ||
|
10352
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3214 | static void |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3215 | sign_on_off_cb(GaimConnection *gc, GaimBuddyList *blist) |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3216 | { |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3217 | GaimGtkBuddyList *gtkblist = GAIM_GTK_BLIST(blist); |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3218 | |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3219 | update_menu_bar(gtkblist); |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3220 | } |
|
8986
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
3221 | |
|
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
3222 | static void |
|
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
3223 | plugin_changed_cb(GaimPlugin *p, gpointer *data) |
|
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
3224 | { |
|
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
3225 | gaim_gtk_blist_update_plugin_actions(); |
|
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
3226 | } |
|
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
3227 | |
|
12133
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3228 | static void |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3229 | unseen_conv_menu() |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3230 | { |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3231 | static GtkWidget *menu = NULL; |
|
12468
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3232 | GList *convs = NULL; |
|
12133
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3233 | |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3234 | if (menu) |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3235 | gtk_widget_destroy(menu); |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3236 | |
|
12175
3e790a58d906
[gaim-migrate @ 14477]
Casey Harkins <charkins@pidgin.im>
parents:
12163
diff
changeset
|
3237 | menu = gtk_menu_new(); |
|
12468
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3238 | |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3239 | convs = gaim_gtk_conversations_find_unseen_list(GAIM_CONV_TYPE_IM, GAIM_UNSEEN_TEXT, TRUE, 0); |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3240 | if (!convs) { |
|
12175
3e790a58d906
[gaim-migrate @ 14477]
Casey Harkins <charkins@pidgin.im>
parents:
12163
diff
changeset
|
3241 | /* no conversations added, don't show the menu */ |
|
3e790a58d906
[gaim-migrate @ 14477]
Casey Harkins <charkins@pidgin.im>
parents:
12163
diff
changeset
|
3242 | gtk_widget_destroy(menu); |
|
12133
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3243 | return; |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3244 | } |
|
12468
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3245 | gaim_gtk_conversations_fill_menu(menu, convs); |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3246 | g_list_free(convs); |
|
12133
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3247 | gtk_widget_show_all(menu); |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3248 | gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3249 | gtk_get_current_event_time()); |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3250 | } |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3251 | |
|
12116
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3252 | static gboolean |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3253 | menutray_press_cb(GtkWidget *widget, GdkEventButton *event) |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3254 | { |
|
12468
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3255 | GList *convs; |
|
12208
63faaf557886
[gaim-migrate @ 14510]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12191
diff
changeset
|
3256 | |
|
12133
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3257 | switch (event->button) { |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3258 | case 1: |
|
12468
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3259 | convs = gaim_gtk_conversations_find_unseen_list(GAIM_CONV_TYPE_IM, |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3260 | GAIM_UNSEEN_TEXT, TRUE, 1); |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3261 | if (convs) { |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3262 | gaim_gtkconv_present_conversation((GaimConversation*)convs->data); |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3263 | g_list_free(convs); |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3264 | } |
|
12133
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3265 | break; |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3266 | case 3: |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3267 | unseen_conv_menu(); |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3268 | break; |
|
c627533bb7a4
[gaim-migrate @ 14433]
Casey Harkins <charkins@pidgin.im>
parents:
12124
diff
changeset
|
3269 | } |
|
12116
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3270 | return TRUE; |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3271 | } |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3272 | |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3273 | static void |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3274 | conversation_updated_cb(GaimConversation *conv, GaimConvUpdateType type, |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3275 | GaimGtkBuddyList *gtkblist) |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3276 | { |
|
12468
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3277 | GList *convs = NULL; |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3278 | GList *l = NULL; |
|
12116
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3279 | |
|
12175
3e790a58d906
[gaim-migrate @ 14477]
Casey Harkins <charkins@pidgin.im>
parents:
12163
diff
changeset
|
3280 | if (type != GAIM_CONV_UPDATE_UNSEEN) |
|
3e790a58d906
[gaim-migrate @ 14477]
Casey Harkins <charkins@pidgin.im>
parents:
12163
diff
changeset
|
3281 | return; |
|
3e790a58d906
[gaim-migrate @ 14477]
Casey Harkins <charkins@pidgin.im>
parents:
12163
diff
changeset
|
3282 | |
|
3e790a58d906
[gaim-migrate @ 14477]
Casey Harkins <charkins@pidgin.im>
parents:
12163
diff
changeset
|
3283 | if (gtkblist->menutrayicon) { |
|
12116
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3284 | gtk_widget_destroy(gtkblist->menutrayicon); |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3285 | gtkblist->menutrayicon = NULL; |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3286 | } |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3287 | |
|
12468
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3288 | convs = gaim_gtk_conversations_find_unseen_list(GAIM_CONV_TYPE_IM, GAIM_UNSEEN_TEXT, TRUE, 0); |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3289 | if (convs) { |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3290 | GtkWidget *img = NULL; |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3291 | GString *tooltip_text = NULL; |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3292 | |
| 12117 | 3293 | tooltip_text = g_string_new(""); |
|
12468
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3294 | l = convs; |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3295 | while (l != NULL) { |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3296 | if (GAIM_IS_GTK_CONVERSATION(l->data)) { |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3297 | GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION((GaimConversation *)l->data); |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3298 | |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3299 | g_string_append_printf(tooltip_text, |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3300 | ngettext("%d unread message from %s\n", "%d unread messages from %s\n", gtkconv->unseen_count), |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3301 | gtkconv->unseen_count, |
|
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3302 | gtk_label_get_text(GTK_LABEL(gtkconv->tab_label))); |
| 12117 | 3303 | } |
|
12468
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3304 | l = l->next; |
| 12117 | 3305 | } |
| 12239 | 3306 | if(tooltip_text->len > 0) { |
|
12302
191d0fc44cfc
[gaim-migrate @ 14606]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12301
diff
changeset
|
3307 | /* get rid of the last newline */ |
|
191d0fc44cfc
[gaim-migrate @ 14606]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12301
diff
changeset
|
3308 | tooltip_text = g_string_truncate(tooltip_text, tooltip_text->len -1); |
|
191d0fc44cfc
[gaim-migrate @ 14606]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12301
diff
changeset
|
3309 | img = gtk_image_new_from_stock(GAIM_STOCK_PENDING, GTK_ICON_SIZE_MENU); |
|
191d0fc44cfc
[gaim-migrate @ 14606]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12301
diff
changeset
|
3310 | |
|
191d0fc44cfc
[gaim-migrate @ 14606]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12301
diff
changeset
|
3311 | gtkblist->menutrayicon = gtk_event_box_new(); |
|
191d0fc44cfc
[gaim-migrate @ 14606]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12301
diff
changeset
|
3312 | gtk_container_add(GTK_CONTAINER(gtkblist->menutrayicon), img); |
|
191d0fc44cfc
[gaim-migrate @ 14606]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12301
diff
changeset
|
3313 | gtk_widget_show(img); |
|
191d0fc44cfc
[gaim-migrate @ 14606]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12301
diff
changeset
|
3314 | gtk_widget_show(gtkblist->menutrayicon); |
|
191d0fc44cfc
[gaim-migrate @ 14606]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12301
diff
changeset
|
3315 | g_signal_connect(G_OBJECT(gtkblist->menutrayicon), "button-press-event", G_CALLBACK(menutray_press_cb), NULL); |
|
191d0fc44cfc
[gaim-migrate @ 14606]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12301
diff
changeset
|
3316 | |
|
191d0fc44cfc
[gaim-migrate @ 14606]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12301
diff
changeset
|
3317 | gaim_gtk_menu_tray_append(GAIM_GTK_MENU_TRAY(gtkblist->menutray), gtkblist->menutrayicon, tooltip_text->str); |
| 12239 | 3318 | } |
|
12302
191d0fc44cfc
[gaim-migrate @ 14606]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12301
diff
changeset
|
3319 | g_string_free(tooltip_text, TRUE); |
|
12468
fe558afb01b4
[gaim-migrate @ 14778]
Casey Harkins <charkins@pidgin.im>
parents:
12466
diff
changeset
|
3320 | g_list_free(convs); |
|
12116
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3321 | } |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3322 | } |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3323 | |
|
12208
63faaf557886
[gaim-migrate @ 14510]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12191
diff
changeset
|
3324 | static void |
|
63faaf557886
[gaim-migrate @ 14510]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12191
diff
changeset
|
3325 | conversation_deleting_cb(GaimConversation *conv, GaimGtkBuddyList *gtkblist) |
|
63faaf557886
[gaim-migrate @ 14510]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12191
diff
changeset
|
3326 | { |
|
63faaf557886
[gaim-migrate @ 14510]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12191
diff
changeset
|
3327 | conversation_updated_cb(conv, GAIM_CONV_UPDATE_UNSEEN, gtkblist); |
|
63faaf557886
[gaim-migrate @ 14510]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12191
diff
changeset
|
3328 | } |
|
63faaf557886
[gaim-migrate @ 14510]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12191
diff
changeset
|
3329 | |
| 5228 | 3330 | /********************************************************************************** |
| 3331 | * Public API Functions * | |
| 3332 | **********************************************************************************/ | |
| 9774 | 3333 | |
| 7620 | 3334 | static void gaim_gtk_blist_new_list(GaimBuddyList *blist) |
| 5228 | 3335 | { |
| 7620 | 3336 | GaimGtkBuddyList *gtkblist; |
| 3337 | ||
| 3338 | gtkblist = g_new0(GaimGtkBuddyList, 1); | |
| 3339 | blist->ui_data = gtkblist; | |
| 5228 | 3340 | } |
| 3341 | ||
| 5256 | 3342 | static void gaim_gtk_blist_new_node(GaimBlistNode *node) |
| 3343 | { | |
| 3344 | node->ui_data = g_new0(struct _gaim_gtk_blist_node, 1); | |
| 3345 | } | |
| 3346 | ||
|
11018
a3843543f132
[gaim-migrate @ 12888]
Richard Laager <rlaager@pidgin.im>
parents:
11016
diff
changeset
|
3347 | gboolean gaim_gtk_blist_node_is_contact_expanded(GaimBlistNode *node) |
|
a3843543f132
[gaim-migrate @ 12888]
Richard Laager <rlaager@pidgin.im>
parents:
11016
diff
changeset
|
3348 | { |
|
a3843543f132
[gaim-migrate @ 12888]
Richard Laager <rlaager@pidgin.im>
parents:
11016
diff
changeset
|
3349 | if GAIM_BLIST_NODE_IS_BUDDY(node) |
|
a3843543f132
[gaim-migrate @ 12888]
Richard Laager <rlaager@pidgin.im>
parents:
11016
diff
changeset
|
3350 | node = node->parent; |
|
a3843543f132
[gaim-migrate @ 12888]
Richard Laager <rlaager@pidgin.im>
parents:
11016
diff
changeset
|
3351 | |
|
a3843543f132
[gaim-migrate @ 12888]
Richard Laager <rlaager@pidgin.im>
parents:
11016
diff
changeset
|
3352 | g_return_val_if_fail(GAIM_BLIST_NODE_IS_CONTACT(node), FALSE); |
|
a3843543f132
[gaim-migrate @ 12888]
Richard Laager <rlaager@pidgin.im>
parents:
11016
diff
changeset
|
3353 | |
|
a3843543f132
[gaim-migrate @ 12888]
Richard Laager <rlaager@pidgin.im>
parents:
11016
diff
changeset
|
3354 | return ((struct _gaim_gtk_blist_node *)node->ui_data)->contact_expanded; |
|
a3843543f132
[gaim-migrate @ 12888]
Richard Laager <rlaager@pidgin.im>
parents:
11016
diff
changeset
|
3355 | } |
|
a3843543f132
[gaim-migrate @ 12888]
Richard Laager <rlaager@pidgin.im>
parents:
11016
diff
changeset
|
3356 | |
| 5228 | 3357 | void gaim_gtk_blist_update_columns() |
| 3358 | { | |
| 3359 | if(!gtkblist) | |
| 3360 | return; | |
| 3361 | ||
| 7620 | 3362 | if (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) { |
| 5228 | 3363 | gtk_tree_view_column_set_visible(gtkblist->buddy_icon_column, TRUE); |
| 3364 | gtk_tree_view_column_set_visible(gtkblist->idle_column, FALSE); | |
| 3365 | } else { | |
| 10351 | 3366 | gtk_tree_view_column_set_visible(gtkblist->idle_column, TRUE); |
| 5228 | 3367 | gtk_tree_view_column_set_visible(gtkblist->buddy_icon_column, FALSE); |
| 3368 | } | |
| 3369 | } | |
| 3370 | ||
|
12326
49fa442452e8
[gaim-migrate @ 14630]
Mark Doliner <markdoliner@pidgin.im>
parents:
12319
diff
changeset
|
3371 | static void |
|
49fa442452e8
[gaim-migrate @ 14630]
Mark Doliner <markdoliner@pidgin.im>
parents:
12319
diff
changeset
|
3372 | show_buddy_icons_pref_cb(const char *name, GaimPrefType type, |
|
49fa442452e8
[gaim-migrate @ 14630]
Mark Doliner <markdoliner@pidgin.im>
parents:
12319
diff
changeset
|
3373 | gpointer val, gpointer data) |
|
49fa442452e8
[gaim-migrate @ 14630]
Mark Doliner <markdoliner@pidgin.im>
parents:
12319
diff
changeset
|
3374 | { |
|
49fa442452e8
[gaim-migrate @ 14630]
Mark Doliner <markdoliner@pidgin.im>
parents:
12319
diff
changeset
|
3375 | gaim_gtk_blist_update_columns(); |
|
49fa442452e8
[gaim-migrate @ 14630]
Mark Doliner <markdoliner@pidgin.im>
parents:
12319
diff
changeset
|
3376 | } |
|
49fa442452e8
[gaim-migrate @ 14630]
Mark Doliner <markdoliner@pidgin.im>
parents:
12319
diff
changeset
|
3377 | |
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3378 | enum { |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3379 | DRAG_BUDDY, |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3380 | DRAG_ROW, |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3381 | DRAG_VCARD, |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3382 | DRAG_TEXT, |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3383 | DRAG_URI, |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3384 | NUM_TARGETS |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3385 | }; |
| 5228 | 3386 | |
| 3387 | static char * | |
| 3388 | item_factory_translate_func (const char *path, gpointer func_data) | |
| 3389 | { | |
| 7620 | 3390 | return _((char *)path); |
| 5228 | 3391 | } |
| 3392 | ||
| 5422 | 3393 | void gaim_gtk_blist_setup_sort_methods() |
| 3394 | { | |
| 11798 | 3395 | gaim_gtk_blist_sort_method_reg("none", _("Manually"), sort_method_none); |
| 7620 | 3396 | #if GTK_CHECK_VERSION(2,2,1) |
| 11798 | 3397 | gaim_gtk_blist_sort_method_reg("alphabetical", _("Alphabetically"), sort_method_alphabetical); |
| 7620 | 3398 | gaim_gtk_blist_sort_method_reg("status", _("By status"), sort_method_status); |
| 3399 | gaim_gtk_blist_sort_method_reg("log_size", _("By log size"), sort_method_log); | |
| 3400 | #endif | |
| 3401 | gaim_gtk_blist_sort_method_set(gaim_prefs_get_string("/gaim/gtk/blist/sort_type")); | |
| 3402 | } | |
| 3403 | ||
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3404 | static void _prefs_change_redo_list() |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3405 | { |
| 7620 | 3406 | redo_buddy_list(gaim_get_blist(), TRUE); |
| 3407 | } | |
| 3408 | ||
| 3409 | static void _prefs_change_sort_method(const char *pref_name, GaimPrefType type, | |
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3410 | gpointer val, gpointer data) |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3411 | { |
| 7620 | 3412 | if(!strcmp(pref_name, "/gaim/gtk/blist/sort_type")) |
| 3413 | gaim_gtk_blist_sort_method_set(val); | |
| 3414 | } | |
| 3415 | ||
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3416 | /* |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3417 | * "This is so dead sexy." |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3418 | * "Two thumbs up." |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3419 | * "Best movie of the year." |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3420 | * |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3421 | * This is the function that handles CTRL+F searching in the buddy list. |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3422 | * It finds the top-most buddy/group/chat/whatever containing the |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3423 | * entered string. |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3424 | * |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3425 | * It's somewhat ineffecient, because we strip all the HTML from the |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3426 | * "name" column of the buddy list (because the GtkTreeModel does not |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3427 | * contain the screen name in a non-markedup format). But the alternative |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3428 | * is to add an extra column to the GtkTreeModel. And this function is |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3429 | * used rarely, so it shouldn't matter TOO much. |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3430 | */ |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3431 | static gboolean |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3432 | _search_func(GtkTreeModel *model, gint column, const gchar *key, GtkTreeIter *iter, gpointer search_data) |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3433 | { |
|
10435
9b99eae95156
[gaim-migrate @ 11692]
Mark Doliner <markdoliner@pidgin.im>
parents:
10433
diff
changeset
|
3434 | gboolean result; |
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3435 | gchar *enteredstring; |
|
10439
5868d8f55fb1
[gaim-migrate @ 11697]
Alex Converse <alex.converse@gmail.com>
parents:
10435
diff
changeset
|
3436 | gchar *withmarkup; |
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3437 | gchar *nomarkup; |
|
11490
7a4f16625f66
[gaim-migrate @ 13733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11438
diff
changeset
|
3438 | gchar *normalized; |
|
10435
9b99eae95156
[gaim-migrate @ 11692]
Mark Doliner <markdoliner@pidgin.im>
parents:
10433
diff
changeset
|
3439 | |
|
9b99eae95156
[gaim-migrate @ 11692]
Mark Doliner <markdoliner@pidgin.im>
parents:
10433
diff
changeset
|
3440 | gtk_tree_model_get(model, iter, column, &withmarkup, -1); |
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3441 | |
|
11490
7a4f16625f66
[gaim-migrate @ 13733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11438
diff
changeset
|
3442 | enteredstring = g_utf8_casefold(gaim_normalize(NULL, key), -1); |
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3443 | nomarkup = gaim_markup_strip_html(withmarkup); |
|
11490
7a4f16625f66
[gaim-migrate @ 13733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11438
diff
changeset
|
3444 | normalized = g_utf8_casefold(gaim_normalize(NULL, nomarkup), -1); |
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3445 | |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3446 | result = (g_strstr_len(normalized, strlen(normalized), enteredstring) == NULL); |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3447 | |
|
10439
5868d8f55fb1
[gaim-migrate @ 11697]
Alex Converse <alex.converse@gmail.com>
parents:
10435
diff
changeset
|
3448 | g_free(withmarkup); |
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3449 | g_free(enteredstring); |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3450 | g_free(nomarkup); |
|
11490
7a4f16625f66
[gaim-migrate @ 13733]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11438
diff
changeset
|
3451 | g_free(normalized); |
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3452 | |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3453 | return result; |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3454 | } |
|
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3455 | |
|
12522
5d2871278151
[gaim-migrate @ 14834]
Richard Laager <rlaager@pidgin.im>
parents:
12519
diff
changeset
|
3456 | static void account_modified(GaimAccount *account, GaimGtkBuddyList *gtkblist) |
|
5d2871278151
[gaim-migrate @ 14834]
Richard Laager <rlaager@pidgin.im>
parents:
12519
diff
changeset
|
3457 | { |
|
5d2871278151
[gaim-migrate @ 14834]
Richard Laager <rlaager@pidgin.im>
parents:
12519
diff
changeset
|
3458 | if (!gtkblist) |
|
5d2871278151
[gaim-migrate @ 14834]
Richard Laager <rlaager@pidgin.im>
parents:
12519
diff
changeset
|
3459 | return; |
|
12589
e25ec53fe8b0
[gaim-migrate @ 14918]
Mark Doliner <markdoliner@pidgin.im>
parents:
12583
diff
changeset
|
3460 | |
|
12522
5d2871278151
[gaim-migrate @ 14834]
Richard Laager <rlaager@pidgin.im>
parents:
12519
diff
changeset
|
3461 | update_menu_bar(gtkblist); |
|
5d2871278151
[gaim-migrate @ 14834]
Richard Laager <rlaager@pidgin.im>
parents:
12519
diff
changeset
|
3462 | } |
|
5d2871278151
[gaim-migrate @ 14834]
Richard Laager <rlaager@pidgin.im>
parents:
12519
diff
changeset
|
3463 | |
|
12124
97ff43883157
[gaim-migrate @ 14424]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12119
diff
changeset
|
3464 | static gboolean |
|
12461
960ff25e0214
[gaim-migrate @ 14771]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12458
diff
changeset
|
3465 | gtk_blist_window_key_press_cb(GtkWidget *w, GdkEventKey *event, GaimGtkBuddyList *gtkblist) |
|
960ff25e0214
[gaim-migrate @ 14771]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12458
diff
changeset
|
3466 | { |
|
960ff25e0214
[gaim-migrate @ 14771]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12458
diff
changeset
|
3467 | GtkWidget *imhtml; |
|
960ff25e0214
[gaim-migrate @ 14771]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12458
diff
changeset
|
3468 | |
|
960ff25e0214
[gaim-migrate @ 14771]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12458
diff
changeset
|
3469 | if (!gtkblist) |
|
960ff25e0214
[gaim-migrate @ 14771]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12458
diff
changeset
|
3470 | return FALSE; |
|
960ff25e0214
[gaim-migrate @ 14771]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12458
diff
changeset
|
3471 | |
|
960ff25e0214
[gaim-migrate @ 14771]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12458
diff
changeset
|
3472 | imhtml = gtk_window_get_focus(GTK_WINDOW(gtkblist->window)); |
|
960ff25e0214
[gaim-migrate @ 14771]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12458
diff
changeset
|
3473 | |
|
12474
630f34dde22d
[gaim-migrate @ 14785]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12473
diff
changeset
|
3474 | if (GTK_IS_IMHTML(imhtml) && gtk_bindings_activate(GTK_OBJECT(imhtml), event->keyval, event->state)) |
|
12461
960ff25e0214
[gaim-migrate @ 14771]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12458
diff
changeset
|
3475 | return TRUE; |
|
960ff25e0214
[gaim-migrate @ 14771]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12458
diff
changeset
|
3476 | return FALSE; |
|
960ff25e0214
[gaim-migrate @ 14771]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12458
diff
changeset
|
3477 | } |
|
960ff25e0214
[gaim-migrate @ 14771]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12458
diff
changeset
|
3478 | |
| 7620 | 3479 | static void gaim_gtk_blist_show(GaimBuddyList *list) |
| 5228 | 3480 | { |
|
10087
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3481 | void *handle; |
| 5228 | 3482 | GtkCellRenderer *rend; |
| 3483 | GtkTreeViewColumn *column; | |
|
10178
16a2e27759fe
[gaim-migrate @ 11293]
Christian Hammond <chipx86@chipx86.com>
parents:
10144
diff
changeset
|
3484 | GtkWidget *menu; |
| 5228 | 3485 | GtkWidget *sw; |
| 3486 | GtkAccelGroup *accel_group; | |
| 3487 | GtkTreeSelection *selection; | |
| 9556 | 3488 | GtkTargetEntry dte[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW}, |
| 8089 | 3489 | {"application/x-im-contact", 0, DRAG_BUDDY}, |
| 9495 | 3490 | {"text/x-vcard", 0, DRAG_VCARD }, |
| 9525 | 3491 | {"text/uri-list", 0, DRAG_URI}, |
| 3492 | {"text/plain", 0, DRAG_TEXT}}; | |
| 9556 | 3493 | GtkTargetEntry ste[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW}, |
| 3494 | {"application/x-im-contact", 0, DRAG_BUDDY}, | |
| 3495 | {"text/x-vcard", 0, DRAG_VCARD }}; | |
| 5228 | 3496 | if (gtkblist && gtkblist->window) { |
| 12119 | 3497 | gaim_blist_set_visible(gaim_prefs_get_bool("/gaim/gtk/blist/list_visible")); |
| 5228 | 3498 | return; |
| 3499 | } | |
| 3500 | ||
| 3501 | gtkblist = GAIM_GTK_BLIST(list); | |
| 3502 | ||
| 3503 | gtkblist->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
| 3504 | gtk_window_set_role(GTK_WINDOW(gtkblist->window), "buddy_list"); | |
| 9746 | 3505 | gtk_window_set_title(GTK_WINDOW(gtkblist->window), _("Buddy List")); |
| 12328 | 3506 | GTK_WINDOW(gtkblist->window)->allow_shrink = TRUE; |
| 5228 | 3507 | |
| 3508 | gtkblist->vbox = gtk_vbox_new(FALSE, 0); | |
|
10178
16a2e27759fe
[gaim-migrate @ 11293]
Christian Hammond <chipx86@chipx86.com>
parents:
10144
diff
changeset
|
3509 | gtk_widget_show(gtkblist->vbox); |
| 5228 | 3510 | gtk_container_add(GTK_CONTAINER(gtkblist->window), gtkblist->vbox); |
| 3511 | ||
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
3512 | g_signal_connect(G_OBJECT(gtkblist->window), "delete_event", G_CALLBACK(gtk_blist_delete_cb), NULL); |
| 5228 | 3513 | g_signal_connect(G_OBJECT(gtkblist->window), "configure_event", G_CALLBACK(gtk_blist_configure_cb), NULL); |
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
3514 | g_signal_connect(G_OBJECT(gtkblist->window), "visibility_notify_event", G_CALLBACK(gtk_blist_visibility_cb), NULL); |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
3515 | g_signal_connect(G_OBJECT(gtkblist->window), "window_state_event", G_CALLBACK(gtk_blist_window_state_cb), NULL); |
|
12461
960ff25e0214
[gaim-migrate @ 14771]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12458
diff
changeset
|
3516 | g_signal_connect(G_OBJECT(gtkblist->window), "key_press_event", G_CALLBACK(gtk_blist_window_key_press_cb), gtkblist); |
| 5228 | 3517 | gtk_widget_add_events(gtkblist->window, GDK_VISIBILITY_NOTIFY_MASK); |
| 3518 | ||
| 3519 | /******************************* Menu bar *************************************/ | |
| 3520 | accel_group = gtk_accel_group_new(); | |
| 3521 | gtk_window_add_accel_group(GTK_WINDOW (gtkblist->window), accel_group); | |
| 3522 | g_object_unref(accel_group); | |
|
5427
a45fa07ef20d
[gaim-migrate @ 5806]
Mark Doliner <markdoliner@pidgin.im>
parents:
5422
diff
changeset
|
3523 | gtkblist->ift = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<GaimMain>", accel_group); |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3524 | gtk_item_factory_set_translate_func(gtkblist->ift, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3525 | item_factory_translate_func, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3526 | NULL, NULL); |
|
5427
a45fa07ef20d
[gaim-migrate @ 5806]
Mark Doliner <markdoliner@pidgin.im>
parents:
5422
diff
changeset
|
3527 | gtk_item_factory_create_items(gtkblist->ift, sizeof(blist_menu) / sizeof(*blist_menu), |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3528 | blist_menu, NULL); |
| 7620 | 3529 | gaim_gtk_load_accels(); |
| 3530 | g_signal_connect(G_OBJECT(accel_group), "accel-changed", | |
| 3531 | G_CALLBACK(gaim_gtk_save_accels_cb), NULL); | |
|
10178
16a2e27759fe
[gaim-migrate @ 11293]
Christian Hammond <chipx86@chipx86.com>
parents:
10144
diff
changeset
|
3532 | menu = gtk_item_factory_get_widget(gtkblist->ift, "<GaimMain>"); |
|
12116
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3533 | gtkblist->menutray = gaim_gtk_menu_tray_new(); |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3534 | gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtkblist->menutray); |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3535 | gtk_widget_show(gtkblist->menutray); |
|
10178
16a2e27759fe
[gaim-migrate @ 11293]
Christian Hammond <chipx86@chipx86.com>
parents:
10144
diff
changeset
|
3536 | gtk_widget_show(menu); |
|
16a2e27759fe
[gaim-migrate @ 11293]
Christian Hammond <chipx86@chipx86.com>
parents:
10144
diff
changeset
|
3537 | gtk_box_pack_start(GTK_BOX(gtkblist->vbox), menu, FALSE, FALSE, 0); |
| 5228 | 3538 | |
| 12296 | 3539 | accountmenu = gtk_item_factory_get_widget(gtkblist->ift, N_("/Accounts")); |
|
10352
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
3540 | |
| 5228 | 3541 | /****************************** GtkTreeView **********************************/ |
| 3542 | sw = gtk_scrolled_window_new(NULL,NULL); | |
|
10178
16a2e27759fe
[gaim-migrate @ 11293]
Christian Hammond <chipx86@chipx86.com>
parents:
10144
diff
changeset
|
3543 | gtk_widget_show(sw); |
| 5228 | 3544 | gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); |
| 3545 | gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); | |
| 3546 | ||
| 7620 | 3547 | gtkblist->treemodel = gtk_tree_store_new(BLIST_COLUMNS, |
|
11494
60bfb30f6cba
[gaim-migrate @ 13738]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11490
diff
changeset
|
3548 | GDK_TYPE_PIXBUF, G_TYPE_BOOLEAN, |
| 11257 | 3549 | G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_POINTER); |
| 5228 | 3550 | |
| 3551 | gtkblist->treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(gtkblist->treemodel)); | |
|
10178
16a2e27759fe
[gaim-migrate @ 11293]
Christian Hammond <chipx86@chipx86.com>
parents:
10144
diff
changeset
|
3552 | gtk_widget_show(gtkblist->treeview); |
| 9176 | 3553 | gtk_widget_set_name(gtkblist->treeview, "gaim_gtkblist_treeview"); |
| 5228 | 3554 | |
| 3555 | /* Set up selection stuff */ | |
| 3556 | selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkblist->treeview)); | |
| 3557 | g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(gaim_gtk_blist_selection_changed), NULL); | |
| 3558 | ||
| 3559 | /* Set up dnd */ | |
|
7650
bd193cc04594
[gaim-migrate @ 8293]
Mark Doliner <markdoliner@pidgin.im>
parents:
7642
diff
changeset
|
3560 | gtk_tree_view_enable_model_drag_source(GTK_TREE_VIEW(gtkblist->treeview), |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3561 | GDK_BUTTON1_MASK, ste, 3, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3562 | GDK_ACTION_COPY); |
|
7650
bd193cc04594
[gaim-migrate @ 8293]
Mark Doliner <markdoliner@pidgin.im>
parents:
7642
diff
changeset
|
3563 | gtk_tree_view_enable_model_drag_dest(GTK_TREE_VIEW(gtkblist->treeview), |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3564 | dte, 5, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3565 | GDK_ACTION_COPY | GDK_ACTION_MOVE); |
| 7636 | 3566 | |
| 10544 | 3567 | g_signal_connect(G_OBJECT(gtkblist->treeview), "drag-data-received", G_CALLBACK(gaim_gtk_blist_drag_data_rcv_cb), NULL); |
| 5228 | 3568 | g_signal_connect(G_OBJECT(gtkblist->treeview), "drag-data-get", G_CALLBACK(gaim_gtk_blist_drag_data_get_cb), NULL); |
|
11059
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
3569 | #ifdef _WIN32 |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
3570 | g_signal_connect(G_OBJECT(gtkblist->treeview), "drag-begin", G_CALLBACK(gaim_gtk_blist_drag_begin), NULL); |
|
52e4f595fd27
[gaim-migrate @ 13012]
Daniel Atallah <datallah@pidgin.im>
parents:
11038
diff
changeset
|
3571 | #endif |
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3572 | |
| 10354 | 3573 | g_signal_connect(G_OBJECT(gtkblist->treeview), "drag-motion", G_CALLBACK(gaim_gtk_blist_drag_motion_cb), NULL); |
| 5228 | 3574 | |
| 3575 | /* Tooltips */ | |
| 3576 | g_signal_connect(G_OBJECT(gtkblist->treeview), "motion-notify-event", G_CALLBACK(gaim_gtk_blist_motion_cb), NULL); | |
| 3577 | g_signal_connect(G_OBJECT(gtkblist->treeview), "leave-notify-event", G_CALLBACK(gaim_gtk_blist_leave_cb), NULL); | |
| 3578 | ||
| 3579 | gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(gtkblist->treeview), FALSE); | |
| 3580 | ||
| 11016 | 3581 | gtkblist->text_column = column = gtk_tree_view_column_new (); |
| 5228 | 3582 | |
| 3583 | rend = gtk_cell_renderer_pixbuf_new(); | |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3584 | gtk_tree_view_column_pack_start(column, rend, FALSE); |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3585 | gtk_tree_view_column_set_attributes(column, rend, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3586 | "pixbuf", STATUS_ICON_COLUMN, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3587 | "visible", STATUS_ICON_VISIBLE_COLUMN, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3588 | NULL); |
| 5228 | 3589 | g_object_set(rend, "xalign", 0.0, "ypad", 0, NULL); |
| 3590 | ||
| 11016 | 3591 | gtkblist->text_rend = rend = gtk_cell_renderer_text_new(); |
| 5228 | 3592 | gtk_tree_view_column_pack_start (column, rend, TRUE); |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3593 | gtk_tree_view_column_set_attributes(column, rend, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3594 | "markup", NAME_COLUMN, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
3595 | NULL); |
| 11016 | 3596 | g_signal_connect(G_OBJECT(rend), "edited", G_CALLBACK(gtk_blist_renderer_edited_cb), NULL); |
| 5228 | 3597 | g_object_set(rend, "ypad", 0, "yalign", 0.5, NULL); |
| 10285 | 3598 | #if GTK_CHECK_VERSION(2,6,0) |
| 3599 | gtk_tree_view_column_set_expand (column, TRUE); | |
| 10501 | 3600 | g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); |
| 10285 | 3601 | #endif |
| 5228 | 3602 | gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), column); |
| 3603 | ||
| 3604 | rend = gtk_cell_renderer_text_new(); | |
| 10351 | 3605 | gtkblist->idle_column = gtk_tree_view_column_new_with_attributes("Idle", rend, "markup", IDLE_COLUMN, NULL); |
| 3606 | gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), gtkblist->idle_column); | |
| 5228 | 3607 | g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL); |
| 3608 | ||
| 3609 | rend = gtk_cell_renderer_pixbuf_new(); | |
| 3610 | gtkblist->buddy_icon_column = gtk_tree_view_column_new_with_attributes("Buddy Icon", rend, "pixbuf", BUDDY_ICON_COLUMN, NULL); | |
| 3611 | g_object_set(rend, "xalign", 1.0, "ypad", 0, NULL); | |
| 3612 | gtk_tree_view_append_column(GTK_TREE_VIEW(gtkblist->treeview), gtkblist->buddy_icon_column); | |
| 3613 | ||
| 3614 | g_signal_connect(G_OBJECT(gtkblist->treeview), "row-activated", G_CALLBACK(gtk_blist_row_activated_cb), NULL); | |
| 3615 | g_signal_connect(G_OBJECT(gtkblist->treeview), "row-expanded", G_CALLBACK(gtk_blist_row_expanded_cb), NULL); | |
| 3616 | g_signal_connect(G_OBJECT(gtkblist->treeview), "row-collapsed", G_CALLBACK(gtk_blist_row_collapsed_cb), NULL); | |
| 3617 | g_signal_connect(G_OBJECT(gtkblist->treeview), "button-press-event", G_CALLBACK(gtk_blist_button_press_cb), NULL); | |
| 7620 | 3618 | g_signal_connect(G_OBJECT(gtkblist->treeview), "key-press-event", G_CALLBACK(gtk_blist_key_press_cb), NULL); |
|
8143
ce4b6383777b
[gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents:
8137
diff
changeset
|
3619 | g_signal_connect(G_OBJECT(gtkblist->treeview), "popup-menu", G_CALLBACK(gaim_gtk_blist_popup_menu_cb), NULL); |
| 5228 | 3620 | |
|
5419
062efd736788
[gaim-migrate @ 5798]
Mark Doliner <markdoliner@pidgin.im>
parents:
5398
diff
changeset
|
3621 | /* Enable CTRL+F searching */ |
|
062efd736788
[gaim-migrate @ 5798]
Mark Doliner <markdoliner@pidgin.im>
parents:
5398
diff
changeset
|
3622 | gtk_tree_view_set_search_column(GTK_TREE_VIEW(gtkblist->treeview), NAME_COLUMN); |
|
10433
04cf48e72655
[gaim-migrate @ 11689]
Mark Doliner <markdoliner@pidgin.im>
parents:
10418
diff
changeset
|
3623 | gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(gtkblist->treeview), _search_func, NULL, NULL); |
|
5419
062efd736788
[gaim-migrate @ 5798]
Mark Doliner <markdoliner@pidgin.im>
parents:
5398
diff
changeset
|
3624 | |
| 12583 | 3625 | gtk_box_pack_start(GTK_BOX(gtkblist->vbox), sw, TRUE, TRUE, 0); |
| 5228 | 3626 | gtk_container_add(GTK_CONTAINER(sw), gtkblist->treeview); |
| 3627 | gaim_gtk_blist_update_columns(); | |
| 3628 | ||
| 12583 | 3629 | gtkblist->statusbox = gtk_gaim_status_box_new(); |
|
12592
5e1ce1a49ddb
[gaim-migrate @ 14922]
Richard Laager <rlaager@pidgin.im>
parents:
12589
diff
changeset
|
3630 | gtk_widget_set_name(gtkblist->statusbox, "gaim_gtkblist_statusbox"); |
| 12583 | 3631 | |
| 3632 | gtk_widget_show(gtkblist->statusbox); | |
| 3633 | gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtkblist->statusbox, FALSE, TRUE, 0); | |
| 3634 | ||
|
10178
16a2e27759fe
[gaim-migrate @ 11293]
Christian Hammond <chipx86@chipx86.com>
parents:
10144
diff
changeset
|
3635 | |
| 5228 | 3636 | /* set the Show Offline Buddies option. must be done |
| 3637 | * after the treeview or faceprint gets mad. -Robot101 | |
| 3638 | */ | |
|
5427
a45fa07ef20d
[gaim-migrate @ 5806]
Mark Doliner <markdoliner@pidgin.im>
parents:
5422
diff
changeset
|
3639 | gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show Offline Buddies"))), |
| 7620 | 3640 | gaim_prefs_get_bool("/gaim/gtk/blist/show_offline_buddies")); |
|
5427
a45fa07ef20d
[gaim-migrate @ 5806]
Mark Doliner <markdoliner@pidgin.im>
parents:
5422
diff
changeset
|
3641 | gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show Empty Groups"))), |
| 7620 | 3642 | gaim_prefs_get_bool("/gaim/gtk/blist/show_empty_groups")); |
|
10074
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
3643 | gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Tools/Mute Sounds"))), |
|
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
3644 | gaim_prefs_get_bool("/gaim/gtk/sound/mute")); |
| 11796 | 3645 | gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show Buddy Details"))), |
|
11920
be80617ec59b
[gaim-migrate @ 14211]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11917
diff
changeset
|
3646 | gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")); |
|
10074
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
3647 | if(!strcmp(gaim_prefs_get_string("/gaim/gtk/sound/method"), "none")) |
|
11494
60bfb30f6cba
[gaim-migrate @ 13738]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11490
diff
changeset
|
3648 | gtk_widget_set_sensitive(gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Mute Sounds")), FALSE); |
| 5228 | 3649 | |
|
10353
830e54bb7fa0
[gaim-migrate @ 11570]
Mark Doliner <markdoliner@pidgin.im>
parents:
10352
diff
changeset
|
3650 | /* Update some dynamic things */ |
|
830e54bb7fa0
[gaim-migrate @ 11570]
Mark Doliner <markdoliner@pidgin.im>
parents:
10352
diff
changeset
|
3651 | update_menu_bar(gtkblist); |
|
830e54bb7fa0
[gaim-migrate @ 11570]
Mark Doliner <markdoliner@pidgin.im>
parents:
10352
diff
changeset
|
3652 | gaim_gtk_blist_update_plugin_actions(); |
| 11796 | 3653 | gaim_gtk_blist_update_sort_methods(); |
|
10353
830e54bb7fa0
[gaim-migrate @ 11570]
Mark Doliner <markdoliner@pidgin.im>
parents:
10352
diff
changeset
|
3654 | |
| 5228 | 3655 | /* OK... let's show this bad boy. */ |
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
3656 | gaim_gtk_blist_refresh(list); |
| 12119 | 3657 | gaim_gtk_blist_restore_position(); |
| 3658 | gtk_widget_show_all(GTK_WIDGET(gtkblist->window)); | |
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
3659 | gaim_blist_set_visible(gaim_prefs_get_bool("/gaim/gtk/blist/list_visible")); |
| 5228 | 3660 | |
| 3661 | /* start the refresh timer */ | |
| 10351 | 3662 | gtkblist->refresh_timer = g_timeout_add(30000, (GSourceFunc)gaim_gtk_blist_refresh_timer, list); |
|
10353
830e54bb7fa0
[gaim-migrate @ 11570]
Mark Doliner <markdoliner@pidgin.im>
parents:
10352
diff
changeset
|
3663 | |
|
10087
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3664 | handle = gaim_gtk_blist_get_handle(); |
|
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3665 | |
| 7620 | 3666 | /* things that affect how buddies are displayed */ |
|
10087
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3667 | gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/show_buddy_icons", |
|
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3668 | _prefs_change_redo_list, NULL); |
|
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3669 | gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/show_empty_groups", |
|
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3670 | _prefs_change_redo_list, NULL); |
|
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3671 | gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/show_offline_buddies", |
|
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3672 | _prefs_change_redo_list, NULL); |
| 7620 | 3673 | |
| 3674 | /* sorting */ | |
|
10087
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3675 | gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/sort_type", |
|
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3676 | _prefs_change_sort_method, NULL); |
| 7620 | 3677 | |
| 3678 | /* things that affect what columns are displayed */ | |
|
10087
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3679 | gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/show_buddy_icons", |
|
12326
49fa442452e8
[gaim-migrate @ 14630]
Mark Doliner <markdoliner@pidgin.im>
parents:
12319
diff
changeset
|
3680 | show_buddy_icons_pref_cb, NULL); |
|
8259
7ed91862683d
[gaim-migrate @ 8982]
Christian Hammond <chipx86@chipx86.com>
parents:
8254
diff
changeset
|
3681 | |
|
10074
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
3682 | /* menus */ |
|
10087
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3683 | gaim_prefs_connect_callback(handle, "/gaim/gtk/sound/mute", |
|
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3684 | gaim_gtk_blist_mute_pref_cb, NULL); |
|
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3685 | gaim_prefs_connect_callback(handle, "/gaim/gtk/sound/method", |
|
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3686 | gaim_gtk_blist_sound_method_pref_cb, NULL); |
|
10074
4fab99572bf1
[gaim-migrate @ 11054]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10046
diff
changeset
|
3687 | |
|
8259
7ed91862683d
[gaim-migrate @ 8982]
Christian Hammond <chipx86@chipx86.com>
parents:
8254
diff
changeset
|
3688 | /* Setup some gaim signal handlers. */ |
|
12522
5d2871278151
[gaim-migrate @ 14834]
Richard Laager <rlaager@pidgin.im>
parents:
12519
diff
changeset
|
3689 | gaim_signal_connect(gaim_accounts_get_handle(), "account-enabled", |
| 12583 | 3690 | gtkblist, GAIM_CALLBACK(account_modified), gtkblist); |
| 12070 | 3691 | gaim_signal_connect(gaim_accounts_get_handle(), "account-disabled", |
| 12583 | 3692 | gtkblist, GAIM_CALLBACK(account_modified), gtkblist); |
|
12226
ab8852804f8d
[gaim-migrate @ 14528]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12208
diff
changeset
|
3693 | gaim_signal_connect(gaim_accounts_get_handle(), "account-removed", |
| 12583 | 3694 | gtkblist, GAIM_CALLBACK(account_modified), gtkblist); |
|
12522
5d2871278151
[gaim-migrate @ 14834]
Richard Laager <rlaager@pidgin.im>
parents:
12519
diff
changeset
|
3695 | |
|
5d2871278151
[gaim-migrate @ 14834]
Richard Laager <rlaager@pidgin.im>
parents:
12519
diff
changeset
|
3696 | gaim_signal_connect(gaim_gtk_account_get_handle(), "account-modified", |
|
5d2871278151
[gaim-migrate @ 14834]
Richard Laager <rlaager@pidgin.im>
parents:
12519
diff
changeset
|
3697 | gtkblist, GAIM_CALLBACK(account_modified), gtkblist); |
| 12070 | 3698 | |
|
8937
b436e9cbd701
[gaim-migrate @ 9707]
Mark Doliner <markdoliner@pidgin.im>
parents:
8911
diff
changeset
|
3699 | gaim_signal_connect(gaim_connections_get_handle(), "signed-on", |
|
b436e9cbd701
[gaim-migrate @ 9707]
Mark Doliner <markdoliner@pidgin.im>
parents:
8911
diff
changeset
|
3700 | gtkblist, GAIM_CALLBACK(sign_on_off_cb), list); |
|
b436e9cbd701
[gaim-migrate @ 9707]
Mark Doliner <markdoliner@pidgin.im>
parents:
8911
diff
changeset
|
3701 | gaim_signal_connect(gaim_connections_get_handle(), "signed-off", |
|
b436e9cbd701
[gaim-migrate @ 9707]
Mark Doliner <markdoliner@pidgin.im>
parents:
8911
diff
changeset
|
3702 | gtkblist, GAIM_CALLBACK(sign_on_off_cb), list); |
| 8815 | 3703 | |
|
8986
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
3704 | gaim_signal_connect(gaim_plugins_get_handle(), "plugin-load", |
|
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
3705 | gtkblist, GAIM_CALLBACK(plugin_changed_cb), NULL); |
|
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
3706 | gaim_signal_connect(gaim_plugins_get_handle(), "plugin-unload", |
|
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
3707 | gtkblist, GAIM_CALLBACK(plugin_changed_cb), NULL); |
|
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
3708 | |
|
12116
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3709 | gaim_signal_connect(gaim_conversations_get_handle(), "conversation-updated", |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3710 | gtkblist, GAIM_CALLBACK(conversation_updated_cb), |
|
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3711 | gtkblist); |
|
12208
63faaf557886
[gaim-migrate @ 14510]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12191
diff
changeset
|
3712 | gaim_signal_connect(gaim_conversations_get_handle(), "deleting-conversation", |
|
63faaf557886
[gaim-migrate @ 14510]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12191
diff
changeset
|
3713 | gtkblist, GAIM_CALLBACK(conversation_deleting_cb), |
|
63faaf557886
[gaim-migrate @ 14510]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12191
diff
changeset
|
3714 | gtkblist); |
|
12116
17bf39d2678f
[gaim-migrate @ 14416]
Casey Harkins <charkins@pidgin.im>
parents:
12115
diff
changeset
|
3715 | |
| 8815 | 3716 | /* emit our created signal */ |
|
10087
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
3717 | gaim_signal_emit(handle, "gtkblist-created", list); |
| 5228 | 3718 | } |
| 3719 | ||
| 7620 | 3720 | static void redo_buddy_list(GaimBuddyList *list, gboolean remove) |
| 5228 | 3721 | { |
|
12112
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12080
diff
changeset
|
3722 | GaimBlistNode *node = list->root; |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12080
diff
changeset
|
3723 | |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12080
diff
changeset
|
3724 | while (node) |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12080
diff
changeset
|
3725 | { |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12080
diff
changeset
|
3726 | if (!GAIM_BLIST_NODE_IS_GROUP(node) && remove) |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12080
diff
changeset
|
3727 | gaim_gtk_blist_hide_node(list, node); |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12080
diff
changeset
|
3728 | |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12080
diff
changeset
|
3729 | gaim_gtk_blist_update(list, node); |
|
86a24bbf9a2c
[gaim-migrate @ 14412]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12080
diff
changeset
|
3730 | node = gaim_blist_node_next(node, FALSE); |
| 5228 | 3731 | } |
| 3732 | } | |
| 3733 | ||
| 7620 | 3734 | void gaim_gtk_blist_refresh(GaimBuddyList *list) |
| 5422 | 3735 | { |
| 3736 | redo_buddy_list(list, FALSE); | |
| 3737 | } | |
| 3738 | ||
| 5297 | 3739 | void |
| 3740 | gaim_gtk_blist_update_refresh_timeout() | |
| 3741 | { | |
| 7620 | 3742 | GaimBuddyList *blist; |
| 3743 | GaimGtkBuddyList *gtkblist; | |
| 5297 | 3744 | |
| 3745 | blist = gaim_get_blist(); | |
| 3746 | gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); | |
| 3747 | ||
| 10351 | 3748 | gtkblist->refresh_timer = g_timeout_add(30000,(GSourceFunc)gaim_gtk_blist_refresh_timer, blist); |
| 5297 | 3749 | } |
| 3750 | ||
| 5256 | 3751 | static gboolean get_iter_from_node(GaimBlistNode *node, GtkTreeIter *iter) { |
| 3752 | struct _gaim_gtk_blist_node *gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; | |
| 3753 | GtkTreePath *path; | |
| 5228 | 3754 | |
| 5263 | 3755 | if (!gtknode) { |
| 3756 | return FALSE; | |
| 3757 | } | |
| 3758 | ||
| 3759 | if (!gtkblist) { | |
|
10006
800a81666868
[gaim-migrate @ 10923]
Dave West <kat@users.sourceforge.net>
parents:
9993
diff
changeset
|
3760 | gaim_debug_error("gtkblist", "get_iter_from_node was called, but we don't seem to have a blist\n"); |
| 5263 | 3761 | return FALSE; |
| 3762 | } | |
| 3763 | ||
| 3764 | if (!gtknode->row) | |
| 5228 | 3765 | return FALSE; |
|
11494
60bfb30f6cba
[gaim-migrate @ 13738]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11490
diff
changeset
|
3766 | |
| 5228 | 3767 | |
| 5256 | 3768 | if ((path = gtk_tree_row_reference_get_path(gtknode->row)) == NULL) |
| 5228 | 3769 | return FALSE; |
| 11016 | 3770 | |
| 5256 | 3771 | if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(gtkblist->treemodel), iter, path)) { |
| 3772 | gtk_tree_path_free(path); | |
| 3773 | return FALSE; | |
| 3774 | } | |
| 3775 | gtk_tree_path_free(path); | |
| 3776 | return TRUE; | |
| 5228 | 3777 | } |
| 3778 | ||
| 7620 | 3779 | static void gaim_gtk_blist_remove(GaimBuddyList *list, GaimBlistNode *node) |
| 5228 | 3780 | { |
| 11910 | 3781 | struct _gaim_gtk_blist_node *gtknode = node->ui_data; |
| 3782 | ||
|
10222
5371b5459fb9
[gaim-migrate @ 11351]
Andrew Hart <arhart@users.sourceforge.net>
parents:
10209
diff
changeset
|
3783 | gaim_request_close_with_handle(node); |
|
5371b5459fb9
[gaim-migrate @ 11351]
Andrew Hart <arhart@users.sourceforge.net>
parents:
10209
diff
changeset
|
3784 | |
| 5260 | 3785 | gaim_gtk_blist_hide_node(list, node); |
| 5228 | 3786 | |
| 7620 | 3787 | if(node->parent) |
| 3788 | gaim_gtk_blist_update(list, node->parent); | |
| 3789 | ||
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10501
diff
changeset
|
3790 | /* There's something I don't understand here - Ethan */ |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10501
diff
changeset
|
3791 | /* Ethan said that back in 2003, but this g_free has been left commented |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10501
diff
changeset
|
3792 | * out ever since. I can't find any reason at all why this is bad and |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10501
diff
changeset
|
3793 | * valgrind found several reasons why it's good. If this causes problems |
|
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10501
diff
changeset
|
3794 | * comment it out again. Stu */ |
|
10510
a9d90a5b7556
[gaim-migrate @ 11808]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10504
diff
changeset
|
3795 | /* Of course it still causes problems - this breaks dragging buddies into |
|
10515
865130ede44a
[gaim-migrate @ 11816]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10510
diff
changeset
|
3796 | * contacts, the dragged buddy mysteriously 'disappears'. Stu. */ |
|
865130ede44a
[gaim-migrate @ 11816]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10510
diff
changeset
|
3797 | /* I think it's fixed now. Stu. */ |
| 11910 | 3798 | |
| 11915 | 3799 | if(gtknode) { |
| 3800 | if(gtknode->recent_signonoff_timer > 0) | |
| 3801 | gaim_timeout_remove(gtknode->recent_signonoff_timer); | |
| 3802 | ||
| 3803 | g_free(node->ui_data); | |
| 3804 | node->ui_data = NULL; | |
| 3805 | } | |
| 5228 | 3806 | } |
| 3807 | ||
| 3808 | static gboolean do_selection_changed(GaimBlistNode *new_selection) | |
| 3809 | { | |
|
5254
6717daf94719
[gaim-migrate @ 5626]
Robert McQueen <robot101@debian.org>
parents:
5241
diff
changeset
|
3810 | GaimBlistNode *old_selection = NULL; |
| 5228 | 3811 | |
|
5254
6717daf94719
[gaim-migrate @ 5626]
Robert McQueen <robot101@debian.org>
parents:
5241
diff
changeset
|
3812 | /* test for gtkblist because crazy timeout means we can be called after the blist is gone */ |
|
6717daf94719
[gaim-migrate @ 5626]
Robert McQueen <robot101@debian.org>
parents:
5241
diff
changeset
|
3813 | if (gtkblist && new_selection != gtkblist->selected_node) { |
|
6717daf94719
[gaim-migrate @ 5626]
Robert McQueen <robot101@debian.org>
parents:
5241
diff
changeset
|
3814 | old_selection = gtkblist->selected_node; |
| 5228 | 3815 | gtkblist->selected_node = new_selection; |
| 3816 | if(new_selection) | |
| 3817 | gaim_gtk_blist_update(NULL, new_selection); | |
| 3818 | if(old_selection) | |
| 3819 | gaim_gtk_blist_update(NULL, old_selection); | |
| 3820 | } | |
| 3821 | ||
| 3822 | return FALSE; | |
| 3823 | } | |
| 3824 | ||
| 3825 | static void gaim_gtk_blist_selection_changed(GtkTreeSelection *selection, gpointer data) | |
| 3826 | { | |
| 3827 | GaimBlistNode *new_selection = NULL; | |
| 3828 | GtkTreeIter iter; | |
| 3829 | ||
| 3830 | if(gtk_tree_selection_get_selected(selection, NULL, &iter)){ | |
| 3831 | gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, | |
| 3832 | NODE_COLUMN, &new_selection, -1); | |
| 3833 | } | |
|
5254
6717daf94719
[gaim-migrate @ 5626]
Robert McQueen <robot101@debian.org>
parents:
5241
diff
changeset
|
3834 | |
| 5228 | 3835 | /* we set this up as a timeout, otherwise the blist flickers */ |
| 3836 | g_timeout_add(0, (GSourceFunc)do_selection_changed, new_selection); | |
| 3837 | } | |
| 3838 | ||
| 8252 | 3839 | static gboolean insert_node(GaimBuddyList *list, GaimBlistNode *node, GtkTreeIter *iter) |
| 7620 | 3840 | { |
| 3841 | GtkTreeIter parent_iter, cur, *curptr = NULL; | |
| 3842 | struct _gaim_gtk_blist_node *gtknode = node->ui_data; | |
| 5256 | 3843 | GtkTreePath *newpath; |
| 7620 | 3844 | |
|
10515
865130ede44a
[gaim-migrate @ 11816]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10510
diff
changeset
|
3845 | if(!iter) |
| 8252 | 3846 | return FALSE; |
| 7620 | 3847 | |
| 3848 | if(node->parent && !get_iter_from_node(node->parent, &parent_iter)) | |
| 8252 | 3849 | return FALSE; |
| 7620 | 3850 | |
| 3851 | if(get_iter_from_node(node, &cur)) | |
| 3852 | curptr = &cur; | |
| 3853 | ||
| 3854 | if(GAIM_BLIST_NODE_IS_CONTACT(node) || GAIM_BLIST_NODE_IS_CHAT(node)) { | |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
3855 | current_sort_method->func(node, list, parent_iter, curptr, iter); |
| 7620 | 3856 | } else { |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
3857 | sort_method_none(node, list, parent_iter, curptr, iter); |
| 5228 | 3858 | } |
| 3859 | ||
|
10515
865130ede44a
[gaim-migrate @ 11816]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10510
diff
changeset
|
3860 | if(gtknode != NULL) { |
|
865130ede44a
[gaim-migrate @ 11816]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10510
diff
changeset
|
3861 | gtk_tree_row_reference_free(gtknode->row); |
|
865130ede44a
[gaim-migrate @ 11816]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10510
diff
changeset
|
3862 | } else { |
|
865130ede44a
[gaim-migrate @ 11816]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10510
diff
changeset
|
3863 | gaim_gtk_blist_new_node(node); |
|
865130ede44a
[gaim-migrate @ 11816]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10510
diff
changeset
|
3864 | gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; |
|
865130ede44a
[gaim-migrate @ 11816]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10510
diff
changeset
|
3865 | } |
|
865130ede44a
[gaim-migrate @ 11816]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10510
diff
changeset
|
3866 | |
| 7620 | 3867 | newpath = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), |
| 3868 | iter); | |
| 3869 | gtknode->row = | |
| 3870 | gtk_tree_row_reference_new(GTK_TREE_MODEL(gtkblist->treemodel), | |
| 3871 | newpath); | |
|
11494
60bfb30f6cba
[gaim-migrate @ 13738]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
11490
diff
changeset
|
3872 | |
| 5256 | 3873 | gtk_tree_path_free(newpath); |
| 3874 | ||
| 5228 | 3875 | gtk_tree_store_set(gtkblist->treemodel, iter, |
| 3876 | NODE_COLUMN, node, | |
| 3877 | -1); | |
| 7620 | 3878 | |
| 3879 | if(node->parent) { | |
| 3880 | GtkTreePath *expand = NULL; | |
| 3881 | struct _gaim_gtk_blist_node *gtkparentnode = node->parent->ui_data; | |
| 3882 | ||
| 3883 | if(GAIM_BLIST_NODE_IS_GROUP(node->parent)) { | |
| 7693 | 3884 | if(!gaim_blist_node_get_bool(node->parent, "collapsed")) |
| 7620 | 3885 | expand = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &parent_iter); |
| 3886 | } else if(GAIM_BLIST_NODE_IS_CONTACT(node->parent) && | |
| 3887 | gtkparentnode->contact_expanded) { | |
| 3888 | expand = gtk_tree_model_get_path(GTK_TREE_MODEL(gtkblist->treemodel), &parent_iter); | |
| 3889 | } | |
| 3890 | if(expand) { | |
| 7693 | 3891 | gtk_tree_view_expand_row(GTK_TREE_VIEW(gtkblist->treeview), expand, FALSE); |
| 7620 | 3892 | gtk_tree_path_free(expand); |
| 3893 | } | |
| 3894 | } | |
| 3895 | ||
| 8252 | 3896 | return TRUE; |
| 5228 | 3897 | } |
| 3898 | ||
| 7620 | 3899 | static void gaim_gtk_blist_update_group(GaimBuddyList *list, GaimBlistNode *node) |
| 3900 | { | |
| 3901 | GaimGroup *group; | |
|
8203
23f66d41ff8c
[gaim-migrate @ 8926]
Alex Smith <madalex@users.sourceforge.net>
parents:
8198
diff
changeset
|
3902 | int count; |
|
12341
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3903 | gboolean show = FALSE; |
| 7620 | 3904 | |
| 3905 | g_return_if_fail(GAIM_BLIST_NODE_IS_GROUP(node)); | |
| 3906 | ||
| 3907 | group = (GaimGroup*)node; | |
| 3908 | ||
|
8203
23f66d41ff8c
[gaim-migrate @ 8926]
Alex Smith <madalex@users.sourceforge.net>
parents:
8198
diff
changeset
|
3909 | if(gaim_prefs_get_bool("/gaim/gtk/blist/show_offline_buddies")) |
|
23f66d41ff8c
[gaim-migrate @ 8926]
Alex Smith <madalex@users.sourceforge.net>
parents:
8198
diff
changeset
|
3910 | count = gaim_blist_get_group_size(group, FALSE); |
|
23f66d41ff8c
[gaim-migrate @ 8926]
Alex Smith <madalex@users.sourceforge.net>
parents:
8198
diff
changeset
|
3911 | else |
|
23f66d41ff8c
[gaim-migrate @ 8926]
Alex Smith <madalex@users.sourceforge.net>
parents:
8198
diff
changeset
|
3912 | count = gaim_blist_get_group_online_count(group); |
|
12341
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3913 | |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3914 | if (count > 0 || gaim_prefs_get_bool("/gaim/gtk/blist/show_empty_groups")) |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3915 | show = TRUE; |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3916 | else { |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3917 | GaimBlistNode *n; |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3918 | n = node->child; |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3919 | while (n && !GAIM_BLIST_NODE_IS_GROUP(n)) { |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3920 | if (GAIM_BLIST_NODE_IS_BUDDY(n)) { |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3921 | if (buddy_is_displayable((GaimBuddy*)n)) { |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3922 | show = TRUE; |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3923 | break; |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3924 | } |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3925 | } |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3926 | n = gaim_blist_node_next(n, FALSE); |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3927 | } |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3928 | } |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3929 | |
|
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
3930 | if (show) { |
| 7620 | 3931 | char *mark, *esc; |
| 3932 | GtkTreeIter iter; | |
| 3933 | ||
| 8252 | 3934 | if(!insert_node(list, node, &iter)) |
| 3935 | return; | |
| 7620 | 3936 | |
| 3937 | esc = g_markup_escape_text(group->name, -1); | |
|
8945
737ea1155ec1
[gaim-migrate @ 9717]
Mark Doliner <markdoliner@pidgin.im>
parents:
8940
diff
changeset
|
3938 | mark = g_strdup_printf("<span weight='bold'>%s</span> (%d/%d)", |
|
737ea1155ec1
[gaim-migrate @ 9717]
Mark Doliner <markdoliner@pidgin.im>
parents:
8940
diff
changeset
|
3939 | esc, gaim_blist_get_group_online_count(group), |
|
737ea1155ec1
[gaim-migrate @ 9717]
Mark Doliner <markdoliner@pidgin.im>
parents:
8940
diff
changeset
|
3940 | gaim_blist_get_group_size(group, FALSE)); |
| 7620 | 3941 | g_free(esc); |
| 3942 | ||
| 3943 | gtk_tree_store_set(gtkblist->treemodel, &iter, | |
| 3944 | STATUS_ICON_COLUMN, NULL, | |
| 3945 | STATUS_ICON_VISIBLE_COLUMN, FALSE, | |
| 3946 | NAME_COLUMN, mark, | |
| 3947 | NODE_COLUMN, node, | |
| 3948 | -1); | |
| 3949 | g_free(mark); | |
| 3950 | } else { | |
| 3951 | gaim_gtk_blist_hide_node(list, node); | |
| 3952 | } | |
| 3953 | } | |
| 3954 | ||
| 3955 | static void buddy_node(GaimBuddy *buddy, GtkTreeIter *iter, GaimBlistNode *node) | |
| 5228 | 3956 | { |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3957 | GaimPresence *presence; |
| 7620 | 3958 | GdkPixbuf *status, *avatar; |
| 3959 | char *mark; | |
| 11257 | 3960 | char *idle = NULL; |
| 7620 | 3961 | gboolean selected = (gtkblist->selected_node == node); |
| 3962 | ||
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3963 | presence = gaim_buddy_get_presence(buddy); |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3964 | |
| 7620 | 3965 | status = gaim_gtk_blist_get_status_icon((GaimBlistNode*)buddy, |
| 3966 | (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons") | |
| 3967 | ? GAIM_STATUS_ICON_LARGE : GAIM_STATUS_ICON_SMALL)); | |
| 3968 | ||
|
10482
01c1287da66f
[gaim-migrate @ 11772]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
10477
diff
changeset
|
3969 | avatar = gaim_gtk_blist_get_buddy_icon((GaimBlistNode *)buddy, TRUE, TRUE); |
| 7620 | 3970 | mark = gaim_gtk_blist_get_name_markup(buddy, selected); |
| 3971 | ||
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3972 | if (gaim_presence_is_idle(presence)) |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3973 | { |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3974 | time_t idle_secs = gaim_presence_get_idle_time(presence); |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3975 | |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3976 | if (idle_secs > 0) |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3977 | { |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3978 | time_t t; |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3979 | int ihrs, imin; |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3980 | time(&t); |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3981 | ihrs = (t - idle_secs) / 3600; |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3982 | imin = ((t - idle_secs) / 60) % 60; |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3983 | |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3984 | if (ihrs > 0) |
|
12357
3b0e740b1b7e
[gaim-migrate @ 14661]
Richard Laager <rlaager@pidgin.im>
parents:
12348
diff
changeset
|
3985 | idle = g_strdup_printf("%d:%02d", ihrs, imin); |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3986 | else |
|
12357
3b0e740b1b7e
[gaim-migrate @ 14661]
Richard Laager <rlaager@pidgin.im>
parents:
12348
diff
changeset
|
3987 | idle = g_strdup_printf("%d", imin); |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3988 | } |
| 7620 | 3989 | } |
| 3990 | ||
| 10118 | 3991 | if (gaim_presence_is_idle(presence)) |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3992 | { |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
3993 | if (idle && !selected) { |
| 10118 | 3994 | char *i2 = g_strdup_printf("<span color='%s'>%s</span>", |
| 3995 | dim_grey(), idle); | |
| 7620 | 3996 | g_free(idle); |
| 3997 | idle = i2; | |
| 5228 | 3998 | } |
| 7620 | 3999 | } |
| 4000 | ||
| 4001 | gtk_tree_store_set(gtkblist->treemodel, iter, | |
| 4002 | STATUS_ICON_COLUMN, status, | |
| 4003 | STATUS_ICON_VISIBLE_COLUMN, TRUE, | |
| 4004 | NAME_COLUMN, mark, | |
| 4005 | IDLE_COLUMN, idle, | |
| 4006 | BUDDY_ICON_COLUMN, avatar, | |
| 4007 | -1); | |
| 4008 | ||
| 4009 | g_free(mark); | |
| 4010 | if(idle) | |
| 4011 | g_free(idle); | |
| 4012 | if(status) | |
| 4013 | g_object_unref(status); | |
| 4014 | if(avatar) | |
| 4015 | g_object_unref(avatar); | |
| 4016 | } | |
| 4017 | ||
| 11890 | 4018 | |
| 7620 | 4019 | static void gaim_gtk_blist_update_contact(GaimBuddyList *list, GaimBlistNode *node) |
| 4020 | { | |
| 4021 | GaimContact *contact; | |
| 4022 | GaimBuddy *buddy; | |
| 4023 | struct _gaim_gtk_blist_node *gtknode; | |
| 4024 | ||
| 4025 | g_return_if_fail(GAIM_BLIST_NODE_IS_CONTACT(node)); | |
| 4026 | ||
| 4027 | /* First things first, update the group */ | |
| 4028 | gaim_gtk_blist_update_group(list, node->parent); | |
| 4029 | ||
| 4030 | contact = (GaimContact*)node; | |
| 4031 | buddy = gaim_contact_get_priority_buddy(contact); | |
| 4032 | ||
| 11890 | 4033 | if (buddy_is_displayable(buddy)) |
|
10006
800a81666868
[gaim-migrate @ 10923]
Dave West <kat@users.sourceforge.net>
parents:
9993
diff
changeset
|
4034 | { |
| 7620 | 4035 | GtkTreeIter iter; |
| 4036 | ||
| 8252 | 4037 | if(!insert_node(list, node, &iter)) |
| 4038 | return; | |
| 7620 | 4039 | |
|
10515
865130ede44a
[gaim-migrate @ 11816]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10510
diff
changeset
|
4040 | gtknode = (struct _gaim_gtk_blist_node *)node->ui_data; |
|
865130ede44a
[gaim-migrate @ 11816]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10510
diff
changeset
|
4041 | |
| 7620 | 4042 | if(gtknode->contact_expanded) { |
| 4043 | GdkPixbuf *status; | |
| 5228 | 4044 | char *mark; |
| 4045 | ||
| 7620 | 4046 | status = gaim_gtk_blist_get_status_icon(node, |
| 4047 | (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons") ? | |
| 4048 | GAIM_STATUS_ICON_LARGE : GAIM_STATUS_ICON_SMALL)); | |
| 4049 | ||
| 4050 | mark = g_markup_escape_text(gaim_contact_get_alias(contact), -1); | |
| 4051 | ||
| 5228 | 4052 | gtk_tree_store_set(gtkblist->treemodel, &iter, |
| 7620 | 4053 | STATUS_ICON_COLUMN, status, |
| 4054 | STATUS_ICON_VISIBLE_COLUMN, TRUE, | |
| 5228 | 4055 | NAME_COLUMN, mark, |
| 7620 | 4056 | IDLE_COLUMN, NULL, |
| 4057 | BUDDY_ICON_COLUMN, NULL, | |
| 5228 | 4058 | -1); |
| 4059 | g_free(mark); | |
| 7620 | 4060 | if(status) |
| 4061 | g_object_unref(status); | |
| 4062 | } else { | |
| 4063 | buddy_node(buddy, &iter, node); | |
| 5228 | 4064 | } |
| 7620 | 4065 | } else { |
| 4066 | gaim_gtk_blist_hide_node(list, node); | |
| 5228 | 4067 | } |
| 7620 | 4068 | } |
| 4069 | ||
| 4070 | static void gaim_gtk_blist_update_buddy(GaimBuddyList *list, GaimBlistNode *node) | |
| 4071 | { | |
| 4072 | GaimContact *contact; | |
| 4073 | GaimBuddy *buddy; | |
| 4074 | struct _gaim_gtk_blist_node *gtkparentnode; | |
| 4075 | ||
| 4076 | g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(node)); | |
| 4077 | ||
| 4078 | buddy = (GaimBuddy*)node; | |
| 4079 | contact = (GaimContact*)node->parent; | |
| 4080 | ||
|
11624
0b281b559662
[gaim-migrate @ 13899]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11577
diff
changeset
|
4081 | if (contact == NULL) |
|
0b281b559662
[gaim-migrate @ 13899]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11577
diff
changeset
|
4082 | return; |
|
0b281b559662
[gaim-migrate @ 13899]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
11577
diff
changeset
|
4083 | |
| 7620 | 4084 | /* First things first, update the contact */ |
| 4085 | gaim_gtk_blist_update_contact(list, node->parent); | |
| 4086 | ||
|
10918
77103f5ad580
[gaim-migrate @ 12681]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10884
diff
changeset
|
4087 | gtkparentnode = (struct _gaim_gtk_blist_node *)node->parent->ui_data; |
|
77103f5ad580
[gaim-migrate @ 12681]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10884
diff
changeset
|
4088 | |
|
12341
a4b5f9eb0d83
[gaim-migrate @ 14645]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12338
diff
changeset
|
4089 | if (gtkparentnode->contact_expanded && buddy_is_displayable(buddy)) |
|
10006
800a81666868
[gaim-migrate @ 10923]
Dave West <kat@users.sourceforge.net>
parents:
9993
diff
changeset
|
4090 | { |
| 7620 | 4091 | GtkTreeIter iter; |
| 4092 | ||
|
10006
800a81666868
[gaim-migrate @ 10923]
Dave West <kat@users.sourceforge.net>
parents:
9993
diff
changeset
|
4093 | if (!insert_node(list, node, &iter)) |
| 8252 | 4094 | return; |
| 4095 | ||
| 7620 | 4096 | buddy_node(buddy, &iter, node); |
| 4097 | ||
| 4098 | } else { | |
| 4099 | gaim_gtk_blist_hide_node(list, node); | |
| 4100 | } | |
| 4101 | ||
| 4102 | } | |
| 4103 | ||
| 4104 | static void gaim_gtk_blist_update_chat(GaimBuddyList *list, GaimBlistNode *node) | |
| 4105 | { | |
| 4106 | GaimChat *chat; | |
| 4107 | ||
| 4108 | g_return_if_fail(GAIM_BLIST_NODE_IS_CHAT(node)); | |
| 4109 | ||
| 4110 | /* First things first, update the group */ | |
| 4111 | gaim_gtk_blist_update_group(list, node->parent); | |
| 4112 | ||
| 4113 | chat = (GaimChat*)node; | |
| 4114 | ||
| 4115 | if(gaim_account_is_connected(chat->account)) { | |
| 4116 | GtkTreeIter iter; | |
| 5234 | 4117 | GdkPixbuf *status; |
| 7620 | 4118 | char *mark; |
| 4119 | ||
| 8252 | 4120 | if(!insert_node(list, node, &iter)) |
| 4121 | return; | |
| 5234 | 4122 | |
| 4123 | status = gaim_gtk_blist_get_status_icon(node, | |
| 7620 | 4124 | (gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons") ? |
| 4125 | GAIM_STATUS_ICON_LARGE : GAIM_STATUS_ICON_SMALL)); | |
| 4126 | ||
| 4127 | mark = g_markup_escape_text(gaim_chat_get_name(chat), -1); | |
| 5234 | 4128 | |
| 4129 | gtk_tree_store_set(gtkblist->treemodel, &iter, | |
| 7620 | 4130 | STATUS_ICON_COLUMN, status, |
| 4131 | STATUS_ICON_VISIBLE_COLUMN, TRUE, | |
| 4132 | NAME_COLUMN, mark, | |
| 4133 | -1); | |
| 5228 | 4134 | |
| 4135 | g_free(mark); | |
| 7620 | 4136 | if(status) |
| 5228 | 4137 | g_object_unref(status); |
| 7620 | 4138 | } else { |
| 5260 | 4139 | gaim_gtk_blist_hide_node(list, node); |
| 5228 | 4140 | } |
| 7620 | 4141 | } |
| 4142 | ||
| 4143 | static void gaim_gtk_blist_update(GaimBuddyList *list, GaimBlistNode *node) | |
| 4144 | { | |
| 4145 | if(!gtkblist) | |
| 4146 | return; | |
| 4147 | ||
| 4148 | switch(node->type) { | |
| 4149 | case GAIM_BLIST_GROUP_NODE: | |
| 4150 | gaim_gtk_blist_update_group(list, node); | |
| 4151 | break; | |
| 4152 | case GAIM_BLIST_CONTACT_NODE: | |
| 4153 | gaim_gtk_blist_update_contact(list, node); | |
| 4154 | break; | |
| 4155 | case GAIM_BLIST_BUDDY_NODE: | |
| 4156 | gaim_gtk_blist_update_buddy(list, node); | |
| 4157 | break; | |
| 4158 | case GAIM_BLIST_CHAT_NODE: | |
| 4159 | gaim_gtk_blist_update_chat(list, node); | |
| 4160 | break; | |
| 4161 | case GAIM_BLIST_OTHER_NODE: | |
| 4162 | return; | |
| 4163 | } | |
| 5234 | 4164 | |
| 5228 | 4165 | gtk_tree_view_columns_autosize(GTK_TREE_VIEW(gtkblist->treeview)); |
| 4166 | } | |
| 4167 | ||
| 7620 | 4168 | |
| 4169 | static void gaim_gtk_blist_destroy(GaimBuddyList *list) | |
| 5228 | 4170 | { |
| 4171 | if (!gtkblist) | |
| 4172 | return; | |
| 4173 | ||
|
8937
b436e9cbd701
[gaim-migrate @ 9707]
Mark Doliner <markdoliner@pidgin.im>
parents:
8911
diff
changeset
|
4174 | gaim_signal_disconnect(gaim_connections_get_handle(), "signed-on", |
|
b436e9cbd701
[gaim-migrate @ 9707]
Mark Doliner <markdoliner@pidgin.im>
parents:
8911
diff
changeset
|
4175 | gtkblist, GAIM_CALLBACK(sign_on_off_cb)); |
|
b436e9cbd701
[gaim-migrate @ 9707]
Mark Doliner <markdoliner@pidgin.im>
parents:
8911
diff
changeset
|
4176 | gaim_signal_disconnect(gaim_connections_get_handle(), "signed-off", |
|
b436e9cbd701
[gaim-migrate @ 9707]
Mark Doliner <markdoliner@pidgin.im>
parents:
8911
diff
changeset
|
4177 | gtkblist, GAIM_CALLBACK(sign_on_off_cb)); |
|
8259
7ed91862683d
[gaim-migrate @ 8982]
Christian Hammond <chipx86@chipx86.com>
parents:
8254
diff
changeset
|
4178 | |
| 5228 | 4179 | gtk_widget_destroy(gtkblist->window); |
| 7620 | 4180 | |
|
8254
3b3d86ef983b
[gaim-migrate @ 8977]
Mark Doliner <markdoliner@pidgin.im>
parents:
8252
diff
changeset
|
4181 | gaim_gtk_blist_tooltip_destroy(); |
| 7620 | 4182 | |
| 5228 | 4183 | if (gtkblist->refresh_timer) |
| 4184 | g_source_remove(gtkblist->refresh_timer); | |
| 4185 | if (gtkblist->timeout) | |
| 4186 | g_source_remove(gtkblist->timeout); | |
| 10354 | 4187 | if (gtkblist->drag_timeout) |
| 4188 | g_source_remove(gtkblist->drag_timeout); | |
| 5228 | 4189 | |
| 4190 | gtkblist->refresh_timer = 0; | |
| 4191 | gtkblist->timeout = 0; | |
| 10354 | 4192 | gtkblist->drag_timeout = 0; |
| 5228 | 4193 | gtkblist->window = gtkblist->vbox = gtkblist->treeview = NULL; |
| 4194 | gtkblist->treemodel = NULL; | |
| 4195 | gtkblist->idle_column = NULL; | |
| 12296 | 4196 | gtkblist->buddy_icon_column = NULL; |
|
5427
a45fa07ef20d
[gaim-migrate @ 5806]
Mark Doliner <markdoliner@pidgin.im>
parents:
5422
diff
changeset
|
4197 | g_object_unref(G_OBJECT(gtkblist->ift)); |
| 12296 | 4198 | accountmenu = NULL; |
| 5228 | 4199 | gtkblist = NULL; |
| 7620 | 4200 | |
|
10087
e5b80a38939d
[gaim-migrate @ 11098]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10079
diff
changeset
|
4201 | gaim_prefs_disconnect_by_handle(gaim_gtk_blist_get_handle()); |
| 5228 | 4202 | } |
| 4203 | ||
| 7620 | 4204 | static void gaim_gtk_blist_set_visible(GaimBuddyList *list, gboolean show) |
| 5228 | 4205 | { |
| 4206 | if (!(gtkblist && gtkblist->window)) | |
| 4207 | return; | |
|
10325
9bb530214bae
[gaim-migrate @ 11532]
Mark Doliner <markdoliner@pidgin.im>
parents:
10320
diff
changeset
|
4208 | |
| 5228 | 4209 | if (show) { |
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4210 | if(!GAIM_WINDOW_ICONIFIED(gtkblist->window) && !GTK_WIDGET_VISIBLE(gtkblist->window)) |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4211 | gaim_signal_emit(gaim_gtk_blist_get_handle(), "gtkblist-unhiding", gtkblist); |
| 5228 | 4212 | gaim_gtk_blist_restore_position(); |
| 4213 | gtk_window_present(GTK_WINDOW(gtkblist->window)); | |
| 4214 | } else { | |
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4215 | if(visibility_manager_count) { |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4216 | gaim_signal_emit(gaim_gtk_blist_get_handle(), "gtkblist-hiding", gtkblist); |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4217 | gtk_widget_hide(gtkblist->window); |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4218 | } else { |
|
12479
01ea9120820a
[gaim-migrate @ 14790]
Casey Harkins <charkins@pidgin.im>
parents:
12478
diff
changeset
|
4219 | if (!GTK_WIDGET_VISIBLE(gtkblist->window)) |
|
01ea9120820a
[gaim-migrate @ 14790]
Casey Harkins <charkins@pidgin.im>
parents:
12478
diff
changeset
|
4220 | gtk_widget_show(gtkblist->window); |
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4221 | gtk_window_iconify(GTK_WINDOW(gtkblist->window)); |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4222 | } |
| 5228 | 4223 | } |
| 4224 | } | |
| 4225 | ||
| 7620 | 4226 | static GList * |
| 4227 | groups_tree(void) | |
| 4228 | { | |
| 4229 | GList *tmp = NULL; | |
| 4230 | char *tmp2; | |
| 4231 | GaimGroup *g; | |
| 4232 | GaimBlistNode *gnode; | |
| 4233 | ||
| 4234 | if (gaim_get_blist()->root == NULL) | |
| 4235 | { | |
| 4236 | tmp2 = g_strdup(_("Buddies")); | |
| 4237 | tmp = g_list_append(tmp, tmp2); | |
| 4238 | } | |
| 4239 | else | |
| 4240 | { | |
| 4241 | for (gnode = gaim_get_blist()->root; | |
| 4242 | gnode != NULL; | |
| 4243 | gnode = gnode->next) | |
| 4244 | { | |
| 4245 | if (GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
| 4246 | { | |
| 4247 | g = (GaimGroup *)gnode; | |
| 4248 | tmp2 = g->name; | |
| 4249 | tmp = g_list_append(tmp, tmp2); | |
| 4250 | } | |
| 4251 | } | |
| 4252 | } | |
| 4253 | ||
| 4254 | return tmp; | |
| 4255 | } | |
| 4256 | ||
| 4257 | static void | |
| 4258 | add_buddy_select_account_cb(GObject *w, GaimAccount *account, | |
| 4259 | GaimGtkAddBuddyData *data) | |
| 4260 | { | |
| 4261 | /* Save our account */ | |
| 4262 | data->account = account; | |
| 4263 | } | |
| 4264 | ||
| 4265 | static void | |
| 4266 | destroy_add_buddy_dialog_cb(GtkWidget *win, GaimGtkAddBuddyData *data) | |
| 4267 | { | |
| 4268 | g_free(data); | |
| 4269 | } | |
| 4270 | ||
| 4271 | static void | |
| 4272 | add_buddy_cb(GtkWidget *w, int resp, GaimGtkAddBuddyData *data) | |
| 4273 | { | |
| 4274 | const char *grp, *who, *whoalias; | |
| 4275 | GaimConversation *c; | |
| 4276 | GaimBuddy *b; | |
| 4277 | GaimGroup *g; | |
| 4278 | ||
| 4279 | if (resp == GTK_RESPONSE_OK) | |
| 4280 | { | |
| 4281 | who = gtk_entry_get_text(GTK_ENTRY(data->entry)); | |
| 4282 | grp = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(data->combo)->entry)); | |
| 4283 | whoalias = gtk_entry_get_text(GTK_ENTRY(data->entry_for_alias)); | |
|
9658
261c1ce87287
[gaim-migrate @ 10506]
Mark Doliner <markdoliner@pidgin.im>
parents:
9646
diff
changeset
|
4284 | if (*whoalias == '\0') |
|
261c1ce87287
[gaim-migrate @ 10506]
Mark Doliner <markdoliner@pidgin.im>
parents:
9646
diff
changeset
|
4285 | whoalias = NULL; |
| 7620 | 4286 | |
| 4287 | if ((g = gaim_find_group(grp)) == NULL) | |
| 4288 | { | |
| 4289 | g = gaim_group_new(grp); | |
| 4290 | gaim_blist_add_group(g, NULL); | |
| 4291 | } | |
| 4292 | ||
| 4293 | b = gaim_buddy_new(data->account, who, whoalias); | |
| 4294 | gaim_blist_add_buddy(b, NULL, g, NULL); | |
|
11643
f04408721780
[gaim-migrate @ 13920]
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
11638
diff
changeset
|
4295 | gaim_account_add_buddy(data->account, b); |
| 7620 | 4296 | |
|
7887
4b2925a88897
[gaim-migrate @ 8545]
Mark Doliner <markdoliner@pidgin.im>
parents:
7879
diff
changeset
|
4297 | /* |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9236
diff
changeset
|
4298 | * XXX |
|
11643
f04408721780
[gaim-migrate @ 13920]
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
11638
diff
changeset
|
4299 | * It really seems like it would be better if the call to |
|
f04408721780
[gaim-migrate @ 13920]
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
11638
diff
changeset
|
4300 | * gaim_account_add_buddy() and gaim_conversation_update() were done in |
|
f04408721780
[gaim-migrate @ 13920]
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
11638
diff
changeset
|
4301 | * blist.c, possibly in the gaim_blist_add_buddy() function. Maybe |
|
f04408721780
[gaim-migrate @ 13920]
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
11638
diff
changeset
|
4302 | * gaim_account_add_buddy() should be renamed to |
|
f04408721780
[gaim-migrate @ 13920]
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
11638
diff
changeset
|
4303 | * gaim_blist_add_new_buddy() or something, and have it call |
|
7887
4b2925a88897
[gaim-migrate @ 8545]
Mark Doliner <markdoliner@pidgin.im>
parents:
7879
diff
changeset
|
4304 | * gaim_blist_add_buddy() after it creates it. --Mark |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9236
diff
changeset
|
4305 | * |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9236
diff
changeset
|
4306 | * No that's not good. blist.c should only deal with adding nodes to the |
|
11643
f04408721780
[gaim-migrate @ 13920]
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
11638
diff
changeset
|
4307 | * local list. We need a new, non-gtk file that calls both |
|
f04408721780
[gaim-migrate @ 13920]
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
11638
diff
changeset
|
4308 | * gaim_account_add_buddy and gaim_blist_add_buddy(). |
|
f04408721780
[gaim-migrate @ 13920]
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
11638
diff
changeset
|
4309 | * Or something. --Mark |
|
7887
4b2925a88897
[gaim-migrate @ 8545]
Mark Doliner <markdoliner@pidgin.im>
parents:
7879
diff
changeset
|
4310 | */ |
|
4b2925a88897
[gaim-migrate @ 8545]
Mark Doliner <markdoliner@pidgin.im>
parents:
7879
diff
changeset
|
4311 | |
|
11338
1a3663ac9b05
[gaim-migrate @ 13551]
Mark Doliner <markdoliner@pidgin.im>
parents:
11258
diff
changeset
|
4312 | c = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, who, data->account); |
| 7620 | 4313 | if (c != NULL) { |
| 4314 | gaim_buddy_icon_update(gaim_conv_im_get_icon(GAIM_CONV_IM(c))); | |
| 4315 | gaim_conversation_update(c, GAIM_CONV_UPDATE_ADD); | |
| 4316 | } | |
| 4317 | } | |
| 4318 | ||
| 4319 | gtk_widget_destroy(data->window); | |
| 4320 | } | |
| 4321 | ||
| 4322 | static void | |
| 4323 | gaim_gtk_blist_request_add_buddy(GaimAccount *account, const char *username, | |
| 4324 | const char *group, const char *alias) | |
| 4325 | { | |
| 4326 | GtkWidget *table; | |
| 4327 | GtkWidget *label; | |
| 4328 | GtkWidget *hbox; | |
| 4329 | GtkWidget *vbox; | |
| 4330 | GtkWidget *img; | |
| 4331 | GaimGtkBuddyList *gtkblist; | |
| 4332 | GaimGtkAddBuddyData *data = g_new0(GaimGtkAddBuddyData, 1); | |
| 4333 | ||
| 4334 | data->account = | |
| 4335 | (account != NULL | |
| 4336 | ? account | |
| 4337 | : gaim_connection_get_account(gaim_connections_get_all()->data)); | |
| 4338 | ||
| 4339 | img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, | |
| 4340 | GTK_ICON_SIZE_DIALOG); | |
| 4341 | ||
| 4342 | gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); | |
| 4343 | ||
| 4344 | data->window = gtk_dialog_new_with_buttons(_("Add Buddy"), | |
| 8975 | 4345 | NULL, GTK_DIALOG_NO_SEPARATOR, |
| 7620 | 4346 | GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, |
| 4347 | GTK_STOCK_ADD, GTK_RESPONSE_OK, | |
| 4348 | NULL); | |
| 4349 | ||
| 4350 | gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); | |
| 11243 | 4351 | gtk_container_set_border_width(GTK_CONTAINER(data->window), GAIM_HIG_BOX_SPACE); |
| 7620 | 4352 | gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); |
| 11243 | 4353 | gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), GAIM_HIG_BORDER); |
| 4354 | gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), GAIM_HIG_BOX_SPACE); | |
| 7620 | 4355 | gtk_window_set_role(GTK_WINDOW(data->window), "add_buddy"); |
| 8975 | 4356 | gtk_window_set_type_hint(GTK_WINDOW(data->window), |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
4357 | GDK_WINDOW_TYPE_HINT_DIALOG); |
| 7620 | 4358 | |
| 11243 | 4359 | hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); |
| 7620 | 4360 | gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); |
| 4361 | gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
| 4362 | gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
| 4363 | ||
| 4364 | vbox = gtk_vbox_new(FALSE, 0); | |
| 4365 | gtk_container_add(GTK_CONTAINER(hbox), vbox); | |
| 4366 | ||
| 4367 | label = gtk_label_new( | |
| 4368 | _("Please enter the screen name of the person you would like " | |
| 4369 | "to add to your buddy list. You may optionally enter an alias, " | |
| 4370 | "or nickname, for the buddy. The alias will be displayed in " | |
| 4371 | "place of the screen name whenever possible.\n")); | |
| 4372 | ||
| 4373 | gtk_widget_set_size_request(GTK_WIDGET(label), 400, -1); | |
| 4374 | gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
| 4375 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
| 4376 | gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | |
| 4377 | ||
| 11243 | 4378 | hbox = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE); |
| 7620 | 4379 | gtk_container_add(GTK_CONTAINER(vbox), hbox); |
| 4380 | ||
| 4381 | g_signal_connect(G_OBJECT(data->window), "destroy", | |
| 4382 | G_CALLBACK(destroy_add_buddy_dialog_cb), data); | |
| 4383 | ||
| 4384 | table = gtk_table_new(4, 2, FALSE); | |
| 4385 | gtk_table_set_row_spacings(GTK_TABLE(table), 5); | |
| 4386 | gtk_table_set_col_spacings(GTK_TABLE(table), 5); | |
| 4387 | gtk_container_set_border_width(GTK_CONTAINER(table), 0); | |
| 4388 | gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); | |
| 4389 | ||
| 4390 | label = gtk_label_new(_("Screen Name:")); | |
| 4391 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | |
| 4392 | gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); | |
| 4393 | ||
| 4394 | data->entry = gtk_entry_new(); | |
| 4395 | gtk_table_attach_defaults(GTK_TABLE(table), data->entry, 1, 2, 0, 1); | |
| 4396 | gtk_widget_grab_focus(data->entry); | |
| 4397 | ||
| 4398 | if (username != NULL) | |
| 4399 | gtk_entry_set_text(GTK_ENTRY(data->entry), username); | |
|
12337
1c9251d1f005
[gaim-migrate @ 14641]
Mark Doliner <markdoliner@pidgin.im>
parents:
12334
diff
changeset
|
4400 | else |
|
1c9251d1f005
[gaim-migrate @ 14641]
Mark Doliner <markdoliner@pidgin.im>
parents:
12334
diff
changeset
|
4401 | gtk_dialog_set_response_sensitive(GTK_DIALOG(data->window), |
|
1c9251d1f005
[gaim-migrate @ 14641]
Mark Doliner <markdoliner@pidgin.im>
parents:
12334
diff
changeset
|
4402 | GTK_RESPONSE_OK, FALSE); |
| 7620 | 4403 | |
| 4404 | gtk_entry_set_activates_default (GTK_ENTRY(data->entry), TRUE); | |
| 8137 | 4405 | gaim_set_accessible_label (data->entry, label); |
| 7620 | 4406 | |
|
12337
1c9251d1f005
[gaim-migrate @ 14641]
Mark Doliner <markdoliner@pidgin.im>
parents:
12334
diff
changeset
|
4407 | g_signal_connect(G_OBJECT(data->entry), "changed", |
|
1c9251d1f005
[gaim-migrate @ 14641]
Mark Doliner <markdoliner@pidgin.im>
parents:
12334
diff
changeset
|
4408 | G_CALLBACK(gaim_gtk_set_sensitive_if_input), |
|
1c9251d1f005
[gaim-migrate @ 14641]
Mark Doliner <markdoliner@pidgin.im>
parents:
12334
diff
changeset
|
4409 | data->window); |
|
1c9251d1f005
[gaim-migrate @ 14641]
Mark Doliner <markdoliner@pidgin.im>
parents:
12334
diff
changeset
|
4410 | |
| 7620 | 4411 | label = gtk_label_new(_("Alias:")); |
| 4412 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | |
| 4413 | gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); | |
| 4414 | ||
| 4415 | data->entry_for_alias = gtk_entry_new(); | |
| 4416 | gtk_table_attach_defaults(GTK_TABLE(table), | |
| 4417 | data->entry_for_alias, 1, 2, 1, 2); | |
| 4418 | ||
| 4419 | if (alias != NULL) | |
| 4420 | gtk_entry_set_text(GTK_ENTRY(data->entry_for_alias), alias); | |
| 4421 | ||
|
10734
4e49449724ec
[gaim-migrate @ 12336]
Richard Laager <rlaager@pidgin.im>
parents:
10694
diff
changeset
|
4422 | if (username != NULL) |
|
4e49449724ec
[gaim-migrate @ 12336]
Richard Laager <rlaager@pidgin.im>
parents:
10694
diff
changeset
|
4423 | gtk_widget_grab_focus(GTK_WIDGET(data->entry_for_alias)); |
|
4e49449724ec
[gaim-migrate @ 12336]
Richard Laager <rlaager@pidgin.im>
parents:
10694
diff
changeset
|
4424 | |
| 7620 | 4425 | gtk_entry_set_activates_default (GTK_ENTRY(data->entry_for_alias), TRUE); |
| 8137 | 4426 | gaim_set_accessible_label (data->entry_for_alias, label); |
| 7620 | 4427 | |
| 4428 | label = gtk_label_new(_("Group:")); | |
| 4429 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | |
| 4430 | gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 2, 3); | |
| 4431 | ||
| 4432 | data->combo = gtk_combo_new(); | |
| 4433 | gtk_combo_set_popdown_strings(GTK_COMBO(data->combo), groups_tree()); | |
| 4434 | gtk_table_attach_defaults(GTK_TABLE(table), data->combo, 1, 2, 2, 3); | |
| 8137 | 4435 | gaim_set_accessible_label (data->combo, label); |
| 7620 | 4436 | |
| 4437 | /* Set up stuff for the account box */ | |
| 4438 | label = gtk_label_new(_("Account:")); | |
| 4439 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | |
| 4440 | gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 3, 4); | |
| 4441 | ||
| 4442 | data->account_box = gaim_gtk_account_option_menu_new(account, FALSE, | |
| 4443 | G_CALLBACK(add_buddy_select_account_cb), NULL, data); | |
| 4444 | ||
| 4445 | gtk_table_attach_defaults(GTK_TABLE(table), data->account_box, 1, 2, 3, 4); | |
| 8137 | 4446 | gaim_set_accessible_label (data->account_box, label); |
| 7620 | 4447 | /* End of account box */ |
| 4448 | ||
| 4449 | g_signal_connect(G_OBJECT(data->window), "response", | |
| 4450 | G_CALLBACK(add_buddy_cb), data); | |
| 4451 | ||
| 4452 | gtk_widget_show_all(data->window); | |
| 4453 | ||
| 4454 | if (group != NULL) | |
| 4455 | gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(data->combo)->entry), group); | |
| 4456 | } | |
| 4457 | ||
| 4458 | static void | |
| 4459 | add_chat_cb(GtkWidget *w, GaimGtkAddChatData *data) | |
| 4460 | { | |
| 4461 | GHashTable *components; | |
| 4462 | GList *tmp; | |
| 4463 | GaimChat *chat; | |
| 4464 | GaimGroup *group; | |
| 4465 | const char *group_name; | |
|
9918
654d0c5a9f03
[gaim-migrate @ 10810]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9917
diff
changeset
|
4466 | char *chat_name = NULL; |
|
654d0c5a9f03
[gaim-migrate @ 10810]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9917
diff
changeset
|
4467 | GaimConversation *conv = NULL; |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4468 | const char *value; |
| 7620 | 4469 | |
| 4470 | components = g_hash_table_new_full(g_str_hash, g_str_equal, | |
| 4471 | g_free, g_free); | |
| 4472 | ||
| 4473 | for (tmp = data->entries; tmp; tmp = tmp->next) | |
| 4474 | { | |
| 4475 | if (g_object_get_data(tmp->data, "is_spin")) | |
| 4476 | { | |
| 4477 | g_hash_table_replace(components, | |
| 4478 | g_strdup(g_object_get_data(tmp->data, "identifier")), | |
| 4479 | g_strdup_printf("%d", | |
| 4480 | gtk_spin_button_get_value_as_int(tmp->data))); | |
| 4481 | } | |
| 4482 | else | |
| 4483 | { | |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4484 | value = gtk_entry_get_text(tmp->data); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4485 | if (*value != '\0') |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4486 | g_hash_table_replace(components, |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4487 | g_strdup(g_object_get_data(tmp->data, "identifier")), |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4488 | g_strdup(value)); |
| 7620 | 4489 | } |
| 4490 | } | |
| 4491 | ||
| 4492 | chat = gaim_chat_new(data->account, | |
| 4493 | gtk_entry_get_text(GTK_ENTRY(data->alias_entry)), | |
| 4494 | components); | |
| 4495 | ||
| 4496 | group_name = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(data->group_combo)->entry)); | |
| 4497 | ||
| 4498 | if ((group = gaim_find_group(group_name)) == NULL) | |
| 4499 | { | |
| 4500 | group = gaim_group_new(group_name); | |
| 4501 | gaim_blist_add_group(group, NULL); | |
| 4502 | } | |
| 4503 | ||
| 4504 | if (chat != NULL) | |
| 4505 | { | |
| 4506 | gaim_blist_add_chat(chat, group, NULL); | |
|
9918
654d0c5a9f03
[gaim-migrate @ 10810]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9917
diff
changeset
|
4507 | |
|
654d0c5a9f03
[gaim-migrate @ 10810]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9917
diff
changeset
|
4508 | if (GAIM_PLUGIN_PROTOCOL_INFO(data->account->gc->prpl)->get_chat_name != NULL) |
|
654d0c5a9f03
[gaim-migrate @ 10810]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9917
diff
changeset
|
4509 | chat_name = GAIM_PLUGIN_PROTOCOL_INFO( |
|
654d0c5a9f03
[gaim-migrate @ 10810]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9917
diff
changeset
|
4510 | data->account->gc->prpl)->get_chat_name(chat->components); |
|
10246
aa5bff72f94c
[gaim-migrate @ 11386]
Mark Doliner <markdoliner@pidgin.im>
parents:
10240
diff
changeset
|
4511 | |
|
9918
654d0c5a9f03
[gaim-migrate @ 10810]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9917
diff
changeset
|
4512 | if (chat_name != NULL) { |
|
11338
1a3663ac9b05
[gaim-migrate @ 13551]
Mark Doliner <markdoliner@pidgin.im>
parents:
11258
diff
changeset
|
4513 | conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_CHAT, |
|
10246
aa5bff72f94c
[gaim-migrate @ 11386]
Mark Doliner <markdoliner@pidgin.im>
parents:
10240
diff
changeset
|
4514 | chat_name, |
|
aa5bff72f94c
[gaim-migrate @ 11386]
Mark Doliner <markdoliner@pidgin.im>
parents:
10240
diff
changeset
|
4515 | data->account); |
|
9918
654d0c5a9f03
[gaim-migrate @ 10810]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9917
diff
changeset
|
4516 | g_free(chat_name); |
|
654d0c5a9f03
[gaim-migrate @ 10810]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9917
diff
changeset
|
4517 | } |
|
654d0c5a9f03
[gaim-migrate @ 10810]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9917
diff
changeset
|
4518 | |
|
654d0c5a9f03
[gaim-migrate @ 10810]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9917
diff
changeset
|
4519 | if (conv != NULL) |
|
654d0c5a9f03
[gaim-migrate @ 10810]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9917
diff
changeset
|
4520 | gaim_conversation_update(conv, GAIM_CONV_UPDATE_ADD); |
| 7620 | 4521 | } |
| 4522 | ||
| 4523 | gtk_widget_destroy(data->window); | |
|
9812
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4524 | g_free(data->default_chat_name); |
| 7620 | 4525 | g_list_free(data->entries); |
| 4526 | g_free(data); | |
| 4527 | } | |
| 4528 | ||
| 4529 | static void | |
| 4530 | add_chat_resp_cb(GtkWidget *w, int resp, GaimGtkAddChatData *data) | |
| 4531 | { | |
| 4532 | if (resp == GTK_RESPONSE_OK) | |
| 4533 | { | |
| 4534 | add_chat_cb(NULL, data); | |
| 4535 | } | |
| 4536 | else | |
| 4537 | { | |
| 4538 | gtk_widget_destroy(data->window); | |
|
9812
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4539 | g_free(data->default_chat_name); |
| 7620 | 4540 | g_list_free(data->entries); |
| 4541 | g_free(data); | |
| 4542 | } | |
| 4543 | } | |
| 4544 | ||
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4545 | /* |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4546 | * Check the values of all the text entry boxes. If any required input |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4547 | * strings are empty then don't allow the user to click on "OK." |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4548 | */ |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4549 | static void |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4550 | addchat_set_sensitive_if_input_cb(GtkWidget *entry, gpointer user_data) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4551 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4552 | GaimGtkAddChatData *data; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4553 | GList *tmp; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4554 | const char *text; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4555 | gboolean required; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4556 | gboolean sensitive = TRUE; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4557 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4558 | data = user_data; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4559 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4560 | for (tmp = data->entries; tmp != NULL; tmp = tmp->next) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4561 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4562 | if (!g_object_get_data(tmp->data, "is_spin")) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4563 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4564 | required = GPOINTER_TO_INT(g_object_get_data(tmp->data, "required")); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4565 | text = gtk_entry_get_text(tmp->data); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4566 | if (required && (*text == '\0')) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4567 | sensitive = FALSE; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4568 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4569 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4570 | |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4571 | gtk_dialog_set_response_sensitive(GTK_DIALOG(data->window), GTK_RESPONSE_OK, sensitive); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4572 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4573 | |
| 7620 | 4574 | static void |
| 4575 | rebuild_addchat_entries(GaimGtkAddChatData *data) | |
| 4576 | { | |
| 4577 | GaimConnection *gc; | |
| 9959 | 4578 | GList *list = NULL, *tmp = NULL; |
|
9754
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9753
diff
changeset
|
4579 | GHashTable *defaults = NULL; |
| 7620 | 4580 | struct proto_chat_entry *pce; |
| 4581 | gboolean focus = TRUE; | |
| 4582 | ||
|
10127
3ea502c95653
[gaim-migrate @ 11165]
Daniel Atallah <datallah@pidgin.im>
parents:
10118
diff
changeset
|
4583 | g_return_if_fail(data->account != NULL); |
|
3ea502c95653
[gaim-migrate @ 11165]
Daniel Atallah <datallah@pidgin.im>
parents:
10118
diff
changeset
|
4584 | |
| 7620 | 4585 | gc = gaim_account_get_connection(data->account); |
| 4586 | ||
| 4587 | while (GTK_BOX(data->entries_box)->children) | |
| 4588 | { | |
| 4589 | gtk_container_remove(GTK_CONTAINER(data->entries_box), | |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4590 | ((GtkBoxChild *)GTK_BOX(data->entries_box)->children->data)->widget); |
| 7620 | 4591 | } |
| 4592 | ||
| 4593 | if (data->entries != NULL) | |
| 4594 | g_list_free(data->entries); | |
| 4595 | ||
| 4596 | data->entries = NULL; | |
| 4597 | ||
| 9959 | 4598 | if (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL) |
| 4599 | list = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info(gc); | |
| 7620 | 4600 | |
|
9754
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9753
diff
changeset
|
4601 | if (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults != NULL) |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4602 | defaults = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults(gc, data->default_chat_name); |
|
9754
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9753
diff
changeset
|
4603 | |
| 7620 | 4604 | for (tmp = list; tmp; tmp = tmp->next) |
| 4605 | { | |
| 4606 | GtkWidget *label; | |
| 4607 | GtkWidget *rowbox; | |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4608 | GtkWidget *input; |
| 7620 | 4609 | |
| 4610 | pce = tmp->data; | |
| 4611 | ||
| 4612 | rowbox = gtk_hbox_new(FALSE, 5); | |
| 4613 | gtk_box_pack_start(GTK_BOX(data->entries_box), rowbox, FALSE, FALSE, 0); | |
| 4614 | ||
| 7889 | 4615 | label = gtk_label_new_with_mnemonic(pce->label); |
| 7620 | 4616 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
| 4617 | gtk_size_group_add_widget(data->sg, label); | |
| 4618 | gtk_box_pack_start(GTK_BOX(rowbox), label, FALSE, FALSE, 0); | |
| 4619 | ||
| 4620 | if (pce->is_int) | |
| 4621 | { | |
| 4622 | GtkObject *adjust; | |
| 4623 | adjust = gtk_adjustment_new(pce->min, pce->min, pce->max, | |
| 4624 | 1, 10, 10); | |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4625 | input = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 1, 0); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4626 | gtk_widget_set_size_request(input, 50, -1); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4627 | gtk_box_pack_end(GTK_BOX(rowbox), input, FALSE, FALSE, 0); |
| 7620 | 4628 | } |
| 4629 | else | |
| 4630 | { | |
|
9754
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9753
diff
changeset
|
4631 | char *value; |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4632 | input = gtk_entry_new(); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4633 | gtk_entry_set_activates_default(GTK_ENTRY(input), TRUE); |
|
9754
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9753
diff
changeset
|
4634 | value = g_hash_table_lookup(defaults, pce->identifier); |
|
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9753
diff
changeset
|
4635 | if (value != NULL) |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4636 | gtk_entry_set_text(GTK_ENTRY(input), value); |
| 7620 | 4637 | if (pce->secret) |
|
11986
21d2ab6421a7
[gaim-migrate @ 14279]
Mark Doliner <markdoliner@pidgin.im>
parents:
11983
diff
changeset
|
4638 | { |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4639 | gtk_entry_set_visibility(GTK_ENTRY(input), FALSE); |
|
11986
21d2ab6421a7
[gaim-migrate @ 14279]
Mark Doliner <markdoliner@pidgin.im>
parents:
11983
diff
changeset
|
4640 | gtk_entry_set_invisible_char(GTK_ENTRY(input), GAIM_INVISIBLE_CHAR); |
|
21d2ab6421a7
[gaim-migrate @ 14279]
Mark Doliner <markdoliner@pidgin.im>
parents:
11983
diff
changeset
|
4641 | } |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4642 | gtk_box_pack_end(GTK_BOX(rowbox), input, TRUE, TRUE, 0); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4643 | g_signal_connect(G_OBJECT(input), "changed", |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4644 | G_CALLBACK(addchat_set_sensitive_if_input_cb), data); |
| 7620 | 4645 | } |
| 4646 | ||
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4647 | /* Do the following for any type of input widget */ |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4648 | if (focus) |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4649 | { |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4650 | gtk_widget_grab_focus(input); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4651 | focus = FALSE; |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4652 | } |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4653 | gtk_label_set_mnemonic_widget(GTK_LABEL(label), input); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4654 | gaim_set_accessible_label(input, label); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4655 | g_object_set_data(G_OBJECT(input), "identifier", pce->identifier); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4656 | g_object_set_data(G_OBJECT(input), "is_spin", GINT_TO_POINTER(pce->is_int)); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4657 | g_object_set_data(G_OBJECT(input), "required", GINT_TO_POINTER(pce->required)); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4658 | data->entries = g_list_append(data->entries, input); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4659 | |
| 7620 | 4660 | g_free(pce); |
| 4661 | } | |
| 4662 | ||
| 4663 | g_list_free(list); | |
|
9754
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9753
diff
changeset
|
4664 | g_hash_table_destroy(defaults); |
| 7620 | 4665 | |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4666 | /* Set whether the "OK" button should be clickable initially */ |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4667 | addchat_set_sensitive_if_input_cb(NULL, data); |
|
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4668 | |
| 7620 | 4669 | gtk_widget_show_all(data->entries_box); |
| 4670 | } | |
| 4671 | ||
| 4672 | static void | |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4673 | addchat_select_account_cb(GObject *w, GaimAccount *account, |
| 7620 | 4674 | GaimGtkAddChatData *data) |
| 4675 | { | |
|
9460
7c1ab9155fe2
[gaim-migrate @ 10285]
Daniel Atallah <datallah@pidgin.im>
parents:
9396
diff
changeset
|
4676 | if (strcmp(gaim_account_get_protocol_id(data->account), |
|
7c1ab9155fe2
[gaim-migrate @ 10285]
Daniel Atallah <datallah@pidgin.im>
parents:
9396
diff
changeset
|
4677 | gaim_account_get_protocol_id(account)) == 0) |
| 7620 | 4678 | { |
| 4679 | data->account = account; | |
| 4680 | } | |
| 4681 | else | |
| 4682 | { | |
| 4683 | data->account = account; | |
| 4684 | rebuild_addchat_entries(data); | |
| 4685 | } | |
| 4686 | } | |
| 4687 | ||
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
4688 | static void |
|
7859
b0f646df7125
[gaim-migrate @ 8513]
Mark Doliner <markdoliner@pidgin.im>
parents:
7856
diff
changeset
|
4689 | gaim_gtk_blist_request_add_chat(GaimAccount *account, GaimGroup *group, |
|
9754
3a17eee239b2
[gaim-migrate @ 10621]
Nathan Fredrickson <nathan@silverorange.com>
parents:
9753
diff
changeset
|
4690 | const char *alias, const char *name) |
| 7620 | 4691 | { |
| 4692 | GaimGtkAddChatData *data; | |
| 8975 | 4693 | GaimGtkBuddyList *gtkblist; |
| 4694 | GList *l; | |
| 4695 | GaimConnection *gc; | |
| 7620 | 4696 | GtkWidget *label; |
| 4697 | GtkWidget *rowbox; | |
| 4698 | GtkWidget *hbox; | |
| 4699 | GtkWidget *vbox; | |
| 4700 | GtkWidget *img; | |
| 4701 | ||
|
9812
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4702 | if (account != NULL) { |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4703 | gc = gaim_account_get_connection(account); |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4704 | |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4705 | if (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->join_chat == NULL) { |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4706 | gaim_notify_error(gc, NULL, _("This protocol does not support chat rooms."), NULL); |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4707 | return; |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4708 | } |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4709 | } else { |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4710 | /* Find an account with chat capabilities */ |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4711 | for (l = gaim_connections_get_all(); l != NULL; l = l->next) { |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4712 | gc = (GaimConnection *)l->data; |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4713 | |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4714 | if (GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl)->join_chat != NULL) { |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4715 | account = gaim_connection_get_account(gc); |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4716 | break; |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4717 | } |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4718 | } |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4719 | |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4720 | if (account == NULL) { |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4721 | gaim_notify_error(NULL, NULL, |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4722 | _("You are not currently signed on with any " |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4723 | "protocols that have the ability to chat."), NULL); |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4724 | return; |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4725 | } |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4726 | } |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4727 | |
| 7620 | 4728 | data = g_new0(GaimGtkAddChatData, 1); |
|
9812
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4729 | data->account = account; |
|
26cf39e74774
[gaim-migrate @ 10683]
Mark Doliner <markdoliner@pidgin.im>
parents:
9811
diff
changeset
|
4730 | data->default_chat_name = g_strdup(name); |
| 7620 | 4731 | |
| 4732 | img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, | |
| 4733 | GTK_ICON_SIZE_DIALOG); | |
| 4734 | ||
| 8975 | 4735 | gtkblist = GAIM_GTK_BLIST(gaim_get_blist()); |
| 4736 | ||
| 7620 | 4737 | data->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); |
| 4738 | ||
| 8975 | 4739 | data->window = gtk_dialog_new_with_buttons(_("Add Chat"), |
| 4740 | NULL, GTK_DIALOG_NO_SEPARATOR, | |
| 4741 | GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | |
| 4742 | GTK_STOCK_ADD, GTK_RESPONSE_OK, | |
| 4743 | NULL); | |
| 4744 | ||
| 4745 | gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); | |
| 11243 | 4746 | gtk_container_set_border_width(GTK_CONTAINER(data->window), GAIM_HIG_BOX_SPACE); |
| 8975 | 4747 | gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); |
| 11243 | 4748 | gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), GAIM_HIG_BORDER); |
| 4749 | gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), GAIM_HIG_BOX_SPACE); | |
| 7620 | 4750 | gtk_window_set_role(GTK_WINDOW(data->window), "add_chat"); |
| 8975 | 4751 | gtk_window_set_type_hint(GTK_WINDOW(data->window), |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
4752 | GDK_WINDOW_TYPE_HINT_DIALOG); |
| 7620 | 4753 | |
| 11243 | 4754 | hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); |
| 7620 | 4755 | gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); |
| 4756 | gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
| 4757 | gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
| 4758 | ||
| 4759 | vbox = gtk_vbox_new(FALSE, 5); | |
| 4760 | gtk_container_add(GTK_CONTAINER(hbox), vbox); | |
| 4761 | ||
| 4762 | label = gtk_label_new( | |
| 4763 | _("Please enter an alias, and the appropriate information " | |
| 4764 | "about the chat you would like to add to your buddy list.\n")); | |
| 4765 | gtk_widget_set_size_request(label, 400, -1); | |
| 4766 | gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
| 4767 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
| 4768 | gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | |
| 4769 | ||
| 4770 | rowbox = gtk_hbox_new(FALSE, 5); | |
| 4771 | gtk_box_pack_start(GTK_BOX(vbox), rowbox, FALSE, FALSE, 0); | |
| 4772 | ||
| 4773 | label = gtk_label_new(_("Account:")); | |
| 4774 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | |
| 4775 | gtk_size_group_add_widget(data->sg, label); | |
| 4776 | gtk_box_pack_start(GTK_BOX(rowbox), label, FALSE, FALSE, 0); | |
| 4777 | ||
| 4778 | data->account_menu = gaim_gtk_account_option_menu_new(account, FALSE, | |
|
10475
1b7fe16233f3
[gaim-migrate @ 11762]
Richard Laager <rlaager@pidgin.im>
parents:
10439
diff
changeset
|
4779 | G_CALLBACK(addchat_select_account_cb), |
|
9987
2396bd099335
[gaim-migrate @ 10900]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
9959
diff
changeset
|
4780 | chat_account_filter_func, data); |
| 7620 | 4781 | gtk_box_pack_start(GTK_BOX(rowbox), data->account_menu, TRUE, TRUE, 0); |
| 8137 | 4782 | gaim_set_accessible_label (data->account_menu, label); |
| 7620 | 4783 | |
| 4784 | data->entries_box = gtk_vbox_new(FALSE, 5); | |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
4785 | gtk_container_set_border_width(GTK_CONTAINER(data->entries_box), 0); |
| 7620 | 4786 | gtk_box_pack_start(GTK_BOX(vbox), data->entries_box, TRUE, TRUE, 0); |
| 4787 | ||
| 4788 | rebuild_addchat_entries(data); | |
| 4789 | ||
| 4790 | rowbox = gtk_hbox_new(FALSE, 5); | |
| 4791 | gtk_box_pack_start(GTK_BOX(vbox), rowbox, FALSE, FALSE, 0); | |
| 4792 | ||
| 4793 | label = gtk_label_new(_("Alias:")); | |
| 4794 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); | |
| 4795 | gtk_size_group_add_widget(data->sg, label); | |
| 4796 | gtk_box_pack_start(GTK_BOX(rowbox), label, FALSE, FALSE, 0); | |
| 4797 | ||
| 4798 | data->alias_entry = gtk_entry_new(); | |
|
7859
b0f646df7125
[gaim-migrate @ 8513]
Mark Doliner <markdoliner@pidgin.im>
parents:
7856
diff
changeset
|
4799 | if (alias != NULL) |
|
b0f646df7125
[gaim-migrate @ 8513]
Mark Doliner <markdoliner@pidgin.im>
parents:
7856
diff
changeset
|
4800 | gtk_entry_set_text(GTK_ENTRY(data->alias_entry), alias); |
| 7620 | 4801 | gtk_box_pack_end(GTK_BOX(rowbox), data->alias_entry, TRUE, TRUE, 0); |
|
10311
2380cae46dbd
[gaim-migrate @ 11505]
Andrew Hart <arhart@users.sourceforge.net>
parents:
10297
diff
changeset
|
4802 | gtk_entry_set_activates_default(GTK_ENTRY(data->alias_entry), TRUE); |
| 8137 | 4803 | gaim_set_accessible_label (data->alias_entry, label); |
| 7620 | 4804 | |
| 4805 | rowbox = gtk_hbox_new(FALSE, 5); | |
| 4806 | gtk_box_pack_start(GTK_BOX(vbox), rowbox, FALSE, FALSE, 0); | |
| 4807 | ||
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
4808 | label = gtk_label_new(_("Group:")); |
| 7620 | 4809 | gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); |
| 4810 | gtk_size_group_add_widget(data->sg, label); | |
| 4811 | gtk_box_pack_start(GTK_BOX(rowbox), label, FALSE, FALSE, 0); | |
| 4812 | ||
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
4813 | data->group_combo = gtk_combo_new(); |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
4814 | gtk_combo_set_popdown_strings(GTK_COMBO(data->group_combo), groups_tree()); |
| 7620 | 4815 | gtk_box_pack_end(GTK_BOX(rowbox), data->group_combo, TRUE, TRUE, 0); |
| 4816 | ||
| 4817 | if (group) | |
| 4818 | { | |
| 4819 | gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(data->group_combo)->entry), | |
| 4820 | group->name); | |
| 4821 | } | |
| 8137 | 4822 | gaim_set_accessible_label (data->group_combo, label); |
| 7620 | 4823 | |
| 4824 | g_signal_connect(G_OBJECT(data->window), "response", | |
| 4825 | G_CALLBACK(add_chat_resp_cb), data); | |
| 4826 | ||
| 4827 | gtk_widget_show_all(data->window); | |
| 4828 | } | |
| 4829 | ||
| 4830 | static void | |
| 4831 | add_group_cb(GaimConnection *gc, const char *group_name) | |
| 4832 | { | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9236
diff
changeset
|
4833 | GaimGroup *group; |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9236
diff
changeset
|
4834 | |
|
12458
c1bb7ec2fb26
[gaim-migrate @ 14767]
Mark Doliner <markdoliner@pidgin.im>
parents:
12450
diff
changeset
|
4835 | if ((group_name == NULL) || (*group_name == '\0')) |
|
c1bb7ec2fb26
[gaim-migrate @ 14767]
Mark Doliner <markdoliner@pidgin.im>
parents:
12450
diff
changeset
|
4836 | return; |
|
c1bb7ec2fb26
[gaim-migrate @ 14767]
Mark Doliner <markdoliner@pidgin.im>
parents:
12450
diff
changeset
|
4837 | |
|
9285
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9236
diff
changeset
|
4838 | group = gaim_group_new(group_name); |
|
9cedf5d26577
[gaim-migrate @ 10088]
Mark Doliner <markdoliner@pidgin.im>
parents:
9236
diff
changeset
|
4839 | gaim_blist_add_group(group, NULL); |
| 7620 | 4840 | } |
| 4841 | ||
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
4842 | static void |
| 7620 | 4843 | gaim_gtk_blist_request_add_group(void) |
| 4844 | { | |
|
7853
cd8b631ff166
[gaim-migrate @ 8507]
Mark Doliner <markdoliner@pidgin.im>
parents:
7843
diff
changeset
|
4845 | gaim_request_input(NULL, _("Add Group"), NULL, |
| 7620 | 4846 | _("Please enter the name of the group to be added."), |
| 8697 | 4847 | NULL, FALSE, FALSE, NULL, |
| 7620 | 4848 | _("Add"), G_CALLBACK(add_group_cb), |
| 4849 | _("Cancel"), NULL, NULL); | |
| 4850 | } | |
| 4851 | ||
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4852 | void |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4853 | gaim_gtk_blist_toggle_visibility() |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4854 | { |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4855 | if (gtkblist && gtkblist->window) { |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4856 | if (GTK_WIDGET_VISIBLE(gtkblist->window)) { |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4857 | gaim_blist_set_visible(GAIM_WINDOW_ICONIFIED(gtkblist->window) || gtk_blist_obscured); |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4858 | } else { |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4859 | gaim_blist_set_visible(TRUE); |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4860 | } |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4861 | } |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4862 | } |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4863 | |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4864 | void |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4865 | gaim_gtk_blist_visibility_manager_add() |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4866 | { |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4867 | visibility_manager_count++; |
|
12479
01ea9120820a
[gaim-migrate @ 14790]
Casey Harkins <charkins@pidgin.im>
parents:
12478
diff
changeset
|
4868 | gaim_debug_info("gtkblist", "added visibility manager: %d\n", visibility_manager_count); |
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4869 | } |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4870 | |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4871 | void |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4872 | gaim_gtk_blist_visibility_manager_remove() |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4873 | { |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4874 | if (visibility_manager_count) |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4875 | visibility_manager_count--; |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4876 | if (!visibility_manager_count) |
|
12115
018095bd9f68
[gaim-migrate @ 14415]
Casey Harkins <charkins@pidgin.im>
parents:
12113
diff
changeset
|
4877 | gaim_blist_set_visible(gaim_prefs_get_bool("/gaim/gtk/blist/list_visible")); |
|
12479
01ea9120820a
[gaim-migrate @ 14790]
Casey Harkins <charkins@pidgin.im>
parents:
12478
diff
changeset
|
4878 | gaim_debug_info("gtkblist", "removed visibility manager: %d\n", visibility_manager_count); |
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4879 | } |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4880 | |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
4881 | |
| 7620 | 4882 | static GaimBlistUiOps blist_ui_ops = |
| 5228 | 4883 | { |
| 4884 | gaim_gtk_blist_new_list, | |
| 5256 | 4885 | gaim_gtk_blist_new_node, |
| 5228 | 4886 | gaim_gtk_blist_show, |
| 4887 | gaim_gtk_blist_update, | |
| 4888 | gaim_gtk_blist_remove, | |
| 4889 | gaim_gtk_blist_destroy, | |
| 7620 | 4890 | gaim_gtk_blist_set_visible, |
| 4891 | gaim_gtk_blist_request_add_buddy, | |
| 4892 | gaim_gtk_blist_request_add_chat, | |
| 10012 | 4893 | gaim_gtk_blist_request_add_group |
| 5228 | 4894 | }; |
| 4895 | ||
| 4896 | ||
| 7620 | 4897 | GaimBlistUiOps * |
| 4898 | gaim_gtk_blist_get_ui_ops(void) | |
| 5228 | 4899 | { |
| 4900 | return &blist_ui_ops; | |
| 4901 | } | |
| 4902 | ||
| 10643 | 4903 | GaimGtkBuddyList *gaim_gtk_blist_get_default_gtk_blist() |
| 4904 | { | |
| 4905 | return gtkblist; | |
| 4906 | } | |
| 4907 | ||
| 7620 | 4908 | static void account_signon_cb(GaimConnection *gc, gpointer z) |
| 4909 | { | |
| 4910 | GaimAccount *account = gaim_connection_get_account(gc); | |
| 4911 | GaimBlistNode *gnode, *cnode; | |
| 4912 | for(gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) | |
| 4913 | { | |
| 4914 | if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
| 4915 | continue; | |
| 4916 | for(cnode = gnode->child; cnode; cnode = cnode->next) | |
| 4917 | { | |
| 4918 | GaimChat *chat; | |
| 4919 | ||
| 4920 | if(!GAIM_BLIST_NODE_IS_CHAT(cnode)) | |
| 4921 | continue; | |
| 4922 | ||
| 4923 | chat = (GaimChat *)cnode; | |
| 4924 | ||
| 4925 | if(chat->account != account) | |
| 4926 | continue; | |
| 4927 | ||
| 8197 | 4928 | if(gaim_blist_node_get_bool((GaimBlistNode*)chat, "gtk-autojoin") || |
| 8198 | 4929 | (gaim_blist_node_get_string((GaimBlistNode*)chat, |
| 4930 | "gtk-autojoin") != NULL)) | |
| 7620 | 4931 | serv_join_chat(gc, chat->components); |
| 4932 | } | |
| 4933 | } | |
| 4934 | } | |
| 4935 | ||
| 8815 | 4936 | void * |
| 4937 | gaim_gtk_blist_get_handle() { | |
| 4938 | static int handle; | |
| 4939 | ||
| 4940 | return &handle; | |
| 4941 | } | |
| 4942 | ||
| 11910 | 4943 | static gboolean buddy_signonoff_timeout_cb(GaimBuddy *buddy) |
| 4944 | { | |
| 4945 | struct _gaim_gtk_blist_node *gtknode = ((GaimBlistNode*)buddy)->ui_data; | |
| 4946 | GaimConversation *conv; | |
| 4947 | ||
| 4948 | gtknode->recent_signonoff = FALSE; | |
| 4949 | gtknode->recent_signonoff_timer = 0; | |
| 4950 | ||
| 4951 | gaim_gtk_blist_update(NULL, (GaimBlistNode*)buddy); | |
| 4952 | ||
| 4953 | if((conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, buddy->name, buddy->account))) { | |
| 4954 | if(GAIM_BUDDY_IS_ONLINE(buddy)) { | |
| 4955 | gaim_conversation_update(conv, GAIM_CONV_ACCOUNT_ONLINE); | |
| 4956 | } else { | |
| 4957 | gaim_conversation_update(conv, GAIM_CONV_ACCOUNT_OFFLINE); | |
| 4958 | } | |
| 4959 | } | |
| 4960 | ||
| 4961 | return FALSE; | |
| 4962 | } | |
| 4963 | ||
| 4964 | static void buddy_signonoff_cb(GaimBuddy *buddy) | |
| 4965 | { | |
| 11915 | 4966 | struct _gaim_gtk_blist_node *gtknode; |
| 4967 | ||
| 4968 | if(!((GaimBlistNode*)buddy)->ui_data) { | |
| 4969 | gaim_gtk_blist_new_node((GaimBlistNode*)buddy); | |
| 4970 | } | |
| 4971 | ||
| 4972 | gtknode = ((GaimBlistNode*)buddy)->ui_data; | |
| 11910 | 4973 | |
| 4974 | gtknode->recent_signonoff = TRUE; | |
| 4975 | ||
| 4976 | if(gtknode->recent_signonoff_timer > 0) | |
| 4977 | gaim_timeout_remove(gtknode->recent_signonoff_timer); | |
| 4978 | gtknode->recent_signonoff_timer = gaim_timeout_add(10000, | |
| 4979 | (GSourceFunc)buddy_signonoff_timeout_cb, buddy); | |
| 4980 | } | |
| 4981 | ||
| 7620 | 4982 | void gaim_gtk_blist_init(void) |
| 4983 | { | |
| 8815 | 4984 | void *gtk_blist_handle = gaim_gtk_blist_get_handle(); |
| 7620 | 4985 | |
| 4986 | gaim_signal_connect(gaim_connections_get_handle(), "signed-on", | |
| 8815 | 4987 | gtk_blist_handle, GAIM_CALLBACK(account_signon_cb), |
| 7620 | 4988 | NULL); |
| 7731 | 4989 | |
| 4990 | /* Initialize prefs */ | |
| 8819 | 4991 | gaim_prefs_add_none("/gaim/gtk/blist"); |
| 4992 | gaim_prefs_add_bool("/gaim/gtk/blist/show_buddy_icons", TRUE); | |
| 4993 | gaim_prefs_add_bool("/gaim/gtk/blist/show_empty_groups", FALSE); | |
| 4994 | gaim_prefs_add_bool("/gaim/gtk/blist/show_offline_buddies", FALSE); | |
| 10282 | 4995 | gaim_prefs_add_bool("/gaim/gtk/blist/list_visible", TRUE); |
|
12279
9418540cb3bb
[gaim-migrate @ 14583]
Casey Harkins <charkins@pidgin.im>
parents:
12246
diff
changeset
|
4996 | gaim_prefs_add_bool("/gaim/gtk/blist/list_maximized", FALSE); |
|
9711
89a3d94e0dcc
[gaim-migrate @ 10572]
Mark Doliner <markdoliner@pidgin.im>
parents:
9709
diff
changeset
|
4997 | gaim_prefs_add_string("/gaim/gtk/blist/sort_type", "alphabetical"); |
| 8819 | 4998 | gaim_prefs_add_int("/gaim/gtk/blist/x", 0); |
| 4999 | gaim_prefs_add_int("/gaim/gtk/blist/y", 0); | |
|
9778
030c9f0bd450
[gaim-migrate @ 10646]
Mark Doliner <markdoliner@pidgin.im>
parents:
9775
diff
changeset
|
5000 | gaim_prefs_add_int("/gaim/gtk/blist/width", 309); /* Golden ratio, baby */ |
|
030c9f0bd450
[gaim-migrate @ 10646]
Mark Doliner <markdoliner@pidgin.im>
parents:
9775
diff
changeset
|
5001 | gaim_prefs_add_int("/gaim/gtk/blist/height", 500); /* Golden ratio, baby */ |
| 8819 | 5002 | gaim_prefs_add_int("/gaim/gtk/blist/tooltip_delay", 500); |
| 7731 | 5003 | |
| 8815 | 5004 | /* Register our signals */ |
|
12016
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
5005 | gaim_signal_register(gtk_blist_handle, "gtkblist-hiding", |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
5006 | gaim_marshal_VOID__POINTER, NULL, 1, |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
5007 | gaim_value_new(GAIM_TYPE_POINTER)); |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
5008 | |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
5009 | gaim_signal_register(gtk_blist_handle, "gtkblist-unhiding", |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
5010 | gaim_marshal_VOID__POINTER, NULL, 1, |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
5011 | gaim_value_new(GAIM_TYPE_SUBTYPE)); |
|
0517ad5d0196
[gaim-migrate @ 14309]
Casey Harkins <charkins@pidgin.im>
parents:
11988
diff
changeset
|
5012 | |
| 8815 | 5013 | gaim_signal_register(gtk_blist_handle, "gtkblist-created", |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
5014 | gaim_marshal_VOID__POINTER, NULL, 1, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
5015 | gaim_value_new(GAIM_TYPE_SUBTYPE, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
5016 | GAIM_SUBTYPE_BLIST)); |
| 8819 | 5017 | |
| 5018 | gaim_signal_register(gtk_blist_handle, "drawing-tooltip", | |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
5019 | gaim_marshal_VOID__POINTER_POINTER, NULL, 2, |
|
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
5020 | gaim_value_new(GAIM_TYPE_SUBTYPE, GAIM_SUBTYPE_BLIST_NODE), |
|
10477
7d0641ba585c
[gaim-migrate @ 11764]
Mark Doliner <markdoliner@pidgin.im>
parents:
10476
diff
changeset
|
5021 | gaim_value_new_outgoing(GAIM_TYPE_BOXED, "GString *")); |
| 11910 | 5022 | |
| 5023 | ||
| 5024 | gaim_signal_connect(gaim_blist_get_handle(), "buddy-signed-on", gtk_blist_handle, GAIM_CALLBACK(buddy_signonoff_cb), NULL); | |
| 5025 | gaim_signal_connect(gaim_blist_get_handle(), "buddy-signed-off", gtk_blist_handle, GAIM_CALLBACK(buddy_signonoff_cb), NULL); | |
| 7620 | 5026 | } |
| 5027 | ||
| 8815 | 5028 | void |
| 5029 | gaim_gtk_blist_uninit(void) { | |
| 5030 | gaim_signals_unregister_by_instance(gaim_gtk_blist_get_handle()); | |
| 5031 | } | |
| 5228 | 5032 | |
| 5033 | /********************************************************************* | |
|
9811
2cbca162a09f
[gaim-migrate @ 10682]
Mark Doliner <markdoliner@pidgin.im>
parents:
9791
diff
changeset
|
5034 | * Buddy List sorting functions * |
| 5422 | 5035 | *********************************************************************/ |
| 5036 | ||
| 11796 | 5037 | GList *gaim_gtk_blist_get_sort_methods() |
| 5038 | { | |
| 5039 | return gaim_gtk_blist_sort_methods; | |
| 5040 | } | |
| 5041 | ||
| 7620 | 5042 | void gaim_gtk_blist_sort_method_reg(const char *id, const char *name, gaim_gtk_blist_sort_function func) |
| 5422 | 5043 | { |
| 5044 | struct gaim_gtk_blist_sort_method *method = g_new0(struct gaim_gtk_blist_sort_method, 1); | |
| 7620 | 5045 | method->id = g_strdup(id); |
| 5422 | 5046 | method->name = g_strdup(name); |
|
9775
e3a3555b0621
[gaim-migrate @ 10643]
Daniel Atallah <datallah@pidgin.im>
parents:
9774
diff
changeset
|
5047 | method->func = func; |
| 11796 | 5048 | gaim_gtk_blist_sort_methods = g_list_append(gaim_gtk_blist_sort_methods, method); |
| 5049 | gaim_gtk_blist_update_sort_methods(); | |
| 5422 | 5050 | } |
| 5051 | ||
| 7620 | 5052 | void gaim_gtk_blist_sort_method_unreg(const char *id){ |
| 11796 | 5053 | GList *l = gaim_gtk_blist_sort_methods; |
| 7620 | 5054 | |
| 5055 | while(l) { | |
| 5056 | struct gaim_gtk_blist_sort_method *method = l->data; | |
| 5057 | if(!strcmp(method->id, id)) { | |
| 11796 | 5058 | gaim_gtk_blist_sort_methods = g_list_delete_link(gaim_gtk_blist_sort_methods, l); |
| 7620 | 5059 | g_free(method->id); |
| 5060 | g_free(method->name); | |
| 5061 | g_free(method); | |
| 5062 | break; | |
| 5063 | } | |
| 5064 | } | |
| 11796 | 5065 | gaim_gtk_blist_update_sort_methods(); |
| 5422 | 5066 | } |
| 5067 | ||
| 7620 | 5068 | void gaim_gtk_blist_sort_method_set(const char *id){ |
| 11796 | 5069 | GList *l = gaim_gtk_blist_sort_methods; |
| 7620 | 5070 | |
| 5071 | if(!id) | |
| 5072 | id = "none"; | |
| 5073 | ||
| 5074 | while (l && strcmp(((struct gaim_gtk_blist_sort_method*)l->data)->id, id)) | |
| 5422 | 5075 | l = l->next; |
| 7620 | 5076 | |
| 5422 | 5077 | if (l) { |
| 5078 | current_sort_method = l->data; | |
| 5079 | } else if (!current_sort_method) { | |
| 7620 | 5080 | gaim_gtk_blist_sort_method_set("none"); |
| 5422 | 5081 | return; |
| 5082 | } | |
| 5083 | redo_buddy_list(gaim_get_blist(), TRUE); | |
| 5084 | ||
| 5085 | } | |
| 5086 | ||
| 5087 | /****************************************** | |
| 5088 | ** Sort Methods | |
| 5089 | ******************************************/ | |
| 5090 | ||
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5091 | static void sort_method_none(GaimBlistNode *node, GaimBuddyList *blist, GtkTreeIter parent_iter, GtkTreeIter *cur, GtkTreeIter *iter) |
| 5422 | 5092 | { |
| 7620 | 5093 | GaimBlistNode *sibling = node->prev; |
| 5094 | GtkTreeIter sibling_iter; | |
| 5095 | ||
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5096 | if (cur != NULL) { |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5097 | *iter = *cur; |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5098 | return; |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5099 | } |
| 7620 | 5100 | |
| 5101 | while (sibling && !get_iter_from_node(sibling, &sibling_iter)) { | |
| 5102 | sibling = sibling->prev; | |
| 5422 | 5103 | } |
| 7620 | 5104 | |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5105 | gtk_tree_store_insert_after(gtkblist->treemodel, iter, |
| 7620 | 5106 | node->parent ? &parent_iter : NULL, |
| 5107 | sibling ? &sibling_iter : NULL); | |
| 5422 | 5108 | } |
| 5109 | ||
| 7620 | 5110 | #if GTK_CHECK_VERSION(2,2,1) |
| 5111 | ||
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5112 | static void sort_method_alphabetical(GaimBlistNode *node, GaimBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter) |
| 5422 | 5113 | { |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5114 | GtkTreeIter more_z; |
| 7620 | 5115 | |
| 5116 | const char *my_name; | |
| 5117 | ||
| 5118 | if(GAIM_BLIST_NODE_IS_CONTACT(node)) { | |
| 5119 | my_name = gaim_contact_get_alias((GaimContact*)node); | |
| 5120 | } else if(GAIM_BLIST_NODE_IS_CHAT(node)) { | |
| 5121 | my_name = gaim_chat_get_name((GaimChat*)node); | |
| 5122 | } else { | |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5123 | sort_method_none(node, blist, groupiter, cur, iter); |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5124 | return; |
| 7620 | 5125 | } |
| 5126 | ||
| 5422 | 5127 | |
| 5128 | if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, &groupiter)) { | |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5129 | gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0); |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5130 | return; |
| 7620 | 5131 | } |
| 5132 | ||
| 5133 | do { | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
5134 | GValue val; |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
5135 | GaimBlistNode *n; |
| 7620 | 5136 | const char *this_name; |
| 5137 | int cmp; | |
| 5138 | ||
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
5139 | val.g_type = 0; |
| 7620 | 5140 | gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &val); |
| 5141 | n = g_value_get_pointer(&val); | |
| 5142 | ||
| 5143 | if(GAIM_BLIST_NODE_IS_CONTACT(n)) { | |
| 5144 | this_name = gaim_contact_get_alias((GaimContact*)n); | |
| 5145 | } else if(GAIM_BLIST_NODE_IS_CHAT(n)) { | |
| 5146 | this_name = gaim_chat_get_name((GaimChat*)n); | |
| 5147 | } else { | |
| 5148 | this_name = NULL; | |
| 5149 | } | |
| 5150 | ||
| 5151 | cmp = gaim_utf8_strcasecmp(my_name, this_name); | |
| 5152 | ||
| 5153 | if(this_name && (cmp < 0 || (cmp == 0 && node < n))) { | |
| 5154 | if(cur) { | |
| 5155 | gtk_tree_store_move_before(gtkblist->treemodel, cur, &more_z); | |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5156 | *iter = *cur; |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5157 | return; |
| 7620 | 5158 | } else { |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5159 | gtk_tree_store_insert_before(gtkblist->treemodel, iter, |
| 7620 | 5160 | &groupiter, &more_z); |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5161 | return; |
| 7620 | 5162 | } |
| 5163 | } | |
| 5164 | g_value_unset(&val); | |
| 5165 | } while (gtk_tree_model_iter_next (GTK_TREE_MODEL(gtkblist->treemodel), &more_z)); | |
| 5166 | ||
| 5167 | if(cur) { | |
| 5168 | gtk_tree_store_move_before(gtkblist->treemodel, cur, NULL); | |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5169 | *iter = *cur; |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5170 | return; |
| 7620 | 5171 | } else { |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5172 | gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter); |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5173 | return; |
| 7620 | 5174 | } |
| 5175 | } | |
| 5176 | ||
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5177 | static void sort_method_status(GaimBlistNode *node, GaimBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter) |
| 7620 | 5178 | { |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5179 | GtkTreeIter more_z; |
| 7620 | 5180 | |
| 5181 | GaimBuddy *my_buddy, *this_buddy; | |
| 5182 | ||
| 5183 | if(GAIM_BLIST_NODE_IS_CONTACT(node)) { | |
| 5184 | my_buddy = gaim_contact_get_priority_buddy((GaimContact*)node); | |
| 5185 | } else if(GAIM_BLIST_NODE_IS_CHAT(node)) { | |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5186 | if (cur != NULL) { |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5187 | *iter = *cur; |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5188 | return; |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5189 | } |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5190 | |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5191 | gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter); |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5192 | return; |
| 7620 | 5193 | } else { |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5194 | sort_method_none(node, blist, groupiter, cur, iter); |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5195 | return; |
| 7620 | 5196 | } |
| 5197 | ||
| 5198 | ||
| 5199 | if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, &groupiter)) { | |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5200 | gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0); |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5201 | return; |
| 5422 | 5202 | } |
| 5203 | ||
| 5204 | do { | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
5205 | GValue val; |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
5206 | GaimBlistNode *n; |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5207 | gint name_cmp; |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5208 | gint presence_cmp; |
| 7620 | 5209 | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
5210 | val.g_type = 0; |
| 5422 | 5211 | gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &val); |
| 5212 | n = g_value_get_pointer(&val); | |
| 7620 | 5213 | |
| 5214 | if(GAIM_BLIST_NODE_IS_CONTACT(n)) { | |
| 5215 | this_buddy = gaim_contact_get_priority_buddy((GaimContact*)n); | |
| 5216 | } else { | |
| 5217 | this_buddy = NULL; | |
| 5218 | } | |
| 5219 | ||
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5220 | name_cmp = gaim_utf8_strcasecmp( |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5221 | (my_buddy |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5222 | ? gaim_contact_get_alias(gaim_buddy_get_contact(my_buddy)) |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5223 | : NULL), |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5224 | (this_buddy |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5225 | ? gaim_contact_get_alias(gaim_buddy_get_contact(this_buddy)) |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5226 | : NULL)); |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5227 | |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5228 | presence_cmp = gaim_presence_compare( |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5229 | gaim_buddy_get_presence(my_buddy), |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5230 | gaim_buddy_get_presence(this_buddy)); |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5231 | |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5232 | if (this_buddy == NULL || |
|
10860
8f600347b9e4
[gaim-migrate @ 12543]
Palmer Cox <enix@users.sourceforge.net>
parents:
10850
diff
changeset
|
5233 | (presence_cmp < 0 || |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5234 | (presence_cmp == 0 && |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5235 | (name_cmp < 0 || (name_cmp == 0 && node < n))))) |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5236 | { |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5237 | if (cur != NULL) |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5238 | { |
| 7620 | 5239 | gtk_tree_store_move_before(gtkblist->treemodel, cur, &more_z); |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5240 | *iter = *cur; |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5241 | return; |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5242 | } |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5243 | else |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5244 | { |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5245 | gtk_tree_store_insert_before(gtkblist->treemodel, iter, |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5246 | &groupiter, &more_z); |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5247 | return; |
| 7620 | 5248 | } |
| 5422 | 5249 | } |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5250 | |
| 5422 | 5251 | g_value_unset(&val); |
|
9944
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5252 | } |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5253 | while (gtk_tree_model_iter_next(GTK_TREE_MODEL(gtkblist->treemodel), |
|
71ef020ec4b0
[gaim-migrate @ 10838]
Christian Hammond <chipx86@chipx86.com>
parents:
9925
diff
changeset
|
5254 | &more_z)); |
| 7620 | 5255 | |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5256 | if (cur) { |
| 7620 | 5257 | gtk_tree_store_move_before(gtkblist->treemodel, cur, NULL); |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5258 | *iter = *cur; |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5259 | return; |
| 7620 | 5260 | } else { |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5261 | gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter); |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5262 | return; |
| 7620 | 5263 | } |
| 5422 | 5264 | } |
| 5265 | ||
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5266 | static void sort_method_log(GaimBlistNode *node, GaimBuddyList *blist, GtkTreeIter groupiter, GtkTreeIter *cur, GtkTreeIter *iter) |
| 5422 | 5267 | { |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5268 | GtkTreeIter more_z; |
| 7620 | 5269 | |
| 5270 | int log_size = 0, this_log_size = 0; | |
| 5271 | const char *buddy_name, *this_buddy_name; | |
| 5272 | ||
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5273 | if(cur && (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(gtkblist->treemodel), &groupiter) == 1)) { |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5274 | *iter = *cur; |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5275 | return; |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5276 | } |
| 7620 | 5277 | |
| 5278 | if(GAIM_BLIST_NODE_IS_CONTACT(node)) { | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
5279 | GaimBlistNode *n; |
| 7620 | 5280 | for (n = node->child; n; n = n->next) |
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8861
diff
changeset
|
5281 | log_size += gaim_log_get_total_size(GAIM_LOG_IM, ((GaimBuddy*)(n))->name, ((GaimBuddy*)(n))->account); |
| 7620 | 5282 | buddy_name = gaim_contact_get_alias((GaimContact*)node); |
| 5283 | } else if(GAIM_BLIST_NODE_IS_CHAT(node)) { | |
| 5284 | /* we don't have a reliable way of getting the log filename | |
| 5285 | * from the chat info in the blist, yet */ | |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5286 | if (cur != NULL) { |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5287 | *iter = *cur; |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5288 | return; |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5289 | } |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5290 | |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5291 | gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter); |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5292 | return; |
| 7620 | 5293 | } else { |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5294 | sort_method_none(node, blist, groupiter, cur, iter); |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5295 | return; |
| 7620 | 5296 | } |
| 5297 | ||
| 5298 | ||
| 5422 | 5299 | if (!gtk_tree_model_iter_children(GTK_TREE_MODEL(gtkblist->treemodel), &more_z, &groupiter)) { |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5300 | gtk_tree_store_insert(gtkblist->treemodel, iter, &groupiter, 0); |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5301 | return; |
| 5422 | 5302 | } |
| 5303 | ||
| 5304 | do { | |
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
5305 | GValue val; |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
5306 | GaimBlistNode *n; |
|
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
5307 | GaimBlistNode *n2; |
| 7620 | 5308 | int cmp; |
| 5309 | ||
|
12600
7ecd4441fdc7
[gaim-migrate @ 14934]
Richard Laager <rlaager@pidgin.im>
parents:
12592
diff
changeset
|
5310 | val.g_type = 0; |
| 5422 | 5311 | gtk_tree_model_get_value (GTK_TREE_MODEL(gtkblist->treemodel), &more_z, NODE_COLUMN, &val); |
| 5312 | n = g_value_get_pointer(&val); | |
| 7620 | 5313 | this_log_size = 0; |
| 5314 | ||
| 5315 | if(GAIM_BLIST_NODE_IS_CONTACT(n)) { | |
| 5316 | for (n2 = n->child; n2; n2 = n2->next) | |
|
8898
85f5615bc27e
[gaim-migrate @ 9667]
Mark Doliner <markdoliner@pidgin.im>
parents:
8861
diff
changeset
|
5317 | this_log_size += gaim_log_get_total_size(GAIM_LOG_IM, ((GaimBuddy*)(n2))->name, ((GaimBuddy*)(n2))->account); |
| 7620 | 5318 | this_buddy_name = gaim_contact_get_alias((GaimContact*)n); |
| 5319 | } else { | |
| 5320 | this_buddy_name = NULL; | |
| 5422 | 5321 | } |
| 7620 | 5322 | |
| 5323 | cmp = gaim_utf8_strcasecmp(buddy_name, this_buddy_name); | |
| 5324 | ||
| 5325 | if (!GAIM_BLIST_NODE_IS_CONTACT(n) || log_size > this_log_size || | |
| 5326 | ((log_size == this_log_size) && | |
| 5327 | (cmp < 0 || (cmp == 0 && node < n)))) { | |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5328 | if (cur != NULL) { |
| 7620 | 5329 | gtk_tree_store_move_before(gtkblist->treemodel, cur, &more_z); |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5330 | *iter = *cur; |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5331 | return; |
| 7620 | 5332 | } else { |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5333 | gtk_tree_store_insert_before(gtkblist->treemodel, iter, |
| 7620 | 5334 | &groupiter, &more_z); |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5335 | return; |
| 7620 | 5336 | } |
| 5422 | 5337 | } |
| 5338 | g_value_unset(&val); | |
| 5339 | } while (gtk_tree_model_iter_next (GTK_TREE_MODEL(gtkblist->treemodel), &more_z)); | |
| 7620 | 5340 | |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5341 | if (cur != NULL) { |
| 7620 | 5342 | gtk_tree_store_move_before(gtkblist->treemodel, cur, NULL); |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5343 | *iter = *cur; |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5344 | return; |
| 7620 | 5345 | } else { |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5346 | gtk_tree_store_append(gtkblist->treemodel, iter, &groupiter); |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5347 | return; |
| 7620 | 5348 | } |
| 5349 | } | |
| 5350 | ||
| 5351 | #endif | |
| 5352 | ||
| 5353 | static void | |
|
9015
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5354 | plugin_act(GtkObject *obk, GaimPluginAction *pam) |
| 7620 | 5355 | { |
|
10352
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
5356 | if (pam->callback) |
|
802e7ab5b838
[gaim-migrate @ 11569]
Mark Doliner <markdoliner@pidgin.im>
parents:
10351
diff
changeset
|
5357 | pam->callback(pam); |
| 5422 | 5358 | } |
| 7620 | 5359 | |
|
8986
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
5360 | static void |
|
12333
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5361 | build_plugin_actions(GtkWidget *menu, GaimPlugin *plugin) |
|
8986
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
5362 | { |
|
12333
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5363 | GtkWidget *menuitem; |
|
9015
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5364 | GaimPluginAction *action = NULL; |
|
12333
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5365 | GList *actions, *l; |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5366 | |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5367 | actions = GAIM_PLUGIN_ACTIONS(plugin, NULL); |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5368 | |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5369 | for (l = actions; l != NULL; l = l->next) |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5370 | { |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5371 | if (l->data) |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5372 | { |
|
9015
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5373 | action = (GaimPluginAction *) l->data; |
|
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5374 | action->plugin = plugin; |
|
12333
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5375 | action->context = NULL; |
|
9015
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5376 | |
|
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5377 | menuitem = gtk_menu_item_new_with_label(action->label); |
|
12333
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5378 | gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5379 | |
|
9015
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5380 | g_signal_connect(G_OBJECT(menuitem), "activate", |
|
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5381 | G_CALLBACK(plugin_act), action); |
|
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5382 | g_object_set_data(G_OBJECT(menuitem), "plugin_action", action); |
|
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5383 | gtk_widget_show(menuitem); |
|
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5384 | } |
|
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5385 | else |
|
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5386 | gaim_separator(menu); |
|
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5387 | } |
|
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5388 | |
|
12333
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5389 | g_list_free(actions); |
|
8986
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
5390 | } |
|
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
5391 | |
| 12296 | 5392 | static void |
| 5393 | modify_account_cb(GtkWidget *widget, gpointer data) | |
| 5394 | { | |
| 5395 | gaim_gtk_account_dialog_show(GAIM_GTK_MODIFY_ACCOUNT_DIALOG, data); | |
| 5396 | } | |
| 5397 | ||
| 5398 | static void | |
| 12330 | 5399 | enable_account_cb(GtkCheckMenuItem *widget, gpointer data) |
| 12296 | 5400 | { |
| 12330 | 5401 | GaimAccount *account = data; |
| 5402 | const GaimSavedStatus *saved_status; | |
| 5403 | ||
| 5404 | saved_status = gaim_savedstatus_get_current(); | |
| 5405 | gaim_savedstatus_activate_for_account(saved_status, account); | |
| 5406 | ||
| 5407 | gaim_account_set_enabled(account, GAIM_GTK_UI, TRUE); | |
| 12296 | 5408 | } |
| 5409 | ||
| 5410 | static void | |
| 12330 | 5411 | disable_account_cb(GtkCheckMenuItem *widget, gpointer data) |
| 12296 | 5412 | { |
| 12330 | 5413 | GaimAccount *account = data; |
| 5414 | ||
| 5415 | gaim_account_set_enabled(account, GAIM_GTK_UI, FALSE); | |
| 12296 | 5416 | } |
|
8986
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
5417 | |
| 7620 | 5418 | void |
| 12296 | 5419 | gaim_gtk_blist_update_accounts_menu(void) |
| 7620 | 5420 | { |
| 12296 | 5421 | GtkWidget *menuitem = NULL, *submenu = NULL; |
| 5422 | GList *l = NULL, *accounts = NULL; | |
| 12330 | 5423 | gboolean disabled_accounts = FALSE; |
| 12296 | 5424 | |
| 5425 | if (accountmenu == NULL) | |
| 7620 | 5426 | return; |
| 5427 | ||
| 12296 | 5428 | /* Clear the old Accounts menu */ |
| 5429 | for (l = gtk_container_get_children(GTK_CONTAINER(accountmenu)); l; l = l->next) { | |
| 12348 | 5430 | menuitem = l->data; |
| 5431 | ||
| 5432 | if (menuitem != gtk_item_factory_get_widget(gtkblist->ift, N_("/Accounts/Add\\/Edit"))) | |
| 5433 | gtk_container_remove(GTK_CONTAINER(accountmenu), | |
| 5434 | GTK_WIDGET(l->data)); | |
| 7620 | 5435 | } |
| 5436 | ||
| 12296 | 5437 | for (accounts = gaim_accounts_get_all(); accounts; accounts = accounts->next) { |
| 5438 | char *buf = NULL; | |
| 5439 | GtkWidget *image = NULL; | |
| 5440 | GaimConnection *gc = NULL; | |
| 5441 | GaimAccount *account = NULL; | |
|
12300
c24609bae42d
[gaim-migrate @ 14604]
Peter Lawler <pidgin@bleeter.id.au>
parents:
12298
diff
changeset
|
5442 | GaimStatus *status = NULL; |
| 12296 | 5443 | GdkPixbuf *pixbuf = NULL, *scale = NULL; |
| 5444 | ||
| 5445 | account = accounts->data; | |
| 5446 | ||
| 12330 | 5447 | if(gaim_account_get_enabled(account, GAIM_GTK_UI)) { |
| 5448 | buf = g_strconcat(gaim_account_get_username(account), " (", | |
| 5449 | gaim_account_get_protocol_name(account), ")", NULL); | |
| 5450 | menuitem = gtk_image_menu_item_new_with_label(buf); | |
| 5451 | g_free(buf); | |
| 5452 | status = gaim_account_get_active_status(account); | |
| 5453 | pixbuf = gaim_gtk_create_prpl_icon_with_status(account, gaim_status_get_type(status)); | |
| 5454 | if (pixbuf) { | |
| 5455 | scale = gdk_pixbuf_scale_simple(pixbuf, 16, 16, | |
| 5456 | GDK_INTERP_BILINEAR); | |
| 5457 | if (!gaim_account_is_connected(account)) | |
| 5458 | gdk_pixbuf_saturate_and_pixelate(scale, scale, | |
| 5459 | 0.0, FALSE); | |
| 5460 | image = gtk_image_new_from_pixbuf(scale); | |
| 5461 | g_object_unref(G_OBJECT(pixbuf)); | |
| 5462 | g_object_unref(G_OBJECT(scale)); | |
| 5463 | gtk_widget_show(image); | |
| 5464 | gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image); | |
| 5465 | } | |
| 5466 | gtk_menu_shell_append(GTK_MENU_SHELL(accountmenu), menuitem); | |
| 5467 | gtk_widget_show(menuitem); | |
| 5468 | ||
| 5469 | submenu = gtk_menu_new(); | |
| 5470 | gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); | |
| 5471 | gtk_widget_show(submenu); | |
| 5472 | ||
| 5473 | ||
|
12334
f88c9f928f51
[gaim-migrate @ 14638]
Mark Doliner <markdoliner@pidgin.im>
parents:
12333
diff
changeset
|
5474 | menuitem = gtk_menu_item_new_with_mnemonic(_("_Edit Account")); |
| 12330 | 5475 | g_signal_connect(G_OBJECT(menuitem), "activate", |
| 5476 | G_CALLBACK(modify_account_cb), account); | |
| 5477 | gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); | |
| 5478 | gtk_widget_show(menuitem); | |
| 5479 | ||
| 5480 | gaim_separator(submenu); | |
| 5481 | ||
| 5482 | gc = gaim_account_get_connection(account); | |
| 5483 | if (gc && GAIM_CONNECTION_IS_CONNECTED(gc)) { | |
| 5484 | GaimPlugin *plugin = NULL; | |
| 5485 | ||
| 5486 | plugin = gc->prpl; | |
| 5487 | if (GAIM_PLUGIN_HAS_ACTIONS(plugin)) { | |
| 5488 | GList *l, *ll = NULL; | |
| 5489 | GaimPluginAction *action = NULL; | |
| 5490 | ||
| 5491 | for (l = ll = GAIM_PLUGIN_ACTIONS(plugin, gc); l; l = l->next) { | |
| 5492 | if (l->data) { | |
| 5493 | action = (GaimPluginAction *)l->data; | |
| 5494 | action->plugin = plugin; | |
| 5495 | action->context = gc; | |
| 5496 | ||
| 5497 | menuitem = gtk_menu_item_new_with_label(action->label); | |
| 5498 | gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); | |
| 5499 | g_signal_connect(G_OBJECT(menuitem), "activate", | |
| 5500 | G_CALLBACK(plugin_act), action); | |
| 5501 | g_object_set_data(G_OBJECT(menuitem), "plugin_action", action); | |
| 5502 | gtk_widget_show(menuitem); | |
| 5503 | } else | |
| 5504 | gaim_separator(submenu); | |
| 5505 | } | |
| 5506 | } else { | |
| 5507 | menuitem = gtk_menu_item_new_with_label(_("No actions available")); | |
| 5508 | gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); | |
| 5509 | gtk_widget_set_sensitive(menuitem, FALSE); | |
| 5510 | gtk_widget_show(menuitem); | |
| 12296 | 5511 | } |
| 5512 | } else { | |
| 5513 | menuitem = gtk_menu_item_new_with_label(_("No actions available")); | |
| 5514 | gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); | |
| 5515 | gtk_widget_set_sensitive(menuitem, FALSE); | |
| 5516 | gtk_widget_show(menuitem); | |
| 5517 | } | |
| 12330 | 5518 | |
| 5519 | gaim_separator(submenu); | |
| 5520 | ||
| 5521 | menuitem = gtk_menu_item_new_with_mnemonic(_("_Disable")); | |
| 5522 | g_signal_connect(G_OBJECT(menuitem), "activate", | |
| 5523 | G_CALLBACK(disable_account_cb), account); | |
| 12296 | 5524 | gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); |
| 5525 | gtk_widget_show(menuitem); | |
| 12330 | 5526 | } else { |
| 5527 | disabled_accounts = TRUE; | |
| 12296 | 5528 | } |
| 7620 | 5529 | } |
|
9019
b9a333b36763
[gaim-migrate @ 9795]
Mark Doliner <markdoliner@pidgin.im>
parents:
9015
diff
changeset
|
5530 | |
| 12330 | 5531 | if(disabled_accounts) { |
| 5532 | gaim_separator(accountmenu); | |
|
12338
3548ced0c9ff
[gaim-migrate @ 14642]
Mark Doliner <markdoliner@pidgin.im>
parents:
12337
diff
changeset
|
5533 | menuitem = gtk_menu_item_new_with_label(_("Enable Account")); |
| 12330 | 5534 | gtk_menu_shell_append(GTK_MENU_SHELL(accountmenu), menuitem); |
| 5535 | gtk_widget_show(menuitem); | |
| 5536 | ||
| 5537 | submenu = gtk_menu_new(); | |
| 5538 | gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); | |
| 5539 | gtk_widget_show(submenu); | |
| 5540 | ||
| 5541 | for (accounts = gaim_accounts_get_all(); accounts; accounts = accounts->next) { | |
| 5542 | char *buf = NULL; | |
| 5543 | GtkWidget *image = NULL; | |
| 5544 | GaimAccount *account = NULL; | |
| 5545 | GdkPixbuf *pixbuf = NULL, *scale = NULL; | |
| 5546 | ||
| 5547 | account = accounts->data; | |
| 5548 | ||
| 5549 | if(!gaim_account_get_enabled(account, GAIM_GTK_UI)) { | |
| 5550 | ||
| 5551 | disabled_accounts = TRUE; | |
| 5552 | ||
| 5553 | buf = g_strconcat(gaim_account_get_username(account), " (", | |
| 5554 | gaim_account_get_protocol_name(account), ")", NULL); | |
| 5555 | menuitem = gtk_image_menu_item_new_with_label(buf); | |
| 5556 | g_free(buf); | |
| 5557 | pixbuf = gaim_gtk_create_prpl_icon(account); | |
| 5558 | if (pixbuf) { | |
| 5559 | scale = gdk_pixbuf_scale_simple(pixbuf, 16, 16, | |
| 5560 | GDK_INTERP_BILINEAR); | |
| 12466 | 5561 | if (gaim_account_is_disconnected(account)) |
| 5562 | gdk_pixbuf_saturate_and_pixelate(scale, scale, 0.00, FALSE); | |
| 12330 | 5563 | image = gtk_image_new_from_pixbuf(scale); |
| 5564 | g_object_unref(G_OBJECT(pixbuf)); | |
| 5565 | g_object_unref(G_OBJECT(scale)); | |
| 5566 | gtk_widget_show(image); | |
| 5567 | gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image); | |
| 5568 | } | |
| 5569 | g_signal_connect(G_OBJECT(menuitem), "activate", | |
| 5570 | G_CALLBACK(enable_account_cb), account); | |
| 5571 | gtk_menu_shell_append(GTK_MENU_SHELL(submenu), menuitem); | |
| 5572 | gtk_widget_show(menuitem); | |
| 5573 | } | |
|
9019
b9a333b36763
[gaim-migrate @ 9795]
Mark Doliner <markdoliner@pidgin.im>
parents:
9015
diff
changeset
|
5574 | } |
| 7620 | 5575 | } |
| 5576 | } | |
|
8986
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
5577 | |
|
12333
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5578 | static GList *plugin_submenus = NULL; |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5579 | |
|
8986
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
5580 | void |
|
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
5581 | gaim_gtk_blist_update_plugin_actions(void) |
|
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
5582 | { |
|
12333
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5583 | GtkWidget *menuitem, *submenu; |
|
9015
3c27e9074fa2
[gaim-migrate @ 9791]
Christopher O'Brien <siege@pidgin.im>
parents:
9013
diff
changeset
|
5584 | GaimPlugin *plugin = NULL; |
|
8986
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
5585 | GList *l; |
|
12464
bfe63ab6ebcf
[gaim-migrate @ 14774]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12461
diff
changeset
|
5586 | GtkAccelGroup *accel_group; |
|
8986
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
5587 | |
| 11742 | 5588 | GtkWidget *pluginmenu = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools")); |
| 5589 | ||
|
12333
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5590 | g_return_if_fail(pluginmenu != NULL); |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5591 | |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5592 | /* Remove old plugin action submenus from the Tools menu */ |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5593 | for (l = plugin_submenus; l; l = l->next) |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5594 | { |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5595 | GList *menuitems; |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5596 | |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5597 | submenu = l->data; |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5598 | |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5599 | menuitems = gtk_container_get_children(GTK_CONTAINER(submenu)); |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5600 | while (menuitems != NULL) |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5601 | { |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5602 | GaimPluginAction *action; |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5603 | menuitem = menuitems->data; |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5604 | action = g_object_get_data(G_OBJECT(menuitem), "plugin_action"); |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5605 | g_free(action); |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5606 | menuitems = g_list_delete_link(menuitems, menuitems); |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5607 | } |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5608 | |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5609 | gtk_container_remove(GTK_CONTAINER(pluginmenu), GTK_WIDGET(submenu)); |
|
8986
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
5610 | } |
|
12333
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5611 | g_list_free(plugin_submenus); |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5612 | plugin_submenus = NULL; |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5613 | |
|
12464
bfe63ab6ebcf
[gaim-migrate @ 14774]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12461
diff
changeset
|
5614 | accel_group = gtk_menu_get_accel_group(GTK_MENU(pluginmenu)); |
|
bfe63ab6ebcf
[gaim-migrate @ 14774]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12461
diff
changeset
|
5615 | |
|
12333
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5616 | /* Add a submenu for each plugin with custom actions */ |
| 11742 | 5617 | for (l = gaim_plugins_get_loaded(); l; l = l->next) { |
|
12464
bfe63ab6ebcf
[gaim-migrate @ 14774]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12461
diff
changeset
|
5618 | char *path; |
|
11923
a492ccce1a12
[gaim-migrate @ 14214]
Mark Doliner <markdoliner@pidgin.im>
parents:
11920
diff
changeset
|
5619 | |
| 11742 | 5620 | plugin = (GaimPlugin *) l->data; |
|
11923
a492ccce1a12
[gaim-migrate @ 14214]
Mark Doliner <markdoliner@pidgin.im>
parents:
11920
diff
changeset
|
5621 | |
| 11742 | 5622 | if (GAIM_IS_PROTOCOL_PLUGIN(plugin)) |
| 5623 | continue; | |
| 5624 | ||
| 5625 | if (!GAIM_PLUGIN_HAS_ACTIONS(plugin)) | |
| 5626 | continue; | |
|
9019
b9a333b36763
[gaim-migrate @ 9795]
Mark Doliner <markdoliner@pidgin.im>
parents:
9015
diff
changeset
|
5627 | |
|
12333
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5628 | menuitem = gtk_image_menu_item_new_with_label(plugin->info->name); |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5629 | gtk_menu_shell_append(GTK_MENU_SHELL(pluginmenu), menuitem); |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5630 | gtk_widget_show(menuitem); |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5631 | |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5632 | plugin_submenus = g_list_append(plugin_submenus, menuitem); |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5633 | |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5634 | submenu = gtk_menu_new(); |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5635 | gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu); |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5636 | gtk_widget_show(submenu); |
|
12464
bfe63ab6ebcf
[gaim-migrate @ 14774]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12461
diff
changeset
|
5637 | |
|
bfe63ab6ebcf
[gaim-migrate @ 14774]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12461
diff
changeset
|
5638 | gtk_menu_set_accel_group(GTK_MENU(submenu), accel_group); |
|
bfe63ab6ebcf
[gaim-migrate @ 14774]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12461
diff
changeset
|
5639 | path = g_strdup_printf("%s/Tools/%s", gtkblist->ift->path, plugin->info->name); |
|
bfe63ab6ebcf
[gaim-migrate @ 14774]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12461
diff
changeset
|
5640 | gtk_menu_set_accel_path(GTK_MENU(submenu), path); |
|
bfe63ab6ebcf
[gaim-migrate @ 14774]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
12461
diff
changeset
|
5641 | g_free(path); |
|
12333
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5642 | |
|
8e39e95c81b6
[gaim-migrate @ 14637]
Mark Doliner <markdoliner@pidgin.im>
parents:
12330
diff
changeset
|
5643 | build_plugin_actions(submenu, plugin); |
|
8986
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
5644 | } |
|
30ba617356bb
[gaim-migrate @ 9761]
Christopher O'Brien <siege@pidgin.im>
parents:
8975
diff
changeset
|
5645 | } |
| 11796 | 5646 | |
|
12246
7af1ef3b1cc4
[gaim-migrate @ 14548]
Mark Doliner <markdoliner@pidgin.im>
parents:
12240
diff
changeset
|
5647 | static void |
|
7af1ef3b1cc4
[gaim-migrate @ 14548]
Mark Doliner <markdoliner@pidgin.im>
parents:
12240
diff
changeset
|
5648 | sortmethod_act(GtkCheckMenuItem *checkmenuitem, char *id) |
| 11796 | 5649 | { |
| 5650 | if (gtk_check_menu_item_get_active(checkmenuitem)) | |
|
11923
a492ccce1a12
[gaim-migrate @ 14214]
Mark Doliner <markdoliner@pidgin.im>
parents:
11920
diff
changeset
|
5651 | { |
|
12431
35be5bb89089
[gaim-migrate @ 14738]
Richard Laager <rlaager@pidgin.im>
parents:
12413
diff
changeset
|
5652 | if (gtkblist->window->window != NULL) |
|
35be5bb89089
[gaim-migrate @ 14738]
Richard Laager <rlaager@pidgin.im>
parents:
12413
diff
changeset
|
5653 | { |
|
35be5bb89089
[gaim-migrate @ 14738]
Richard Laager <rlaager@pidgin.im>
parents:
12413
diff
changeset
|
5654 | GdkCursor *cursor = gdk_cursor_new(GDK_WATCH); |
|
35be5bb89089
[gaim-migrate @ 14738]
Richard Laager <rlaager@pidgin.im>
parents:
12413
diff
changeset
|
5655 | gdk_window_set_cursor(gtkblist->window->window, cursor); |
|
35be5bb89089
[gaim-migrate @ 14738]
Richard Laager <rlaager@pidgin.im>
parents:
12413
diff
changeset
|
5656 | gdk_cursor_unref(cursor); |
|
35be5bb89089
[gaim-migrate @ 14738]
Richard Laager <rlaager@pidgin.im>
parents:
12413
diff
changeset
|
5657 | } |
|
35be5bb89089
[gaim-migrate @ 14738]
Richard Laager <rlaager@pidgin.im>
parents:
12413
diff
changeset
|
5658 | |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5659 | while (gtk_events_pending()) |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5660 | gtk_main_iteration(); |
|
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5661 | |
| 11796 | 5662 | gaim_gtk_blist_sort_method_set(id); |
|
11923
a492ccce1a12
[gaim-migrate @ 14214]
Mark Doliner <markdoliner@pidgin.im>
parents:
11920
diff
changeset
|
5663 | gaim_prefs_set_string("/gaim/gtk/blist/sort_type", id); |
|
12413
ce06aa90beee
[gaim-migrate @ 14720]
Richard Laager <rlaager@pidgin.im>
parents:
12368
diff
changeset
|
5664 | |
|
12431
35be5bb89089
[gaim-migrate @ 14738]
Richard Laager <rlaager@pidgin.im>
parents:
12413
diff
changeset
|
5665 | if (gtkblist->window->window != NULL) |
|
35be5bb89089
[gaim-migrate @ 14738]
Richard Laager <rlaager@pidgin.im>
parents:
12413
diff
changeset
|
5666 | gdk_window_set_cursor(gtkblist->window->window, NULL); |
|
11923
a492ccce1a12
[gaim-migrate @ 14214]
Mark Doliner <markdoliner@pidgin.im>
parents:
11920
diff
changeset
|
5667 | } |
| 11796 | 5668 | } |
| 5669 | ||
| 5670 | void | |
| 5671 | gaim_gtk_blist_update_sort_methods(void) | |
| 5672 | { | |
| 5673 | GtkWidget *menuitem = NULL, *activeitem = NULL; | |
| 5674 | GaimGtkBlistSortMethod *method = NULL; | |
| 5675 | GList *l; | |
| 5676 | GSList *sl = NULL; | |
| 5677 | GtkWidget *sortmenu; | |
| 11797 | 5678 | const char *m = gaim_prefs_get_string("/gaim/gtk/blist/sort_type"); |
| 11796 | 5679 | |
| 5680 | if (gtkblist == NULL) | |
| 5681 | return; | |
| 5682 | ||
| 11798 | 5683 | sortmenu = gtk_item_factory_get_widget(gtkblist->ift, N_("/Buddies/Sort Buddies")); |
| 11796 | 5684 | |
| 5685 | if (sortmenu == NULL) | |
| 5686 | return; | |
| 5687 | ||
| 5688 | /* Clear the old menu */ | |
| 5689 | for (l = gtk_container_get_children(GTK_CONTAINER(sortmenu)); l; l = l->next) { | |
| 5690 | menuitem = l->data; | |
| 5691 | gtk_widget_destroy(GTK_WIDGET(menuitem)); | |
| 5692 | } | |
|
11923
a492ccce1a12
[gaim-migrate @ 14214]
Mark Doliner <markdoliner@pidgin.im>
parents:
11920
diff
changeset
|
5693 | |
| 11796 | 5694 | for (l = gaim_gtk_blist_sort_methods; l; l = l->next) { |
| 5695 | method = (GaimGtkBlistSortMethod *) l->data; | |
| 5696 | menuitem = gtk_radio_menu_item_new_with_label(sl, _(method->name)); | |
| 5697 | if (!strcmp(m, method->id)) | |
| 5698 | activeitem = menuitem; | |
| 5699 | sl = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); | |
| 5700 | gtk_menu_shell_append(GTK_MENU_SHELL(sortmenu), menuitem); | |
| 5701 | g_signal_connect(G_OBJECT(menuitem), "toggled", | |
| 5702 | G_CALLBACK(sortmethod_act), method->id); | |
|
11923
a492ccce1a12
[gaim-migrate @ 14214]
Mark Doliner <markdoliner@pidgin.im>
parents:
11920
diff
changeset
|
5703 | gtk_widget_show(menuitem); |
| 11796 | 5704 | } |
| 5705 | if (activeitem) | |
| 5706 | gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(activeitem), TRUE); | |
| 5707 | } |