X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-studio%2Ftrunk%2Fsrc%2Fgtkmm%2Fapp.cpp;h=871ac9a23dccca5ca4b219a49ef63abbd2357353;hb=756c0d29ac1742f231e6615f9a577e574e35a4af;hp=d94d3fdb5d333d7c1700af3ec6c326f07beef104;hpb=817f9750244974cd8207fe7e8c170a5c0def135c;p=synfig.git diff --git a/synfig-studio/trunk/src/gtkmm/app.cpp b/synfig-studio/trunk/src/gtkmm/app.cpp index d94d3fd..871ac9a 100644 --- a/synfig-studio/trunk/src/gtkmm/app.cpp +++ b/synfig-studio/trunk/src/gtkmm/app.cpp @@ -6,7 +6,7 @@ ** ** \legal ** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley -** Copyright (c) 2007 Chris Moore +** Copyright (c) 2007, 2008 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 @@ -33,6 +33,7 @@ #include #include #include +#include #ifdef HAVE_SYS_ERRNO_H #include @@ -51,9 +52,11 @@ #include #include +#include #include "app.h" #include "about.h" +#include "splash.h" #include "instance.h" #include "canvasview.h" #include "dialog_setup.h" @@ -83,6 +86,7 @@ #include "devicetracker.h" #include "dialog_tooloptions.h" +#include "widget_enum.h" #include "autorecover.h" @@ -221,6 +225,8 @@ const etl::handle& App::get_ui_interface() { return ui_i etl::handle App::selected_instance; etl::handle App::selected_canvas_view; +studio::About *studio::App::about=NULL; + studio::Toolbox *studio::App::toolbox=NULL; studio::AutoRecover *studio::App::auto_recover=NULL; @@ -256,6 +262,7 @@ std::list< etl::handle< studio::Module > > module_list_; bool studio::App::use_colorspace_gamma=true; bool studio::App::single_threaded=false; +bool studio::App::restrict_radius_ducks=false; static int max_recent_files_=25; int studio::App::get_max_recent_files() { return max_recent_files_; } @@ -268,7 +275,7 @@ namespace studio { bool really_delete_widget(Gtk::Widget *widget) { - synfig::info("really delete %p", (void*)widget); + // synfig::info("really delete %p", (void*)widget); delete widget; return false; } @@ -279,7 +286,7 @@ really_delete_widget(Gtk::Widget *widget) void delete_widget(Gtk::Widget *widget) { - synfig::info("delete %p", (void*)widget); + // synfig::info("delete %p", (void*)widget); Glib::signal_timeout().connect(sigc::bind(sigc::ptr_fun(&really_delete_widget), widget), 50); } @@ -411,30 +418,24 @@ studio::add_action_group_to_top(Glib::RefPtr ui_manager, Glib { ui_manager->insert_action_group(group,0); return; - DEBUGPOINT(); std::list > prev_groups(ui_manager->get_action_groups()); std::list >::reverse_iterator iter; - DEBUGPOINT(); for(iter=prev_groups.rbegin();iter!=prev_groups.rend();++iter) { - DEBUGPOINT(); if(*iter && (*iter)->get_name()!="menus") { synfig::info("Removing action group "+(*iter)->get_name()); ui_manager->remove_action_group(*iter); } } - DEBUGPOINT(); ui_manager->insert_action_group(group,0); - DEBUGPOINT(); for(;!prev_groups.empty();prev_groups.pop_front()) { if(prev_groups.front() && prev_groups.front()!=group && prev_groups.front()->get_name()!="menus") ui_manager->insert_action_group(prev_groups.front(),1); } - DEBUGPOINT(); } */ class Preferences : public synfigapp::Settings @@ -482,6 +483,11 @@ public: value=strprintf("%i",App::auto_recover->get_timeout()); return true; } + if(key=="restrict_radius_ducks") + { + value=strprintf("%i",(int)App::restrict_radius_ducks); + return true; + } return synfigapp::Settings::get_value(key,value); } @@ -538,6 +544,12 @@ public: App::single_threaded=i; return true; } + if(key=="restrict_radius_ducks") + { + int i(atoi(value.c_str())); + App::restrict_radius_ducks=i; + return true; + } return synfigapp::Settings::set_value(key,value); } @@ -552,6 +564,7 @@ public: ret.push_back("use_colorspace_gamma"); ret.push_back("single_threaded"); ret.push_back("auto_recover_backup_interval"); + ret.push_back("restrict_radius_ducks"); return ret; } }; @@ -574,6 +587,7 @@ init_ui_manager() 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-lowres-pixel", _("Low-Res Pixel Size")) ); 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")) ); @@ -597,6 +611,7 @@ init_ui_manager() DEFINE_ACTION2("keyframe-properties", Gtk::StockID("gtk-properties"), _("Keyframe Properties")); DEFINE_ACTION("about", Gtk::StockID("synfig-about")); + DEFINE_ACTION("new", Gtk::Stock::NEW); DEFINE_ACTION("open", Gtk::Stock::OPEN); DEFINE_ACTION("save", Gtk::Stock::SAVE); DEFINE_ACTION("save-as", Gtk::Stock::SAVE_AS); @@ -613,6 +628,7 @@ init_ui_manager() DEFINE_ACTION("options", _("Options")); DEFINE_ACTION("close", _("Close View")); DEFINE_ACTION("close-document", _("Close Document")); + DEFINE_ACTION("quit", Gtk::Stock::QUIT); DEFINE_ACTION("undo", Gtk::StockID("gtk-undo")); @@ -641,6 +657,8 @@ init_ui_manager() DEFINE_ACTION("quality-08", _("Use Quality Level 8")); DEFINE_ACTION("quality-09", _("Use Quality Level 9")); DEFINE_ACTION("quality-10", _("Use Quality Level 10")); + for(list::iterator iter = CanvasView::get_pixel_sizes().begin(); iter != CanvasView::get_pixel_sizes().end(); iter++) + DEFINE_ACTION(strprintf("lowres-pixel-%d", *iter), strprintf(_("Set Low-Res pixel size to %d"), *iter)); DEFINE_ACTION("play", _("Play")); // DEFINE_ACTION("pause", _("Pause")); DEFINE_ACTION("stop", _("Stop")); @@ -648,6 +666,8 @@ init_ui_manager() DEFINE_ACTION("toggle-grid-snap", _("Toggle Grid Snap")); DEFINE_ACTION("toggle-guide-show", _("Toggle Guide Show")); DEFINE_ACTION("toggle-low-res", _("Toggle Low-Res")); + DEFINE_ACTION("decrease-low-res-pixel-size", _("Decrease Low-Res Pixel Size")); + DEFINE_ACTION("increase-low-res-pixel-size", _("Increase Low-Res Pixel Size")); DEFINE_ACTION("toggle-onion-skin", _("Toggle Onion Skin")); DEFINE_ACTION("canvas-zoom-in", Gtk::StockID("gtk-zoom-in")); DEFINE_ACTION("canvas-zoom-out", Gtk::StockID("gtk-zoom-out")); @@ -715,6 +735,8 @@ init_ui_manager() " " " " " " +" " +" " " " " " " " @@ -733,6 +755,7 @@ init_ui_manager() " " " " " " +" " " " " " " " @@ -769,6 +792,17 @@ init_ui_manager() " " " " " " +" " +" " +" " +" " +; + + for(list::iterator iter = CanvasView::get_pixel_sizes().begin(); iter != CanvasView::get_pixel_sizes().end(); iter++) + ui_info += strprintf(" ", *iter); + + ui_info += +" " " " " " //" " @@ -912,6 +946,9 @@ init_ui_manager() ACCEL("//time-zoom-in","+"); ACCEL("//time-zoom-out","_"); */ + ACCEL2(Gtk::AccelKey('(',Gdk::CONTROL_MASK,"//decrease-low-res-pixel-size")); + ACCEL2(Gtk::AccelKey(')',Gdk::CONTROL_MASK,"//increase-low-res-pixel-size")); + ACCEL2(Gtk::AccelKey('(',Gdk::MOD1_MASK|Gdk::CONTROL_MASK,"//amount-dec")); ACCEL2(Gtk::AccelKey(')',Gdk::MOD1_MASK|Gdk::CONTROL_MASK,"//amount-inc")); @@ -925,7 +962,7 @@ init_ui_manager() ACCEL2(Gtk::AccelKey(',',Gdk::CONTROL_MASK,"//seek-prev-frame")); 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")); + ACCEL2(Gtk::AccelKey('o',Gdk::MOD1_MASK,"//toggle-onion-skin")); ACCEL("//play", "p"); ACCEL("//seek-begin","Home"); ACCEL("//seek-end","End"); @@ -1006,13 +1043,13 @@ App::App(int *argc, char ***argv): } Glib::set_application_name(_("Synfig Studio")); - About about_window; - about_window.set_can_self_destruct(false); - about_window.show(); + Splash splash_screen; + splash_screen.set_can_self_destruct(false); + splash_screen.show(); shutdown_in_progress=false; - SuperCallback synfig_init_cb(about_window.get_callback(),0,9000,10000); - SuperCallback studio_init_cb(about_window.get_callback(),9000,10000,10000); + SuperCallback synfig_init_cb(splash_screen.get_callback(),0,9000,10000); + SuperCallback studio_init_cb(splash_screen.get_callback(),9000,10000,10000); // Initialize the Synfig library try { synfigapp_main=etl::smart_ptr(new synfigapp::Main(etl::dirname((*argv)[0]),&synfig_init_cb)); } @@ -1040,6 +1077,9 @@ App::App(int *argc, char ***argv): studio_init_cb.task(_("Init Toolbox...")); toolbox=new studio::Toolbox(); + studio_init_cb.task(_("Init About Dialog...")); + about=new studio::About(); + studio_init_cb.task(_("Init Tool Options...")); dialog_tool_options=new studio::Dialog_ToolOptions(); dock_manager->register_dockable(*dialog_tool_options); @@ -1103,30 +1143,27 @@ App::App(int *argc, char ***argv): device_tracker=new studio::DeviceTracker(); studio_init_cb.task(_("Init Tools...")); + + /* row 1 */ state_manager->add_state(&state_normal); state_manager->add_state(&state_smooth_move); state_manager->add_state(&state_scale); state_manager->add_state(&state_rotate); + studio_init_cb.task(_("Init ModMirror...")); module_list_.push_back(new ModMirror()); module_list_.back()->start(); + /* row 2 */ state_manager->add_state(&state_bline); - - state_manager->add_state(&state_circle); state_manager->add_state(&state_rectangle); - state_manager->add_state(&state_gradient); - state_manager->add_state(&state_eyedrop); - state_manager->add_state(&state_fill); - - state_manager->add_state(&state_zoom); - - // Enabled - it's useful to be able to work with polygons without tangent ducks getting in the way. - // I know we can switch tangent ducks off, but why not allow this kind of layer as well? - if(!getenv("SYNFIG_DISABLE_POLYGON")) state_manager->add_state(&state_polygon); + if(!getenv("SYNFIG_DISABLE_POLYGON")) state_manager->add_state(&state_polygon); // Enabled - for working without ducks - // Enabled for now. Let's see whether they're good enough yet. - if(!getenv("SYNFIG_DISABLE_DRAW" )) state_manager->add_state(&state_draw); + /* row 3 */ + if(!getenv("SYNFIG_DISABLE_DRAW" )) state_manager->add_state(&state_draw); // Enabled for now. Let's see whether they're good enough yet. if(!getenv("SYNFIG_DISABLE_SKETCH" )) state_manager->add_state(&state_sketch); + state_manager->add_state(&state_fill); + state_manager->add_state(&state_eyedrop); + state_manager->add_state(&state_zoom); // Disabled by default - it doesn't work properly? if(getenv("SYNFIG_ENABLE_WIDTH" )) state_manager->add_state(&state_width); @@ -1134,10 +1171,6 @@ App::App(int *argc, char ***argv): studio_init_cb.task(_("Init ModPalette...")); module_list_.push_back(new ModPalette()); module_list_.back()->start(); - studio_init_cb.task(_("Init ModMirror...")); - module_list_.push_back(new ModMirror()); module_list_.back()->start(); - - studio_init_cb.task(_("Init Setup Dialog...")); dialog_setup=new studio::Dialog_Setup(); @@ -1156,32 +1189,34 @@ App::App(int *argc, char ***argv): studio_init_cb.amount_complete(9900,10000); + bool opened_any = false; if(auto_recover->recovery_needed()) { - about_window.hide(); - if( - get_ui_interface()->yes_no( - _("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?") - )==synfigapp::UIInterface::RESPONSE_YES - ) + splash_screen.hide(); + if (get_ui_interface()->yes_no(_("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?")) == + synfigapp::UIInterface::RESPONSE_YES) { - if(!auto_recover->recover()) - { - get_ui_interface()->error(_("Unable to fully recover from previous crash")); - } + int number_recovered; + if(!auto_recover->recover(number_recovered)) + if (number_recovered) + get_ui_interface()->error(_("Unable to fully recover from previous crash")); + else + get_ui_interface()->error(_("Unable to recover from previous crash")); else - get_ui_interface()->error( - _("Synfig Studio has attempted to recover\n" - "from a previous crash. The files that it has\n" - "recovered are NOT YET SAVED. It would be a good\n" - "idea to review them and save them now.") - ); + get_ui_interface()->error( + _("Synfig Studio has attempted to recover\n" + "from a previous crash. The files that it has\n" + "recovered are NOT YET SAVED. It would be a good\n" + "idea to review them and save them now.")); + + if (number_recovered) + opened_any = true; } - about_window.show(); + splash_screen.show(); } // Look for any files given on the command line, @@ -1190,11 +1225,16 @@ App::App(int *argc, char ***argv): if((*argv)[*argc] && (*argv)[*argc][0]!='-') { studio_init_cb.task(_("Loading files...")); - about_window.hide(); + splash_screen.hide(); open((*argv)[*argc]); - about_window.show(); + opened_any = true; + splash_screen.show(); } + // if no file was specified to be opened, create a new document to help new users get started more easily + if (!opened_any && !getenv("SYNFIG_DISABLE_AUTOMATIC_DOCUMENT_CREATION")) + new_instance(); + studio_init_cb.task(_("Done.")); studio_init_cb.amount_complete(10000,10000); @@ -1223,7 +1263,8 @@ App::~App() selected_instance=0; // Unload all of the modules - for(;!module_list_.empty();module_list_.pop_back()); + for(;!module_list_.empty();module_list_.pop_back()) + ; delete state_manager; @@ -1231,6 +1272,8 @@ App::~App() delete auto_recover; + delete about; + toolbox->hide(); // studio::App::iteration(false); @@ -1422,6 +1465,7 @@ App::reset_initial_window_configuration() 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("pref.restrict_radius_ducks","0"); synfigapp::Main::settings().set_value("window.toolbox.pos","4 4"); } @@ -1536,8 +1580,10 @@ static OPENFILENAME ofn={}; #endif bool -App::dialog_open_file(const std::string &title, std::string &filename) +App::dialog_open_file(const std::string &title, std::string &filename, std::string preference) { + info("App::dialog_open_file('%s', '%s', '%s')", title.c_str(), filename.c_str(), preference.c_str()); + #ifdef USE_WIN32_FILE_DIALOGS static TCHAR szFilter[] = TEXT ("All Files (*.*)\0*.*\0\0") ; @@ -1582,26 +1628,36 @@ App::dialog_open_file(const std::string &title, std::string &filename) #else synfig::String prev_path; - if(!_preferences.get_value("curr_path",prev_path)) - prev_path="."; + + if(!_preferences.get_value(preference, prev_path)) + prev_path = "."; + prev_path = absolute_path(prev_path); - Gtk::FileChooserDialog *dialog=new Gtk::FileChooserDialog(title,Gtk::FILE_CHOOSER_ACTION_OPEN); + 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()) - 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(); + + if (filename.empty()) + dialog->set_filename(prev_path); + else 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(); + info("Saving preference %s = '%s' in App::dialog_open_file()", preference.c_str(), dirname(filename).c_str()); + _preferences.set_value(preference, dirname(filename)); delete dialog; return true; } + delete dialog; return false; + /* GtkWidget *ok; @@ -1636,7 +1692,7 @@ App::dialog_open_file(const std::string &title, std::string &filename) if(val==1) { filename=gtk_file_selection_get_filename(GTK_FILE_SELECTION(fileselection)); - _preferences.set_value("curr_path",dirname(filename)); + _preferences.set_value(preference,dirname(filename)); } else { @@ -1650,8 +1706,10 @@ App::dialog_open_file(const std::string &title, std::string &filename) } bool -App::dialog_save_file(const std::string &title, std::string &filename) +App::dialog_save_file(const std::string &title, std::string &filename, std::string preference) { + info("App::dialog_save_file('%s', '%s', '%s')", title.c_str(), filename.c_str(), preference.c_str()); + #if USE_WIN32_FILE_DIALOGS static TCHAR szFilter[] = TEXT ("All Files (*.*)\0*.*\0\0") ; @@ -1690,27 +1748,52 @@ App::dialog_save_file(const std::string &title, std::string &filename) if(GetSaveFileName(&ofn)) { filename=szFilename; - _preferences.set_value("curr_path",dirname(filename)); + _preferences.set_value(preference,dirname(filename)); return true; } return false; #else synfig::String prev_path; - if(!_preferences.get_value("curr_path",prev_path)) + + if(!_preferences.get_value(preference, prev_path)) prev_path="."; + prev_path = absolute_path(prev_path); - Gtk::FileChooserDialog *dialog=new Gtk::FileChooserDialog(title,Gtk::FILE_CHOOSER_ACTION_SAVE); + 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()) + + Widget_Enum *file_type_enum = 0; + if (preference == ANIMATION_DIR_PREFERENCE) + { + file_type_enum = manage(new Widget_Enum()); + file_type_enum->set_param_desc(ParamDesc().set_hint("enum") + .add_enum_value(synfig::RELEASE_VERSION_0_61_08, "0.61.08", strprintf("0.61.08 (%s)", _("current"))) + .add_enum_value(synfig::RELEASE_VERSION_0_61_07, "0.61.07", "0.61.07") + .add_enum_value(synfig::RELEASE_VERSION_0_61_06, "0.61.06", strprintf("0.61.06 %s", _("and older")))); + file_type_enum->set_value(RELEASE_VERSION_END-1); // default to the most recent version + + Gtk::HBox *hbox = manage(new Gtk::HBox); + hbox->pack_start(*manage(new Gtk::Label(_("File Format Version: "))),Gtk::PACK_SHRINK,0); + hbox->pack_start(*file_type_enum,Gtk::PACK_EXPAND_WIDGET,0); + hbox->show_all(); + + dialog->set_extra_widget(*hbox); + } + + if (filename.empty()) + dialog->set_filename(prev_path); + else { 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); @@ -1719,15 +1802,19 @@ App::dialog_save_file(const std::string &title, std::string &filename) if(stat(full_path.c_str(),&s) == -1 && errno == ENOENT) dialog->set_current_name(basename(filename)); } - if(dialog->run()==GTK_RESPONSE_ACCEPT) { - filename=dialog->get_filename(); + + if(dialog->run() == GTK_RESPONSE_ACCEPT) { + if (preference == ANIMATION_DIR_PREFERENCE) + set_file_version(synfig::ReleaseVersion(file_type_enum->get_value())); + filename = dialog->get_filename(); + info("Saving preference %s = '%s' in App::dialog_save_file()", preference.c_str(), dirname(filename).c_str()); + _preferences.set_value(preference, dirname(filename)); delete dialog; - _preferences.set_value("curr_path",dirname(filename)); return true; } + delete dialog; return false; -// return dialog_open_file(title, filename); #endif } @@ -1855,22 +1942,26 @@ App::open_as(std::string filename,std::string as) if(canvas && get_instance(canvas)) { get_instance(canvas)->find_canvas_view(canvas)->present(); - throw (String)strprintf(_("\"%s\" appears to already be open!"),filename.c_str()); + info("%s is already open", filename.c_str()); + // throw (String)strprintf(_("\"%s\" appears to already be open!"),filename.c_str()); } - if(!canvas) - throw (String)strprintf(_("Unable to open file \"%s\""),filename.c_str()); + else + { + if(!canvas) + throw (String)strprintf(_("Unable to open file \"%s\""),filename.c_str()); - add_recent_file(as); + add_recent_file(as); - handle instance(Instance::create(canvas)); + handle instance(Instance::create(canvas)); - if(!instance) - throw (String)strprintf(_("Unable to create instance for \"%s\""),filename.c_str()); + if(!instance) + throw (String)strprintf(_("Unable to create instance for \"%s\""),filename.c_str()); - one_moment.hide(); + one_moment.hide(); - if(instance->is_updated() && App::dialog_yes_no(_("CVS Update"), _("There appears to be a newer version of this file available on the CVS repository.\nWould you like to update now? (It would probably be a good idea)"))) - instance->dialog_cvs_update(); + if(instance->is_updated() && App::dialog_yes_no(_("CVS Update"), _("There appears to be a newer version of this file available on the CVS repository.\nWould you like to update now? (It would probably be a good idea)"))) + instance->dialog_cvs_update(); + } } catch(String x) { @@ -1883,8 +1974,6 @@ App::open_as(std::string filename,std::string as) return false; } - _preferences.set_value("curr_path",dirname(as)); - return true; } @@ -1899,7 +1988,7 @@ App::new_instance() canvas->rend_desc().set_frame_rate(24.0); canvas->rend_desc().set_time_start(0.0); - canvas->rend_desc().set_time_end(00.0); + canvas->rend_desc().set_time_end(5.0); canvas->rend_desc().set_x_res(DPI2DPM(72.0f)); canvas->rend_desc().set_y_res(DPI2DPM(72.0f)); canvas->rend_desc().set_tl(Vector(-4,2.25)); @@ -1912,7 +2001,7 @@ App::new_instance() handle instance = Instance::create(canvas); - if (!getenv("SYNFIG_DISABLE_NEW_CANVAS_EDIT_PROPERTIES")) + if (getenv("SYNFIG_ENABLE_NEW_CANVAS_EDIT_PROPERTIES")) instance->find_canvas_view(canvas)->canvas_properties.present(); } @@ -1921,7 +2010,7 @@ App::dialog_open() { string filename="*.sif"; - while(dialog_open_file("Open", filename)) + while(dialog_open_file("Open", filename, ANIMATION_DIR_PREFERENCE)) { // If the filename still has wildcards, then we should // continue looking for the file we want @@ -2002,7 +2091,8 @@ App::get_instance(etl::handle canvas) void App::dialog_about() { - (new class About())->show(); + if(about) + about->show(); } void