comparison src/gtkconv.c @ 5106:7b218dde1d73

[gaim-migrate @ 5469] This is some IM image dialog fixes from Ka-Hing Cheung. It makes "Conversation->Insert Image..." work if you have not used the button on the toolbar yet. It makes clicking the button on the toolbar twice close the select image dialog, and it makes closing the image dialog toggle the insert image button back to an unpressed state. Thanks javabsp, youdaman. Also, my ICQ icon for unauthorized buddies is probably getting committed. I'll commit the code that uses it later sometime. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Fri, 11 Apr 2003 07:01:54 +0000
parents 4cfc49e31c2e
children e245e686f62f
comparison
equal deleted inserted replaced
5105:4cfc49e31c2e 5106:7b218dde1d73
140 const char *filename; 140 const char *filename;
141 char *buf; 141 char *buf;
142 struct stat st; 142 struct stat st;
143 int id; 143 int id;
144 144
145 conv = g_object_get_data(obj, "user_data"); 145 conv = g_object_get_data(G_OBJECT(wid), "user_data");
146 gtkconv = GAIM_GTK_CONVERSATION(conv); 146 gtkconv = GAIM_GTK_CONVERSATION(conv);
147 im = GAIM_IM(conv); 147 im = GAIM_IM(conv);
148 name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid)); 148 name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid));
149 id = g_slist_length(im->images) + 1; 149 id = g_slist_length(im->images) + 1;
150 150
194 194
195 return TRUE; 195 return TRUE;
196 } 196 }
197 197
198 static void 198 static void
199 cancel_insert_image_cb(GtkWidget *unused, struct gaim_gtk_conversation *gtkconv)
200 {
201 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image), FALSE);
202
203 if (gtkconv->dialogs.image)
204 gtk_widget_destroy(gtkconv->dialogs.image);
205 gtkconv->dialogs.image = NULL;
206 }
207
208 static void
199 insert_image_cb(GtkWidget *save, struct gaim_conversation *conv) 209 insert_image_cb(GtkWidget *save, struct gaim_conversation *conv)
200 { 210 {
201 struct gaim_gtk_conversation *gtkconv; 211 struct gaim_gtk_conversation *gtkconv;
202 char buf[BUF_LONG]; 212 char buf[BUF_LONG];
203 GtkWidget *window; 213 GtkWidget *window;
207 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image))) { 217 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image))) {
208 window = gtk_file_selection_new(_("Gaim - Insert Image")); 218 window = gtk_file_selection_new(_("Gaim - Insert Image"));
209 g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S, gaim_home_dir()); 219 g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S, gaim_home_dir());
210 gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf); 220 gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf);
211 221
212 g_object_set_data(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button), 222 g_object_set_data(G_OBJECT(window), "user_data", conv);
213 "user_data", conv);
214 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button), 223 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button),
215 "clicked", G_CALLBACK(do_insert_image_cb), window); 224 "clicked", G_CALLBACK(do_insert_image_cb), window);
216 g_signal_connect_swapped( 225 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)->cancel_button),
217 G_OBJECT(GTK_FILE_SELECTION(window)->cancel_button), 226 "clicked", G_CALLBACK(cancel_insert_image_cb), gtkconv);
218 "clicked", G_CALLBACK(gtk_widget_destroy), window);
219 227
220 gtk_widget_show(window); 228 gtk_widget_show(window);
229 gtkconv->dialogs.image = window;
221 } else { 230 } else {
222 gtk_widget_grab_focus(gtkconv->entry); 231 gtk_widget_grab_focus(gtkconv->entry);
232 if(gtkconv->dialogs.image)
233 gtk_widget_destroy(gtkconv->dialogs.image);
234 gtkconv->dialogs.image = NULL;
223 } 235 }
224 } 236 }
225 237
226 static void 238 static void
227 insert_link_cb(GtkWidget *w, struct gaim_conversation *conv) 239 insert_link_cb(GtkWidget *w, struct gaim_conversation *conv)
288 300
289 static void 301 static void
290 menu_insert_image_cb(gpointer data, guint action, GtkWidget *widget) 302 menu_insert_image_cb(gpointer data, guint action, GtkWidget *widget)
291 { 303 {
292 struct gaim_window *win = (struct gaim_window *)data; 304 struct gaim_window *win = (struct gaim_window *)data;
293 305 struct gaim_gtk_conversation *gtkconv;
294 insert_image_cb(NULL, gaim_window_get_active_conversation(win)); 306
307 gtkconv = GAIM_GTK_CONVERSATION(gaim_window_get_active_conversation(win));
308
309 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image),
310 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image)));
295 } 311 }
296 312
297 static void 313 static void
298 menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget) 314 menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget)
299 { 315 {