diff --git a/radiant/gtkdlgs.cpp b/radiant/gtkdlgs.cpp index f312eafa..ce6f6a57 100644 --- a/radiant/gtkdlgs.cpp +++ b/radiant/gtkdlgs.cpp @@ -2063,7 +2063,7 @@ void about_button_changelog( GtkWidget *widget, gpointer data ){ Str log; log = g_strAppPath; log += "changelog.txt"; - OpenURL( log.GetBuffer() ); + OpenURL( widget, log.GetBuffer() ); } //! @note kaz 04/01/2012 - not in use @@ -2071,7 +2071,7 @@ void about_button_credits( GtkWidget *widget, gpointer data ){ Str cred; cred = g_strAppPath; cred += "credits.html"; - OpenURL( cred.GetBuffer() ); + OpenURL( widget, cred.GetBuffer() ); } void DoAbout(){ diff --git a/radiant/gtkmisc.cpp b/radiant/gtkmisc.cpp index 227e6fa7..930702ec 100644 --- a/radiant/gtkmisc.cpp +++ b/radiant/gtkmisc.cpp @@ -827,7 +827,7 @@ gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ) } gint dialog_url_callback( GtkWidget *widget, GdkEvent* event, gpointer data ){ - OpenURL( (const char *)g_object_get_data( G_OBJECT( widget ), "URL" ) ); + OpenURL( widget, (const char *)g_object_get_data( G_OBJECT( widget ), "URL" ) ); return TRUE; } @@ -1659,14 +1659,30 @@ bool WINAPI color_dialog( void *parent, float *color, const char* title ){ return false; } -void OpenURL( const char *url ){ +void OpenURL( GtkWidget *parent, const char *url ){ #ifndef _WIN32 char command[2 * PATH_MAX]; #endif + GError *gerror = NULL; + gboolean result; Sys_Printf( "OpenURL: %s\n", url ); + +#if GTK_CHECK_VERSION( 2, 14, 0 ) +# if GTK_CHECK_VERSION( 3, 22, 0 ) + result = gtk_show_uri_on_window( GTK_WINDOW( parent ), url, GDK_CURRENT_TIME, &gerror ); +# else + result = gtk_show_uri( gtk_window_get_screen( GTK_WINDOW( parent ) ), url, GDK_CURRENT_TIME, &gerror ); +# endif + if ( result ) { + return; + } + Sys_Printf( "Could not open URL: %s\n", gerror->message ); + g_error_free( gerror ); +#endif + #ifdef _WIN32 - ShellExecute( (HWND)GDK_WINDOW_HWND( gtk_widget_get_window( g_pParentWnd->m_pWidget ) ), "open", url, NULL, NULL, SW_SHOW ); + ShellExecute( (HWND)GDK_WINDOW_HWND( gtk_widget_get_window( parent ) ), "open", url, NULL, NULL, SW_SHOW ); #else # ifdef __APPLE__ snprintf(command, sizeof(command), "open '%s' &", url); @@ -1674,7 +1690,7 @@ void OpenURL( const char *url ){ snprintf(command, sizeof(command), "xdg-open '%s' &", url); # endif if (system(command) != 0) { - gtk_MessageBox( g_pParentWnd->m_pWidget, _( "Failed to launch web browser!" ) ); + gtk_MessageBox( parent, _( "Failed to launch web browser!" ) ); } #endif } diff --git a/radiant/gtkmisc.h b/radiant/gtkmisc.h index 4f86d24d..34910bde 100644 --- a/radiant/gtkmisc.h +++ b/radiant/gtkmisc.h @@ -95,7 +95,7 @@ bool WINAPI color_dialog( void *parent, float *color, const char* title = "Choos void dialog_button_callback( GtkWidget *widget, gpointer data ); gint dialog_delete_callback( GtkWidget *widget, GdkEvent* event, gpointer data ); -void OpenURL( const char *url ); +void OpenURL( GtkWidget *parent, const char *url ); void CheckMenuSplitting( GtkWidget *&menu ); diff --git a/radiant/mainframe.cpp b/radiant/mainframe.cpp index 6a11932a..02e3c98f 100644 --- a/radiant/mainframe.cpp +++ b/radiant/mainframe.cpp @@ -878,7 +878,7 @@ void AddMenuItem( GtkWidget* item, unsigned int id ){ } void MainFrame::handle_help_command( int id ){ - OpenURL( mHelpURLs[id]->GetBuffer() ); + OpenURL( m_pWidget, mHelpURLs[id]->GetBuffer() ); } /*! @@ -4482,7 +4482,7 @@ void MainFrame::OnFileCheckUpdate(){ #endif URL += "&Version_dlup=" RADIANT_VERSION; g_PrefsDlg.mGamesDialog.AddPacksURL( URL ); - OpenURL( URL.GetBuffer() ); + OpenURL( m_pWidget, URL.GetBuffer() ); } void MainFrame::OnEditUndo(){ @@ -6562,7 +6562,7 @@ void MainFrame::OnPluginsRefresh(){ // open the Q3Rad manual void MainFrame::OnHelp(){ - OpenURL( "http://icculus.org/gtkradiant/documentation/q3radiant_manual/index.htm" ); + OpenURL( m_pWidget, "http://icculus.org/gtkradiant/documentation/q3radiant_manual/index.htm" ); } // FIXME: we'll go towards a unified help thing soon @@ -6570,11 +6570,11 @@ void MainFrame::OnHelpLinks(){ Str link; link = g_strAppPath; link += "links.htm"; - OpenURL( link.GetBuffer() ); + OpenURL( m_pWidget, link.GetBuffer() ); } void MainFrame::OnHelpBugreport(){ - OpenURL( "https://github.com/TTimo/GtkRadiant/issues" ); + OpenURL( m_pWidget, "https://github.com/TTimo/GtkRadiant/issues" ); } void MainFrame::OnHelpCommandlist(){