Extracted the settings stuff from the Desktop class. If you now need to access
the desktop's settings, you have to do something like this: DesktopSettings settings(desktop); settings.SetMouseMode(mode); The advantage of this is that this object is fully locked, and cannot lead to corrupted settings anymore. Also, the settings will stay the same until you delete the object again. Updated all accesses to use this new API. Removed no longer used FFM messages. Implemented AS_{GET|SET}_MENU_INFO for future use. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13719 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
223b96641b
commit
ef8810f2ad
@ -175,12 +175,12 @@ enum {
|
||||
AS_ACTIVATE_WORKSPACE,
|
||||
AS_GET_SCROLLBAR_INFO,
|
||||
AS_SET_SCROLLBAR_INFO,
|
||||
AS_GET_MENU_INFO,
|
||||
AS_SET_MENU_INFO,
|
||||
AS_IDLE_TIME,
|
||||
AS_SELECT_PRINTER_PANEL,
|
||||
AS_ADD_PRINTER_PANEL,
|
||||
AS_RUN_BE_ABOUT,
|
||||
AS_SET_FOCUS_FOLLOWS_MOUSE,
|
||||
AS_FOCUS_FOLLOWS_MOUSE,
|
||||
AS_SET_MOUSE_MODE,
|
||||
AS_GET_MOUSE_MODE,
|
||||
|
||||
|
@ -30,6 +30,8 @@
|
||||
#include "ServerWindow.h"
|
||||
#include "WinBorder.h"
|
||||
#include "Workspace.h"
|
||||
#include "DesktopSettingsPrivate.h"
|
||||
|
||||
|
||||
#ifdef __HAIKU__
|
||||
# define USE_ACCELERANT 1
|
||||
@ -55,28 +57,11 @@
|
||||
|
||||
|
||||
Desktop::Desktop()
|
||||
: fWinBorderList(64),
|
||||
fActiveScreen(NULL),
|
||||
fMouseMode(B_NORMAL_MOUSE),
|
||||
fFFMouseMode(false)
|
||||
:
|
||||
fSettings(new DesktopSettings::Private()),
|
||||
fWinBorderList(64),
|
||||
fActiveScreen(NULL)
|
||||
{
|
||||
// init scrollbar info
|
||||
fScrollBarInfo.proportional = true;
|
||||
fScrollBarInfo.double_arrows = false;
|
||||
// look of the knob (R5: (0, 1, 2), 1 = default)
|
||||
fScrollBarInfo.knob = 1;
|
||||
fScrollBarInfo.min_knob_size = 15;
|
||||
|
||||
// init menu info
|
||||
fMenuInfo.font_size = 12.0;
|
||||
// TODO: ...
|
||||
// fMenuInfo.f_family;
|
||||
// fMenuInfo.f_style;
|
||||
// fMenuInfo.background_color = gColorSet->menu_background;
|
||||
// look of the separator (R5: (0, 1, 2), default ?)
|
||||
fMenuInfo.separator = 0;
|
||||
fMenuInfo.click_to_open = true;
|
||||
fMenuInfo.triggers_always_shown = false;
|
||||
}
|
||||
|
||||
|
||||
@ -86,13 +71,14 @@ Desktop::~Desktop()
|
||||
delete border;
|
||||
|
||||
delete fRootLayer;
|
||||
delete fSettings;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Desktop::Init()
|
||||
{
|
||||
fVirtualScreen.RestoreConfiguration(*this);
|
||||
fVirtualScreen.RestoreConfiguration(*this, fSettings->WorkspacesMessage(0));
|
||||
|
||||
// TODO: temporary workaround, fActiveScreen will be removed
|
||||
fActiveScreen = fVirtualScreen.ScreenAt(0);
|
||||
@ -397,64 +383,3 @@ Desktop::WriteWindowInfo(int32 serverToken, BPrivate::LinkSender& sender)
|
||||
sender.Flush();
|
||||
}
|
||||
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// Methods for various desktop stuff handled by the server
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
|
||||
void
|
||||
Desktop::SetScrollBarInfo(const scroll_bar_info &info)
|
||||
{
|
||||
fScrollBarInfo = info;
|
||||
}
|
||||
|
||||
|
||||
scroll_bar_info
|
||||
Desktop::ScrollBarInfo(void) const
|
||||
{
|
||||
return fScrollBarInfo;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Desktop::SetMenuInfo(const menu_info &info)
|
||||
{
|
||||
fMenuInfo = info;
|
||||
}
|
||||
|
||||
|
||||
menu_info
|
||||
Desktop::MenuInfo(void) const
|
||||
{
|
||||
return fMenuInfo;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Desktop::UseFFMouse(const bool &useffm)
|
||||
{
|
||||
fFFMouseMode = useffm;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
Desktop::FFMouseInUse(void) const
|
||||
{
|
||||
return fFFMouseMode;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
Desktop::SetFFMouseMode(const mode_mouse &value)
|
||||
{
|
||||
fMouseMode = value;
|
||||
}
|
||||
|
||||
|
||||
mode_mouse
|
||||
Desktop::FFMouseMode(void) const
|
||||
{
|
||||
return fMouseMode;
|
||||
}
|
||||
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "ScreenManager.h"
|
||||
#include "ServerScreen.h"
|
||||
#include "VirtualScreen.h"
|
||||
#include "DesktopSettings.h"
|
||||
|
||||
#include <InterfaceDefs.h>
|
||||
#include <List.h>
|
||||
@ -84,29 +85,15 @@ class Desktop : public BLocker, public ScreenOwner {
|
||||
void WriteWindowList(team_id team, BPrivate::LinkSender& sender);
|
||||
void WriteWindowInfo(int32 serverToken, BPrivate::LinkSender& sender);
|
||||
|
||||
// Methods for various desktop stuff handled by the server
|
||||
void SetScrollBarInfo(const scroll_bar_info &info);
|
||||
scroll_bar_info ScrollBarInfo() const;
|
||||
|
||||
void SetMenuInfo(const menu_info &info);
|
||||
menu_info MenuInfo() const;
|
||||
|
||||
void UseFFMouse(const bool &useffm);
|
||||
bool FFMouseInUse() const;
|
||||
void SetFFMouseMode(const mode_mouse &value);
|
||||
mode_mouse FFMouseMode() const;
|
||||
|
||||
private:
|
||||
friend class DesktopSettings;
|
||||
|
||||
::VirtualScreen fVirtualScreen;
|
||||
DesktopSettings::Private* fSettings;
|
||||
BList fWinBorderList;
|
||||
|
||||
RootLayer* fRootLayer;
|
||||
Screen* fActiveScreen;
|
||||
|
||||
scroll_bar_info fScrollBarInfo;
|
||||
menu_info fMenuInfo;
|
||||
mode_mouse fMouseMode;
|
||||
bool fFFMouseMode;
|
||||
};
|
||||
|
||||
extern Desktop *gDesktop;
|
||||
|
252
src/servers/app/DesktopSettings.cpp
Normal file
252
src/servers/app/DesktopSettings.cpp
Normal file
@ -0,0 +1,252 @@
|
||||
/*
|
||||
* Copyright 2005, Haiku.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* Stephan Aßmus <superstippi@gmx.de>
|
||||
* Axel Dörfler, axeld@pinc-software.de
|
||||
*/
|
||||
|
||||
|
||||
#include "DesktopSettings.h"
|
||||
#include "DesktopSettingsPrivate.h"
|
||||
#include "Desktop.h"
|
||||
|
||||
|
||||
DesktopSettings::Private::Private()
|
||||
: BLocker("desktop settings")
|
||||
{
|
||||
// if the on-disk settings are not complete, the defaults will be kept
|
||||
_SetDefaults();
|
||||
_Load();
|
||||
}
|
||||
|
||||
|
||||
DesktopSettings::Private::~Private()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DesktopSettings::Private::_SetDefaults()
|
||||
{
|
||||
fMouseMode = B_NORMAL_MOUSE;
|
||||
|
||||
// init scrollbar info
|
||||
fScrollBarInfo.proportional = true;
|
||||
fScrollBarInfo.double_arrows = false;
|
||||
// look of the knob (R5: (0, 1, 2), 1 = default)
|
||||
fScrollBarInfo.knob = 1;
|
||||
fScrollBarInfo.min_knob_size = 15;
|
||||
|
||||
// init menu info
|
||||
fMenuInfo.font_size = 12.0;
|
||||
// TODO: ...
|
||||
// fMenuInfo.f_family;
|
||||
// fMenuInfo.f_style;
|
||||
// fMenuInfo.background_color = gColorSet->menu_background;
|
||||
// look of the separator (R5: (0, 1, 2), default ?)
|
||||
fMenuInfo.separator = 0;
|
||||
fMenuInfo.click_to_open = true;
|
||||
fMenuInfo.triggers_always_shown = false;
|
||||
|
||||
fWorkspacesCount = 1;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
DesktopSettings::Private::_Load()
|
||||
{
|
||||
// TODO: add support for old app_server_settings file as well
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
DesktopSettings::Private::Save()
|
||||
{
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DesktopSettings::Private::SetScrollBarInfo(const scroll_bar_info& info)
|
||||
{
|
||||
fScrollBarInfo = info;
|
||||
}
|
||||
|
||||
|
||||
const scroll_bar_info&
|
||||
DesktopSettings::Private::ScrollBarInfo() const
|
||||
{
|
||||
return fScrollBarInfo;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DesktopSettings::Private::SetMenuInfo(const menu_info& info)
|
||||
{
|
||||
fMenuInfo = info;
|
||||
}
|
||||
|
||||
|
||||
const menu_info&
|
||||
DesktopSettings::Private::MenuInfo() const
|
||||
{
|
||||
return fMenuInfo;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DesktopSettings::Private::SetMouseMode(const mode_mouse mode)
|
||||
{
|
||||
fMouseMode = mode;
|
||||
}
|
||||
|
||||
|
||||
mode_mouse
|
||||
DesktopSettings::Private::MouseMode() const
|
||||
{
|
||||
return fMouseMode;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
DesktopSettings::Private::FocusFollowsMouse() const
|
||||
{
|
||||
return MouseMode() != B_NORMAL_MOUSE;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DesktopSettings::Private::SetWorkspacesCount(int32 number)
|
||||
{
|
||||
if (number < 1)
|
||||
number = 1;
|
||||
else if (number > kMaxWorkspaces)
|
||||
number = kMaxWorkspaces;
|
||||
|
||||
fWorkspacesCount = number;
|
||||
}
|
||||
|
||||
|
||||
int32
|
||||
DesktopSettings::Private::WorkspacesCount() const
|
||||
{
|
||||
return fWorkspacesCount;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DesktopSettings::Private::SetWorkspacesMessage(int32 index, BMessage& message)
|
||||
{
|
||||
if (index < 0 || index > kMaxWorkspaces)
|
||||
return;
|
||||
|
||||
fWorkspaceMessages[index] = message;
|
||||
}
|
||||
|
||||
|
||||
const BMessage*
|
||||
DesktopSettings::Private::WorkspacesMessage(int32 index) const
|
||||
{
|
||||
if (index < 0 || index > kMaxWorkspaces)
|
||||
return NULL;
|
||||
|
||||
return &fWorkspaceMessages[index];
|
||||
}
|
||||
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
|
||||
|
||||
DesktopSettings::DesktopSettings(Desktop* desktop)
|
||||
{
|
||||
fSettings = desktop->fSettings;
|
||||
fSettings->Lock();
|
||||
}
|
||||
|
||||
|
||||
DesktopSettings::~DesktopSettings()
|
||||
{
|
||||
fSettings->Unlock();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DesktopSettings::SetScrollBarInfo(const scroll_bar_info& info)
|
||||
{
|
||||
fSettings->SetScrollBarInfo(info);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DesktopSettings::GetScrollBarInfo(scroll_bar_info& info) const
|
||||
{
|
||||
info = fSettings->ScrollBarInfo();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DesktopSettings::SetMenuInfo(const menu_info& info)
|
||||
{
|
||||
fSettings->SetMenuInfo(info);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DesktopSettings::GetMenuInfo(menu_info& info) const
|
||||
{
|
||||
info = fSettings->MenuInfo();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DesktopSettings::SetMouseMode(const mode_mouse mode)
|
||||
{
|
||||
fSettings->SetMouseMode(mode);
|
||||
}
|
||||
|
||||
|
||||
mode_mouse
|
||||
DesktopSettings::MouseMode() const
|
||||
{
|
||||
return fSettings->MouseMode();
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
DesktopSettings::FocusFollowsMouse() const
|
||||
{
|
||||
return fSettings->FocusFollowsMouse();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DesktopSettings::SetWorkspacesCount(int32 number)
|
||||
{
|
||||
fSettings->SetWorkspacesCount(number);
|
||||
}
|
||||
|
||||
|
||||
int32
|
||||
DesktopSettings::WorkspacesCount() const
|
||||
{
|
||||
return fSettings->WorkspacesCount();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
DesktopSettings::SetWorkspacesMessage(int32 index, BMessage& message)
|
||||
{
|
||||
fSettings->SetWorkspacesMessage(index, message);
|
||||
}
|
||||
|
||||
|
||||
const BMessage*
|
||||
DesktopSettings::WorkspacesMessage(int32 index) const
|
||||
{
|
||||
return fSettings->WorkspacesMessage(index);
|
||||
}
|
||||
|
52
src/servers/app/DesktopSettings.h
Normal file
52
src/servers/app/DesktopSettings.h
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright 2001-2005, Haiku.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* Axel Dörfler, axeld@pinc-software.de
|
||||
*/
|
||||
#ifndef DESKTOP_SETTINGS_H
|
||||
#define DESKTOP_SETTINGS_H
|
||||
|
||||
|
||||
#include <InterfaceDefs.h>
|
||||
#include <Menu.h>
|
||||
#include <Message.h>
|
||||
|
||||
class Desktop;
|
||||
|
||||
|
||||
static const int32 kMaxWorkspaces = 32;
|
||||
|
||||
|
||||
class DesktopSettings {
|
||||
public:
|
||||
DesktopSettings(Desktop* desktop);
|
||||
~DesktopSettings();
|
||||
|
||||
status_t Save();
|
||||
|
||||
void SetScrollBarInfo(const scroll_bar_info& info);
|
||||
void GetScrollBarInfo(scroll_bar_info& info) const;
|
||||
|
||||
void SetMenuInfo(const menu_info& info);
|
||||
void GetMenuInfo(menu_info& info) const;
|
||||
|
||||
void SetMouseMode(mode_mouse mode);
|
||||
mode_mouse MouseMode() const;
|
||||
bool FocusFollowsMouse() const;
|
||||
|
||||
void SetWorkspacesCount(int32 number);
|
||||
int32 WorkspacesCount() const;
|
||||
|
||||
void SetWorkspacesMessage(int32 index, BMessage& message);
|
||||
const BMessage* WorkspacesMessage(int32 index) const;
|
||||
|
||||
private:
|
||||
class Private;
|
||||
friend class Desktop;
|
||||
|
||||
Private* fSettings;
|
||||
};
|
||||
|
||||
#endif /* DESKTOP_SETTINGS_H */
|
51
src/servers/app/DesktopSettingsPrivate.h
Normal file
51
src/servers/app/DesktopSettingsPrivate.h
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright 2001-2005, Haiku.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
* Axel Dörfler, axeld@pinc-software.de
|
||||
*/
|
||||
#ifndef DESKTOP_SETTINGS_PRIVATE_H
|
||||
#define DESKTOP_SETTINGS_PRIVATE_H
|
||||
|
||||
|
||||
#include "DesktopSettings.h"
|
||||
|
||||
#include <Locker.h>
|
||||
|
||||
|
||||
class DesktopSettings::Private : public BLocker {
|
||||
public:
|
||||
Private();
|
||||
~Private();
|
||||
|
||||
status_t Save();
|
||||
|
||||
void SetScrollBarInfo(const scroll_bar_info &info);
|
||||
const scroll_bar_info& ScrollBarInfo() const;
|
||||
|
||||
void SetMenuInfo(const menu_info &info);
|
||||
const menu_info& MenuInfo() const;
|
||||
|
||||
void SetMouseMode(mode_mouse mode);
|
||||
mode_mouse MouseMode() const;
|
||||
bool FocusFollowsMouse() const;
|
||||
|
||||
void SetWorkspacesCount(int32 number);
|
||||
int32 WorkspacesCount() const;
|
||||
|
||||
void SetWorkspacesMessage(int32 index, BMessage& message);
|
||||
const BMessage* WorkspacesMessage(int32 index) const;
|
||||
|
||||
private:
|
||||
void _SetDefaults();
|
||||
status_t _Load();
|
||||
|
||||
scroll_bar_info fScrollBarInfo;
|
||||
menu_info fMenuInfo;
|
||||
mode_mouse fMouseMode;
|
||||
int32 fWorkspacesCount;
|
||||
BMessage fWorkspaceMessages[kMaxWorkspaces];
|
||||
};
|
||||
|
||||
#endif /* DESKTOP_SETTINGS_PRIVATE_H */
|
@ -78,14 +78,17 @@ Server app_server :
|
||||
RAMLinkMsgReader.cpp
|
||||
|
||||
# Manager Classes
|
||||
AppServer.cpp
|
||||
CursorManager.cpp
|
||||
Desktop.cpp
|
||||
ServerApp.cpp
|
||||
ServerWindow.cpp
|
||||
DecorManager.cpp
|
||||
ScreenManager.cpp
|
||||
|
||||
AppServer.cpp
|
||||
Desktop.cpp
|
||||
DesktopSettings.cpp
|
||||
|
||||
ServerApp.cpp
|
||||
ServerWindow.cpp
|
||||
|
||||
# DisplayDriver Classes
|
||||
$(VIEW_DRIVER_SOURCES)
|
||||
|
||||
|
@ -1117,7 +1117,9 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
case AS_GET_SCROLLBAR_INFO:
|
||||
{
|
||||
STRACE(("ServerApp %s: Get ScrollBar info\n", Signature()));
|
||||
scroll_bar_info info = gDesktop->ScrollBarInfo();
|
||||
scroll_bar_info info;
|
||||
DesktopSettings settings(gDesktop);
|
||||
settings.GetScrollBarInfo(info);
|
||||
|
||||
fLink.StartMessage(SERVER_TRUE);
|
||||
fLink.Attach<scroll_bar_info>(info);
|
||||
@ -1130,50 +1132,67 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
// Attached Data:
|
||||
// 1) scroll_bar_info scroll bar info structure
|
||||
scroll_bar_info info;
|
||||
if (link.Read<scroll_bar_info>(&info) == B_OK)
|
||||
gDesktop->SetScrollBarInfo(info);
|
||||
|
||||
fLink.StartMessage(SERVER_TRUE);
|
||||
fLink.Flush();
|
||||
break;
|
||||
}
|
||||
case AS_FOCUS_FOLLOWS_MOUSE:
|
||||
{
|
||||
STRACE(("ServerApp %s: query Focus Follow Mouse in use\n", Signature()));
|
||||
if (link.Read<scroll_bar_info>(&info) == B_OK) {
|
||||
DesktopSettings settings(gDesktop);
|
||||
settings.SetScrollBarInfo(info);
|
||||
}
|
||||
|
||||
fLink.StartMessage(SERVER_TRUE);
|
||||
fLink.Attach<bool>(gDesktop->FFMouseInUse());
|
||||
fLink.Flush();
|
||||
break;
|
||||
}
|
||||
case AS_SET_FOCUS_FOLLOWS_MOUSE:
|
||||
|
||||
case AS_GET_MENU_INFO:
|
||||
{
|
||||
STRACE(("ServerApp %s: Set Focus Follows Mouse in use\n", Signature()));
|
||||
bool follow;
|
||||
if (link.Read<bool>(&follow) == B_OK)
|
||||
gDesktop->UseFFMouse(follow);
|
||||
STRACE(("ServerApp %s: Get menu info\n", Signature()));
|
||||
menu_info info;
|
||||
DesktopSettings settings(gDesktop);
|
||||
settings.GetMenuInfo(info);
|
||||
|
||||
fLink.StartMessage(B_OK);
|
||||
fLink.Attach<menu_info>(info);
|
||||
fLink.Flush();
|
||||
break;
|
||||
}
|
||||
case AS_SET_MENU_INFO:
|
||||
{
|
||||
STRACE(("ServerApp %s: Set menu info\n", Signature()));
|
||||
menu_info info;
|
||||
if (link.Read<menu_info>(&info) == B_OK) {
|
||||
DesktopSettings settings(gDesktop);
|
||||
settings.SetMenuInfo(info);
|
||||
// TODO: SetMenuInfo() should do some validity check, so
|
||||
// that the answer we're giving can actually be useful
|
||||
}
|
||||
|
||||
fLink.StartMessage(B_OK);
|
||||
fLink.Flush();
|
||||
break;
|
||||
}
|
||||
|
||||
case AS_SET_MOUSE_MODE:
|
||||
{
|
||||
STRACE(("ServerApp %s: Set Focus Follows Mouse mode\n", Signature()));
|
||||
// Attached Data:
|
||||
// 1) enum mode_mouse FFM mouse mode
|
||||
mode_mouse mmode;
|
||||
if (link.Read<mode_mouse>(&mmode) == B_OK)
|
||||
gDesktop->SetFFMouseMode(mmode);
|
||||
mode_mouse mouseMode;
|
||||
if (link.Read<mode_mouse>(&mouseMode) == B_OK) {
|
||||
DesktopSettings settings(gDesktop);
|
||||
settings.SetMouseMode(mouseMode);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case AS_GET_MOUSE_MODE:
|
||||
{
|
||||
STRACE(("ServerApp %s: Get Focus Follows Mouse mode\n", Signature()));
|
||||
mode_mouse mmode = gDesktop->FFMouseMode();
|
||||
DesktopSettings settings(gDesktop);
|
||||
|
||||
fLink.StartMessage(SERVER_TRUE);
|
||||
fLink.Attach<mode_mouse>(mmode);
|
||||
fLink.Attach<mode_mouse>(settings.MouseMode());
|
||||
fLink.Flush();
|
||||
break;
|
||||
}
|
||||
|
||||
case AS_GET_UI_COLORS:
|
||||
{
|
||||
// Client application is asking for all the system colors at once
|
||||
|
@ -27,14 +27,38 @@ VirtualScreen::VirtualScreen()
|
||||
|
||||
VirtualScreen::~VirtualScreen()
|
||||
{
|
||||
_Reset();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
VirtualScreen::_Reset()
|
||||
{
|
||||
ScreenList list;
|
||||
for (int32 i = 0; i < fScreenList.CountItems(); i++) {
|
||||
screen_item* item = fScreenList.ItemAt(i);
|
||||
|
||||
list.AddItem(item->screen);
|
||||
}
|
||||
|
||||
gScreenManager->ReleaseScreens(list);
|
||||
fScreenList.MakeEmpty();
|
||||
fSettings.MakeEmpty();
|
||||
|
||||
fFrame.Set(0, 0, 0, 0);
|
||||
fDisplayDriver = NULL;
|
||||
fHWInterface = NULL;
|
||||
}
|
||||
|
||||
|
||||
status_t
|
||||
VirtualScreen::RestoreConfiguration(Desktop& desktop)
|
||||
VirtualScreen::RestoreConfiguration(Desktop& desktop, const BMessage* settings)
|
||||
{
|
||||
// Copy current Desktop settings
|
||||
//fSettings = desktop.Settings();
|
||||
_Reset();
|
||||
|
||||
// Copy current Desktop workspace settings
|
||||
if (settings)
|
||||
fSettings = *settings;
|
||||
|
||||
ScreenList list;
|
||||
status_t status = gScreenManager->AcquireScreens(&desktop, NULL, 0, false, list);
|
||||
|
@ -31,7 +31,7 @@ class VirtualScreen {
|
||||
::HWInterface* HWInterface() const
|
||||
{ return fHWInterface; }
|
||||
|
||||
status_t RestoreConfiguration(Desktop& desktop);
|
||||
status_t RestoreConfiguration(Desktop& desktop, const BMessage* settings);
|
||||
status_t StoreConfiguration(BMessage& settings);
|
||||
|
||||
status_t AddScreen(Screen* screen);
|
||||
@ -49,6 +49,7 @@ class VirtualScreen {
|
||||
|
||||
private:
|
||||
status_t _FindConfiguration(Screen* screen, BMessage& settings);
|
||||
void _Reset();
|
||||
|
||||
struct screen_item {
|
||||
Screen* screen;
|
||||
|
Loading…
x
Reference in New Issue
Block a user