@@ -262,6 +262,131 @@ BOOST_AUTO_TEST_CASE(SaveAndRestorePinned)
262262 }
263263}
264264
265+ BOOST_AUTO_TEST_CASE (TitleBarButtons)
266+ {
267+ constexpr auto id = CGI_MINIMAP ;
268+ auto it = SETTINGS .windows .persistentSettings .find (id);
269+ BOOST_REQUIRE (it != SETTINGS .windows .persistentSettings .end ());
270+ auto & settings = it->second ;
271+
272+ BOOST_TEST_CONTEXT (" Window pinning disabled" )
273+ {
274+ SETTINGS .interface .enableWindowPinning = false ;
275+ settings.isMinimized = false ;
276+ settings.isPinned = false ;
277+ BOOST_TEST_CONTEXT (" Left title bar button closes window" )
278+ {
279+ IngameWindow wnd (id, IngameWindow::posLastOrCenter, Extent (100 , 100 ), " Test Window" , nullptr );
280+ const MouseCoords evLDown{wnd.GetPos () + DrawPoint (4 , 4 ), true };
281+
282+ BOOST_TEST (!wnd.ShouldBeClosed ());
283+ BOOST_TEST (!wnd.IsMinimized ());
284+ BOOST_TEST (!wnd.IsPinned ());
285+ wnd.MouseLeftUp (evLDown);
286+ BOOST_TEST (wnd.ShouldBeClosed ());
287+ BOOST_TEST (!wnd.IsMinimized ());
288+ BOOST_TEST (!wnd.IsPinned ());
289+ BOOST_TEST (!settings.isOpen );
290+ BOOST_TEST (!settings.isMinimized );
291+ BOOST_TEST (!settings.isPinned );
292+ }
293+
294+ BOOST_TEST_CONTEXT (" Double-click on the window title has no effect" )
295+ {
296+ IngameWindow wnd (id, IngameWindow::posLastOrCenter, Extent (100 , 100 ), " Test Window" , nullptr );
297+ const MouseCoords evLDblDown{wnd.GetPos () + DrawPoint (wnd.GetSize ().x / 2 , 4 ), true , false , true };
298+
299+ BOOST_TEST (!wnd.ShouldBeClosed ());
300+ BOOST_TEST (!wnd.IsMinimized ());
301+ BOOST_TEST (!wnd.IsPinned ());
302+ wnd.MouseLeftUp (evLDblDown);
303+ BOOST_TEST (!wnd.ShouldBeClosed ());
304+ BOOST_TEST (!wnd.IsMinimized ());
305+ BOOST_TEST (!wnd.IsPinned ());
306+ BOOST_TEST (settings.isOpen );
307+ BOOST_TEST (!settings.isMinimized );
308+ BOOST_TEST (!settings.isPinned );
309+ }
310+
311+ settings.isMinimized = false ;
312+ BOOST_TEST_CONTEXT (" Right title bar button minimizes window" )
313+ {
314+ IngameWindow wnd (id, IngameWindow::posLastOrCenter, Extent (100 , 100 ), " Test Window" , nullptr );
315+ const MouseCoords evLDown{wnd.GetPos () + DrawPoint (wnd.GetSize ().x , 0 ) + DrawPoint (-4 , 4 ), true };
316+
317+ BOOST_TEST (!wnd.ShouldBeClosed ());
318+ BOOST_TEST (!wnd.IsMinimized ());
319+ BOOST_TEST (!wnd.IsPinned ());
320+ wnd.MouseLeftUp (evLDown);
321+ BOOST_TEST (!wnd.ShouldBeClosed ());
322+ BOOST_TEST (wnd.IsMinimized ());
323+ BOOST_TEST (!wnd.IsPinned ());
324+ BOOST_TEST (settings.isOpen );
325+ BOOST_TEST (settings.isMinimized );
326+ BOOST_TEST (!settings.isPinned );
327+ }
328+ }
329+
330+ BOOST_TEST_CONTEXT (" Window pinning enabled" )
331+ {
332+ SETTINGS .interface .enableWindowPinning = true ;
333+ settings.isMinimized = false ;
334+ settings.isPinned = false ;
335+ BOOST_TEST_CONTEXT (" Left title bar button closes window" )
336+ {
337+ IngameWindow wnd (id, IngameWindow::posLastOrCenter, Extent (100 , 100 ), " Test Window" , nullptr );
338+ const MouseCoords evLDown{wnd.GetPos () + DrawPoint (4 , 4 ), true };
339+
340+ BOOST_TEST (!wnd.ShouldBeClosed ());
341+ BOOST_TEST (!wnd.IsMinimized ());
342+ BOOST_TEST (!wnd.IsPinned ());
343+ wnd.MouseLeftUp (evLDown);
344+ BOOST_TEST (wnd.ShouldBeClosed ());
345+ BOOST_TEST (!wnd.IsMinimized ());
346+ BOOST_TEST (!wnd.IsPinned ());
347+ BOOST_TEST (!settings.isOpen );
348+ BOOST_TEST (!settings.isMinimized );
349+ BOOST_TEST (!settings.isPinned );
350+ }
351+
352+ BOOST_TEST_CONTEXT (" Double-click on the window title minimizes" )
353+ {
354+ IngameWindow wnd (id, IngameWindow::posLastOrCenter, Extent (100 , 100 ), " Test Window" , nullptr );
355+ const MouseCoords evLDblDown{wnd.GetPos () + DrawPoint (wnd.GetSize ().x / 2 , 4 ), true , false , true };
356+
357+ BOOST_TEST (!wnd.ShouldBeClosed ());
358+ BOOST_TEST (!wnd.IsMinimized ());
359+ BOOST_TEST (!wnd.IsPinned ());
360+ wnd.MouseLeftUp (evLDblDown);
361+ BOOST_TEST (!wnd.ShouldBeClosed ());
362+ BOOST_TEST (wnd.IsMinimized ());
363+ BOOST_TEST (!wnd.IsPinned ());
364+ BOOST_TEST (settings.isOpen );
365+ BOOST_TEST (settings.isMinimized );
366+ BOOST_TEST (!settings.isPinned );
367+ }
368+
369+ settings.isMinimized = false ;
370+ settings.isPinned = false ;
371+ BOOST_TEST_CONTEXT (" Right title bar button pins window" )
372+ {
373+ IngameWindow wnd (id, IngameWindow::posLastOrCenter, Extent (100 , 100 ), " Test Window" , nullptr );
374+ const MouseCoords evLDown{wnd.GetPos () + DrawPoint (wnd.GetSize ().x , 0 ) + DrawPoint (-4 , 4 ), true };
375+
376+ BOOST_TEST (!wnd.ShouldBeClosed ());
377+ BOOST_TEST (!wnd.IsMinimized ());
378+ BOOST_TEST (!wnd.IsPinned ());
379+ wnd.MouseLeftUp (evLDown);
380+ BOOST_TEST (!wnd.ShouldBeClosed ());
381+ BOOST_TEST (!wnd.IsMinimized ());
382+ BOOST_TEST (wnd.IsPinned ());
383+ BOOST_TEST (settings.isOpen );
384+ BOOST_TEST (!settings.isMinimized );
385+ BOOST_TEST (settings.isPinned );
386+ }
387+ }
388+ }
389+
265390namespace {
266391void WindowPositioning_testOne (IngameWindow& wnd, const char * context, const std::function<void ()>& checkNormal,
267392 const std::function<void()>& checkMinimized)
0 commit comments