--- brackets-shell/appshell/appshell_extensions_gtk.cpp +++ brackets-shell/appshell/appshell_extensions_gtk.cpp @@ -39,6 +39,9 @@ #include GtkWidget* _menuWidget; + +// The global ClientHandler reference. +extern CefRefPtr g_handler; // Supported browsers (order matters): // - google-chorme @@ -532,21 +535,32 @@ void CloseWindow(CefRefPtr browser) { + if (browser.get()) { + isReallyClosing = true; + browser->GetHost()->CloseBrowser(true); + + // //# Hack because CEF's CloseBrowser() is bad. Should emit delete_event instead of directly destroying widget + //GtkWidget* hwnd = gtk_widget_get_toplevel (browser->GetHost()->GetWindowHandle() ); + //GtkWindow* hwnd = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(g_handler->GetMainHwnd()))); +// if(gtk_widget_is_toplevel (hwnd)) + //g_message("Called destroy"); + //gtk_widget_destroy(gtk_widget_get_toplevel(GTK_WIDGET(g_handler->GetMainHwnd()))); + //gtk_signal_emit_by_name(GTK_OBJECT(hwnd), "delete_event"); + // else + + // pass this message onto the window + if (g_handler && g_handler->GetMainHwnd()) { + GtkWidget* hwnd = gtk_widget_get_toplevel(GTK_WIDGET(g_handler->GetMainHwnd())); + if(gtk_widget_is_toplevel (hwnd)) + gtk_signal_emit_by_name(GTK_OBJECT(hwnd), "delete_event"); + } + } +} + +void BringBrowserWindowToFront(CefRefPtr browser) +{ if (browser.get()) { - isReallyClosing = true; - // //# Hack because CEF's CloseBrowser() is bad. Should emit delete_event instead of directly destroying widget - // GtkWidget* hwnd = gtk_widget_get_toplevel (browser->GetHost()->GetWindowHandle() ); - // if(gtk_widget_is_toplevel (hwnd)) - // gtk_signal_emit_by_name(GTK_OBJECT(hwnd), "delete_event"); - // else - browser->GetHost()->CloseBrowser(true); - } -} - -void BringBrowserWindowToFront(CefRefPtr browser) -{ - if (browser.get()) { - GtkWindow* hwnd = GTK_WINDOW(browser->GetHost()->GetWindowHandle()); + GtkWindow* hwnd = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(g_handler->GetMainHwnd()))); if (hwnd) gtk_window_present(hwnd); } @@ -833,3 +847,4 @@ // TODO } +