Skip to content

Commit

Permalink
computer/display: use x_util for display information
Browse files Browse the repository at this point in the history
This commit fixes:
* lpereira#200
  now using xrandr to get screen info instead of gdk, so it works
  from the cli
* lpereira#27
  opengl core and compatibility versions are both listed
* lpereira#230
  (by removing extension list)

Signed-off-by: Burt P <pburt0@gmail.com>
  • Loading branch information
bp0 committed Mar 23, 2018
1 parent 4b9bc43 commit 8c90f0f
Show file tree
Hide file tree
Showing 3 changed files with 141 additions and 165 deletions.
28 changes: 17 additions & 11 deletions includes/computer.h
Expand Up @@ -19,6 +19,7 @@
#define __COMPUTER_H__

#include "hardinfo.h"
#include "x_util.h"

typedef struct _Computer Computer;
typedef struct _OperatingSystem OperatingSystem;
Expand All @@ -36,14 +37,14 @@ typedef struct _FileSystemEntry FileSystemEntry;
struct _AlsaCard {
gchar *alsa_name;
gchar *friendly_name;
/*
/*
gchar *board;
gchar revision, compat_class;
gint subsys_vendorid, subsys_id;
gint cap_dac_res, cap_adc_res;
gboolean cap_3d_enh;
gint curr_mic_gain;
gboolean curr_3d_enh,
curr_loudness,
Expand All @@ -57,14 +58,18 @@ struct _AlsaInfo {
};

struct _DisplayInfo {
gchar *ogl_vendor, *ogl_renderer, *ogl_version;
gboolean dri;

gchar *display_name, *vendor, *version;
gchar *extensions;
gchar *monitors;

/* old stuff */
gint width, height;

/* new stuff */
xinfo *xi; /* x info */
wl_info *wl; /* wayland info */

gchar *display_server;

/* don't free */
const gchar *vendor; /* X vendor; points to xrr->xi->vendor */
const gchar *session_type; /* points to wl->xdg_session_type */
};

struct _LoadInfo {
Expand Down Expand Up @@ -97,7 +102,7 @@ struct _OperatingSystem {

gchar *desktop;
gchar *username;

gchar *boots;

gchar *entropy_avail;
Expand Down Expand Up @@ -144,6 +149,7 @@ AlsaInfo *computer_get_alsainfo(void);
MemoryInfo *computer_get_memory(void);
UptimeInfo *computer_get_uptime(void);
DisplayInfo *computer_get_display(void);
void computer_free_display(DisplayInfo *di);

void scan_modules_do(void);
void scan_filesystems(void);
Expand Down
115 changes: 82 additions & 33 deletions modules/computer.c
Expand Up @@ -38,6 +38,8 @@

#include "info.h"

#define THISORUNK(t) ( (t) ? t : _("(Unknown)") )

/* Callbacks */
gchar *callback_summary(void);
gchar *callback_os(void);
Expand Down Expand Up @@ -173,6 +175,8 @@ void scan_fs(gboolean reload)
void scan_display(gboolean reload)
{
SCAN_START();
if (computer->display)
computer_free_display(computer->display);
computer->display = computer_get_display();
SCAN_END();
}
Expand Down Expand Up @@ -472,8 +476,8 @@ gchar *callback_summary(void)
info_add_group(info, _("Display"),
info_field_printf(_("Resolution"), _(/* label for resolution */ "%dx%d pixels"),
computer->display->width, computer->display->height),
info_field(_("OpenGL Renderer"), computer->display->ogl_renderer),
info_field(_("X11 Vendor"), computer->display->vendor),
info_field(_("OpenGL Renderer"), THISORUNK(computer->display->xi->glx->ogl_renderer) ),
info_field(_("Session Display Server"), THISORUNK(computer->display->display_server) ),
info_field_last());

info_add_computed_group(info, _("Audio Devices"),
Expand Down Expand Up @@ -575,28 +579,77 @@ gchar *callback_fs(void)

gchar *callback_display(void)
{
int n = 0;
gchar *screens_str = strdup(""), *outputs_str = strdup("");
xinfo *xi = computer->display->xi;
xrr_info *xrr = xi->xrr;
glx_info *glx = xi->glx;
wl_info *wl = computer->display->wl;

struct Info *info = info_new();
info_add_group(info, _("Session"),
info_field(_("Type"), THISORUNK(computer->display->session_type) ),
info_field_last());

info_add_group(info, _("Display"),
info_field_printf(_("Resolution"), _(/* resolution WxH unit */ "%dx%d pixels"),
computer->display->width, computer->display->height),
info_field(_("Vendor"), computer->display->vendor),
info_field(_("Version"), computer->display->version),
info_field(_("Current Display Name"), computer->display->display_name),
info_add_group(info, _("Wayland"),
info_field(_("Current Display Name"), (wl->display_name) ? (wl->display_name) : _("(Not Available)") ),
info_field_last());

info_add_computed_group(info, _("Monitors"), computer->display->monitors);
info_add_group(info, _("X Server"),
info_field(_("Current Display Name"), THISORUNK(xi->display_name) ),
info_field(_("Vendor"), THISORUNK(xi->vendor) ),
info_field(_("Version"), THISORUNK(xi->version) ),
info_field(_("Release Number"), THISORUNK(xi->release_number) ),
info_field_last());

for (n = 0; n < xrr->screen_count; n++) {
gchar *dims = g_strdup_printf(_(/* resolution WxH unit */ "%dx%d pixels"), xrr->screens[n].px_width, xrr->screens[n].px_height);
screens_str = h_strdup_cprintf("Screen %d=%s\n", screens_str, xrr->screens[n].number, dims);
g_free(dims);
}
info_add_computed_group(info, _("Screens"), screens_str);

for (n = 0; n < xrr->output_count; n++) {
gchar *connection = NULL;
switch (xrr->outputs[n].connected) {
case 0:
connection = _("Disconnected");
break;
case 1:
connection = _("Connected");
break;
case -1:
default:
connection = _("Unknown");
break;
}
gchar *dims = (xrr->outputs[n].screen == -1)
? g_strdup(_("Unused"))
: g_strdup_printf(_("%dx%d pixels, offset (%d, %d)"),
xrr->outputs[n].px_width, xrr->outputs[n].px_height,
xrr->outputs[n].px_offset_x, xrr->outputs[n].px_offset_y);

info_add_group(info, _("OpenGL"),
info_field(_("Vendor"), computer->display->ogl_vendor),
info_field(_("Renderer"), computer->display->ogl_renderer),
info_field(_("Version"), computer->display->ogl_version),
outputs_str = h_strdup_cprintf("%s=%s; %s\n", outputs_str,
xrr->outputs[n].name, connection, dims);

g_free(dims);
}
info_add_computed_group(info, _("Outputs (XRandR)"), outputs_str);

info_add_group(info, _("OpenGL (GLX)"),
info_field(_("Vendor"), THISORUNK(glx->ogl_vendor) ),
info_field(_("Renderer"), THISORUNK(glx->ogl_renderer) ),
info_field(_("Direct Rendering"),
computer->display->dri ? _("Yes") : _("No")),
glx->direct_rendering ? _("Yes") : _("No")),
info_field(_("Version (Compatibility)"), THISORUNK(glx->ogl_version) ),
info_field(_("Shading Language Version (Compatibility)"), THISORUNK(glx->ogl_sl_version) ),
info_field(_("Version (Core)"), THISORUNK(glx->ogl_core_version) ),
info_field(_("Shading Language Version (Core)"), THISORUNK(glx->ogl_core_sl_version) ),
info_field(_("Version (ES)"), THISORUNK(glx->ogles_version) ),
info_field(_("Shading Language Version (ES)"), THISORUNK(glx->ogles_sl_version) ),
info_field(_("GLX Version"), THISORUNK(glx->glx_version) ),
info_field_last());

info_add_computed_group(info, _("Extensions"), computer->display->extensions);

return info_flatten(info);
}

Expand Down Expand Up @@ -641,20 +694,26 @@ gchar *get_ogl_renderer(void)
{
scan_display(FALSE);

return g_strdup(computer->display->ogl_renderer);
return g_strdup(computer->display->xi->glx->ogl_renderer);
}

gchar *get_display_summary(void)
{
scan_display(FALSE);

return g_strdup_printf("%dx%d\n"
gchar *gpu_list = module_call_method("devices::getGPUList");

gchar *ret = g_strdup_printf(
"%s\n"
"%dx%d\n"
"%s\n"
"%s",
computer->display->width,
computer->display->height,
computer->display->ogl_renderer,
computer->display->vendor);
gpu_list,
computer->display->width, computer->display->height,
computer->display->display_server,
computer->display->xi->glx->ogl_renderer );
g_free(gpu_list);
return ret;
}

gchar *get_kernel_module_description(gchar *module)
Expand Down Expand Up @@ -769,17 +828,7 @@ void hi_module_deinit(void)
g_free(computer->os);
}

if (computer->display) {
g_free(computer->display->ogl_vendor);
g_free(computer->display->ogl_renderer);
g_free(computer->display->ogl_version);
g_free(computer->display->display_name);
g_free(computer->display->vendor);
g_free(computer->display->version);
g_free(computer->display->extensions);
g_free(computer->display->monitors);
g_free(computer->display);
}
computer_free_display(computer->display);

if (computer->alsa) {
g_slist_free(computer->alsa->cards);
Expand Down

0 comments on commit 8c90f0f

Please sign in to comment.