]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote-tracking branch 'origin/master' into samual/menu_organization
authorSamual Lenks <samual@xonotic.org>
Sun, 18 Aug 2013 17:55:19 +0000 (13:55 -0400)
committerSamual Lenks <samual@xonotic.org>
Sun, 18 Aug 2013 17:55:19 +0000 (13:55 -0400)
qcsrc/menu/classes.c
qcsrc/menu/xonotic/dialog_multiplayer.c
qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c
qcsrc/menu/xonotic/dialog_multiplayer_playersetup_notification.c [new file with mode: 0644]
qcsrc/menu/xonotic/dialog_settings.c
qcsrc/menu/xonotic/dialog_settings_game.c [new file with mode: 0644]
qcsrc/menu/xonotic/mainwindow.c

index f00971674ef8bca06675809fcc1526744450969b..3d36b47c1ed0e8a0bd12eba6e45bbc4450375b89 100644 (file)
@@ -33,6 +33,7 @@
 #include "xonotic/dialog_settings_video.c"
 #include "xonotic/dialog_settings_effects.c"
 #include "xonotic/dialog_settings_audio.c"
+#include "xonotic/dialog_settings_game.c"
 #include "xonotic/dialog_settings_user.c"
 #include "xonotic/dialog_settings_misc.c"
 #include "xonotic/dialog_multiplayer.c"
 #include "xonotic/dialog_hudpanel_physics.c"
 #include "xonotic/dialog_hudpanel_centerprint.c"
 #include "xonotic/slider_picmip.c"
+#include "xonotic/dialog_multiplayer_playersetup_notification.c"
index 2c86f79c38fe322dfe77e8a16cd862a17c896029..8bb9e337f3de43e374ae93b4f98978287d1d3701 100644 (file)
@@ -17,8 +17,9 @@ void XonoticMultiplayerDialog_fill(entity me)
        me.TR(me);
                me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Servers"), makeXonoticServerListTab()));
                me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Create"), makeXonoticServerCreateTab()));
-               me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Demos"), makeXonoticDemoBrowserTab()));
-               me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Player Setup"), makeXonoticPlayerSettingsTab()));
+               //me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Players"), makeXonoticDemoBrowserTab()));
+               me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Media"), makeXonoticDemoBrowserTab()));
+               me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Profile"), makeXonoticPlayerSettingsTab()));
 
        me.TR(me);
        me.TR(me);
index 482a60510e88cdd2f52d6cc68c9e8d49c6f4ad63..052f05ef3b0a46419903eb480b571f946eb79856 100644 (file)
@@ -2,7 +2,7 @@
 CLASS(XonoticPlayerSettingsTab) EXTENDS(XonoticTab)
        METHOD(XonoticPlayerSettingsTab, fill, void(entity))
        METHOD(XonoticPlayerSettingsTab, draw, void(entity))
-       ATTRIB(XonoticPlayerSettingsTab, title, string, _("Player Setup"))
+       ATTRIB(XonoticPlayerSettingsTab, title, string, _("Profile"))
        ATTRIB(XonoticPlayerSettingsTab, intendedWidth, float, 0.9)
        ATTRIB(XonoticPlayerSettingsTab, rows, float, 22)
        ATTRIB(XonoticPlayerSettingsTab, columns, float, 6.2) // added extra .2 for center space 
@@ -55,20 +55,49 @@ void XonoticPlayerSettingsTab_fill(entity me)
        me.TR(me);
        me.TR(me);
        me.TR(me);
-
+       
+       // Statistic Stuff -Debugger
        me.TR(me);
-               me.TDempty(me, 1);
-               me.TD(me, 1, 2, e = makeXonoticTextLabel(0.5, _("Model:")));
+       me.TDempty(me, 0.5);
+       me.TD(me, 1, 2, e = makeXonoticTextLabel(0.5, _("Player Statistics:")));
+       me.TR(me);
+       me.TR(me);
+       me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Join time:")));
+       me.TR(me);
+       me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Total playing time:")));
+       me.TR(me);
+       me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Last played:")));
+       me.TR(me);
+       me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Games played:")));
+       me.TR(me);
+       me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Win / Losses:")));
+       me.TR(me);
+       me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Kills / Deaths:")));
        me.TR(me);
+       me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("CTF elo:")));
+       me.TR(me);
+       me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("DM elo:")));
+       me.TR(me);
+       me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("TDM elo:")));
+       me.TR(me);
+       me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("DUEL elo:")));
+       me.TR(me);
+       
+
+       me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
                me.TDempty(me, 1);
+               me.TD(me, 1, 3, e = makeXonoticTextLabel(0.5, _("Model:")));
+       me.TR(me);
                pms = makeXonoticPlayerModelSelector();
                me.TD(me, 1, 0.3, e = makeXonoticButton("<<", '0 0 0'));
                        e.onClick = PlayerModelSelector_Prev_Click;
                        e.onClickEntity = pms;
-               me.TD(me, me.rows - (me.currentRow + 2), 1.4, pms);
+               me.TD(me, 13, 2.4, pms);
                me.TD(me, 1, 0.3, e = makeXonoticButton(">>", '0 0 0'));
                        e.onClick = PlayerModelSelector_Next_Click;
                        e.onClickEntity = pms;
+
+       me.gotoRC(me, 14, 3.533); me.setFirstColumn(me, me.currentColumn);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0.5, _("Glowing color:")));
                for(i = 0; i < 15; ++i)
@@ -77,7 +106,7 @@ void XonoticPlayerSettingsTab_fill(entity me)
                                me.TR(me);
                        me.TDNoMargin(me, 1, 0.2, e = makeXonoticColorButton(1, 0, i), '0 1 0');
                }
-       me.TR(me);
+       me.gotoRC(me, 14, 4.866); me.setFirstColumn(me, me.currentColumn);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0.5, _("Detail color:")));
                for(i = 0; i < 15; ++i)
@@ -87,6 +116,7 @@ void XonoticPlayerSettingsTab_fill(entity me)
                        me.TDNoMargin(me, 1, 0.2, e = makeXonoticColorButton(2, 1, i), '0 1 0');
                }
 
+       /*
        // crosshair_enabled: 0 = no crosshair options, 1 = no crosshair selection, but everything else enabled, 2 = all crosshair options enabled
        // FIXME: In the future, perhaps make one global crosshair_type cvar which has 0 for disabled, 1 for custom, 2 for per weapon, etc?
        me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
@@ -176,6 +206,7 @@ void XonoticPlayerSettingsTab_fill(entity me)
                        e.onClickEntity = main.hudDialog;
                // TODO: show hud config name with text here 
 
+       */
        me.gotoRC(me, me.rows - 1, 0);
                me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "color -1 -1;name \"$_cl_name\";sendcvar cl_weaponpriority;sendcvar cl_autoswitch;sendcvar cl_forceplayermodels;sendcvar cl_forceplayermodelsfromxonotic;playermodel $_cl_playermodel;playerskin $_cl_playerskin", COMMANDBUTTON_APPLY));
 }
diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_notification.c b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_notification.c
new file mode 100644 (file)
index 0000000..7d4b50b
--- /dev/null
@@ -0,0 +1,96 @@
+#ifdef INTERFACE
+CLASS(XonoticNotificationDialog) EXTENDS(XonoticDialog)
+       METHOD(XonoticNotificationDialog, toString, string(entity))
+       METHOD(XonoticNotificationDialog, fill, void(entity))
+       METHOD(XonoticNotificationDialog, showNotify, void(entity))
+       ATTRIB(XonoticNotificationDialog, title, string, _("Notification settings"))
+       ATTRIB(XonoticNotificationDialog, color, vector, SKINCOLOR_DIALOG_MODEL)
+       ATTRIB(XonoticNotificationDialog, intendedWidth, float, 0.6)
+       ATTRIB(XonoticNotificationDialog, rows, float, 19)
+       ATTRIB(XonoticNotificationDialog, columns, float, 3)
+ENDCLASS(XonoticNotificationDialog)
+#endif
+
+#ifdef IMPLEMENTATION
+void XonoticNotificationDialog_showNotify(entity me)
+{
+       loadAllCvars(me);
+}
+string XonoticNotificationDialog_toString(entity me)
+{
+       return "hi"; // TODO: show csqc model settings like forcemyplayer and deglowing/ghosting bodies with text here
+}
+void XonoticNotificationDialog_fill(entity me)
+{
+       entity e;
+       
+       // General settings for the player
+       me.TR(me);
+               me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("General Settings:")));
+
+       me.TR(me);
+               me.TDempty(me, 0.1);
+               me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "notification_allow_chatboxprint", _("Print all notifications into the chatbox")));
+       me.TR(me);
+               me.TDempty(me, 0.1);
+               me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Notice connecting players:")));
+       me.TR(me);
+               me.TDempty(me, 0.3);
+               me.TD(me, 1, 3, e = makeXonoticTextSlider("notification_INFO_QUIT_DISCONNECT"));
+                       //makeMulti(me, "notification_INFO_QUIT_KICK_IDLING notification_INFO_QUIT_KICK_SPECTATING notification_INFO_JOIN_PLAY notification_INFO_JOIN_CONNECT_TEAM_BLUE notification_INFO_JOIN_CONNECT_TEAM_PINK notification_INFO_JOIN_CONNECT_TEAM_RED notification_INFO_JOIN_CONNECT_TEAM_YELLOW");
+                       e.addValue(e, ZCTX(_("off")), "0");
+                       e.addValue(e, ZCTX(_("only console")), "1");
+                       e.addValue(e, ZCTX(_("console & chat")), "2");
+                       e.configureXonoticTextSliderValues(e);
+       me.TR(me);
+               me.TDempty(me, 0.1);
+               me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "notification_ITEM_WEAPON_DONTHAVE", _("Item notifications")));
+       me.TR(me);
+               me.TDempty(me, 0.1);
+               me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "notification_CENTER_POWERUP_INVISIBILITY", _("Powerup notifications")));
+                       //makeMulti(e, "notification_CENTER_POWERUP_SHIELD notification_CENTER_POWERUP_SPEED notification_CENTER_POWERUP_STRENGTH notification_CENTER_POWERDOWN_INVISIBILITY notification_CENTER_POWERDOWN_SHIELD notification_CENTER_POWERDOWN_SPEED notification_CENTER_POWERDOWN_STRENGTH notification_CENTER_SUPERWEAPON_BROKEN notification_CENTER_SUPERWEAPON_LOST notification_CENTER_SUPERWEAPON_PICKUP");      
+       me.TR(me);
+               me.TDempty(me, 0.1);
+               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "notification_frag_verbose", _("Additional information on frags")));
+       me.TR(me);
+       me.TR(me);
+       
+       // Gamemode specific notifications
+               me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Gamemode notifications:")));
+       me.TR(me);
+               me.TDempty(me, 0.1);
+               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "notification_CENTER_ARENA_BEGIN", _("Centerprint for gamemode notifications")));
+                       //makeMulti(me, "notification_CENTER_ARENA_NEEDPLAYER notification_CENTER_ARENA_ROUNDSTART notification_CENTER_ASSAULT_ATTACKING notification_CENTER_ASSAULT_DEFENDING notification_CENTER_CTF_PICKUP_BLUE notification_CENTER_CTF_PICKUP_ENEMY notification_CENTER_CTF_PICKUP_RED notification_CENTER_CTF_PICKUP_TEAM notification_CENTER_FREEZETAG_FREEZE notification_CENTER_FREEZETAG_FROZEN notification_CENTER_FREEZETAG_REVIVE notification_CENTER_FREEZETAG_REVIVED notification_CENTER_FREEZETAG_ROUND_WIN_BLUE notification_CENTER_FREEZETAG_ROUND_WIN_PINK notification_CENTER_FREEZETAG_ROUND_WIN_RED notification_CENTER_FREEZETAG_ROUND_WIN_YELLOW notification_CENTER_FREEZETAG_SELF notification_CENTER_FREEZETAG_SPAWN_LATE notification_CENTER_KEEPAWAY_DROPPED notification_CENTER_KEEPAWAY_PICKUP notification_CENTER_KEEPAWAY_WARN notification_CENTER_KEYHUNT_HELP notification_CENTER_KEYHUNT_INTERFERE_BLUE notification_CENTER_KEYHUNT_INTERFERE_PINK notification_CENTER_KEYHUNT_INTERFERE_RED notification_CENTER_KEYHUNT_INTERFERE_YELLOW notification_CENTER_KEYHUNT_MEET notification_CENTER_KEYHUNT_SCAN notification_CENTER_KEYHUNT_START_BLUE notification_CENTER_KEYHUNT_START_PINK notification_CENTER_KEYHUNT_START_RED notification_CENTER_KEYHUNT_START_YELLOW notification_CENTER_KEYHUNT_WAIT notification_CENTER_LMS_CAMPCHECK");
+       me.TR(me);
+               me.TDempty(me, 0.1);
+               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "notification_ctf_capture_verbose", _("Additional information on flag captures")));
+       me.TR(me);
+       
+       // Information on killingsprees
+       me.TR(me);
+               me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Information on killingsprees:")));
+       me.TR(me);
+               me.TDempty(me, 0.1);
+               me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "notification_show_sprees", _("Print information on sprees")));
+       me.TR(me);
+               me.TDempty(me, 0.1);
+               me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Show spree information:")));
+       me.TR(me);
+               me.TDempty(me, 0.3);
+               me.TD(me, 1, 3, e = makeXonoticTextSlider("notification_show_sprees_info"));
+                       e.addValue(e, ZCTX(_("off")), "0");
+                       e.addValue(e, ZCTX(_("target")), "1");
+                       e.addValue(e, ZCTX(_("attacker")), "2");
+                       e.addValue(e, ZCTX(_("target & attacker")), "3");
+                       e.configureXonoticTextSliderValues(e);
+       me.TR(me);
+               me.TDempty(me, 0.1);
+               me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "notification_show_sprees_info_newline", _("Print spree information in a new line")));
+               
+       // Close this dialog
+       me.gotoRC(me, me.rows - 1, 0);
+               me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
+                       e.onClick = Dialog_Close;
+                       e.onClickEntity = me;
+}
+#endif
\ No newline at end of file
index 930fa7df9789c02dcabc26860d90f540e63b89b0..84f9a74cd9f3def8389b6aaa1df4b9fb0f50d47a 100644 (file)
@@ -4,7 +4,7 @@ CLASS(XonoticSettingsDialog) EXTENDS(XonoticDialog)
        ATTRIB(XonoticSettingsDialog, title, string, _("Settings"))
        ATTRIB(XonoticSettingsDialog, color, vector, SKINCOLOR_DIALOG_SETTINGS)
        ATTRIB(XonoticSettingsDialog, intendedWidth, float, 0.96)
-       ATTRIB(XonoticSettingsDialog, rows, float, 19)
+       ATTRIB(XonoticSettingsDialog, rows, float, 20)
        ATTRIB(XonoticSettingsDialog, columns, float, 6)
 ENDCLASS(XonoticSettingsDialog)
 #endif
@@ -13,16 +13,18 @@ ENDCLASS(XonoticSettingsDialog)
 void XonoticSettingsDialog_fill(entity me)
 {
        entity mc;
-       mc = makeXonoticTabController(me.rows - 2);
+       mc = makeXonoticTabController(me.rows - 3);
        me.TR(me);
-               me.TD(me, 1, 1, mc.makeTabButton(mc, _("Input"),   makeXonoticInputSettingsTab()));
-               me.TD(me, 1, 1, mc.makeTabButton(mc, _("Video"),   makeXonoticVideoSettingsTab()));
-               me.TD(me, 1, 1, mc.makeTabButton(mc, _("Effects"), makeXonoticEffectsSettingsTab()));
-               me.TD(me, 1, 1, mc.makeTabButton(mc, _("Audio"),   makeXonoticAudioSettingsTab()));
-               me.TD(me, 1, 1, mc.makeTabButton(mc, _("User"),    makeXonoticUserSettingsTab()));
-               me.TD(me, 1, 1, mc.makeTabButton(mc, _("Misc"),    makeXonoticMiscSettingsTab()));
+               me.TD(me, 1, 2, mc.makeTabButton(mc, _("Video"),   makeXonoticVideoSettingsTab()));
+               me.TD(me, 1, 2, mc.makeTabButton(mc, _("Effects"), makeXonoticEffectsSettingsTab()));
+               me.TD(me, 1, 2, mc.makeTabButton(mc, _("Audio"),   makeXonoticAudioSettingsTab()));
        me.TR(me);
+               me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Game"),   makeXonoticGameSettingsTab()));
+               me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Input"),   makeXonoticInputSettingsTab()));
+               me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("User"),    makeXonoticUserSettingsTab()));
+               me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Misc"),    makeXonoticMiscSettingsTab()));
        me.TR(me);
-               me.TD(me, me.rows - 2, me.columns, mc);
+       me.TR(me);
+               me.TD(me, me.rows - 3, me.columns, mc);
 }
 #endif
diff --git a/qcsrc/menu/xonotic/dialog_settings_game.c b/qcsrc/menu/xonotic/dialog_settings_game.c
new file mode 100644 (file)
index 0000000..c026fb0
--- /dev/null
@@ -0,0 +1,79 @@
+#ifdef INTERFACE
+CLASS(XonoticGameSettingsTab) EXTENDS(XonoticTab)
+       METHOD(XonoticGameSettingsTab, fill, void(entity))
+       ATTRIB(XonoticGameSettingsTab, title, string, _("Game"))
+       ATTRIB(XonoticGameSettingsTab, intendedWidth, float, 0.9)
+       ATTRIB(XonoticGameSettingsTab, rows, float, 17)
+       ATTRIB(XonoticGameSettingsTab, columns, float, 6)
+ENDCLASS(XonoticGameSettingsTab)
+entity makeXonoticGameSettingsTab();
+#endif
+
+#ifdef IMPLEMENTATION
+entity makeXonoticGameSettingsTab()
+{
+       entity me;
+       me = spawnXonoticGameSettingsTab();
+       me.configureDialog(me);
+       return me;
+}
+
+void XonoticGameSettingsTab_fill(entity me)
+{
+       entity e;
+
+
+       me.TR(me);
+               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_gentle", _("Disable gore effects and harsh language"))); // also set sv_gentle
+               
+       me.gotoRC(me, 2, 3); me.setFirstColumn(me, me.currentColumn);
+               me.TDempty(me, 0.5);
+               me.TD(me, 1, 2, e = makeXonoticButton(_("Crosshair"), '0 0 0'));
+                       e.onClick = DialogOpenButton_Click;
+                       e.onClickEntity = main.crosshairDialog;
+               setDependent(e, "crosshair_enabled", 1, 2);
+               // TODO: show status of crosshair dot and hittest and pickups and such here with text
+       me.TR(me);
+               me.TDempty(me, 0.5);
+               me.TD(me, 1, 2, e = makeXonoticButton(_("HUD"), '0 0 0'));
+                       e.onClick = DialogOpenButton_Click;
+                       e.onClickEntity = main.hudDialog;
+               // TODO: show hud config name with text here 
+       me.TR(me);
+               me.TDempty(me, 0.5);
+               me.TD(me, 1, 2, e = makeXonoticButton(_("Notification"), '0 0 0'));
+                       e.onClick = DialogOpenButton_Click;
+                       e.onClickEntity = main.notificationDialog;
+               // TODO: Show all the notification stuff here
+       me.TR(me);
+               me.TDempty(me, 0.5);
+               me.TD(me, 1, 2, e = makeXonoticButton(_("Playermodel"), '0 0 0'));
+                       e.onClick = DialogOpenButton_Click;
+                       e.onClickEntity = main.modelDialog;
+               // TODO: show csqc model settings like forcemyplayer and deglowing/ghosting bodies with text here
+       me.TR(me);
+               me.TDempty(me, 0.5);
+               me.TD(me, 1, 2, e = makeXonoticButton(_("View"), '0 0 0'));
+                       e.onClick = DialogOpenButton_Click;
+                       e.onClickEntity = main.viewDialog;
+               // TODO: show fov and other settings with text here
+       me.TR(me);
+               me.TDempty(me, 0.5);
+               me.TD(me, 1, 2, e = makeXonoticButton(_("Weapon"), '0 0 0'));
+                       e.onClick = DialogOpenButton_Click;
+                       e.onClickEntity = main.weaponsDialog;
+               // I don't really think this is useful as is, and especially it doesn't look very clean...
+               // In the future, if ALL of these buttons had some information, then it would be justified/clean
+               //me.TD(me, 1, 1, e0 = makeXonoticTextLabel(0, string_null)); 
+               //      e0.textEntity = main.weaponsDialog;
+               //      e0.allowCut = 1;
+
+       //me.gotoRC(me, me.rows - 1, 0);
+       //      me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "color -1 -1;name \"$_cl_name\";sendcvar cl_weaponpriority;sendcvar cl_autoswitch;sendcvar cl_forceplayermodels;sendcvar cl_forceplayermodelsfromxonotic;playermodel $_cl_playermodel;playerskin $_cl_playerskin", COMMANDBUTTON_APPLY));
+
+
+
+       me.gotoRC(me, me.rows - 1, 0);
+               me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "sendcvar cl_gentle; sendcvar cl_allow_uidtracking; sendcvar cl_allow_uid2name;", COMMANDBUTTON_APPLY));
+}
+#endif
index f9d86c2dd229276aadb7272c9484f165bb1ad606..461b05fd931e657f51eba7bd5914976116d68452 100644 (file)
@@ -19,6 +19,7 @@ CLASS(MainWindow) EXTENDS(ModalController)
        ATTRIB(MainWindow, mainNexposee, entity, NULL)
        ATTRIB(MainWindow, fadedAlpha, float, SKINALPHA_BEHIND)
        ATTRIB(MainWindow, dialogToShow, entity, NULL)
+       ATTRIB(MainWindow, notificationDialog, entity, NULL)
 ENDCLASS(MainWindow)
 #endif
 
@@ -187,6 +188,9 @@ void MainWindow_configureMainWindow(entity me)
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
        
+       me.notificationDialog = i = spawnXonoticNotificationDialog();
+       i.configureDialog(i);
+       me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
 
        // mutator dialogs
        i = spawnXonoticSandboxToolsDialog();