glom r2016 - in trunk: . glom glom/bakery glom/libglom
- From: murrayc svn gnome org
- To: svn-commits-list gnome org
- Subject: glom r2016 - in trunk: . glom glom/bakery glom/libglom
- Date: Sun, 22 Mar 2009 22:30:56 +0000 (UTC)
Author: murrayc
Date: Sun Mar 22 22:30:56 2009
New Revision: 2016
URL: http://svn.gnome.org/viewvc/glom?rev=2016&view=rev
Log:
2009-03-22 Murray Cumming <murrayc murrayc com>
* glom/application.[h|cc]: new_instance(): Spawn a new process via a
a command line command.
* glom/bakery/App.[h|cc]: new_instance(): Take a uri parameter.
on_menu_file_new():
* glom/bakery/App_WithDoc.cc: open_document():
new_instance() is now expected to start a new process instead of
returning a new C++ instance.
This means that File/New and File/Open will start a new independent
process.
Modified:
trunk/ChangeLog
trunk/glom/application.cc
trunk/glom/application.h
trunk/glom/bakery/App.cc
trunk/glom/bakery/App.h
trunk/glom/bakery/App_WithDoc.cc
trunk/glom/libglom/spawn_with_feedback.cc
Modified: trunk/glom/application.cc
==============================================================================
--- trunk/glom/application.cc (original)
+++ trunk/glom/application.cc Sun Mar 22 22:30:56 2009
@@ -846,21 +846,20 @@
}
}
-GlomBakery::App* App_Glom::new_instance() //Override
+void App_Glom::new_instance(const Glib::ustring& uri) //Override
{
-#ifdef GLIBMM_EXCEPTIONS_ENABLED
- Glib::RefPtr<Gtk::Builder> refXml = Gtk::Builder::create_from_file(Utils::get_glade_file_path("glom.glade"), "window_main");
-#else
- std::auto_ptr<Glib::Error> error;
- Glib::RefPtr<Gtk::Builder> refXml = Gtk::Builder::create_from_file(Utils::get_glade_file_path("glom.glade"), "window_main", "", error);
- if(error.get())
- return 0;
-#endif
-
- App_Glom* pApp_Glom = 0;
- refXml->get_widget_derived("window_main", pApp_Glom);
-
- return pApp_Glom;
+ Glib::ustring command = "glom";
+ if(!uri.empty())
+ command += " " + uri;
+
+ GError* gerror = 0;
+ gdk_spawn_command_line_on_screen(Glib::unwrap(get_screen()),
+ command.c_str(),
+ &gerror);
+ if(gerror)
+ {
+ std::cerr << "App_Glom::new_instance(): error calling gdk_spawn_command_line_on_screen(): " << gerror->message << std::endl;
+ }
}
void App_Glom::init_create_document()
Modified: trunk/glom/application.h
==============================================================================
--- trunk/glom/application.h (original)
+++ trunk/glom/application.h Sun Mar 22 22:30:56 2009
@@ -132,7 +132,7 @@
virtual void on_menu_file_close(); //override.
virtual void document_history_add(const Glib::ustring& file_uri); //overridden.
- virtual GlomBakery::App* new_instance(); //Override
+ virtual void new_instance(const Glib::ustring& uri = Glib::ustring()); //Override
#ifndef G_OS_WIN32
void open_browsed_document(const EpcServiceInfo* server, const Glib::ustring& service_name);
Modified: trunk/glom/bakery/App.cc
==============================================================================
--- trunk/glom/bakery/App.cc (original)
+++ trunk/glom/bakery/App.cc Sun Mar 22 22:30:56 2009
@@ -84,8 +84,7 @@
void App::on_menu_file_new()
{
- App* pApp = new_instance();
- pApp->init();
+ new_instance();
}
void App::on_menu_file_close()
Modified: trunk/glom/bakery/App.h
==============================================================================
--- trunk/glom/bakery/App.h (original)
+++ trunk/glom/bakery/App.h Sun Mar 22 22:30:56 2009
@@ -108,7 +108,7 @@
virtual void init_toolbars();
- virtual App* new_instance() = 0; //Must override in order to new() the derived document class.
+ virtual void new_instance(const Glib::ustring& uri = Glib::ustring()) = 0; //Must override in order to new() the derived document class.
// virtual void close_window() = 0;
// virtual void bring_to_front() = 0;
Modified: trunk/glom/bakery/App_WithDoc.cc
==============================================================================
--- trunk/glom/bakery/App_WithDoc.cc (original)
+++ trunk/glom/bakery/App_WithDoc.cc Sun Mar 22 22:30:56 2009
@@ -104,19 +104,14 @@
//Open it:
//Load it into a new instance unless the current document is just a default new.
- App_WithDoc* pApp = 0;
- bool bUsingNewInstance = false;
if(!(get_document()->get_is_new())) //if it's not new.
{
//New instance:
- pApp = dynamic_cast<App_WithDoc*>(new_instance());
- pApp->init(); //It's shown too.
- bUsingNewInstance = true;
- }
- else
- {
- pApp = this; //Replace the default new document in this instance.
+ new_instance(file_uri);
+ return true;
}
+
+ App_WithDoc* pApp = this; //Replace the default new document in this instance.
//Open it.
pApp->m_pDocument->set_file_uri(file_uri);
@@ -150,19 +145,10 @@
{
ui_warning(_("Open failed."), _("The document could not be opened."));
- if(bUsingNewInstance)
- {
- //Remove new instance:
- pApp->get_document()->set_modified(false); //avoid 'do you want to save?' dialog.
- pApp->on_menu_file_close();
- }
- else
- {
- //re-initialize document.
- delete pApp->m_pDocument;
- pApp->m_pDocument = 0;
- pApp->init_create_document();
- }
+ //re-initialize document.
+ delete pApp->m_pDocument;
+ pApp->m_pDocument = 0;
+ pApp->init_create_document();
return false; //failed.
}
Modified: trunk/glom/libglom/spawn_with_feedback.cc
==============================================================================
--- trunk/glom/libglom/spawn_with_feedback.cc (original)
+++ trunk/glom/libglom/spawn_with_feedback.cc Sun Mar 22 22:30:56 2009
@@ -63,7 +63,9 @@
class SpawnError: public std::runtime_error
{
public:
- SpawnError(const std::string& error_message): std::runtime_error(error_message) {}
+ SpawnError(const std::string& error_message)
+ : std::runtime_error(error_message)
+ {}
};
#endif
@@ -318,17 +320,26 @@
bool spawn_async_end(std::auto_ptr<const SpawnInfo> info, std::string* stdout_text = NULL, std::string* stderr_text = NULL, int* return_status = NULL)
{
- if(stdout_text) info->get_stdout(*stdout_text);
- if(stderr_text) info->get_stderr(*stderr_text);
- if(return_status) *return_status = info->get_return_status();
+ if(stdout_text)
+ info->get_stdout(*stdout_text);
+
+ if(stderr_text)
+ info->get_stderr(*stderr_text);
+
+ if(return_status)
+ *return_status = info->get_return_status();
+
return !info->is_running();
}
int spawn_sync(const Glib::ustring& command_line, std::string* stdout_text, std::string* stderr_text)
{
int redirect_flags = 0;
- if(stdout_text) redirect_flags |= REDIRECT_STDOUT;
- if(stderr_text) redirect_flags |= REDIRECT_STDERR;
+ if(stdout_text)
+ redirect_flags |= REDIRECT_STDOUT;
+
+ if(stderr_text)
+ redirect_flags |= REDIRECT_STDERR;
std::auto_ptr<const SpawnInfo> info = spawn_async(command_line, redirect_flags);
info->signal_finished().connect(sigc::ptr_fun(&Gtk::Main::quit));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]