* There is now a server_read_only_memory structure that is placed in a (surprise!)

read-only area shared between the Desktop and all applications.
* Right now, this area only contains the desktop colors, ie. B_PANEL_BACKGROUND_COLOR
  etc.; ui_color() no longer needs to ask the server for these colors.
* The ui_colors are now maintained by DesktopSettings, though ColorSet is still there.
* The default colors are now hardcoded once and for everyone in InterfaceDefs.h, ie.
  the app_server uses them as well.
* Desktop::Init() can now also return an error (but that is not yet accounted for).
* Cleaned up InterfaceDefs.h.
* Fixed wrong include in moreUTF8.h.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17232 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2006-04-25 20:12:06 +00:00
parent 7225520c09
commit 6d5488e18a
15 changed files with 284 additions and 229 deletions
+3 -4
View File
@@ -34,8 +34,7 @@ namespace BPrivate {
class BApplication : public BLooper {
public:
BApplication(const char* signature);
BApplication(const char* signature,
status_t* error);
BApplication(const char* signature, status_t* error);
virtual ~BApplication();
// Archiving
@@ -138,7 +137,6 @@ private:
*/ bool _QuitAllWindows(bool force);
bool _WindowQuitLoop(bool quitFilePanels, bool force);
void _ArgvReceived(BMessage* message);
void SetAppCursor();
uint32 InitialWorkspace();
int32 _CountWindows(bool includeMenus) const;
@@ -158,7 +156,8 @@ private:
//_drag_data_* fDraggedMessage;
BMessageRunner* fPulseRunner;
status_t fInitError;
uint32 _reserved[13];
void* fServerReadOnlyMemory;
uint32 _reserved[12];
bool fReadyToRunCalled;
};
+88 -121
View File
@@ -1,57 +1,22 @@
//------------------------------------------------------------------------------
// Copyright (c) 2001-2002, OpenBeOS
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
// and/or sell copies of the Software, and to permit persons to whom the
// Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//
// File Name: InterfaceDefs.h
// Author: Erik Jaesler ([email protected])
// Description: General Interface Kit definitions and global functions.
//------------------------------------------------------------------------------
/*
* Copyright (c) 2001-2006, Haiku, Inc.
* Distributed under the terms of the MIT license.
*
* Authors:
* Erik Jaesler ([email protected])
*/
#ifndef _INTERFACE_DEFS_H
#define _INTERFACE_DEFS_H
// Standard Includes -----------------------------------------------------------
// System Includes -------------------------------------------------------------
#include <BeBuild.h>
#include <GraphicsDefs.h>
#include <OS.h>
// Project Includes ------------------------------------------------------------
// Local Includes --------------------------------------------------------------
// Local Defines ---------------------------------------------------------------
// Globals ---------------------------------------------------------------------
class BRect;
/*----------------------------------------------------------------*/
struct key_info {
uint32 modifiers;
uint8 key_states[16];
};
/*----------------------------------------------------------------*/
// some handy UTF-8 characters
#define B_UTF8_ELLIPSIS "\xE2\x80\xA6"
#define B_UTF8_OPEN_QUOTE "\xE2\x80\x9C"
@@ -67,86 +32,97 @@ struct key_info {
#define B_MAX_MOUSE_BUTTONS 16
#endif
/*----------------------------------------------------------------*/
enum { B_BACKSPACE = 0x08,
B_RETURN = 0x0a,
B_ENTER = 0x0a,
B_SPACE = 0x20,
B_TAB = 0x09,
B_ESCAPE = 0x1b,
B_SUBSTITUTE = 0x1a,
// key definitions
B_LEFT_ARROW = 0x1c,
B_RIGHT_ARROW = 0x1d,
B_UP_ARROW = 0x1e,
B_DOWN_ARROW = 0x1f,
struct key_info {
uint32 modifiers;
uint8 key_states[16];
};
B_INSERT = 0x05,
B_DELETE = 0x7f,
B_HOME = 0x01,
B_END = 0x04,
B_PAGE_UP = 0x0b,
B_PAGE_DOWN = 0x0c,
enum {
B_BACKSPACE = 0x08,
B_RETURN = 0x0a,
B_ENTER = 0x0a,
B_SPACE = 0x20,
B_TAB = 0x09,
B_ESCAPE = 0x1b,
B_SUBSTITUTE = 0x1a,
B_FUNCTION_KEY = 0x10 };
B_LEFT_ARROW = 0x1c,
B_RIGHT_ARROW = 0x1d,
B_UP_ARROW = 0x1e,
B_DOWN_ARROW = 0x1f,
enum { B_F1_KEY = 0x02,
B_F2_KEY = 0x03,
B_F3_KEY = 0x04,
B_F4_KEY = 0x05,
B_F5_KEY = 0x06,
B_F6_KEY = 0x07,
B_F7_KEY = 0x08,
B_F8_KEY = 0x09,
B_F9_KEY = 0x0a,
B_F10_KEY = 0x0b,
B_F11_KEY = 0x0c,
B_F12_KEY = 0x0d,
B_PRINT_KEY = 0x0e,
B_SCROLL_KEY = 0x0f,
B_PAUSE_KEY = 0x10 };
B_INSERT = 0x05,
B_DELETE = 0x7f,
B_HOME = 0x01,
B_END = 0x04,
B_PAGE_UP = 0x0b,
B_PAGE_DOWN = 0x0c,
B_FUNCTION_KEY = 0x10
};
enum {
B_F1_KEY = 0x02,
B_F2_KEY = 0x03,
B_F3_KEY = 0x04,
B_F4_KEY = 0x05,
B_F5_KEY = 0x06,
B_F6_KEY = 0x07,
B_F7_KEY = 0x08,
B_F8_KEY = 0x09,
B_F9_KEY = 0x0a,
B_F10_KEY = 0x0b,
B_F11_KEY = 0x0c,
B_F12_KEY = 0x0d,
B_PRINT_KEY = 0x0e,
B_SCROLL_KEY = 0x0f,
B_PAUSE_KEY = 0x10
};
struct key_map {
uint32 version;
uint32 caps_key;
uint32 scroll_key;
uint32 num_key;
uint32 left_shift_key;
uint32 right_shift_key;
uint32 left_command_key;
uint32 right_command_key;
uint32 left_control_key;
uint32 right_control_key;
uint32 left_option_key;
uint32 right_option_key;
uint32 menu_key;
uint32 lock_settings;
int32 control_map[128];
int32 option_caps_shift_map[128];
int32 option_caps_map[128];
int32 option_shift_map[128];
int32 option_map[128];
int32 caps_shift_map[128];
int32 caps_map[128];
int32 shift_map[128];
int32 normal_map[128];
int32 acute_dead_key[32];
int32 grave_dead_key[32];
int32 circumflex_dead_key[32];
int32 dieresis_dead_key[32];
int32 tilde_dead_key[32];
uint32 acute_tables;
uint32 grave_tables;
uint32 circumflex_tables;
uint32 dieresis_tables;
uint32 tilde_tables;
uint32 version;
uint32 caps_key;
uint32 scroll_key;
uint32 num_key;
uint32 left_shift_key;
uint32 right_shift_key;
uint32 left_command_key;
uint32 right_command_key;
uint32 left_control_key;
uint32 right_control_key;
uint32 left_option_key;
uint32 right_option_key;
uint32 menu_key;
uint32 lock_settings;
int32 control_map[128];
int32 option_caps_shift_map[128];
int32 option_caps_map[128];
int32 option_shift_map[128];
int32 option_map[128];
int32 caps_shift_map[128];
int32 caps_map[128];
int32 shift_map[128];
int32 normal_map[128];
int32 acute_dead_key[32];
int32 grave_dead_key[32];
int32 circumflex_dead_key[32];
int32 dieresis_dead_key[32];
int32 tilde_dead_key[32];
uint32 acute_tables;
uint32 grave_tables;
uint32 circumflex_tables;
uint32 dieresis_tables;
uint32 tilde_tables;
};
struct mouse_map {
uint32 button[B_MAX_MOUSE_BUTTONS];
uint32 button[B_MAX_MOUSE_BUTTONS];
};
/*----------------------------------------------------------------*/
enum border_style {
@@ -173,7 +149,7 @@ enum button_width {
/*----------------------------------------------------------------*/
enum join_mode {
B_ROUND_JOIN=0,
B_ROUND_JOIN = 0,
B_MITER_JOIN,
B_BEVEL_JOIN,
B_BUTT_JOIN,
@@ -357,12 +333,6 @@ enum color_which {
// the replacement for B_DESKTOP_COLOR.
B_DESKTOP_COLOR = 5,
B_WINDOW_TAB_COLOR = 3,
B_RANDOM_COLOR = 0x80000000,
B_MICHELANGELO_FAVORITE_COLOR,
B_DSANDLER_FAVORITE_SKY_COLOR,
B_DSANDLER_FAVORITE_INK_COLOR,
B_DSANDLER_FAVORITE_SHOES_COLOR
};
_IMPEXP_BE rgb_color ui_color(color_which which);
@@ -386,7 +356,4 @@ const float B_DISABLED_LABEL_TINT = B_DARKEN_3_TINT;
const float B_HIGHLIGHT_BACKGROUND_TINT = B_DARKEN_2_TINT;
const float B_DISABLED_MARK_TINT = B_LIGHTEN_2_TINT;
/*-------------------------------------------------------------*/
/*-------------------------------------------------------------*/
#endif // _INTERFACE_DEFS_H
+5
View File
@@ -11,6 +11,8 @@
#include <Application.h>
struct server_read_only_memory;
class BApplication::Private {
public:
@@ -19,6 +21,9 @@ class BApplication::Private {
static inline BPrivate::ServerMemoryAllocator* ServerAllocator()
{ return be_app->fServerAllocator; }
static inline server_read_only_memory* ServerReadOnlyMemory()
{ return (server_read_only_memory*)be_app->fServerReadOnlyMemory; }
};
#endif // _APPLICATION_PRIVATE_H
+2 -1
View File
@@ -21,7 +21,8 @@ class ServerMemoryAllocator {
status_t InitCheck();
status_t AddArea(area_id serverArea, area_id& _localArea, uint8*& _base);
status_t AddArea(area_id serverArea, area_id& _localArea, uint8*& _base,
bool readOnly = false);
void RemoveArea(area_id serverArea);
status_t AreaAndBaseFor(area_id serverArea, area_id& area, uint8*& base);
@@ -0,0 +1,34 @@
/*
* Copyright 2006, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Axel Dörfler, [email protected]
*/
#ifndef SERVER_READ_ONLY_MEMORY_H
#define SERVER_READ_ONLY_MEMORY_H
#include <GraphicsDefs.h>
#include <InterfaceDefs.h>
static const int32 kNumColors = 32;
struct server_read_only_memory {
rgb_color colors[kNumColors];
};
static inline int32
color_which_to_index(color_which which)
{
if (which <= B_TOOLTIP_TEXT_COLOR)
return which - 1;
if (which >= B_SUCCESS_COLOR && which <= B_FAILURE_COLOR)
return which - B_SUCCESS_COLOR + B_TOOLTIP_TEXT_COLOR;
return -1;
}
#endif /* SERVER_READ_ONLY_MEMORY_H */
+18
View File
@@ -0,0 +1,18 @@
/*
* Copyright 2006, Haiku, Inc.
* Distributed under the terms of the MIT License.
*/
#ifndef _DEFAULT_COLORS_H
#define _DEFAULT_COLORS_H
#include <GraphicsDefs.h>
namespace BPrivate {
extern const rgb_color* kDefaultColors;
} // namespace BPrivate
#endif // _DEFAULT_COLORS_H
+4 -3
View File
@@ -1,7 +1,9 @@
#ifndef __MOREUTF8
#define __MOREUTF8
#include <stdio.h>
#include <SupportDefs.h>
static inline bool
IsInsideGlyph(uchar ch)
@@ -203,5 +205,4 @@ UTF8ToLength(const char *bytes)
return length;
}
#endif
#endif // __MOREUTF8
+20 -8
View File
@@ -660,11 +660,11 @@ bool
BApplication::IsCursorHidden() const
{
BPrivate::AppServerLink link;
int32 code = SERVER_FALSE;
int32 status = B_ERROR;
link.StartMessage(AS_QUERY_CURSOR_HIDDEN);
link.FlushWithReply(code);
link.FlushWithReply(status);
return code == SERVER_TRUE;
return status == B_OK;
}
@@ -995,10 +995,6 @@ BApplication::_InitGUIContext()
if (error != B_OK)
return error;
error = _SetupServerAllocator();
if (error != B_OK)
return error;
// Initialize the IK after we have set be_app because of a construction of a
// AppServerLink (which depends on be_app) nested inside the call to get_menu_info.
error = _init_interface_kit_();
@@ -1061,21 +1057,37 @@ BApplication::_ConnectToServer()
fServerLink->Attach<int32>(_get_object_token_(this));
fServerLink->AttachString(fAppName);
area_id sharedReadOnlyArea;
if (fServerLink->FlushWithReply(code) == B_OK
&& code == B_OK) {
// We don't need to contact the main app_server anymore
// directly; we now talk to our server alter ego only.
fServerLink->Read<port_id>(&serverPort);
fServerLink->SetSenderPort(serverPort);
fServerLink->Read<area_id>(&sharedReadOnlyArea);
} else {
fServerLink->SetSenderPort(-1);
debugger("BApplication: couldn't obtain new app_server comm port");
return B_ERROR;
}
fServerLink->SetSenderPort(serverPort);
status_t status = _SetupServerAllocator();
if (status != B_OK)
return status;
area_id area;
uint8* base;
status = fServerAllocator->AddArea(sharedReadOnlyArea, area, base, true);
if (status < B_OK)
return status;
fServerReadOnlyMemory = base;
return B_OK;
}
#if 0
void
BApplication::send_drag(BMessage *message, int32 vs_token, BPoint offset,
+13 -11
View File
@@ -58,7 +58,8 @@ ServerMemoryAllocator::InitCheck()
status_t
ServerMemoryAllocator::AddArea(area_id serverArea, area_id& _area, uint8*& _base)
ServerMemoryAllocator::AddArea(area_id serverArea, area_id& _area, uint8*& _base,
bool readOnly)
{
area_mapping* mapping = new (std::nothrow) area_mapping;
if (mapping == NULL || !fAreas.AddItem(mapping)) {
@@ -66,19 +67,20 @@ ServerMemoryAllocator::AddArea(area_id serverArea, area_id& _area, uint8*& _base
return B_NO_MEMORY;
}
#ifndef HAIKU_TARGET_PLATFORM_LIBBE_TEST
// reserve 128 MB of space for the area
void* base = (void*)0x60000000;
status_t status = _kern_reserve_heap_address_range((addr_t*)&base,
B_BASE_ADDRESS, 128 * 1024 * 1024);
#else
void* base;
status_t status = B_ERROR;
void* base;
#ifndef HAIKU_TARGET_PLATFORM_LIBBE_TEST
if (!readOnly) {
// reserve 128 MB of space for the area
base = (void*)0x60000000;
status = _kern_reserve_heap_address_range((addr_t*)&base,
B_BASE_ADDRESS, 128 * 1024 * 1024);
}
#endif
mapping->local_area = clone_area("server_memory", &base,
status == B_OK ? B_EXACT_ADDRESS : B_BASE_ADDRESS,
B_READ_AREA | B_WRITE_AREA, serverArea);
mapping->local_area = clone_area(readOnly ? "server read-only memory" : "server_memory",
&base, status == B_OK ? B_EXACT_ADDRESS : B_BASE_ADDRESS,
B_READ_AREA | (readOnly ? 0 : B_WRITE_AREA), serverArea);
if (mapping->local_area < B_OK) {
status = mapping->local_area;
delete mapping;
+52 -67
View File
@@ -10,7 +10,19 @@
/** Global functions and variables for the Interface Kit */
#include <Application.h>
#include "moreUTF8.h"
#include "truncate_string.h"
#include <ApplicationPrivate.h>
#include <AppServerLink.h>
#include <DefaultColors.h>
#include <InputServerTypes.h>
#include <input_globals.h>
#include <ServerProtocol.h>
#include <ServerReadOnlyMemory.h>
#include <WidthBuffer.h>
#include <WindowInfo.h>
#include <Font.h>
#include <InterfaceDefs.h>
#include <Menu.h>
@@ -20,18 +32,10 @@
#include <String.h>
#include <TextView.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <AppServerLink.h>
#include <WindowInfo.h>
#include <InputServerTypes.h>
#include <input_globals.h>
#include <ServerProtocol.h>
#include <WidthBuffer.h>
#include "moreUTF8.h"
#include "truncate_string.h"
// Private definitions not placed in public headers
void _init_global_fonts_();
@@ -54,6 +58,35 @@ menu_info *_menu_info_ptr_;
extern "C" const char B_NOTIFICATION_SENDER[] = "be:sender";
static const rgb_color _kDefaultColors[kNumColors] = {
{216, 216, 216, 255}, // B_PANEL_BACKGROUND_COLOR
{216, 216, 216, 255}, // B_MENU_BACKGROUND_COLOR
{255, 0, 203, 255}, // B_WINDOW_TAB_COLOR
{0, 0, 229, 255}, // B_KEYBOARD_NAVIGATION_COLOR
{51, 102, 152, 255}, // B_DESKTOP_COLOR
{115, 120, 184, 255}, // B_MENU_SELECTED_BACKGROUND_COLOR
{0, 0, 0, 255}, // B_MENU_ITEM_TEXT_COLOR
{0, 0, 0, 255}, // B_MENU_SELECTED_ITEM_TEXT_COLOR
{0, 0, 0, 255}, // B_MENU_SELECTED_BORDER_COLOR
{0, 0, 0, 255}, // B_PANEL_TEXT_COLOR
{255, 255, 255, 255}, // B_DOCUMENT_BACKGROUND_COLOR
{0, 0, 0, 255}, // B_DOCUMENT_TEXT_COLOR
{245, 245, 245, 255}, // B_CONTROL_BACKGROUND_COLOR
{0, 0, 0, 255}, // B_CONTROL_TEXT_COLOR
{0, 0, 0, 255}, // B_CONTROL_BORDER_COLOR
{102, 152, 203, 255}, // B_CONTROL_HIGHLIGHT_COLOR
{0, 0, 0, 255}, // B_NAVIGATION_PULSE_COLOR
{255, 255, 255, 255}, // B_SHINE_COLOR
{0, 0, 0, 255}, // B_SHADOW_COLOR
{255, 255, 0, 255}, // B_TOOLTIP_BACKGROUND_COLOR
{0, 0, 0, 255}, // B_TOOLTIP_TEXT_COLOR
// 100...
{0, 255, 0, 255}, // B_SUCCESS_COLOR
{255, 0, 0, 255}, // B_FAILURE_COLOR
{}
};
const rgb_color* BPrivate::kDefaultColors = &_kDefaultColors[0];
static status_t
mode2parms(uint32 space, uint32 *out_space, int32 *width, int32 *height)
@@ -686,66 +719,18 @@ mouse_mode()
_IMPEXP_BE rgb_color
ui_color(color_which which)
{
int32 index = color_which_to_index(which);
if (index < 0 || index >= kNumColors) {
fprintf(stderr, "ui_color(): unknown color_which %d\n", which);
return make_color(0, 0, 0);
}
if (be_app) {
rgb_color color;
BPrivate::AppServerLink link;
link.StartMessage(AS_GET_UI_COLOR);
link.Attach<color_which>(which);
int32 code;
if (link.FlushWithReply(code) == B_OK && code == B_OK) {
link.Read<rgb_color>(&color);
return color;
}
server_read_only_memory* shared = BApplication::Private::ServerReadOnlyMemory();
return shared->colors[index];
}
switch (which) {
case B_PANEL_BACKGROUND_COLOR:
return make_color(216,216,216);
case B_PANEL_TEXT_COLOR:
return make_color(0,0,0);
case B_DOCUMENT_BACKGROUND_COLOR:
return make_color(255,255,255);
case B_DOCUMENT_TEXT_COLOR:
return make_color(0,0,0);
case B_CONTROL_BACKGROUND_COLOR:
return make_color(245,245,245);
case B_CONTROL_TEXT_COLOR:
return make_color(0,0,0);
case B_CONTROL_BORDER_COLOR:
return make_color(0,0,0);
case B_CONTROL_HIGHLIGHT_COLOR:
return make_color(102, 152, 203);
case B_NAVIGATION_BASE_COLOR:
return make_color(0,0,229);
case B_NAVIGATION_PULSE_COLOR:
return make_color(0,0,0);
case B_SHINE_COLOR:
return make_color(255,255,255);
case B_SHADOW_COLOR:
return make_color(0,0,0);
case B_MENU_BACKGROUND_COLOR:
return make_color(216,216,216);
case B_MENU_SELECTED_BACKGROUND_COLOR:
return make_color(115,120,184);
case B_MENU_ITEM_TEXT_COLOR:
return make_color(0,0,0);
case B_MENU_SELECTED_BORDER_COLOR:
return make_color(0,0,0);
case B_TOOLTIP_BACKGROUND_COLOR:
return make_color(255,255,0);
case B_TOOLTIP_TEXT_COLOR:
return make_color(0,0,0);
case B_SUCCESS_COLOR:
return make_color(0,255,0);
case B_FAILURE_COLOR:
return make_color(255,0,0);
case B_WINDOW_TAB_COLOR:
return make_color(255,0,203);
default:
fprintf(stderr, "ui_color(): unknown color_which %d\n", which);
return make_color(0,0,0);
}
return kDefaultColors[index];
}
+25 -8
View File
@@ -300,7 +300,8 @@ Desktop::Desktop(uid_t userID)
: MessageLooper("desktop"),
fUserID(userID),
fSettings(new DesktopSettings::Private()),
fSettings(NULL),
fSharedReadOnlyArea(-1),
fApplicationsLock("application list"),
fShutdownSemaphore(-1),
fCurrentWorkspace(0),
@@ -317,17 +318,11 @@ Desktop::Desktop(uid_t userID)
char name[B_OS_NAME_LENGTH];
Desktop::_GetLooperName(name, sizeof(name));
for (int32 i = 0; i < kMaxWorkspaces; i++) {
_Windows(i).SetIndex(i);
fWorkspaces[i].RestoreConfiguration(*fSettings->WorkspacesMessage(i));
}
fMessagePort = create_port(DEFAULT_MONITOR_PORT_SIZE, name);
if (fMessagePort < B_OK)
return;
fLink.SetReceiverPort(fMessagePort);
gFontManager->AttachUser(fUserID);
}
@@ -335,14 +330,32 @@ Desktop::~Desktop()
{
delete fSettings;
delete_area(fSharedReadOnlyArea);
delete_port(fMessagePort);
gFontManager->DetachUser(fUserID);
}
void
status_t
Desktop::Init()
{
if (fMessagePort < B_OK)
return fMessagePort;
char name[B_OS_NAME_LENGTH];
snprintf(name, sizeof(name), "d:%d:shared read only", /*id*/0);
fSharedReadOnlyArea = create_area(name, (void **)&fServerReadOnlyMemory,
B_ANY_ADDRESS, B_PAGE_SIZE, B_NO_LOCK, B_READ_AREA | B_WRITE_AREA);
if (fSharedReadOnlyArea < B_OK)
return fSharedReadOnlyArea;
fSettings = new DesktopSettings::Private(fServerReadOnlyMemory);
for (int32 i = 0; i < kMaxWorkspaces; i++) {
_Windows(i).SetIndex(i);
fWorkspaces[i].RestoreConfiguration(*fSettings->WorkspacesMessage(i));
}
fVirtualScreen.RestoreConfiguration(*this, fSettings->WorkspacesMessage(0));
// TODO: temporary workaround, fActiveScreen will be removed
@@ -371,6 +384,10 @@ Desktop::Init()
BRegion stillAvailableOnScreen;
_RebuildClippingForAllWindows(stillAvailableOnScreen);
_SetBackground(stillAvailableOnScreen);
gFontManager->AttachUser(fUserID);
return B_OK;
}
+5 -1
View File
@@ -45,6 +45,7 @@ class DrawingEngine;
class HWInterface;
class ServerApp;
class WorkspacesLayer;
struct server_read_only_memory;
namespace BPrivate {
class LinkSender;
@@ -55,10 +56,11 @@ class Desktop : public MessageLooper, public ScreenOwner {
Desktop(uid_t userID);
virtual ~Desktop();
void Init();
status_t Init();
uid_t UserID() const { return fUserID; }
virtual port_id MessagePort() const { return fMessagePort; }
area_id SharedReadOnlyArea() const { return fSharedReadOnlyArea; }
::EventDispatcher& EventDispatcher() { return fEventDispatcher; }
@@ -217,6 +219,8 @@ class Desktop : public MessageLooper, public ScreenOwner {
port_id fMessagePort;
::EventDispatcher fEventDispatcher;
port_id fInputPort;
area_id fSharedReadOnlyArea;
server_read_only_memory* fServerReadOnlyMemory;
BLocker fApplicationsLock;
BObjectList<ServerApp> fApplications;
+8 -3
View File
@@ -14,15 +14,18 @@
#include "FontManager.h"
#include "ServerConfig.h"
#include <DefaultColors.h>
#include <ServerReadOnlyMemory.h>
#include <Directory.h>
#include <File.h>
#include <FindDirectory.h>
//#include <DataIO./h>
#include <Path.h>
DesktopSettings::Private::Private()
: BLocker("DesktopSettings_Private")
DesktopSettings::Private::Private(server_read_only_memory* shared)
: BLocker("DesktopSettings_Private"),
fShared(*shared)
{
// if the on-disk settings are not complete, the defaults will be kept
_SetDefaults();
@@ -65,6 +68,8 @@ DesktopSettings::Private::_SetDefaults()
fMenuInfo.triggers_always_shown = false;
fWorkspacesCount = 4;
memcpy(fShared.colors, BPrivate::kDefaultColors, sizeof(rgb_color) * kNumColors);
}
+5 -1
View File
@@ -14,10 +14,12 @@
#include <Locker.h>
struct server_read_only_memory;
class DesktopSettings::Private : public BLocker {
public:
Private();
Private(server_read_only_memory* shared);
~Private();
status_t Save(uint32 mask = kAllSettings);
@@ -61,6 +63,8 @@ class DesktopSettings::Private : public BLocker {
mode_mouse fMouseMode;
int32 fWorkspacesCount;
BMessage fWorkspaceMessages[kMaxWorkspaces];
server_read_only_memory& fShared;
};
#endif /* DESKTOP_SETTINGS_PRIVATE_H */
+2 -1
View File
@@ -220,7 +220,8 @@ ServerApp::Run()
// Let's tell the client how to talk with us
fLink.StartMessage(B_OK);
fLink.Attach<int32>(fMessagePort);
fLink.Attach<port_id>(fMessagePort);
fLink.Attach<area_id>(fDesktop->SharedReadOnlyArea());
fLink.Flush();
return true;