From ea8bdde224854cbec07a3b198180d9c4259375d6 Mon Sep 17 00:00:00 2001 From: "Stanislav N. aka pztrn" Date: Tue, 22 Nov 2016 01:10:31 +0500 Subject: [PATCH] Temporary disabled all modals on Linuxes due to mattn/go-gtk#289. --- launcher/launcher_object.go | 18 +++--- ui/favorite.go | 33 ++++++---- ui/mainwindow.go | 48 +++++++++------ ui/mainwindow_launch.go | 119 +++++++++++++++++++++++------------- ui/options.go | 17 ++++-- ui/options_profile.go | 48 ++++++++++----- 6 files changed, 180 insertions(+), 103 deletions(-) diff --git a/launcher/launcher_object.go b/launcher/launcher_object.go index 8c0e28a..2806abe 100644 --- a/launcher/launcher_object.go +++ b/launcher/launcher_object.go @@ -34,13 +34,17 @@ type Launcher struct { func (l *Launcher) CheckForLaunchedUrbanTerror() error { if l.launched { - mbox_string := "Game is launched.\n\nCannot quit, because game is launched.\nQuit Urban Terror to exit URTrator!" - m := gtk.NewMessageDialog(nil, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) - m.Response(func() { - m.Destroy() - }) - m.Run() - return errors.New("User didn't select valid profile, mismatch with server's version.") + // Temporary disable all these modals on Linux. + // See https://github.com/mattn/go-gtk/issues/289. + if runtime.GOOS != "linux" { + mbox_string := "Game is launched.\n\nCannot quit, because game is launched.\nQuit Urban Terror to exit URTrator!" + m := gtk.NewMessageDialog(nil, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) + m.Response(func() { + m.Destroy() + }) + m.Run() + return errors.New("User didn't select valid profile, mismatch with server's version.") + } } return nil diff --git a/ui/favorite.go b/ui/favorite.go index 9ba860e..5a4374e 100644 --- a/ui/favorite.go +++ b/ui/favorite.go @@ -14,6 +14,7 @@ import ( "encoding/base64" "errors" "fmt" + "runtime" "strings" // Local @@ -205,12 +206,16 @@ func (f *FavoriteDialog) saveFavorite() error { //ctx.Requester.Pooler.UpdateSpecificServer(f.server) if len(f.server_address.GetText()) == 0 { - mbox_string := "Server address is empty.\n\nServers without address cannot be added." - m := gtk.NewMessageDialog(f.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) - m.Response(func() { - m.Destroy() - }) - m.Run() + // Temporary disable all these modals on Linux. + // See https://github.com/mattn/go-gtk/issues/289. + if runtime.GOOS != "linux" { + mbox_string := "Server address is empty.\n\nServers without address cannot be added." + m := gtk.NewMessageDialog(f.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) + m.Response(func() { + m.Destroy() + }) + m.Run() + } return errors.New("No server address specified") } @@ -224,12 +229,16 @@ func (f *FavoriteDialog) saveFavorite() error { f.server.Port = port if len(f.profile.GetActiveText()) == 0 { - mbox_string := "Profile wasn't selected.\n\nPlease, select valid profile for this server.\nIf you haven't add profiles yet - you can do it\nin options on \"Urban Terror\" tab." - m := gtk.NewMessageDialog(f.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) - m.Response(func() { - m.Destroy() - }) - m.Run() + // Temporary disable all these modals on Linux. + // See https://github.com/mattn/go-gtk/issues/289. + if runtime.GOOS != "linux" { + mbox_string := "Profile wasn't selected.\n\nPlease, select valid profile for this server.\nIf you haven't add profiles yet - you can do it\nin options on \"Urban Terror\" tab." + m := gtk.NewMessageDialog(f.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) + m.Response(func() { + m.Destroy() + }) + m.Run() + } return errors.New("No game profile specified") } diff --git a/ui/mainwindow.go b/ui/mainwindow.go index 2424951..231f266 100644 --- a/ui/mainwindow.go +++ b/ui/mainwindow.go @@ -234,12 +234,18 @@ func (m *MainWindow) deleteFromFavorites() { } if not_favorited { - mbox_string := "Cannot delete server from favorites.\n\nServer isn't favorited." - d := gtk.NewMessageDialog(m.window, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, mbox_string) - d.Response(func() { - d.Destroy() - }) - d.Run() + // Temporary disable all these modals on Linux. + // See https://github.com/mattn/go-gtk/issues/289. + if runtime.GOOS != "linux" { + mbox_string := "Cannot delete server from favorites.\n\nServer isn't favorited." + d := gtk.NewMessageDialog(m.window, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, mbox_string) + d.Response(func() { + d.Destroy() + }) + d.Run() + } else { + ctx.Eventer.LaunchEvent("setToolbarLabelText", map[string]string{"text": "Server isn't favorited"}) + } } ctx.Eventer.LaunchEvent("loadFavoriteServers", map[string]string{}) @@ -250,19 +256,23 @@ func (m *MainWindow) deleteFromFavorites() { func (m *MainWindow) dropDatabasesData() { fmt.Println("Dropping database data...") var will_continue bool = false - mbox_string := "You are about to drop whole database data.\n\nAfter clicking \"YES\" ALL data in database (servers, profiles, settings, etc.)\nwill be lost FOREVER. Are you sure?" - d := gtk.NewMessageDialog(m.window, gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, gtk.BUTTONS_YES_NO, mbox_string) - d.Connect("response", func(resp *glib.CallbackContext) { - if resp.Args(0) == 4294967287 { - will_continue = false - } else { - will_continue = true - } - }) - d.Response(func() { - d.Destroy() - }) - d.Run() + // Temporary disable all these modals on Linux. + // See https://github.com/mattn/go-gtk/issues/289. + if runtime.GOOS != "linux" { + mbox_string := "You are about to drop whole database data.\n\nAfter clicking \"YES\" ALL data in database (servers, profiles, settings, etc.)\nwill be lost FOREVER. Are you sure?" + d := gtk.NewMessageDialog(m.window, gtk.DIALOG_MODAL, gtk.MESSAGE_WARNING, gtk.BUTTONS_YES_NO, mbox_string) + d.Connect("response", func(resp *glib.CallbackContext) { + if resp.Args(0) == 4294967287 { + will_continue = false + } else { + will_continue = true + } + d.Destroy() + }) + d.Run() + } else { + ctx.Eventer.LaunchEvent("setToolbarLabelText", map[string]string{"text": "Remove ~/.config/urtrator/database.sqlite3 manually!"}) + } if will_continue { ctx.Database.Db.MustExec("DELETE FROM servers") diff --git a/ui/mainwindow_launch.go b/ui/mainwindow_launch.go index 9fae39a..2180b29 100644 --- a/ui/mainwindow_launch.go +++ b/ui/mainwindow_launch.go @@ -4,6 +4,7 @@ import ( // stdlib "errors" "fmt" + "runtime" "strings" // Local @@ -57,19 +58,25 @@ func (m *MainWindow) launchAsUsual() error { // we should show notification to user. if len(server_profile.Name) == 0 { var will_continue bool = false - mbox_string := "Selected server is offline.\n\nWould you still want to launch Urban Terror?\nIt will just launch a game, without connecting to\nany server." - messagebox := gtk.NewMessageDialog(m.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_YES_NO, mbox_string) - messagebox.Connect("response", func(resp *glib.CallbackContext) { - if resp.Args(0) == 4294967287 { - will_continue = false - } else { - will_continue = true - } - }) - messagebox.Response(func() { - messagebox.Destroy() - }) - messagebox.Run() + // Temporary disable all these modals on Linux. + // See https://github.com/mattn/go-gtk/issues/289. + if runtime.GOOS != "linux" { + mbox_string := "Selected server is offline.\n\nWould you still want to launch Urban Terror?\nIt will just launch a game, without connecting to\nany server." + messagebox := gtk.NewMessageDialog(m.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_YES_NO, mbox_string) + messagebox.Connect("response", func(resp *glib.CallbackContext) { + if resp.Args(0) == 4294967287 { + will_continue = false + } else { + will_continue = true + } + messagebox.Destroy() + }) + messagebox.Run() + } else { + // We're okay to connect to empty server, temporary. + will_continue = true + } + if !will_continue { return errors.New("User declined to connect to offline server") } @@ -83,12 +90,18 @@ func (m *MainWindow) launchAsUsual() error { // This check only relevant to "Servers" tab, favorite servers // have profiles defined (see next). if len(profile_name) == 0 { - mbox_string := "Invalid game profile selected.\n\nPlease, select profile and retry." - messagebox := gtk.NewMessageDialog(m.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) - messagebox.Response(func() { - messagebox.Destroy() - }) - messagebox.Run() + // Temporary disable all these modals on Linux. + // See https://github.com/mattn/go-gtk/issues/289. + if runtime.GOOS != "linux" { + mbox_string := "Invalid game profile selected.\n\nPlease, select profile and retry." + messagebox := gtk.NewMessageDialog(m.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) + messagebox.Response(func() { + messagebox.Destroy() + }) + messagebox.Run() + } else { + ctx.Eventer.LaunchEvent("setToolbarLabelText", map[string]string{"text": "Invalid game profile selected."}) + } return errors.New("User didn't select valid profile.") } user_profile = ctx.Cache.Profiles[profile_name].Profile @@ -97,12 +110,18 @@ func (m *MainWindow) launchAsUsual() error { // information have higher priority, so we just override it :) user_profile_cached, ok := ctx.Cache.Profiles[server_profile.ProfileToUse] if !ok { - mbox_string := "Invalid game profile specified for favorite server.\n\nPlease, edit your favorite server, select valid profile and retry." - messagebox := gtk.NewMessageDialog(m.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) - messagebox.Response(func() { - messagebox.Destroy() - }) - messagebox.Run() + // Temporary disable all these modals on Linux. + // See https://github.com/mattn/go-gtk/issues/289. + if runtime.GOOS != "linux" { + mbox_string := "Invalid game profile specified for favorite server.\n\nPlease, edit your favorite server, select valid profile and retry." + messagebox := gtk.NewMessageDialog(m.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) + messagebox.Response(func() { + messagebox.Destroy() + }) + messagebox.Run() + } else { + ctx.Eventer.LaunchEvent("setToolbarLabelText", map[string]string{"text": "Invalid game profile specified in favorite entry."}) + } return errors.New("User didn't select valid profile.") } user_profile = user_profile_cached.Profile @@ -154,19 +173,25 @@ func (m *MainWindow) launchWithQuickConnect() error { func (m *MainWindow) launchActually(server_profile *datamodels.Server, user_profile *datamodels.Profile, password string, nickname_to_use string) error { if server_profile.Name == "" { var will_continue bool = false - mbox_string := "Selected server is offline.\n\nWould you still want to launch Urban Terror?\nIt will just launch a game, without connecting to\nany server." - messagebox := gtk.NewMessageDialog(m.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_YES_NO, mbox_string) - messagebox.Connect("response", func(resp *glib.CallbackContext) { - if resp.Args(0) == 4294967287 { - will_continue = false - } else { - will_continue = true - } - }) - messagebox.Response(func() { - messagebox.Destroy() - }) - messagebox.Run() + // Temporary disable all these modals on Linux. + // See https://github.com/mattn/go-gtk/issues/289. + if runtime.GOOS != "linux" { + mbox_string := "Selected server is offline.\n\nWould you still want to launch Urban Terror?\nIt will just launch a game, without connecting to\nany server." + messagebox := gtk.NewMessageDialog(m.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_YES_NO, mbox_string) + messagebox.Connect("response", func(resp *glib.CallbackContext) { + if resp.Args(0) == 4294967287 { + will_continue = false + } else { + will_continue = true + } + messagebox.Destroy() + }) + messagebox.Run() + } else { + // We're ok here, temporary. + will_continue = true + } + if !will_continue { return errors.New("User declined to connect to offline server") } @@ -174,12 +199,18 @@ func (m *MainWindow) launchActually(server_profile *datamodels.Server, user_prof // Check if server is applicable for selected profile. if server_profile.Version != user_profile.Version { - mbox_string := "Invalid game profile selected.\n\nSelected profile have different game version than server.\nPlease, select valid profile and retry." - messagebox := gtk.NewMessageDialog(m.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) - messagebox.Response(func() { - messagebox.Destroy() - }) - messagebox.Run() + // Temporary disable all these modals on Linux. + // See https://github.com/mattn/go-gtk/issues/289. + if runtime.GOOS != "linux" { + mbox_string := "Invalid game profile selected.\n\nSelected profile have different game version than server.\nPlease, select valid profile and retry." + messagebox := gtk.NewMessageDialog(m.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) + messagebox.Response(func() { + messagebox.Destroy() + }) + messagebox.Run() + } else { + ctx.Eventer.LaunchEvent("setToolbarLabelText", map[string]string{"text": "Invalid game profile selected."}) + } return errors.New("User didn't select valid profile, mismatch with server's version.") } diff --git a/ui/options.go b/ui/options.go index 4a97bd0..8e20cef 100644 --- a/ui/options.go +++ b/ui/options.go @@ -12,6 +12,7 @@ package ui import ( // stdlib "fmt" + "runtime" // Local "github.com/pztrn/urtrator/datamodels" @@ -66,12 +67,16 @@ func (o *OptionsDialog) closeOptionsDialogWithSaving() { o.saveGeneral() - mbox_string := "Some options require application restart to be applied." - m := gtk.NewMessageDialog(o.window, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, mbox_string) - m.Response(func() { - m.Destroy() - }) - m.Run() + // Temporary disable all these modals on Linux. + // See https://github.com/mattn/go-gtk/issues/289. + if runtime.GOOS != "linux" { + mbox_string := "Some options require application restart to be applied." + m := gtk.NewMessageDialog(o.window, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, mbox_string) + m.Response(func() { + m.Destroy() + }) + m.Run() + } o.window.Destroy() } diff --git a/ui/options_profile.go b/ui/options_profile.go index 1fbce2d..eefeb52 100644 --- a/ui/options_profile.go +++ b/ui/options_profile.go @@ -71,12 +71,18 @@ func (op *OptionsProfile) browseForBinaryHelper() { if runtime.GOARCH == "amd64" { if len(filename) > 0 && strings.Split(filename, ".")[1] != "x86_64" && strings.Split(filename, ".")[0] != "Quake3-UrT" { fmt.Println("Invalid binary selected!") - mbox_string := "Invalid binary selected!\nAccording to your OS, it should be Quake3-UrT.x86_64." - m := gtk.NewMessageDialog(op.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) - m.Response(func() { - m.Destroy() - }) - m.Run() + // Temporary disable all these modals on Linux. + // See https://github.com/mattn/go-gtk/issues/289. + if runtime.GOOS != "linux" { + mbox_string := "Invalid binary selected!\nAccording to your OS, it should be Quake3-UrT.x86_64." + m := gtk.NewMessageDialog(op.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) + m.Response(func() { + m.Destroy() + }) + m.Run() + } else { + // + } op.binary_path.SetText("") } } @@ -87,21 +93,33 @@ func (op *OptionsProfile) browseForBinaryHelper() { filename = strings.Split(filename, "Quake3-UrT.app")[1] if len(filename) > 0 && !strings.Contains(strings.Split(filename, ".")[1], "x86_64") && !strings.Contains(strings.Split(filename, ".")[0], "Quake3-UrT") { fmt.Println("Invalid binary selected!") - mbox_string := "Invalid binary selected!\nAccording to your OS, it should be Quake3-UrT.app/Contents/MacOS/Quake3-UrT.x86_64." + // Temporary disable all these modals on Linux. + // See https://github.com/mattn/go-gtk/issues/289. + if runtime.GOOS != "linux" { + mbox_string := "Invalid binary selected!\nAccording to your OS, it should be Quake3-UrT.app/Contents/MacOS/Quake3-UrT.x86_64." + m := gtk.NewMessageDialog(op.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) + m.Response(func() { + m.Destroy() + }) + m.Run() + } else { + // + } + op.binary_path.SetText("") + } + } else { + // Temporary disable all these modals on Linux. + // See https://github.com/mattn/go-gtk/issues/289. + if runtime.GOOS != "linux" { + mbox_string := "Invalid binary selected!\nAccording to your OS, it should be Quake3-UrT.app/Contents/MacOS/Quake3-UrT.x86_64.\n\nNote, that currently URTrator supports only official binary." m := gtk.NewMessageDialog(op.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) m.Response(func() { m.Destroy() }) m.Run() - op.binary_path.SetText("") + } else { + // } - } else { - mbox_string := "Invalid binary selected!\nAccording to your OS, it should be Quake3-UrT.app/Contents/MacOS/Quake3-UrT.x86_64.\n\nNote, that currently URTrator supports only official binary." - m := gtk.NewMessageDialog(op.window, gtk.DIALOG_MODAL, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, mbox_string) - m.Response(func() { - m.Destroy() - }) - m.Run() } } }