X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fapp.cpp;h=eeb3ed35e051d77b8e01a1b6fac12a916ec3d0b2;hb=c2813b4d63804cac9b4067146a9e6eca717cb3e4;hp=c45d4c3cf71c609f3ef2465bdfbaffdcee572cc3;hpb=c3ad95144d148602f672e95ddda1f18fc35502f8;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/app.cpp b/synfig-studio/trunk/src/gtkmm/app.cpp index c45d4c3..eeb3ed3 100644 --- a/synfig-studio/trunk/src/gtkmm/app.cpp +++ b/synfig-studio/trunk/src/gtkmm/app.cpp @@ -6,6 +6,7 @@ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -122,6 +123,8 @@ #include #include +#include "general.h" + #endif /* === U S I N G =========================================================== */ @@ -252,6 +255,7 @@ studio::Dock_Curves* dock_curves; std::list< etl::handle< studio::Module > > module_list_; bool studio::App::use_colorspace_gamma=true; +bool studio::App::single_threaded=false; static int max_recent_files_=25; int studio::App::get_max_recent_files() { return max_recent_files_; } @@ -260,6 +264,25 @@ void studio::App::set_max_recent_files(int x) { max_recent_files_=x; } static synfig::String app_base_path_; namespace studio { + +bool +really_delete_widget(Gtk::Widget *widget) +{ + synfig::info("really delete %p", (void*)widget); + delete widget; + return false; +} + +// nasty workaround - when we've finished with a popup menu, we want to delete it +// attaching to the signal_hide() signal gets us here before the action on the menu has run, +// so schedule the real delete to happen in 50ms, giving the action a chance to run +void +delete_widget(Gtk::Widget *widget) +{ + synfig::info("delete %p", (void*)widget); + Glib::signal_timeout().connect(sigc::bind(sigc::ptr_fun(&really_delete_widget), widget), 50); +} + }; // END of namespace studio studio::StateManager* state_manager; @@ -600,6 +623,11 @@ public: value=strprintf("%s",Distance::system_name(App::distance_system).c_str()); return true; } + if(key=="single_threaded") + { + value=strprintf("%i",(int)App::single_threaded); + return true; + } if(key=="auto_recover_backup_interval") { value=strprintf("%i",App::auto_recover->get_timeout()); @@ -655,6 +683,12 @@ public: App::distance_system=Distance::ident_system(value);; return true; } + if(key=="single_threaded") + { + int i(atoi(value.c_str())); + App::single_threaded=i; + return true; + } return synfigapp::Settings::set_value(key,value); } @@ -667,6 +701,7 @@ public: ret.push_back("distance_system"); ret.push_back("file_history.size"); ret.push_back("use_colorspace_gamma"); + ret.push_back("single_threaded"); ret.push_back("auto_recover_backup_interval"); return ret; } @@ -683,18 +718,18 @@ init_ui_manager() Glib::RefPtr actions_action_group = Gtk::ActionGroup::create(); - menus_action_group->add( Gtk::Action::create("menu-file", "_File") ); - menus_action_group->add( Gtk::Action::create("menu-edit", "_Edit") ); - menus_action_group->add( Gtk::Action::create("menu-view", "_View") ); - menus_action_group->add( Gtk::Action::create("menu-canvas", "_Canvas") ); - menus_action_group->add( Gtk::Action::create("menu-layer", "_Layer") ); - menus_action_group->add( Gtk::Action::create("menu-duck-mask", "Show/Hide Ducks") ); - menus_action_group->add( Gtk::Action::create("menu-preview-quality", "Preview Quality") ); - menus_action_group->add( Gtk::Action::create("menu-layer-new", "New Layer") ); - menus_action_group->add( Gtk::Action::create("menu-keyframe", "Keyframe") ); - menus_action_group->add( Gtk::Action::create("menu-group", "Group") ); - menus_action_group->add( Gtk::Action::create("menu-state", "State") ); - menus_action_group->add( Gtk::Action::create("menu-toolbox", "Toolbox") ); + menus_action_group->add( Gtk::Action::create("menu-file", _("_File")) ); + menus_action_group->add( Gtk::Action::create("menu-edit", _("_Edit")) ); + menus_action_group->add( Gtk::Action::create("menu-view", _("_View")) ); + menus_action_group->add( Gtk::Action::create("menu-canvas", _("_Canvas")) ); + menus_action_group->add( Gtk::Action::create("menu-layer", _("_Layer")) ); + menus_action_group->add( Gtk::Action::create("menu-duck-mask", _("Show/Hide Ducks")) ); + menus_action_group->add( Gtk::Action::create("menu-preview-quality", _("Preview Quality")) ); + menus_action_group->add( Gtk::Action::create("menu-layer-new", _("New Layer")) ); + menus_action_group->add( Gtk::Action::create("menu-keyframe", _("Keyframe")) ); + menus_action_group->add( Gtk::Action::create("menu-group", _("Group")) ); + menus_action_group->add( Gtk::Action::create("menu-state", _("State")) ); + menus_action_group->add( Gtk::Action::create("menu-toolbox", _("Toolbox")) ); // Add the synfigapp actions... synfigapp::Action::Book::iterator iter; @@ -727,7 +762,8 @@ init_ui_manager() DEFINE_ACTION("dialog-flipbook", _("Preview Dialog")); DEFINE_ACTION("sound", _("Sound File")); DEFINE_ACTION("options", _("Options")); - DEFINE_ACTION("close", _("Close")); + DEFINE_ACTION("close", _("Close View")); + DEFINE_ACTION("close-document", _("Close Document")); DEFINE_ACTION("undo", Gtk::StockID("gtk-undo")); @@ -757,7 +793,7 @@ init_ui_manager() DEFINE_ACTION("quality-09", _("Use Quality Level 9")); DEFINE_ACTION("quality-10", _("Use Quality Level 10")); DEFINE_ACTION("play", _("Play")); - DEFINE_ACTION("pause", _("Pause")); + // DEFINE_ACTION("pause", _("Pause")); DEFINE_ACTION("stop", _("Stop")); DEFINE_ACTION("toggle-grid-show", _("Toggle Grid Show")); DEFINE_ACTION("toggle-grid-snap", _("Toggle Grid Snap")); @@ -847,6 +883,7 @@ init_ui_manager() " " " " " " +" " " " " " " " @@ -885,7 +922,7 @@ init_ui_manager() " " " " " " -" " +//" " " " " " " " @@ -1040,6 +1077,7 @@ init_ui_manager() ACCEL2(Gtk::AccelKey('>',Gdk::CONTROL_MASK,"//seek-next-second")); ACCEL2(Gtk::AccelKey('<',Gdk::CONTROL_MASK,"//seek-prev-second")); ACCEL2(Gtk::AccelKey('o',Gdk::CONTROL_MASK,"//toggle-onion-skin")); + ACCEL("//play", "p"); ACCEL("//seek-begin","Home"); ACCEL("//seek-end","End"); @@ -1076,7 +1114,7 @@ init_ui_manager() App::App(int *argc, char ***argv): Gtk::Main(argc,argv), - IconControler(etl::dirname((*argv)[0])) + IconController(etl::dirname((*argv)[0])) { app_base_path_=etl::dirname(etl::dirname((*argv)[0])); @@ -1088,7 +1126,10 @@ App::App(int *argc, char ***argv): gdk_rgb_init(); - Glib::thread_init(); + // don't call thread_init() if threads are already initialized + // on some machines bonobo_init() initialized threads before we get here + if (!g_thread_supported()) + Glib::thread_init(); distance_system=Distance::SYSTEM_UNITS; @@ -1145,7 +1186,7 @@ App::App(int *argc, char ***argv): try { synfigapp_main=etl::smart_ptr(new synfigapp::Main(etl::dirname((*argv)[0]),&synfig_init_cb)); } catch(...) { - get_ui_interface()->error("Failed to initialize synfig!"); + get_ui_interface()->error(_("Failed to initialize synfig!")); throw; } @@ -1154,82 +1195,82 @@ App::App(int *argc, char ***argv): try { - studio_init_cb.task("Init UI Manager..."); + studio_init_cb.task(_("Init UI Manager...")); App::ui_manager_=studio::UIManager::create(); init_ui_manager(); - studio_init_cb.task("Init Dock Manager..."); + studio_init_cb.task(_("Init Dock Manager...")); dock_manager=new studio::DockManager(); - studio_init_cb.task("Init State Manager..."); + studio_init_cb.task(_("Init State Manager...")); state_manager=new StateManager(); - studio_init_cb.task("Init Toolbox..."); + studio_init_cb.task(_("Init Toolbox...")); toolbox=new studio::Toolbox(); - studio_init_cb.task("Init Tool Options..."); + studio_init_cb.task(_("Init Tool Options...")); dialog_tool_options=new studio::Dialog_ToolOptions(); dock_manager->register_dockable(*dialog_tool_options); - studio_init_cb.task("Init History..."); + studio_init_cb.task(_("Init History...")); dock_history=new studio::Dock_History(); dock_manager->register_dockable(*dock_history); - studio_init_cb.task("Init Canvases..."); + studio_init_cb.task(_("Init Canvases...")); dock_canvases=new studio::Dock_Canvases(); dock_manager->register_dockable(*dock_canvases); - studio_init_cb.task("Init Keyframes..."); + studio_init_cb.task(_("Init Keyframes...")); dock_keyframes=new studio::Dock_Keyframes(); dock_manager->register_dockable(*dock_keyframes); - studio_init_cb.task("Init Layers..."); + studio_init_cb.task(_("Init Layers...")); dock_layers=new studio::Dock_Layers(); dock_manager->register_dockable(*dock_layers); - studio_init_cb.task("Init Params..."); + studio_init_cb.task(_("Init Params...")); dock_params=new studio::Dock_Params(); dock_manager->register_dockable(*dock_params); - studio_init_cb.task("Init MetaData..."); + studio_init_cb.task(_("Init MetaData...")); dock_meta_data=new studio::Dock_MetaData(); dock_manager->register_dockable(*dock_meta_data); - studio_init_cb.task("Init Children..."); + studio_init_cb.task(_("Init Children...")); dock_children=new studio::Dock_Children(); dock_manager->register_dockable(*dock_children); - studio_init_cb.task("Init Info..."); + studio_init_cb.task(_("Init Info...")); dock_info = new studio::Dock_Info(); dock_manager->register_dockable(*dock_info); - studio_init_cb.task("Init Navigator..."); + studio_init_cb.task(_("Init Navigator...")); dock_navigator = new studio::Dock_Navigator(); dock_manager->register_dockable(*dock_navigator); - studio_init_cb.task("Init Timetrack..."); + studio_init_cb.task(_("Init Timetrack...")); dock_timetrack = new studio::Dock_Timetrack(); dock_manager->register_dockable(*dock_timetrack); - studio_init_cb.task("Init Curve Editor..."); + studio_init_cb.task(_("Init Curve Editor...")); dock_curves = new studio::Dock_Curves(); dock_manager->register_dockable(*dock_curves); - studio_init_cb.task("Init Layer Groups..."); + studio_init_cb.task(_("Init Layer Groups...")); dock_layer_groups = new studio::Dock_LayerGroups(); dock_manager->register_dockable(*dock_layer_groups); - studio_init_cb.task("Init Color Dialog..."); + studio_init_cb.task(_("Init Color Dialog...")); dialog_color=new studio::Dialog_Color(); - studio_init_cb.task("Init Gradient Dialog..."); + studio_init_cb.task(_("Init Gradient Dialog...")); dialog_gradient=new studio::Dialog_Gradient(); - studio_init_cb.task("Init DeviceTracker..."); + studio_init_cb.task(_("Init DeviceTracker...")); device_tracker=new studio::DeviceTracker(); - studio_init_cb.task("Init Tools..."); + studio_init_cb.task(_("Init Tools...")); state_manager->add_state(&state_normal); state_manager->add_state(&state_smooth_move); state_manager->add_state(&state_scale); @@ -1258,28 +1299,28 @@ App::App(int *argc, char ***argv): // Disabled by default - it doesn't work properly? if(getenv("SYNFIG_ENABLE_WIDTH" )) state_manager->add_state(&state_width); - studio_init_cb.task("Init ModPalette..."); + studio_init_cb.task(_("Init ModPalette...")); module_list_.push_back(new ModPalette()); module_list_.back()->start(); - studio_init_cb.task("Init ModMirror..."); + studio_init_cb.task(_("Init ModMirror...")); module_list_.push_back(new ModMirror()); module_list_.back()->start(); - studio_init_cb.task("Init Setup Dialog..."); + studio_init_cb.task(_("Init Setup Dialog...")); dialog_setup=new studio::Dialog_Setup(); - studio_init_cb.task("Init Input Dialog..."); + studio_init_cb.task(_("Init Input Dialog...")); dialog_input=new Gtk::InputDialog(); dialog_input->get_close_button()->signal_clicked().connect( sigc::mem_fun( *dialog_input, &Gtk::InputDialog::hide ) ); dialog_input->get_save_button()->signal_clicked().connect( sigc::ptr_fun(studio::App::dialog_not_implemented) ); - studio_init_cb.task("Init auto recovery..."); + studio_init_cb.task(_("Init auto recovery...")); auto_recover=new AutoRecover(); studio_init_cb.amount_complete(9250,10000); - studio_init_cb.task("Loading Settings..."); + studio_init_cb.task(_("Loading Settings...")); load_settings(); - studio_init_cb.task("Checking auto-recover..."); + studio_init_cb.task(_("Checking auto-recover...")); studio_init_cb.amount_complete(9900,10000); @@ -1288,11 +1329,11 @@ App::App(int *argc, char ***argv): about_window.hide(); if( get_ui_interface()->yes_no( - "Auto Recovery", - "Synfig Studio seems to have crashed\n" + _("Auto Recovery"), + _("Synfig Studio seems to have crashed\n" "before you could save all your files.\n" "Would you like to re-open those files\n" - "and recover your unsaved changes?" + "and recover your unsaved changes?") )==synfigapp::UIInterface::RESPONSE_YES ) { @@ -1316,13 +1357,13 @@ App::App(int *argc, char ***argv): for(;*argc>=1;(*argc)--) if((*argv)[*argc] && (*argv)[*argc][0]!='-') { - studio_init_cb.task("Loading files..."); + studio_init_cb.task(_("Loading files...")); about_window.hide(); open((*argv)[*argc]); about_window.show(); } - studio_init_cb.task("Done."); + studio_init_cb.task(_("Done.")); studio_init_cb.amount_complete(10000,10000); toolbox->present(); @@ -1405,7 +1446,7 @@ App::add_recent_file(const std::string &file_name) if(basename(filename)[0]=='.') return; - // If we aren't an absolute path, turn outselves into one + // If we aren't an absolute path, turn ourselves into one if(!is_absolute_path(filename)) filename=absolute_path(filename); @@ -1518,19 +1559,7 @@ App::load_settings() //if(!synfigapp::Main::settings().load_from_file(filename)) { gamma.set_gamma(1.0/2.2); - synfigapp::Main::settings().set_value("dock.dialog.1.comp_selector","1"); - synfigapp::Main::settings().set_value("dock.dialog.1.contents","navigator - info pal_edit pal_browse - tool_options history canvases - layers groups"); - synfigapp::Main::settings().set_value("dock.dialog.1.contents_size","225 167 207"); - synfigapp::Main::settings().set_value("dock.dialog.1.pos","1057 32"); - synfigapp::Main::settings().set_value("dock.dialog.1.size","208 1174"); - synfigapp::Main::settings().set_value("dock.dialog.2.comp_selector","0"); - synfigapp::Main::settings().set_value("dock.dialog.2.contents","params children keyframes | timetrack curves meta_data"); - synfigapp::Main::settings().set_value("dock.dialog.2.contents_size","263"); - synfigapp::Main::settings().set_value("dock.dialog.2.pos","0 973"); - synfigapp::Main::settings().set_value("dock.dialog.2.size","1045 235"); - synfigapp::Main::settings().set_value("pref.distance_system","pt"); - synfigapp::Main::settings().set_value("pref.use_colorspace_gamma","1"); - synfigapp::Main::settings().set_value("window.toolbox.pos","4 4"); + reset_initial_window_configuration(); } } setlocale(LC_NUMERIC,old_locale); @@ -1541,6 +1570,25 @@ App::load_settings() } } +void +App::reset_initial_window_configuration() +{ + synfigapp::Main::settings().set_value("dock.dialog.1.comp_selector","1"); + synfigapp::Main::settings().set_value("dock.dialog.1.contents","navigator - info pal_edit pal_browse - tool_options history canvases - layers groups"); + synfigapp::Main::settings().set_value("dock.dialog.1.contents_size","225 167 207"); + synfigapp::Main::settings().set_value("dock.dialog.1.pos","1057 32"); + synfigapp::Main::settings().set_value("dock.dialog.1.size","208 1174"); + synfigapp::Main::settings().set_value("dock.dialog.2.comp_selector","0"); + synfigapp::Main::settings().set_value("dock.dialog.2.contents","params children keyframes | timetrack curves meta_data"); + synfigapp::Main::settings().set_value("dock.dialog.2.contents_size","263"); + synfigapp::Main::settings().set_value("dock.dialog.2.pos","0 973"); + synfigapp::Main::settings().set_value("dock.dialog.2.size","1045 235"); + synfigapp::Main::settings().set_value("pref.distance_system","pt"); + synfigapp::Main::settings().set_value("pref.use_colorspace_gamma","1"); + synfigapp::Main::settings().set_value("pref.single_threaded","0"); + synfigapp::Main::settings().set_value("window.toolbox.pos","4 4"); +} + bool App::shutdown_request(GdkEventAny*) { @@ -1555,10 +1603,10 @@ App::quit() if(shutdown_in_progress)return; - get_ui_interface()->task("Quit Request"); + get_ui_interface()->task(_("Quit Request")); if(Busy::count) { - dialog_error_blocking("Cannot quit!","Tasks are currently running.\nPlease cancel the current tasks and try again"); + dialog_error_blocking(_("Cannot quit!"),_("Tasks are currently running.\nPlease cancel the current tasks and try again")); return; } @@ -1626,7 +1674,7 @@ App::quit() Gtk::Main::quit(); auto_recover->normal_shutdown(); - get_ui_interface()->task("Quit Request sent"); + get_ui_interface()->task(_("Quit Request sent")); } void @@ -1700,13 +1748,17 @@ App::dialog_open_file(const std::string &title, std::string &filename) synfig::String prev_path; if(!_preferences.get_value("curr_path",prev_path)) prev_path="."; + prev_path = absolute_path(prev_path); Gtk::FileChooserDialog *dialog=new Gtk::FileChooserDialog(title,Gtk::FILE_CHOOSER_ACTION_OPEN); dialog->set_current_folder(prev_path); dialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); dialog->add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT); if(!filename.empty()) - dialog->set_filename(filename); + if (is_absolute_path(filename)) + dialog->set_filename(filename); + else + dialog->set_filename(prev_path + ETL_DIRECTORY_SEPARATOR + filename); if(dialog->run()==GTK_RESPONSE_ACCEPT) { filename=dialog->get_filename(); delete dialog; @@ -1726,7 +1778,7 @@ App::dialog_open_file(const std::string &title, std::string &filename) if(basename(filename)==filename) { - gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileselection),(prev_path+ETL_DIRECTORY_SEPERATOR).c_str()); + gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileselection),(prev_path+ETL_DIRECTORY_SEPARATOR).c_str()); } else gtk_file_selection_set_filename(GTK_FILE_SELECTION(fileselection),dirname(filename).c_str()); @@ -1764,7 +1816,7 @@ App::dialog_open_file(const std::string &title, std::string &filename) bool App::dialog_save_file(const std::string &title, std::string &filename) { -#ifdef USE_WIN32_FILE_DIALOGS +#if USE_WIN32_FILE_DIALOGS static TCHAR szFilter[] = TEXT ("All Files (*.*)\0*.*\0\0") ; GdkWindow *gdkWinPtr=toolbox->get_window()->gobj(); @@ -1802,6 +1854,7 @@ App::dialog_save_file(const std::string &title, std::string &filename) if(GetSaveFileName(&ofn)) { filename=szFilename; + _preferences.set_value("curr_path",dirname(filename)); return true; } return false; @@ -1809,82 +1862,31 @@ App::dialog_save_file(const std::string &title, std::string &filename) synfig::String prev_path; if(!_preferences.get_value("curr_path",prev_path)) prev_path="."; + prev_path = absolute_path(prev_path); Gtk::FileChooserDialog *dialog=new Gtk::FileChooserDialog(title,Gtk::FILE_CHOOSER_ACTION_SAVE); dialog->set_current_folder(prev_path); dialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); dialog->add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT); if(!filename.empty()) - dialog->set_filename(filename); - if(dialog->run()==GTK_RESPONSE_ACCEPT) { - filename=dialog->get_filename(); - delete dialog; - return true; - } - delete dialog; - return false; -// return dialog_open_file(title, filename); -#endif -} - -bool -App::dialog_saveas_file(const std::string &title, std::string &filename) -{ -#if USE_WIN32_FILE_DIALOGS - static TCHAR szFilter[] = TEXT ("All Files (*.*)\0*.*\0\0") ; - - GdkWindow *gdkWinPtr=toolbox->get_window()->gobj(); - HINSTANCE hInstance=static_cast(GetModuleHandle(NULL)); - HWND hWnd=static_cast(GDK_WINDOW_HWND(gdkWinPtr)); - - ofn.lStructSize=sizeof(OPENFILENAME); - ofn.hwndOwner = hWnd; - ofn.hInstance = hInstance; - ofn.lpstrFilter = szFilter; -// ofn.lpstrCustomFilter=NULL; -// ofn.nMaxCustFilter=0; -// ofn.nFilterIndex=0; -// ofn.lpstrFile=NULL; - ofn.nMaxFile=MAX_PATH; -// ofn.lpstrFileTitle=NULL; -// ofn.lpstrInitialDir=NULL; -// ofn.lpstrTitle=NULL; - ofn.Flags=OFN_OVERWRITEPROMPT; -// ofn.nFileOffset=0; -// ofn.nFileExtension=0; - ofn.lpstrDefExt=TEXT("sif"); -// ofn.lCustData = 0l; - ofn.lpfnHook=NULL; -// ofn.lpTemplateName=NULL; - - CHAR szFilename[MAX_PATH]; - CHAR szTitle[500]; - strcpy(szFilename,filename.c_str()); - strcpy(szTitle,title.c_str()); - - ofn.lpstrFile=szFilename; - ofn.lpstrFileTitle=szTitle; - - if(GetSaveFileName(&ofn)) { - filename=szFilename; - return true; + std::string full_path; + if (is_absolute_path(filename)) + full_path = filename; + else + full_path = prev_path + ETL_DIRECTORY_SEPARATOR + filename; + // select the file if it exists + dialog->set_filename(full_path); + + // if the file doesn't exist, put its name into the filename box + struct stat s; + if(stat(full_path.c_str(),&s) == -1 && errno == ENOENT) + dialog->set_current_name(basename(filename)); } - return false; -#else - synfig::String prev_path; - if(!_preferences.get_value("curr_path",prev_path)) - prev_path="."; - - Gtk::FileChooserDialog *dialog=new Gtk::FileChooserDialog(title,Gtk::FILE_CHOOSER_ACTION_SAVE); - dialog->set_current_folder(prev_path); - dialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); - dialog->add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT); - if(!filename.empty()) - dialog->set_filename(filename); if(dialog->run()==GTK_RESPONSE_ACCEPT) { filename=dialog->get_filename(); delete dialog; + _preferences.set_value("curr_path",dirname(filename)); return true; } delete dialog; @@ -1951,8 +1953,8 @@ App::dialog_yes_no_cancel(const std::string &title, const std::string &message) void App::dialog_not_implemented() { - Gtk::MessageDialog dialog("Feature not available", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_CLOSE, true); - dialog.set_secondary_text("Sorry, this feature has not yet been implemented."); + Gtk::MessageDialog dialog(_("Feature not available"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_CLOSE, true); + dialog.set_secondary_text(_("Sorry, this feature has not yet been implemented.")); dialog.run(); } @@ -1997,6 +1999,9 @@ App::open(std::string filename) return open_as(filename,filename); } +// this is called from autorecover.cpp: +// App::open_as(get_shadow_file_name(filename),filename) +// other than that, 'filename' and 'as' are the same bool App::open_as(std::string filename,std::string as) { @@ -2052,9 +2057,9 @@ void App::new_instance() { handle canvas=synfig::Canvas::create(); - canvas->set_name(strprintf("Untitled%d",Instance::get_count())); + canvas->set_name(strprintf("%s%d", DEFAULT_FILENAME_PREFIX, Instance::get_count()+1)); - String file_name(strprintf("untitled%d.sif",Instance::get_count())); + String file_name(strprintf("%s%d.sifz", DEFAULT_FILENAME_PREFIX, Instance::get_count()+1)); canvas->rend_desc().set_frame_rate(24.0); canvas->rend_desc().set_time_start(0.0); @@ -2069,7 +2074,10 @@ App::new_instance() canvas->rend_desc().set_flags(RendDesc::PX_ASPECT|RendDesc::IM_SPAN); canvas->set_file_name(file_name); - Instance::create(canvas)->find_canvas_view(canvas)->canvas_properties.present(); + handle instance = Instance::create(canvas); + + if (!getenv("SYNFIG_DISABLE_NEW_CANVAS_EDIT_PROPERTIES")) + instance->find_canvas_view(canvas)->canvas_properties.present(); } void @@ -2141,7 +2149,7 @@ App::set_selected_canvas_view(etl::loose_handle canvas_view) } etl::loose_handle -App::get_instance(Canvas::Handle canvas) +App::get_instance(etl::handle canvas) { if(!canvas) return 0; canvas=canvas->get_root();