3 #include <X11/Xlocale.h>
9 struct W_Application WMApplication
;
11 char *_WINGS_progname
= NULL
;
13 Bool
W_ApplicationInitialized(void)
15 return _WINGS_progname
!= NULL
;
18 void WMInitializeApplication(const char *applicationName
, int *argc
, char **argv
)
24 assert(applicationName
!= NULL
);
26 setlocale(LC_ALL
, "");
29 if (getenv("NLSPATH"))
30 bindtextdomain("WINGs", getenv("NLSPATH"));
32 bindtextdomain("WINGs", LOCALEDIR
);
33 bind_textdomain_codeset("WINGs", "UTF-8");
36 _WINGS_progname
= argv
[0];
38 WMApplication
.applicationName
= wstrdup(applicationName
);
39 WMApplication
.argc
= *argc
;
41 WMApplication
.argv
= wmalloc((*argc
+ 1) * sizeof(char *));
42 for (i
= 0; i
< *argc
; i
++) {
43 WMApplication
.argv
[i
] = wstrdup(argv
[i
]);
45 WMApplication
.argv
[i
] = NULL
;
47 /* initialize notification center */
48 W_InitNotificationCenter();
51 void WMSetResourcePath(const char *path
)
53 if (WMApplication
.resourcePath
)
54 wfree(WMApplication
.resourcePath
);
55 WMApplication
.resourcePath
= wstrdup(path
);
58 char *WMGetApplicationName()
60 return WMApplication
.applicationName
;
63 static char *checkFile(const char *path
, const char *folder
, const char *ext
, const char *resource
)
69 if (!path
|| !resource
)
72 extralen
= (ext
? strlen(ext
) + 1 : 0) + (folder
? strlen(folder
) + 1 : 0) + 1;
73 slen
= strlen(path
) + strlen(resource
) + 1 + extralen
;
76 if (wstrlcpy(ret
, path
, slen
) >= slen
)
80 (wstrlcat(ret
, "/", slen
) >= slen
||
81 wstrlcat(ret
, folder
, slen
) >= slen
))
85 (wstrlcat(ret
, "/", slen
) >= slen
||
86 wstrlcat(ret
, ext
, slen
) >= slen
))
89 if (wstrlcat(ret
, "/", slen
) >= slen
||
90 wstrlcat(ret
, resource
, slen
) >= slen
)
93 if (access(ret
, F_OK
) != 0)
104 char *WMPathForResourceOfType(const char *resource
, const char *ext
)
106 char *path
, *tmp
, *appdir
;
110 path
= tmp
= appdir
= NULL
;
113 * Paths are searched in this order:
115 * - dirname(argv[0])/ext
116 * - GNUSTEP_USER_ROOT/Applications/ApplicationName.app/ext
117 * - ~/GNUstep/Applications/ApplicationName.app/ext
118 * - GNUSTEP_LOCAL_ROOT/Applications/ApplicationName.app/ext
119 * - /usr/local/GNUstep/Applications/ApplicationName.app/ext
120 * - GNUSTEP_SYSTEM_ROOT/Applications/ApplicationName.app/ext
121 * - /usr/GNUstep/Applications/ApplicationName.app/ext
124 if (WMApplication
.resourcePath
) {
125 path
= checkFile(WMApplication
.resourcePath
, NULL
, ext
, resource
);
130 if (WMApplication
.argv
[0]) {
131 tmp
= wstrdup(WMApplication
.argv
[0]);
133 while (i
> 0 && tmp
[i
] != '/')
137 path
= checkFile(tmp
, NULL
, ext
, resource
);
144 slen
= strlen(WMApplication
.applicationName
) + sizeof("Applications/.app");
145 appdir
= wmalloc(slen
);
146 if (snprintf(appdir
, slen
, "Applications/%s.app", WMApplication
.applicationName
) >= slen
)
149 path
= checkFile(getenv("GNUSTEP_USER_ROOT"), appdir
, ext
, resource
);
153 path
= checkFile(wusergnusteppath(), appdir
, ext
, resource
);
157 path
= checkFile(getenv("GNUSTEP_LOCAL_ROOT"), appdir
, ext
, resource
);
161 path
= checkFile("/usr/local/GNUstep", appdir
, ext
, resource
);
165 path
= checkFile(getenv("GNUSTEP_SYSTEM_ROOT"), appdir
, ext
, resource
);
169 path
= checkFile("/usr/GNUstep", appdir
, ext
, resource
); /* falls through */