Display: add options --display-detect-name and --display-precise-refresh-rate

This commit is contained in:
李通洲
2023-03-22 16:49:53 +08:00
parent 1ac90584cb
commit 642a0c78cc
9 changed files with 58 additions and 26 deletions
@@ -11,7 +11,7 @@
extern CFDictionaryRef CoreDisplay_DisplayCreateInfoDictionary(CGDirectDisplayID display) __attribute__((weak_import));
static void detectDisplays(FFDisplayServerResult* ds)
static void detectDisplays(FFDisplayServerResult* ds, bool detectName)
{
CGDirectDisplayID screens[128];
uint32_t screenCount;
@@ -41,7 +41,7 @@ static void detectDisplays(FFDisplayServerResult* ds)
FF_STRBUF_AUTO_DESTROY name;
ffStrbufInit(&name);
if(CoreDisplay_DisplayCreateInfoDictionary)
if(detectName && CoreDisplay_DisplayCreateInfoDictionary)
{
CFDictionaryRef FF_CFTYPE_AUTO_RELEASE displayInfo = CoreDisplay_DisplayCreateInfoDictionary(screen);
if(displayInfo)
@@ -120,5 +120,5 @@ void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* ins
ffStrbufAppendS(&ds->dePrettyName, "Aqua");
ffListInitA(&ds->displays, sizeof(FFDisplayResult), 4);
detectDisplays(ds);
detectDisplays(ds, instance->config.displayDetectName);
}
@@ -26,27 +26,8 @@ static CALLBACK WINBOOL enumMonitorProc(HMONITOR hMonitor, FF_MAYBE_UNUSED HDC h
return TRUE;
}
void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* instance)
static void detectDisplays(FFDisplayServerResult* ds, bool detectName)
{
FF_UNUSED(instance);
BOOL enabled;
if(SUCCEEDED(DwmIsCompositionEnabled(&enabled)) && enabled == TRUE)
{
ffStrbufInitS(&ds->wmProcessName, "dwm.exe");
ffStrbufInitS(&ds->wmPrettyName, "Desktop Window Manager");
}
else
{
ffStrbufInitS(&ds->wmProcessName, "internal");
ffStrbufInitS(&ds->wmPrettyName, "internal");
}
ffStrbufInit(&ds->wmProtocolName);
ffStrbufInit(&ds->deProcessName);
ffStrbufInit(&ds->dePrettyName);
ffStrbufInit(&ds->deVersion);
ffListInit(&ds->displays, sizeof(FFDisplayResult));
DISPLAYCONFIG_PATH_INFO paths[128];
uint32_t pathCount = sizeof(paths) / sizeof(paths[0]);
DISPLAYCONFIG_MODE_INFO modes[256];
@@ -94,7 +75,8 @@ void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* ins
FF_STRBUF_AUTO_DESTROY name;
ffStrbufInit(&name);
if(SUCCEEDED(DisplayConfigGetDeviceInfo(&targetName.header)) && targetName.flags.friendlyNameFromEdid)
if(detectName && SUCCEEDED(DisplayConfigGetDeviceInfo(&targetName.header)) && targetName.flags.friendlyNameFromEdid)
ffStrbufSetWS(&name, targetName.monitorFriendlyDeviceName);
ffdsAppendDisplay(ds,
@@ -106,6 +88,28 @@ void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* ins
&name);
}
}
}
void ffConnectDisplayServerImpl(FFDisplayServerResult* ds, const FFinstance* instance)
{
BOOL enabled;
if(SUCCEEDED(DwmIsCompositionEnabled(&enabled)) && enabled == TRUE)
{
ffStrbufInitS(&ds->wmProcessName, "dwm.exe");
ffStrbufInitS(&ds->wmPrettyName, "Desktop Window Manager");
}
else
{
ffStrbufInitS(&ds->wmProcessName, "internal");
ffStrbufInitS(&ds->wmPrettyName, "internal");
}
ffStrbufInit(&ds->wmProtocolName);
ffStrbufInit(&ds->deProcessName);
ffStrbufInit(&ds->dePrettyName);
ffStrbufInit(&ds->deVersion);
ffListInit(&ds->displays, sizeof(FFDisplayResult));
detectDisplays(ds, instance->config.displayDetectName);
//https://github.com/hykilpikonna/hyfetch/blob/master/neofetch#L2067
const FFOSResult* os = ffDetectOS(instance);