mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 02:42:09 +02:00
Wallpaper (Haiku): adds support (#2314)
* Wallpaper (Haiku): Add support * Refactor wallpaper detection logic and memory handling --------- Co-authored-by: Carter Li <CarterLi@users.noreply.github.com>
This commit is contained in:
+1
-1
@@ -1240,7 +1240,7 @@ elseif(Haiku)
|
||||
src/detection/tpm/tpm_nosupport.c
|
||||
src/detection/uptime/uptime_haiku.c
|
||||
src/detection/users/users_linux.c
|
||||
src/detection/wallpaper/wallpaper_nosupport.c
|
||||
src/detection/wallpaper/wallpaper_haiku.cpp
|
||||
src/detection/wifi/wifi_nosupport.c
|
||||
src/detection/wm/wm_nosupport.c
|
||||
src/detection/de/de_nosupport.c
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
extern "C" {
|
||||
#include "wallpaper.h"
|
||||
#include "common/mallocHelper.h"
|
||||
}
|
||||
|
||||
#include <Application.h>
|
||||
#include <FindDirectory.h>
|
||||
#include <InterfaceDefs.h>
|
||||
#include <Node.h>
|
||||
#include <Path.h>
|
||||
#include <Screen.h>
|
||||
#include <fs_attr.h>
|
||||
#include <be_apps/Tracker/Background.h>
|
||||
|
||||
const char* ffDetectWallpaper(FFstrbuf* result) {
|
||||
BMessage backgrounds;
|
||||
BPath pDesktop;
|
||||
BString path;
|
||||
|
||||
if (find_directory(B_DESKTOP_DIRECTORY, &pDesktop) < B_OK) {
|
||||
return "find_directory(B_DESKTOP_DIRECTORY) failed";
|
||||
}
|
||||
|
||||
// We need a valid be_app to query the app_server here.
|
||||
BApplication app("application/x-vnd.fastfetch-cli-fastfetch");
|
||||
|
||||
BNode nDesktop(pDesktop.Path());
|
||||
if (nDesktop.InitCheck() == B_OK) {
|
||||
struct attr_info ai;
|
||||
if (nDesktop.GetAttrInfo(B_BACKGROUND_INFO, &ai) == B_OK && ai.size > 0) {
|
||||
FF_AUTO_FREE char* pAttr = (char*) malloc(ai.size);
|
||||
if (nDesktop.ReadAttr(B_BACKGROUND_INFO, ai.type, 0LL, pAttr, (size_t) ai.size) >= B_OK) {
|
||||
if (backgrounds.Unflatten(pAttr) == B_OK) {
|
||||
for (int i = 0; backgrounds.FindString(B_BACKGROUND_IMAGE, i, &path) == B_OK; i++) {
|
||||
int32 ws;
|
||||
if (backgrounds.FindInt32(B_BACKGROUND_WORKSPACES, i, &ws) == B_OK) {
|
||||
if (ws & (1 << current_workspace())) {
|
||||
// We try to match the one for the current workspace
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (path.Length() < 1) {
|
||||
return "Failed to detect the current wallpaper path";
|
||||
}
|
||||
|
||||
ffStrbufAppendS(result, path.String());
|
||||
return NULL;
|
||||
}
|
||||
Reference in New Issue
Block a user