Changeset 3460 for trunk/jons-gtk2-gui

Show
Ignore:
Timestamp:
04/27/03 03:34:49 (6 years ago)
Author:
bostjanlah
Message:

Made chat saving work (and be automatically invoked when closing the chat window)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/jons-gtk2-gui/src/chat_window.cpp

    r3457 r3460  
    119119void kick_no_vote_callback(GtkWidget *, gpointer); 
    120120 
    121 void chat_save(gpointer, guint, GtkWidget *); 
    122 void save_chat_ok(GtkWidget *, gpointer); 
    123 void save_chat_cancel(GtkWidget *, gpointer); 
     121void chat_save(struct chat_window *cw, guint, GtkWidget *); 
    124122 
    125123void chat_close(struct chat_window *, guint, GtkWidget *); 
     
    604602  } 
    605603  // We are unwanted now 
    606   if (cw->chatman->ConnectedUsers() == 0) 
     604  if (cw->chatman->ConnectedUsers() == 0) { 
     605        string txt(textview_get_chars(cw->text_irc)); 
     606        if (txt.size() > 0) { 
     607            GtkWidget *msg =  
     608                    gtk_message_dialog_new(GTK_WINDOW(cw->window), 
     609                            GTK_DIALOG_DESTROY_WITH_PARENT, 
     610                            GTK_MESSAGE_QUESTION, 
     611                            GTK_BUTTONS_YES_NO, 
     612                            "Would you like to save this chat session?"); 
     613            if (gtk_dialog_run(GTK_DIALOG(msg)) == GTK_RESPONSE_YES) { 
     614                gtk_widget_destroy(msg); 
     615                chat_save(cw, 0, 0); 
     616            } 
     617            else 
     618                gtk_widget_destroy(msg); 
     619        } 
     620 
    607621    return true; 
    608  
     622    } 
     623     
    609624  return false; 
    610625} 
     
    634649  gUserManager.DropUser(u); 
    635650    return utf8_txt; 
     651} 
     652 
     653void 
     654cw_destroy_cb(GtkWidget *, struct chat_window *cw) 
     655{ 
     656  g_free(cw); 
    636657} 
    637658 
     
    774795  g_signal_connect(G_OBJECT(cw->window), "delete_event", 
    775796            G_CALLBACK(call_chat_close), cw); 
     797  g_signal_connect(G_OBJECT(cw->window), "destroy", 
     798            G_CALLBACK(cw_destroy_cb), cw); 
    776799   
    777800  gtk_widget_show_all(cw->window); 
     
    962985 
    963986void 
    964 chat_save(gpointer _cw, guint action, GtkWidget *widget) 
    965 { 
    966   GtkWidget *dlg_save_chat = gtk_file_selection_new("Licq - Save Chat"); 
    967  
    968   // Connect the signals 
    969   g_signal_connect( 
    970     G_OBJECT(GTK_FILE_SELECTION(dlg_save_chat)->ok_button), 
    971     "clicked", GTK_SIGNAL_FUNC(save_chat_ok), 
    972     _cw); 
    973   g_signal_connect( 
    974     G_OBJECT(GTK_FILE_SELECTION(dlg_save_chat)->cancel_button), 
    975     "clicked", G_CALLBACK(save_chat_cancel), 
    976     0); 
    977   g_signal_connect(G_OBJECT(dlg_save_chat), "delete_event", 
    978     G_CALLBACK(save_chat_cancel), 0); 
    979    
    980   gtk_widget_show_all(dlg_save_chat); 
    981 } 
    982  
    983 void save_chat_ok(GtkWidget *widget, gpointer _cw) 
    984 { 
    985 } 
    986  
    987 void save_chat_cancel(GtkWidget *widget, gpointer data) 
    988 { 
     987chat_save(struct chat_window *cw, guint action, GtkWidget *widget) 
     988{ 
     989  GtkWidget *file_sel = gtk_file_selection_new("Licq - Save Chat"); 
     990 
     991    FILE *fo = NULL; 
     992    while (fo == NULL) { 
     993        int response = gtk_dialog_run(GTK_DIALOG(file_sel)); 
     994        if (response != GTK_RESPONSE_OK) 
     995            break; 
     996        const char *file_name =  
     997                gtk_file_selection_get_filename(GTK_FILE_SELECTION(file_sel)); 
     998        if (g_file_test(file_name, G_FILE_TEST_EXISTS)) { 
     999            if (!g_file_test(file_name, G_FILE_TEST_IS_DIR)) { 
     1000                GtkWidget *msg =  
     1001                        gtk_message_dialog_new(GTK_WINDOW(file_sel), 
     1002                                GTK_DIALOG_DESTROY_WITH_PARENT, 
     1003                                GTK_MESSAGE_QUESTION, 
     1004                                GTK_BUTTONS_YES_NO, 
     1005                                "File %s already exists, overwrite?", 
     1006                                file_name); 
     1007                if (gtk_dialog_run(GTK_DIALOG(msg)) == GTK_RESPONSE_YES) { 
     1008                    fo = fopen(file_name, "wt"); 
     1009                    gtk_widget_destroy(msg); 
     1010                } 
     1011                else { 
     1012                    gtk_widget_destroy(msg); 
     1013                    continue; 
     1014                } 
     1015            } 
     1016            else { 
     1017                GtkWidget *msg =  
     1018                        gtk_message_dialog_new(GTK_WINDOW(file_sel), 
     1019                                GTK_DIALOG_DESTROY_WITH_PARENT, 
     1020                                GTK_MESSAGE_ERROR, 
     1021                                GTK_BUTTONS_CLOSE, 
     1022                                "Invalid selection, %s is a directory", 
     1023                                file_name); 
     1024                gtk_dialog_run(GTK_DIALOG(msg)); 
     1025                gtk_widget_destroy(msg); 
     1026                continue; 
     1027            } 
     1028        } 
     1029        else 
     1030            fo = fopen(file_name, "wt"); 
     1031        if (fo == NULL) { 
     1032            GtkWidget *msg =  
     1033                    gtk_message_dialog_new(GTK_WINDOW(file_sel), 
     1034                            GTK_DIALOG_DESTROY_WITH_PARENT, 
     1035                            GTK_MESSAGE_ERROR, 
     1036                            GTK_BUTTONS_CLOSE, 
     1037                            "Couldn't open %s for writing", 
     1038                            file_name); 
     1039            gtk_dialog_run(GTK_DIALOG(msg)); 
     1040            gtk_widget_destroy(msg); 
     1041        } 
     1042    } 
     1043     
     1044    if (fo != NULL) { 
     1045        string txt(textview_get_chars(cw->text_irc)); 
     1046        fwrite(txt.c_str(), 1, txt.size(), fo); 
     1047        fclose(fo); 
     1048    } 
     1049    gtk_widget_destroy(GTK_WIDGET(file_sel)); 
    9891050} 
    9901051 
     
    9921053chat_close(struct chat_window *cw, guint action, GtkWidget *widget) 
    9931054{ 
    994   if (chat_close_base(cw)) { 
     1055  if (chat_close_base(cw)) 
    9951056    gtk_widget_destroy(cw->window); 
    996     g_free(cw); 
    997   } 
    9981057} 
    9991058