diff --git a/radiant/gtkdlgs.cpp b/radiant/gtkdlgs.cpp index 2930b183..70f7bff1 100644 --- a/radiant/gtkdlgs.cpp +++ b/radiant/gtkdlgs.cpp @@ -2074,22 +2074,6 @@ void DoThickenDlg(){ static const int ABT_WIDGET_PADDING = 8; -//! @note kaz 04/01/2012 - not in use -void about_button_changelog( GtkWidget *widget, gpointer data ){ - Str log; - log = g_strAppPath; - log += "changelog.txt"; - OpenURL( log.GetBuffer() ); -} - -//! @note kaz 04/01/2012 - not in use -void about_button_credits( GtkWidget *widget, gpointer data ){ - Str cred; - cred = g_strAppPath; - cred += "credits.html"; - OpenURL( cred.GetBuffer() ); -} - void DoAbout(){ GtkWidget *dialog, *content_area, *button; GtkDialogFlags flags = GTK_DIALOG_DESTROY_WITH_PARENT; @@ -2225,20 +2209,6 @@ void DoAbout(){ gtk_widget_show( gl_ext_textview ); - /* - button = gtk_button_new_with_label( _( "Credits" ) ); - gtk_widget_show( button ); - gtk_box_pack_end( GTK_BOX( button_hbox ), button, FALSE, FALSE, 0 ); - g_signal_connect( G_OBJECT( button ), "clicked", - G_CALLBACK( about_button_credits ), NULL ); - - button = gtk_button_new_with_label( _( "Changelog" ) ); - gtk_widget_show( button ); - gtk_box_pack_end( GTK_BOX( button_hbox ), button, FALSE, FALSE, 0 ); - g_signal_connect( G_OBJECT( button ), "clicked", - G_CALLBACK( about_button_changelog ), NULL ); - */ - gtk_dialog_run( GTK_DIALOG( dialog ) ); gtk_widget_destroy( dialog ); diff --git a/radiant/gtkmisc.cpp b/radiant/gtkmisc.cpp index fa16daff..21dd9f49 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; } @@ -1662,14 +1662,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); @@ -1677,7 +1693,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 3f1d11a7..3f14c9e9 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 2f4e3f50..437d9263 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() ); } /*! @@ -4485,7 +4485,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(){ @@ -6565,7 +6565,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 @@ -6573,11 +6573,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(){