Mercurial > pidgin
comparison src/conversation.c @ 275:f9eb3eb9ffde
[gaim-migrate @ 285]
More patches from our friend fflewddur
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Sun, 28 May 2000 17:16:39 +0000 |
| parents | 985635758c33 |
| children | 0f14e6d8a51b |
comparison
equal
deleted
inserted
replaced
| 274:4dc94ab60421 | 275:f9eb3eb9ffde |
|---|---|
| 51 GdkBitmap *dark_icon_bm = NULL; | 51 GdkBitmap *dark_icon_bm = NULL; |
| 52 | 52 |
| 53 char *fontface; | 53 char *fontface; |
| 54 | 54 |
| 55 void check_everything(GtkWidget *entry); | 55 void check_everything(GtkWidget *entry); |
| 56 char *get_tag_by_prefix(GtkWidget *entry, const char *prefix); | |
| 56 gboolean user_keypress_callback(GtkWidget *entry, GdkEventKey *event, struct conversation *c); | 57 gboolean user_keypress_callback(GtkWidget *entry, GdkEventKey *event, struct conversation *c); |
| 57 | 58 |
| 58 /*------------------------------------------------------------------------*/ | 59 /*------------------------------------------------------------------------*/ |
| 59 /* Helpers */ | 60 /* Helpers */ |
| 60 /*------------------------------------------------------------------------*/ | 61 /*------------------------------------------------------------------------*/ |
| 133 } | 134 } |
| 134 g_free(cuser); | 135 g_free(cuser); |
| 135 return NULL; | 136 return NULL; |
| 136 } | 137 } |
| 137 | 138 |
| 139 /* given the first part of a tag, returns the length up to the final '>'; | |
| 140 useful for 'remove_tags' calls on variable data, such as <font face> | |
| 141 tags */ | |
| 142 char *get_tag_by_prefix(GtkWidget *entry, const char *prefix) | |
| 143 { | |
| 144 char *s, *t; | |
| 145 int i = 0; | |
| 146 | |
| 147 s = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); | |
| 148 t = s; | |
| 149 | |
| 150 if (t = strstr(s, prefix)) | |
| 151 { | |
| 152 for (i = 1; t[i] != '\0'; i++) | |
| 153 { | |
| 154 | |
| 155 if (t[i] == '>') | |
| 156 break; | |
| 157 } | |
| 158 | |
| 159 t = gtk_editable_get_chars(GTK_EDITABLE(entry), (t-s), (t-s) + i + 1); | |
| 160 } | |
| 161 return t; | |
| 162 } | |
| 163 | |
| 138 /* --------------------------------------------------- | 164 /* --------------------------------------------------- |
| 139 * Function to remove a log file entry | 165 * Function to remove a log file entry |
| 140 * --------------------------------------------------- | 166 * --------------------------------------------------- |
| 141 */ | 167 */ |
| 142 | 168 |
| 270 return TRUE; | 296 return TRUE; |
| 271 } | 297 } |
| 272 | 298 |
| 273 void set_font_face(GtkWidget *widget, struct conversation *c) | 299 void set_font_face(GtkWidget *widget, struct conversation *c) |
| 274 { | 300 { |
| 275 char *pre_fontface; | 301 char *pre_fontface, *old_font_face; |
| 276 int alloc = 0; | 302 int alloc = 0, length; |
| 277 | 303 |
| 278 if (!(font_options & OPT_FONT_FACE)) | 304 if (!(font_options & OPT_FONT_FACE)) |
| 279 return; | 305 return; |
| 280 | 306 |
| 281 if (c->current_fontface && strcmp(c->current_fontface, "(null)")) | 307 if (c->current_fontface && strcmp(c->current_fontface, "(null)")) |
| 290 { | 316 { |
| 291 g_free(pre_fontface); | 317 g_free(pre_fontface); |
| 292 alloc--; | 318 alloc--; |
| 293 pre_fontface = "<FONT FACE=\"Helvetica\">"; | 319 pre_fontface = "<FONT FACE=\"Helvetica\">"; |
| 294 } | 320 } |
| 295 | 321 |
| 322 if (old_font_face = get_tag_by_prefix(c->entry, "<FONT FACE")) | |
| 323 { | |
| 324 remove_tags(c->entry, old_font_face); | |
| 325 remove_tags(c->entry, "</FONT>"); | |
| 326 } | |
| 327 | |
| 296 surround(c->entry, pre_fontface, "</FONT>"); | 328 surround(c->entry, pre_fontface, "</FONT>"); |
| 297 gtk_widget_grab_focus(c->entry); | 329 gtk_widget_grab_focus(c->entry); |
| 298 | 330 |
| 299 if (alloc) | 331 if (alloc) |
| 300 g_free(pre_fontface); | 332 g_free(pre_fontface); |
| 333 | |
| 334 g_free(old_font_face); /* mem allocated in get_tag_by_prefix() */ | |
| 301 return; | 335 return; |
| 302 } | 336 } |
| 303 | 337 |
| 304 static gint delete_event_convo(GtkWidget *w, GdkEventAny *e, struct conversation *c) | 338 static gint delete_event_convo(GtkWidget *w, GdkEventAny *e, struct conversation *c) |
| 305 { | 339 { |
| 541 } | 575 } |
| 542 | 576 |
| 543 | 577 |
| 544 void remove_tags(GtkWidget *entry, char *tag) | 578 void remove_tags(GtkWidget *entry, char *tag) |
| 545 { | 579 { |
| 546 char *s; | 580 char *s, *t; |
| 547 char *t; | |
| 548 int start = GTK_EDITABLE(entry)->selection_start_pos; | 581 int start = GTK_EDITABLE(entry)->selection_start_pos; |
| 549 int finish = GTK_EDITABLE(entry)->selection_end_pos; | 582 int finish = GTK_EDITABLE(entry)->selection_end_pos; |
| 550 s = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); | 583 int temp; |
| 584 s = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); | |
| 551 t = s; | 585 t = s; |
| 586 | |
| 587 if (start > finish) | |
| 588 { | |
| 589 temp = start; | |
| 590 start = finish; | |
| 591 finish = temp; | |
| 592 } | |
| 593 | |
| 552 if (strstr(tag, "<FONT SIZE=")) | 594 if (strstr(tag, "<FONT SIZE=")) |
| 553 { | 595 { |
| 554 while((t = strstr(t, "<FONT SIZE="))) { | 596 while((t = strstr(t, "<FONT SIZE="))) { |
| 555 if (((t-s) < finish) && ((t-s) >= start)) { | 597 if (((t-s) < finish) && ((t-s) >= start)) { |
| 556 gtk_editable_delete_text(GTK_EDITABLE(entry), (t-s), (t-s) + strlen(tag)); | 598 gtk_editable_delete_text(GTK_EDITABLE(entry), (t-s), (t-s) + strlen(tag)); |
