Minor fixes to comments.
[AROS.git] / rom / intuition / unlockpubscreen.c
blobcd5dd52c314defd0d74e2a7d99f487668564cade
1 /*
2 Copyright 1995-2010, The AROS Development Team. All rights reserved.
3 Copyright 2001-2003, The MorphOS Development Team. All Rights Reserved.
4 $Id$
5 */
7 #include "intuition_intern.h"
9 static struct PubScreenNode *findcasename(struct List *list, const UBYTE *name);
11 /*****************************************************************************
13 NAME */
14 #include <proto/intuition.h>
16 AROS_LH2(void, UnlockPubScreen,
18 /* SYNOPSIS */
19 AROS_LHA(UBYTE *, name, A0),
20 AROS_LHA(struct Screen *, screen, A1),
22 /* LOCATION */
23 struct IntuitionBase *, IntuitionBase, 86, Intuition)
25 /* FUNCTION
26 Release a lock to a screen locked by LockPubScreen().
27 Identify screen by the pointer returned from LockPubScreen()
28 and pass NULL name in normal cases.
29 Sometimes it might be useful to specify the name string. In
30 this case the screen pointer will be ignored.
32 INPUTS
33 name - Name of the public screen to unlock. The name is case insensitive.
34 screen - Pointer to the screen to unlock
36 RESULT
38 NOTES
39 The screen parameter will be ignored if name is non-NULL
41 EXAMPLE
43 BUGS
45 SEE ALSO
46 LockPubScreen()
48 INTERNALS
50 HISTORY
52 *****************************************************************************/
54 AROS_LIBFUNC_INIT
56 struct List *publist;
58 DEBUG_UNLOCKPUBSCREEN(dprintf("UnlockPubScreen: name <%s> screen %p\n",
59 name ? (const char *)name : "NULL", screen));
60 DEBUG_UNLOCKPUBSCREEN(dprintf("LockPubScreen: task %p <%s>\n",
61 SysBase->ThisTask,
62 SysBase->ThisTask->tc_Node.ln_Name ? SysBase->ThisTask->tc_Node.ln_Name : "NULL"));
64 publist = LockPubScreenList();
66 if (name != NULL)
68 struct PubScreenNode *psn;
70 /* Get screen by its name */
71 if ((psn = findcasename(publist, name)))
72 screen = psn->psn_Screen;
73 else
74 screen = NULL;
76 DEBUG_UNLOCKPUBSCREEN(dprintf("UnlockPubScreen: found screen %p\n",
77 screen));
80 if (screen != NULL)
82 struct PubScreenNode *ps = GetPrivScreen(screen)->pubScrNode;
84 //ASSERT(GetPrivScreen(screen)->pubScrNode != NULL);
85 //ASSERT(GetPrivScreen(screen)->pubScrNode->psn_VisitorCount > 0);
87 /* Unlock screen */
88 ps->psn_VisitorCount--;
90 DEBUG_VISITOR(dprintf("UnlockPubScreen: count %d <%s>\n",
91 ps->psn_VisitorCount,
92 FindTask(NULL)->tc_Node.ln_Name));
95 DEBUG_UNLOCKPUBSCREEN(dprintf("UnlockPubScreen: count %d\n",
96 ps->psn_VisitorCount));
98 /* Notify screen owner if this is (was) the last window on the
99 screen */
100 if(ps->psn_VisitorCount == 0)
102 if(ps->psn_SigTask != NULL)
103 Signal(ps->psn_SigTask, 1 << ps->psn_SigBit);
108 UnlockPubScreenList();
110 FireScreenNotifyMessage((IPTR) name, SNOTIFY_UNLOCKPUBSCREEN, IntuitionBase);
112 AROS_LIBFUNC_EXIT
113 } /* UnlockPubScreen */
116 /* case insensitive FindName() */
117 static struct PubScreenNode *findcasename(struct List *list, const UBYTE *name)
119 struct Node *node;
121 for (node = GetHead(list); node; node = GetSucc(node))
123 if(node->ln_Name)
125 if (!strcasecmp (node->ln_Name, name))
126 break;
129 return (struct PubScreenNode *)node;