Mercurial > pidgin.yaz
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); |