xref: /haiku/src/apps/deskbar/DeskbarUtils.cpp (revision 1cd61330ecd8257551d58f204332d00145c855ec)
1323b6546SOliver Tappe /*
2323b6546SOliver Tappe Open Tracker License
3323b6546SOliver Tappe 
4323b6546SOliver Tappe Terms and Conditions
5323b6546SOliver Tappe 
6323b6546SOliver Tappe Copyright (c) 1991-2000, Be Incorporated. All rights reserved.
7323b6546SOliver Tappe 
8323b6546SOliver Tappe Permission is hereby granted, free of charge, to any person obtaining a copy of
9323b6546SOliver Tappe this software and associated documentation files (the "Software"), to deal in
10323b6546SOliver Tappe the Software without restriction, including without limitation the rights to
11323b6546SOliver Tappe use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
12323b6546SOliver Tappe of the Software, and to permit persons to whom the Software is furnished to do
13323b6546SOliver Tappe so, subject to the following conditions:
14323b6546SOliver Tappe 
15323b6546SOliver Tappe The above copyright notice and this permission notice applies to all licensees
16323b6546SOliver Tappe and shall be included in all copies or substantial portions of the Software.
17323b6546SOliver Tappe 
18323b6546SOliver Tappe THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19323b6546SOliver Tappe IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF TITLE, MERCHANTABILITY,
20323b6546SOliver Tappe FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
21323b6546SOliver Tappe BE INCORPORATED BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
22323b6546SOliver Tappe AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION
23323b6546SOliver Tappe WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24323b6546SOliver Tappe 
25323b6546SOliver Tappe Except as contained in this notice, the name of Be Incorporated shall not be
26323b6546SOliver Tappe used in advertising or otherwise to promote the sale, use or other dealings in
27323b6546SOliver Tappe this Software without prior written authorization from Be Incorporated.
28323b6546SOliver Tappe 
29323b6546SOliver Tappe Tracker(TM), Be(R), BeOS(R), and BeIA(TM) are trademarks or registered
30323b6546SOliver Tappe trademarks of Be Incorporated in the United States and other countries. Other
31323b6546SOliver Tappe brand product names are registered trademarks or trademarks of their respective
32323b6546SOliver Tappe holders.
33323b6546SOliver Tappe All rights reserved.
34323b6546SOliver Tappe */
35323b6546SOliver Tappe 
36*1cd61330SJohn Scipione 
37*1cd61330SJohn Scipione #include "DeskbarUtils.h"
38*1cd61330SJohn Scipione 
39323b6546SOliver Tappe #include <stdio.h>
40323b6546SOliver Tappe #include <stdlib.h>
41323b6546SOliver Tappe #include <string.h>
42323b6546SOliver Tappe 
43323b6546SOliver Tappe #include <AppFileInfo.h>
44*1cd61330SJohn Scipione #include <Debug.h>
45323b6546SOliver Tappe #include <Directory.h>
46323b6546SOliver Tappe #include <FilePanel.h>
47323b6546SOliver Tappe #include <FindDirectory.h>
48323b6546SOliver Tappe #include <List.h>
49323b6546SOliver Tappe #include <Mime.h>
50323b6546SOliver Tappe #include <NodeInfo.h>
51323b6546SOliver Tappe #include <Screen.h>
52323b6546SOliver Tappe #include <SymLink.h>
53*1cd61330SJohn Scipione #include <Window.h>
54323b6546SOliver Tappe 
55323b6546SOliver Tappe #include "BarMenuBar.h"
56323b6546SOliver Tappe #include "ExpandoMenuBar.h"
57323b6546SOliver Tappe 
58323b6546SOliver Tappe void
59323b6546SOliver Tappe AddRefsToDeskbarMenu(const BMessage* m, entry_ref* subdirectory)
60323b6546SOliver Tappe {
61323b6546SOliver Tappe 	if (m) {
62323b6546SOliver Tappe 		int32 count = 0;
63323b6546SOliver Tappe 		uint32 type = 0;
64323b6546SOliver Tappe 		entry_ref ref;
65323b6546SOliver Tappe 
66323b6546SOliver Tappe 		m->GetInfo("refs", &type, &count);
67323b6546SOliver Tappe 		if (count <= 0)
68323b6546SOliver Tappe 			return;
69323b6546SOliver Tappe 
70323b6546SOliver Tappe 		BPath path;
71323b6546SOliver Tappe 		BSymLink link;
72323b6546SOliver Tappe 		BDirectory dir;
73323b6546SOliver Tappe 		if (subdirectory) {
74323b6546SOliver Tappe 			ref = *subdirectory;
75323b6546SOliver Tappe 			BEntry entry(&ref);
76323b6546SOliver Tappe 			if (entry.Exists()) {
77323b6546SOliver Tappe 				// if the ref is a file get the parent and convert it to a ref
78323b6546SOliver Tappe 				if (entry.IsFile()) {
79323b6546SOliver Tappe 					BEntry parent;
80323b6546SOliver Tappe 					entry.GetParent(&parent);
81323b6546SOliver Tappe 					parent.GetRef(&ref);
82323b6546SOliver Tappe 				}
83323b6546SOliver Tappe 			} else
84323b6546SOliver Tappe 				return;
85323b6546SOliver Tappe 
86323b6546SOliver Tappe 			dir.SetTo(&ref);
87323b6546SOliver Tappe 		} else {
88323b6546SOliver Tappe 			if (find_directory(B_USER_DESKBAR_DIRECTORY, &path) == B_OK)
89323b6546SOliver Tappe 				dir.SetTo(path.Path());
90323b6546SOliver Tappe 			else
91323b6546SOliver Tappe 				return;
92323b6546SOliver Tappe 		}
93323b6546SOliver Tappe 
94323b6546SOliver Tappe 		for (long i = 0; i < count; i++) {
95323b6546SOliver Tappe 			if (m->FindRef("refs", i, &ref) == B_NO_ERROR) {
96323b6546SOliver Tappe 				BEntry entry(&ref);
97323b6546SOliver Tappe 				entry.GetPath(&path);
98323b6546SOliver Tappe 
99323b6546SOliver Tappe 				dir.CreateSymLink(ref.name, path.Path(), &link);
100323b6546SOliver Tappe 			}
101323b6546SOliver Tappe 		}
102323b6546SOliver Tappe 	}
103323b6546SOliver Tappe }
104