66#include "common/time.h"
77#include "util/edidHelper.h"
88#include "util/mallocHelper.h"
9+ #include "util/stringUtils.h"
910
1011#include <stdlib.h>
1112#include <string.h>
@@ -24,6 +25,9 @@ typedef struct XcbPropertyData
2425 FF_LIBRARY_SYMBOL (xcb_get_atom_name_name )
2526 FF_LIBRARY_SYMBOL (xcb_get_atom_name_name_length )
2627 FF_LIBRARY_SYMBOL (xcb_get_atom_name_reply )
28+ FF_LIBRARY_SYMBOL (xcb_get_setup )
29+ FF_LIBRARY_SYMBOL (xcb_setup_vendor )
30+ FF_LIBRARY_SYMBOL (xcb_setup_vendor_length )
2731} XcbPropertyData ;
2832
2933static bool xcbInitPropertyData (FF_MAYBE_UNUSED void * libraryHandle , XcbPropertyData * propertyData )
@@ -38,6 +42,9 @@ static bool xcbInitPropertyData(FF_MAYBE_UNUSED void* libraryHandle, XcbProperty
3842 FF_LIBRARY_LOAD_SYMBOL_PTR (libraryHandle , propertyData , xcb_get_atom_name_name , false )
3943 FF_LIBRARY_LOAD_SYMBOL_PTR (libraryHandle , propertyData , xcb_get_atom_name_name_length , false )
4044 FF_LIBRARY_LOAD_SYMBOL_PTR (libraryHandle , propertyData , xcb_get_atom_name_reply , false )
45+ FF_LIBRARY_LOAD_SYMBOL_PTR (libraryHandle , propertyData , xcb_get_setup , false )
46+ FF_LIBRARY_LOAD_SYMBOL_PTR (libraryHandle , propertyData , xcb_setup_vendor , false )
47+ FF_LIBRARY_LOAD_SYMBOL_PTR (libraryHandle , propertyData , xcb_setup_vendor_length , false )
4148
4249 return true ;
4350}
@@ -86,6 +93,21 @@ static void xcbDetectWMfromEWMH(XcbPropertyData* data, xcb_connection_t* connect
8693 ffStrbufSetS (& result -> wmProcessName , wmName );
8794}
8895
96+ static void xcbFetchServerVendor (XcbPropertyData * data , xcb_connection_t * connection , FFDisplayServerResult * result )
97+ {
98+ const xcb_setup_t * setup = data -> ffxcb_get_setup (connection );
99+
100+ int length = data -> ffxcb_setup_vendor_length (setup );
101+ if (length <= 0 )
102+ return ;
103+
104+ ffStrbufSetNS (& result -> serverVendor , (uint32_t ) length , data -> ffxcb_setup_vendor (setup ));
105+
106+ //Shorten Xorg vendor string
107+ if (!ffStrbufCompS (& result -> serverVendor , "The X.Org Foundation" ))
108+ ffStrbufSetS (& result -> serverVendor , "Xorg" );
109+ }
110+
89111typedef struct XcbRandrData
90112{
91113 FF_LIBRARY_SYMBOL (xcb_randr_get_screen_resources_current )
@@ -381,8 +403,10 @@ const char* ffdsConnectXcbRandr(FFDisplayServerResult* result)
381403 xcb_screen_iterator_t iterator = ffxcb_setup_roots_iterator (ffxcb_get_setup (data .connection ));
382404
383405
384- if (iterator .rem > 0 && propertyDataInitialized )
406+ if (iterator .rem > 0 && propertyDataInitialized ) {
385407 xcbDetectWMfromEWMH (& data .propData , data .connection , iterator .data -> root , result );
408+ xcbFetchServerVendor (& data .propData , data .connection , result );
409+ }
386410
387411
388412 while (iterator .rem > 0 )
0 commit comments