Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Refactor|libgui: Allow manually setting the main window in a test app
Moved the 'main' window pointer to CanvasWindow.
  • Loading branch information
skyjake committed Apr 25, 2013
1 parent 5d7f6fe commit 8cfc38d
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 12 deletions.
5 changes: 5 additions & 0 deletions doomsday/libgui/include/de/gui/canvaswindow.h
Expand Up @@ -160,6 +160,11 @@ class LIBGUI_PUBLIC CanvasWindow : public QMainWindow,
*/
void *nativeHandle() const;

public:
static bool haveMain();
static CanvasWindow &main();
static void setMain(CanvasWindow *window);

private:
DENG2_PRIVATE(d)
};
Expand Down
26 changes: 26 additions & 0 deletions doomsday/libgui/src/canvaswindow.cpp
Expand Up @@ -36,6 +36,8 @@

namespace de {

static CanvasWindow *mainWindow = 0;

DENG2_PIMPL(CanvasWindow)
{
Canvas* canvas; ///< Drawing surface for the contents of the window.
Expand All @@ -55,6 +57,14 @@ DENG2_PIMPL(CanvasWindow)
fps(0)
{}

~Instance()
{
if(thisPublic == mainWindow)
{
mainWindow = 0;
}
}

void updateFrameRateStatistics(void)
{
static Time lastFpsTime;
Expand Down Expand Up @@ -233,4 +243,20 @@ void *CanvasWindow::nativeHandle() const
return reinterpret_cast<void *>(winId());
}

bool CanvasWindow::haveMain()
{
return mainWindow != 0;
}

CanvasWindow &CanvasWindow::main()
{
DENG2_ASSERT(mainWindow != 0);
return *mainWindow;
}

void CanvasWindow::setMain(CanvasWindow *window)
{
mainWindow = window;
}

} // namespace de
17 changes: 5 additions & 12 deletions doomsday/libgui/src/persistentcanvaswindow.cpp
Expand Up @@ -69,8 +69,6 @@ static Rectanglei centeredRect(Vector2ui const &size)
return Rectanglei(rect.left(), rect.top(), rect.width(), rect.height());
}

static PersistentCanvasWindow *mainWindow = 0;

static void notifyAboutModeChange()
{
/// @todo This should be done using an observer.
Expand Down Expand Up @@ -292,8 +290,8 @@ DENG2_PIMPL(PersistentCanvasWindow)
// Keep a global pointer to the main window.
if(id == MAIN_WINDOW_ID)
{
DENG2_ASSERT(mainWindow == 0);
mainWindow = thisPublic;
DENG2_ASSERT(!haveMain());
setMain(thisPublic);
}

self.setMinimumSize(MIN_WIDTH, MIN_HEIGHT);
Expand All @@ -302,11 +300,6 @@ DENG2_PIMPL(PersistentCanvasWindow)
~Instance()
{
self.saveToConfig();

if(id == MAIN_WINDOW_ID)
{
mainWindow = 0;
}
}

/**
Expand Down Expand Up @@ -870,13 +863,13 @@ void PersistentCanvasWindow::performQueuedTasks()

PersistentCanvasWindow &PersistentCanvasWindow::main()
{
DENG2_ASSERT(mainWindow != 0);
if(mainWindow == 0)
DENG2_ASSERT(haveMain() != 0);
if(!haveMain())
{
throw InvalidIdError("PersistentCanvasWindow::main",
"No window found with id \"" + MAIN_WINDOW_ID + "\"");
}
return *mainWindow;
return static_cast<PersistentCanvasWindow &>(CanvasWindow::main());
}

void PersistentCanvasWindow::moveEvent(QMoveEvent *)
Expand Down

0 comments on commit 8cfc38d

Please sign in to comment.