fix bug 4239, 'Preferences: Text Options Header Display modal is not modal' (sic)
[claws.git] / src / exphtmldlg.c
index b0d85a8fdaadccfafac6ded4f598b246dae4ac11..e6c4def961a6e875ed9591094c05c5c1bc065199 100644 (file)
@@ -1,10 +1,10 @@
 /*
- * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 2002-2003 Match Grun
+ * Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
+ * Copyright (C) 2002-2015 Match Grun and the Claws Mail team
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
@@ -13,8 +13,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
 /*
 
 #ifdef HAVE_CONFIG_H
 #  include "config.h"
+#include "claws-features.h"
 #endif
 
 #include "defs.h"
 
 #include <glib.h>
+#include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
-#include <gtk/gtkwindow.h>
-#include <gtk/gtksignal.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkentry.h>
-#include <gtk/gtktable.h>
-#include <gtk/gtkbutton.h>
-
-#include "intl.h"
+#include <gtk/gtk.h>
+
 #include "gtkutils.h"
 #include "prefs_common.h"
 #include "alertpanel.h"
 #include "exporthtml.h"
 #include "utils.h"
 #include "manage_window.h"
+#include "filesel.h"
+#include "combobox.h"
 
 #define PAGE_FILE_INFO             0
 #define PAGE_FORMAT                1
 #define PAGE_FINISH                2
 
-#define EXPORTHTML_WIDTH           480
-#define EXPORTHTML_HEIGHT          -1
-
 /**
  * Dialog object.
  */
@@ -106,7 +100,7 @@ static void export_html_message( void ) {
        gchar *sMsg = NULL;
        gint pageNum;
 
-       pageNum = gtk_notebook_current_page( GTK_NOTEBOOK(exphtml_dlg.notebook) );
+       pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(exphtml_dlg.notebook) );
        if( pageNum == PAGE_FILE_INFO ) {
                sMsg = _( "Please specify output directory and file to create." );
        }
@@ -127,7 +121,7 @@ static void export_html_message( void ) {
 static void export_html_cancel( GtkWidget *widget, gpointer data ) {
        gint pageNum;
 
-       pageNum = gtk_notebook_current_page( GTK_NOTEBOOK(exphtml_dlg.notebook) );
+       pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(exphtml_dlg.notebook) );
        if( pageNum != PAGE_FINISH ) {
                exphtml_dlg.cancelled = TRUE;
        }
@@ -152,7 +146,7 @@ static gint export_html_delete_event( GtkWidget *widget, GdkEventAny *event, gpo
  * \param data   User data.
  */
 static gboolean export_html_key_pressed( GtkWidget *widget, GdkEventKey *event, gpointer data ) {
-       if (event && event->keyval == GDK_Escape) {
+       if (event && event->keyval == GDK_KEY_Escape) {
                export_html_cancel( widget, data );
        }
        return FALSE;
@@ -167,25 +161,26 @@ static gboolean exp_html_move_file( void ) {
        AlertValue aval;
 
        sFile = gtk_editable_get_chars( GTK_EDITABLE(exphtml_dlg.entryHtml), 0, -1 );
-       g_strchug( sFile ); g_strchomp( sFile );
+       g_strstrip( sFile );
        gtk_entry_set_text( GTK_ENTRY(exphtml_dlg.entryHtml), sFile );
        exporthtml_parse_filespec( _exportCtl_, sFile );
        g_free( sFile );
 
        /* Test for directory */
-       if( exporthtml_test_dir( _exportCtl_ ) ) {
+       if( g_file_test(_exportCtl_->dirOutput,
+                               G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR) ) {
                return TRUE;
        }
 
        /* Prompt to create */
        msg = g_strdup_printf( _(
-               "HTML Output Directory '%s'\n" \
-               "does not exist. OK to create new directory?" ),
+               "The HTML output directory '%s'\n" \
+               "does not exist. Do you want to create it?" ),
                _exportCtl_->dirOutput );
-       aval = alertpanel( _("Create Directory" ),
-               msg, _( "Yes" ), _( "No" ), NULL );
+       aval = alertpanel( _("Create directory" ),
+               msg, GTK_STOCK_NO, GTK_STOCK_YES, NULL, ALERTFOCUS_FIRST );
        g_free( msg );
-       if( aval != G_ALERTDEFAULT ) return FALSE;
+       if( aval != G_ALERTALTERNATE ) return FALSE;
 
        /* Create directory */
        if( ! exporthtml_create_dir( _exportCtl_ ) ) {
@@ -193,8 +188,9 @@ static gboolean exp_html_move_file( void ) {
                msg = g_strdup_printf( _(
                        "Could not create output directory for HTML file:\n%s" ),
                        reason );
-               aval = alertpanel( _( "Failed to Create Directory" ),
-                       msg, _( "Close" ), NULL, NULL );
+               aval = alertpanel_full(_("Failed to Create Directory"), msg,
+                                      GTK_STOCK_CLOSE, NULL, NULL, ALERTFOCUS_FIRST, FALSE,
+                                      NULL, ALERT_ERROR);
                g_free( msg );
                return FALSE;
        }
@@ -208,19 +204,14 @@ static gboolean exp_html_move_file( void ) {
  */
 static gboolean exp_html_move_format( void ) {
        gboolean retVal = FALSE;
-       GtkWidget *menu, *menuItem;
        gint id;
 
        /* Set stylesheet */
-       menu = gtk_option_menu_get_menu( GTK_OPTION_MENU( exphtml_dlg.optmenuCSS ) );
-       menuItem = gtk_menu_get_active( GTK_MENU( menu ) );
-       id = GPOINTER_TO_INT( gtk_object_get_user_data(GTK_OBJECT(menuItem)) );
+       id = combobox_get_active_data(GTK_COMBO_BOX(exphtml_dlg.optmenuCSS));
        exporthtml_set_stylesheet( _exportCtl_, id );
 
        /* Set name format */
-       menu = gtk_option_menu_get_menu( GTK_OPTION_MENU( exphtml_dlg.optmenuName ) );
-       menuItem = gtk_menu_get_active( GTK_MENU( menu ) );
-       id = GPOINTER_TO_INT( gtk_object_get_user_data(GTK_OBJECT(menuItem)) );
+       id = combobox_get_active_data(GTK_COMBO_BOX(exphtml_dlg.optmenuName));
        exporthtml_set_name_format( _exportCtl_, id );
 
        exporthtml_set_banding( _exportCtl_,
@@ -260,16 +251,16 @@ static void exp_html_finish_show( void ) {
 static void export_html_prev( GtkWidget *widget ) {
        gint pageNum;
 
-       pageNum = gtk_notebook_current_page( GTK_NOTEBOOK(exphtml_dlg.notebook) );
+       pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(exphtml_dlg.notebook) );
        if( pageNum == PAGE_FORMAT ) {
                /* Goto file page stuff */
-               gtk_notebook_set_page(
+               gtk_notebook_set_current_page(
                        GTK_NOTEBOOK(exphtml_dlg.notebook), PAGE_FILE_INFO );
                gtk_widget_set_sensitive( exphtml_dlg.btnPrev, FALSE );
        }
        else if( pageNum == PAGE_FINISH ) {
                /* Goto format page */
-               gtk_notebook_set_page(
+               gtk_notebook_set_current_page(
                        GTK_NOTEBOOK(exphtml_dlg.notebook), PAGE_FORMAT );
                gtk_widget_set_sensitive( exphtml_dlg.btnNext, TRUE );
        }
@@ -283,11 +274,11 @@ static void export_html_prev( GtkWidget *widget ) {
 static void export_html_next( GtkWidget *widget ) {
        gint pageNum;
 
-       pageNum = gtk_notebook_current_page( GTK_NOTEBOOK(exphtml_dlg.notebook) );
+       pageNum = gtk_notebook_get_current_page( GTK_NOTEBOOK(exphtml_dlg.notebook) );
        if( pageNum == PAGE_FILE_INFO ) {
                /* Goto format page */
                if( exp_html_move_file() ) {
-                       gtk_notebook_set_page(
+                       gtk_notebook_set_current_page(
                                GTK_NOTEBOOK(exphtml_dlg.notebook), PAGE_FORMAT );
                        gtk_widget_set_sensitive( exphtml_dlg.btnPrev, TRUE );
                }
@@ -296,8 +287,10 @@ static void export_html_next( GtkWidget *widget ) {
        else if( pageNum == PAGE_FORMAT ) {
                /* Goto finish page */
                if( exp_html_move_format() ) {
-                       gtk_notebook_set_page(
+                       gtk_notebook_set_current_page(
                                GTK_NOTEBOOK(exphtml_dlg.notebook), PAGE_FINISH );
+                       gtk_button_set_label(GTK_BUTTON(exphtml_dlg.btnCancel),
+                               GTK_STOCK_CLOSE);
                        exp_html_finish_show();
                        exporthtml_save_settings( _exportCtl_ );
                        export_html_message();
@@ -313,78 +306,32 @@ static void export_html_next( GtkWidget *widget ) {
 static void export_html_browse( GtkWidget *widget, gpointer data ) {
        gchar *uri;
 
-       uri = g_strconcat( "file://", _exportCtl_->path, NULL );
-       open_uri( uri, prefs_common.uri_cmd );
+       uri = g_filename_to_uri(_exportCtl_->path, NULL, NULL);
+       open_uri( uri, prefs_common_get_uri_cmd() );
        g_free( uri );
 }
 
-/**
- * Callback function to accept HTML file selection.
- * \param widget Widget (button).
- * \param data   User data.
- */
-static void exp_html_file_ok( GtkWidget *widget, gpointer data ) {
-       const gchar *sFile;
-       AddressFileSelection *afs;
-       GtkWidget *fileSel;
-
-       afs = ( AddressFileSelection * ) data;
-       fileSel = afs->fileSelector;
-       sFile = gtk_file_selection_get_filename( GTK_FILE_SELECTION(fileSel) );
-
-       afs->cancelled = FALSE;
-       gtk_entry_set_text( GTK_ENTRY(exphtml_dlg.entryHtml), sFile );
-       gtk_widget_hide( afs->fileSelector );
-       gtk_grab_remove( afs->fileSelector );
-       gtk_widget_grab_focus( exphtml_dlg.entryHtml );
-}
-
-/**
- * Callback function to cancel HTML file selection dialog.
- * \param widget Widget (button).
- * \param data   User data.
- */
-static void exp_html_file_cancel( GtkWidget *widget, gpointer data ) {
-       AddressFileSelection *afs = ( AddressFileSelection * ) data;
-       afs->cancelled = TRUE;
-       gtk_widget_hide( afs->fileSelector );
-       gtk_grab_remove( afs->fileSelector );
-       gtk_widget_grab_focus( exphtml_dlg.entryHtml );
-}
-
 /**
  * Create HTML file selection dialog.
  * \param afs Address file selection data.
  */
 static void exp_html_file_select_create( AddressFileSelection *afs ) {
-       GtkWidget *fileSelector;
-
-       fileSelector = gtk_file_selection_new( _("Select HTML Output File") );
-       gtk_file_selection_hide_fileop_buttons( GTK_FILE_SELECTION(fileSelector) );
-       gtk_file_selection_complete( GTK_FILE_SELECTION(fileSelector), "*.html" );
-       gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION(fileSelector)->ok_button),
-               "clicked", GTK_SIGNAL_FUNC (exp_html_file_ok), ( gpointer ) afs );
-       gtk_signal_connect( GTK_OBJECT (GTK_FILE_SELECTION(fileSelector)->cancel_button),
-               "clicked", GTK_SIGNAL_FUNC (exp_html_file_cancel), ( gpointer ) afs );
-       afs->fileSelector = fileSelector;
-       afs->cancelled = TRUE;
+       gchar *file = filesel_select_file_save(_("Select HTML output file"), NULL);
+       
+       if (file == NULL)
+               afs->cancelled = TRUE;
+       else {
+               afs->cancelled = FALSE;
+               gtk_entry_set_text( GTK_ENTRY(exphtml_dlg.entryHtml), file );
+               g_free(file);
+       }
 }
 
 /**
  * Callback function to display HTML file selection dialog.
  */
 static void exp_html_file_select( void ) {
-       gchar *sFile;
-       if( ! _exp_html_file_selector_.fileSelector )
-               exp_html_file_select_create( & _exp_html_file_selector_ );
-
-       sFile = gtk_editable_get_chars( GTK_EDITABLE(exphtml_dlg.entryHtml), 0, -1 );
-       gtk_file_selection_set_filename(
-               GTK_FILE_SELECTION( _exp_html_file_selector_.fileSelector ),
-               sFile );
-       g_free( sFile );
-       gtk_widget_show( _exp_html_file_selector_.fileSelector );
-       gtk_grab_add( _exp_html_file_selector_.fileSelector );
+       exp_html_file_select_create( & _exp_html_file_selector_ );
 }
 
 /**
@@ -442,15 +389,15 @@ static void export_html_page_file( gint pageNum, gchar *pageLbl ) {
        gtk_table_attach(GTK_TABLE(table), entryHtml, 1, 2, top, (top + 1),
                GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
 
-       btnFile = gtk_button_new_with_label( _(" ... "));
+       btnFile = gtkut_get_browse_file_btn(_("B_rowse"));
        gtk_table_attach(GTK_TABLE(table), btnFile, 2, 3, top, (top + 1),
                GTK_FILL, 0, 3, 0);
 
        gtk_widget_show_all(vbox);
 
        /* Button handler */
-       gtk_signal_connect(GTK_OBJECT(btnFile), "clicked",
-                          GTK_SIGNAL_FUNC(exp_html_file_select), NULL);
+       g_signal_connect(G_OBJECT(btnFile), "clicked",
+                        G_CALLBACK(exp_html_file_select), NULL);
 
        exphtml_dlg.labelBook = labelBook;
        exphtml_dlg.entryHtml = entryHtml;
@@ -467,11 +414,12 @@ static void export_html_page_format( gint pageNum, gchar *pageLbl ) {
        GtkWidget *label;
        GtkWidget *optmenuCSS;
        GtkWidget *optmenuName;
-       GtkWidget *menu;
-       GtkWidget *menuItem;
+       GtkListStore *menu;
+       GtkTreeIter iter;
        GtkWidget *checkBanding;
        GtkWidget *checkLinkEMail;
        GtkWidget *checkAttributes;
+
        gint top;
 
        vbox = gtk_vbox_new(FALSE, 8);
@@ -499,52 +447,16 @@ static void export_html_page_format( gint pageNum, gchar *pageLbl ) {
                GTK_FILL, 0, 0, 0);
        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
 
-       menu = gtk_menu_new();
-
-       menuItem = gtk_menu_item_new_with_label( _( "None" ) );
-       gtk_object_set_user_data( GTK_OBJECT( menuItem ),
-                       GINT_TO_POINTER( EXPORT_HTML_ID_NONE ) );
-       gtk_menu_append( GTK_MENU(menu), menuItem );
-       gtk_widget_show( menuItem );
-
-       menuItem = gtk_menu_item_new_with_label( _( "Default" ) );
-       gtk_object_set_user_data( GTK_OBJECT( menuItem ),
-                       GINT_TO_POINTER( EXPORT_HTML_ID_DEFAULT ) );
-       gtk_menu_append( GTK_MENU(menu), menuItem );
-       gtk_widget_show( menuItem );
-
-       menuItem = gtk_menu_item_new_with_label( _( "Full" ) );
-       gtk_object_set_user_data( GTK_OBJECT( menuItem ),
-                       GINT_TO_POINTER( EXPORT_HTML_ID_FULL ) );
-       gtk_menu_append( GTK_MENU(menu), menuItem );
-       gtk_widget_show( menuItem );
-
-       menuItem = gtk_menu_item_new_with_label( _( "Custom" ) );
-       gtk_object_set_user_data( GTK_OBJECT( menuItem ),
-                       GINT_TO_POINTER( EXPORT_HTML_ID_CUSTOM ) );
-       gtk_menu_append( GTK_MENU(menu), menuItem );
-       gtk_widget_show( menuItem );
-
-       menuItem = gtk_menu_item_new_with_label( _( "Custom-2" ) );
-       gtk_object_set_user_data( GTK_OBJECT( menuItem ),
-                       GINT_TO_POINTER( EXPORT_HTML_ID_CUSTOM2 ) );
-       gtk_menu_append( GTK_MENU(menu), menuItem );
-       gtk_widget_show( menuItem );
-
-       menuItem = gtk_menu_item_new_with_label( _( "Custom-3" ) );
-       gtk_object_set_user_data( GTK_OBJECT( menuItem ),
-                       GINT_TO_POINTER( EXPORT_HTML_ID_CUSTOM3 ) );
-       gtk_menu_append( GTK_MENU(menu), menuItem );
-       gtk_widget_show( menuItem );
-
-       menuItem = gtk_menu_item_new_with_label( _( "Custom-4" ) );
-       gtk_object_set_user_data( GTK_OBJECT( menuItem ),
-                       GINT_TO_POINTER( EXPORT_HTML_ID_CUSTOM4 ) );
-       gtk_menu_append( GTK_MENU(menu), menuItem );
-       gtk_widget_show( menuItem );
-
-       optmenuCSS = gtk_option_menu_new();
-       gtk_option_menu_set_menu( GTK_OPTION_MENU( optmenuCSS ), menu );
+       optmenuCSS = gtkut_sc_combobox_create(NULL, TRUE);
+       menu = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(optmenuCSS)));
+
+       COMBOBOX_ADD(menu, _("None"), EXPORT_HTML_ID_NONE);
+       COMBOBOX_ADD(menu, _("Default"), EXPORT_HTML_ID_DEFAULT);
+       COMBOBOX_ADD(menu, _("Full"), EXPORT_HTML_ID_FULL);
+       COMBOBOX_ADD(menu, _("Custom"), EXPORT_HTML_ID_CUSTOM);
+       COMBOBOX_ADD(menu, _("Custom-2"), EXPORT_HTML_ID_CUSTOM2);
+       COMBOBOX_ADD(menu, _("Custom-3"), EXPORT_HTML_ID_CUSTOM3);
+       COMBOBOX_ADD(menu, _("Custom-4"), EXPORT_HTML_ID_CUSTOM4);
 
        gtk_table_attach(GTK_TABLE(table), optmenuCSS, 1, 2, top, (top + 1),
                GTK_FILL, 0, 0, 0);
@@ -556,22 +468,11 @@ static void export_html_page_format( gint pageNum, gchar *pageLbl ) {
                GTK_FILL, 0, 0, 0);
        gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
 
-       menu = gtk_menu_new();
-
-       menuItem = gtk_menu_item_new_with_label( _( "First Name, Last Name" ) );
-       gtk_object_set_user_data( GTK_OBJECT( menuItem ),
-                       GINT_TO_POINTER( EXPORT_HTML_FIRST_LAST ) );
-       gtk_menu_append( GTK_MENU(menu), menuItem );
-       gtk_widget_show( menuItem );
+       optmenuName = gtkut_sc_combobox_create(NULL, TRUE);
+       menu = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(optmenuName)));
 
-       menuItem = gtk_menu_item_new_with_label( _( "Last Name, First Name" ) );
-       gtk_object_set_user_data( GTK_OBJECT( menuItem ),
-                       GINT_TO_POINTER( EXPORT_HTML_LAST_FIRST ) );
-       gtk_menu_append( GTK_MENU(menu), menuItem );
-       gtk_widget_show( menuItem );
-
-       optmenuName = gtk_option_menu_new();
-       gtk_option_menu_set_menu( GTK_OPTION_MENU( optmenuName ), menu );
+       COMBOBOX_ADD(menu, _("First Name, Last Name"), EXPORT_HTML_FIRST_LAST);
+       COMBOBOX_ADD(menu, _("Last Name, First Name"), EXPORT_HTML_LAST_FIRST);
 
        gtk_table_attach(GTK_TABLE(table), optmenuName, 1, 2, top, (top + 1),
                GTK_FILL, 0, 0, 0);
@@ -584,7 +485,7 @@ static void export_html_page_format( gint pageNum, gchar *pageLbl ) {
 
        /* Fourth row */
        top++;
-       checkLinkEMail = gtk_check_button_new_with_label( _( "Format E-Mail Links" ) );
+       checkLinkEMail = gtk_check_button_new_with_label( _( "Format Email Links" ) );
        gtk_table_attach(GTK_TABLE(table), checkLinkEMail, 1, 2, top, (top + 1),
                GTK_FILL, 0, 0, 0);
 
@@ -635,7 +536,7 @@ static void export_html_page_finish( gint pageNum, gchar *pageLbl ) {
 
        /* First row */
        top = 0;
-       label = gtk_label_new( _( "Address Book :" ) );
+       label = gtk_label_new( _( "Address Book:" ) );
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
        gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
 
@@ -645,7 +546,7 @@ static void export_html_page_finish( gint pageNum, gchar *pageLbl ) {
 
        /* Second row */
        top++;
-       label = gtk_label_new( _( "File Name :" ) );
+       label = gtk_label_new( _( "File Name:" ) );
        gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
        gtk_misc_set_alignment(GTK_MISC(label), 1, 0.5);
 
@@ -661,8 +562,8 @@ static void export_html_page_finish( gint pageNum, gchar *pageLbl ) {
        gtk_widget_show_all(vbox);
 
        /* Button handlers */
-       gtk_signal_connect( GTK_OBJECT(btnBrowse), "clicked",
-               GTK_SIGNAL_FUNC(export_html_browse), NULL );
+       g_signal_connect(G_OBJECT(btnBrowse), "clicked",
+                        G_CALLBACK(export_html_browse), NULL);
 
        exphtml_dlg.labelOutBook = labelBook;
        exphtml_dlg.labelOutFile = labelFile;
@@ -683,19 +584,19 @@ static void export_html_dialog_create( void ) {
        GtkWidget *hsbox;
        GtkWidget *statusbar;
 
-       window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-       gtk_widget_set_usize(window, EXPORTHTML_WIDTH, EXPORTHTML_HEIGHT );
+       window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "exphtmldlg");
+       gtk_widget_set_size_request(window, -1, -1 );
        gtk_container_set_border_width( GTK_CONTAINER(window), 0 );
        gtk_window_set_title( GTK_WINDOW(window),
                _("Export Address Book to HTML File") );
        gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
-       gtk_window_set_modal(GTK_WINDOW(window), TRUE); 
-       gtk_signal_connect(GTK_OBJECT(window), "delete_event",
-                          GTK_SIGNAL_FUNC(export_html_delete_event),
-                          NULL );
-       gtk_signal_connect(GTK_OBJECT(window), "key_press_event",
-                          GTK_SIGNAL_FUNC(export_html_key_pressed),
-                          NULL );
+       gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
+       g_signal_connect(G_OBJECT(window), "delete_event",
+                        G_CALLBACK(export_html_delete_event),
+                        NULL );
+       g_signal_connect(G_OBJECT(window), "key_press_event",
+                        G_CALLBACK(export_html_key_pressed),
+                        NULL );
 
        vbox = gtk_vbox_new(FALSE, 4);
        gtk_widget_show(vbox);
@@ -721,20 +622,20 @@ static void export_html_dialog_create( void ) {
        gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, BORDER_WIDTH);
 
        /* Button panel */
-       gtkut_button_set_create(&hbbox, &btnPrev, _( "Prev" ),
-                               &btnNext, _( "Next" ),
-                               &btnCancel, _( "Cancel" ) );
+       gtkut_stock_button_set_create(&hbbox, &btnPrev, GTK_STOCK_GO_BACK,
+                                     &btnNext, GTK_STOCK_GO_FORWARD,
+                                     &btnCancel, GTK_STOCK_CANCEL);
        gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
        gtk_container_set_border_width(GTK_CONTAINER(hbbox), 2);
        gtk_widget_grab_default(btnNext);
 
        /* Button handlers */
-       gtk_signal_connect(GTK_OBJECT(btnPrev), "clicked",
-                          GTK_SIGNAL_FUNC(export_html_prev), NULL);
-       gtk_signal_connect(GTK_OBJECT(btnNext), "clicked",
-                          GTK_SIGNAL_FUNC(export_html_next), NULL);
-       gtk_signal_connect(GTK_OBJECT(btnCancel), "clicked",
-                          GTK_SIGNAL_FUNC(export_html_cancel), NULL);
+       g_signal_connect(G_OBJECT(btnPrev), "clicked",
+                        G_CALLBACK(export_html_prev), NULL);
+       g_signal_connect(G_OBJECT(btnNext), "clicked",
+                        G_CALLBACK(export_html_next), NULL);
+       g_signal_connect(G_OBJECT(btnCancel), "clicked",
+                        G_CALLBACK(export_html_cancel), NULL);
 
        gtk_widget_show_all(vbox);
 
@@ -770,10 +671,10 @@ static void export_html_fill_fields( ExportHtmlCtl *ctl ) {
                        ctl->path );
        }
 
-       gtk_option_menu_set_history(
-               GTK_OPTION_MENU( exphtml_dlg.optmenuCSS ), ctl->stylesheet );
-       gtk_option_menu_set_history(
-               GTK_OPTION_MENU( exphtml_dlg.optmenuName ), ctl->nameFormat );
+       combobox_select_by_data(
+                       GTK_COMBO_BOX(exphtml_dlg.optmenuCSS), ctl->stylesheet );
+       combobox_select_by_data(
+                       GTK_COMBO_BOX(exphtml_dlg.optmenuName), ctl->nameFormat );
        gtk_toggle_button_set_active(
                GTK_TOGGLE_BUTTON( exphtml_dlg.checkBanding ), ctl->banding );
        gtk_toggle_button_set_active(
@@ -796,16 +697,19 @@ void addressbook_exp_html( AddressCache *cache ) {
        /* Setup GUI */
        if( ! exphtml_dlg.window )
                export_html_create();
+
+       gtk_button_set_label(GTK_BUTTON(exphtml_dlg.btnCancel),
+                            GTK_STOCK_CANCEL);
        exphtml_dlg.cancelled = FALSE;
        gtk_widget_show(exphtml_dlg.window);
        manage_window_set_transient(GTK_WINDOW(exphtml_dlg.window));
-
+       gtk_window_set_modal(GTK_WINDOW(exphtml_dlg.window), TRUE);
        gtk_label_set_text( GTK_LABEL(exphtml_dlg.labelBook), cache->name );
        gtk_label_set_text( GTK_LABEL(exphtml_dlg.labelOutBook), cache->name );
        export_html_fill_fields( _exportCtl_ );
 
        gtk_widget_grab_default(exphtml_dlg.btnNext);
-       gtk_notebook_set_page( GTK_NOTEBOOK(exphtml_dlg.notebook), PAGE_FILE_INFO );
+       gtk_notebook_set_current_page( GTK_NOTEBOOK(exphtml_dlg.notebook), PAGE_FILE_INFO );
        gtk_widget_set_sensitive( exphtml_dlg.btnPrev, FALSE );
        gtk_widget_set_sensitive( exphtml_dlg.btnNext, TRUE );
 
@@ -814,6 +718,7 @@ void addressbook_exp_html( AddressCache *cache ) {
 
        gtk_main();
        gtk_widget_hide(exphtml_dlg.window);
+       gtk_window_set_modal(GTK_WINDOW(exphtml_dlg.window), FALSE);
        exporthtml_free( _exportCtl_ );
        _exportCtl_ = NULL;