comparison pidgin/gtkimhtml.c @ 22797:900c7b5660d5

Allow replacing smileys with texts in conversations/logs. This should be helpful for all those users who paste code in conversations.
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Sat, 03 May 2008 02:49:53 +0000
parents 9bc93b4b0f92
children f11fc3fb5b8c 25233b528b66 ac567757d236 1dd0e007514d
comparison
equal deleted inserted replaced
22796:5e6b42e77fb7 22797:900c7b5660d5
812 static void clear_formatting_cb(GtkMenuItem *menu, GtkIMHtml *imhtml) 812 static void clear_formatting_cb(GtkMenuItem *menu, GtkIMHtml *imhtml)
813 { 813 {
814 gtk_imhtml_clear_formatting(imhtml); 814 gtk_imhtml_clear_formatting(imhtml);
815 } 815 }
816 816
817 static void disable_smiley_selected(GtkMenuItem *item, GtkIMHtml *imhtml)
818 {
819 GtkTextIter start, end;
820 GtkTextMark *mark;
821 char *text;
822
823 if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end))
824 return;
825
826 text = gtk_imhtml_get_markup_range(imhtml, &start, &end);
827
828 mark = gtk_text_buffer_get_selection_bound(imhtml->text_buffer);
829 gtk_text_buffer_delete_selection(imhtml->text_buffer, FALSE, FALSE);
830
831 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, mark);
832 gtk_imhtml_insert_html_at_iter(imhtml, text, GTK_IMHTML_NO_NEWLINE | GTK_IMHTML_NO_SMILEY, &start);
833
834 g_free(text);
835 }
836
817 static void hijack_menu_cb(GtkIMHtml *imhtml, GtkMenu *menu, gpointer data) 837 static void hijack_menu_cb(GtkIMHtml *imhtml, GtkMenu *menu, gpointer data)
818 { 838 {
819 GtkWidget *menuitem; 839 GtkWidget *menuitem;
840 GtkTextIter start, end;
820 841
821 menuitem = gtk_menu_item_new_with_mnemonic(_("Paste as Plain _Text")); 842 menuitem = gtk_menu_item_new_with_mnemonic(_("Paste as Plain _Text"));
822 gtk_widget_show(menuitem); 843 gtk_widget_show(menuitem);
823 /* 844 /*
824 * TODO: gtk_clipboard_wait_is_text_available() iterates the glib 845 * TODO: gtk_clipboard_wait_is_text_available() iterates the glib
840 gtk_widget_set_sensitive(menuitem, imhtml->editable); 861 gtk_widget_set_sensitive(menuitem, imhtml->editable);
841 /* put it after Delete */ 862 /* put it after Delete */
842 gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuitem, 5); 863 gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuitem, 5);
843 864
844 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(clear_formatting_cb), imhtml); 865 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(clear_formatting_cb), imhtml);
866
867 menuitem = gtk_menu_item_new_with_mnemonic(_("Disable _smileys in selected text"));
868 gtk_widget_show(menuitem);
869 if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) {
870 g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(disable_smiley_selected), imhtml);
871 } else {
872 gtk_widget_set_sensitive(menuitem, FALSE);
873 }
874 gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuitem, 6);
845 } 875 }
846 876
847 static char * 877 static char *
848 ucs2_order(gboolean swap) 878 ucs2_order(gboolean swap)
849 { 879 {
1456 1486
1457 } 1487 }
1458 1488
1459 static void gtk_imhtml_init (GtkIMHtml *imhtml) 1489 static void gtk_imhtml_init (GtkIMHtml *imhtml)
1460 { 1490 {
1461 GtkTextIter iter;
1462 imhtml->text_buffer = gtk_text_buffer_new(NULL); 1491 imhtml->text_buffer = gtk_text_buffer_new(NULL);
1463 imhtml->undo_manager = gtk_source_undo_manager_new(imhtml->text_buffer); 1492 imhtml->undo_manager = gtk_source_undo_manager_new(imhtml->text_buffer);
1464 gtk_text_buffer_get_end_iter (imhtml->text_buffer, &iter);
1465 gtk_text_view_set_buffer(GTK_TEXT_VIEW(imhtml), imhtml->text_buffer); 1493 gtk_text_view_set_buffer(GTK_TEXT_VIEW(imhtml), imhtml->text_buffer);
1466 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(imhtml), GTK_WRAP_WORD_CHAR); 1494 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(imhtml), GTK_WRAP_WORD_CHAR);
1467 gtk_text_view_set_pixels_above_lines(GTK_TEXT_VIEW(imhtml), 2); 1495 gtk_text_view_set_pixels_above_lines(GTK_TEXT_VIEW(imhtml), 2);
1468 gtk_text_view_set_pixels_below_lines(GTK_TEXT_VIEW(imhtml), 3); 1496 gtk_text_view_set_pixels_below_lines(GTK_TEXT_VIEW(imhtml), 3);
1469 gtk_text_view_set_left_margin(GTK_TEXT_VIEW(imhtml), 2); 1497 gtk_text_view_set_left_margin(GTK_TEXT_VIEW(imhtml), 2);