Adjust for GTK3 github actions compile testing.

fixed gtk2 compiling.
This commit is contained in:
2026-02-01 15:23:36 -07:00
parent e5673e9a7b
commit 7dd47dbd2e
11 changed files with 212 additions and 18 deletions

View File

@@ -273,3 +273,25 @@ sysinfo_backend_get_network(void)
{
return NULL;
}
static const char *sysinfo_detect_toolkit(void)
{
#if defined(HAVE_GTK3)
return "GTK3";
#elif defined(HAVE_GTK2)
return "GTK2";
#elif defined(HAVE_GTK)
return "GTK";
#else
return NULL;
#endif
}
char *sysinfo_backend_get_ui(void)
{
const char *toolkit = sysinfo_detect_toolkit();
if (toolkit)
return g_strdup_printf("%s / Quartz", toolkit);
return g_strdup("Quartz");
}

View File

@@ -30,4 +30,10 @@ char *sysinfo_backend_get_sound(void);
char *sysinfo_backend_get_uptime(void);
char *sysinfo_backend_get_network(void);
/*
* Short description of the UI/toolkit + display backend.
* Examples: "GTK3 / Wayland", "GTK2 / X11", "Windows / GTK3".
*/
char *sysinfo_backend_get_ui(void);
#endif

View File

@@ -41,7 +41,7 @@ static zoitechat_plugin *ph;
static char name[] = "Sysinfo";
static char desc[] = "Display info about your hardware and OS";
static char version[] = "1.0";
static char sysinfo_help[] = "SysInfo Usage:\n /SYSINFO [-e|-o] [CLIENT|OS|CPU|RAM|DISK|VGA|SOUND|ETHERNET|UPTIME], print various details about your system or print a summary without arguments\n /SYSINFO SET <variable>\n";
static char sysinfo_help[] = "SysInfo Usage:\n /SYSINFO [-e|-o] [CLIENT|UI|OS|CPU|RAM|DISK|VGA|SOUND|ETHERNET|UPTIME], print various details about your system or print a summary without arguments\n /SYSINFO SET <variable>\n";
typedef struct
{
@@ -54,11 +54,22 @@ typedef struct
static char *
get_client (void)
{
return g_strdup_printf ("ZoiteChat %s", zoitechat_get_info(ph, "version"));
char *ui = sysinfo_backend_get_ui();
const char *ver = zoitechat_get_info(ph, "version");
char *out;
if (ui != NULL && *ui != '\0')
out = g_strdup_printf ("ZoiteChat %s (%s)", ver, ui);
else
out = g_strdup_printf ("ZoiteChat %s", ver);
g_free (ui);
return out;
}
static hwinfo hwinfos[] = {
{"client", "Client", get_client},
{"ui", "UI", sysinfo_backend_get_ui},
{"os", "OS", sysinfo_backend_get_os},
{"cpu", "CPU", sysinfo_backend_get_cpu},
{"memory", "Memory", sysinfo_backend_get_memory},
@@ -235,7 +246,8 @@ zoitechat_plugin_init (zoitechat_plugin *plugin_handle, char **plugin_name, char
zoitechat_hook_command (ph, "SYSINFO", ZOITECHAT_PRI_NORM, sysinfo_cb, sysinfo_help, NULL);
zoitechat_command (ph, "MENU ADD \"Window/Send System Info\" \"SYSINFO\"");
/* Match the classic label from HexChat so people can actually find it. */
zoitechat_command (ph, "MENU ADD \"Window/Display System Info\" \"SYSINFO\"");
zoitechat_printf (ph, _("%s plugin loaded\n"), name);
return 1;
}
@@ -243,6 +255,8 @@ zoitechat_plugin_init (zoitechat_plugin *plugin_handle, char **plugin_name, char
int
zoitechat_plugin_deinit (void)
{
/* Keep both in case older builds used a different label. */
zoitechat_command (ph, "MENU DEL \"Window/Send System Info\"");
zoitechat_command (ph, "MENU DEL \"Window/Display System Info\"");
zoitechat_printf (ph, _("%s plugin unloaded\n"), name);
return 1;

View File

@@ -18,6 +18,10 @@
*/
#include <glib.h>
#if defined(HAVE_GTK3) || defined(HAVE_GTK2) || defined(HAVE_GTK)
#include <gdk/gdk.h>
#endif
#include "parse.h"
#include "match.h"
#include "sysinfo.h"
@@ -168,3 +172,86 @@ char *sysinfo_backend_get_network(void)
return g_strdup (ethernet_card);
}
static const char *sysinfo_detect_toolkit(void)
{
#if defined(HAVE_GTK3)
return "GTK3";
#elif defined(HAVE_GTK2)
return "GTK2";
#elif defined(HAVE_GTK)
return "GTK";
#else
return NULL;
#endif
}
static const char *sysinfo_detect_display_backend(void)
{
const char *backend = NULL;
const char *gdk_backend = g_getenv("GDK_BACKEND");
const char *session = g_getenv("XDG_SESSION_TYPE");
const gboolean session_wayland = session && g_ascii_strcasecmp(session, "wayland") == 0;
/* Best-effort: ask GDK what it actually opened, if available. */
#if defined(HAVE_GTK3) || defined(HAVE_GTK2) || defined(HAVE_GTK)
{
GdkDisplay *display = gdk_display_get_default();
if (display)
{
const char *type_name = G_OBJECT_TYPE_NAME(display);
if (type_name)
{
if (g_strrstr(type_name, "Wayland"))
backend = "Wayland";
else if (g_strrstr(type_name, "X11"))
backend = "X11";
}
}
}
#endif
/* Next best: honor explicit backend preference. */
if (!backend && gdk_backend)
{
if (g_strrstr(gdk_backend, "wayland"))
backend = "Wayland";
else if (g_strrstr(gdk_backend, "x11"))
backend = "X11";
}
/* Last resort: infer from common env vars. */
if (!backend)
{
const gboolean has_wayland = g_getenv("WAYLAND_DISPLAY") != NULL;
const gboolean has_x11 = g_getenv("DISPLAY") != NULL;
if (has_wayland && !has_x11)
backend = "Wayland";
else if (has_x11 && !has_wayland)
backend = "X11";
else if (session_wayland)
backend = "Wayland";
else
backend = NULL;
}
/* If we're using X11 inside a Wayland session, call it what it is. */
if (backend && g_strcmp0(backend, "X11") == 0 && session_wayland)
return "XWayland";
return backend;
}
char *sysinfo_backend_get_ui(void)
{
const char *toolkit = sysinfo_detect_toolkit();
const char *display = sysinfo_detect_display_backend();
if (toolkit && display)
return g_strdup_printf("%s / %s", toolkit, display);
if (toolkit)
return g_strdup(toolkit);
if (display)
return g_strdup(display);
return NULL;
}

View File

@@ -103,3 +103,30 @@ static char *get_memory_info (void)
return sysinfo_format_memory (meminfo.ullTotalPhys, meminfo.ullAvailPhys);
}
static const char *sysinfo_detect_toolkit(void)
{
#if defined(HAVE_GTK3)
return "GTK3";
#elif defined(HAVE_GTK2)
return "GTK2";
#elif defined(HAVE_GTK)
return "GTK";
#else
return NULL;
#endif
}
char *
sysinfo_backend_get_ui (void)
{
const char *toolkit = sysinfo_detect_toolkit();
/* On Windows we don't have X11/Wayland. Keep it simple. */
if (toolkit)
{
return g_strdup_printf ("Windows / %s", toolkit);
}
return g_strdup ("Windows");
}