SF.net SVN: geany-plugins:[184] trunk/geanysendmail

frlan at users.sourceforge.net frlan at xxxxx
Fri Sep 26 19:18:17 UTC 2008


Revision: 184
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=184&view=rev
Author:   frlan
Date:     2008-09-26 19:18:16 +0000 (Fri, 26 Sep 2008)

Log Message:
-----------
GeanySendMail: Added a feature to enter recipient's email address. Initial patch provided by Timothy Boronczyk.

Feature not finished, but working.

Modified Paths:
--------------
    trunk/geanysendmail/ChangeLog
    trunk/geanysendmail/src/geanysendmail.c

Modified: trunk/geanysendmail/ChangeLog
===================================================================
--- trunk/geanysendmail/ChangeLog	2008-09-26 19:17:55 UTC (rev 183)
+++ trunk/geanysendmail/ChangeLog	2008-09-26 19:18:16 UTC (rev 184)
@@ -1,3 +1,9 @@
+2008-09-25  Frank Lanitz  <frank(at)frank(dot)uvena(dot)de>
+
+ * Added a patch by Timothy Boronczyk to support creating a mail with 
+   recipients email. Thanks for it.
+
+
 2008-09-01  Frank Lanitz  <frank(at)frank(dot)uvena(dot)de>
 
  * Build environment: Update of Makefiles to include icon.h into source

Modified: trunk/geanysendmail/src/geanysendmail.c
===================================================================
--- trunk/geanysendmail/src/geanysendmail.c	2008-09-26 19:17:55 UTC (rev 183)
+++ trunk/geanysendmail/src/geanysendmail.c	2008-09-26 19:18:16 UTC (rev 184)
@@ -3,7 +3,7 @@
  *
  *      Copyright 2007, 2008 Frank Lanitz <frank(at)frank(dot)uvena(dot)de>
  * 		Copyright 2007 Enrico Tröger <enrico.troeger at uvena.de>
- *		Copyright 2007,2008 Nick Treleaven <nick.treleaven at btinternet.com>
+ *		Copyright 2007, 2008 Nick Treleaven <nick.treleaven at btinternet.com>
  *
  *      This program is free software; you can redistribute it and/or modify
  *      it under the terms of the GNU General Public License as published by
@@ -23,12 +23,12 @@
 /* A little plugin to send a document as attachment using the preferred mail client */
 
 #include "geany.h"
+#include "ui_utils.h"
 #include "support.h"
 #include "plugindata.h"
 #include "document.h"
 #include "filetypes.h"
 #include "utils.h"
-#include "ui_utils.h"
 #include "keybindings.h"
 #include "icon.h"
 #include "pluginmacros.h"
@@ -58,7 +58,9 @@
 
 static gchar *config_file = NULL;
 static gchar *mailer = NULL;
+static gchar *address = NULL;
 gboolean icon_in_toolbar = FALSE;	
+gboolean use_address_dialog = FALSE;
 /* Needed global to remove from toolbar again */
 GtkWidget *mailbutton = NULL;
 GtkWidget *separator = NULL;
@@ -100,6 +102,13 @@
 	gchar	*command = NULL;
 	GError	*error = NULL;
 	GString	*cmd_str = NULL;
+	GtkWidget	*dialog = NULL;
+	GtkWidget 	*label = NULL; 
+	GtkWidget 	*entry = NULL; 
+	GtkWidget	*vbox = NULL;
+	GKeyFile 	*config = g_key_file_new();
+	gchar 		*config_dir = g_path_get_dirname(config_file);
+	gchar 		*data;
 
 
 	doc = p_document->get_current();
@@ -120,10 +129,64 @@
 		{
 			locale_filename = p_utils->get_locale_from_utf8(doc->file_name);
 			cmd_str = g_string_new(mailer);
-
+			
+			if (use_address_dialog == TRUE)
+			{
+ 				dialog = gtk_dialog_new_with_buttons(_("Recipient's Address"),
+ 					GTK_WINDOW(geany->main_widgets->window), GTK_DIALOG_DESTROY_WITH_PARENT,
+ 					GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL);
+ 				vbox = p_ui->dialog_vbox_new(GTK_DIALOG(dialog));
+ 				gtk_widget_set_name(dialog, "GeanyDialog");
+ 				gtk_box_set_spacing(GTK_BOX(vbox), 10);
+ 
+ 				label = gtk_label_new(_("Enter the recipient's e-mail address:"));
+ 				gtk_widget_show(label);
+ 				gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
+ 				entry = gtk_entry_new();
+ 				gtk_widget_show(entry);
+ 				if (address != NULL)
+ 					gtk_entry_set_text(GTK_ENTRY(entry), address);
+	 
+ 				gtk_container_add(GTK_CONTAINER(vbox), label);
+ 				gtk_container_add(GTK_CONTAINER(vbox), entry);
+ 				gtk_widget_show(vbox);
+			
+ 				gint tmp = gtk_dialog_run(GTK_DIALOG(dialog));
+			
+ 				if (tmp == GTK_RESPONSE_ACCEPT)
+ 				{
+					g_key_file_load_from_file(config, config_file, G_KEY_FILE_NONE, NULL);
+				
+					if (address != NULL)
+						g_free(address);
+ 					address = g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)));
+			
+ 					g_key_file_set_string(config, "tools", "address", address);
+ 				}
+								
+				if (! g_file_test(config_dir, G_FILE_TEST_IS_DIR) && p_utils->mkdir(config_dir, TRUE) != 0)
+ 				{
+ 					p_dialogs->show_msgbox(GTK_MESSAGE_ERROR,
+ 						_("Plugin configuration directory could not be created."));
+ 				}
+ 				else
+ 				{
+ 					// write config to file
+ 					data = g_key_file_to_data(config, NULL, NULL);
+ 					p_utils->write_file(config_file, data);
+					g_free(data);
+					g_key_file_free(config);
+ 					g_free(config_dir);
+ 				}
+ 			}
+			
 			if (! p_utils->string_replace_all(cmd_str, "%f", locale_filename))
 				p_ui->set_statusbar(FALSE, _("Filename placeholder not found. The executed command might have failed."));
-
+ 			
+			if (use_address_dialog == TRUE && address != NULL)
+				if (! p_utils->string_replace_all(cmd_str, "%r", address))
+ 					p_ui->set_statusbar(FALSE, _("Recipient address placeholder not found. The executed command might have failed."));
+				
 			command = g_string_free(cmd_str, FALSE);
 			g_spawn_command_line_async(command, &error);
 			if (error != NULL)
@@ -134,6 +197,8 @@
 
 			g_free(locale_filename);
 			g_free(command);
+			
+			gtk_widget_destroy(dialog);
 		}
 		else
 		{
@@ -213,6 +278,7 @@
 {
 	GtkWidget *entry;
 	GtkWidget *checkbox_icon_to_toolbar;
+	GtkWidget *checkbox_use_addressdialog;
 }
 pref_widgets;
 
@@ -241,9 +307,15 @@
 		{
 			icon_in_toolbar = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pref_widgets.checkbox_icon_to_toolbar));
 		}
+		
+		if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pref_widgets.checkbox_use_addressdialog)) == TRUE)
+			use_address_dialog = TRUE;
+		else
+			use_address_dialog = FALSE;
 			
 		g_key_file_load_from_file(config, config_file, G_KEY_FILE_NONE, NULL);
 		g_key_file_set_string(config, "tools", "mailer", mailer);
+		g_key_file_set_boolean(config, "tools", "address_usage", use_address_dialog);
 		g_key_file_set_boolean(config, "icon", "show_icon", icon_in_toolbar);
 
 		if (! g_file_test(config_dir, G_FILE_TEST_IS_DIR) && p_utils->mkdir(config_dir, TRUE) != 0)
@@ -266,6 +338,7 @@
 GtkWidget *plugin_configure(GtkDialog *dialog)
 {
 	GtkWidget	*label1, *label2, *vbox;
+	GtkWidget	*address_option = NULL;
 	gint 		tmp;
 	GtkTooltips *tooltip = NULL;
 
@@ -282,7 +355,10 @@
 	if (mailer != NULL)
 		gtk_entry_set_text(GTK_ENTRY(pref_widgets.entry), mailer);
 
-	label2 = gtk_label_new(_("Note: \%f will be replaced by your filename."));
+	label2 = gtk_label_new(_("Note: \n\t\%f will be replaced by your file.\
+	\n\t\%r will be replaced the recipient's email address. \
+	\n\tAs an example you can use:\
+	\n\tsylpheed --attach \%f --compose \%r"));
 	gtk_widget_show(label2);
 	gtk_misc_set_alignment(GTK_MISC(label2), 0, 0.5);
 
@@ -294,11 +370,22 @@
 	gtk_button_set_focus_on_click(GTK_BUTTON(pref_widgets.checkbox_icon_to_toolbar), FALSE);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pref_widgets.checkbox_icon_to_toolbar), icon_in_toolbar);
 	gtk_widget_show(pref_widgets.checkbox_icon_to_toolbar); 
+
+	pref_widgets.checkbox_use_addressdialog = gtk_check_button_new_with_label(_("Using dialog for entering email address of recipients"));
+	/*gtk_tooltips_set_tip(tooltip, checkbox_use_addressdialog,
+			     _
+			     ("Shows a icon in the toolbar to send file more easy."),
+			     NULL);*/
+	gtk_button_set_focus_on_click(GTK_BUTTON(pref_widgets.checkbox_use_addressdialog), FALSE);
+	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(pref_widgets.checkbox_use_addressdialog), use_address_dialog);
+	gtk_widget_show(pref_widgets.checkbox_use_addressdialog); 
 	
 	gtk_container_add(GTK_CONTAINER(vbox), label1);
 	gtk_container_add(GTK_CONTAINER(vbox), pref_widgets.entry);
 	gtk_container_add(GTK_CONTAINER(vbox), label2);
 	gtk_box_pack_start(GTK_BOX(vbox), pref_widgets.checkbox_icon_to_toolbar, TRUE, FALSE, 2);
+	gtk_box_pack_start(GTK_BOX(vbox), pref_widgets.checkbox_use_addressdialog, TRUE, FALSE, 2);
+
 		
 	gtk_widget_show(vbox);
 
@@ -327,6 +414,8 @@
 	// Initialising options from config file
 	g_key_file_load_from_file(config, config_file, G_KEY_FILE_NONE, NULL);
 	mailer = g_key_file_get_string(config, "tools", "mailer", NULL);
+	address = g_key_file_get_string(config, "tools", "address", NULL);
+	use_address_dialog = g_key_file_get_boolean(config, "tools", "address_usage", NULL);
 	icon_in_toolbar = g_key_file_get_boolean(config, "icon", "show_icon", NULL);
 
 	g_key_file_free(config);
@@ -368,5 +457,6 @@
 	gtk_widget_destroy(plugin_fields->menu_item);
 	cleanup_icon();
 	g_free(mailer);
+	g_free(address);
 	g_free(config_file);
 }


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Plugins-Commits mailing list