# HG changeset patch # User Michael C. Grant and John W. Eaton # Date 1394466397 18000 # Node ID ca1648b2e67378bdf4203c4b215230b59e897894 # Parent 4daf647c86c351d75e8fec8d137a62e99e565080 set default toolkit when registering toolkits (bug #41665). * graphics.in.h, graphics.cc (gtk_manager::gtk_manager): Don't set default toolkit. (gtk_manager::do_register_toolkit): Set default toolkit here. (gtk_manager::do_unregister_toolkit): If removing default toolkit, reset it using same rules as in do_register_toolkit. diff -r 4daf647c86c3 -r ca1648b2e673 libinterp/corefcn/graphics.cc --- a/libinterp/corefcn/graphics.cc Tue Mar 11 21:15:06 2014 -0400 +++ b/libinterp/corefcn/graphics.cc Mon Mar 10 10:46:37 2014 -0500 @@ -9584,18 +9584,6 @@ gtk_manager *gtk_manager::instance = 0; -gtk_manager::gtk_manager (void) - : dtk (), available_toolkits (), loaded_toolkits () -{ -#if defined (HAVE_QT) - dtk = display_info::display_available () ? "qt" : "gnuplot"; -#elif defined (HAVE_FLTK) - dtk = display_info::display_available () ? "fltk" : "gnuplot"; -#else - dtk = "gnuplot"; -#endif -} - void gtk_manager::create_instance (void) { @@ -9640,6 +9628,45 @@ return retval; } +void +gtk_manager::do_register_toolkit (const std::string& name) +{ + if (dtk.empty () || name == "qt" + || (name == "fltk" + && available_toolkits.find ("qt") == available_toolkits.end ())) + dtk = name; + + available_toolkits.insert (name); +} + +void +gtk_manager::do_unregister_toolkit (const std::string& name) +{ + available_toolkits.erase (name); + + if (dtk == name) + { + if (available_toolkits.empty ()) + dtk.clear (); + else + { + const_available_toolkits_iterator pa = available_toolkits.begin (); + + dtk = *pa++; + + while (pa != available_toolkits.end ()) + { + std::string name = *pa++; + + if (name == "qt" + || (name == "fltk" + && available_toolkits.find ("qt") == available_toolkits.end ())) + dtk = name; + } + } + } +} + DEFUN (available_graphics_toolkits, , , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} available_graphics_toolkits ()\n\ diff -r 4daf647c86c3 -r ca1648b2e673 libinterp/corefcn/graphics.in.h --- a/libinterp/corefcn/graphics.in.h Tue Mar 11 21:15:06 2014 -0400 +++ b/libinterp/corefcn/graphics.in.h Mon Mar 10 10:46:37 2014 -0500 @@ -2273,7 +2273,7 @@ private: - gtk_manager (void); + gtk_manager (void) { } ~gtk_manager (void) { } @@ -2322,15 +2322,9 @@ graphics_toolkit do_get_toolkit (void) const; - void do_register_toolkit (const std::string& name) - { - available_toolkits.insert (name); - } - - void do_unregister_toolkit (const std::string& name) - { - available_toolkits.erase (name); - } + void do_register_toolkit (const std::string& name); + + void do_unregister_toolkit (const std::string& name); void do_load_toolkit (const graphics_toolkit& tk) {