SF.net SVN: geany:[4495] trunk

eht16 at users.sourceforge.net eht16 at xxxxx
Sun Dec 20 15:37:42 UTC 2009


Revision: 4495
          http://geany.svn.sourceforge.net/geany/?rev=4495&view=rev
Author:   eht16
Date:     2009-12-20 15:37:40 +0000 (Sun, 20 Dec 2009)

Log Message:
-----------
Make dialogs_show_prompt() more flexible to take up to three button/response code pairs to be shown.
Add a close button to the dialog when asking to Re-Save a deleted file (closes #2916954, based on a patch by Dominik Stadler, thanks).

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/dialogs.c
    trunk/src/dialogs.h
    trunk/src/document.c
    trunk/src/prefs.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2009-12-20 15:36:52 UTC (rev 4494)
+++ trunk/ChangeLog	2009-12-20 15:37:40 UTC (rev 4495)
@@ -1,3 +1,13 @@
+2009-12-20  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
+
+ * src/dialog.c, src/dialogs.h, src/document.c, src/prefs.c:
+   Make dialogs_show_prompt() more flexible to take up to three
+   button/response code pairs to be shown.
+   Add a close button to the dialog when asking to Re-Save a
+   deleted file
+   (closes #2916954, based on a patch by Dominik Stadler, thanks).
+
+
 2009-12-20  Frank Lanitz  <frank(at)frank(dot)uvena(dot)de>
 
  * src/editor.c:

Modified: trunk/src/dialogs.c
===================================================================
--- trunk/src/dialogs.c	2009-12-20 15:36:52 UTC (rev 4494)
+++ trunk/src/dialogs.c	2009-12-20 15:37:40 UTC (rev 4495)
@@ -1344,30 +1344,38 @@
 
 /* extra_text can be NULL; otherwise it is displayed below main_text.
  * if parent is NULL, main_widgets.window will be used
- * yes_btn, no_btn, apply_btn can be NULL.
- * returns GTK_RESPONSE_YES, GTK_RESPONSE_NO, GTK_RESPONSE_APPLY */
+ * btn_1, btn_2, btn_3 can be NULL.
+ * returns response_1, response_2 or response_3 */
 static gint show_prompt(GtkWidget *parent,
-		const gchar *yes_btn, const gchar *no_btn, const gchar *apply_btn,
+		const gchar *btn_1, GtkResponseType response_1,
+		const gchar *btn_2, GtkResponseType response_2,
+		const gchar *btn_3, GtkResponseType response_3,
 		const gchar *question_text, const gchar *extra_text)
 {
 	gboolean ret = FALSE;
 	GtkWidget *dialog;
 	GtkWidget *btn;
 
-	if (!yes_btn)
-		yes_btn = GTK_STOCK_YES;
-	if (!no_btn)
-		no_btn = GTK_STOCK_NO;
+	if (btn_2 == NULL)
+	{
+		btn_2 = GTK_STOCK_NO;
+		response_2 = GTK_RESPONSE_NO;
+	}
+	if (btn_3 == NULL)
+	{
+		btn_3 = GTK_STOCK_YES;
+		response_3 = GTK_RESPONSE_YES;
+	}
 
 #ifdef G_OS_WIN32
 	/* our native dialog code doesn't support custom buttons */
-	if (yes_btn == GTK_STOCK_YES && no_btn == GTK_STOCK_NO && !apply_btn)
+	if (btn_3 == GTK_STOCK_YES && btn_2 == GTK_STOCK_NO && btn_1 == NULL)
 	{
 		gchar *string = (extra_text == NULL) ? g_strdup(question_text) :
 			g_strconcat(question_text, "\n\n", extra_text, NULL);
 
 		ret = win32_message_dialog(parent, GTK_MESSAGE_QUESTION, string);
-		ret = ret ? GTK_RESPONSE_YES : GTK_RESPONSE_NO;
+		ret = ret ? response_3 : response_2;
 		g_free(string);
 		return ret;
 	}
@@ -1392,21 +1400,21 @@
 		gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),
 			"%s", extra_text);
 
-	if (apply_btn)
-		gtk_dialog_add_button(GTK_DIALOG(dialog), apply_btn, GTK_RESPONSE_APPLY);
+	if (btn_1 != NULL)
+		gtk_dialog_add_button(GTK_DIALOG(dialog), btn_1, response_1);
 
 	/* For a cancel button, use cancel response so user can press escape to cancel */
-	btn = gtk_dialog_add_button(GTK_DIALOG(dialog), no_btn,
-		utils_str_equal(no_btn, GTK_STOCK_CANCEL) ? GTK_RESPONSE_CANCEL : GTK_RESPONSE_NO);
+	btn = gtk_dialog_add_button(GTK_DIALOG(dialog), btn_2,
+		utils_str_equal(btn_2, GTK_STOCK_CANCEL) ? GTK_RESPONSE_CANCEL : response_2);
 	/* we don't want a default, but we need to override the apply button as default */
 	gtk_widget_grab_default(btn);
-	gtk_dialog_add_button(GTK_DIALOG(dialog), yes_btn, GTK_RESPONSE_YES);
+	gtk_dialog_add_button(GTK_DIALOG(dialog), btn_3, response_3);
 
 	ret = gtk_dialog_run(GTK_DIALOG(dialog));
 	gtk_widget_destroy(dialog);
 
 	if (ret == GTK_RESPONSE_CANCEL)
-		ret = GTK_RESPONSE_NO;
+		ret = response_2;
 	return ret;
 }
 
@@ -1430,7 +1438,11 @@
 	va_start(args, text);
 	g_vsnprintf(string, 511, text, args);
 	va_end(args);
-	return show_prompt(parent, GTK_STOCK_YES, GTK_STOCK_NO, NULL, string, NULL) == GTK_RESPONSE_YES;
+	return show_prompt(parent,
+		NULL, GTK_RESPONSE_NONE,
+		GTK_STOCK_NO, GTK_RESPONSE_NO,
+		GTK_STOCK_YES, GTK_RESPONSE_YES,
+		string, NULL) == GTK_RESPONSE_YES;
 }
 
 
@@ -1446,16 +1458,22 @@
 	va_start(args, main_text);
 	g_vsnprintf(string, 511, main_text, args);
 	va_end(args);
-	return show_prompt(parent, yes_btn, no_btn, NULL, string, extra_text) == GTK_RESPONSE_YES;
+	return show_prompt(parent,
+		NULL, GTK_RESPONSE_NONE,
+		no_btn, GTK_RESPONSE_NO,
+		yes_btn, GTK_RESPONSE_YES,
+		string, extra_text) == GTK_RESPONSE_YES;
 }
 
 
 /* extra_text can be NULL; otherwise it is displayed below main_text.
  * if parent is NULL, main_widgets.window will be used
- * yes_btn, no_btn, apply_btn can be NULL.
- * returns GTK_RESPONSE_YES, GTK_RESPONSE_NO, GTK_RESPONSE_APPLY */
+ * btn_1, btn_2, btn_3 can be NULL.
+ * returns response_1, response_2 or response_3 */
 gint dialogs_show_prompt(GtkWidget *parent,
-		const gchar *yes_btn, const gchar *no_btn, const gchar *apply_btn,
+		const gchar *btn_1, GtkResponseType response_1,
+		const gchar *btn_2, GtkResponseType response_2,
+		const gchar *btn_3, GtkResponseType response_3,
 		const gchar *extra_text, const gchar *main_text, ...)
 {
 	gchar string[512];
@@ -1464,7 +1482,8 @@
 	va_start(args, main_text);
 	g_vsnprintf(string, 511, main_text, args);
 	va_end(args);
-	return show_prompt(parent, yes_btn, no_btn, apply_btn, string, extra_text);
+	return show_prompt(parent, btn_1, response_1, btn_2, response_2, btn_3, response_3,
+				string, extra_text);
 }
 
 

Modified: trunk/src/dialogs.h
===================================================================
--- trunk/src/dialogs.h	2009-12-20 15:36:52 UTC (rev 4494)
+++ trunk/src/dialogs.h	2009-12-20 15:37:40 UTC (rev 4495)
@@ -59,8 +59,10 @@
 	const gchar *extra_text, const gchar *main_text, ...) G_GNUC_PRINTF (5, 6);
 
 gint dialogs_show_prompt(GtkWidget *parent,
-		const gchar *yes_btn, const gchar *no_btn, const gchar *apply_btn,
-		const gchar *extra_text, const gchar *main_text, ...) G_GNUC_PRINTF (6, 7);
+		const gchar *btn_1, GtkResponseType response_1,
+		const gchar *btn_2, GtkResponseType response_2,
+		const gchar *btn_3, GtkResponseType response_3,
+		const gchar *extra_text, const gchar *main_text, ...) G_GNUC_PRINTF (9, 10);
 
 void dialogs_show_msgbox(GtkMessageType type, const gchar *text, ...) G_GNUC_PRINTF (2, 3);
 

Modified: trunk/src/document.c
===================================================================
--- trunk/src/document.c	2009-12-20 15:36:52 UTC (rev 4494)
+++ trunk/src/document.c	2009-12-20 15:37:40 UTC (rev 4495)
@@ -2946,19 +2946,29 @@
 static gboolean monitor_resave_missing_file(GeanyDocument *doc)
 {
 	gboolean want_reload = FALSE;
+	gint ret;
 
 	/* file is missing - set unsaved state */
 	document_set_text_changed(doc, TRUE);
 	/* don't prompt more than once */
 	setptr(doc->real_path, NULL);
 
-	if (dialogs_show_question_full(NULL, GTK_STOCK_SAVE, GTK_STOCK_CANCEL,
+	ret = dialogs_show_prompt(NULL,
+		GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
+		GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+		GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
 		_("Try to resave the file?"),
-		_("File \"%s\" was not found on disk!"), doc->file_name))
+		_("File \"%s\" was not found on disk!"), doc->file_name);
+	if (ret == GTK_RESPONSE_ACCEPT)
 	{
 		dialogs_show_save_as();
 		want_reload = TRUE;
 	}
+	else if (ret == GTK_RESPONSE_CLOSE)
+	{
+		document_close(doc);
+	}
+
 	return want_reload;
 }
 

Modified: trunk/src/prefs.c
===================================================================
--- trunk/src/prefs.c	2009-12-20 15:36:52 UTC (rev 4494)
+++ trunk/src/prefs.c	2009-12-20 15:37:40 UTC (rev 4495)
@@ -1370,7 +1370,9 @@
 			{
 				gchar *label = keybindings_get_label(kb);
 				gint ret = dialogs_show_prompt(main_widgets.window,
-					_("_Override"), GTK_STOCK_CANCEL, _("_Allow"),
+					_("_Allow"), GTK_RESPONSE_APPLY,
+					GTK_STOCK_CANCEL, GTK_RESPONSE_NO,
+					_("_Override"), GTK_RESPONSE_YES,
 					_("Override that keybinding?"),
 					_("The combination '%s' is already used for \"%s\"."),
 					action, label);


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



More information about the Commits mailing list