Don't get OOPBase in this ugly way.
[tangerine.git] / rom / intuition / setwindowtitles.c
blob4b8acec070c1ad1a25b1950d04a9b33152123043
1 /*
2 Copyright © 1995-2003, The AROS Development Team. All rights reserved.
3 Copyright © 2001-2003, The MorphOS Development Team. All Rights Reserved.
4 $Id$
5 */
7 #include <proto/layers.h>
8 #include "intuition_intern.h"
9 #include "inputhandler_actions.h"
11 #ifdef __MORPHOS__
12 # include "renderwindowframe.h"
13 #endif
15 #include <string.h>
17 struct SetWindowTitlesActionMsg
19 struct IntuiActionMsg msg;
20 struct Window *window;
21 CONST_STRPTR windowTitle;
22 CONST_STRPTR screenTitle;
25 static VOID int_setwindowtitles(struct SetWindowTitlesActionMsg *msg,
26 struct IntuitionBase *IntuitionBase);
28 /*****************************************************************************
30 NAME */
31 #include <proto/intuition.h>
33 AROS_LH3(void, SetWindowTitles,
35 /* SYNOPSIS */
36 AROS_LHA(struct Window *, window, A0),
37 AROS_LHA(CONST_STRPTR, windowTitle, A1),
38 AROS_LHA(CONST_STRPTR, screenTitle, A2),
40 /* LOCATION */
41 struct IntuitionBase *, IntuitionBase, 46, Intuition)
43 /* FUNCTION
44 Changes the current window and/or the screen title.
46 INPUTS
47 window - Change the title for this window or the screen which the
48 window contains.
49 windowTitle - New title for the window or ((UBYTE *)~0L) to keep the
50 old title or NULL for no title. If you specify a string,
51 this string is *NOT* copied.
52 screenTitle - New title for the screen of the window or ((UBYTE *)~0L)
53 to keep the old title or NULL for no title. If you specify
54 a title for the screen, this title will be shown when the
55 window becomes active. If you specify a string, this string
56 is *NOT* copied.
58 RESULT
59 None.
61 NOTES
62 You should be careful with specifying a screen title because that
63 may irritate the user.
65 EXAMPLE
67 BUGS
69 SEE ALSO
71 INTERNALS
73 *****************************************************************************/
75 AROS_LIBFUNC_INIT
76 AROS_LIBBASE_EXT_DECL(struct IntuitionBase *,IntuitionBase)
78 struct SetWindowTitlesActionMsg msg;
80 SANITY_CHECK(window)
82 msg.window = window;
83 msg.windowTitle = windowTitle;
84 msg.screenTitle = screenTitle;
86 DoASyncAction((APTR)int_setwindowtitles , &msg.msg, sizeof(msg), IntuitionBase);
88 AROS_LIBFUNC_EXIT
89 } /* SetWindowTitles */
91 static VOID int_setwindowtitles(struct SetWindowTitlesActionMsg *msg,
92 struct IntuitionBase *IntuitionBase)
94 struct Window *window = msg->window;
95 CONST_STRPTR windowTitle = msg->windowTitle;
96 CONST_STRPTR screenTitle = msg->screenTitle;
97 BOOL change = TRUE;
99 LOCKWINDOWLAYERS(window);
101 if (windowTitle == (CONST_STRPTR)~0L)
103 change = FALSE;
105 else
107 window->Title = windowTitle;
108 if (windowTitle)
109 if (strncmp(windowTitle,IW(window)->titlebuffer,TITLEBUFFERLEN) == 0) change = FALSE;
112 if (change)
114 #ifdef __MORPHOS__
115 if (window == GetPrivScreen(window->WScreen)->TitlebarBufferWin) GetPrivScreen(window->WScreen)->TitlebarBufferWin = 0;
116 #endif
117 int_RefreshWindowFrame(window, REFRESHGAD_TOPBORDER, 0, DOUBLEBUFFER, IntuitionBase);
120 /* Change screen's title */
121 change = TRUE;
123 if ((screenTitle == window->ScreenTitle) || (screenTitle == (CONST_STRPTR)~0L)) change = FALSE;
125 if (change)
127 //LONG lock = LockIBase(0);
129 window->ScreenTitle = screenTitle;
131 if (window->Flags & WFLG_WINDOWACTIVE)
133 if (screenTitle)
134 window->WScreen->Title = screenTitle;
135 else
136 window->WScreen->Title = window->WScreen->DefaultTitle;
138 //UnlockIBase(lock);
139 RenderScreenBar(window->WScreen, FALSE, IntuitionBase);
142 UNLOCKWINDOWLAYERS(window);