Changeset 3391 for trunk/jons-gtk2-gui

Show
Ignore:
Timestamp:
03/21/03 13:05:36 (6 years ago)
Author:
bostjanlah
Message:

Simplified and added missing items

Files:
1 modified

Legend:

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

    r3324 r3391  
    2121#include "licq_gtk.h" 
    2222#include "licq_log.h" 
     23#include "utilities.h" 
    2324 
    2425#include <gtk/gtk.h> 
     
    3839 
    3940    // Network section 
    40     GtkWidget *lstServers; 
    41     GtkWidget *spnDefPort; 
     41    GtkWidget *icqServer; 
     42    GtkWidget *icqServerPort; 
    4243    GtkWidget *chkBehindFirewall; 
    4344    GtkWidget *btnSOCKS; 
     
    5051    GtkWidget *cmbAutoLogon; 
    5152    GtkWidget *chkInvisible; 
     53   
     54    // Timeouts 
     55  GtkWidget *auto_away_time; 
     56  GtkWidget *auto_na_time; 
     57  GtkWidget *auto_offline_time; 
    5258}; 
    5359 
    54 void done_options(GtkWidget *, gpointer); 
    55 void show_on_color_dlg(GtkWidget *, gpointer); 
    56 void color_dlg_ok(GtkWidget *, gpointer); 
    57 void color_dlg_cancel(GtkWidget *, gpointer); 
    58 void SOCKSClicked(GtkWidget *, gpointer); 
     60void done_options(GtkWidget *, struct options_window *); 
     61//void SOCKSClicked(GtkWidget *, gpointer); 
    5962 
    6063// Global variables for use in other files 
     
    8083void set_options(struct options_window *ow); 
    8184 
     85void 
     86run_color_dialog(GtkWidget *color_button, GdkColor *color) 
     87{ 
     88  GtkWidget *dialog = gtk_color_selection_dialog_new("Choose color"); 
     89  GtkColorSelection *csel =  
     90      GTK_COLOR_SELECTION(GTK_COLOR_SELECTION_DIALOG(dialog)->colorsel); 
     91  gtk_color_selection_set_current_color(csel, color); 
     92  if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_OK) { 
     93    gtk_color_selection_get_current_color(csel, color); 
     94    gtk_widget_modify_bg(color_button, GTK_STATE_NORMAL, color); 
     95    gtk_widget_modify_bg(color_button, GTK_STATE_ACTIVE, color); 
     96    gtk_widget_modify_bg(color_button, GTK_STATE_PRELIGHT, color); 
     97    gtk_widget_modify_bg(color_button, GTK_STATE_SELECTED, color); 
     98    gtk_widget_modify_bg(color_button, GTK_STATE_INSENSITIVE, color); 
     99  } 
     100  gtk_widget_destroy(dialog); 
     101} 
     102 
     103GtkWidget * 
     104color_button_new(const char *label, GdkColor *color) 
     105{ 
     106    GtkWidget *color_button = gtk_button_new_with_label(label); 
     107  gtk_widget_modify_bg(color_button, GTK_STATE_NORMAL, color); 
     108  gtk_widget_modify_bg(color_button, GTK_STATE_ACTIVE, color); 
     109  gtk_widget_modify_bg(color_button, GTK_STATE_PRELIGHT, color); 
     110  gtk_widget_modify_bg(color_button, GTK_STATE_SELECTED, color); 
     111  gtk_widget_modify_bg(color_button, GTK_STATE_INSENSITIVE, color); 
     112  g_signal_connect(G_OBJECT(color_button), "clicked", 
     113      G_CALLBACK(run_color_dialog), color); 
     114  return color_button; 
     115} 
     116 
    82117// The "Options" selection under the menu in the main window 
    83 void menu_options_create() 
    84 { 
    85     GtkWidget *v_box; 
    86     GtkWidget *notebook; 
    87     GtkWidget *table; 
    88     GtkWidget *label; 
    89     GtkWidget *close; 
     118void 
     119menu_options_create() 
     120{ 
     121    static struct options_window *ow = 0; 
     122   
     123  if (ow != NULL) { 
     124    gtk_window_present(GTK_WINDOW(ow->window)); 
     125    return; 
     126  } 
     127   
    90128    GtkWidget *hbox; 
    91     struct options_window *ow = g_new0(struct options_window, 1); 
     129    ow = g_new0(struct options_window, 1); 
    92130 
    93131    // Make the window 
     
    95133    gtk_widget_show(ow->window); 
    96134    gtk_window_set_title(GTK_WINDOW(ow->window), "Licq - Options"); 
     135    gtk_container_set_border_width(GTK_CONTAINER(ow->window), 10); 
    97136 
    98137    // The vertical box, the main window will contain this 
    99     v_box = gtk_vbox_new(FALSE, 5); 
     138    GtkWidget *v_box = gtk_vbox_new(FALSE, 5); 
    100139    gtk_container_add(GTK_CONTAINER(ow->window), v_box); 
    101140 
    102141    // The notebook that will contain all the options 
    103     notebook = gtk_notebook_new(); 
     142    GtkWidget *notebook = gtk_notebook_new(); 
    104143 
    105144    // The table that will be used in all the notebook pages 
    106     table = gtk_table_new(5, 2, FALSE); 
     145  GtkWidget *general_vbox = gtk_vbox_new(FALSE, 0); 
     146  gtk_container_set_border_width(GTK_CONTAINER(general_vbox), 5); 
     147    GtkWidget *table = gtk_table_new(5, 2, FALSE); 
     148  gtk_box_pack_start(GTK_BOX(general_vbox), table, FALSE, FALSE, 5); 
    107149 
    108150/*********************** FIRST TAB *********************/  
     
    111153    ow->show_ignored = gtk_check_button_new_with_label("Show ignored users"); 
    112154    gtk_table_attach(GTK_TABLE(table), ow->show_ignored, 0, 1, 0, 1, 
    113              GtkAttachOptions(GTK_FILL | GTK_EXPAND), 
    114              GTK_FILL, 3, 3); 
     155            GtkAttachOptions(GTK_FILL | GTK_EXPAND), 
     156            GTK_FILL, 3, 3); 
    115157 
    116158    // Show offline users in the contact list? 
    117159    ow->show_offline = gtk_check_button_new_with_label("Show offline users"); 
    118160    gtk_table_attach(GTK_TABLE(table), ow->show_offline, 1, 2, 0, 1, 
    119              GtkAttachOptions(GTK_FILL | GTK_EXPAND), 
    120              GTK_FILL, 3, 3); 
     161            GtkAttachOptions(GTK_FILL | GTK_EXPAND), 
     162            GTK_FILL, 3, 3); 
    121163  
    122164    // Enter key pressed in the convo window send it? 
    123165    ow->enter_sends = gtk_check_button_new_with_label("Enter sends messages"); 
    124166    gtk_table_attach(GTK_TABLE(table), ow->enter_sends, 0, 1, 1, 2, 
    125              GtkAttachOptions(GTK_FILL | GTK_EXPAND), 
    126              GTK_FILL, 3, 3); 
     167            GtkAttachOptions(GTK_FILL | GTK_EXPAND), 
     168            GTK_FILL, 3, 3); 
    127169 
    128170    // Flash events 
    129171    ow->flash_events = gtk_check_button_new_with_label("Flash events"); 
    130172    gtk_table_attach(GTK_TABLE(table), ow->flash_events, 1, 2, 1, 2, 
    131         GtkAttachOptions(GTK_FILL | GTK_EXPAND), GTK_FILL, 3, 3); 
     173          GtkAttachOptions(GTK_FILL | GTK_EXPAND), GTK_FILL, 3, 3); 
    132174 
    133175    // Timestamp 
    134     ow->show_timestamp = gtk_check_button_new_with_label("Show timestamp in messages"); 
     176    ow->show_timestamp =  
     177      gtk_check_button_new_with_label("Show timestamp in messages"); 
    135178    gtk_table_attach(GTK_TABLE(table), ow->show_timestamp, 0, 1, 2, 3, 
    136         GtkAttachOptions(GTK_FILL | GTK_EXPAND), 
    137         GTK_FILL, 3, 3); 
     179          GtkAttachOptions(GTK_FILL | GTK_EXPAND), 
     180          GTK_FILL, 3, 3); 
    138181 
    139182    // Timestamp format 
    140183    hbox = gtk_hbox_new(false, 5); 
    141     label = gtk_label_new("Timestamp Format:"); 
     184    GtkWidget *label = gtk_label_new("Timestamp format:"); 
    142185    ow->txtTimestampFormat = gtk_entry_new(); 
    143186    gtk_entry_set_max_length(GTK_ENTRY(ow->txtTimestampFormat), 50); 
    144     gtk_widget_set_size_request(ow->txtTimestampFormat, 80, 20); 
     187  gtk_entry_set_width_chars(GTK_ENTRY(ow->txtTimestampFormat), 15); 
    145188    gtk_box_pack_start(GTK_BOX(hbox), label, false, 0, 0); 
    146189    gtk_box_pack_start(GTK_BOX(hbox), ow->txtTimestampFormat, false, 0, 0); 
    147190    gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 2, 3, 
    148         GtkAttachOptions(GTK_FILL | GTK_EXPAND), 
    149         GTK_FILL, 3,3 ); 
     191          GtkAttachOptions(GTK_FILL | GTK_EXPAND), 
     192          GTK_FILL, 3, 3); 
    150193 
    151194    // Receive colors 
    152195    ow->chkRecvColors = gtk_check_button_new_with_label("Receive Colors"); 
    153196    gtk_table_attach(GTK_TABLE(table), ow->chkRecvColors, 0, 1, 3, 4, 
    154         GtkAttachOptions(GTK_FILL | GTK_EXPAND), 
    155         GTK_FILL, 3, 3); 
     197          GtkAttachOptions(GTK_FILL | GTK_EXPAND), 
     198          GTK_FILL, 3, 3); 
    156199 
    157200    // Remember window position 
    158     ow->chkRememberWindowPos = gtk_check_button_new_with_label("Save Window Size and Position"); 
     201    ow->chkRememberWindowPos =  
     202      gtk_check_button_new_with_label("Save Window Position"); 
    159203    gtk_table_attach(GTK_TABLE(table), ow->chkRememberWindowPos, 1, 2, 3, 4, 
    160         GtkAttachOptions(GTK_FILL | GTK_EXPAND), 
    161         GTK_FILL, 3, 3); 
     204          GtkAttachOptions(GTK_FILL | GTK_EXPAND), 
     205          GTK_FILL, 3, 3); 
     206 
     207    // The table for the color selection in the "Contact List Colors" frame 
     208    GtkWidget *color_frame = gtk_frame_new("Contact list colors"); 
     209    gtk_container_set_border_width(GTK_CONTAINER(color_frame), 10); 
     210  gtk_box_pack_start(GTK_BOX(general_vbox), color_frame, FALSE, FALSE, 5); 
     211    GtkWidget *color_box = hbutton_box_new(15, GTK_BUTTONBOX_SPREAD); 
     212    gtk_container_set_border_width(GTK_CONTAINER(color_box), 10); 
     213  gtk_container_add(GTK_CONTAINER(color_frame), color_box); 
     214     
     215    gtk_container_add(GTK_CONTAINER(color_box),  
     216      color_button_new("Online", online_color)); 
     217    gtk_container_add(GTK_CONTAINER(color_box),  
     218      color_button_new("Offline", offline_color)); 
     219    gtk_container_add(GTK_CONTAINER(color_box), 
     220      color_button_new("Away", away_color)); 
    162221 
    163222    // Put the table in the notebook 
    164     label = gtk_label_new("General"); 
    165     gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, label); 
    166  
    167 /**************** Second tab: Contact List Colors ****************/ 
    168      
    169     // Recreate the table 
    170     table = gtk_table_new(5, 2, FALSE); 
    171  
    172     // The table for the color selection in the "Contact List Colors" frame 
    173     GtkWidget *clr_table = gtk_table_new(3, 3, FALSE); 
    174      
    175     // Colors frame and attach it to the table and also a table for inside 
    176     // the frame 
    177     GtkWidget *color_frame = gtk_frame_new("Contact List Colors"); 
    178     gtk_table_attach(GTK_TABLE(table), color_frame, 0, 1, 0, 1, 
    179              GTK_FILL, GTK_FILL, 3, 3); 
    180     gtk_container_add(GTK_CONTAINER(color_frame), clr_table); 
    181  
    182     // Online color label 
    183     label = gtk_label_new("Online Color"); 
    184     gtk_table_attach(GTK_TABLE(clr_table), label, 0, 1, 0, 1, 
    185              GTK_FILL, GTK_FILL, 3, 3); 
    186      
    187     // Online color browse button 
    188     int *chg_on_color = new int; 
    189     *chg_on_color = 1; 
    190      
    191     GtkWidget *online_browse = gtk_button_new_with_label("Browse"); 
    192     g_signal_connect(G_OBJECT(online_browse), "clicked", 
    193                   G_CALLBACK(show_on_color_dlg), 
    194                   (gpointer)chg_on_color); 
    195     gtk_table_attach(GTK_TABLE(clr_table), online_browse, 2, 3, 0, 1, 
    196              GTK_FILL, GTK_FILL, 3, 3); 
    197  
    198     // Offline color labe 
    199     label = gtk_label_new("Offline Color"); 
    200     gtk_table_attach(GTK_TABLE(clr_table), label, 0, 1, 1, 2, 
    201              GTK_FILL, GTK_FILL, 3, 3); 
    202  
    203     // Offline color browse button 
    204     int *chg_off_color = new int; 
    205     *chg_off_color = 2; 
    206      
    207     GtkWidget *offline_browse = gtk_button_new_with_label("Browse"); 
    208     g_signal_connect(G_OBJECT(offline_browse), "clicked", 
    209                G_CALLBACK(show_on_color_dlg), 
    210                (gpointer)chg_off_color); 
    211     gtk_table_attach(GTK_TABLE(clr_table), offline_browse, 2, 3, 1, 2, 
    212              GTK_FILL, GTK_FILL, 3, 3); 
    213      
    214     // Away color label 
    215     label = gtk_label_new("Away Color"); 
    216     gtk_table_attach(GTK_TABLE(clr_table), label, 0, 1, 2, 3, 
    217              GTK_FILL, GTK_FILL, 3, 3); 
    218  
    219     // Offline color browse button 
    220     int *chg_away_color = new int; 
    221     *chg_away_color = 3; 
    222  
    223     GtkWidget *away_browse = gtk_button_new_with_label("Browse"); 
    224     g_signal_connect(G_OBJECT(away_browse), "clicked", 
    225         G_CALLBACK(show_on_color_dlg), (gpointer)chg_away_color); 
    226     gtk_table_attach(GTK_TABLE(clr_table), away_browse, 2, 3, 2, 3, 
    227         GTK_FILL, GTK_FILL, 3, 3); 
    228  
    229     label = gtk_label_new("Contact List"); 
    230     gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, label); 
     223    gtk_notebook_append_page(GTK_NOTEBOOK(notebook), general_vbox, 
     224      gtk_label_new("General")); 
    231225 
    232226/********************* Third tab: Network *************************/ 
    233227 
    234     table = gtk_table_new(5, 2, false); 
    235  
    236     // ICQ Servers frame 
    237     GtkWidget *frmServers = gtk_frame_new("ICQ Servers"); 
    238     gtk_table_attach(GTK_TABLE(table), frmServers, 0, 1, 0, 1, 
    239         GTK_FILL, GTK_FILL, 3, 3); 
     228    GtkWidget *vbox = gtk_vbox_new(FALSE, 5); 
     229  gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); 
     230 
     231    // ICQ Server frame 
     232    GtkWidget *frmServers = gtk_frame_new("Server settings"); 
     233    gtk_box_pack_start(GTK_BOX(vbox), frmServers, FALSE, FALSE, 0); 
    240234 
    241235    // Table inside the servers frame 
    242     GtkWidget *tblServers = gtk_table_new(3, 2, false); 
     236    GtkWidget *tblServers = gtk_table_new(2, 2, FALSE); 
    243237    gtk_container_add(GTK_CONTAINER(frmServers), tblServers); 
    244238 
    245     // CList of servers 
    246     GtkListStore *store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING); 
    247     ow->lstServers = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); 
    248     g_object_unref(G_OBJECT(store)); 
    249     GtkCellRenderer *r_text = gtk_cell_renderer_text_new(); 
    250     GtkTreeViewColumn *col =  
    251             gtk_tree_view_column_new_with_attributes( 
    252                 "Server", r_text, "text", 0, NULL); 
    253     gtk_tree_view_append_column(GTK_TREE_VIEW(ow->lstServers), col); 
    254     col = gtk_tree_view_column_new_with_attributes( 
    255                 "Port", r_text, "text", 0, NULL); 
    256     gtk_tree_view_append_column(GTK_TREE_VIEW(ow->lstServers), col); 
    257     gtk_table_attach(GTK_TABLE(tblServers), ow->lstServers, 0, 2, 0, 1, 
    258         GTK_FILL, GTK_FILL, 3, 3); 
    259  
     239  label = gtk_label_new("ICQ server:"); 
     240  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); 
     241    gtk_table_attach(GTK_TABLE(tblServers), label, 0, 1, 0, 1, 
     242          GTK_FILL, GTK_FILL, 3, 3); 
     243  ow->icqServer = gtk_entry_new(); 
     244  gtk_entry_set_width_chars(GTK_ENTRY(ow->icqServer), 20); 
     245  gtk_table_attach(GTK_TABLE(tblServers), ow->icqServer, 1, 2, 0, 1, 
     246        GtkAttachOptions(GTK_EXPAND | GTK_FILL), 
     247        GtkAttachOptions(GTK_EXPAND | GTK_FILL), 3, 3); 
     248   
    260249    // Default server port 
    261     label = gtk_label_new("Default server port:"); 
     250    label = gtk_label_new("ICQ server port:"); 
     251  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); 
    262252    gtk_table_attach(GTK_TABLE(tblServers), label, 0, 1, 1, 2, 
    263         GtkAttachOptions(GTK_EXPAND | GTK_FILL), 
    264         GtkAttachOptions(GTK_EXPAND | GTK_FILL), 3, 3); 
    265  
     253          GTK_FILL, GTK_FILL, 3, 3); 
     254   
    266255    // Spin button and it's adjustment 
    267     GtkAdjustment *adjPort = 
    268         (GtkAdjustment *)gtk_adjustment_new( 
    269             0, 1.0, 65535.0, 1.0, 15.0, 15.0); 
    270     ow->spnDefPort = gtk_spin_button_new(adjPort, 25.0, 0); 
    271     gtk_spin_button_set_update_policy(GTK_SPIN_BUTTON(ow->spnDefPort), 
    272         GTK_UPDATE_IF_VALID); 
    273     gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(ow->spnDefPort), true); 
    274     gtk_table_attach(GTK_TABLE(tblServers), ow->spnDefPort, 1, 2, 1, 2, 
    275         GtkAttachOptions(GTK_EXPAND | GTK_FILL), 
    276         GtkAttachOptions(GTK_EXPAND | GTK_FILL), 3, 3); 
     256    ow->icqServerPort = gtk_spin_button_new_with_range(1, 65535, 1); 
     257 
     258    gtk_table_attach(GTK_TABLE(tblServers), ow->icqServerPort, 1, 2, 1, 2, 
     259          GtkAttachOptions(GTK_EXPAND | GTK_FILL), 
     260          GtkAttachOptions(GTK_EXPAND | GTK_FILL), 3, 3); 
    277261 
    278262    // Firewall frame 
    279     GtkWidget *frmFirewall = gtk_frame_new("Firewall Settings"); 
    280     gtk_table_attach(GTK_TABLE(table), frmFirewall, 1, 2, 0, 1, 
    281         GTK_FILL, GTK_FILL, 3, 3); 
     263    GtkWidget *frmFirewall = gtk_frame_new("Firewall settings"); 
     264    gtk_box_pack_start(GTK_BOX(vbox), frmFirewall, FALSE, FALSE, 0); 
    282265 
    283266    // Table inside the firewall frame 
    284     GtkWidget *tblFirewall = gtk_table_new(3, 2, false); 
     267    GtkWidget *tblFirewall = gtk_table_new(4, 2, false); 
    285268    gtk_container_add(GTK_CONTAINER(frmFirewall), tblFirewall); 
    286269 
    287270    ow->chkBehindFirewall = gtk_check_button_new_with_label( 
    288         "I am behind a firewall/proxy"); 
     271          "I am behind a firewall/proxy"); 
    289272    gtk_table_attach(GTK_TABLE(tblFirewall), ow->chkBehindFirewall, 
    290         0, 1, 0, 1, GTK_FILL, GTK_FILL, 3, 3); 
    291  
    292     ow->btnSOCKS = gtk_button_new_with_mnemonic("SOCKS5 _Proxy"); 
     273          0, 2, 0, 1, GTK_FILL, GTK_FILL, 3, 3); 
     274 
     275    /* 
     276  ow->btnSOCKS = gtk_button_new_with_mnemonic("SOCKS5 _Proxy"); 
    293277    //gtk_signal_connect(GTK_OBJECT(ow->btnSOCKS), "clicked", 
    294278    //  GTK_SIGNAL_FUNC(SOCKSClicked), 0); 
    295279    gtk_table_attach(GTK_TABLE(tblFirewall), ow->btnSOCKS, 0, 1, 1, 2, 
    296         GtkAttachOptions(0), 
    297         GtkAttachOptions(0), 3, 3); 
    298  
    299  
    300     // Box for the firewall host and entry 
    301     GtkWidget *boxHBox = gtk_hbox_new(false, 0); 
    302  
    303     label = gtk_label_new("Firewall/Proxy Host:"); 
    304     gtk_box_pack_start(GTK_BOX(boxHBox), label, false, false, 1); 
     280          GtkAttachOptions(0), 
     281          GtkAttachOptions(0), 3, 3); 
     282  */ 
     283   
     284    label = gtk_label_new("Firewall/proxy host:"); 
     285    gtk_table_attach(GTK_TABLE(tblFirewall), label, 
     286          0, 1, 1, 2, GTK_FILL, GTK_FILL, 3, 3); 
     287    //gtk_box_pack_start(GTK_BOX(boxHBox), label, false, false, 1); 
    305288 
    306289    ow->txtFirewallHost = gtk_entry_new(); 
    307     gtk_widget_set_size_request(ow->txtFirewallHost, 100, 15); 
    308     gtk_box_pack_start(GTK_BOX(boxHBox), ow->txtFirewallHost, false, false, 1); 
    309  
    310     gtk_table_attach(GTK_TABLE(tblFirewall), boxHBox, 0, 2, 2, 3, 
    311         GtkAttachOptions(GTK_EXPAND | GTK_FILL), 
    312         GtkAttachOptions(GTK_EXPAND | GTK_FILL), 1, 3); 
     290  gtk_entry_set_width_chars(GTK_ENTRY(ow->txtFirewallHost), 20); 
     291    gtk_table_attach(GTK_TABLE(tblFirewall), ow->txtFirewallHost, 
     292          1, 2, 1, 2,  
     293          GtkAttachOptions(GTK_EXPAND | GTK_FILL), 
     294          GtkAttachOptions(GTK_EXPAND | GTK_FILL), 
     295      3, 3); 
    313296     
    314297    ow->chkTCPEnabled = gtk_check_button_new_with_label( 
    315         "I can receive direct connections"); 
    316     gtk_table_attach(GTK_TABLE(tblFirewall), ow->chkTCPEnabled, 0, 1, 3, 4, 
    317         GTK_FILL, GTK_FILL, 3, 3);   
    318  
    319     boxHBox = gtk_hbox_new(false, 2); 
    320      
     298          "I can receive direct connections"); 
     299    gtk_table_attach(GTK_TABLE(tblFirewall), ow->chkTCPEnabled, 0, 2, 2, 3, 
     300          GTK_FILL, GTK_FILL, 3, 3);     
     301 
    321302    // Port range 
    322     label = gtk_label_new("Port Range:"); 
    323     gtk_box_pack_start(GTK_BOX(boxHBox), label, false, false, 0); 
    324      
    325     // Adjustments 
    326     adjPort = (GtkAdjustment *)gtk_adjustment_new( 
    327             0, 0.0, 65535.0, 15.0, 100.0, 100.0); 
    328     ow->spnPortLow = gtk_spin_button_new(adjPort, 25.0, 0); 
    329  
    330     adjPort = (GtkAdjustment *)gtk_adjustment_new( 
    331             0, 0.0, 65535.0, 15.0, 100.0, 100.0); 
    332     ow->spnPortHigh = gtk_spin_button_new(adjPort, 25.0, 0); 
     303    label = gtk_label_new("Port range:"); 
     304  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); 
     305    gtk_table_attach(GTK_TABLE(tblFirewall), label, 
     306          0, 1, 3, 4, GTK_FILL, GTK_FILL, 3, 3); 
     307     
     308    // Spinbuttons 
     309    GtkWidget *boxHBox = gtk_hbox_new(false, 2); 
     310    ow->spnPortLow = gtk_spin_button_new_with_range(0, 65535, 1); 
    333311    label = gtk_label_new("to"); 
    334  
    335     // Resize the spin buttons 
     312    ow->spnPortHigh = gtk_spin_button_new_with_range(0, 65535, 1); 
     313 
     314    // Add spin buttons to the box 
    336315    gtk_box_pack_start(GTK_BOX(boxHBox), ow->spnPortLow, false, false, 0); 
    337316    gtk_box_pack_start(GTK_BOX(boxHBox), label, false, false, 0); 
    338317    gtk_box_pack_start(GTK_BOX(boxHBox), ow->spnPortHigh, false, false, 0); 
    339318 
    340     gtk_table_attach(GTK_TABLE(tblFirewall), boxHBox, 0, 2, 4, 5, 
    341         GtkAttachOptions(GTK_EXPAND | GTK_FILL), 
    342         GtkAttachOptions(GTK_EXPAND | GTK_FILL), 3, 3); 
    343  
    344     label = gtk_label_new("Network"); 
    345     gtk_notebook_append_page(GTK_NOTEBOOK(notebook), table, label); 
     319    gtk_table_attach(GTK_TABLE(tblFirewall), boxHBox, 1, 2, 3, 4, 
     320          GtkAttachOptions(GTK_EXPAND | GTK_FILL), 
     321          GtkAttachOptions(GTK_EXPAND | GTK_FILL), 3, 3); 
     322 
     323    gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox, 
     324      gtk_label_new("Network")); 
    346325 
    347326/********************* Fourth tab: Status *************************/ 
    348327 
    349     table = gtk_table_new(4, 2, false); 
    350  
     328  GtkWidget *status_vbox = gtk_vbox_new(FALSE, 5); 
     329  gtk_container_set_border_width(GTK_CONTAINER(status_vbox), 5); 
     330     
    351331    GtkWidget *frmAutoLogon = gtk_frame_new("Auto Logon"); 
    352      
     332  gtk_box_pack_start(GTK_BOX(status_vbox), frmAutoLogon, FALSE, FALSE, 0); 
     333 
    353334    // Box for the combo box and check button 
    354335    GtkWidget *boxALBox = gtk_vbox_new(false, 5); 
    355      
    356     // Combox box with the options 
    357     GList *lItems = 0; 
    358     lItems = g_list_append(lItems, const_cast<char *>("(None)")); 
    359     lItems = g_list_append(lItems, const_cast<char *>("Online")); 
    360     lItems = g_list_append(lItems, const_cast<char *>("Free For Chat")); 
    361     lItems = g_list_append(lItems, const_cast<char *>("Away")); 
    362     lItems = g_list_append(lItems, const_cast<char *>("Not Available")); 
    363     lItems = g_list_append(lItems, const_cast<char *>("Occupied")); 
    364     lItems = g_list_append(lItems, const_cast<char *>("Do Not Disturb")); 
    365  
    366     ow->cmbAutoLogon = gtk_combo_new(); 
    367     gtk_combo_set_popdown_strings(GTK_COMBO(ow->cmbAutoLogon), lItems); 
    368  
     336    gtk_container_add(GTK_CONTAINER(frmAutoLogon), boxALBox); 
     337 
     338  ow->cmbAutoLogon = gtk_option_menu_new(); 
    369339    gtk_box_pack_start(GTK_BOX(boxALBox), ow->cmbAutoLogon, false, false, 0); 
     340 
     341  GtkWidget *menu = gtk_menu_new(); 
     342    gtk_option_menu_set_menu(GTK_OPTION_MENU(ow->cmbAutoLogon), menu); 
     343    gtk_menu_shell_append(GTK_MENU_SHELL(menu),  
     344      gtk_menu_item_new_with_label("Offline")); 
     345    gtk_menu_shell_append(GTK_MENU_SHELL(menu),  
     346      gtk_menu_item_new_with_label("Online")); 
     347    gtk_menu_shell_append(GTK_MENU_SHELL(menu),  
     348      gtk_menu_item_new_with_label("Free For Chat")); 
     349    gtk_menu_shell_append(GTK_MENU_SHELL(menu),  
     350      gtk_menu_item_new_with_label("Away")); 
     351    gtk_menu_shell_append(GTK_MENU_SHELL(menu),  
     352      gtk_menu_item_new_with_label("Not Available")); 
     353    gtk_menu_shell_append(GTK_MENU_SHELL(menu),  
     354      gtk_menu_item_new_with_label("Occupied")); 
     355    gtk_menu_shell_append(GTK_MENU_SHELL(menu),  
     356      gtk_menu_item_new_with_label("Do Not Disturb")); 
    370357 
    371358    // Check button for invisible 
    372359    ow->chkInvisible = gtk_check_button_new_with_label("Invisible"); 
    373     gtk_box_pack_start(GTK_BOX(boxALBox), ow->chkInvisible, false, false, 0); 
    374  
    375     gtk_container_add(GTK_CONTAINER(frmAutoLogon), boxALBox); 
    376  
    377     label = gtk_label_new("Status"); 
    378     gtk_notebook_append_page(GTK_NOTEBOOK(notebook), frmAutoLogon, label); 
     360    gtk_box_pack_start(GTK_BOX(boxALBox), ow->chkInvisible, false, false, 5); 
     361 
     362    GtkWidget *frame = gtk_frame_new("Auto timeouts (seconds)"); 
     363  gtk_box_pack_start(GTK_BOX(status_vbox), frame, FALSE, FALSE, 0); 
     364  GtkWidget *tbl = gtk_table_new(3, 2, FALSE); 
     365  gtk_container_add(GTK_CONTAINER(frame), tbl); 
     366   
     367  gtk_table_attach(GTK_TABLE(tbl), gtk_label_new("Away timeout:"), 
     368      0, 1, 0, 1, GTK_FILL, GTK_FILL, 3, 3); 
     369    ow->auto_away_time = gtk_spin_button_new_with_range(0, 24 * 60 * 60, 1); 
     370  gtk_table_attach(GTK_TABLE(tbl), ow->auto_away_time, 
     371      1, 2, 0, 1, GTK_FILL, GTK_FILL, 3, 3); 
     372 
     373  gtk_table_attach(GTK_TABLE(tbl), gtk_label_new("NA timeout:"), 
     374      0, 1, 1, 2, GTK_FILL, GTK_FILL, 3, 3); 
     375    ow->auto_na_time = gtk_spin_button_new_with_range(0, 24 * 60 * 60, 1); 
     376  gtk_table_attach(GTK_TABLE(tbl), ow->auto_na_time, 
     377      1, 2, 1, 2, GTK_FILL, GTK_FILL, 3, 3); 
     378 
     379  gtk_table_attach(GTK_TABLE(tbl), gtk_label_new("Offline timeout:"), 
     380      0, 1, 2, 3, GTK_FILL, GTK_FILL, 3, 3); 
     381    ow->auto_offline_time = gtk_spin_button_new_with_range(0, 24 * 60 * 60, 1); 
     382  gtk_table_attach(GTK_TABLE(tbl), ow->auto_offline_time, 
     383      1, 2, 2, 3, GTK_FILL, GTK_FILL, 3, 3); 
     384 
     385    gtk_notebook_append_page(GTK_NOTEBOOK(notebook), status_vbox, 
     386      gtk_label_new("Status")); 
    379387 
    380388/********************* END OF ALL THE TABS ************************/ 
     
    384392 
    385393    /* The close button */ 
    386     close = gtk_button_new_with_mnemonic("_Done"); 
    387     gtk_box_pack_start(GTK_BOX(v_box), close, FALSE, FALSE, 0); 
     394    GtkWidget *close = gtk_button_new_with_mnemonic("_Apply"); 
     395    GtkWidget *cancel = gtk_button_new_from_stock(GTK_STOCK_CANCEL); 
     396  GtkWidget *bbox = hbutton_box_new(); 
     397  gtk_container_add(GTK_CONTAINER(bbox), close); 
     398  gtk_container_add(GTK_CONTAINER(bbox), cancel); 
     399    gtk_box_pack_start(GTK_BOX(v_box), bbox, FALSE, FALSE, 0); 
    388400    g_signal_connect(G_OBJECT(close), "clicked", 
    389                G_CALLBACK(done_options), (gpointer)ow); 
     401               G_CALLBACK(done_options), ow); 
     402    g_signal_connect(G_OBJECT(cancel), "clicked", 
     403               G_CALLBACK(window_close), ow->window); 
     404    g_signal_connect(G_OBJECT(ow->window), "destroy", 
     405               G_CALLBACK(destroy_cb), &ow); 
    390406     
    391407    // Set all the options now 
     
    395411} 
    396412 
    397 void set_options(struct options_window *ow) 
     413void 
     414set_options(struct options_window *ow) 
    398415{ 
    399416    // Check boxes for contact list apperance 
    400417    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ow->show_ignored), 
    401         show_ignored_users); 
     418        show_ignored_users); 
    402419    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ow->show_offline), 
    403         show_offline_users); 
     420          show_offline_users); 
    404421    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ow->enter_sends), 
    405         enter_sends); 
     422          enter_sends); 
    406423    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ow->flash_events), 
    407         flash_events); 
     424          flash_events); 
    408425    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ow->show_timestamp), 
    409         show_convo_timestamp); 
     426          show_convo_timestamp); 
    410427    gtk_entry_set_text(GTK_ENTRY(ow->txtTimestampFormat), 
    411         timestamp_format); 
     428          timestamp_format); 
    412429    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ow->chkRecvColors), 
    413         recv_colors); 
     430          recv_colors); 
    414431    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ow->chkRememberWindowPos), 
    415         remember_window_pos); 
    416  
    417     // Clist of servers 
    418  
    419     // Default server port 
    420 //  gtk_spin_button_set_value(GTK_SPIN_BUTTON(ow->spnDefPort), 
    421     //  icq_daemon->getDefaultRemotePort()); 
    422  
     432          remember_window_pos); 
     433 
     434  // ICQ Server and port 
     435  gtk_entry_set_text(GTK_ENTRY(ow->icqServer), 
     436      icq_daemon->ICQServer()); 
     437  gtk_spin_button_set_value(GTK_SPIN_BUTTON(ow->icqServerPort), 
     438      icq_daemon->ICQServerPort()); 
     439   
    423440    // Firewall stuff 
    424441    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ow->chkTCPEnabled), 
    425         icq_daemon->TCPEnabled()); 
     442          icq_daemon->TCPEnabled()); 
    426443    gtk_spin_button_set_value(GTK_SPIN_BUTTON(ow->spnPortLow), 
    427         icq_daemon->TCPPortsLow()); 
     444          icq_daemon->TCPPortsLow()); 
    428445    gtk_spin_button_set_value(GTK_SPIN_BUTTON(ow->spnPortHigh), 
    429         icq_daemon->TCPPortsHigh()); 
     446          icq_daemon->TCPPortsHigh()); 
    430447 
    431448    // Auto Logon 
    432     char szStatus[15]; 
    433     if (auto_logon & ICQ_STATUS_DND) 
    434     { 
    435         strcpy(szStatus, "Do Not Disturb"); 
    436     } 
     449    if (auto_logon & ICQ_STATUS_OFFLINE) 
     450    gtk_option_menu_set_history(GTK_OPTION_MENU(ow->cmbAutoLogon), 0); 
     451    else if (auto_logon & ICQ_STATUS_ONLINE) 
     452    gtk_option_menu_set_history(GTK_OPTION_MENU(ow->cmbAutoLogon), 1); 
     453    else if (auto_logon & ICQ_STATUS_FREEFORCHAT) 
     454    gtk_option_menu_set_history(GTK_OPTION_MENU(ow->cmbAutoLogon), 2); 
     455    else if (auto_logon & ICQ_STATUS_AWAY) 
     456    gtk_option_menu_set_history(GTK_OPTION_MENU(ow->cmbAutoLogon), 3); 
     457    else if (auto_logon & ICQ_STATUS_NA) 
     458    gtk_option_menu_set_history(GTK_OPTION_MENU(ow->cmbAutoLogon), 4); 
    437459    else if (auto_logon & ICQ_STATUS_OCCUPIED) 
    438     { 
    439         strcpy(szStatus, "Occupied"); 
    440     } 
    441     else if (auto_logon & ICQ_STATUS_NA) 
    442     { 
    443         strcpy(szStatus, "Not Available"); 
    444     } 
    445     else if (auto_logon & ICQ_STATUS_AWAY) 
    446     { 
    447         strcpy(szStatus, "Away"); 
    448     } 
    449     else if (auto_logon & ICQ_STATUS_FREEFORCHAT) 
    450     { 
    451         strcpy(szStatus, "Free For Chat"); 
    452     } 
    453     else if (auto_logon & ICQ_STATUS_ONLINE) 
    454     { 
    455         strcpy(szStatus, "Online"); 
    456     } 
    457     else 
    458     { 
    459         strcpy(szStatus, "(None)"); 
    460     } 
    461  
    462     gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(ow->cmbAutoLogon)->entry),