From enrico at xfce.org Wed Apr 2 14:21:39 2008 From: enrico at xfce.org (Enrico Troeger) Date: Wed, 2 Apr 2008 12:21:39 +0000 (UTC) Subject: [Goodies-commits] r4498 - xfce4-dict/trunk Message-ID: <20080402122139.15511F29D8@mocha.foo-projects.org> Author: enrico Date: 2008-04-02 12:21:38 +0000 (Wed, 02 Apr 2008) New Revision: 4498 Modified: xfce4-dict/trunk/configure.in.in Log: Update package name for autotools. Modified: xfce4-dict/trunk/configure.in.in =================================================================== --- xfce4-dict/trunk/configure.in.in 2008-03-31 19:27:13 UTC (rev 4497) +++ xfce4-dict/trunk/configure.in.in 2008-04-02 12:21:38 UTC (rev 4498) @@ -7,7 +7,7 @@ m4_define([dict_version], [0.3.0]) dnl init autoconf -AC_INIT([xfce4-dict-plugin], [dict_version], [goodies-dev at xfce.org]) +AC_INIT([xfce4-dict], [dict_version], [goodies-dev at xfce.org]) AC_PREREQ([2.50]) dnl init automake From enrico at xfce.org Wed Apr 2 14:22:29 2008 From: enrico at xfce.org (Enrico Troeger) Date: Wed, 2 Apr 2008 12:22:29 +0000 (UTC) Subject: [Goodies-commits] r4499 - xfce4-dict/trunk/lib Message-ID: <20080402122229.51E7EF29D8@mocha.foo-projects.org> Author: enrico Date: 2008-04-02 12:22:29 +0000 (Wed, 02 Apr 2008) New Revision: 4499 Modified: xfce4-dict/trunk/lib/aspell.c Log: Fix broken aspell search. Modified: xfce4-dict/trunk/lib/aspell.c =================================================================== --- xfce4-dict/trunk/lib/aspell.c 2008-04-02 12:21:38 UTC (rev 4498) +++ xfce4-dict/trunk/lib/aspell.c 2008-04-02 12:22:29 UTC (rev 4499) @@ -36,7 +36,7 @@ #include "gui.h" -static GIOChannel *set_up_io_channel(gint fd, GIOCondition cond, GIOFunc func, gconstpointer data) +static GIOChannel *set_up_io_channel(gint fd, GIOCondition cond, GIOFunc func, gpointer data) { GIOChannel *ioc; @@ -123,10 +123,10 @@ static gboolean iofunc_write(GIOChannel *ioc, GIOCondition cond, gpointer data) { - gsize written; + if (NZV((gchar *) data)) + g_io_channel_write_chars(ioc, (gchar *) data, -1, NULL, NULL); - if (NZV((const gchar *) data)) - g_io_channel_write_chars(ioc, (const gchar *) data, -1, &written, NULL); + g_free(data); return FALSE; } @@ -141,6 +141,7 @@ gint stderr_fd; gint stdin_fd; gchar *tts; + gchar *tts_end; if (! NZV(dd->spell_bin)) { @@ -157,13 +158,13 @@ /* TODO search only for the first word when working on a sentence, * workout a better solution */ tts = g_strdup(word); - if ((tts = strchr(word, ' ')) || - (tts = strchr(word, '-')) || - (tts = strchr(word, '_')) || - (tts = strchr(word, '.')) || - (tts = strchr(word, ','))) + if ((tts_end = strchr(word, ' ')) || + (tts_end = strchr(word, '-')) || + (tts_end = strchr(word, '_')) || + (tts_end = strchr(word, '.')) || + (tts_end = strchr(word, ','))) { - *tts = '\0'; + *tts_end = '\0'; } locale_cmd = g_locale_from_utf8(dd->spell_bin, -1, NULL, NULL, NULL); @@ -193,6 +194,6 @@ error = NULL; } - g_free(tts); + /* tts is freed in iofunc_write() */ g_strfreev(argv); } From enrico at xfce.org Wed Apr 2 15:21:39 2008 From: enrico at xfce.org (Enrico Troeger) Date: Wed, 2 Apr 2008 13:21:39 +0000 (UTC) Subject: [Goodies-commits] r4500 - in xfce4-dict/trunk: . lib panel-plugin src Message-ID: <20080402132139.7F417F29D8@mocha.foo-projects.org> Author: enrico Date: 2008-04-02 13:21:39 +0000 (Wed, 02 Apr 2008) New Revision: 4500 Removed: xfce4-dict/trunk/lib/popup_def.h Modified: xfce4-dict/trunk/ChangeLog xfce4-dict/trunk/lib/common.c xfce4-dict/trunk/lib/common.h xfce4-dict/trunk/lib/dictd.c xfce4-dict/trunk/lib/gui.c xfce4-dict/trunk/lib/prefs.c xfce4-dict/trunk/panel-plugin/xfce4-dict-plugin.c xfce4-dict/trunk/src/popup_plugin.c xfce4-dict/trunk/src/popup_plugin.h xfce4-dict/trunk/src/xfce4-dict.c Log: Show panel-only options in preferences dialog only if panel plugin is actually loaded. After clicking on the Clear button, bring the input focus back to the main entry. Add keyboard shortcuts for file menu items. Cleanup DictData struct, reorder elements and remove elements which are only used in the preferences dialog. Add search method selection to the preferences dialog, including new mode to use the search method from the last time. Add support for command line options for xfce4-dict command. Modified: xfce4-dict/trunk/ChangeLog =================================================================== --- xfce4-dict/trunk/ChangeLog 2008-04-02 12:22:29 UTC (rev 4499) +++ xfce4-dict/trunk/ChangeLog 2008-04-02 13:21:39 UTC (rev 4500) @@ -1,3 +1,19 @@ +2008-04-02 Enrico Tr?ger + + * Fix broken aspell search. + * Update package name for autotools. + * Show panel-only options in preferences dialog only if panel plugin + is actually loaded. + * After clicking on the Clear button, bring the input focus back to the + main entry. + * Add keyboard shortcuts for file menu items. + * Cleanup DictData struct, reorder elements and remove elements which + are only used in the preferences dialog. + * Add search method selection to the preferences dialog, including new + mode to use the search method from the last time. + * Add support for command line options for xfce4-dict command. + + 2008-03-31 Enrico Tr?ger * Prefix some more functions. @@ -20,7 +36,7 @@ panel plugin into a static library. Move dictd server query code into an own file for better readibility. Bump version requirement of libxfce*-libs to 4.4.0. - Add stand-alone application xfce4-dict. + Add stand-alone application xfce4-dict (replaces xfce4-dict-popup command). (not yet finished, to be continued) Modified: xfce4-dict/trunk/lib/common.c =================================================================== --- xfce4-dict/trunk/lib/common.c 2008-04-02 12:22:29 UTC (rev 4499) +++ xfce4-dict/trunk/lib/common.c 2008-04-02 13:21:39 UTC (rev 4500) @@ -213,6 +213,19 @@ } +dict_mode_t dict_set_search_mode_from_flags(dict_mode_t mode, gchar flags) +{ + if (flags & DICT_FLAGS_MODE_DICT) + mode = DICTMODE_DICT; + else if (flags & DICT_FLAGS_MODE_WEB) + mode = DICTMODE_WEB; + else if (flags & DICT_FLAGS_MODE_SPELL) + mode = DICTMODE_SPELL; + + return mode; +} + + void dict_search_word(DictData *dd, const gchar *word) { gboolean browser_started = FALSE; @@ -245,13 +258,8 @@ dict_gui_clear_text_buffer(dd); - switch (dd->mode) + switch (dd->mode_in_use) { - case DICTMODE_DICT: - { - dict_dictd_start_query(dd, dd->searched_word); - break; - } case DICTMODE_WEB: { browser_started = start_web_query(dd, dd->searched_word); @@ -263,6 +271,11 @@ dict_aspell_start_query(dd, dd->searched_word); break; } + default: + { + dict_dictd_start_query(dd, dd->searched_word); + break; + } } /* If the browser was successfully started and we are not in the stand-alone app, * then hide the main window in favour of the started browser. @@ -281,7 +294,8 @@ void dict_read_rc_file(DictData *dd) { XfceRc *rc; - gint mode = DICTMODE_DICT; + 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; @@ -294,7 +308,8 @@ if ((rc = xfce_rc_config_open(XFCE_RESOURCE_CONFIG, "xfce4-dict/xfce4-dict.rc", TRUE)) != NULL) { - mode = xfce_rc_read_int_entry(rc, "mode", mode); + 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); @@ -308,7 +323,12 @@ xfce_rc_close(rc); } - dd->mode = mode; + dd->mode_default = mode_default; + if (dd->mode_default == DICTMODE_LAST_USED) + dd->mode_in_use = mode_in_use; + 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; @@ -327,7 +347,8 @@ if ((rc = xfce_rc_config_open(XFCE_RESOURCE_CONFIG, "xfce4-dict/xfce4-dict.rc", FALSE)) != NULL) { - xfce_rc_write_int_entry(rc, "mode", dd->mode); + 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); Modified: xfce4-dict/trunk/lib/common.h =================================================================== --- xfce4-dict/trunk/lib/common.h 2008-04-02 12:22:29 UTC (rev 4499) +++ xfce4-dict/trunk/lib/common.h 2008-04-02 13:21:39 UTC (rev 4500) @@ -29,17 +29,25 @@ #define PLUGIN_WEBSITE "http://goodies.xfce.org/projects/xfce4-dict" +#define DICT_FLAGS_FOCUS_PANEL_ENTRY 1 +#define DICT_FLAGS_MODE_DICT 2 +#define DICT_FLAGS_MODE_WEB 4 +#define DICT_FLAGS_MODE_SPELL 8 +#define XFCE_DICT_SELECTION "XFCE_DICT_SEL" + + typedef enum { DICTMODE_DICT = 0, DICTMODE_WEB, - DICTMODE_SPELL + DICTMODE_SPELL, + DICTMODE_LAST_USED } dict_mode_t; typedef enum { - WEBMODE_OTHER, + WEBMODE_OTHER = 0, WEBMODE_LEO_GERENG, WEBMODE_LEO_GERFRE, WEBMODE_LEO_GERSPA @@ -55,57 +63,49 @@ typedef struct { - dict_mode_t mode; + /* settings */ + dict_mode_t mode_in_use; + dict_mode_t mode_default; web_mode_t web_mode; - GtkWidget *window; - GtkWidget *statusbar; - GtkWidget *close_button; - GtkWidget *close_menu_item; - GtkWidget *pref_menu_item; - GtkWidget *main_entry; - GtkWidget *panel_entry; - GtkWidget *main_textview; - GtkTextBuffer *main_textbuffer; - GtkTextTag *main_boldtag; - - GtkWidget *server_entry; - GtkWidget *dict_combo; - GtkWidget *port_spinner; - GtkWidget *panel_entry_size_label; - GtkWidget *panel_entry_size_spinner; - GtkWidget *check_panel_entry; - gboolean show_panel_entry; gint panel_entry_size; + gint port; gchar *server; gchar *dictionary; + gchar *web_url; + + gchar *spell_bin; + gchar *spell_dictionary; + + gboolean is_plugin; /* specify whether the panel plugin loaded or not */ + + /* status values */ gchar *searched_word; /* word to query the server */ gboolean query_is_running; gint query_status; gchar *query_buffer; - GtkWidget *web_entry_label; - GtkWidget *web_entry; - GtkWidget *web_radio_leo_gereng; - GtkWidget *web_radio_leo_gerfre; - GtkWidget *web_radio_leo_gerspa; - GtkWidget *web_radio_other; - gchar *web_url; - - GtkWidget *spell_entry; - GtkWidget *spell_combo; - gchar *spell_bin; - gchar *spell_dictionary; - + /* widgets */ + GtkWidget *window; + GtkWidget *statusbar; + GtkWidget *close_button; + GtkWidget *close_menu_item; + GtkWidget *pref_menu_item; + GtkWidget *main_entry; + GtkWidget *panel_entry; + GtkWidget *main_textview; + GtkTextBuffer *main_textbuffer; + GtkTextTag *main_boldtag; GdkPixbuf *icon; - gboolean is_plugin; /* specify whether the panel plugin loaded or not */ + GtkWidget *web_entry_box; } DictData; +dict_mode_t dict_set_search_mode_from_flags(dict_mode_t mode, gchar flags); void dict_free_data(DictData *dd); void dict_write_rc_file(DictData *dd); void dict_read_rc_file(DictData *dd); Modified: xfce4-dict/trunk/lib/dictd.c =================================================================== --- xfce4-dict/trunk/lib/dictd.c 2008-04-02 12:22:29 UTC (rev 4499) +++ xfce4-dict/trunk/lib/dictd.c 2008-04-02 13:21:39 UTC (rev 4500) @@ -326,13 +326,10 @@ gchar *buffer = NULL; gchar *answer = NULL; gchar **lines; - const gchar *host; - gint port; + GtkWidget *dict_combo = g_object_get_data(G_OBJECT(button), "dict_combo"); - host = gtk_entry_get_text(GTK_ENTRY(dd->server_entry)); - port = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dd->port_spinner)); - if ((fd = open_socket(host, port)) == -1) + if ((fd = open_socket(dd->server, dd->port)) == -1) { xfce_err(_("Could not connect to server.")); return FALSE; @@ -366,10 +363,10 @@ buffer++; /* clear the combo box */ - i = gtk_tree_model_iter_n_children(gtk_combo_box_get_model(GTK_COMBO_BOX(dd->dict_combo)), NULL); + i = gtk_tree_model_iter_n_children(gtk_combo_box_get_model(GTK_COMBO_BOX(dict_combo)), NULL); for (i -= 1; i > 2; i--) /* first three entries (*, ! and ----) should always exist */ { - gtk_combo_box_remove_text(GTK_COMBO_BOX(dd->dict_combo), i); + gtk_combo_box_remove_text(GTK_COMBO_BOX(dict_combo), i); } /* parse output */ @@ -380,7 +377,7 @@ i = 0; while (i < max_lines && lines[i][0] != '.') { - gtk_combo_box_append_text(GTK_COMBO_BOX(dd->dict_combo), lines[i]); + gtk_combo_box_append_text(GTK_COMBO_BOX(dict_combo), lines[i]); i++; } @@ -389,7 +386,7 @@ /* set the active entry to * because we don't know where the previously selected item now is in * the list and we also don't know whether it exists at all, and I don't walk through the list */ - gtk_combo_box_set_active(GTK_COMBO_BOX(dd->dict_combo), 0); + gtk_combo_box_set_active(GTK_COMBO_BOX(dict_combo), 0); return TRUE; } Modified: xfce4-dict/trunk/lib/gui.c =================================================================== --- xfce4-dict/trunk/lib/gui.c 2008-04-02 12:22:29 UTC (rev 4499) +++ xfce4-dict/trunk/lib/gui.c 2008-04-02 13:21:39 UTC (rev 4500) @@ -27,6 +27,7 @@ #include #include +#include #include #include "common.h" @@ -64,6 +65,8 @@ gtk_text_buffer_get_start_iter(dd->main_textbuffer, &start_iter); gtk_text_buffer_get_end_iter(dd->main_textbuffer, &end_iter); gtk_text_buffer_delete(dd->main_textbuffer, &start_iter, &end_iter); + + gtk_widget_grab_focus(dd->main_entry); } @@ -98,7 +101,7 @@ { if (gtk_toggle_button_get_active(togglebutton)) { - dd->mode = DICTMODE_DICT; + dd->mode_in_use = DICTMODE_DICT; gtk_widget_grab_focus(dd->main_entry); } } @@ -108,7 +111,7 @@ { if (gtk_toggle_button_get_active(togglebutton)) { - dd->mode = DICTMODE_WEB; + dd->mode_in_use = DICTMODE_WEB; gtk_widget_grab_focus(dd->main_entry); } } @@ -118,7 +121,7 @@ { if (gtk_toggle_button_get_active(togglebutton)) { - dd->mode = DICTMODE_SPELL; + dd->mode_in_use = DICTMODE_SPELL; gtk_widget_grab_focus(dd->main_entry); } } @@ -133,7 +136,11 @@ static GtkWidget *create_file_menu(DictData *dd) { GtkWidget *menubar, *file, *file_menu, *help, *help_menu, *menu_item; + GtkAccelGroup *accel_group; + accel_group = gtk_accel_group_new(); + gtk_window_add_accel_group(GTK_WINDOW(dd->window), accel_group); + menubar = gtk_menu_bar_new(); file = gtk_menu_item_new_with_mnemonic(_("_File")); @@ -141,12 +148,15 @@ file_menu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(file), file_menu); - dd->pref_menu_item = gtk_image_menu_item_new_from_stock("gtk-preferences", NULL); + dd->pref_menu_item = gtk_image_menu_item_new_from_stock("gtk-preferences", accel_group); + gtk_widget_add_accelerator(dd->pref_menu_item, "activate", accel_group, + GDK_p, GDK_CONTROL_MASK, GTK_ACCEL_VISIBLE); gtk_container_add(GTK_CONTAINER(file_menu), dd->pref_menu_item); gtk_container_add(GTK_CONTAINER(file_menu), gtk_separator_menu_item_new()); - dd->close_menu_item = gtk_image_menu_item_new_from_stock((dd->is_plugin) ? "gtk-close" : "gtk-quit", NULL); + dd->close_menu_item = gtk_image_menu_item_new_from_stock( + (dd->is_plugin) ? "gtk-close" : "gtk-quit", accel_group); gtk_container_add(GTK_CONTAINER(file_menu), dd->close_menu_item); help = gtk_menu_item_new_with_mnemonic(_("_Help")); @@ -154,7 +164,7 @@ help_menu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(help), help_menu); - menu_item = gtk_image_menu_item_new_from_stock("gtk-about", NULL); + menu_item = gtk_image_menu_item_new_from_stock("gtk-about", accel_group); gtk_container_add(GTK_CONTAINER(help_menu), menu_item); g_signal_connect(menu_item, "activate", G_CALLBACK(dict_gui_about_dialog), dd); @@ -251,18 +261,18 @@ radio = gtk_radio_button_new_with_label(NULL, _("Dict")); gtk_widget_show(radio); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), (dd->mode == DICTMODE_DICT)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), (dd->mode_in_use == DICTMODE_DICT)); g_signal_connect(radio, "toggled", G_CALLBACK(search_mode_dict_toggled), dd); gtk_box_pack_start(GTK_BOX(method_chooser), radio, FALSE, FALSE, 6); radio = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio), _("Web")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), (dd->mode == DICTMODE_WEB)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), (dd->mode_in_use == DICTMODE_WEB)); g_signal_connect(radio, "toggled", G_CALLBACK(search_mode_web_toggled), dd); gtk_widget_show(radio); gtk_box_pack_start(GTK_BOX(method_chooser), radio, FALSE, FALSE, 6); radio = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio), _("Spellcheck")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), (dd->mode == DICTMODE_SPELL)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio), (dd->mode_in_use == DICTMODE_SPELL)); g_signal_connect(radio, "toggled", G_CALLBACK(search_mode_spell_toggled), dd); gtk_widget_show(radio); gtk_box_pack_start(GTK_BOX(method_chooser), radio, FALSE, FALSE, 6); Deleted: xfce4-dict/trunk/lib/popup_def.h Modified: xfce4-dict/trunk/lib/prefs.c =================================================================== --- xfce4-dict/trunk/lib/prefs.c 2008-04-02 12:22:29 UTC (rev 4499) +++ xfce4-dict/trunk/lib/prefs.c 2008-04-02 13:21:39 UTC (rev 4500) @@ -33,20 +33,41 @@ static void show_panel_entry_toggled(GtkToggleButton *tb, DictData *dd) { - gtk_widget_set_sensitive(dd->panel_entry_size_spinner, gtk_toggle_button_get_active(tb)); - gtk_widget_set_sensitive(dd->panel_entry_size_label, gtk_toggle_button_get_active(tb)); + if (dd->is_plugin) + { + gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(tb), "spinner"), + gtk_toggle_button_get_active(tb)); + gtk_widget_set_sensitive(g_object_get_data(G_OBJECT(tb), "label"), + gtk_toggle_button_get_active(tb)); + } } -static void use_webserver_toggled(GtkToggleButton *tb, DictData *dd) +static void web_search_type_changed(GtkRadioButton *radiobutton, DictData *dd) { - gtk_widget_set_sensitive(dd->web_entry, gtk_toggle_button_get_active(tb)); - gtk_widget_set_sensitive(dd->web_entry_label, gtk_toggle_button_get_active(tb)); + 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 get_spell_dictionaries(DictData *dd) +static void search_method_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->mode_default = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(radiobutton), "type")); +} + + +static void get_spell_dictionaries(GtkWidget *spell_combo, DictData *dd) +{ if (NZV(dd->spell_bin)) { gchar *tmp = NULL, *cmd, *locale_cmd; @@ -64,9 +85,9 @@ for (i = 0; i < len; i++) { item = g_strstrip(list[i]); - gtk_combo_box_append_text(GTK_COMBO_BOX(dd->spell_combo), item); + gtk_combo_box_append_text(GTK_COMBO_BOX(spell_combo), item); if (strcmp(dd->spell_dictionary, item) == 0) - gtk_combo_box_set_active(GTK_COMBO_BOX(dd->spell_combo), i); + gtk_combo_box_set_active(GTK_COMBO_BOX(spell_combo), i); } g_strfreev(list); } @@ -94,7 +115,8 @@ } /* MODE DICT */ - tmp = gtk_combo_box_get_active_text(GTK_COMBO_BOX(dd->dict_combo)); + tmp = gtk_combo_box_get_active_text( + GTK_COMBO_BOX(g_object_get_data(G_OBJECT(dlg), "dict_combo"))); if (tmp == NULL || tmp[0] == '0' || tmp[0] == '-') { xfce_err(_("You have chosen an invalid dictionary entry.")); @@ -102,31 +124,27 @@ return; } - dd->port = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dd->port_spinner)); + dd->port = gtk_spin_button_get_value_as_int( + GTK_SPIN_BUTTON(g_object_get_data(G_OBJECT(dlg), "port_spinner"))); g_free(dd->server); - dd->server = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->server_entry))); + dd->server = g_strdup(gtk_entry_get_text( + GTK_ENTRY(g_object_get_data(G_OBJECT(dlg), "server_entry")))); g_free(dd->dictionary); dd->dictionary = tmp; /* MODE WEB */ - if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gereng))) - dd->web_mode = WEBMODE_LEO_GERENG; - else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gerfre))) - dd->web_mode = WEBMODE_LEO_GERFRE; - else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dd->web_radio_leo_gerspa))) - dd->web_mode = WEBMODE_LEO_GERSPA; - else + if (dd->web_mode == WEBMODE_OTHER) { - dd->web_mode = WEBMODE_OTHER; - g_free(dd->web_url); - dd->web_url = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->web_entry))); + 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(GTK_COMBO_BOX(dd->spell_combo)); + tmp = gtk_combo_box_get_active_text( + GTK_COMBO_BOX(g_object_get_data(G_OBJECT(dlg), "spell_combo"))); if (NZV(tmp)) { g_free(dd->spell_dictionary); @@ -134,14 +152,17 @@ } g_free(dd->spell_bin); - dd->spell_bin = g_strdup(gtk_entry_get_text(GTK_ENTRY(dd->spell_entry))); + dd->spell_bin = g_strdup(gtk_entry_get_text( + GTK_ENTRY(g_object_get_data(G_OBJECT(dlg), "spell_entry")))); /* general settings */ - dd->show_panel_entry = gtk_toggle_button_get_active( - GTK_TOGGLE_BUTTON(dd->check_panel_entry)); - dd->panel_entry_size = gtk_spin_button_get_value_as_int( - GTK_SPIN_BUTTON(dd->panel_entry_size_spinner)); - + if (dd->is_plugin) + { + dd->show_panel_entry = gtk_toggle_button_get_active( + GTK_TOGGLE_BUTTON(g_object_get_data(G_OBJECT(dlg), "check_panel_entry"))); + dd->panel_entry_size = gtk_spin_button_get_value_as_int( + GTK_SPIN_BUTTON(g_object_get_data(G_OBJECT(dlg), "panel_entry_size_spinner"))); + } /* save settings */ dict_write_rc_file(dd); @@ -173,8 +194,10 @@ /* * Page: general */ +#define PAGE_GENERAL /* only navigation in Geany's symbol list ;-) */ { - GtkWidget *pe_hbox; + GtkWidget *radio_button, *label; + GSList *search_method; notebook_vbox = gtk_vbox_new(FALSE, 2); gtk_widget_show(notebook_vbox); @@ -182,41 +205,101 @@ gtk_widget_show(inner_vbox); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), notebook_vbox, gtk_label_new(_("General"))); + label = gtk_label_new(_("Default search method:")); + gtk_label_set_use_markup(GTK_LABEL(label), TRUE); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + 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")); + search_method = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_button)); + if (dd->mode_default == DICTMODE_DICT) + 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(DICTMODE_DICT)); + g_signal_connect(G_OBJECT(radio_button), "toggled", G_CALLBACK(search_method_changed), dd); + + radio_button = gtk_radio_button_new_with_label(search_method, _("Web")); + search_method = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_button)); + if (dd->mode_default == DICTMODE_WEB) + 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(DICTMODE_WEB)); + g_signal_connect(G_OBJECT(radio_button), "toggled", G_CALLBACK(search_method_changed), dd); + + radio_button = gtk_radio_button_new_with_label(search_method, _("Spellcheck")); + search_method = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_button)); + if (dd->mode_default == DICTMODE_SPELL) + 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(DICTMODE_SPELL)); + g_signal_connect(G_OBJECT(radio_button), "toggled", G_CALLBACK(search_method_changed), dd); + + radio_button = gtk_radio_button_new_with_label(search_method, _("Last used method")); + search_method = gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio_button)); + if (dd->mode_default == DICTMODE_LAST_USED) + 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(DICTMODE_LAST_USED)); + g_signal_connect(G_OBJECT(radio_button), "toggled", G_CALLBACK(search_method_changed), dd); + /* show panel entry check box */ - dd->check_panel_entry = gtk_check_button_new_with_label( - _("Show text field in the panel")); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dd->check_panel_entry), dd->show_panel_entry); - gtk_widget_show(dd->check_panel_entry); - g_signal_connect(G_OBJECT(dd->check_panel_entry), "toggled", - G_CALLBACK(show_panel_entry_toggled), dd); + if (dd->is_plugin) + { + GtkWidget *pe_hbox, *panel_entry_size_label, *panel_entry_size_spinner, *check_panel_entry; - /* panel entry size */ - dd->panel_entry_size_label = gtk_label_new_with_mnemonic(_("Text field size:")); - gtk_widget_show(dd->panel_entry_size_label); - dd->panel_entry_size_spinner = gtk_spin_button_new_with_range(0.0, 500.0, 1.0); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(dd->panel_entry_size_spinner), - dd->panel_entry_size); - gtk_widget_show(dd->panel_entry_size_spinner); + label = gtk_label_new(_("Panel text field:")); + gtk_label_set_use_markup(GTK_LABEL(label), TRUE); + gtk_misc_set_alignment(GTK_MISC(label), 0, 1); + gtk_widget_show(label); + gtk_box_pack_start(GTK_BOX(inner_vbox), label, FALSE, FALSE, 5); - pe_hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(pe_hbox); + check_panel_entry = gtk_check_button_new_with_label(_("Show text field in the panel")); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_panel_entry), dd->show_panel_entry); + gtk_widget_show(check_panel_entry); + g_signal_connect(G_OBJECT(check_panel_entry), "toggled", + G_CALLBACK(show_panel_entry_toggled), dd); - gtk_box_pack_start(GTK_BOX(pe_hbox), dd->panel_entry_size_label, FALSE, FALSE, 10); - gtk_box_pack_start(GTK_BOX(pe_hbox), dd->panel_entry_size_spinner, TRUE, TRUE, 0); + /* panel entry size */ + panel_entry_size_label = gtk_label_new_with_mnemonic(_("Text field size:")); + gtk_widget_show(panel_entry_size_label); + panel_entry_size_spinner = gtk_spin_button_new_with_range(0.0, 500.0, 1.0); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(panel_entry_size_spinner), + dd->panel_entry_size); - gtk_box_pack_start(GTK_BOX(inner_vbox), dd->check_panel_entry, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(inner_vbox), pe_hbox, FALSE, FALSE, 0); + g_object_set_data(G_OBJECT(dialog), "check_panel_entry", check_panel_entry); + g_object_set_data(G_OBJECT(dialog), "panel_entry_size_spinner", panel_entry_size_spinner); + g_object_set_data(G_OBJECT(check_panel_entry), "spinner", panel_entry_size_spinner); + g_object_set_data(G_OBJECT(check_panel_entry), "label", panel_entry_size_label); + + gtk_widget_show(panel_entry_size_spinner); + + pe_hbox = gtk_hbox_new(FALSE, 0); + gtk_widget_show(pe_hbox); + + gtk_box_pack_start(GTK_BOX(pe_hbox), panel_entry_size_label, FALSE, FALSE, 10); + gtk_box_pack_start(GTK_BOX(pe_hbox), panel_entry_size_spinner, TRUE, TRUE, 0); + + gtk_box_pack_start(GTK_BOX(inner_vbox), check_panel_entry, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(inner_vbox), pe_hbox, FALSE, FALSE, 0); + + /* init the sensitive widgets */ + show_panel_entry_toggled(GTK_TOGGLE_BUTTON(check_panel_entry), dd); + } gtk_box_pack_start(GTK_BOX(notebook_vbox), inner_vbox, TRUE, TRUE, 5); - /* init the sensitive widgets */ - show_panel_entry_toggled(GTK_TOGGLE_BUTTON(dd->check_panel_entry), dd); } /* * Page: DICTD */ +#define PAGE_DICTD /* only navigation in Geany's symbol list ;-) */ { - GtkWidget *table, *button_get_list; + GtkWidget *table, *button_get_list, *server_entry, *port_spinner, *dict_combo; notebook_vbox = gtk_vbox_new(FALSE, 2); gtk_widget_show(notebook_vbox); @@ -228,49 +311,54 @@ label1 = gtk_label_new_with_mnemonic(_("Server:")); gtk_widget_show(label1); - dd->server_entry = gtk_entry_new(); - gtk_entry_set_max_length(GTK_ENTRY(dd->server_entry), 256); + server_entry = gtk_entry_new(); + gtk_entry_set_max_length(GTK_ENTRY(server_entry), 256); if (dd->server != NULL) { - gtk_entry_set_text(GTK_ENTRY(dd->server_entry), dd->server); + gtk_entry_set_text(GTK_ENTRY(server_entry), dd->server); } - gtk_widget_show(dd->server_entry); + gtk_widget_show(server_entry); /* server port */ label2 = gtk_label_new_with_mnemonic(_("Server Port:")); gtk_widget_show(label2); - dd->port_spinner = gtk_spin_button_new_with_range(0.0, 65536.0, 1.0); - gtk_spin_button_set_value(GTK_SPIN_BUTTON(dd->port_spinner), dd->port); - gtk_widget_show(dd->port_spinner); + port_spinner = gtk_spin_button_new_with_range(0.0, 65536.0, 1.0); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(port_spinner), dd->port); + gtk_widget_show(port_spinner); /* dictionary */ label3 = gtk_label_new_with_mnemonic(_("Dictionary:")); gtk_widget_show(label3); - dd->dict_combo = gtk_combo_box_new_text(); - gtk_combo_box_append_text(GTK_COMBO_BOX(dd->dict_combo), _("* (use all)")); - gtk_combo_box_append_text(GTK_COMBO_BOX(dd->dict_combo), + dict_combo = gtk_combo_box_new_text(); + gtk_combo_box_append_text(GTK_COMBO_BOX(dict_combo), _("* (use all)")); + gtk_combo_box_append_text(GTK_COMBO_BOX(dict_combo), _("! (use all, stop after first match)")); - gtk_combo_box_append_text(GTK_COMBO_BOX(dd->dict_combo), "----------------"); + gtk_combo_box_append_text(GTK_COMBO_BOX(dict_combo), "----------------"); if (dd->dictionary != NULL) { if (dd->dictionary[0] == '*') - gtk_combo_box_set_active(GTK_COMBO_BOX(dd->dict_combo), 0); + gtk_combo_box_set_active(GTK_COMBO_BOX(dict_combo), 0); else if (dd->dictionary[0] == '!') - gtk_combo_box_set_active(GTK_COMBO_BOX(dd->dict_combo), 1); + gtk_combo_box_set_active(GTK_COMBO_BOX(dict_combo), 1); else { - gtk_combo_box_append_text(GTK_COMBO_BOX(dd->dict_combo), dd->dictionary); - gtk_combo_box_set_active(GTK_COMBO_BOX(dd->dict_combo), 3); + gtk_combo_box_append_text(GTK_COMBO_BOX(dict_combo), dd->dictionary); + gtk_combo_box_set_active(GTK_COMBO_BOX(dict_combo), 3); } } - gtk_widget_show(dd->dict_combo); + gtk_widget_show(dict_combo); + g_object_set_data(G_OBJECT(dialog), "server_entry", server_entry); + g_object_set_data(G_OBJECT(dialog), "port_spinner", port_spinner); + g_object_set_data(G_OBJECT(dialog), "dict_combo", dict_combo); + button_get_list = gtk_button_new_from_stock("gtk-find"); gtk_widget_show(button_get_list); g_signal_connect(button_get_list, "clicked", G_CALLBACK(dict_dictd_get_list), dd); + g_object_set_data(G_OBJECT(button_get_list), "dict_combo", dict_combo); /* put it all together */ table = gtk_table_new(3, 3, FALSE); @@ -283,7 +371,7 @@ (GtkAttachOptions) (0), 5, 5); gtk_misc_set_alignment(GTK_MISC(label1), 1, 0); - gtk_table_attach(GTK_TABLE(table), dd->server_entry, 1, 2, 0, 1, + gtk_table_attach(GTK_TABLE(table), server_entry, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (0), 5, 5); @@ -292,7 +380,7 @@ (GtkAttachOptions) (0), 5, 0); gtk_misc_set_alignment(GTK_MISC(label2), 1, 0); - gtk_table_attach(GTK_TABLE(table), dd->port_spinner, 1, 2, 1, 2, + gtk_table_attach(GTK_TABLE(table), port_spinner, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (0), 5, 5); @@ -301,7 +389,7 @@ (GtkAttachOptions) (0), 5, 0); gtk_misc_set_alignment(GTK_MISC(label3), 1, 0); - gtk_table_attach(GTK_TABLE(table), dd->dict_combo, 1, 2, 2, 3, + gtk_table_attach(GTK_TABLE(table), dict_combo, 1, 2, 2, 3, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (0), 0, 0); @@ -316,8 +404,9 @@ /* * Page: WEB */ +#define PAGE_WEB /* only navigation in Geany's symbol list ;-) */ { - GtkWidget *entry_hbox; + GtkWidget *radio_button, *label, *web_entry_label, *web_entry; GSList *web_type; notebook_vbox = gtk_vbox_new(FALSE, 5); @@ -326,51 +415,68 @@ gtk_widget_show(inner_vbox); gtk_notebook_append_page(GTK_NOTEBOOK(notebook), notebook_vbox, gtk_label_new(_("Web"))); - dd->web_radio_leo_gereng = gtk_radio_button_new_with_label(NULL, - _("dict.leo.org - German <-> English")); - web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(dd->web_radio_leo_gereng)); + label = gtk_label_new(_("Web search URL:")); + gtk_label_set_use_markup(GTK_LABEL(label), TRUE); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0); + 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(dd->web_radio_leo_gereng), TRUE); - gtk_widget_show(dd->web_radio_leo_gereng); - gtk_box_pack_start(GTK_BOX(inner_vbox), dd->web_radio_leo_gereng, FALSE, FALSE, 0); + 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); - dd->web_radio_leo_gerfre = gtk_radio_button_new_with_label(web_type, - _("dict.leo.org - German <-> French")); - web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(dd->web_radio_leo_gerfre)); + 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(dd->web_radio_leo_gerfre), TRUE); - gtk_widget_show(dd->web_radio_leo_gerfre); - gtk_box_pack_start(GTK_BOX(inner_vbox), dd->web_radio_leo_gerfre, FALSE, FALSE, 0); + 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); - dd->web_radio_leo_gerspa = gtk_radio_button_new_with_label(web_type, - _("dict.leo.org - German <-> Spanish")); - web_type = gtk_radio_button_get_group(GTK_RADIO_BUTTON(dd->web_radio_leo_gerspa)); + 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(dd->web_radio_leo_gerspa), TRUE); - gtk_widget_show(dd->web_radio_leo_gerspa); - gtk_box_pack_start(GTK_BOX(inner_vbox), dd->web_radio_leo_gerspa, FALSE, FALSE, 0); + 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); - dd->web_radio_other = gtk_radio_button_new_with_label(web_type, _("Use another website")); + 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(dd->web_radio_other), TRUE); - gtk_widget_show(dd->web_radio_other); - g_signal_connect(G_OBJECT(dd->web_radio_other), "toggled", - G_CALLBACK(use_webserver_toggled), dd); - gtk_box_pack_start(GTK_BOX(inner_vbox), dd->web_radio_other, FALSE, FALSE, 0); + 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); - dd->web_entry_label = gtk_label_new_with_mnemonic(_("URL:")); - gtk_widget_show(dd->web_entry_label); - dd->web_entry = gtk_entry_new(); + web_entry_label = gtk_label_new_with_mnemonic(_("URL:")); + gtk_widget_show(web_entry_label); + web_entry = gtk_entry_new(); if (dd->web_url != NULL) - gtk_entry_set_text(GTK_ENTRY(dd->web_entry), dd->web_url); - gtk_widget_show(dd->web_entry); + gtk_entry_set_text(GTK_ENTRY(web_entry), dd->web_url); + gtk_widget_show(web_entry); - entry_hbox = gtk_hbox_new(FALSE, 0); - gtk_widget_show(entry_hbox); - gtk_box_pack_start(GTK_BOX(entry_hbox), dd->web_entry_label, FALSE, TRUE, 5); - gtk_box_pack_start(GTK_BOX(entry_hbox), dd->web_entry, FALSE, FALSE, 0); - gtk_box_pack_start(GTK_BOX(inner_vbox), entry_hbox, FALSE, FALSE, 0); + 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); + 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.")); gtk_label_set_line_wrap(GTK_LABEL(label1), TRUE); gtk_misc_set_alignment(GTK_MISC(label1), 0, 0); @@ -379,14 +485,15 @@ gtk_box_pack_start(GTK_BOX(notebook_vbox), inner_vbox, TRUE, TRUE, 5); /* init the sensitive widgets */ - use_webserver_toggled(GTK_TOGGLE_BUTTON(dd->web_radio_other), dd); + web_search_type_changed(GTK_RADIO_BUTTON(radio_button), dd); } /* * Page: ASPELL */ +#define PAGE_ASPELL /* only navigation in Geany's symbol list ;-) */ { - GtkWidget *table; + GtkWidget *table, *spell_entry, *spell_combo; notebook_vbox = gtk_vbox_new(FALSE, 5); gtk_widget_show(notebook_vbox); @@ -397,21 +504,25 @@ label1 = gtk_label_new_with_mnemonic(_("Aspell program:")); gtk_widget_show(label1); - dd->spell_entry = gtk_entry_new(); - gtk_entry_set_max_length(GTK_ENTRY(dd->spell_entry), 256); + spell_entry = gtk_entry_new(); + gtk_entry_set_max_length(GTK_ENTRY(spell_entry), 256); if (dd->spell_bin != NULL) { - gtk_entry_set_text(GTK_ENTRY(dd->spell_entry), dd->spell_bin); + gtk_entry_set_text(GTK_ENTRY(spell_entry), dd->spell_bin); } - gtk_widget_show(dd->spell_entry); + gtk_widget_show(spell_entry); label2 = gtk_label_new_with_mnemonic(_("Dictionary:")); gtk_widget_show(label2); - dd->spell_combo = gtk_combo_box_new_text(); - get_spell_dictionaries(dd); - gtk_widget_show(dd->spell_combo); + spell_combo = gtk_combo_box_new_text(); + get_spell_dictionaries(spell_combo, dd); + gtk_widget_show(spell_combo); + g_object_set_data(G_OBJECT(dialog), "spell_combo", spell_combo); + g_object_set_data(G_OBJECT(dialog), "spell_entry", spell_entry); + + table = gtk_table_new(2, 2, FALSE); gtk_widget_show(table); gtk_table_set_row_spacings(GTK_TABLE(table), 5); @@ -422,7 +533,7 @@ (GtkAttachOptions) (0), 5, 5); gtk_misc_set_alignment(GTK_MISC(label1), 1, 0); - gtk_table_attach(GTK_TABLE(table), dd->spell_entry, 1, 2, 0, 1, + gtk_table_attach(GTK_TABLE(table), spell_entry, 1, 2, 0, 1, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (0), 5, 5); @@ -431,11 +542,11 @@ (GtkAttachOptions) (0), 5, 0); gtk_misc_set_alignment(GTK_MISC(label2), 1, 0); - gtk_table_attach(GTK_TABLE(table), dd->spell_combo, 1, 2, 1, 2, + gtk_table_attach(GTK_TABLE(table), spell_combo, 1, 2, 1, 2, (GtkAttachOptions) (GTK_FILL | GTK_EXPAND), (GtkAttachOptions) (0), 5, 5); - gtk_box_pack_start(GTK_BOX(inner_vbox), table, TRUE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(inner_vbox), table, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(notebook_vbox), inner_vbox, TRUE, TRUE, 5); } Modified: xfce4-dict/trunk/panel-plugin/xfce4-dict-plugin.c =================================================================== --- xfce4-dict/trunk/panel-plugin/xfce4-dict-plugin.c 2008-04-02 12:22:29 UTC (rev 4499) +++ xfce4-dict/trunk/panel-plugin/xfce4-dict-plugin.c 2008-04-02 13:21:39 UTC (rev 4500) @@ -40,7 +40,6 @@ #include #include "libdict.h" -#include "popup_def.h" typedef struct @@ -147,22 +146,31 @@ } -/* Handle user messages (xfce4-popup-dict) */ +/* Handle user messages (xfce4-dict) */ static gboolean dict_plugin_message_received(GtkWidget *w, GdkEventClient *ev, DictPanelData *dpd) { - if (ev->data_format == 8 && *(ev->data.b) != '\0') + if (ev->data_format == 8 && strncmp(ev->data.b, "xfdict", 6) == 0) { - if (strcmp(XFCE_DICT_WINDOW_MESSAGE, ev->data.b) == 0) - { /* open the main window */ + gchar flags = ev->data.b[6]; + gchar *tts = ev->data.b + 7; + + dpd->dd->mode_in_use = dict_set_search_mode_from_flags(dpd->dd->mode_in_use, flags); + + if (NZV(tts)) + { + gtk_entry_set_text(GTK_ENTRY(dpd->dd->main_entry), tts); + dict_search_word(dpd->dd, tts); + } + else if (flags & DICT_FLAGS_FOCUS_PANEL_ENTRY && dpd->dd->show_panel_entry) + { + xfce_panel_plugin_focus_widget(dpd->plugin, dpd->dd->panel_entry); + } + else + { dict_plugin_panel_button_clicked(NULL, dpd); - return TRUE; } - if (strcmp(XFCE_DICT_TEXTFIELD_MESSAGE, ev->data.b) == 0) - { /* put the focus onto the panel entry */ - if (dpd->dd->show_panel_entry) - xfce_panel_plugin_focus_widget(dpd->plugin, dpd->dd->panel_entry); - } + return TRUE; } return FALSE; Modified: xfce4-dict/trunk/src/popup_plugin.c =================================================================== --- xfce4-dict/trunk/src/popup_plugin.c 2008-04-02 12:22:29 UTC (rev 4499) +++ xfce4-dict/trunk/src/popup_plugin.c 2008-04-02 13:21:39 UTC (rev 4500) @@ -25,10 +25,10 @@ #include #include -#include "popup_def.h" +#include "libdict.h" -static gboolean xfce4_check_is_running(GtkWidget *widget, Window *xid) +static gboolean check_is_running(GtkWidget *widget, Window *xid) { GdkScreen *gscreen; gchar selection_name[32]; @@ -46,15 +46,13 @@ } -gboolean dict_find_panel_plugin(void) +gboolean dict_find_panel_plugin(gchar flags, const gchar *text) { gboolean ret = FALSE; GdkEventClient gev; GtkWidget *win; Window id; - gtk_window_set_default_icon_name("xfce4-dict"); - win = gtk_invisible_new(); gtk_widget_realize(win); @@ -63,30 +61,18 @@ gev.send_event = TRUE; gev.message_type = gdk_atom_intern("STRING", FALSE); gev.data_format = 8; - /* temporary disabled */ -#if 0 - if (argc > 1 && (strcmp(argv[1], "--text-field") == 0 || strcmp(argv[1], "-t") == 0)) - { - strcpy(gev.data.b, XFCE_DICT_TEXTFIELD_MESSAGE); - } - else if (argc > 1 && (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0)) - { - g_print(_("Usage: %s [options]\n"), argv[0]); - g_print(_("Options:\n")); - g_print(_(" -t, --text-field grap the focus on the text field in the panel\n")); - g_print(_(" -h, --help show this help and exit\n")); - g_print(_("If called without any options, the xfce4-dict-plugin main window is shown.\n")); - return 0; - } - else - { - strcpy(gev.data.b, XFCE_DICT_WINDOW_MESSAGE); - } -#else - strcpy(gev.data.b, XFCE_DICT_WINDOW_MESSAGE); -#endif - if (xfce4_check_is_running(win, &id)) + if (text == NULL) + text = ""; + + /* format of the send string: "xfdict?text": + * "xfdict" is for identification of ourselves + * ? is a bitmask to control the behaviour, it can contain one or more of DICT_FLAGS_*, + * we send it as %c to ensure it takes only one char in the string, + * everything after this is the text to search, given on command line */ + g_snprintf(gev.data.b, sizeof gev.data.b, "xfdict%c%s", flags, text); + + if (check_is_running(win, &id)) { gdk_event_send_client_message((GdkEvent*) &gev, (GdkNativeWindow) id); ret = TRUE; Modified: xfce4-dict/trunk/src/popup_plugin.h =================================================================== --- xfce4-dict/trunk/src/popup_plugin.h 2008-04-02 12:22:29 UTC (rev 4499) +++ xfce4-dict/trunk/src/popup_plugin.h 2008-04-02 13:21:39 UTC (rev 4500) @@ -18,10 +18,10 @@ */ -#ifndef POPUP_DEF_H -#define POPUP_DEF_H 1 +#ifndef POPUP_PLUGIN_H +#define POPUP_PLUGIN_H 1 -gboolean dict_find_panel_plugin(void); +gboolean dict_find_panel_plugin(gboolean focus_panel_entry, const gchar *text); #endif Modified: xfce4-dict/trunk/src/xfce4-dict.c =================================================================== --- xfce4-dict/trunk/src/xfce4-dict.c 2008-04-02 12:22:29 UTC (rev 4499) +++ xfce4-dict/trunk/src/xfce4-dict.c 2008-04-02 13:21:39 UTC (rev 4500) @@ -39,7 +39,23 @@ #include "popup_plugin.h" +static gboolean show_version = FALSE; +static gboolean focus_panel_entry = FALSE; +static gboolean mode_dict = FALSE; +static gboolean mode_web = FALSE; +static gboolean mode_spell = FALSE; +static GOptionEntry cli_options[] = +{ + { "dict", 'd', 0, G_OPTION_ARG_NONE, &mode_dict, N_("Search the given text using a DICTD server"), NULL }, + { "web", 'w', 0, G_OPTION_ARG_NONE, &mode_web, N_("Search the given text using a web-based search engine"), NULL }, + { "spell", 's', 0, G_OPTION_ARG_NONE, &mode_spell, N_("Check the given text with a spellchecker"), NULL }, + { "text-field", 't', 0, G_OPTION_ARG_NONE, &focus_panel_entry, N_("Grab the focus on the text field in the panel"), NULL }, + { "version", 'v', 0, G_OPTION_ARG_NONE, &show_version, N_("Show version and exit"), NULL }, + { NULL, 0, 0, 0, NULL, NULL, NULL } +}; +//~ If called without any options, the xfce4-dict-plugin main window is shown. + static gboolean main_quit(GtkWidget *widget, GdkEvent *event, DictData *dd) { dict_free_data(dd); @@ -64,22 +80,61 @@ } +static gchar get_flags() +{ + gchar flags = 0; + + if (focus_panel_entry) + flags |= DICT_FLAGS_FOCUS_PANEL_ENTRY; + if (mode_dict) + flags |= DICT_FLAGS_MODE_DICT; + if (mode_web) + flags |= DICT_FLAGS_MODE_WEB; + if (mode_spell) + flags |= DICT_FLAGS_MODE_SPELL; + + return flags; +} + + gint main(gint argc, gchar *argv[]) { DictData *dd; + GOptionContext *context; + gchar flags; #ifdef ENABLE_NLS xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); #endif + context = g_option_context_new(_("[TEXT]")); + g_option_context_add_main_entries(context, cli_options, GETTEXT_PACKAGE); + g_option_group_set_translation_domain(g_option_context_get_main_group(context), GETTEXT_PACKAGE); + g_option_context_add_group(context, gtk_get_option_group(FALSE)); + g_option_context_parse(context, &argc, &argv, NULL); + g_option_context_free(context); + gtk_init(&argc, &argv); gtk_window_set_default_icon_name("xfce4-dict"); + if (show_version) + { + printf(PACKAGE " " VERSION " "); + printf(_("(built on %s with GTK %d.%d.%d, GLib %d.%d.%d)"), + __DATE__, GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, + GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); + printf("\n"); + + exit(0); + } + + flags = get_flags(); + /* try to find an existing panel plugin and pop it up */ - if (dict_find_panel_plugin()) + if (dict_find_panel_plugin(flags, (argc > 1) ? argv[1] : NULL)) exit(0); - /* no plugin found, start usual stand-alone app */ + /* no plugin found, start stand-alone app */ dd = dict_create_dictdata(); dd->is_plugin = FALSE; @@ -88,6 +143,9 @@ dict_read_rc_file(dd); + /* set search mode from command line flags, if any */ + dd->mode_in_use = dict_set_search_mode_from_flags(dd->mode_in_use, flags); + dict_gui_create_main_window(dd); g_signal_connect(dd->window, "delete-event", G_CALLBACK(main_quit), dd); @@ -96,6 +154,11 @@ g_signal_connect(dd->close_menu_item, "activate", G_CALLBACK(close_button_clicked), dd); g_signal_connect(dd->pref_menu_item, "activate", G_CALLBACK(pref_dialog_activated), dd); + /* search text from command line options, if any */ + /* TODO take all remaining args, not only argv[1] */ + if (argc > 1) + dict_search_word(dd, argv[1]); + dict_gui_status_add(dd, _("Ready.")); siginterrupt(SIGALRM, 1); From mario at xfce.org Thu Apr 3 00:42:11 2008 From: mario at xfce.org (Mario Danic) Date: Wed, 2 Apr 2008 22:42:11 +0000 (UTC) Subject: [Goodies-commits] r4501 - xfburn Message-ID: <20080402224211.08D9FF29D8@mocha.foo-projects.org> Author: mario Date: 2008-04-02 22:42:10 +0000 (Wed, 02 Apr 2008) New Revision: 4501 Removed: xfburn/ChangeLog Log: Deleted misplaced ChangeLog Deleted: xfburn/ChangeLog From enrico at xfce.org Thu Apr 3 16:50:22 2008 From: enrico at xfce.org (Enrico Troeger) Date: Thu, 3 Apr 2008 14:50:22 +0000 (UTC) Subject: [Goodies-commits] r4502 - in xfce4-dict/trunk: . panel-plugin Message-ID: <20080403145022.96E8DF29D8@mocha.foo-projects.org> Author: enrico Date: 2008-04-03 14:50:22 +0000 (Thu, 03 Apr 2008) New Revision: 4502 Modified: xfce4-dict/trunk/ChangeLog xfce4-dict/trunk/panel-plugin/xfce4-dict-plugin.desktop.in.in Log: Fix broken panel plugin desktop file. Modified: xfce4-dict/trunk/ChangeLog =================================================================== --- xfce4-dict/trunk/ChangeLog 2008-04-02 22:42:10 UTC (rev 4501) +++ xfce4-dict/trunk/ChangeLog 2008-04-03 14:50:22 UTC (rev 4502) @@ -1,3 +1,8 @@ +2008-04-03 Enrico Tr?ger + + * Fix broken panel plugin desktop file. + + 2008-04-02 Enrico Tr?ger * Fix broken aspell search. Modified: xfce4-dict/trunk/panel-plugin/xfce4-dict-plugin.desktop.in.in =================================================================== --- xfce4-dict/trunk/panel-plugin/xfce4-dict-plugin.desktop.in.in 2008-04-02 22:42:10 UTC (rev 4501) +++ xfce4-dict/trunk/panel-plugin/xfce4-dict-plugin.desktop.in.in 2008-04-03 14:50:22 UTC (rev 4502) @@ -4,4 +4,4 @@ _Name=Dictionary _Comment=A plugin to query different dictionaries. Icon=xfce4-dict -X-XFCE-Exec=@libexecdir@/xfce4/panel-plugins/xfce4-dict-plugin +X-XFCE-Exec=@PLUGIN_PATH@/xfce4-dict-plugin From squisher at xfce.org Thu Apr 3 19:33:37 2008 From: squisher at xfce.org (David Mohr) Date: Thu, 3 Apr 2008 17:33:37 +0000 (UTC) Subject: [Goodies-commits] r4503 - xfburn/trunk/xfburn Message-ID: <20080403173337.4CF5BF29D8@mocha.foo-projects.org> Author: squisher Date: 2008-04-03 17:33:37 +0000 (Thu, 03 Apr 2008) New Revision: 4503 Modified: xfburn/trunk/xfburn/xfburn-device-list.c xfburn/trunk/xfburn/xfburn-device-list.h xfburn/trunk/xfburn/xfburn-main.c Log: Adding a check during startup if libburn was able to aquire the drive Modified: xfburn/trunk/xfburn/xfburn-device-list.c =================================================================== --- xfburn/trunk/xfburn/xfburn-device-list.c 2008-04-03 14:50:22 UTC (rev 4502) +++ xfburn/trunk/xfburn/xfburn-device-list.c 2008-04-03 17:33:37 UTC (rev 4503) @@ -155,7 +155,7 @@ burn_finish (); } -void +gint xfburn_device_list_init () { struct burn_drive_info *drives; @@ -209,6 +209,8 @@ burn_drive_info_free (drives); burn_finish (); + + return n_drives; } gboolean Modified: xfburn/trunk/xfburn/xfburn-device-list.h =================================================================== --- xfburn/trunk/xfburn/xfburn-device-list.h 2008-04-03 14:50:22 UTC (rev 4502) +++ xfburn/trunk/xfburn/xfburn-device-list.h 2008-04-03 17:33:37 UTC (rev 4503) @@ -48,7 +48,7 @@ gchar addr[BURN_DRIVE_ADR_LEN]; } XfburnDevice; -void xfburn_device_list_init (); +gint xfburn_device_list_init (); XfburnDevice * xfburn_device_lookup_by_name (const gchar * name); GList * xfburn_device_list_get_list (); void xfburn_device_list_free (); Modified: xfburn/trunk/xfburn/xfburn-main.c =================================================================== --- xfburn/trunk/xfburn/xfburn-main.c 2008-04-03 14:50:22 UTC (rev 4502) +++ xfburn/trunk/xfburn/xfburn-main.c 2008-04-03 17:33:37 UTC (rev 4503) @@ -48,6 +48,7 @@ main (int argc, char **argv) { GtkWidget *mainwin; + gint n_drives; #if DEBUG > 0 g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); @@ -81,7 +82,19 @@ xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); xfburn_stock_init (); - xfburn_device_list_init (); + n_drives = xfburn_device_list_init (); + if (n_drives < 1) { + GtkMessageDialog *dialog = gtk_message_dialog_new (NULL, + GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_CLOSE, + "No drives are currently available!"); + gtk_message_dialog_format_secondary_text (dialog, + "Maybe there is a mounted media in the drive?\n\nPlease unmount and restart the application."); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + } + mainwin = xfburn_main_window_new (); gtk_widget_show (mainwin); From squisher at xfce.org Thu Apr 3 19:56:15 2008 From: squisher at xfce.org (David Mohr) Date: Thu, 3 Apr 2008 17:56:15 +0000 (UTC) Subject: [Goodies-commits] r4504 - in xfburn/trunk: . xfburn Message-ID: <20080403175615.AA877F29D8@mocha.foo-projects.org> Author: squisher Date: 2008-04-03 17:56:15 +0000 (Thu, 03 Apr 2008) New Revision: 4504 Modified: xfburn/trunk/xfburn-toolbars.ui xfburn/trunk/xfburn.ui xfburn/trunk/xfburn/xfburn-burn-image-dialog.c xfburn/trunk/xfburn/xfburn-device-box.c xfburn/trunk/xfburn/xfburn-device-list.c xfburn/trunk/xfburn/xfburn-global.h xfburn/trunk/xfburn/xfburn-main-window.c Log: Rewriting image burning functions to work for both CD and DVD: * Changed function names to be media agnostic * Calculate 'x' speed ratings on the fly, instead of list lookup * Fixed dynamic speed calculation in the progress dialog to work for the increased number of sectors that fit on a DVD Modified: xfburn/trunk/xfburn/xfburn-burn-image-dialog.c =================================================================== --- xfburn/trunk/xfburn/xfburn-burn-image-dialog.c 2008-04-03 17:33:37 UTC (rev 4503) +++ xfburn/trunk/xfburn/xfburn-burn-image-dialog.c 2008-04-03 17:56:15 UTC (rev 4504) @@ -105,7 +105,7 @@ GtkWidget *button; XfburnDevice *device; - gtk_window_set_title (GTK_WINDOW (obj), _("Burn CD image")); + gtk_window_set_title (GTK_WINDOW (obj), _("Burn image")); gtk_window_set_destroy_with_parent (GTK_WINDOW (obj), TRUE); icon = gtk_widget_render_icon (GTK_WIDGET (obj), XFBURN_STOCK_BURN_CD, GTK_ICON_SIZE_DIALOG, NULL); gtk_window_set_icon (GTK_WINDOW (obj), icon); @@ -216,6 +216,9 @@ struct burn_progress progress; gint ret; time_t time_start; + char media_name[80]; + int media_no; + int factor; if (!burn_initialize ()) { g_critical ("Unable to initialize libburn"); @@ -287,6 +290,20 @@ xfburn_progress_dialog_burning_failed (XFBURN_PROGRESS_DIALOG (dialog_progress), _("Cannot recognize state of drive and media")); goto cleanup; } + + /* retrieve media type, so we can convert from 'kb/s' into 'x' rating */ + if (burn_disc_get_profile(drive_info->drive, &media_no, media_name) == 1) { + /* this will fail if newer disk types get supported */ + if (media_no <= 0x0a) + factor = CDR_1X_SPEED; + else + /* assume DVD for now */ + factor = DVD_1X_SPEED; + } else { + g_warning ("no profile could be retrieved to calculate current burn speed"); + factor = 1; + } + burn_options = burn_write_opts_new (drive); burn_write_opts_set_perform_opc (burn_options, 0); @@ -334,6 +351,7 @@ xfburn_progress_dialog_set_status_with_text (XFBURN_PROGRESS_DIALOG (dialog_progress), XFBURN_PROGRESS_DIALOG_STATUS_RUNNING, _("Burning composition...")); if (progress.sectors > 0 && progress.sector >= 0) { gdouble percent = 0.0; + gdouble cur_speed = 0.0; percent = (gdouble) (progress.buffer_capacity - progress.buffer_available) / (gdouble) progress.buffer_capacity; xfburn_progress_dialog_set_buffer_bar_fraction (XFBURN_PROGRESS_DIALOG (dialog_progress), percent); @@ -341,8 +359,10 @@ percent = 1.0 + ((gdouble) progress.sector+1.0) / ((gdouble) progress.sectors) * 98.0; xfburn_progress_dialog_set_progress_bar_fraction (XFBURN_PROGRESS_DIALOG (dialog_progress), percent / 100.0); + cur_speed = ((gdouble) ((gdouble)(glong)progress.sector * 2048L) / (gdouble) (time_now - time_start)) / ((gdouble) (factor * 1000.0)); + //DBG ("(%f / %f) / %f = %f\n", (gdouble) ((gdouble)(glong)progress.sector * 2048L), (gdouble) (time_now - time_start), ((gdouble) (factor * 1000.0)), cur_speed); xfburn_progress_dialog_set_writing_speed (XFBURN_PROGRESS_DIALOG (dialog_progress), - ((gdouble) (progress.sector * 2048) / (gdouble) (time_now - time_start)) / (150 * 1024)); + cur_speed); } break; case BURN_DRIVE_WRITING_LEADIN: Modified: xfburn/trunk/xfburn/xfburn-device-box.c =================================================================== --- xfburn/trunk/xfburn/xfburn-device-box.c 2008-04-03 17:33:37 UTC (rev 4503) +++ xfburn/trunk/xfburn/xfburn-device-box.c 2008-04-03 17:56:15 UTC (rev 4504) @@ -326,6 +326,9 @@ gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, MODE_TEXT_COLUMN, "SAO", MODE_VALUE_COLUMN, WRITE_MODE_SAO, -1); } + /* + * RAW modes are not supported by libburn yet + * if (device->raw_block_types & BURN_BLOCK_RAW16) { gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, MODE_TEXT_COLUMN, "RAW16", MODE_VALUE_COLUMN, WRITE_MODE_RAW16, -1); @@ -342,6 +345,7 @@ gtk_list_store_append (GTK_LIST_STORE (model), &iter); gtk_list_store_set (GTK_LIST_STORE (model), &iter, MODE_TEXT_COLUMN, "packet", MODE_VALUE_COLUMN, WRITE_MODE_PACKET, -1); } + */ gtk_combo_box_set_active (GTK_COMBO_BOX (priv->combo_mode), 0); } Modified: xfburn/trunk/xfburn/xfburn-device-list.c =================================================================== --- xfburn/trunk/xfburn/xfburn-device-list.c 2008-04-03 17:33:37 UTC (rev 4503) +++ xfburn/trunk/xfburn/xfburn-device-list.c 2008-04-03 17:56:15 UTC (rev 4504) @@ -34,11 +34,8 @@ #include #include "xfburn-device-list.h" +#include "xfburn-global.h" -#define CDR_1X_SPEED 150 - -/* private */ -static gint supported_cdr_speeds[] = {2, 4, 6, 8, 10, 12, 16, 20, 24, 32, 40, 48, 52, -1}; static GList *devices = NULL; /*************/ @@ -53,24 +50,6 @@ g_slist_free (device->supported_cdr_speeds); } -static gint -get_closest_supported_cdr_speed (gint speed) -{ - /* TODO: need some fixing */ - gint i = 0; - gint previous = 0; - - while (supported_cdr_speeds[i] != -1) { - if (speed < (supported_cdr_speeds[i] * CDR_1X_SPEED)) { - return supported_cdr_speeds[previous]; - } else - previous = i; - i++; - } - - return 0; -} - static gboolean no_speed_duplicate (GSList *speed_list, gint speed) { @@ -92,6 +71,9 @@ refresh_supported_speeds (XfburnDevice * device, struct burn_drive_info *drive_info) { struct burn_speed_descriptor *speed_list = NULL; + char media_name[80]; + int media_no; + int factor; gint ret; /* empty previous list */ @@ -101,17 +83,32 @@ /* fill new list */ ret = burn_drive_get_speedlist (drive_info->drive, &speed_list); + /* retrieve media type, so we can convert from 'kb/s' into 'x' rating */ + if (burn_disc_get_profile(drive_info->drive, &media_no, media_name) == 1) { + /* this will fail if newer disk types get supported */ + if (media_no <= 0x0a) + factor = CDR_1X_SPEED; + else + /* assume DVD for now */ + factor = DVD_1X_SPEED; + } else { + g_warning ("no profile could be retrieved to calculate speed"); + factor = 1; + } + if (ret > 0) { struct burn_speed_descriptor *el = speed_list; while (el) { gint speed = -1; - speed = get_closest_supported_cdr_speed (el->write_speed); + DBG ("libburn speed in kb/s: %d\n", el->write_speed); + speed = el->write_speed / factor; + /* FIXME: why do we need no_speed_duplicate? */ if (speed > 0 && no_speed_duplicate (device->supported_cdr_speeds, speed)) { device->supported_cdr_speeds = g_slist_prepend (device->supported_cdr_speeds, GINT_TO_POINTER (speed)); DBG ("added speed: %d\n", speed); - } + } el = el->next; } @@ -164,7 +161,7 @@ if (!burn_initialize ()) { g_critical ("Unable to initialize libburn"); - return; + return -1; } if (devices) { Modified: xfburn/trunk/xfburn/xfburn-global.h =================================================================== --- xfburn/trunk/xfburn/xfburn-global.h 2008-04-03 17:33:37 UTC (rev 4503) +++ xfburn/trunk/xfburn/xfburn-global.h 2008-04-03 17:56:15 UTC (rev 4504) @@ -54,4 +54,8 @@ #define MKISOFS_RUNNING " done, estimate" #define MKISOFS_DONE "extents written" +/* in reality CDR_1X_SPEED is 176.4 (see libburn.h:1577), but that shouldn't matter */ +#define CDR_1X_SPEED 176 +#define DVD_1X_SPEED 1385 + #endif Modified: xfburn/trunk/xfburn/xfburn-main-window.c =================================================================== --- xfburn/trunk/xfburn/xfburn-main-window.c 2008-04-03 17:33:37 UTC (rev 4503) +++ xfburn/trunk/xfburn/xfburn-main-window.c 2008-04-03 17:56:15 UTC (rev 4504) @@ -126,13 +126,13 @@ {"copy-data", "xfburn-data-copy", N_("Copy Data CD"), NULL, N_("Copy Data CD"), G_CALLBACK (action_copy_cd),}, {"copy-audio", "xfburn-audio-copy", N_("Copy Audio CD"), NULL, N_("Copy Audio CD"),}, - {"burn-cd", "xfburn-burn-cd", N_("Burn CD Image"), NULL, N_("Burn CD Image"), + {"burn-image", "xfburn-burn-cd", N_("Burn Image"), NULL, N_("Burn Image"), G_CALLBACK (action_burn_image),}, {"format-dvd", "xfburn-format-dvdrw", N_("Format DVD+RW"), NULL, N_("Format DVD+RW"), G_CALLBACK (action_format_dvd),}, {"copy-dvd", "xfburn-data-copy", N_("Copy DVD"), NULL, N_("Copy DVD"), G_CALLBACK (action_copy_dvd),}, - {"burn-dvd", "xfburn-burn-cd", N_("Burn DVD Image"), NULL, N_("Burn DVD Image"), + {"burn-dvd", "xfburn-burn-image", N_("Burn DVD Image"), NULL, N_("Burn DVD Image"), G_CALLBACK (action_burn_dvd_image),}, }; @@ -151,7 +151,7 @@ "blank-cd", "copy-data", //"copy-audio", - "burn-cd", + "burn-image", "format-dvd", "copy-dvd", "burn-dvd", @@ -645,7 +645,7 @@ gtk_action_set_sensitive (action, FALSE); action = gtk_action_group_get_action (priv->action_group, "copy-audio"); gtk_action_set_sensitive (action, FALSE); - action = gtk_action_group_get_action (priv->action_group, "burn-cd"); + action = gtk_action_group_get_action (priv->action_group, "burn-image"); gtk_action_set_sensitive (action, FALSE); } if (!priv->support_cdrw) { Modified: xfburn/trunk/xfburn-toolbars.ui =================================================================== --- xfburn/trunk/xfburn-toolbars.ui 2008-04-03 17:33:37 UTC (rev 4503) +++ xfburn/trunk/xfburn-toolbars.ui 2008-04-03 17:56:15 UTC (rev 4504) @@ -16,7 +16,7 @@ - +