diff --git a/headers/private/app/ServerProtocol.h b/headers/private/app/ServerProtocol.h index 24077c7fd6..bad896e9d3 100644 --- a/headers/private/app/ServerProtocol.h +++ b/headers/private/app/ServerProtocol.h @@ -7,292 +7,293 @@ #define SERVER_PORT_NAME "OBappserver" #define SERVER_INPUT_PORT "OBinputport" -enum -{ -// Used for quick replies from the app_server -SERVER_TRUE='_srt', -SERVER_FALSE, -AS_SERVER_BMESSAGE, -AS_SERVER_AREALINK, -AS_SERVER_SESSION, -AS_SERVER_PORTLINK, -AS_CLIENT_DEAD, +enum { + // Used for quick replies from the app_server + SERVER_TRUE='_srt', + SERVER_FALSE, + AS_SERVER_BMESSAGE, + AS_SERVER_AREALINK, + AS_SERVER_SESSION, + AS_SERVER_PORTLINK, + AS_CLIENT_DEAD, -// Application definitions -AS_CREATE_APP, -AS_DELETE_APP, -AS_QUIT_APP, + // Application definitions + AS_CREATE_APP, + AS_DELETE_APP, + AS_QUIT_APP, -AS_SET_SERVER_PORT, + AS_SET_SERVER_PORT, -AS_CREATE_WINDOW, -AS_DELETE_WINDOW, -AS_CREATE_BITMAP, -AS_DELETE_BITMAP, + AS_CREATE_WINDOW, + AS_DELETE_WINDOW, + AS_CREATE_BITMAP, + AS_DELETE_BITMAP, -AS_ACQUIRE_SERVERMEM, -AS_RELEASE_SERVERMEM, -AS_AREA_MESSAGE, + AS_ACQUIRE_SERVERMEM, + AS_RELEASE_SERVERMEM, + AS_AREA_MESSAGE, -// Cursor definitions -AS_SET_CURSOR_DATA, -AS_SET_CURSOR_BCURSOR, -AS_SET_CURSOR_BBITMAP, -AS_SET_CURSOR_SYSTEM, + // Cursor definitions + AS_SET_CURSOR_DATA, + AS_SET_CURSOR_BCURSOR, + AS_SET_CURSOR_BBITMAP, + AS_SET_CURSOR_SYSTEM, -AS_SET_SYSCURSOR_DATA, -AS_SET_SYSCURSOR_BCURSOR, -AS_SET_SYSCURSOR_BBITMAP, -AS_SET_SYSCURSOR_DEFAULTS, -AS_GET_SYSCURSOR, + AS_SET_SYSCURSOR_DATA, + AS_SET_SYSCURSOR_BCURSOR, + AS_SET_SYSCURSOR_BBITMAP, + AS_SET_SYSCURSOR_DEFAULTS, + AS_GET_SYSCURSOR, -AS_SHOW_CURSOR, -AS_HIDE_CURSOR, -AS_OBSCURE_CURSOR, -AS_QUERY_CURSOR_HIDDEN, + AS_SHOW_CURSOR, + AS_HIDE_CURSOR, + AS_OBSCURE_CURSOR, + AS_QUERY_CURSOR_HIDDEN, -AS_CREATE_BCURSOR, -AS_DELETE_BCURSOR, + AS_CREATE_BCURSOR, + AS_DELETE_BCURSOR, -AS_BEGIN_RECT_TRACKING, -AS_END_RECT_TRACKING, + AS_BEGIN_RECT_TRACKING, + AS_END_RECT_TRACKING, -// Window definitions -AS_SHOW_WINDOW, -AS_HIDE_WINDOW, -AS_QUIT_WINDOW, -AS_SEND_BEHIND, -AS_SET_LOOK, -AS_SET_FEEL, -AS_SET_FLAGS, -AS_DISABLE_UPDATES, -AS_ENABLE_UPDATES, -AS_BEGIN_UPDATE, -AS_END_UPDATE, -AS_NEEDS_UPDATE, -AS_WINDOW_TITLE, -AS_ADD_TO_SUBSET, -AS_REM_FROM_SUBSET, -AS_SET_ALIGNMENT, -AS_GET_ALIGNMENT, -AS_GET_WORKSPACES, -AS_SET_WORKSPACES, -AS_WINDOW_RESIZE, -AS_WINDOW_MOVE, -AS_SET_SIZE_LIMITS, -AS_ACTIVATE_WINDOW, -AS_WINDOW_MINIMIZE, -AS_UPDATE_IF_NEEDED, -_ALL_UPDATED_, // this should be moved in place of _UPDATE_IF_NEEDED_ in AppDefs.h + // Window definitions + AS_SHOW_WINDOW, + AS_HIDE_WINDOW, + AS_QUIT_WINDOW, + AS_SEND_BEHIND, + AS_SET_LOOK, + AS_SET_FEEL, + AS_SET_FLAGS, + AS_DISABLE_UPDATES, + AS_ENABLE_UPDATES, + AS_BEGIN_UPDATE, + AS_END_UPDATE, + AS_NEEDS_UPDATE, + AS_WINDOW_TITLE, + AS_ADD_TO_SUBSET, + AS_REM_FROM_SUBSET, + AS_SET_ALIGNMENT, + AS_GET_ALIGNMENT, + AS_GET_WORKSPACES, + AS_SET_WORKSPACES, + AS_WINDOW_RESIZE, + AS_WINDOW_MOVE, + AS_SET_SIZE_LIMITS, + AS_ACTIVATE_WINDOW, + AS_WINDOW_MINIMIZE, + AS_UPDATE_IF_NEEDED, + _ALL_UPDATED_, // this should be moved in place of _UPDATE_IF_NEEDED_ in AppDefs.h + // BPicture definitions + AS_CREATE_PICTURE, + AS_DELETE_PICTURE, + AS_CLONE_PICTURE, + AS_DOWNLOAD_PICTURE, -// BPicture definitions -AS_CREATE_PICTURE, -AS_DELETE_PICTURE, -AS_CLONE_PICTURE, -AS_DOWNLOAD_PICTURE, + // Font-related server communications + AS_QUERY_FONTS_CHANGED, + AS_UPDATED_CLIENT_FONTLIST, + AS_GET_FAMILY_NAME, + AS_GET_STYLE_NAME, + AS_GET_FAMILY_AND_STYLE, + AS_GET_FONT_DIRECTION, + AS_GET_FONT_BOUNDING_BOX, + AS_GET_TUNED_COUNT, + AS_GET_TUNED_INFO, + AS_GET_FONT_HEIGHT, -// Font-related server communications -AS_QUERY_FONTS_CHANGED, -AS_UPDATED_CLIENT_FONTLIST, -AS_GET_FAMILY_NAME, -AS_GET_STYLE_NAME, -AS_GET_FAMILY_AND_STYLE, -AS_GET_FONT_DIRECTION, -AS_GET_FONT_BOUNDING_BOX, -AS_GET_TUNED_COUNT, -AS_GET_TUNED_INFO, -AS_GET_FONT_HEIGHT, + AS_QUERY_FONT_FIXED, + AS_SET_FAMILY_NAME, + AS_SET_FAMILY_AND_STYLE, + AS_SET_FAMILY_AND_STYLE_FROM_ID, + AS_SET_FAMILY_AND_FACE, -AS_QUERY_FONT_FIXED, -AS_SET_FAMILY_NAME, -AS_SET_FAMILY_AND_STYLE, -AS_SET_FAMILY_AND_STYLE_FROM_ID, -AS_SET_FAMILY_AND_FACE, + AS_COUNT_FONT_FAMILIES, + AS_COUNT_FONT_STYLES, -AS_COUNT_FONT_FAMILIES, -AS_COUNT_FONT_STYLES, + AS_GET_STRING_WIDTH, + AS_GET_STRING_WIDTHS, + AS_GET_EDGES, + AS_GET_ESCAPEMENTS, + AS_GET_ESCAPEMENTS_AS_FLOATS, + AS_GET_BOUNDINGBOXES_CHARS, + AS_GET_BOUNDINGBOXES_STRINGS, + AS_GET_HAS_GLYPHS, + AS_GET_GLYPH_SHAPES, + AS_GET_TRUNCATED_STRINGS, -AS_GET_STRING_WIDTH, -AS_GET_STRING_WIDTHS, -AS_GET_EDGES, -AS_GET_ESCAPEMENTS, -AS_GET_ESCAPEMENTS_AS_FLOATS, -AS_GET_BOUNDINGBOXES_CHARS, -AS_GET_BOUNDINGBOXES_STRINGS, -AS_GET_HAS_GLYPHS, -AS_GET_GLYPH_SHAPES, -AS_GET_TRUNCATED_STRINGS, + AS_SET_SYSFONT_PLAIN, + AS_SET_SYSFONT_BOLD, + AS_SET_SYSFONT_FIXED, -AS_SET_SYSFONT_PLAIN, -AS_SET_SYSFONT_BOLD, -AS_SET_SYSFONT_FIXED, + // Screen methods + AS_SCREEN_GET_MODE, + AS_SCREEN_SET_MODE, + AS_SCREEN_GET_COLORMAP, -// Screen methods -AS_SCREEN_GET_MODE, -AS_SCREEN_SET_MODE, -AS_SCREEN_GET_COLORMAP, + AS_GET_DESKTOP_COLOR, + AS_SET_DESKTOP_COLOR, -// Global function call defs -AS_SET_UI_COLORS, -AS_GET_UI_COLORS, -AS_GET_UI_COLOR, -AS_SET_DECORATOR, -AS_GET_DECORATOR, -AS_R5_SET_DECORATOR, + // Global function call defs + AS_SET_UI_COLORS, + AS_GET_UI_COLORS, + AS_GET_UI_COLOR, + AS_SET_DECORATOR, + AS_GET_DECORATOR, + AS_R5_SET_DECORATOR, -AS_COUNT_WORKSPACES, -AS_SET_WORKSPACE_COUNT, -AS_CURRENT_WORKSPACE, -AS_ACTIVATE_WORKSPACE, -AS_SET_SCREEN_MODE, -AS_GET_SCROLLBAR_INFO, -AS_SET_SCROLLBAR_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, + AS_COUNT_WORKSPACES, + AS_SET_WORKSPACE_COUNT, + AS_CURRENT_WORKSPACE, + AS_ACTIVATE_WORKSPACE, + AS_SET_SCREEN_MODE, + AS_GET_SCROLLBAR_INFO, + AS_SET_SCROLLBAR_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, -// Hook function messages -AS_WORKSPACE_ACTIVATED, -AS_WORKSPACES_CHANGED, -AS_WINDOW_ACTIVATED, -AS_SCREENMODE_CHANGED, + // Hook function messages + AS_WORKSPACE_ACTIVATED, + AS_WORKSPACES_CHANGED, + AS_WINDOW_ACTIVATED, + AS_SCREENMODE_CHANGED, -// Graphics calls -// Are these TRANSACTION codes needed ? -AS_BEGIN_TRANSACTION, -AS_END_TRANSACTION, -AS_SET_HIGH_COLOR, -AS_SET_LOW_COLOR, -AS_SET_VIEW_COLOR, + // Graphics calls + // Are these TRANSACTION codes needed ? + AS_BEGIN_TRANSACTION, + AS_END_TRANSACTION, + AS_SET_HIGH_COLOR, + AS_SET_LOW_COLOR, + AS_SET_VIEW_COLOR, -AS_STROKE_ARC, -AS_STROKE_BEZIER, -AS_STROKE_ELLIPSE, -AS_STROKE_LINE, -AS_STROKE_LINEARRAY, -AS_STROKE_POLYGON, -AS_STROKE_RECT, -AS_STROKE_ROUNDRECT, -AS_STROKE_SHAPE, -AS_STROKE_TRIANGLE, + AS_STROKE_ARC, + AS_STROKE_BEZIER, + AS_STROKE_ELLIPSE, + AS_STROKE_LINE, + AS_STROKE_LINEARRAY, + AS_STROKE_POLYGON, + AS_STROKE_RECT, + AS_STROKE_ROUNDRECT, + AS_STROKE_SHAPE, + AS_STROKE_TRIANGLE, -AS_FILL_ARC, -AS_FILL_BEZIER, -AS_FILL_ELLIPSE, -AS_FILL_POLYGON, -AS_FILL_RECT, -AS_FILL_REGION, -AS_FILL_ROUNDRECT, -AS_FILL_SHAPE, -AS_FILL_TRIANGLE, + AS_FILL_ARC, + AS_FILL_BEZIER, + AS_FILL_ELLIPSE, + AS_FILL_POLYGON, + AS_FILL_RECT, + AS_FILL_REGION, + AS_FILL_ROUNDRECT, + AS_FILL_SHAPE, + AS_FILL_TRIANGLE, -AS_MOVEPENBY, -AS_MOVEPENTO, -AS_SETPENSIZE, -AS_DRAW_STRING, -AS_SET_FONT, -AS_SET_FONT_SIZE, + AS_MOVEPENBY, + AS_MOVEPENTO, + AS_SETPENSIZE, + AS_DRAW_STRING, + AS_SET_FONT, + AS_SET_FONT_SIZE, -AS_FLUSH, -AS_SYNC, + AS_FLUSH, + AS_SYNC, -AS_LAYER_CREATE, -AS_LAYER_DELETE, -AS_LAYER_CREATE_ROOT, -AS_LAYER_DELETE_ROOT, -AS_LAYER_ADD_CHILD, -AS_LAYER_REMOVE_CHILD, -AS_LAYER_REMOVE_SELF, -AS_LAYER_SHOW, -AS_LAYER_HIDE, -AS_LAYER_MOVE, -AS_LAYER_RESIZE, -AS_LAYER_INVALIDATE, -AS_LAYER_DRAW, + AS_LAYER_CREATE, + AS_LAYER_DELETE, + AS_LAYER_CREATE_ROOT, + AS_LAYER_DELETE_ROOT, + AS_LAYER_ADD_CHILD, + AS_LAYER_REMOVE_CHILD, + AS_LAYER_REMOVE_SELF, + AS_LAYER_SHOW, + AS_LAYER_HIDE, + AS_LAYER_MOVE, + AS_LAYER_RESIZE, + AS_LAYER_INVALIDATE, + AS_LAYER_DRAW, -AS_LAYER_GET_TOKEN, -AS_LAYER_ADD, -AS_LAYER_REMOVE, + AS_LAYER_GET_TOKEN, + AS_LAYER_ADD, + AS_LAYER_REMOVE, -// View/Layer definitions -AS_LAYER_GET_COORD, -AS_LAYER_SET_FLAGS, -AS_LAYER_SET_ORIGIN, -AS_LAYER_GET_ORIGIN, -AS_LAYER_RESIZE_MODE, -AS_LAYER_CURSOR, -AS_LAYER_BEGIN_RECT_TRACK, -AS_LAYER_END_RECT_TRACK, -AS_LAYER_DRAG_RECT, -AS_LAYER_DRAG_IMAGE, -AS_LAYER_GET_MOUSE_COORDS, -AS_LAYER_SCROLL, -AS_LAYER_SET_LINE_MODE, -AS_LAYER_GET_LINE_MODE, -AS_LAYER_PUSH_STATE, -AS_LAYER_POP_STATE, -AS_LAYER_SET_SCALE, -AS_LAYER_GET_SCALE, -AS_LAYER_SET_DRAW_MODE, -AS_LAYER_GET_DRAW_MODE, -AS_LAYER_SET_BLEND_MODE, -AS_LAYER_GET_BLEND_MODE, -AS_LAYER_SET_PEN_LOC, -AS_LAYER_GET_PEN_LOC, -AS_LAYER_SET_PEN_SIZE, -AS_LAYER_GET_PEN_SIZE, -AS_LAYER_SET_HIGH_COLOR, -AS_LAYER_SET_LOW_COLOR, -AS_LAYER_SET_VIEW_COLOR, -AS_LAYER_GET_COLORS, -AS_LAYER_PRINT_ALIASING, -AS_LAYER_CLIP_TO_PICTURE, -AS_LAYER_CLIP_TO_INVERSE_PICTURE, -AS_LAYER_GET_CLIP_REGION, -AS_LAYER_DRAW_BITMAP_ASYNC_IN_RECT, -AS_LAYER_DRAW_BITMAP_ASYNC_AT_POINT, -AS_LAYER_DRAW_BITMAP_SYNC_IN_RECT, -AS_LAYER_DRAW_BITMAP_SYNC_AT_POINT, -AS_LAYER_SET_EVENT_MASK, -AS_LAYER_SET_MOUSE_EVENT_MASK, + // View/Layer definitions + AS_LAYER_GET_COORD, + AS_LAYER_SET_FLAGS, + AS_LAYER_SET_ORIGIN, + AS_LAYER_GET_ORIGIN, + AS_LAYER_RESIZE_MODE, + AS_LAYER_CURSOR, + AS_LAYER_BEGIN_RECT_TRACK, + AS_LAYER_END_RECT_TRACK, + AS_LAYER_DRAG_RECT, + AS_LAYER_DRAG_IMAGE, + AS_LAYER_GET_MOUSE_COORDS, + AS_LAYER_SCROLL, + AS_LAYER_SET_LINE_MODE, + AS_LAYER_GET_LINE_MODE, + AS_LAYER_PUSH_STATE, + AS_LAYER_POP_STATE, + AS_LAYER_SET_SCALE, + AS_LAYER_GET_SCALE, + AS_LAYER_SET_DRAW_MODE, + AS_LAYER_GET_DRAW_MODE, + AS_LAYER_SET_BLEND_MODE, + AS_LAYER_GET_BLEND_MODE, + AS_LAYER_SET_PEN_LOC, + AS_LAYER_GET_PEN_LOC, + AS_LAYER_SET_PEN_SIZE, + AS_LAYER_GET_PEN_SIZE, + AS_LAYER_SET_HIGH_COLOR, + AS_LAYER_SET_LOW_COLOR, + AS_LAYER_SET_VIEW_COLOR, + AS_LAYER_GET_COLORS, + AS_LAYER_PRINT_ALIASING, + AS_LAYER_CLIP_TO_PICTURE, + AS_LAYER_CLIP_TO_INVERSE_PICTURE, + AS_LAYER_GET_CLIP_REGION, + AS_LAYER_DRAW_BITMAP_ASYNC_IN_RECT, + AS_LAYER_DRAW_BITMAP_ASYNC_AT_POINT, + AS_LAYER_DRAW_BITMAP_SYNC_IN_RECT, + AS_LAYER_DRAW_BITMAP_SYNC_AT_POINT, + AS_LAYER_SET_EVENT_MASK, + AS_LAYER_SET_MOUSE_EVENT_MASK, -AS_LAYER_DRAW_STRING, -AS_LAYER_SET_CLIP_REGION, -AS_LAYER_LINE_ARRAY, -AS_LAYER_BEGIN_PICTURE, -AS_LAYER_APPEND_TO_PICTURE, -AS_LAYER_END_PICTURE, -AS_LAYER_COPY_BITS, -AS_LAYER_DRAW_PICTURE, -AS_LAYER_INVAL_RECT, -AS_LAYER_INVAL_REGION, -AS_LAYER_INVERT_RECT, -AS_LAYER_MOVETO, -AS_LAYER_RESIZETO, -AS_LAYER_SET_STATE, -AS_LAYER_SET_FONT_STATE, -AS_LAYER_GET_STATE, -AS_LAYER_SET_VIEW_IMAGE, -AS_LAYER_SET_PATTERN, -AS_SET_CURRENT_LAYER, + AS_LAYER_DRAW_STRING, + AS_LAYER_SET_CLIP_REGION, + AS_LAYER_LINE_ARRAY, + AS_LAYER_BEGIN_PICTURE, + AS_LAYER_APPEND_TO_PICTURE, + AS_LAYER_END_PICTURE, + AS_LAYER_COPY_BITS, + AS_LAYER_DRAW_PICTURE, + AS_LAYER_INVAL_RECT, + AS_LAYER_INVAL_REGION, + AS_LAYER_INVERT_RECT, + AS_LAYER_MOVETO, + AS_LAYER_RESIZETO, + AS_LAYER_SET_STATE, + AS_LAYER_SET_FONT_STATE, + AS_LAYER_GET_STATE, + AS_LAYER_SET_VIEW_IMAGE, + AS_LAYER_SET_PATTERN, + AS_SET_CURRENT_LAYER, -// app_server internal communication -AS_ROOTLAYER_SHOW_WINBORDER, -AS_ROOTLAYER_HIDE_WINBORDER, -AS_ROOTLAYER_DO_INVALIDATE, -AS_ROOTLAYER_DO_REDRAW, -AS_ROOTLAYER_LAYER_MOVE, -AS_ROOTLAYER_LAYER_RESIZE, -AS_ROOTLAYER_ADD_TO_SUBSET, -AS_ROOTLAYER_REMOVE_FROM_SUBSET, -AS_ROOTLAYER_WINBORDER_SET_WORKSPACES, -AS_ROOTLAYER_DO_CHANGE_WINBORDER_FEEL + // app_server internal communication + AS_ROOTLAYER_SHOW_WINBORDER, + AS_ROOTLAYER_HIDE_WINBORDER, + AS_ROOTLAYER_DO_INVALIDATE, + AS_ROOTLAYER_DO_REDRAW, + AS_ROOTLAYER_LAYER_MOVE, + AS_ROOTLAYER_LAYER_RESIZE, + AS_ROOTLAYER_ADD_TO_SUBSET, + AS_ROOTLAYER_REMOVE_FROM_SUBSET, + AS_ROOTLAYER_WINBORDER_SET_WORKSPACES, + AS_ROOTLAYER_DO_CHANGE_WINBORDER_FEEL }; #define AS_PATTERN_SIZE 8 diff --git a/src/kits/interface/PrivateScreen.cpp b/src/kits/interface/PrivateScreen.cpp index ac34b3d819..ae79a50d9e 100644 --- a/src/kits/interface/PrivateScreen.cpp +++ b/src/kits/interface/PrivateScreen.cpp @@ -245,15 +245,17 @@ BPrivateScreen::ReadBitmap(BBitmap *bitmap, bool drawCursor, BRect *bound) rgb_color BPrivateScreen::DesktopColor(uint32 workspace) { - rgb_color color; - /* + rgb_color color = { 51, 102, 152, 255 }; BAppServerLink link; - PortMessage reply; - link.SetOpCode(AS_GET_DESKTOP_COLOR); + + link.StartMessage(AS_GET_DESKTOP_COLOR); link.Attach(workspace); - link.FlushWithReply(&reply); - reply.Read(&color); - */ + + int32 code; + if (link.FlushWithReply(&code) == B_OK + && code == SERVER_TRUE) + link.Read(&color); + return color; } @@ -261,14 +263,13 @@ BPrivateScreen::DesktopColor(uint32 workspace) void BPrivateScreen::SetDesktopColor(rgb_color color, uint32 workspace, bool makeDefault) { - /* BAppServerLink link; - link.SetOpCode(AS_SET_DESKTOP_COLOR); + + link.StartMessage(AS_SET_DESKTOP_COLOR); link.Attach(color); link.Attach(workspace); link.Attach(makeDefault); link.Flush(); - */ } diff --git a/src/servers/app/AppServer.cpp b/src/servers/app/AppServer.cpp index 861e227da4..f6c7b838e9 100644 --- a/src/servers/app/AppServer.cpp +++ b/src/servers/app/AppServer.cpp @@ -403,7 +403,7 @@ AppServer::MainLoop(void) int32 code; status_t err = pmsg.GetNextMessage(code); if (err < B_OK) { - STRACE(("MainLoop:pmsg.GetNextReply failed\n")); + STRACE(("MainLoop:pmsg.GetNextMessage() failed\n")); continue; } diff --git a/src/servers/app/ServerApp.cpp b/src/servers/app/ServerApp.cpp index 478eeafc94..01db1449fd 100644 --- a/src/servers/app/ServerApp.cpp +++ b/src/servers/app/ServerApp.cpp @@ -652,13 +652,13 @@ ServerApp::DispatchMessage(int32 code, LinkMsgReader &link) // TODO; Implement AS_DOWNLOAD_PICTURE // What is this particular function call for, anyway? - STRACE(("ServerApp %s: Download Picture unimplemented\n",fSignature.String())); + STRACE(("ServerApp %s: Download Picture unimplemented\n", fSignature.String())); break; } case AS_SET_SCREEN_MODE: { - STRACE(("ServerApp %s: Set Screen Mode\n",fSignature.String())); + STRACE(("ServerApp %s: Set Screen Mode\n", fSignature.String())); // Attached data // 1) int32 workspace # @@ -670,10 +670,12 @@ ServerApp::DispatchMessage(int32 code, LinkMsgReader &link) link.Read(&index); link.Read(&mode); link.Read(&stick); - - RootLayer *root=gDesktop->ActiveRootLayer(); - Workspace *workspace=root->WorkspaceAt(index); - + + // ToDo: is this still used at all? (since there is AS_SCREEN_SET_MODE?) + // ToDo: no locking? + RootLayer *root = gDesktop->ActiveRootLayer(); + Workspace *workspace = root->WorkspaceAt(index); + if (!workspace) { // apparently out of range or something, so we do nothing. :) break; @@ -1775,6 +1777,34 @@ printf("ServerApp %s: AS_SCREEN_GET_MODE\n", fSignature.String()); break; } + case AS_GET_DESKTOP_COLOR: + { + STRACE(("ServerApp %s: get desktop color\n", fSignature.String())); + + int32 workspaceIndex = 0; + link.Read(&workspaceIndex); + + // ToDo: for some reason, we currently get "1" as no. of workspace + workspaceIndex = 0; + + // ToDo: locking is probably wrong - why the hell is there no (safe) + // way to get to the workspace object directly? + RootLayer *root = gDesktop->ActiveRootLayer(); + root->Lock(); + + Workspace *workspace = root->WorkspaceAt(workspaceIndex); + if (workspace != NULL) { + fLink.StartMessage(SERVER_TRUE); + //rgb_color color; + fLink.Attach(workspace->BGColor().GetColor32()); + } else + fLink.StartMessage(SERVER_FALSE); + + fLink.Flush(); + root->Unlock(); + break; + } + default: printf("ServerApp %s received unhandled message code offset %s\n", fSignature.String(), MsgCodeToBString(code).String());