comparison src/gtkconv.c @ 7927:1441648fe974

[gaim-migrate @ 8598] De-uglify the insert link and insert image buttons a bit. Closing the insert image dialog via the window manager now makes the insert image button un-depress itself. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Thu, 25 Dec 2003 09:23:27 +0000
parents d3f2aa8de5bf
children dca50d465b7d
comparison
equal deleted inserted replaced
7926:68900f9cb540 7927:1441648fe974
191 else 191 else
192 do_save_convo(wid); 192 do_save_convo(wid);
193 } 193 }
194 194
195 static void 195 static void
196 do_insert_image_cb(GObject *obj, GtkWidget *wid) 196 do_insert_image_cb(GtkWidget *widget, int resp, gpointer data)
197 { 197 {
198 GaimConversation *conv; 198 GaimConversation *conv = data;
199 GaimGtkConversation *gtkconv; 199 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv);
200 GaimConvIm *im; 200 GaimConvIm *im = GAIM_CONV_IM(conv);
201 char *name, *filename; 201 char *name, *filename;
202 char *buf, *data; 202 char *buf, *filedata;
203 size_t size; 203 size_t size;
204 GError *error; 204 GError *error = NULL;
205 int id; 205 int id;
206 206
207 conv = g_object_get_data(G_OBJECT(wid), "user_data"); 207 if (resp != GTK_RESPONSE_OK) {
208 gtkconv = GAIM_GTK_CONVERSATION(conv); 208 set_toggle(gtkconv->toolbar.image, FALSE);
209 im = GAIM_CONV_IM(conv); 209 return;
210 name = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(wid))); 210 }
211
212 name = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(widget)));
211 213
212 if (!name) { 214 if (!name) {
213 gtk_widget_destroy(gtkconv->dialogs.image); 215 set_toggle(gtkconv->toolbar.image, FALSE);
214 gtkconv->dialogs.image = NULL;
215 return; 216 return;
216 } 217 }
217 218
218 if (gaim_gtk_check_if_dir(name, GTK_FILE_SELECTION(wid))) { 219 if (gaim_gtk_check_if_dir(name, GTK_FILE_SELECTION(widget))) {
219 g_free(name); 220 g_free(name);
221 set_toggle(gtkconv->toolbar.image, FALSE);
220 return; 222 return;
221 } 223 }
222 224
223 gtk_widget_destroy(gtkconv->dialogs.image); 225 set_toggle(gtkconv->toolbar.image, FALSE);
224 gtkconv->dialogs.image = NULL; 226
225 227 if (!g_file_get_contents(name, &filedata, &size, &error)) {
226 if (!g_file_get_contents(name, &data, &size, &error)) {
227 gaim_notify_error(NULL, NULL, error->message, NULL); 228 gaim_notify_error(NULL, NULL, error->message, NULL);
228 229
229 g_error_free(error); 230 g_error_free(error);
230 g_free(name); 231 g_free(name);
231 232
234 235
235 filename = name; 236 filename = name;
236 while (strchr(filename, '/')) 237 while (strchr(filename, '/'))
237 filename = strchr(filename, '/') + 1; 238 filename = strchr(filename, '/') + 1;
238 239
239 id = gaim_imgstore_add(data, size, filename); 240 id = gaim_imgstore_add(filedata, size, filename);
240 g_free(data); 241 g_free(filedata);
241 242
242 if (!id) { 243 if (!id) {
243 buf = g_strdup_printf(_("Failed to store image: %s\n"), name); 244 buf = g_strdup_printf(_("Failed to store image: %s\n"), name);
244 gaim_notify_error(NULL, NULL, buf, NULL); 245 gaim_notify_error(NULL, NULL, buf, NULL);
245 246
254 buf = g_strdup_printf("<IMG ID=\"%d\" SRC=\"file://%s\">", id, filename); 255 buf = g_strdup_printf("<IMG ID=\"%d\" SRC=\"file://%s\">", id, filename);
255 gtk_text_buffer_insert_at_cursor(GTK_TEXT_BUFFER(gtkconv->entry_buffer), buf, -1); 256 gtk_text_buffer_insert_at_cursor(GTK_TEXT_BUFFER(gtkconv->entry_buffer), buf, -1);
256 g_free(buf); 257 g_free(buf);
257 258
258 g_free(name); 259 g_free(name);
259
260 set_toggle(gtkconv->toolbar.image, FALSE);
261 } 260 }
262 261
263 static gint 262 static gint
264 close_win_cb(GtkWidget *w, GdkEventAny *e, gpointer d) 263 close_win_cb(GtkWidget *w, GdkEventAny *e, gpointer d)
265 { 264 {
284 static void 283 static void
285 tab_close_button_state_changed_cb(GtkWidget *widget, GtkStateType prev_state) 284 tab_close_button_state_changed_cb(GtkWidget *widget, GtkStateType prev_state)
286 { 285 {
287 if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE) 286 if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE)
288 gtk_widget_set_state(widget, GTK_STATE_NORMAL); 287 gtk_widget_set_state(widget, GTK_STATE_NORMAL);
289 }
290
291 static void
292 cancel_insert_image_cb(GtkWidget *unused, GaimGtkConversation *gtkconv)
293 {
294 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image),
295 FALSE);
296
297 if (gtkconv->dialogs.image)
298 gtk_widget_destroy(gtkconv->dialogs.image);
299
300 gtkconv->dialogs.image = NULL;
301 } 288 }
302 289
303 static void 290 static void
304 insert_image_cb(GtkWidget *save, GaimConversation *conv) 291 insert_image_cb(GtkWidget *save, GaimConversation *conv)
305 { 292 {
312 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image))) { 299 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image))) {
313 window = gtk_file_selection_new(_("Insert Image")); 300 window = gtk_file_selection_new(_("Insert Image"));
314 g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S, gaim_home_dir()); 301 g_snprintf(buf, sizeof(buf), "%s" G_DIR_SEPARATOR_S, gaim_home_dir());
315 gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf); 302 gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), buf);
316 303
317 g_object_set_data(G_OBJECT(window), "user_data", conv); 304 gtk_dialog_set_default_response(GTK_DIALOG(window), GTK_RESPONSE_OK);
318 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)->ok_button), 305 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)),
319 "clicked", G_CALLBACK(do_insert_image_cb), window); 306 "response", G_CALLBACK(do_insert_image_cb), conv);
320 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(window)->cancel_button),
321 "clicked", G_CALLBACK(cancel_insert_image_cb), gtkconv);
322 307
323 gtk_widget_show(window); 308 gtk_widget_show(window);
324 gtkconv->dialogs.image = window; 309 gtkconv->dialogs.image = window;
325 } else { 310 } else {
326 gtk_widget_grab_focus(gtkconv->entry); 311 gtk_widget_destroy(gtkconv->dialogs.image);
327 if(gtkconv->dialogs.image)
328 gtk_widget_destroy(gtkconv->dialogs.image);
329 gtkconv->dialogs.image = NULL; 312 gtkconv->dialogs.image = NULL;
330 } 313 }
331 } 314 }
332 315
333 static void 316 static void
336 GaimGtkConversation *gtkconv; 319 GaimGtkConversation *gtkconv;
337 320
338 gtkconv = GAIM_GTK_CONVERSATION(conv); 321 gtkconv = GAIM_GTK_CONVERSATION(conv);
339 322
340 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link))) 323 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link)))
341 show_insert_link(gtkconv->toolbar.link, conv); 324 dialog_link_show(conv);
342 else if (gtkconv->dialogs.link)
343 cancel_link(gtkconv->toolbar.link, conv);
344 else 325 else
345 gaim_gtk_advance_past(gtkconv, "<A HREF>", "</A>"); 326 dialog_link_destroy(conv);
346 327
347 gtk_widget_grab_focus(gtkconv->entry); 328 gtk_widget_grab_focus(gtkconv->entry);
348 } 329 }
349 330
350 static void 331 static void
767 GaimConversation *conv = gaim_conv_window_get_active_conversation(win); 748 GaimConversation *conv = gaim_conv_window_get_active_conversation(win);
768 GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(win); 749 GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(win);
769 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); 750 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv);
770 GtkWidget *table; 751 GtkWidget *table;
771 GtkWidget *labelbox, *bbox; 752 GtkWidget *labelbox, *bbox;
772 GtkWidget *button, *align; 753 GtkWidget *button;
773 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG); 754 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG);
774 GtkWidget *label, *entry; 755 GtkWidget *label, *entry;
775 struct _search *s; 756 struct _search *s;
757 /*
776 gint signal_id; 758 gint signal_id;
777 GClosure *closure; 759 GClosure *closure;
760 */
778 761
779 if (gtkconv->dialogs.search) { 762 if (gtkconv->dialogs.search) {
780 gtk_window_present(GTK_WINDOW(gtkconv->dialogs.search)); 763 gtk_window_present(GTK_WINDOW(gtkconv->dialogs.search));
781 return; 764 return;
782 } 765 }
865 GaimGtkConversation *gtkconv; 848 GaimGtkConversation *gtkconv;
866 849
867 conv = gaim_conv_window_get_active_conversation(win); 850 conv = gaim_conv_window_get_active_conversation(win);
868 gtkconv = GAIM_GTK_CONVERSATION(conv); 851 gtkconv = GAIM_GTK_CONVERSATION(conv);
869 852
870 show_insert_link(gtkconv->toolbar.link, conv); 853 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link),
854 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link)));
871 } 855 }
872 856
873 static void 857 static void
874 menu_insert_image_cb(gpointer data, guint action, GtkWidget *widget) 858 menu_insert_image_cb(gpointer data, guint action, GtkWidget *widget)
875 { 859 {
3477 3461
3478 /* Sep */ 3462 /* Sep */
3479 sep = gtk_vseparator_new(); 3463 sep = gtk_vseparator_new();
3480 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0); 3464 gtk_box_pack_start(GTK_BOX(hbox), sep, FALSE, FALSE, 0);
3481 3465
3466 /* Insert Link */
3467 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_LINK);
3468 gtk_size_group_add_widget(sg, button);
3469 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3470 gtk_tooltips_set_tip(gtkconv->tooltips, button, _("Insert link"), NULL);
3471
3472 g_signal_connect(G_OBJECT(button), "clicked",
3473 G_CALLBACK(insert_link_cb), conv);
3474
3475 gtkconv->toolbar.link = button;
3476
3482 /* Insert IM Image */ 3477 /* Insert IM Image */
3483 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_IMAGE); 3478 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_IMAGE);
3484 gtk_size_group_add_widget(sg, button); 3479 gtk_size_group_add_widget(sg, button);
3485 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); 3480 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3486 gtk_tooltips_set_tip(gtkconv->tooltips, button, _("Insert image"), NULL); 3481 gtk_tooltips_set_tip(gtkconv->tooltips, button, _("Insert image"), NULL);
3487 3482
3488 g_signal_connect(G_OBJECT(button), "clicked", 3483 g_signal_connect(G_OBJECT(button), "clicked",
3489 G_CALLBACK(insert_image_cb), conv); 3484 G_CALLBACK(insert_image_cb), conv);
3490 3485
3491 gtkconv->toolbar.image = button; 3486 gtkconv->toolbar.image = button;
3492
3493 /* Insert Link */
3494 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_LINK);
3495 gtk_size_group_add_widget(sg, button);
3496 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
3497 gtk_tooltips_set_tip(gtkconv->tooltips, button, _("Insert link"), NULL);
3498
3499 g_signal_connect(G_OBJECT(button), "clicked",
3500 G_CALLBACK(insert_link_cb), conv);
3501
3502 gtkconv->toolbar.link = button;
3503 3487
3504 /* Insert Smiley */ 3488 /* Insert Smiley */
3505 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_SMILEY); 3489 button = gaim_pixbuf_toolbar_button_from_stock(GAIM_STOCK_SMILEY);
3506 gtk_size_group_add_widget(sg, button); 3490 gtk_size_group_add_widget(sg, button);
3507 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); 3491 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);