[Aptitude-svn-commit] r3540 - in branches/aptitude-0.3/aptitude: . src

Daniel Burrows dburrows@costa.debian.org
Sat, 02 Jul 2005 14:40:55 +0000


Author: dburrows
Date: Sat Jul  2 14:40:53 2005
New Revision: 3540

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/src/download_list.cc
   branches/aptitude-0.3/aptitude/src/download_screen.cc
Log:
Add a way to cancel the 'insert CD' prompt.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Sat Jul  2 14:40:53 2005
@@ -1,5 +1,10 @@
 2005-07-02  Daniel Burrows  <dburrows@debian.org>
 
+	* src/download_list.cc, src/download_screen.cc:
+
+	  Allow the user to cancel a media change.  Although I can't
+	  really test it, this hopefully Closes: #315885.
+
 	* src/generic/Makefile.am, src/generic/mut_fun.h:
 
 	  Add a functor class that assigns its argument to a fixed

Modified: branches/aptitude-0.3/aptitude/src/download_list.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/download_list.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/download_list.cc	Sat Jul  2 14:40:53 2005
@@ -267,21 +267,34 @@
   sync_top();
 }
 
-// I'm not sure this works!
+static void set_and_exit(bool &target, bool val)
+{
+  target=val;
+  vscreen_exitmain();
+}
+
 bool download_list::MediaChange(string media, string drive,
 				download_manager &manager)
 {
   fragment *f=wrapbox(fragf(_("Please insert the disc labeled \"%s\" into the drive \"%s\""),
 			    media.c_str(), drive.c_str()));
 
-  vscreen_widget *w=vs_dialog_ok(f, arg(sigc::ptr_fun(vscreen_exitmain)),
-				 get_style("MediaChange"));
+  bool rval=true;
+  vscreen_widget *w=vs_dialog_yesno(f,
+				    arg(sigc::bind(sigc::ptr_fun(set_and_exit),
+						   rval, true)),
+				    transcode(_("Continue")),
+				    arg(sigc::bind(sigc::ptr_fun(set_and_exit),
+						   rval, false)),
+				    transcode(_("Abort")),
+				    get_style("MediaChange"));
   w->show_all();
+
   popup_widget(w);
 
   vscreen_mainloop();
 
-  return true;
+  return rval;
 }
 
 void download_list::IMSHit(pkgAcquire::ItemDesc &itmdesc,

Modified: branches/aptitude-0.3/aptitude/src/download_screen.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/download_screen.cc	(original)
+++ branches/aptitude-0.3/aptitude/src/download_screen.cc	Sat Jul  2 14:40:53 2005
@@ -35,7 +35,9 @@
 #include <vscreen/vscreen.h>
 #include <vscreen/vs_util.h>
 
+#include <sigc++/adaptors/bind.h>
 #include <sigc++/functors/ptr_fun.h>
+#include <generic/mut_fun.h>
 
 #define CRITICAL_ENTER	\
   sigset_t ___signals,___oldset;\
@@ -48,6 +50,13 @@
   sigprocmask(SIG_SETMASK, &___oldset, &___signals);\
   assert(sigismember(&___signals, SIGWINCH));
 
+// argh
+static void set_and_exit(bool &target, bool val)
+{
+  target=val;
+  vscreen_exitmain();
+}
+
 bool download_screen::MediaChange(string Media, string Drive)
 {
   CRITICAL_ENTER
@@ -58,15 +67,22 @@
 	   _("Please insert the disc labeled \"%s\" into the drive \"%s\""),
 	   Media.c_str(), Drive.c_str());
 
-  popup_widget(vs_dialog_ok(transcode(buf),
-			    arg(sigc::ptr_fun(vscreen_exitmain)),
-			    get_style("MediaChange")));
+  bool rval=true;
+
+  popup_widget(vs_dialog_yesno(transcode(buf),
+			       arg(sigc::bind(sigc::ptr_fun(set_and_exit),
+					      rval, true)),
+			       transcode(_("Continue")),
+			       arg(sigc::bind(sigc::ptr_fun(set_and_exit),
+					      rval, false)),
+			       transcode(_("Abort")),
+			       get_style("MediaChange")));
 
   CRITICAL_EXIT
 
   vscreen_mainloop();  // Eeeeeek!  Recursive mainloop!  I'm afraid..
 
-  return true;
+  return rval;
 }
 
 void download_screen::IMSHit(pkgAcquire::ItemDesc &itmdesc)