2005-11-21 [colin] 1.9.100cvs25
authorColin Leroy <colin@colino.net>
Mon, 21 Nov 2005 17:39:59 +0000 (17:39 +0000)
committerColin Leroy <colin@colino.net>
Mon, 21 Nov 2005 17:39:59 +0000 (17:39 +0000)
* src/addressbook.c
Fix some addressbook suckage (dnd, select all)
* src/compose.c
* src/gtk/gtkaspell.c
* src/gtk/gtkaspell.h
Make the spellchecker menu work with the
GtkTextView one instead of overriding it

ChangeLog
PATCHSETS
configure.ac
src/addressbook.c
src/compose.c
src/gtk/gtkaspell.c
src/gtk/gtkaspell.h

index 5ba48c3..a1db568 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2005-11-21 [colin]     1.9.100cvs25
+
+       * src/addressbook.c
+               Fix some addressbook suckage (dnd, select all)
+       * src/compose.c
+       * src/gtk/gtkaspell.c
+       * src/gtk/gtkaspell.h
+               Make the spellchecker menu work with the 
+               GtkTextView one instead of overriding it
+
 2005-11-20 [paul]      1.9.100cvs24
 
        * manual/handling.xml
index bc5753c..bc462e8 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.105.2.41 -r 1.105.2.42 src/prefs_account.c;  cvs diff -u -r 1.1.2.1 -r 1.1.2.2 manual/account.xml;  cvs diff -u -r 1.1.2.1 -r 1.1.2.2 manual/advanced.xml;  ) > 1.9.100cvs22.patchset
 ( cvs diff -u -r 1.1.2.2 -r 1.1.2.3 manual/Makefile;  cvs diff -u -r 1.1.2.2 -r 1.1.2.3 manual/advanced.xml;  cvs diff -u -r -1.1.2.1 -r -1.1.2.2 manual/manual.xml;  diff -u /dev/null manual/sylpheed-claws-manual.xml;  ) > 1.9.100cvs23.patchset
 ( cvs diff -u -r 1.1.2.2 -r 1.1.2.3 manual/handling.xml;  ) > 1.9.100cvs24.patchset
+( cvs diff -u -r 1.60.2.38 -r 1.60.2.39 src/addressbook.c;  cvs diff -u -r 1.382.2.194 -r 1.382.2.195 src/compose.c;  cvs diff -u -r 1.9.2.30 -r 1.9.2.31 src/gtk/gtkaspell.c;  cvs diff -u -r 1.5.2.3 -r 1.5.2.4 src/gtk/gtkaspell.h;  ) > 1.9.100cvs25.patchset
index 4edc9fd..cf27876 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=9
 MICRO_VERSION=100
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=24
+EXTRA_VERSION=25
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 2140a57..6753c81 100644 (file)
@@ -180,7 +180,7 @@ static void addressbook_lup_clicked         (GtkButton      *button,
 static void addressbook_close_clicked          (GtkButton      *button,
                                                 gpointer       data);
 
-static void addressbook_tree_selected  (GtkCTree       *ctree,
+static void addressbook_tree_selected          (GtkCTree       *ctree,
                                                 GtkCTreeNode   *node,
                                                 gint            column,
                                                 gpointer        data);
@@ -347,6 +347,7 @@ static void addressbook_import_mutt_cb              ( void );
 static void addressbook_import_pine_cb         ( void );
 static void addressbook_export_html_cb         ( void );
 static void addressbook_export_ldif_cb         ( void );
+static void addressbook_select_all_cb          ( void );
 static void addressbook_clip_cut_cb            ( void );
 static void addressbook_clip_copy_cb           ( void );
 static void addressbook_clip_paste_cb          ( void );
@@ -417,6 +418,8 @@ static GtkItemFactoryEntry addressbook_entries[] =
        {N_("/_Book/_Save"),            "<control>S",   addressbook_file_save_cb,       0, NULL},
        {N_("/_Book/_Close"),           "<control>W",   close_cb,                       0, NULL},
        {N_("/_Address"),                       NULL,           NULL, 0, "<Branch>"},
+       {N_("/_Address/_Select all"),   "<control>A",   addressbook_select_all_cb,      0, NULL},
+       {N_("/_Address/---"),           NULL,           NULL, 0, "<Separator>"},
        {N_("/_Address/C_ut"),          "<control>X",   addressbook_clip_cut_cb,        0, NULL},
        {N_("/_Address/_Copy"),         "<control>C",   addressbook_clip_copy_cb,       0, NULL},
        {N_("/_Address/_Paste"),        "<control>V",   addressbook_clip_paste_cb,      0, NULL},
@@ -453,6 +456,8 @@ static GtkItemFactoryEntry addressbook_tree_popup_entries[] =
 
 static GtkItemFactoryEntry addressbook_list_popup_entries[] =
 {
+       {N_("/_Select all"),    NULL, addressbook_select_all_cb, 0, NULL},
+       {N_("/---"),            NULL, NULL, 0, "<Separator>"},
        {N_("/_Edit"),          NULL, addressbook_edit_address_cb,   0, NULL},
        {N_("/_Delete"),        NULL, addressbook_delete_address_cb, 0, NULL},
        {N_("/---"),            NULL, NULL, 0, "<Separator>"},
@@ -649,6 +654,11 @@ void addressbook_refresh( void )
                if (addrbook.treeSelected) {
                        gtk_sctree_select( GTK_SCTREE(addrbook.ctree),
                                         addrbook.treeSelected);
+                       addressbook_set_clist(
+                               gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree),
+                                       addrbook.treeSelected),
+                               TRUE);
+
                }
        }
        addressbook_export_to_file();
@@ -1233,8 +1243,13 @@ static void addressbook_del_clicked(GtkButton *button, gpointer data)
                }
                g_list_free( list );
                addressbook_list_select_clear();
-               if( refreshList ) 
+               if( refreshList ) {
                        gtk_sctree_select( GTK_SCTREE(ctree), addrbook.opened);
+                       addressbook_set_clist(
+                               gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree),
+                                       addrbook.opened),
+                               TRUE);
+               }
                addrbook_set_dirty(abf, TRUE);
                addressbook_export_to_file();
                addressbook_list_menu_setup();
@@ -1260,6 +1275,11 @@ static void addressbook_del_clicked(GtkButton *button, gpointer data)
                g_list_free( list );
                addressbook_list_select_clear();
                gtk_sctree_select( GTK_SCTREE(ctree), addrbook.opened);
+               addressbook_set_clist(
+                       gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree),
+                               addrbook.opened),
+                       TRUE);
+               
                addrbook_set_dirty(abf, TRUE);
                addressbook_export_to_file();
                addressbook_list_menu_setup();
@@ -1392,6 +1412,7 @@ static void addressbook_menubar_set_sensitive( gboolean sensitive ) {
        menu_set_sensitive( addrbook.menu_factory, "/Book/Delete book", sensitive );
        menu_set_sensitive( addrbook.menu_factory, "/Book/New Folder",  sensitive );
 
+       menu_set_sensitive( addrbook.menu_factory, "/Address/Select all",    TRUE );
        menu_set_sensitive( addrbook.menu_factory, "/Address/Cut",    sensitive );
        menu_set_sensitive( addrbook.menu_factory, "/Address/Copy",   sensitive );
        menu_set_sensitive( addrbook.menu_factory, "/Address/Paste",  sensitive );
@@ -1602,6 +1623,7 @@ static void addressbook_list_menu_setup( void ) {
        if( obj == NULL ) canEdit = FALSE;
 
        menu_set_insensitive_all( GTK_MENU_SHELL(addrbook.list_popup) );
+       menu_set_sensitive( addrbook.list_factory, "/Select all", TRUE );
 
        if( pobj->type == ADDR_DATASOURCE ) {
                /* Parent object is a data source */
@@ -1725,6 +1747,10 @@ static void addressbook_treenode_add_list(
        }
 }
 
+static void addressbook_select_all_cb( void ) {
+       gtk_clist_select_all(GTK_CLIST(addrbook.clist));
+}
+
 /**
  * Cut from address list widget.
  */
@@ -1810,6 +1836,11 @@ static void addressbook_clip_paste_cb( void ) {
 
        /* Display items pasted */
        gtk_sctree_select( GTK_SCTREE(ctree), addrbook.opened );
+       addressbook_set_clist(
+               gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree),
+                       addrbook.opened),
+               TRUE);
+       
 
 }
 
@@ -1876,6 +1907,10 @@ static void addressbook_clip_paste_address_cb( void ) {
        /* Display items pasted */
        if( cnt > 0 ) {
                gtk_sctree_select( GTK_SCTREE(ctree), addrbook.opened );
+               addressbook_set_clist(
+                       gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree),
+                               addrbook.opened),
+                       TRUE);
        }
 }
 #endif
@@ -2616,6 +2651,10 @@ static void addressbook_new_address_cb( gpointer data, guint action, GtkWidget *
                if( person ) {
                        if (addrbook.treeSelected == addrbook.opened) {
                                gtk_sctree_select( GTK_SCTREE(addrbook.ctree), addrbook.opened );
+                               addressbook_set_clist(
+                                       gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree),
+                                               addrbook.opened),
+                                       TRUE);
                        }
                }
        }
@@ -2627,6 +2666,10 @@ static void addressbook_new_address_cb( gpointer data, guint action, GtkWidget *
                        /* Change node name in tree. */
                        addressbook_change_node_name( addrbook.treeSelected, ADDRITEM_NAME(group) );
                        gtk_sctree_select( GTK_SCTREE(addrbook.ctree), addrbook.opened );
+                       addressbook_set_clist(
+                               gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree),
+                                       addrbook.opened),
+                               TRUE);
                }
        }
 }
@@ -2668,16 +2711,6 @@ static AddressBookFile *addressbook_get_book_file() {
        return abf;
 }
 
-static AddressBookFile *addressbook_get_book_file_for_node(GtkCTreeNode *node) {
-       AddressBookFile *abf = NULL;
-       AddressDataSource *ds = NULL;
-
-       ds = addressbook_find_datasource( node );
-       if( ds == NULL ) return NULL;
-       if( ds->type == ADDR_IF_BOOK ) abf = ds->rawDataSource;
-       return abf;
-}
-
 static void addressbook_tree_remove_children( GtkCTree *ctree, GtkCTreeNode *parent ) {
        GtkCTreeNode *node;
        GtkCTreeRow *row;
@@ -2773,12 +2806,18 @@ static void addressbook_edit_address_cb( gpointer data, guint action, GtkWidget
        addressbook_change_node_name( node, name );
        gtk_sctree_sort_node( ctree, parentNode );
        gtk_sctree_select( GTK_SCTREE(ctree), addrbook.opened ); 
+       addressbook_set_clist(
+               gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree),
+                       addrbook.opened),
+               TRUE);
 }
 
 static void addressbook_delete_address_cb(gpointer data, guint action,
                                          GtkWidget *widget)
 {
+       gtk_clist_freeze(GTK_CLIST(addrbook.clist));
        addressbook_del_clicked(NULL, NULL);
+       gtk_clist_thaw(GTK_CLIST(addrbook.clist));
 }
 
 static void close_cb(gpointer data, guint action, GtkWidget *widget)
@@ -4628,10 +4667,6 @@ static void addressbook_start_drag(GtkWidget *widget, gint button,
        gtk_drag_set_icon_default(context);
 }
 
-static GSList *dragged_persons = NULL;
-static ItemFolder *dragged_folder = NULL;
-static AddressBookFile *dragged_ab = NULL;
-
 static void addressbook_drag_data_get(GtkWidget        *widget,
                                     GdkDragContext   *drag_context,
                                     GtkSelectionData *selection_data,
@@ -4646,61 +4681,42 @@ static void addressbook_drag_data_get(GtkWidget        *widget,
        GList *cur;
 
        pobj = gtk_ctree_node_get_row_data( GTK_CTREE(addrbook.ctree), addrbook.treeSelected );
+
        if( pobj == NULL ) return;
 
        if( pobj->type == ADDR_DATASOURCE ) {
                ads = ADAPTER_DSOURCE(pobj);
                ds = ads->dataSource;
        } else if (pobj->type == ADDR_ITEM_GROUP) {
+
                return;
        }
        
        else if( pobj->type != ADDR_INTERFACE ) {
                ds = addressbook_find_datasource( addrbook.treeSelected );
+
                if (!ds)
                        return;
        }
        
-
        for(cur = GTK_CLIST(addrbook.clist)->selection; cur; cur = cur->next) {
-               aio = (AddrItemObject *)gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.clist), 
+               aio = (AddrItemObject *)gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.clist),
                        GTK_CTREE_NODE(cur->data));
                while (aio && aio->type != ADDR_ITEM_PERSON) {
                        aio = aio->parent;
                }
-               if (aio) {
-                       dragged_persons = g_slist_append(dragged_persons, aio);
-               }
-       }
+       }
 
        if (aio && aio->type == ADDR_ITEM_PERSON) {
-               dragged_folder = (ItemFolder *)ADAPTER_FOLDER(pobj)->itemFolder;
-               dragged_ab = addressbook_get_book_file();
-
-               gtk_selection_data_set(selection_data,
+               if( ds && ds->interface && ds->interface->readOnly)
+                       gtk_selection_data_set(selection_data,
                                       selection_data->target, 8,
-                                      "Dummy_addr", 11);
-               drag_context->actions = GDK_ACTION_MOVE;
-               
-               if (pobj->type == ADDR_DATASOURCE) {
-                       if( ds != NULL) {
-                               dragged_folder = addrindex_ds_get_root_folder( ds );
-                               if (ds->type != ADDR_IF_JPILOT ||
-                                   ds->type != ADDR_IF_LDAP)
-                                   drag_context->action = GDK_ACTION_COPY;
-                       } else {
-                               dragged_folder = NULL;
-                               g_slist_free(dragged_persons);
-                               dragged_persons = NULL;
-                               dragged_ab = NULL;
-                       }
-               }
-       } else {
-               dragged_folder = NULL;
-               g_slist_free(dragged_persons);
-               dragged_persons = NULL;
-               dragged_ab = NULL;
-       }
+                                      "Dummy_addr_copy", 15);
+               else
+                       gtk_selection_data_set(selection_data,
+                                      selection_data->target, 8,
+                                      "Dummy_addr_move", 15);
+       } 
 }
 
 static gboolean addressbook_drag_motion_cb(GtkWidget      *widget,
@@ -4739,18 +4755,15 @@ static gboolean addressbook_drag_motion_cb(GtkWidget      *widget,
                                AdapterDSource *ads = NULL;
                                AddressDataSource *ds = NULL;
                                ads = ADAPTER_DSOURCE(obj);
-                               if (ads == NULL ) return FALSE;
+                               if (ads == NULL ){ return FALSE;}
                                ds = ads->dataSource;
-                               if (ds == NULL ) return FALSE;
-                               if (obj->type == ADDR_DATASOURCE
-                               &&  !ds->interface->externalQuery)
-                                       acceptable = TRUE;
+                               if (ds == NULL ) { return FALSE;}
 
+                               acceptable = TRUE;
                        }
                }
        }
 
-       
        if (acceptable) {
                g_signal_handlers_block_by_func
                        (G_OBJECT(widget),
@@ -4778,11 +4791,12 @@ static void addressbook_drag_leave_cb(GtkWidget      *widget,
                g_signal_handlers_block_by_func
                        (G_OBJECT(widget),
                         G_CALLBACK(addressbook_tree_selected), NULL);
-               gtk_sctree_select( GTK_SCTREE(widget), addrbook.treeSelected);
+               gtk_sctree_select( GTK_SCTREE(widget), addrbook.opened);
                g_signal_handlers_unblock_by_func
                        (G_OBJECT(widget),
                         G_CALLBACK(addressbook_tree_selected), NULL);
        }
+       
 }
 
 static void addressbook_drag_received_cb(GtkWidget        *widget,
@@ -4796,80 +4810,30 @@ static void addressbook_drag_received_cb(GtkWidget        *widget,
 {
        gint row, column;
        GtkCTreeNode *node;
-       ItemFolder *afolder = NULL;
-       ItemFolder *ofolder = NULL;
-       ItemPerson *person = NULL;
-       
-
-       if (!strcmp(data->data, "Dummy_addr")) {
-               AddressObject *obj = NULL;
-               AdapterDSource *ads = NULL;
-               AddressDataSource *ds = NULL;
-               GSList *cur = dragged_persons;
+       GtkCTreeNode *lastopened = addrbook.opened;
 
+       if (!strncmp(data->data, "Dummy_addr", 10)) {
                if (gtk_clist_get_selection_info
                        (GTK_CLIST(widget), x - 24, y - 24, &row, &column) == 0) {
-                       goto free_list;
+                       return;
                }
-       
+               
                node = gtk_ctree_node_nth(GTK_CTREE(widget), row);
-               if( node ) 
-                       obj = gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree), node );
-               if( obj == NULL ) 
-                       goto free_list;
-                               
-               if (obj->type == ADDR_ITEM_FOLDER) {
-                       afolder = ADAPTER_FOLDER(obj)->itemFolder;
-
-               } else if (obj->type == ADDR_DATASOURCE) {
-                       ads = ADAPTER_DSOURCE(obj);
-                       if( ads == NULL ) 
-                               goto free_list;
-                       ds = ads->dataSource;
-                       if( ds == NULL ||
-                           ds->type == ADDR_IF_JPILOT || 
-                           ds->type == ADDR_IF_LDAP) 
-                               goto free_list;         
-                       afolder = addrindex_ds_get_root_folder( ds );
-               } else {
-                       goto free_list;
-               }
-
-               ofolder = dragged_folder;
+               if( !node || !gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree), node)) 
+                       return;
                
-               if (afolder && ofolder) {
-                       AddressBookFile *obook = dragged_ab;
-                       AddressBookFile *abook = addressbook_get_book_file_for_node(node);
-                       for (cur = dragged_persons; cur; cur = cur->next) {
-                               AddrBookBase *adbase = ( AddrBookBase * ) ds ? ds->rawDataSource : NULL;
-                               AddressCache *cache = (adbase) ? adbase->addressCache : NULL;
-
-                               person = (ItemPerson *)cur->data;
-                               addritem_folder_remove_person(ofolder, person);
-                               if (cache) {
-                                       addrcache_folder_add_person(cache, afolder, person);
-                               } else {
-                                       addritem_folder_add_person(afolder, person);
-                               }
-                       }
-                       addressbook_list_select_clear();
-                       gtk_sctree_select( GTK_SCTREE(addrbook.ctree), addrbook.opened);
-                                                       
-                       if (abook) {
-                               addrbook_set_dirty(abook, TRUE);
-                       }
-                       if (obook) {
-                               addrbook_set_dirty(obook, TRUE);
-                       }
-                       
-                       addressbook_export_to_file();
-               }
-
+               gtk_clist_freeze(GTK_CLIST(addrbook.clist));
+               if (drag_context->action == GDK_ACTION_COPY || 
+                   !strcmp(data->data, "Dummy_addr_copy"))
+                       addressbook_clip_copy_cb();
+               else
+                       addressbook_clip_cut_cb();
+               gtk_sctree_select( GTK_SCTREE(addrbook.ctree), node);
+               addressbook_clip_paste_cb();
+               gtk_sctree_select( GTK_SCTREE(addrbook.ctree), lastopened);
+               gtk_clist_thaw(GTK_CLIST(addrbook.clist));
                gtk_drag_finish(drag_context, TRUE, TRUE, time);
        }
-free_list:
-       g_slist_free(dragged_persons);
-       dragged_persons = NULL;
 }
 
 /*
index 7af4bb1..9bfc98d 100644 (file)
@@ -632,9 +632,6 @@ static GtkItemFactoryEntry compose_entries[] =
                                        NULL, compose_check_backwards , 0, NULL},
        {N_("/_Spelling/_Forward to next misspelled word"),
                                        NULL, compose_check_forwards_go, 0, NULL},
-       {N_("/_Spelling/---"),          NULL, NULL, 0, "<Separator>"},
-       {N_("/_Spelling/_Spelling Configuration"),
-                                       NULL, NULL, 0, "<Branch>"},
 #endif
        {N_("/_Options"),               NULL, NULL, 0, "<Branch>"},
        {N_("/_Options/Privacy System"),                NULL, NULL,   0, "<Branch>"},
@@ -5570,9 +5567,6 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode)
                                        gtkaspell_checkers_reset_error();
                                }
 
-                               menuitem = gtk_item_factory_get_item(ifactory,
-                                       "/Spelling/Spelling Configuration");
-                               gtkaspell_populate_submenu(gtkaspell, menuitem);
                                menu_set_sensitive(ifactory, "/Spelling", TRUE);
                        }
                }
index 18de6b3..a51ec3f 100644 (file)
@@ -125,9 +125,6 @@ struct _GtkAspell
 
        ContCheckFunc    continue_check; 
 
-       GtkWidget       *config_menu;
-       GtkWidget       *popup_config_menu;
-       GtkWidget       *sug_menu;
        GtkWidget       *replace_entry;
        GtkWidget       *parent_window;
 
@@ -159,10 +156,13 @@ static void entry_delete_cb                       (GtkTextBuffer  *textbuf,
                                                 GtkTextIter    *startiter,
                                                 GtkTextIter    *enditer,
                                                 GtkAspell      *gtkaspell);
-static gint button_press_intercept_cb          (GtkTextView    *gtktext,
+/*static gint button_press_intercept_cb                (GtkTextView    *gtktext,
                                                 GdkEvent       *e, 
                                                 GtkAspell      *gtkaspell);
-
+*/
+static void button_press_intercept_cb(GtkTextView *gtktext,
+                       GtkMenu *menu, GtkAspell *gtkaspell);
+                       
 /* Checker creation */
 static GtkAspeller* gtkaspeller_new            (Dictionary     *dict);
 static GtkAspeller* gtkaspeller_real_new       (Dictionary     *dict);
@@ -203,20 +203,18 @@ static void toggle_check_while_typing_cb  (GtkWidget      *w,
                                                 gpointer        data);
 
 /* Menu creation */
-static void popup_menu                         (GtkAspell      *gtkaspell, 
-                                                GdkEventButton *eb);
-static GtkMenu*        make_sug_menu                   (GtkAspell      *gtkaspell);
-static void populate_submenu                   (GtkAspell      *gtkaspell, 
-                                                GtkWidget      *menu);
-static GtkMenu*        make_config_menu                (GtkAspell      *gtkaspell);
+static GSList* make_sug_menu                   (GtkAspell      *gtkaspell);
+static GSList * populate_submenu               (GtkAspell      *gtkaspell);
+static GSList* make_config_menu                (GtkAspell      *gtkaspell);
 static void set_menu_pos                       (GtkMenu        *menu, 
                                                 gint           *x, 
                                                 gint           *y, 
                                                 gboolean       *push_in,
                                                 gpointer        data);
 /* Other menu callbacks */
-static gboolean cancel_menu_cb                 (GtkMenuShell   *w,
-                                                gpointer        data);
+static gboolean aspell_key_pressed             (GtkWidget *widget,
+                                                GdkEventKey *event,
+                                                GtkAspell *gtkaspell);
 static void change_dict_cb                     (GtkWidget      *w, 
                                                 GtkAspell      *gtkaspell);
 static void switch_to_alternate_cb             (GtkWidget      *w, 
@@ -411,9 +409,6 @@ GtkAspell *gtkaspell_new(const gchar *dictionary_path,
        gtkaspell->misspelled         = -1;
        gtkaspell->check_while_typing = check_while_typing;
        gtkaspell->continue_check     = NULL;
-       gtkaspell->config_menu        = NULL;
-       gtkaspell->popup_config_menu  = NULL;
-       gtkaspell->sug_menu           = NULL;
        gtkaspell->replace_entry      = NULL;
        gtkaspell->gtktext            = gtktext;
        gtkaspell->default_sug_mode   = ASPELL_FASTMODE;
@@ -428,9 +423,11 @@ GtkAspell *gtkaspell_new(const gchar *dictionary_path,
                               G_CALLBACK(entry_insert_cb), gtkaspell);
        g_signal_connect_after(G_OBJECT(buffer), "delete-range",
                               G_CALLBACK(entry_delete_cb), gtkaspell);
-       g_signal_connect(G_OBJECT(gtktext), "button-press-event",
+       /*g_signal_connect(G_OBJECT(gtktext), "button-press-event",
                         G_CALLBACK(button_press_intercept_cb),
-                        gtkaspell);
+                        gtkaspell);*/
+       g_signal_connect(G_OBJECT(gtktext), "populate-popup",
+                        G_CALLBACK(button_press_intercept_cb), gtkaspell);
        
        debug_print("Aspell: created gtkaspell %0x\n", (guint) gtkaspell);
 
@@ -458,15 +455,6 @@ void gtkaspell_delete(GtkAspell *gtkaspell)
        if (gtkaspell->use_alternate && gtkaspell->alternate_speller)
                gtkaspeller_delete(gtkaspell->alternate_speller);
 
-       if (gtkaspell->sug_menu)
-               gtk_widget_destroy(gtkaspell->sug_menu);
-
-       if (gtkaspell->popup_config_menu)
-               gtk_widget_destroy(gtkaspell->popup_config_menu);
-
-       if (gtkaspell->config_menu)
-               gtk_widget_destroy(gtkaspell->config_menu);
-
        if (gtkaspell->suggestions_list)
                free_suggestions_list(gtkaspell);
 
@@ -542,54 +530,52 @@ static void entry_delete_cb(GtkTextBuffer *textbuf,
        /* gtk_editable_select_region(GTK_EDITABLE(gtktext), origpos, origpos); */
 }
 
-/* ok, this is pretty wacky:
- * we need to let the right-mouse-click go through, so it moves the cursor,
- * but we *can't* let it go through, because GtkText interprets rightclicks as
- * weird selection modifiers.
- *
- * so what do we do?  forge rightclicks as leftclicks, then popup the menu.
- * HACK HACK HACK.
- */
-static gint button_press_intercept_cb(GtkTextView *gtktext,
-                                     GdkEvent *e, 
-                                     GtkAspell *gtkaspell)
+static void button_press_intercept_cb(GtkTextView *gtktext,
+                       GtkMenu *menu, GtkAspell *gtkaspell)
 {
-       GdkEventButton *eb;
-       gboolean retval;
+       GtkMenuItem *menuitem;
+       GSList *spell_menu = NULL;
+       GSList *items;
+       gboolean suggest = FALSE;
 
-       g_return_val_if_fail(gtkaspell->gtkaspeller->checker, FALSE);
+       menuitem = GTK_MENU_ITEM(gtk_separator_menu_item_new());
+       gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), GTK_WIDGET(menuitem));
+       gtk_widget_show(GTK_WIDGET(menuitem));
 
-       if (e->type != GDK_BUTTON_PRESS) 
-               return FALSE;
-       eb = (GdkEventButton*) e;
+       gtktext = gtkaspell->gtktext;
 
-       if (eb->button != 3) 
-               return FALSE;
+       gtkaspell->orig_pos = get_textview_buffer_offset(gtktext);
+
+       if (check_at(gtkaspell, gtkaspell->orig_pos)) {
+
+               set_textview_buffer_offset(gtktext, gtkaspell->orig_pos);
 
-        g_signal_handlers_block_by_func(G_OBJECT(gtktext),
-                                       G_CALLBACK(button_press_intercept_cb), 
-                                       gtkaspell);
-       g_signal_emit_by_name(G_OBJECT(gtktext), "button-release-event",
-                             e, &retval);
+               if (misspelled_suggest(gtkaspell, gtkaspell->theword)) {
+                       spell_menu = make_sug_menu(gtkaspell);
+                       suggest = TRUE;
+               }
+       } else
+               set_textview_buffer_offset(gtktext, gtkaspell->orig_pos);
 
-       /* forge the leftclick */
-       eb->button = 1;
+       if (!spell_menu) 
+               spell_menu = make_config_menu(gtkaspell);
        
-       g_signal_emit_by_name(G_OBJECT(gtktext), "button-press-event",
-                             e, &retval);
-       g_signal_emit_by_name(G_OBJECT(gtktext), "button-release-event",
-                             e, &retval);
-       g_signal_handlers_unblock_by_func(G_OBJECT(gtktext),
-                                         G_CALLBACK(button_press_intercept_cb), 
-                                          gtkaspell);
-       g_signal_stop_emission_by_name(G_OBJECT(gtktext), "button-press-event");
-    
-       /* now do the menu wackiness */
-       popup_menu(gtkaspell, eb);
-       gtk_grab_remove(GTK_WIDGET(gtktext));
-       return FALSE;
-}
+       spell_menu = g_slist_reverse(spell_menu);
+       for (items = spell_menu;
+            items; items = items->next) {
+               menuitem = GTK_MENU_ITEM(items->data);
+               gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), GTK_WIDGET(menuitem));
+               gtk_widget_show(GTK_WIDGET(menuitem));
+       }
+       g_slist_free(spell_menu);
+       
+       if (suggest)
+               g_signal_connect(G_OBJECT(menu),
+                       "key_press_event",
+                       G_CALLBACK(aspell_key_pressed), gtkaspell);
+
 
+}
 /* Checker creation */
 static GtkAspeller *gtkaspeller_new(Dictionary *dictionary)
 {
@@ -815,9 +801,6 @@ static void set_sug_mode_cb(GtkMenuItem *w, GtkAspell *gtkaspell)
        
        set_real_sug_mode(gtkaspell, themode);
        g_free(themode);
-
-       if (gtkaspell->config_menu)
-               populate_submenu(gtkaspell, gtkaspell->config_menu);
 }
 
 static void set_real_sug_mode(GtkAspell *gtkaspell, const char *themode)
@@ -1065,6 +1048,7 @@ static gboolean check_at(GtkAspell *gtkaspell, gint from_pos)
        if (!get_word_from_pos(gtkaspell, from_pos, buf, sizeof(buf), 
                               &start, &end))
                return FALSE;
+
        if (misspelled_test(gtkaspell, buf)) {
                strncpy(gtkaspell->theword, buf, GTKASPELLWORDSIZE - 1);
                gtkaspell->theword[GTKASPELLWORDSIZE - 1] = 0;
@@ -1114,7 +1098,8 @@ static gboolean check_next_prev(GtkAspell *gtkaspell, gboolean forward)
                        pos += direc;
        }
        if (misspelled) {
-               GtkMenu *menu = NULL;
+               GSList *list, *cur;
+               GtkWidget *menu;
                misspelled_suggest(gtkaspell, gtkaspell->theword);
 
                if (forward)
@@ -1131,12 +1116,20 @@ static gboolean check_next_prev(GtkAspell *gtkaspell, gboolean forward)
                while (gtk_events_pending ())
                        gtk_main_iteration ();
 
-               menu = make_sug_menu(gtkaspell);
-               gtk_menu_popup(menu, NULL, NULL,
+               list = make_sug_menu(gtkaspell);
+               menu = gtk_menu_new();
+               for (cur = list; cur; cur = cur->next)
+                       gtk_menu_append(menu, GTK_WIDGET(cur->data));
+               g_slist_free(list);
+               gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
                                set_menu_pos, gtkaspell, 0, GDK_CURRENT_TIME);
                g_signal_connect(G_OBJECT(menu), "deactivate",
                                         G_CALLBACK(destroy_menu), 
                                         gtkaspell);
+               g_signal_connect(G_OBJECT(menu),
+                       "key_press_event",
+                       G_CALLBACK(aspell_key_pressed), gtkaspell);
+
 
        } else {
                reset_theword_data(gtkaspell);
@@ -1422,19 +1415,27 @@ static void check_with_alternate_cb(GtkWidget *w, gpointer data)
                gtkaspell->misspelled = misspelled;
 
                if (gtkaspell->misspelled) {
-                       GtkMenu *menu;
+                       GtkWidget *menu;
+                       GSList *list, *cur;
                        misspelled_suggest(gtkaspell, gtkaspell->theword);
 
                        set_textview_buffer_offset(gtkaspell->gtktext,
                                            gtkaspell->end_pos);
 
-                       menu = make_sug_menu(gtkaspell);
-                       gtk_menu_popup(menu, NULL, NULL,
+                       list = make_sug_menu(gtkaspell);
+                       menu = gtk_menu_new();
+                       for (cur = list; cur; cur = cur->next)
+                               gtk_menu_append(menu, GTK_WIDGET(cur->data));
+                       g_slist_free(list);
+                       gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
                                       set_menu_pos, gtkaspell, 0,
                                       GDK_CURRENT_TIME);
                        g_signal_connect(G_OBJECT(menu), "deactivate",
                                         G_CALLBACK(destroy_menu), 
                                         gtkaspell);
+                       g_signal_connect(G_OBJECT(menu),
+                               "key_press_event",
+                               G_CALLBACK(aspell_key_pressed), gtkaspell);
                        return;
                }
        } else
@@ -1601,9 +1602,6 @@ static void toggle_check_while_typing_cb(GtkWidget *w, gpointer data)
 
        if (!gtkaspell->check_while_typing)
                gtkaspell_uncheck_all(gtkaspell);
-
-       if (gtkaspell->config_menu)
-               populate_submenu(gtkaspell, gtkaspell->config_menu);
 }
 
 static GSList *create_empty_dictionary_list(void)
@@ -1702,6 +1700,7 @@ void gtkaspell_free_dictionary_list(GSList *list)
        g_slist_free(list);
 }
 
+/* FIXME */
 GtkWidget *gtkaspell_dictionary_option_menu_new(const gchar *aspell_path)
 {
        GSList *dict_list, *tmp;
@@ -1779,6 +1778,7 @@ gint gtkaspell_set_dictionary_menu_active_item(GtkWidget *menu,
        return 0;
 }
 
+/* FIXME */
 GtkWidget *gtkaspell_sugmode_option_menu_new(gint sugmode)
 {
        GtkWidget *menu;
@@ -1841,9 +1841,6 @@ static void use_alternate_dict(GtkAspell *gtkaspell)
        tmp = gtkaspell->gtkaspeller;
        gtkaspell->gtkaspeller = gtkaspell->alternate_speller;
        gtkaspell->alternate_speller = tmp;
-
-       if (gtkaspell->config_menu)
-               populate_submenu(gtkaspell, gtkaspell->config_menu);
 }
 
 static void destroy_menu(GtkWidget *widget,
@@ -1858,43 +1855,6 @@ static void destroy_menu(GtkWidget *widget,
        }
 }
 
-static void popup_menu(GtkAspell *gtkaspell, GdkEventButton *eb) 
-{
-       GtkTextView * gtktext;
-       GtkMenu *menu = NULL;
-       
-       gtktext = gtkaspell->gtktext;
-
-       gtkaspell->orig_pos = get_textview_buffer_offset(gtktext);
-
-       if (!(eb->state & GDK_SHIFT_MASK)) {
-               if (check_at(gtkaspell, gtkaspell->orig_pos)) {
-
-                       set_textview_buffer_offset(gtktext, gtkaspell->orig_pos);
-
-                       if (misspelled_suggest(gtkaspell, gtkaspell->theword)) {
-                               menu = make_sug_menu(gtkaspell);
-                               gtk_menu_popup(menu,
-                                              NULL, NULL, NULL, NULL,
-                                              eb->button, eb->time);
-
-                               g_signal_connect(G_OBJECT(menu), "deactivate",
-                                                        G_CALLBACK(destroy_menu), 
-                                                        gtkaspell);
-                               return;
-                       }
-               } else
-                       set_textview_buffer_offset(gtktext, gtkaspell->orig_pos);
-       }
-       menu = make_config_menu(gtkaspell);
-       gtk_menu_popup(menu, NULL, NULL, NULL, NULL,
-                      eb->button, eb->time);
-
-       g_signal_connect(G_OBJECT(menu), "deactivate",
-                                G_CALLBACK(destroy_menu), 
-                                gtkaspell);
-}
-
 static gboolean aspell_key_pressed(GtkWidget *widget,
                                   GdkEventKey *event,
                                   GtkAspell *gtkaspell)
@@ -1912,22 +1872,18 @@ static gboolean aspell_key_pressed(GtkWidget *widget,
 /* make_sug_menu() - Add menus to accept this word for this session 
  * and to add it to personal dictionary 
  */
-static GtkMenu *make_sug_menu(GtkAspell *gtkaspell) 
+static GSList *make_sug_menu(GtkAspell *gtkaspell) 
 {
-       GtkWidget       *menu, *item;
+       GtkWidget       *item;
        unsigned char   *caption;
        GtkTextView     *gtktext;
        GtkAccelGroup   *accel;
        GList           *l = gtkaspell->suggestions_list;
        gchar           *utf8buf;
-
+       GSList *list = NULL;
        gtktext = gtkaspell->gtktext;
 
        accel = gtk_accel_group_new();
-       menu = gtk_menu_new(); 
-
-       if (gtkaspell->sug_menu)
-               gtk_widget_destroy(gtkaspell->sug_menu);
 
        if (gtkaspell->accel_group) {
                gtk_window_remove_accel_group(GTK_WINDOW(gtkaspell->parent_window), 
@@ -1935,11 +1891,6 @@ static GtkMenu *make_sug_menu(GtkAspell *gtkaspell)
                gtkaspell->accel_group = NULL;
        }
 
-       gtkaspell->sug_menu = menu;     
-
-       g_signal_connect(G_OBJECT(menu), "cancel",
-                        G_CALLBACK(cancel_menu_cb), gtkaspell);
-
        utf8buf  = conv_codeset_strdup((unsigned char*)l->data,
                                conv_get_locale_charset_str(),
                                CS_UTF_8);
@@ -1949,17 +1900,17 @@ static GtkMenu *make_sug_menu(GtkAspell *gtkaspell)
        item = gtk_menu_item_new_with_label(caption);
        g_free(utf8buf);
        gtk_widget_show(item);
-       gtk_menu_append(GTK_MENU(menu), item);
+       list = g_slist_append(list, item);
        gtk_misc_set_alignment(GTK_MISC(GTK_BIN(item)->child), 0.5, 0.5);
        g_free(caption);
 
        item = gtk_menu_item_new();
        gtk_widget_show(item);
-       gtk_menu_append(GTK_MENU(menu), item);
+       list = g_slist_append(list, item);
 
        item = gtk_menu_item_new_with_label(_("Accept in this session"));
        gtk_widget_show(item);
-       gtk_menu_append(GTK_MENU(menu), item);
+       list = g_slist_append(list, item);
         g_signal_connect(G_OBJECT(item), "activate",
                         G_CALLBACK(add_word_to_session_cb), 
                         gtkaspell);
@@ -1969,7 +1920,7 @@ static GtkMenu *make_sug_menu(GtkAspell *gtkaspell)
 
        item = gtk_menu_item_new_with_label(_("Add to personal dictionary"));
        gtk_widget_show(item);
-       gtk_menu_append(GTK_MENU(menu), item);
+       list = g_slist_append(list, item);
         g_signal_connect(G_OBJECT(item), "activate",
                         G_CALLBACK(add_word_to_personal_cb), 
                         gtkaspell);
@@ -1979,7 +1930,7 @@ static GtkMenu *make_sug_menu(GtkAspell *gtkaspell)
 
         item = gtk_menu_item_new_with_label(_("Replace with..."));
        gtk_widget_show(item);
-       gtk_menu_append(GTK_MENU(menu), item);
+       list = g_slist_append(list, item);
         g_signal_connect(G_OBJECT(item), "activate",
                         G_CALLBACK(replace_with_create_dialog_cb), 
                         gtkaspell);
@@ -1995,7 +1946,7 @@ static GtkMenu *make_sug_menu(GtkAspell *gtkaspell)
                item = gtk_menu_item_new_with_label(caption);
                g_free(caption);
                gtk_widget_show(item);
-               gtk_menu_append(GTK_MENU(menu), item);
+               list = g_slist_append(list, item);
                g_signal_connect(G_OBJECT(item), "activate",
                                 G_CALLBACK(check_with_alternate_cb),
                                 gtkaspell);
@@ -2008,15 +1959,15 @@ static GtkMenu *make_sug_menu(GtkAspell *gtkaspell)
 
        item = gtk_menu_item_new();
         gtk_widget_show(item);
-        gtk_menu_append(GTK_MENU(menu), item);
+        list = g_slist_append(list, item);
 
        l = l->next;
         if (l == NULL) {
                item = gtk_menu_item_new_with_label(_("(no suggestions)"));
                gtk_widget_show(item);
-               gtk_menu_append(GTK_MENU(menu), item);
+               list = g_slist_append(list, item);
         } else {
-               GtkWidget *curmenu = menu;
+               GtkWidget *curmenu = NULL;
                gint count = 0;
                
                do {
@@ -2025,7 +1976,10 @@ static GtkMenu *make_sug_menu(GtkAspell *gtkaspell)
 
                                item = gtk_menu_item_new_with_label(_("More..."));
                                gtk_widget_show(item);
-                               gtk_menu_append(GTK_MENU(curmenu), item);
+                               if (curmenu)
+                                       gtk_menu_append(GTK_MENU(curmenu), item);
+                               else 
+                                       list = g_slist_append(list, item);
 
                                curmenu = gtk_menu_new();
                                gtk_menu_item_set_submenu(GTK_MENU_ITEM(item),
@@ -2038,12 +1992,12 @@ static GtkMenu *make_sug_menu(GtkAspell *gtkaspell)
                        item = gtk_menu_item_new_with_label(utf8buf);
                        g_free(utf8buf);
                        gtk_widget_show(item);
-                       gtk_menu_append(GTK_MENU(curmenu), item);
+                       list = g_slist_append(list, item);
                        g_signal_connect(G_OBJECT(item), "activate",
                                         G_CALLBACK(replace_word_cb),
                                         gtkaspell);
 
-                       if (curmenu == menu && count < MENUCOUNT) {
+                       if (curmenu == NULL && count < MENUCOUNT) {
                                gtk_widget_add_accelerator(item, "activate",
                                                           accel,
                                                           GDK_A + count, 0,
@@ -2066,39 +2020,27 @@ static GtkMenu *make_sug_menu(GtkAspell *gtkaspell)
                 accel);
        gtkaspell->accel_group = accel;
 
-       g_signal_connect(G_OBJECT(menu),
-                       "key_press_event",
-                       G_CALLBACK(aspell_key_pressed), gtkaspell);
-       
-       return GTK_MENU(menu);
+       return list;
 }
 
-static void populate_submenu(GtkAspell *gtkaspell, GtkWidget *menu)
+static GSList *populate_submenu(GtkAspell *gtkaspell)
 {
        GtkWidget *item, *submenu;
        gchar *dictname;
        GtkAspeller *gtkaspeller = gtkaspell->gtkaspeller;
+       GSList *list = NULL;
 
-       if (GTK_MENU_SHELL(menu)->children) {
-               GList *amenu, *alist;
-               for (amenu = (GTK_MENU_SHELL(menu)->children); amenu; ) {
-                       alist = amenu->next;
-                       gtk_widget_destroy(GTK_WIDGET(amenu->data));
-                       amenu = alist;
-               }
-       }
-       
        dictname = g_strdup_printf(_("Dictionary: %s"),
                                   gtkaspeller->dictionary->dictname);
        item = gtk_menu_item_new_with_label(dictname);
        gtk_misc_set_alignment(GTK_MISC(GTK_BIN(item)->child), 0.5, 0.5);
        g_free(dictname);
        gtk_widget_show(item);
-       gtk_menu_append(GTK_MENU(menu), item);
+       list = g_slist_append(list, item);
 
        item = gtk_menu_item_new();
         gtk_widget_show(item);
-        gtk_menu_append(GTK_MENU(menu), item);
+        list = g_slist_append(list, item);
                
        if (gtkaspell->use_alternate && gtkaspell->alternate_speller) {
                dictname = g_strdup_printf(_("Use alternate (%s)"), 
@@ -2109,7 +2051,7 @@ static void populate_submenu(GtkAspell *gtkaspell, GtkWidget *menu)
                                 G_CALLBACK(switch_to_alternate_cb),
                                 gtkaspell);
                gtk_widget_show(item);
-               gtk_menu_append(GTK_MENU(menu), item);
+               list = g_slist_append(list, item);
        }
 
        item = gtk_check_menu_item_new_with_label(_("Fast Mode"));
@@ -2121,7 +2063,7 @@ static void populate_submenu(GtkAspell *gtkaspell, GtkWidget *menu)
                                 G_CALLBACK(set_sug_mode_cb),
                                 gtkaspell);
        gtk_widget_show(item);
-       gtk_menu_append(GTK_MENU(menu), item);
+       list = g_slist_append(list, item);
 
        item = gtk_check_menu_item_new_with_label(_("Normal Mode"));
        if (gtkaspell->gtkaspeller->sug_mode == ASPELL_NORMALMODE) {
@@ -2132,7 +2074,7 @@ static void populate_submenu(GtkAspell *gtkaspell, GtkWidget *menu)
                                 G_CALLBACK(set_sug_mode_cb),
                                 gtkaspell);
        gtk_widget_show(item);
-       gtk_menu_append(GTK_MENU(menu),item);
+       list = g_slist_append(list, item);
 
        item = gtk_check_menu_item_new_with_label(_("Bad Spellers Mode"));
        if (gtkaspell->gtkaspeller->sug_mode == ASPELL_BADSPELLERMODE) {
@@ -2143,11 +2085,11 @@ static void populate_submenu(GtkAspell *gtkaspell, GtkWidget *menu)
                                 G_CALLBACK(set_sug_mode_cb),
                                 gtkaspell);
        gtk_widget_show(item);
-       gtk_menu_append(GTK_MENU(menu), item);
+       list = g_slist_append(list, item);
        
        item = gtk_menu_item_new();
         gtk_widget_show(item);
-        gtk_menu_append(GTK_MENU(menu), item);
+        list = g_slist_append(list, item);
        
        item = gtk_check_menu_item_new_with_label(_("Check while typing"));
        if (gtkaspell->check_while_typing)
@@ -2158,17 +2100,17 @@ static void populate_submenu(GtkAspell *gtkaspell, GtkWidget *menu)
                         G_CALLBACK(toggle_check_while_typing_cb),
                         gtkaspell);
        gtk_widget_show(item);
-       gtk_menu_append(GTK_MENU(menu), item);
+       list = g_slist_append(list, item);
 
        item = gtk_menu_item_new();
         gtk_widget_show(item);
-        gtk_menu_append(GTK_MENU(menu), item);
+        list = g_slist_append(list, item);
 
        submenu = gtk_menu_new();
         item = gtk_menu_item_new_with_label(_("Change dictionary"));
         gtk_menu_item_set_submenu(GTK_MENU_ITEM(item),submenu);
         gtk_widget_show(item);
-        gtk_menu_append(GTK_MENU(menu), item);
+        list = g_slist_append(list, item);
 
        /* Dict list */
         if (gtkaspellcheckers->dictionary_list == NULL)
@@ -2216,32 +2158,12 @@ static void populate_submenu(GtkAspell *gtkaspell, GtkWidget *menu)
                        count++;
                }
         }  
+       return list;
 }
 
-static GtkMenu *make_config_menu(GtkAspell *gtkaspell)
-{
-       if (!gtkaspell->popup_config_menu)
-               gtkaspell->popup_config_menu = gtk_menu_new();
-
-       debug_print("Aspell: creating/using popup_config_menu %0x\n", 
-                       (guint) gtkaspell->popup_config_menu);
-       populate_submenu(gtkaspell, gtkaspell->popup_config_menu);
-
-        return GTK_MENU(gtkaspell->popup_config_menu);
-}
-
-void gtkaspell_populate_submenu(GtkAspell *gtkaspell, GtkWidget *menuitem)
+static GSList *make_config_menu(GtkAspell *gtkaspell)
 {
-       GtkWidget *menu;
-
-       menu = GTK_WIDGET(GTK_MENU_ITEM(menuitem)->submenu);
-       
-       debug_print("Aspell: using config menu %0x\n", 
-                       (guint) gtkaspell->popup_config_menu);
-       populate_submenu(gtkaspell, menu);
-       
-       gtkaspell->config_menu = menu;
-       
+       return populate_submenu(gtkaspell);
 }
 
 static void set_menu_pos(GtkMenu *menu, gint *x, gint *y, 
@@ -2291,16 +2213,6 @@ static void set_menu_pos(GtkMenu *menu, gint *x, gint *y,
 
 /* Menu call backs */
 
-static gboolean cancel_menu_cb(GtkMenuShell *w, gpointer data)
-{
-       GtkAspell *gtkaspell = (GtkAspell *) data;
-
-       gtkaspell->continue_check = NULL;
-       set_point_continue(gtkaspell);
-
-       return FALSE;
-}
-
 gboolean gtkaspell_change_dict(GtkAspell *gtkaspell, const gchar *dictionary)
 {
        Dictionary      *dict;       
@@ -2347,9 +2259,6 @@ gboolean gtkaspell_change_dict(GtkAspell *gtkaspell, const gchar *dictionary)
        
        dictionary_delete(dict);
 
-       if (gtkaspell->config_menu)
-               populate_submenu(gtkaspell, gtkaspell->config_menu);
-
        return TRUE;    
 }
 
index e5cfa05..ecee9f1 100644 (file)
@@ -83,9 +83,6 @@ void          gtkaspell_check_all             (GtkAspell *gtkaspell);
 void           gtkaspell_uncheck_all           (GtkAspell *gtkaspell);
 void           gtkaspell_highlight_all         (GtkAspell *gtkaspell);
 
-void           gtkaspell_populate_submenu      (GtkAspell *gtkaspell, 
-                                                GtkWidget *menuitem);
-
 GtkWidget*     gtkaspell_dictionary_option_menu_new    (const gchar *aspell_path);
 
 gchar*         gtkaspell_get_dictionary_menu_active_item