comparison src/dialogs.c @ 5676:dae79aefac8d

[gaim-migrate @ 6094] I've been meaning to do this for a LONG time. The conversation API now follows the naming convention of the rest of the new APIs. I'll get some g_return_*_if_fail() checks in there soon. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Mon, 02 Jun 2003 21:51:06 +0000
parents b07aa997ddd8
children 1d140b31d4b3
comparison
equal deleted inserted replaced
5675:17e345ffeddb 5676:dae79aefac8d
206 GtkWidget *window; 206 GtkWidget *window;
207 GtkWidget *url; 207 GtkWidget *url;
208 GtkWidget *text; 208 GtkWidget *text;
209 GtkWidget *toggle; 209 GtkWidget *toggle;
210 GtkWidget *entry; 210 GtkWidget *entry;
211 struct gaim_conversation *c; 211 GaimConversation *c;
212 }; 212 };
213 213
214 struct passwddlg { 214 struct passwddlg {
215 GtkWidget *window; 215 GtkWidget *window;
216 GtkWidget *ok; 216 GtkWidget *ok;
245 245
246 /*------------------------------------------------------------------------*/ 246 /*------------------------------------------------------------------------*/
247 /* Destroys */ 247 /* Destroys */
248 /*------------------------------------------------------------------------*/ 248 /*------------------------------------------------------------------------*/
249 249
250 static gint delete_event_dialog(GtkWidget *w, GdkEventAny *e, struct gaim_conversation *c) 250 static gint delete_event_dialog(GtkWidget *w, GdkEventAny *e, GaimConversation *c)
251 { 251 {
252 struct gaim_gtk_conversation *gtkconv; 252 GaimGtkConversation *gtkconv;
253 gchar *object_data; 253 gchar *object_data;
254 254
255 object_data = g_object_get_data(G_OBJECT(w), "dialog_type"); 255 object_data = g_object_get_data(G_OBJECT(w), "dialog_type");
256 256
257 gtkconv = GAIM_GTK_CONVERSATION(c); 257 gtkconv = GAIM_GTK_CONVERSATION(c);
350 { 350 {
351 char *labeltext; 351 char *labeltext;
352 GtkWidget *hbox, *vbox; 352 GtkWidget *hbox, *vbox;
353 GtkWidget *label; 353 GtkWidget *label;
354 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG); 354 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_DIALOG);
355 struct gaim_conversation *c = gaim_find_conversation(who); 355 GaimConversation *c = gaim_find_conversation(who);
356 356
357 struct warning *w = g_new0(struct warning, 1); 357 struct warning *w = g_new0(struct warning, 1);
358 w->who = who; 358 w->who = who;
359 w->gc = gc; 359 w->gc = gc;
360 360
410 } 410 }
411 411
412 void do_remove_buddy(struct buddy *b) 412 void do_remove_buddy(struct buddy *b)
413 { 413 {
414 struct group *g; 414 struct group *g;
415 struct gaim_conversation *c; 415 GaimConversation *c;
416 gchar *name; 416 gchar *name;
417 417
418 if (!b) 418 if (!b)
419 return; 419 return;
420 420
439 { 439 {
440 GaimBlistNode *b = ((GaimBlistNode*)g)->child; 440 GaimBlistNode *b = ((GaimBlistNode*)g)->child;
441 while (b) { 441 while (b) {
442 if(GAIM_BLIST_NODE_IS_BUDDY(b)) { 442 if(GAIM_BLIST_NODE_IS_BUDDY(b)) {
443 struct buddy *bd = (struct buddy *)b; 443 struct buddy *bd = (struct buddy *)b;
444 struct gaim_conversation *c = gaim_find_conversation(bd->name); 444 GaimConversation *c = gaim_find_conversation(bd->name);
445 if(bd->account->gc) { 445 if(bd->account->gc) {
446 serv_remove_buddy(bd->account->gc, bd->name, g->name); 446 serv_remove_buddy(bd->account->gc, bd->name, g->name);
447 gaim_blist_remove_buddy(bd); 447 gaim_blist_remove_buddy(bd);
448 448
449 if (c != NULL) 449 if (c != NULL)
499 /* The dialog for getting an error */ 499 /* The dialog for getting an error */
500 /*------------------------------------------------------------------------*/ 500 /*------------------------------------------------------------------------*/
501 static void do_im(GtkWidget *widget, int resp, struct getuserinfo *info) 501 static void do_im(GtkWidget *widget, int resp, struct getuserinfo *info)
502 { 502 {
503 const char *who; 503 const char *who;
504 struct gaim_conversation *conv; 504 GaimConversation *conv;
505 GaimAccount *account; 505 GaimAccount *account;
506 506
507 if (resp == GTK_RESPONSE_OK) { 507 if (resp == GTK_RESPONSE_OK) {
508 who = gtk_entry_get_text(GTK_ENTRY(info->entry)); 508 who = gtk_entry_get_text(GTK_ENTRY(info->entry));
509 509
844 844
845 /*------------------------------------------------------------------------*/ 845 /*------------------------------------------------------------------------*/
846 /* The dialog for adding buddies */ 846 /* The dialog for adding buddies */
847 /*------------------------------------------------------------------------*/ 847 /*------------------------------------------------------------------------*/
848 848
849 extern void add_callback(GtkWidget *, struct gaim_conversation *); 849 extern void add_callback(GtkWidget *, GaimConversation *);
850 850
851 void do_add_buddy(GtkWidget *w, int resp, struct addbuddy *a) 851 void do_add_buddy(GtkWidget *w, int resp, struct addbuddy *a)
852 { 852 {
853 const char *grp, *who, *whoalias; 853 const char *grp, *who, *whoalias;
854 struct gaim_conversation *c; 854 GaimConversation *c;
855 struct buddy *b; 855 struct buddy *b;
856 struct group *g; 856 struct group *g;
857 void *icon_data; 857 void *icon_data;
858 void *icon_data2; 858 void *icon_data2;
859 int icon_len; 859 int icon_len;
2505 2505
2506 /*------------------------------------------------------------------------*/ 2506 /*------------------------------------------------------------------------*/
2507 /* Functions Called To Add A Log */ 2507 /* Functions Called To Add A Log */
2508 /*------------------------------------------------------------------------*/ 2508 /*------------------------------------------------------------------------*/
2509 2509
2510 void cancel_log(GtkWidget *widget, struct gaim_conversation *c) 2510 void cancel_log(GtkWidget *widget, GaimConversation *c)
2511 { 2511 {
2512 struct gaim_gtk_conversation *gtkconv; 2512 GaimGtkConversation *gtkconv;
2513 2513
2514 gtkconv = GAIM_GTK_CONVERSATION(c); 2514 gtkconv = GAIM_GTK_CONVERSATION(c);
2515 2515
2516 if (gtkconv->toolbar.log) { 2516 if (gtkconv->toolbar.log) {
2517 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkconv->toolbar.log), 2517 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkconv->toolbar.log),
2521 dialogwindows = g_list_remove(dialogwindows, gtkconv->dialogs.log); 2521 dialogwindows = g_list_remove(dialogwindows, gtkconv->dialogs.log);
2522 gtk_widget_destroy(gtkconv->dialogs.log); 2522 gtk_widget_destroy(gtkconv->dialogs.log);
2523 gtkconv->dialogs.log = NULL; 2523 gtkconv->dialogs.log = NULL;
2524 } 2524 }
2525 2525
2526 void do_log(GtkWidget *w, struct gaim_conversation *c) 2526 void do_log(GtkWidget *w, GaimConversation *c)
2527 { 2527 {
2528 struct gaim_gtk_conversation *gtkconv; 2528 GaimGtkConversation *gtkconv;
2529 struct log_conversation *l; 2529 struct log_conversation *l;
2530 const char *file; 2530 const char *file;
2531 char path[PATHSIZE]; 2531 char path[PATHSIZE];
2532 2532
2533 gtkconv = GAIM_GTK_CONVERSATION(c); 2533 gtkconv = GAIM_GTK_CONVERSATION(c);
2551 } 2551 }
2552 2552
2553 cancel_log(NULL, c); 2553 cancel_log(NULL, c);
2554 } 2554 }
2555 2555
2556 void show_log_dialog(struct gaim_conversation *c) 2556 void show_log_dialog(GaimConversation *c)
2557 { 2557 {
2558 struct gaim_gtk_conversation *gtkconv; 2558 GaimGtkConversation *gtkconv;
2559 char *buf = g_malloc(BUF_LEN); 2559 char *buf = g_malloc(BUF_LEN);
2560 2560
2561 gtkconv = GAIM_GTK_CONVERSATION(c); 2561 gtkconv = GAIM_GTK_CONVERSATION(c);
2562 2562
2563 if (!gtkconv->dialogs.log) { 2563 if (!gtkconv->dialogs.log) {
2806 2806
2807 /*------------------------------------------------------*/ 2807 /*------------------------------------------------------*/
2808 /* Link Dialog */ 2808 /* Link Dialog */
2809 /*------------------------------------------------------*/ 2809 /*------------------------------------------------------*/
2810 2810
2811 void cancel_link(GtkWidget *widget, struct gaim_conversation *c) 2811 void cancel_link(GtkWidget *widget, GaimConversation *c)
2812 { 2812 {
2813 struct gaim_gtk_conversation *gtkconv; 2813 GaimGtkConversation *gtkconv;
2814 2814
2815 gtkconv = GAIM_GTK_CONVERSATION(c); 2815 gtkconv = GAIM_GTK_CONVERSATION(c);
2816 2816
2817 if (gtkconv->toolbar.link) { 2817 if (gtkconv->toolbar.link) {
2818 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link), 2818 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link),
2823 gtkconv->dialogs.link = NULL; 2823 gtkconv->dialogs.link = NULL;
2824 } 2824 }
2825 2825
2826 void do_insert_link(GtkWidget *w, int resp, struct linkdlg *b) 2826 void do_insert_link(GtkWidget *w, int resp, struct linkdlg *b)
2827 { 2827 {
2828 struct gaim_gtk_conversation *gtkconv; 2828 GaimGtkConversation *gtkconv;
2829 char *open_tag; 2829 char *open_tag;
2830 const char *urltext, *showtext; 2830 const char *urltext, *showtext;
2831 2831
2832 gtkconv = GAIM_GTK_CONVERSATION(b->c); 2832 gtkconv = GAIM_GTK_CONVERSATION(b->c);
2833 2833
2854 2854
2855 gtkconv->dialogs.link = NULL; 2855 gtkconv->dialogs.link = NULL;
2856 destroy_dialog(NULL, b->window); 2856 destroy_dialog(NULL, b->window);
2857 } 2857 }
2858 2858
2859 void show_insert_link(GtkWidget *linky, struct gaim_conversation *c) 2859 void show_insert_link(GtkWidget *linky, GaimConversation *c)
2860 { 2860 {
2861 struct gaim_gtk_conversation *gtkconv; 2861 GaimGtkConversation *gtkconv;
2862 struct gaim_gtk_window *gtkwin; 2862 GaimGtkWindow *gtkwin;
2863 GtkWidget *table; 2863 GtkWidget *table;
2864 GtkWidget *label; 2864 GtkWidget *label;
2865 GtkWidget *hbox; 2865 GtkWidget *hbox;
2866 GtkWidget *vbox; 2866 GtkWidget *vbox;
2867 2867
2952 /*------------------------------------------------------*/ 2952 /*------------------------------------------------------*/
2953 2953
2954 GtkWidget *fgcseld = NULL; 2954 GtkWidget *fgcseld = NULL;
2955 GtkWidget *bgcseld = NULL; 2955 GtkWidget *bgcseld = NULL;
2956 2956
2957 void cancel_fgcolor(GtkWidget *widget, struct gaim_conversation *c) 2957 void cancel_fgcolor(GtkWidget *widget, GaimConversation *c)
2958 { 2958 {
2959 struct gaim_gtk_conversation *gtkconv; 2959 GaimGtkConversation *gtkconv;
2960 2960
2961 gtkconv = GAIM_GTK_CONVERSATION(c); 2961 gtkconv = GAIM_GTK_CONVERSATION(c);
2962 2962
2963 if (gtkconv->toolbar.fgcolor && widget) { 2963 if (gtkconv->toolbar.fgcolor && widget) {
2964 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.fgcolor), 2964 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.fgcolor),
2968 dialogwindows = g_list_remove(dialogwindows, gtkconv->dialogs.fg_color); 2968 dialogwindows = g_list_remove(dialogwindows, gtkconv->dialogs.fg_color);
2969 gtk_widget_destroy(gtkconv->dialogs.fg_color); 2969 gtk_widget_destroy(gtkconv->dialogs.fg_color);
2970 gtkconv->dialogs.fg_color = NULL; 2970 gtkconv->dialogs.fg_color = NULL;
2971 } 2971 }
2972 2972
2973 void cancel_bgcolor(GtkWidget *widget, struct gaim_conversation *c) 2973 void cancel_bgcolor(GtkWidget *widget, GaimConversation *c)
2974 { 2974 {
2975 struct gaim_gtk_conversation *gtkconv; 2975 GaimGtkConversation *gtkconv;
2976 2976
2977 gtkconv = GAIM_GTK_CONVERSATION(c); 2977 gtkconv = GAIM_GTK_CONVERSATION(c);
2978 2978
2979 if (gtkconv->toolbar.bgcolor && widget) { 2979 if (gtkconv->toolbar.bgcolor && widget) {
2980 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.bgcolor), 2980 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.bgcolor),
2987 } 2987 }
2988 2988
2989 void do_fgcolor(GtkWidget *widget, GtkColorSelection *colorsel) 2989 void do_fgcolor(GtkWidget *widget, GtkColorSelection *colorsel)
2990 { 2990 {
2991 GdkColor text_color; 2991 GdkColor text_color;
2992 struct gaim_conversation *c; 2992 GaimConversation *c;
2993 struct gaim_gtk_conversation *gtkconv; 2993 GaimGtkConversation *gtkconv;
2994 char *open_tag; 2994 char *open_tag;
2995 2995
2996 open_tag = g_malloc(30); 2996 open_tag = g_malloc(30);
2997 2997
2998 gtk_color_selection_get_current_color(colorsel, &text_color); 2998 gtk_color_selection_get_current_color(colorsel, &text_color);
3018 } 3018 }
3019 3019
3020 void do_bgcolor(GtkWidget *widget, GtkColorSelection *colorsel) 3020 void do_bgcolor(GtkWidget *widget, GtkColorSelection *colorsel)
3021 { 3021 {
3022 GdkColor text_color; 3022 GdkColor text_color;
3023 struct gaim_conversation *c; 3023 GaimConversation *c;
3024 struct gaim_gtk_conversation *gtkconv; 3024 GaimGtkConversation *gtkconv;
3025 char *open_tag; 3025 char *open_tag;
3026 3026
3027 open_tag = g_malloc(30); 3027 open_tag = g_malloc(30);
3028 3028
3029 gtk_color_selection_get_current_color(colorsel, &text_color); 3029 gtk_color_selection_get_current_color(colorsel, &text_color);
3046 3046
3047 g_free(open_tag); 3047 g_free(open_tag);
3048 cancel_bgcolor(NULL, c); 3048 cancel_bgcolor(NULL, c);
3049 } 3049 }
3050 3050
3051 void show_fgcolor_dialog(struct gaim_conversation *c, GtkWidget *color) 3051 void show_fgcolor_dialog(GaimConversation *c, GtkWidget *color)
3052 { 3052 {
3053 struct gaim_gtk_conversation *gtkconv; 3053 GaimGtkConversation *gtkconv;
3054 GtkWidget *colorsel; 3054 GtkWidget *colorsel;
3055 GdkColor fgcolor; 3055 GdkColor fgcolor;
3056 3056
3057 gtkconv = GAIM_GTK_CONVERSATION(c); 3057 gtkconv = GAIM_GTK_CONVERSATION(c);
3058 3058
3098 3098
3099 gtk_widget_show(gtkconv->dialogs.fg_color); 3099 gtk_widget_show(gtkconv->dialogs.fg_color);
3100 gdk_window_raise(gtkconv->dialogs.fg_color->window); 3100 gdk_window_raise(gtkconv->dialogs.fg_color->window);
3101 } 3101 }
3102 3102
3103 void show_bgcolor_dialog(struct gaim_conversation *c, GtkWidget *color) 3103 void show_bgcolor_dialog(GaimConversation *c, GtkWidget *color)
3104 { 3104 {
3105 struct gaim_gtk_conversation *gtkconv; 3105 GaimGtkConversation *gtkconv;
3106 GtkWidget *colorsel; 3106 GtkWidget *colorsel;
3107 GdkColor bgcolor; 3107 GdkColor bgcolor;
3108 3108
3109 gtkconv = GAIM_GTK_CONVERSATION(c); 3109 gtkconv = GAIM_GTK_CONVERSATION(c);
3110 3110
3154 3154
3155 /*------------------------------------------------------------------------*/ 3155 /*------------------------------------------------------------------------*/
3156 /* Font Selection Dialog */ 3156 /* Font Selection Dialog */
3157 /*------------------------------------------------------------------------*/ 3157 /*------------------------------------------------------------------------*/
3158 3158
3159 void cancel_font(GtkWidget *widget, struct gaim_conversation *c) 3159 void cancel_font(GtkWidget *widget, GaimConversation *c)
3160 { 3160 {
3161 struct gaim_gtk_conversation *gtkconv; 3161 GaimGtkConversation *gtkconv;
3162 3162
3163 gtkconv = GAIM_GTK_CONVERSATION(c); 3163 gtkconv = GAIM_GTK_CONVERSATION(c);
3164 3164
3165 if (gtkconv->toolbar.font && widget) { 3165 if (gtkconv->toolbar.font && widget) {
3166 gtk_toggle_button_set_active( 3166 gtk_toggle_button_set_active(
3176 { 3176 {
3177 /* this could be expanded to include font size, weight, etc. 3177 /* this could be expanded to include font size, weight, etc.
3178 but for now only works with font face */ 3178 but for now only works with font face */
3179 int i = 0; 3179 int i = 0;
3180 char *fontname; 3180 char *fontname;
3181 struct gaim_conversation *c = g_object_get_data(G_OBJECT(fontsel), 3181 GaimConversation *c = g_object_get_data(G_OBJECT(fontsel),
3182 "gaim_conversation"); 3182 "gaim_conversation");
3183 3183
3184 fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fontsel)); 3184 fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fontsel));
3185 3185
3186 if (c) { 3186 if (c) {
3213 { 3213 {
3214 gtk_widget_destroy(fontseld); 3214 gtk_widget_destroy(fontseld);
3215 fontseld = NULL; 3215 fontseld = NULL;
3216 } 3216 }
3217 3217
3218 void show_font_dialog(struct gaim_conversation *c, GtkWidget *font) 3218 void show_font_dialog(GaimConversation *c, GtkWidget *font)
3219 { 3219 {
3220 struct gaim_gtk_conversation *gtkconv; 3220 GaimGtkConversation *gtkconv;
3221 char fonttif[128]; 3221 char fonttif[128];
3222 const char *fontface; 3222 const char *fontface;
3223 3223
3224 gtkconv = GAIM_GTK_CONVERSATION(c); 3224 gtkconv = GAIM_GTK_CONVERSATION(c);
3225 3225
3473 gtk_widget_show_all(ca->window); 3473 gtk_widget_show_all(ca->window);
3474 } 3474 }
3475 3475
3476 /* smiley dialog */ 3476 /* smiley dialog */
3477 3477
3478 void close_smiley_dialog(GtkWidget *widget, struct gaim_conversation *c) 3478 void close_smiley_dialog(GtkWidget *widget, GaimConversation *c)
3479 { 3479 {
3480 struct gaim_gtk_conversation *gtkconv; 3480 GaimGtkConversation *gtkconv;
3481 3481
3482 gtkconv = GAIM_GTK_CONVERSATION(c); 3482 gtkconv = GAIM_GTK_CONVERSATION(c);
3483 3483
3484 if (gtkconv->toolbar.smiley) { 3484 if (gtkconv->toolbar.smiley) {
3485 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.smiley), 3485 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.smiley),
3490 gtk_widget_destroy(gtkconv->dialogs.smiley); 3490 gtk_widget_destroy(gtkconv->dialogs.smiley);
3491 gtkconv->dialogs.smiley = NULL; 3491 gtkconv->dialogs.smiley = NULL;
3492 } 3492 }
3493 } 3493 }
3494 3494
3495 void insert_smiley_text(GtkWidget *widget, struct gaim_conversation *c) 3495 void insert_smiley_text(GtkWidget *widget, GaimConversation *c)
3496 { 3496 {
3497 struct gaim_gtk_conversation *gtkconv; 3497 GaimGtkConversation *gtkconv;
3498 char *smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text"); 3498 char *smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text");
3499 GtkTextMark *select_mark, *insert_mark; 3499 GtkTextMark *select_mark, *insert_mark;
3500 GtkTextIter select_iter, insert_iter; 3500 GtkTextIter select_iter, insert_iter;
3501 3501
3502 gtkconv = GAIM_GTK_CONVERSATION(c); 3502 gtkconv = GAIM_GTK_CONVERSATION(c);
3512 3512
3513 gtk_text_buffer_insert_at_cursor(gtkconv->entry_buffer, smiley_text, -1); 3513 gtk_text_buffer_insert_at_cursor(gtkconv->entry_buffer, smiley_text, -1);
3514 close_smiley_dialog(NULL, c); 3514 close_smiley_dialog(NULL, c);
3515 } 3515 }
3516 3516
3517 static void add_smiley(struct gaim_conversation *c, GtkWidget *table, int row, int col, char *filename, char *face) 3517 static void add_smiley(GaimConversation *c, GtkWidget *table, int row, int col, char *filename, char *face)
3518 { 3518 {
3519 GtkWidget *image; 3519 GtkWidget *image;
3520 GtkWidget *button; 3520 GtkWidget *button;
3521 struct gaim_gtk_conversation *gtkconv = GAIM_GTK_CONVERSATION(c); 3521 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(c);
3522 3522
3523 image = gtk_image_new_from_file(filename); 3523 image = gtk_image_new_from_file(filename);
3524 button = gtk_button_new(); 3524 button = gtk_button_new();
3525 gtk_container_add(GTK_CONTAINER(button), image); 3525 gtk_container_add(GTK_CONTAINER(button), image);
3526 g_object_set_data(G_OBJECT(button), "smiley_text", face); 3526 g_object_set_data(G_OBJECT(button), "smiley_text", face);
3544 list = list->next; 3544 list = list->next;
3545 } 3545 }
3546 return TRUE; 3546 return TRUE;
3547 } 3547 }
3548 3548
3549 void show_smiley_dialog(struct gaim_conversation *c, GtkWidget *widget) 3549 void show_smiley_dialog(GaimConversation *c, GtkWidget *widget)
3550 { 3550 {
3551 struct gaim_gtk_conversation *gtkconv; 3551 GaimGtkConversation *gtkconv;
3552 GtkWidget *dialog; 3552 GtkWidget *dialog;
3553 GtkWidget *smiley_table = NULL; 3553 GtkWidget *smiley_table = NULL;
3554 GSList *smileys, *unique_smileys = NULL; 3554 GSList *smileys, *unique_smileys = NULL;
3555 int width; 3555 int width;
3556 int row = 0, col = 0; 3556 int row = 0, col = 0;