diff --git a/ChangeLog b/ChangeLog index fea6d22cdd0796d13b23e5a12dc3614958ff922d..212b03bdd357235bf71531d61d1e42b9504e9468 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +2008-04-18 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> + + * Add command line option "--ignore-plugin" to start the stand-alone + application even if the panel plugin is loaded. + * Add new languages Chinese and Italian which are newly supported + by dict.leo.org. + * Rewrite of the web search code to be more flexible to use and to + simplify the code. + Add two other dictionary services: + Dictionary.com and TheFreeDictionary.com. + + +2008-04-17 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> + + * Unify application name to "Xfce4 Dictionary". + * Remove Help button from preferences dialog as there is no help + available at all. + * Disable conversion into ISO-8859-15 of search text when using + dict.leo.org, seems not necessary anymore. + * Fix problems with preferences dialog callback if panel plugin is + loaded. + * Fix minor panel button sizing issues (make it a little wider on + horizontal panel, a little flatter on vertical panels). + + 2008-04-15 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de> * Update Readme. diff --git a/lib/common.c b/lib/common.c index b2076de1ee32a5944c8b797a2b9007d5b9eebd44..4f66d38a1895d9b18bdf0dc13079fd573a446ec9 100644 --- a/lib/common.c +++ b/lib/common.c @@ -43,7 +43,6 @@ - /* TODO make me UTF-8 safe */ static gint str_pos(const gchar *haystack, const gchar *needle) { @@ -163,58 +162,10 @@ gboolean dict_open_browser(DictData *dd, const gchar *uri) static gboolean start_web_query(DictData *dd, const gchar *word) { - gboolean use_leo = FALSE; gboolean success = TRUE; - gchar *uri, *base; + gchar *uri; - switch (dd->web_mode) - { - case WEBMODE_LEO_GERENG: - { - base = "http://dict.leo.org/ende?search={word}"; - use_leo = TRUE; - break; - } - case WEBMODE_LEO_GERFRE: - { - base = "http://dict.leo.org/frde?search={word}"; - use_leo = TRUE; - break; - } - case WEBMODE_LEO_GERSPA: - { - base = "http://dict.leo.org/esde?search={word}"; - use_leo = TRUE; - break; - } - case WEBMODE_LEO_GERITA: - { - base = "http://dict.leo.org/itde?search={word}"; - use_leo = TRUE; - break; - } - case WEBMODE_LEO_GERCHI: - { - base = "http://dict.leo.org/chde?search={word}"; - use_leo = TRUE; - break; - } - default: base = dd->web_url; - } -#if 0 /* for some reason this isn't necessary anymore */ - if (use_leo) - { - /* convert the text into ISO-8869-15 because dict.leo.org expects it ;-( */ - gchar *tmp = g_convert(dd->searched_word, -1, - "ISO-8859-15", "UTF-8", NULL, NULL, NULL); - if (tmp != NULL) - { - g_free(dd->searched_word); - dd->searched_word = tmp; - } - } -#endif - uri = str_replace(g_strdup(base), "{word}", dd->searched_word); + uri = str_replace(g_strdup(dd->web_url), "{word}", dd->searched_word); if (! dict_open_browser(dd, uri)) { xfce_err(_("Browser could not be opened. Please check your preferences.")); @@ -309,7 +260,6 @@ void dict_read_rc_file(DictData *dd) XfceRc *rc; gint mode_in_use = DICTMODE_DICT; gint mode_default = DICTMODE_LAST_USED; - gint webmode = WEBMODE_LEO_GERENG; gint port = 2628; gint panel_entry_size = 120; gboolean show_panel_entry = FALSE; @@ -323,7 +273,6 @@ void dict_read_rc_file(DictData *dd) { mode_in_use = xfce_rc_read_int_entry(rc, "mode_in_use", mode_in_use); mode_default = xfce_rc_read_int_entry(rc, "mode_default", mode_default); - webmode = xfce_rc_read_int_entry(rc, "web_mode", webmode); weburl = xfce_rc_read_entry(rc, "web_url", weburl); show_panel_entry = xfce_rc_read_bool_entry(rc, "show_panel_entry", show_panel_entry); panel_entry_size = xfce_rc_read_int_entry(rc, "panel_entry_size", panel_entry_size); @@ -342,7 +291,6 @@ void dict_read_rc_file(DictData *dd) else dd->mode_in_use = dd->mode_default; - dd->web_mode = webmode; dd->web_url = g_strdup(weburl); dd->show_panel_entry = show_panel_entry; dd->panel_entry_size = panel_entry_size; @@ -362,7 +310,6 @@ void dict_write_rc_file(DictData *dd) { xfce_rc_write_int_entry(rc, "mode_in_use", dd->mode_in_use); xfce_rc_write_int_entry(rc, "mode_default", dd->mode_default); - xfce_rc_write_int_entry(rc, "web_mode", dd->web_mode); if (dd->web_url != NULL) xfce_rc_write_entry(rc, "web_url", dd->web_url); xfce_rc_write_bool_entry(rc, "show_panel_entry", dd->show_panel_entry); @@ -435,4 +382,3 @@ DictData *dict_create_dictdata() return dd; } - diff --git a/lib/common.h b/lib/common.h index bdf71f1b542f2b7876f1e6591b87199d786331ae..6950e9dd60eb25a9485ad8fc139649a08fd78dad 100644 --- a/lib/common.h +++ b/lib/common.h @@ -43,30 +43,17 @@ typedef enum DICTMODE_LAST_USED } dict_mode_t; -typedef enum -{ - WEBMODE_OTHER = 0, - WEBMODE_LEO_GERENG, - WEBMODE_LEO_GERFRE, - WEBMODE_LEO_GERSPA, - WEBMODE_LEO_GERITA, - WEBMODE_LEO_GERCHI -} web_mode_t; - - enum { NO_CONNECTION, NO_ERROR }; - typedef struct { /* settings */ dict_mode_t mode_in_use; dict_mode_t mode_default; - web_mode_t web_mode; gboolean show_panel_entry; gint panel_entry_size; @@ -100,8 +87,6 @@ typedef struct GtkTextBuffer *main_textbuffer; GtkTextTag *main_boldtag; GdkPixbuf *icon; - - GtkWidget *web_entry_box; } DictData; diff --git a/lib/prefs.c b/lib/prefs.c index 73b851b7b4e4ffb3e2061b0f989873d16976a735..b037b3c7dbed35124ddcc268ad96dd961aa596a3 100644 --- a/lib/prefs.c +++ b/lib/prefs.c @@ -30,6 +30,12 @@ #include "dictd.h" +typedef struct +{ + gchar *label; + gchar *url; +} web_dict_t; + static void show_panel_entry_toggled(GtkToggleButton *tb, DictData *dd) { @@ -43,20 +49,6 @@ static void show_panel_entry_toggled(GtkToggleButton *tb, DictData *dd) } -static void web_search_type_changed(GtkRadioButton *radiobutton, DictData *dd) -{ - if (! gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radiobutton))) - return; /* ignore the toggled event when a button is deselected */ - - dd->web_mode = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(radiobutton), "type")); - - gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(dd->web_entry_box), "web_entry"), - (dd->web_mode == WEBMODE_OTHER)); - gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(dd->web_entry_box), "web_entry_label"), - (dd->web_mode == WEBMODE_OTHER)); -} - - static void search_method_changed(GtkRadioButton *radiobutton, DictData *dd) { if (! gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radiobutton))) @@ -124,12 +116,9 @@ void dict_prefs_dialog_response(GtkWidget *dlg, gint response, DictData *dd) dd->dictionary = tmp; /* MODE WEB */ - if (dd->web_mode == WEBMODE_OTHER) - { - g_free(dd->web_url); - dd->web_url = g_strdup(gtk_entry_get_text( + g_free(dd->web_url); + dd->web_url = g_strdup(gtk_entry_get_text( GTK_ENTRY(g_object_get_data(G_OBJECT(dlg), "web_entry")))); - } /* MODE SPELL */ tmp = gtk_combo_box_get_active_text( @@ -159,13 +148,63 @@ void dict_prefs_dialog_response(GtkWidget *dlg, gint response, DictData *dd) } +static void web_dict_button_clicked(GtkButton *button, gpointer user_data) +{ + const gchar *url = user_data; + GtkEntry *entry = g_object_get_data(G_OBJECT(button), "web_entry"); + + if (entry != NULL && url != NULL) + gtk_entry_set_text(entry, url); +} + + +static GtkWidget *create_web_dicts_table(GtkWidget *entry) +{ + gint i; + gint offset; + GtkWidget *table, *button; + static web_dict_t web_dicts[] = + { + { N_("dict.leo.org - German <-> English"), "http://dict.leo.org/ende?search={word}" }, + { N_("dict.leo.org - German <-> French"), "http://dict.leo.org/frde?search={word}" }, + { N_("dict.leo.org - German <-> Spanish"), "http://dict.leo.org/esde?search={word}" }, + { N_("dict.leo.org - German <-> Italian"), "http://dict.leo.org/itde?search={word}" }, + { N_("dict.leo.org - German <-> Chinese"), "http://dict.leo.org/chde?search={word}" }, + { N_("Dictionary.com"), "http://dictionary.reference.com/search?db=dictionary&q={word}" }, + { N_("TheFreeDictionary.com"), "http://www.thefreedictionary.com/_/partner.aspx?Word={word}&Set=www&mode=w" }, + { N_("Clear"), "" }, + { NULL, NULL } + }; + + table = gtk_table_new(4, 2, FALSE); + gtk_table_set_row_spacings(GTK_TABLE(table), 2); + gtk_table_set_col_spacings(GTK_TABLE(table), 2); + + for (i = 0; web_dicts[i].label != NULL; i++) + { + offset = i % 2; + button = gtk_button_new_with_label(web_dicts[i].label); + g_signal_connect(button, "clicked", G_CALLBACK(web_dict_button_clicked), web_dicts[i].url); + g_object_set_data(G_OBJECT(button), "web_entry", entry); + gtk_widget_show(button); + + gtk_table_attach(GTK_TABLE(table), + button, offset, 1 + offset, i - offset, i + 1 - offset, + (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), + (GtkAttachOptions) (0), 5, 5); + } + + return table; +} + + GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) { GtkWidget *dialog, *inner_vbox, *notebook, *notebook_vbox; GtkWidget *label1, *label2, *label3; dialog = xfce_titled_dialog_new_with_buttons( - _("Xfce Dictionary"), GTK_WINDOW(parent), + _("Xfce4 Dictionary"), GTK_WINDOW(parent), GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, GTK_STOCK_CLOSE, GTK_RESPONSE_OK, NULL); @@ -183,7 +222,7 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) /* * Page: general */ -#define PAGE_GENERAL /* only navigation in Geany's symbol list ;-) */ +#define PAGE_GENERAL /* only for navigation in Geany's symbol list ;-) */ { GtkWidget *radio_button, *label; GSList *search_method; @@ -286,7 +325,7 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) /* * Page: DICTD */ -#define PAGE_DICTD /* only navigation in Geany's symbol list ;-) */ +#define PAGE_DICTD /* only for navigation in Geany's symbol list ;-) */ { GtkWidget *table, *button_get_list, *server_entry, *port_spinner, *dict_combo; @@ -393,10 +432,9 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) /* * Page: WEB */ -#define PAGE_WEB /* only navigation in Geany's symbol list ;-) */ +#define PAGE_WEB /* only for navigation in Geany's symbol list ;-) */ { - GtkWidget *radio_button, *label, *web_entry_label, *web_entry; - GSList *web_type; + GtkWidget *label, *web_entry_label, *web_entry, *web_entry_box, *web_dicts_table; notebook_vbox = gtk_vbox_new(FALSE, 5); gtk_widget_show(notebook_vbox); @@ -410,65 +448,6 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) gtk_widget_show(label); gtk_box_pack_start(GTK_BOX(inner_vbox), label, FALSE, FALSE, 0); - radio_button = gtk_radio_button_new_with_label(NULL, - _("dict.leo.org - German <-> English")); - web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_button)); - if (dd->web_mode == WEBMODE_LEO_GERENG) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button), TRUE); - gtk_widget_show(radio_button); - gtk_box_pack_start(GTK_BOX(inner_vbox), radio_button, FALSE, FALSE, 0); - g_object_set_data(G_OBJECT(radio_button), "type", GINT_TO_POINTER(WEBMODE_LEO_GERENG)); - g_signal_connect(G_OBJECT(radio_button), "toggled", G_CALLBACK(web_search_type_changed), dd); - - radio_button = gtk_radio_button_new_with_label(web_type, - _("dict.leo.org - German <-> French")); - web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_button)); - if (dd->web_mode == WEBMODE_LEO_GERFRE) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button), TRUE); - gtk_widget_show(radio_button); - gtk_box_pack_start(GTK_BOX(inner_vbox), radio_button, FALSE, FALSE, 0); - g_object_set_data(G_OBJECT(radio_button), "type", GINT_TO_POINTER(WEBMODE_LEO_GERFRE)); - g_signal_connect(G_OBJECT(radio_button), "toggled", G_CALLBACK(web_search_type_changed), dd); - - radio_button = gtk_radio_button_new_with_label(web_type, - _("dict.leo.org - German <-> Spanish")); - web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_button)); - if (dd->web_mode == WEBMODE_LEO_GERSPA) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button), TRUE); - gtk_widget_show(radio_button); - gtk_box_pack_start(GTK_BOX(inner_vbox), radio_button, FALSE, FALSE, 0); - g_object_set_data(G_OBJECT(radio_button), "type", GINT_TO_POINTER(WEBMODE_LEO_GERSPA)); - g_signal_connect(G_OBJECT(radio_button), "toggled", G_CALLBACK(web_search_type_changed), dd); - - radio_button = gtk_radio_button_new_with_label(web_type, - _("dict.leo.org - German <-> Italian")); - web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_button)); - if (dd->web_mode == WEBMODE_LEO_GERITA) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button), TRUE); - gtk_widget_show(radio_button); - gtk_box_pack_start(GTK_BOX(inner_vbox), radio_button, FALSE, FALSE, 0); - g_object_set_data(G_OBJECT(radio_button), "type", GINT_TO_POINTER(WEBMODE_LEO_GERITA)); - g_signal_connect(G_OBJECT(radio_button), "toggled", G_CALLBACK(web_search_type_changed), dd); - - radio_button = gtk_radio_button_new_with_label(web_type, - _("dict.leo.org - German <-> Chinese")); - web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_button)); - if (dd->web_mode == WEBMODE_LEO_GERCHI) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button), TRUE); - gtk_widget_show(radio_button); - gtk_box_pack_start(GTK_BOX(inner_vbox), radio_button, FALSE, FALSE, 0); - g_object_set_data(G_OBJECT(radio_button), "type", GINT_TO_POINTER(WEBMODE_LEO_GERCHI)); - g_signal_connect(G_OBJECT(radio_button), "toggled", G_CALLBACK(web_search_type_changed), dd); - - radio_button = gtk_radio_button_new_with_label(web_type, _("Use another website")); - web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_button)); - if (dd->web_mode == WEBMODE_OTHER) - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio_button), TRUE); - gtk_widget_show(radio_button); - gtk_box_pack_start(GTK_BOX(inner_vbox), radio_button, FALSE, FALSE, 0); - g_object_set_data(G_OBJECT(radio_button), "type", GINT_TO_POINTER(WEBMODE_OTHER)); - g_signal_connect(G_OBJECT(radio_button), "toggled", G_CALLBACK(web_search_type_changed), dd); - web_entry_label = gtk_label_new_with_mnemonic(_("URL:")); gtk_widget_show(web_entry_label); web_entry = gtk_entry_new(); @@ -476,31 +455,31 @@ GtkWidget *dict_prefs_dialog_show(GtkWidget *parent, DictData *dd) gtk_entry_set_text(GTK_ENTRY(web_entry), dd->web_url); gtk_widget_show(web_entry); - dd->web_entry_box = gtk_hbox_new(FALSE, 0); - gtk_widget_show(dd->web_entry_box); - gtk_box_pack_start(GTK_BOX(dd->web_entry_box), web_entry_label, FALSE, TRUE, 5); - gtk_box_pack_start(GTK_BOX(dd->web_entry_box), web_entry, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(inner_vbox), dd->web_entry_box, FALSE, FALSE, 0); + web_entry_box = gtk_hbox_new(FALSE, 0); + gtk_widget_show(web_entry_box); + + web_dicts_table = create_web_dicts_table(web_entry); + gtk_widget_show(web_dicts_table); + gtk_box_pack_start(GTK_BOX(inner_vbox), web_dicts_table, FALSE, FALSE, 0); + + gtk_box_pack_start(GTK_BOX(web_entry_box), web_entry_label, FALSE, TRUE, 5); + gtk_box_pack_start(GTK_BOX(web_entry_box), web_entry, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(inner_vbox), web_entry_box, FALSE, FALSE, 0); g_object_set_data(G_OBJECT(dialog), "web_entry", web_entry); - g_object_set_data(G_OBJECT(dd->web_entry_box), "web_entry", web_entry); - g_object_set_data(G_OBJECT(dd->web_entry_box), "web_entry_label", web_entry_label); - label1 = gtk_label_new(_("Enter an URL to a web site which offer translation services.\nUse {word} as placeholder for the searched word.")); + label1 = gtk_label_new(_("Enter an URL to a web site which offer translation or dictionary services.\nUse {word} as placeholder for the searched word.")); gtk_label_set_line_wrap(GTK_LABEL(label1), TRUE); gtk_misc_set_alignment(GTK_MISC(label1), 0, 0); gtk_widget_show(label1); gtk_box_pack_start(GTK_BOX(inner_vbox), label1, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(notebook_vbox), inner_vbox, TRUE, TRUE, 5); - - /* init the sensitive widgets */ - web_search_type_changed(GTK_RADIO_BUTTON(radio_button), dd); } /* * Page: ASPELL */ -#define PAGE_ASPELL /* only navigation in Geany's symbol list ;-) */ +#define PAGE_ASPELL /* only for navigation in Geany's symbol list ;-) */ { GtkWidget *table, *spell_entry, *spell_combo;