From f346709937e94ed1aca1039ad7083a0968e94647 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 28 Jan 2018 08:37:56 +0100 Subject: [PATCH 1/6] - new rocket smoke sprites by Talon1024. The old ones which are from Heretic have been removed as a consequence. --- wadsrc/static/credits/rsmk.txt | 3 +++ wadsrc/static/sprites/rsmka0.png | Bin 0 -> 992 bytes wadsrc/static/sprites/rsmkb0.png | Bin 0 -> 1176 bytes wadsrc/static/sprites/rsmkc0.png | Bin 0 -> 1269 bytes wadsrc/static/sprites/rsmkd0.png | Bin 0 -> 1103 bytes wadsrc/static/sprites/rsmke0.png | Bin 0 -> 1166 bytes wadsrc_extra/static/sprites/rsmka0.png | Bin 376 -> 0 bytes wadsrc_extra/static/sprites/rsmkb0.png | Bin 388 -> 0 bytes wadsrc_extra/static/sprites/rsmkc0.png | Bin 550 -> 0 bytes wadsrc_extra/static/sprites/rsmkd0.png | Bin 380 -> 0 bytes wadsrc_extra/static/sprites/rsmke0.png | Bin 255 -> 0 bytes 11 files changed, 3 insertions(+) create mode 100644 wadsrc/static/credits/rsmk.txt create mode 100644 wadsrc/static/sprites/rsmka0.png create mode 100644 wadsrc/static/sprites/rsmkb0.png create mode 100644 wadsrc/static/sprites/rsmkc0.png create mode 100644 wadsrc/static/sprites/rsmkd0.png create mode 100644 wadsrc/static/sprites/rsmke0.png delete mode 100644 wadsrc_extra/static/sprites/rsmka0.png delete mode 100644 wadsrc_extra/static/sprites/rsmkb0.png delete mode 100644 wadsrc_extra/static/sprites/rsmkc0.png delete mode 100644 wadsrc_extra/static/sprites/rsmkd0.png delete mode 100644 wadsrc_extra/static/sprites/rsmke0.png diff --git a/wadsrc/static/credits/rsmk.txt b/wadsrc/static/credits/rsmk.txt new file mode 100644 index 000000000..e37c20086 --- /dev/null +++ b/wadsrc/static/credits/rsmk.txt @@ -0,0 +1,3 @@ +These sprites were made by Talon1024 and have been put in the public domain: + +https://forum.zdoom.org/viewtopic.php?f=15&t=59245 diff --git a/wadsrc/static/sprites/rsmka0.png b/wadsrc/static/sprites/rsmka0.png new file mode 100644 index 0000000000000000000000000000000000000000..8387c22445f98532f8083d00a8e838b4c5d22444 GIT binary patch literal 992 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 literal 0 HcmV?d00001 diff --git a/wadsrc/static/sprites/rsmkd0.png b/wadsrc/static/sprites/rsmkd0.png new file mode 100644 index 0000000000000000000000000000000000000000..08d3c95e5347eb2a31c9a160f0c41d95f1d8ae94 GIT binary patch literal 1103 zcmV-V1hD&wP)Z-0D z(slyG?T8^lSwyUOB*Z2=Sh664Lrh2zLJAgpB-roZ*T%+?#)W zb&l@voh!b6{mQp*-+27^u}_kOrfC=q1|rXMI-L&27}7LFYmIY`s;Y>h2UhyiiMyoOHNNuIX*u2 ztE;O-QG`;8*=)v>Cr`X`&Jl(oTI>IrIp;V!Iuh1ePESucKR;(@XUA);SzcZyNfNZy z?PNj-l#~*s6j2nlqZ?z|(eB;5M-)X&r&C_OeCfO0E=nn+lz8tciUQ{x7Z(@2efw6Z zZnsNSRRDPJ+g%QaLvjE9eb(02xV*fiCBU0o3b0YMO8t>x_OjDv#%zqGVORaJQJ5ke5hF?C&IjN$nBSVU2TT3=tM zX&SDtulfG{J5QfJ^;wqToMU@?TTCVsuCK2FsHzHM3_%bOMG-;>(lo^wgOn1jH7br{ zrqe0o@tCcxEr0XoP0}>QImgM#iJ#48Et{`jzZP0+thGFU{@gFX_|&8ib&IxrfE1lJQTaTyB=UP8i|dK4e~rk z{rK^NU%!44h9TBkthMca77{K73#} z9D46P07@y8Qe;_%QVL@XP17)+&#CL0x~_4~0dRPDDB?IK&vSac9&2lBh>eX6ueENk zwZJEi<5svpWs#=3t^sh)ad2=TvMghHd71U~b;N@Q5B#E&h3ShIFT`Ll@FyoHqAW}H z_xHUJ0)XA!U9or)&z?PNweQ}&6PufxsH&<^O5we4_Y=o4qtQs*xN(D`C>RchVu4DM zBqT}Fq7(!H0NrkvPN#z!jYeVta8VR2q9~>OmrbSUcDn>YfYzEY3@OW!@pz0<3TrLz z-@g}k@80Fsty`#v4<8bSAy-#dOePa%vl;XG9HkUZ)3gwK?~zhstz|NqaCCI!rIhUL z?TI|k>G%6AEiIw$+_?ilmSqG%fKsY8T)Z|R1VV_`xF`y&wE*;bJ^KAVS(YKC(?*3u46KpFq_S&s*2TWh41^guFG<{WM^l`oSvSFhYuez8jWb% zmZB(dT^HZ?k!4w;l;Y*fmu9h82*+_~+m$>#&eE^hFv~5cq$3#&CK%VC)rPypXR8>X4 z-$(ZQeFlR8MN!~54oQ*_MG;XHF`Z6nnua{jIXO8IVHjfDHdOrP$iqVl*1D*=$%YmlQ?8)zuXr zKYlcu%?8goz(440Re?Ck8AqoX6Cwf+|e+qSVRi>~WvnufM*kxD6& zB*C_Ax~{_*Lz<@Kc}~+bY;SLy;c&?F=g-ae@85;vH~@H_ht`^|>(E-?9#j+suU@?} zTU%RXSw zMxzna=@iFtD9e(r>)7Al7w_M{H(8b;guoa>k|Zdlux*<-jxomEhE_^RS(beG@IiQ< z2k?)BWmyOzux*?9d~S}9k3~@wynXxDSeC`%;i2$-|5m_VWzsYy3_~`X4MkDlc^;N! zp|xf{pBvY8`SRt9@H~&EX*f7I5CHvtpMJlO=XuC9O|dMCs;U53E|>hjgJoF)VB0pv z7yx|VCk#V^AYd>U5JeGEO2m^VPmGk3)oR6Ju@J9czcxolM`AXcVcRxYma$&1+1=eW zZQF8sdMZYv5re^iIF6B0(liZC(;yx{er%+atk-KkeflJVAYeQm|KoTET?m1ck~ogJ z8|Jz$Wm$54eNCR{h)0henZv_FvAer#gbp_szkl42MJR z-@i{B$2g8d*L5UG!r#AtQA#0x{P=-oS!7v;)|&Bn%y2j)O;eseeQL(zFbmC6s=VV9MG;-sVcRxRO2ROt*XuDD3^+MC5$pAuy}dnC*ELy| gQP=gqcYSB|Ked=c7Cb`LPyhe`07*qoM6N<$g5wAo>i_@% literal 0 HcmV?d00001 diff --git a/wadsrc_extra/static/sprites/rsmka0.png b/wadsrc_extra/static/sprites/rsmka0.png deleted file mode 100644 index 761e0917098045c068c8ca7e4c9153c3c3989a1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 376 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s3?yAI>n{UR>H$6>t_=G6t{yIaety!*()RZD zZfQ_sBls&ZhyCd(%l zU)GAIMFOJx=)F8tgeUG^gE^W|=jzwTEu#db3< z7TUgBlab-jTK(oVTUk=q_GIr}Y8C3q&2(h#0za?ote^c>M_4h3=`GYyx1BlLC2Oi# zf1=&3%J#Khyp?>xsjc7cosW3Jvet0+l!Bfm6I7o##EPA>>`UG=)5m?^y6i(*jQt-b zss8!vRXo9HrgS$$%gykl=M~@AdA{gAvevSCuJDOVJ4Cx*aqYOhE#t@kQoH6G0*jm3 S&ANczX7F_Nb6Mw<&;$T@OO28M diff --git a/wadsrc_extra/static/sprites/rsmkb0.png b/wadsrc_extra/static/sprites/rsmkb0.png deleted file mode 100644 index 0bcfef43da50b027cb05b4f74ac5caf6939161aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmV-~0ek+5P)0@?kEP)EFT{qsS+uH00001bW%=J06^y0W&i*H z2xoFZVgLXD6#xJLCy%zk{{R31oJmAMRCwBrm05BFArM280L^y)`$kej4GvI~{sHWV zdO>A>&FBbiqHpfe8F6mz>`L^NJzj}ZHJ;J0E?t&=dF~}BQzL*tC@kFWZR!sZL!LX)r5+?_=O0s z81y4Q!+P{9OemDYXaDRF>&^}}22e1%1Nc)=+0>V#bU2Q9k=3*8L;m4lr&C;>6@i^7 zK(;y2Z0Mf^bTyI{?Rw487&xPE=^M?0Hhh{<`Z+J7X80!Sjjhva%b0r`Y~t9uI{ol= zojLTCmujXr&`-=MVsBopxnHiK{6Yo#yssBzZbNu4oby#1odAYz9anw5DrXMUyLtNu o8N+;!t(`Y^_1-)Cf89;>7qx~R3&zXcRR91007*qoM6N<$g3HkDivR!s diff --git a/wadsrc_extra/static/sprites/rsmkd0.png b/wadsrc_extra/static/sprites/rsmkd0.png deleted file mode 100644 index 60827b6dcb39fd10f742d8060c4ad1921b165d7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^DnP8n!3-oB+Pk*{N%a7q5LX6$eK$8ZKR-WL4;OoT zdue59Ya44LBO`Nja{~hdd3kvq9UT=F6}=3m^FS?(B|(0{3=Yq3qyae`=|zr7Kw21x z)yhAzo&?hGJzX3_DsC;Ed@=8+0f+N$Q%;G`|L^ZUbhj#UiOHpB?o}HcRgb&vz0GG> zT>kp?dH4MsMk_=gD>5m_D>SvNO5$C5nw57d`-wUF>WpjsE_%l}wH)!;zI$<*3}eH_ z*>^+PL(@H$oz;=Im>ME-1K0b`5lull-142eV}-L@-BssH`8kP_O9gU znVHk(7g(*{^{nonwf~dY6W=wa3q;Iyc^3XN*UbIg6*e!fRlBS`m6KMSO`I9O>Wnz6 X6W_^T;bR6suQPbM`njxgN@xNAM){2x diff --git a/wadsrc_extra/static/sprites/rsmke0.png b/wadsrc_extra/static/sprites/rsmke0.png deleted file mode 100644 index 9d5652bd2556813eb6da09cb0fe703238d6dd2f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^B0wz7!3-q58RK68DfIxK5LX6$eOC_`dwY9nWobV@ zKQ}iw0|Ntdb8~AOYa=5g6%`d79UXaj`OWg{tAJV>(u*9EfHXT0 zE7p8nr~#ylJY5_^DsG*5R=^F&^75X&z zJ3E}JTOSa5JSi@H+FuL*tBf<>ZdcXZ>T4)4kC&Ol%qRZY&#Nj9Ps2siI6Bwy8b0SW wDl5HV68$9T?ep&(?^{oLrs*fG{b9HN<1Ch4FFH;|0c~gSboFyt=akR{0CL1rssI20 From 410749cf67af63eba21720b78e5fa8d3f34e25fa Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 28 Jan 2018 08:44:40 +0100 Subject: [PATCH 2/6] - compatibility node rebuild for Doom2's MAP25 https://forum.zdoom.org/viewtopic.php?f=15&t=59256 --- wadsrc/static/compatibility.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/wadsrc/static/compatibility.txt b/wadsrc/static/compatibility.txt index 245c45052..b4f411bf8 100644 --- a/wadsrc/static/compatibility.txt +++ b/wadsrc/static/compatibility.txt @@ -685,6 +685,10 @@ EBDAC00E9D25D884B2C8F4B1F0390539 // doom2.wad map21 setsectoroffset 50 ceil -56 setsectoroffset 54 ceil -56 } +94893A0DC429A22ADC4B3A73DA537E16 // DOOM2.WAD map25 +{ + rebuildnodes +} 110F84DE041052B59307FAF0293E6BC0 // Doom II, map27 { setsectorspecial 93 0 From 600362572155721fc2c3c757d557511a1837253c Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Sun, 28 Jan 2018 11:41:00 +0200 Subject: [PATCH 3/6] Silenced quad stereo message during startup --- src/gl/stereo3d/gl_stereo_cvars.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gl/stereo3d/gl_stereo_cvars.cpp b/src/gl/stereo3d/gl_stereo_cvars.cpp index 47b7ff217..e7ce699f5 100644 --- a/src/gl/stereo3d/gl_stereo_cvars.cpp +++ b/src/gl/stereo3d/gl_stereo_cvars.cpp @@ -43,7 +43,7 @@ CVAR(Bool, vr_swap_eyes, false, CVAR_GLOBALCONFIG) // For broadest GL compatibility, require user to explicitly enable quad-buffered stereo mode. // Setting vr_enable_quadbuffered_stereo does not automatically invoke quad-buffered stereo, // but makes it possible for subsequent "vr_mode 7" to invoke quad-buffered stereo -CUSTOM_CVAR(Bool, vr_enable_quadbuffered, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) +CUSTOM_CVAR(Bool, vr_enable_quadbuffered, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL) { Printf("You must restart " GAMENAME " to switch quad stereo mode\n"); } From c1d2b548208a1c384c2f9e52432915ce1dc53b2a Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 28 Jan 2018 11:51:39 +0100 Subject: [PATCH 4/6] - let TexMan.GetName return the actual name for a texture that was created from a full path name. --- src/textures/texturemanager.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/textures/texturemanager.cpp b/src/textures/texturemanager.cpp index 5039f48b6..613aa3be9 100644 --- a/src/textures/texturemanager.cpp +++ b/src/textures/texturemanager.cpp @@ -1206,8 +1206,21 @@ DEFINE_ACTION_FUNCTION(_TexMan, GetName) { PARAM_PROLOGUE; PARAM_INT(texid); - const FTexture* const tex = TexMan.ByIndex(texid); - ACTION_RETURN_STRING(nullptr == tex ? FString() : tex->Name); + auto tex = TexMan.ByIndex(texid); + FString retval; + + if (tex != nullptr) + { + if (tex->Name.IsNotEmpty()) retval = tex->Name; + else + { + // Textures for full path names do not have their own name, they merely link to the source lump. + auto lump = tex->GetSourceLump(); + if (Wads.GetLinkedTexture(lump) == tex) + retval = Wads.GetLumpFullName(lump); + } + } + ACTION_RETURN_STRING(retval); } //========================================================================== From 11ec3b1de02e85feae0a5b99178d59166e8f438b Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Sun, 28 Jan 2018 14:34:31 +0200 Subject: [PATCH 5/6] Added compatibility option for Demonfear MAP22 Bridge beyond red skull door was raising too high --- wadsrc/static/compatibility.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/wadsrc/static/compatibility.txt b/wadsrc/static/compatibility.txt index b4f411bf8..ff360f96b 100644 --- a/wadsrc/static/compatibility.txt +++ b/wadsrc/static/compatibility.txt @@ -848,3 +848,8 @@ CA3773ED313E8899311F3DD0CA195A68 // e3m6 setthingz 403 168 setthingz 404 168 } + +6D4156EE0D12B77AD143A37C4D3DCF98 // dmonfear.wad map22 +{ + shorttex +} From 55c6a14059717992a04a9e21ee637d0f24ac5292 Mon Sep 17 00:00:00 2001 From: Alexander Wilms Date: Wed, 24 Jan 2018 05:31:48 +0100 Subject: [PATCH 6/6] Added simple fatal error window for Linux There are three variants: KDE dialog, GTK+ window, SDL message box https://forum.zdoom.org/viewtopic.php?t=57880 --- src/CMakeLists.txt | 2 +- src/posix/sdl/i_main.cpp | 8 ++ src/posix/sdl/i_system.cpp | 36 +++++++++ .../{iwadpicker_gtk.cpp => gtk_dialogs.cpp} | 74 ++++++++++++++++++- 4 files changed, 118 insertions(+), 2 deletions(-) rename src/posix/unix/{iwadpicker_gtk.cpp => gtk_dialogs.cpp} (83%) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8610691ab..5740e3f6e 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -511,7 +511,7 @@ set( PLAT_SDL_SOURCES posix/sdl/st_start.cpp ) set( PLAT_UNIX_SOURCES posix/unix/i_specialpaths.cpp - posix/unix/iwadpicker_gtk.cpp ) + posix/unix/gtk_dialogs.cpp ) set( PLAT_OSX_SOURCES posix/osx/iwadpicker_cocoa.mm posix/osx/i_specialpaths.mm diff --git a/src/posix/sdl/i_main.cpp b/src/posix/sdl/i_main.cpp index 21f58e71e..95ed8322e 100644 --- a/src/posix/sdl/i_main.cpp +++ b/src/posix/sdl/i_main.cpp @@ -73,6 +73,10 @@ extern "C" int cc_install_handlers(int, char**, int, int*, const char*, int(*)(c void Mac_I_FatalError(const char* errortext); #endif +#ifdef __linux__ +void Linux_I_FatalError(const char* errortext); +#endif + // PUBLIC FUNCTION PROTOTYPES ---------------------------------------------- // PRIVATE FUNCTION PROTOTYPES --------------------------------------------- @@ -268,6 +272,10 @@ int main (int argc, char **argv) Mac_I_FatalError(error.GetMessage()); #endif // __APPLE__ +#ifdef __linux__ + Linux_I_FatalError(error.GetMessage()); +#endif // __linux__ + exit (-1); } catch (...) diff --git a/src/posix/sdl/i_system.cpp b/src/posix/sdl/i_system.cpp index b71acb8f8..f980e2598 100644 --- a/src/posix/sdl/i_system.cpp +++ b/src/posix/sdl/i_system.cpp @@ -79,6 +79,7 @@ extern "C" #ifndef NO_GTK bool I_GtkAvailable (); int I_PickIWad_Gtk (WadStuff *wads, int numwads, bool showwin, int defaultiwad); +void I_FatalError_Gtk(const char* errortext); #elif defined(__APPLE__) int I_PickIWad_Cocoa (WadStuff *wads, int numwads, bool showwin, int defaultiwad); #endif @@ -157,6 +158,37 @@ bool gameisdead; void Mac_I_FatalError(const char* errortext); #endif +#ifdef __linux__ +void Linux_I_FatalError(const char* errortext) +{ + // Close window or exit fullscreen and release mouse capture + SDL_Quit(); + + const char *str; + if((str=getenv("KDE_FULL_SESSION")) && strcmp(str, "true") == 0) + { + FString cmd; + cmd << "kdialog --title \"" GAMESIG " "; + cmd << GetVersionString() << ": No IWAD found\" "; + cmd << "--msgbox \"" << errortext << "\""; + popen(cmd, "r"); + } +#ifndef NO_GTK + else if (I_GtkAvailable()) + { + I_FatalError_Gtk(errortext); + } +#endif + else + { + FString message; + message << GAMESIG " "; + message << GetVersionString() << ": No IWAD found"; + SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, message, errortext, NULL); + } +} +#endif + void I_FatalError (const char *error, ...) { static bool alreadyThrown = false; @@ -175,6 +207,10 @@ void I_FatalError (const char *error, ...) #ifdef __APPLE__ Mac_I_FatalError(errortext); #endif // __APPLE__ + +#ifdef __linux__ + Linux_I_FatalError(errortext); +#endif // Record error to log (if logging) if (Logfile) diff --git a/src/posix/unix/iwadpicker_gtk.cpp b/src/posix/unix/gtk_dialogs.cpp similarity index 83% rename from src/posix/unix/iwadpicker_gtk.cpp rename to src/posix/unix/gtk_dialogs.cpp index ebaab609f..658f8cbc5 100644 --- a/src/posix/unix/iwadpicker_gtk.cpp +++ b/src/posix/unix/gtk_dialogs.cpp @@ -1,5 +1,5 @@ /* -** iwadpicker_gtk.cpp +** gtk_dialogs.cpp ** **--------------------------------------------------------------------------- ** Copyright 2008-2016 Braden Obrzut @@ -126,12 +126,16 @@ DYN_GTK_SYM(gtk_window_new); DYN_GTK_SYM(gtk_window_set_gravity); DYN_GTK_SYM(gtk_window_set_position); DYN_GTK_SYM(gtk_window_set_title); +DYN_GTK_SYM(gtk_window_set_resizable); +DYN_GTK_SYM(gtk_dialog_run); +DYN_GTK_SYM(gtk_dialog_get_type); // Gtk3 Only DYN_GTK_OPT3_SYM(gtk_box_new, GtkWidget *(*)(GtkOrientation, gint)); DYN_GTK_OPT3_SYM(gtk_button_box_new, GtkWidget *(*)(GtkOrientation)); DYN_GTK_OPT3_SYM(gtk_widget_set_halign, void(*)(GtkWidget *, GtkAlign)); DYN_GTK_OPT3_SYM(gtk_widget_set_valign, void(*)(GtkWidget *, GtkAlign)); +DYN_GTK_OPT3_SYM(gtk_message_dialog_new, GtkWidget* (*)(GtkWindow*, GtkDialogFlags, GtkMessageType, GtkButtonsType, const gchar*, ...)); // Gtk2 Only DYN_GTK_OPT2_SYM(gtk_misc_get_type, GType(*)()); @@ -342,6 +346,70 @@ static int PickIWad (WadStuff *wads, int numwads, bool showwin, int defaultiwad) return i; } +static void ShowError(const char* errortext) +{ + GtkWidget *window; + GtkWidget *widget; + GtkWidget *vbox = nullptr; + GtkWidget *bbox = nullptr; + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW(window), "Fatal error"); + gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_gravity (GTK_WINDOW(window), GDK_GRAVITY_CENTER); + gtk_window_set_resizable (GTK_WINDOW(window), false); + gtk_container_set_border_width (GTK_CONTAINER(window), 10); + g_signal_connect (window, "delete_event", G_CALLBACK(gtk_main_quit), NULL); + g_signal_connect (window, "key_press_event", G_CALLBACK(CheckEscape), NULL); + + // Create the vbox container. + if (gtk_box_new) // Gtk3 + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 10); + else if (gtk_vbox_new) // Gtk2 + vbox = gtk_vbox_new (FALSE, 10); + + gtk_container_add (GTK_CONTAINER(window), vbox); + + // Create the label. + widget = gtk_label_new ((const gchar *) errortext); + gtk_box_pack_start (GTK_BOX(vbox), widget, false, false, 0); + + if (gtk_widget_set_halign && gtk_widget_set_valign) // Gtk3 + { + gtk_widget_set_halign (widget, GTK_ALIGN_START); + gtk_widget_set_valign (widget, GTK_ALIGN_START); + } + else if (gtk_misc_set_alignment && gtk_misc_get_type) // Gtk2 + gtk_misc_set_alignment (GTK_MISC(widget), 0, 0); + + // Create the Exit button box. + if (gtk_button_box_new) // Gtk3 + bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL); + else if (gtk_hbutton_box_new) // Gtk2 + bbox = gtk_hbutton_box_new (); + + gtk_button_box_set_layout (GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END); + gtk_box_set_spacing (GTK_BOX(bbox), 10); + gtk_box_pack_end (GTK_BOX(vbox), bbox, false, false, 0); + + // Create the cancel button. + widget = gtk_button_new_with_label ("Exit"); + gtk_box_pack_start (GTK_BOX(bbox), widget, false, false, 0); + g_signal_connect (widget, "clicked", G_CALLBACK(gtk_main_quit), &window); + + // Finally we can show everything. + gtk_widget_show_all (window); + + gtk_main (); + + if (GTK_IS_WINDOW(window)) + { + gtk_widget_destroy (window); + // If we don't do this, then the X window might not actually disappear. + while (g_main_context_iteration (NULL, FALSE)) {} + } +} + } // namespace Gtk int I_PickIWad_Gtk (WadStuff *wads, int numwads, bool showwin, int defaultiwad) @@ -349,6 +417,10 @@ int I_PickIWad_Gtk (WadStuff *wads, int numwads, bool showwin, int defaultiwad) return Gtk::PickIWad (wads, numwads, showwin, defaultiwad); } +void I_FatalError_Gtk(const char* errortext) { + Gtk::ShowError(errortext); +} + bool I_GtkAvailable() { using namespace Gtk;