Fix Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged. when selecting Open with windows default viewer (queue processed) and file is not queue processes (Windows only), fixes #4539

This commit is contained in:
heckflosse 2018-05-09 22:28:59 +02:00
parent 4063842564
commit dfdf4bf39d
2 changed files with 19 additions and 10 deletions

View File

@ -127,6 +127,7 @@ void findOriginalEntries (const std::vector<ThumbBrowserEntryBase*>& entries)
FileBrowser::FileBrowser () : FileBrowser::FileBrowser () :
menuLabel(nullptr), menuLabel(nullptr),
miOpenDefaultViewer(nullptr),
selectDF(nullptr), selectDF(nullptr),
thisIsDF(nullptr), thisIsDF(nullptr),
autoDF(nullptr), autoDF(nullptr),
@ -225,8 +226,6 @@ FileBrowser::FileBrowser () :
* *********************/ * *********************/
#if defined(WIN32) #if defined(WIN32)
Gtk::manage(miOpenDefaultViewer = new Gtk::MenuItem (M("FILEBROWSER_OPENDEFAULTVIEWER"))); Gtk::manage(miOpenDefaultViewer = new Gtk::MenuItem (M("FILEBROWSER_OPENDEFAULTVIEWER")));
#else
miOpenDefaultViewer = nullptr;
#endif #endif
// Build a list of menu items // Build a list of menu items
@ -240,7 +239,7 @@ FileBrowser::FileBrowser () :
} }
// Attach them to menu // Attach them to menu
if (!mMenuExtProgs.empty() || miOpenDefaultViewer != nullptr) { if (!mMenuExtProgs.empty() || miOpenDefaultViewer) {
amiExtProg = new Gtk::MenuItem*[mMenuExtProgs.size()]; amiExtProg = new Gtk::MenuItem*[mMenuExtProgs.size()];
int itemNo = 0; int itemNo = 0;
@ -249,11 +248,12 @@ FileBrowser::FileBrowser () :
p++; p++;
Gtk::Menu* submenuExtProg = Gtk::manage (new Gtk::Menu()); Gtk::Menu* submenuExtProg = Gtk::manage (new Gtk::Menu());
if (miOpenDefaultViewer != nullptr) { #ifdef WIN32
if (miOpenDefaultViewer) {
submenuExtProg->attach (*miOpenDefaultViewer, 0, 1, p, p + 1); submenuExtProg->attach (*miOpenDefaultViewer, 0, 1, p, p + 1);
p++; p++;
} }
#endif
for (auto it = mMenuExtProgs.begin(); it != mMenuExtProgs.end(); it++, itemNo++) { for (auto it = mMenuExtProgs.begin(); it != mMenuExtProgs.end(); it++, itemNo++) {
submenuExtProg->attach (*Gtk::manage(amiExtProg[itemNo] = new Gtk::MenuItem ((*it).first)), 0, 1, p, p + 1); submenuExtProg->attach (*Gtk::manage(amiExtProg[itemNo] = new Gtk::MenuItem ((*it).first)), 0, 1, p, p + 1);
p++; p++;
@ -262,11 +262,12 @@ FileBrowser::FileBrowser () :
submenuExtProg->show_all (); submenuExtProg->show_all ();
menuExtProg->set_submenu (*submenuExtProg); menuExtProg->set_submenu (*submenuExtProg);
} else { } else {
if (miOpenDefaultViewer != nullptr) { #ifdef WIN32
if (miOpenDefaultViewer) {
pmenu->attach (*miOpenDefaultViewer, 0, 1, p, p + 1); pmenu->attach (*miOpenDefaultViewer, 0, 1, p, p + 1);
p++; p++;
} }
#endif
for (auto it = mMenuExtProgs.begin(); it != mMenuExtProgs.end(); it++, itemNo++) { for (auto it = mMenuExtProgs.begin(); it != mMenuExtProgs.end(); it++, itemNo++) {
pmenu->attach (*Gtk::manage(amiExtProg[itemNo] = new Gtk::MenuItem ((*it).first)), 0, 1, p, p + 1); pmenu->attach (*Gtk::manage(amiExtProg[itemNo] = new Gtk::MenuItem ((*it).first)), 0, 1, p, p + 1);
p++; p++;
@ -419,9 +420,11 @@ FileBrowser::FileBrowser () :
amiExtProg[i]->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), amiExtProg[i])); amiExtProg[i]->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), amiExtProg[i]));
} }
if (miOpenDefaultViewer != nullptr) { #ifdef WIN32
if (miOpenDefaultViewer) {
miOpenDefaultViewer->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), miOpenDefaultViewer)); miOpenDefaultViewer->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), miOpenDefaultViewer));
} }
#endif
trash->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), trash)); trash->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), trash));
untrash->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), untrash)); untrash->signal_activate().connect (sigc::bind(sigc::mem_fun(*this, &FileBrowser::menuItemActivated), untrash));
@ -984,8 +987,10 @@ void FileBrowser::menuItemActivated (Gtk::MenuItem* m)
tbl->clearFromCacheRequested (mselected, true); tbl->clearFromCacheRequested (mselected, true);
//queue_draw (); //queue_draw ();
} else if (miOpenDefaultViewer != nullptr && m == miOpenDefaultViewer) { #ifdef WIN32
} else if (miOpenDefaultViewer && m == miOpenDefaultViewer) {
openDefaultViewer(1); openDefaultViewer(1);
#endif
} }
} }
@ -1091,6 +1096,7 @@ void FileBrowser::partPasteProfile ()
} }
} }
#ifdef WIN32
void FileBrowser::openDefaultViewer (int destination) void FileBrowser::openDefaultViewer (int destination)
{ {
bool success = true; bool success = true;
@ -1104,10 +1110,11 @@ void FileBrowser::openDefaultViewer (int destination)
} }
if (!success) { if (!success) {
Gtk::MessageDialog msgd (M("MAIN_MSG_IMAGEUNPROCESSED"), true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); Gtk::MessageDialog msgd(getToplevelWindow(this), M("MAIN_MSG_IMAGEUNPROCESSED"), true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
msgd.run (); msgd.run ();
} }
} }
#endif
bool FileBrowser::keyPressed (GdkEventKey* event) bool FileBrowser::keyPressed (GdkEventKey* event)
{ {

View File

@ -190,7 +190,9 @@ public:
void selectImage (Glib::ustring fname); void selectImage (Glib::ustring fname);
void openNextPreviousEditorImage (Glib::ustring fname, eRTNav eNextPrevious); void openNextPreviousEditorImage (Glib::ustring fname, eRTNav eNextPrevious);
#ifdef WIN32
void openDefaultViewer (int destination); void openDefaultViewer (int destination);
#endif
void thumbRearrangementNeeded (); void thumbRearrangementNeeded ();
void _thumbRearrangementNeeded (); void _thumbRearrangementNeeded ();