[Goodies-commits] r5700 - in xfce4-dict/trunk: . lib
Enrico Troeger
enrico at xfce.org
Sun Oct 19 11:30:11 CEST 2008
Author: enrico
Date: 2008-10-19 09:30:11 +0000 (Sun, 19 Oct 2008)
New Revision: 5700
Modified:
xfce4-dict/trunk/ChangeLog
xfce4-dict/trunk/lib/dictd.c
xfce4-dict/trunk/lib/dictd.h
xfce4-dict/trunk/lib/prefs.c
Log:
Add 'Information' button in the preferences dialog to query general server information for DICT servers.
Modified: xfce4-dict/trunk/ChangeLog
===================================================================
--- xfce4-dict/trunk/ChangeLog 2008-10-19 09:30:08 UTC (rev 5699)
+++ xfce4-dict/trunk/ChangeLog 2008-10-19 09:30:11 UTC (rev 5700)
@@ -1,3 +1,9 @@
+2008-10-17 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
+
+ * Add 'Information' button in the preferences dialog to query
+ general server information for DICT servers.
+
+
2008-10-15 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
* Add support for links (cross-references) in dictd responses.
Modified: xfce4-dict/trunk/lib/dictd.c
===================================================================
--- xfce4-dict/trunk/lib/dictd.c 2008-10-19 09:30:08 UTC (rev 5699)
+++ xfce4-dict/trunk/lib/dictd.c 2008-10-19 09:30:11 UTC (rev 5700)
@@ -483,8 +483,98 @@
}
-gboolean dict_dictd_get_list(GtkWidget *button, DictData *dd)
+void dict_dictd_get_information(GtkWidget *button, DictData *dd)
{
+ gint fd;
+ gchar *buffer = NULL;
+ gchar *answer = NULL;
+ gchar *text, *end;
+ GtkEntry *entry_server = g_object_get_data(G_OBJECT(button), "server_entry");
+ GtkSpinButton *entry_port = g_object_get_data(G_OBJECT(button), "port_spinner");
+ const gchar *server;
+ gint port;
+ GtkWidget *dialog, *label, *swin, *vbox;
+
+ dictd_init();
+
+ server = gtk_entry_get_text(entry_server);
+ port = gtk_spin_button_get_value_as_int(entry_port);
+
+ if ((fd = open_socket(server, port)) == -1)
+ {
+ xfce_err(_("Could not connect to server."));
+ return;
+ }
+
+ dd->query_status = NO_CONNECTION;
+
+ g_free(get_answer(dd, fd));
+ if (dd->query_status != NO_ERROR)
+ {
+ xfce_err(_("Could not connect to server."));
+ return;
+ }
+
+ send_command(fd, "SHOW SERVER");
+
+ /* read all server output */
+ answer = buffer = get_answer(dd, fd);
+ send_command(fd, "QUIT");
+ close(fd);
+
+ /* go to next line */
+ while (*buffer != '\n') buffer++;
+ buffer++;
+
+ if (strncmp("114", buffer, 3) != 0)
+ {
+ xfce_err(_("An error occured while querying server information."));
+ return;
+ }
+
+ /* go to next line */
+ while (*buffer != '\n') buffer++;
+ buffer++;
+
+ end = strstr(buffer, ".\r\n250");
+ *end = '\0';
+
+ text = g_strdup_printf(_("Server Information for %s"), server);
+ dialog = gtk_dialog_new_with_buttons(text,
+ GTK_WINDOW(dd->window),
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, NULL);
+ vbox = gtk_vbox_new(FALSE, 12);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
+ gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), vbox);
+ gtk_box_set_spacing(GTK_BOX(vbox), 6);
+ g_free(text);
+
+ gtk_window_set_default_size(GTK_WINDOW(dialog), 500, 400);
+ gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_CLOSE);
+
+ text = g_strconcat("<tt>", buffer, "</tt>", NULL);
+ label = gtk_label_new(text);
+ gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
+ g_free(text);
+
+ swin = gtk_scrolled_window_new(NULL, NULL);
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(swin),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(swin), label);
+
+ gtk_box_pack_start(GTK_BOX(vbox), swin, TRUE, TRUE, 0);
+
+ gtk_widget_show_all(vbox);
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
+
+ g_free(answer);
+}
+
+
+void dict_dictd_get_list(GtkWidget *button, DictData *dd)
+{
gint fd, i;
gint max_lines;
gchar *buffer = NULL;
@@ -504,7 +594,7 @@
if ((fd = open_socket(server, port)) == -1)
{
xfce_err(_("Could not connect to server."));
- return FALSE;
+ return;
}
dd->query_status = NO_CONNECTION;
@@ -513,7 +603,7 @@
if (dd->query_status != NO_ERROR)
{
xfce_err(_("Could not connect to server."));
- return FALSE;
+ return;
}
send_command(fd, "SHOW DATABASES");
@@ -529,15 +619,13 @@
if (strncmp("554", buffer, 3) == 0)
{
- close(fd);
xfce_err(_("The server doesn't offer any databases."));
- return TRUE;
+ return;
}
else if (strncmp("110", buffer, 3) != 0 && strncmp("554", buffer, 3) != 0)
{
xfce_err(_("Unknown error while quering the server."));
- close(fd);
- return FALSE;
+ return;
}
/* go to next line */
@@ -554,7 +642,8 @@
/* parse output */
lines = g_strsplit(buffer, "\r\n", -1);
max_lines = g_strv_length(lines);
- if (lines == NULL || max_lines == 0) return FALSE;
+ if (lines == NULL || max_lines == 0)
+ return;
i = 0;
while (i < max_lines && lines[i][0] != '.')
@@ -569,7 +658,5 @@
/* 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(dict_combo), 0);
-
- return TRUE;
}
Modified: xfce4-dict/trunk/lib/dictd.h
===================================================================
--- xfce4-dict/trunk/lib/dictd.h 2008-10-19 09:30:08 UTC (rev 5699)
+++ xfce4-dict/trunk/lib/dictd.h 2008-10-19 09:30:11 UTC (rev 5700)
@@ -23,7 +23,8 @@
void dict_dictd_start_query(DictData *dd, const gchar *word);
-gboolean dict_dictd_get_list(GtkWidget *button, DictData *dd);
+void dict_dictd_get_list(GtkWidget *button, DictData *dd);
+void dict_dictd_get_information(GtkWidget *button, DictData *dd);
#endif
Modified: xfce4-dict/trunk/lib/prefs.c
===================================================================
--- xfce4-dict/trunk/lib/prefs.c 2008-10-19 09:30:08 UTC (rev 5699)
+++ xfce4-dict/trunk/lib/prefs.c 2008-10-19 09:30:11 UTC (rev 5700)
@@ -363,7 +363,8 @@
*/
#define PAGE_DICTD /* only for navigation in Geany's symbol list ;-) */
{
- GtkWidget *table, *button_get_list, *server_entry, *port_spinner, *dict_combo;
+ GtkWidget *table, *button_get_list, *button_get_info;
+ GtkWidget *server_entry, *port_spinner, *dict_combo;
notebook_vbox = gtk_vbox_new(FALSE, 2);
gtk_widget_show(notebook_vbox);
@@ -421,13 +422,19 @@
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");
+ button_get_list = gtk_button_new_from_stock("gtk-refresh");
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);
g_object_set_data(G_OBJECT(button_get_list), "port_spinner", port_spinner);
g_object_set_data(G_OBJECT(button_get_list), "server_entry", server_entry);
+ button_get_info = gtk_button_new_from_stock("gtk-info");
+ gtk_widget_show(button_get_info);
+ g_signal_connect(button_get_info, "clicked", G_CALLBACK(dict_dictd_get_information), dd);
+ g_object_set_data(G_OBJECT(button_get_info), "port_spinner", port_spinner);
+ g_object_set_data(G_OBJECT(button_get_info), "server_entry", server_entry);
+
/* put it all together */
table = gtk_table_new(3, 3, FALSE);
gtk_widget_show(table);
@@ -443,6 +450,10 @@
(GtkAttachOptions) (GTK_FILL | GTK_EXPAND),
(GtkAttachOptions) (0), 5, 5);
+ gtk_table_attach(GTK_TABLE(table), button_get_info, 2, 3, 0, 1,
+ (GtkAttachOptions) (GTK_FILL | GTK_EXPAND),
+ (GtkAttachOptions) (0), 5, 5);
+
gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2,
(GtkAttachOptions) (GTK_FILL),
(GtkAttachOptions) (0), 5, 0);
More information about the Goodies-commits
mailing list