Cleaning: Fixes #219, Tidy up libwintc-shelldpa

This commit is contained in:
Rory Fewell
2023-08-28 19:30:07 +01:00
parent bcd18f721e
commit f93977e802
7 changed files with 298 additions and 148 deletions

View File

@@ -0,0 +1,114 @@
#include <dlfcn.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <glib.h>
#include "wnck.h"
#include "../api.h"
//
// STATIC DATA
//
static gboolean s_initialized = FALSE;
//
// RESOLVED FUNCS
//
WinTCWndMgmtWindow* (*p_wnck_screen_get_active_window) (
WinTCWndMgmtScreen* screen
) = NULL;
WinTCWndMgmtScreen* (*p_wnck_screen_get_default) (void) = NULL;
GdkPixbuf* (*p_wnck_window_get_mini_icon) (
WinTCWndMgmtWindow* window
) = NULL;
gchar* (*p_wnck_window_get_name) (
WinTCWndMgmtWindow* window
) = NULL;
gboolean (*p_wnck_window_is_skip_tasklist) (
WinTCWndMgmtWindow* window
) = NULL;
void (*p_wnck_window_minimize) (
WinTCWndMgmtWindow* window
) = NULL;
void (*p_wnck_window_unminimize) (
WinTCWndMgmtWindow* window,
guint32 timestamp
) = NULL;
//
// PUBLIC FUNCTIONS
//
gboolean init_dll_wnck()
{
const gchar* dl_possible_names[] = {
"libwnck-3.so",
"libwnck-3.so.0",
NULL
};
void* dl_wnck = NULL;
if (s_initialized)
{
return TRUE;
}
for (int i = 0; dl_possible_names[i] != NULL; i++)
{
dl_wnck = dlopen(dl_possible_names[i], RTLD_LAZY | RTLD_LOCAL);
if (dl_wnck != NULL)
{
break;
}
}
if (dl_wnck == NULL)
{
g_message("%s", "libwnck not available.");
return FALSE;
}
// Attempt to load the necessary functions
//
p_wnck_screen_get_active_window =
dlsym(dl_wnck, "wnck_screen_get_active_window");
p_wnck_screen_get_default =
dlsym(dl_wnck, "wnck_screen_get_default");
p_wnck_window_get_mini_icon =
dlsym(dl_wnck, "wnck_window_get_mini_icon");
p_wnck_window_get_name =
dlsym(dl_wnck, "wnck_window_get_name");
p_wnck_window_is_skip_tasklist =
dlsym(dl_wnck, "wnck_window_is_skip_tasklist");
p_wnck_window_minimize =
dlsym(dl_wnck, "wnck_window_minimize");
p_wnck_window_unminimize =
dlsym(dl_wnck, "wnck_window_unminimize");
// Check all symbols loaded
//
if (
p_wnck_screen_get_active_window == NULL ||
p_wnck_screen_get_default == NULL ||
p_wnck_window_get_mini_icon == NULL ||
p_wnck_window_get_name == NULL ||
p_wnck_window_is_skip_tasklist == NULL ||
p_wnck_window_minimize == NULL ||
p_wnck_window_unminimize == NULL
)
{
g_warning("%s", "libwnck loaded, but not all symbols.");
return FALSE;
}
s_initialized = TRUE;
return TRUE;
}

View File

@@ -0,0 +1,39 @@
#ifndef __DLL_WNCK_H__
#define __DLL_WNCK_H__
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <glib.h>
#include "../api.h"
//
// RESOLVED FUNCS
//
extern WinTCWndMgmtWindow* (*p_wnck_screen_get_active_window) (
WinTCWndMgmtScreen* screen
);
extern WinTCWndMgmtScreen* (*p_wnck_screen_get_default) (void);
extern GdkPixbuf* (*p_wnck_window_get_mini_icon) (
WinTCWndMgmtWindow* window
);
extern gchar* (*p_wnck_window_get_name) (
WinTCWndMgmtWindow* window
);
extern gboolean (*p_wnck_window_is_skip_tasklist) (
WinTCWndMgmtWindow* window
);
extern void (*p_wnck_window_minimize) (
WinTCWndMgmtWindow* window
);
extern void (*p_wnck_window_unminimize) (
WinTCWndMgmtWindow* window,
guint32 timestamp
);
//
// PUBLIC FUNCTIONS
//
gboolean init_dll_wnck(void);
#endif

View File

@@ -0,0 +1,96 @@
#include <dlfcn.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <glib.h>
#include "xfw.h"
#include "../api.h"
//
// STATIC DATA
//
static gboolean s_initialized = FALSE;
//
// RESOLVED FUNCS
//
WinTCWndMgmtWindow* (*p_xfw_screen_get_active_window) (
WinTCWndMgmtScreen* screen
) = NULL;
WinTCWndMgmtScreen* (*p_xfw_screen_get_default) (void) = NULL;
GdkPixbuf* (*p_xfw_window_get_icon) (
WinTCWndMgmtWindow* window,
gint size,
gint scale
) = NULL;
gchar* (*p_xfw_window_get_name) (
WinTCWndMgmtWindow* window
) = NULL;
gboolean (*p_xfw_window_is_skip_tasklist) (
WinTCWndMgmtWindow* window
) = NULL;
void (*p_xfw_window_set_minimized) (
WinTCWndMgmtWindow* window,
gboolean is_minimized,
GError** error
) = NULL;
//
// PUBLIC FUNCTIONS
//
gboolean init_dll_xfw()
{
void* dl_xfw = NULL;
if (s_initialized)
{
return TRUE;
}
dl_xfw = dlopen("libxfce4windowing-0.so", RTLD_LAZY | RTLD_LOCAL);
if (dl_xfw == NULL)
{
g_message("%s", "libxfce4windowing not available.");
return FALSE;
}
// Attempt to load the necessary functions
//
p_xfw_screen_get_active_window =
dlsym(dl_xfw, "xfw_screen_get_active_window");
p_xfw_screen_get_default =
dlsym(dl_xfw, "xfw_screen_get_default");
p_xfw_window_get_icon =
dlsym(dl_xfw, "xfw_window_get_icon");
p_xfw_window_get_name =
dlsym(dl_xfw, "xfw_window_get_name");
p_xfw_window_is_skip_tasklist =
dlsym(dl_xfw, "xfw_window_is_skip_tasklist");
p_xfw_window_set_minimized =
dlsym(dl_xfw, "xfw_window_set_minimized");
// Check all symbols loaded
//
if (
p_xfw_screen_get_active_window == NULL ||
p_xfw_screen_get_default == NULL ||
p_xfw_window_get_icon == NULL ||
p_xfw_window_get_name == NULL ||
p_xfw_window_is_skip_tasklist == NULL ||
p_xfw_window_set_minimized == NULL
)
{
g_warning("%s", "libxfce4windowing loaded, but not all symbols");
return FALSE;
}
s_initialized = TRUE;
return TRUE;
}

View File

@@ -0,0 +1,39 @@
#ifndef __DLL_XFW_H__
#define __DLL_XFW_H__
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <glib.h>
#include "../api.h"
//
// RESOLVED FUNCS
//
extern WinTCWndMgmtWindow* (*p_xfw_screen_get_active_window) (
WinTCWndMgmtScreen* screen
);
extern WinTCWndMgmtScreen* (*p_xfw_screen_get_default) (void);
extern GdkPixbuf* (*p_xfw_window_get_icon) (
WinTCWndMgmtWindow* window,
gint size,
gint scale
);
extern gchar* (*p_xfw_window_get_name) (
WinTCWndMgmtWindow* window
);
extern gboolean (*p_xfw_window_is_skip_tasklist) (
WinTCWndMgmtWindow* window
);
extern void (*p_xfw_window_set_minimized) (
WinTCWndMgmtWindow* window,
gboolean is_minimized,
GError** error
);
//
// PUBLIC FUNCTIONS
//
gboolean init_dll_xfw(void);
#endif

View File

@@ -4,31 +4,7 @@
#include "api.h"
#include "impl-wndmgmt-wnck.h"
//
// RESOLVED FUNCS
//
static WinTCWndMgmtWindow* (*p_wnck_screen_get_active_window) (
WinTCWndMgmtScreen* screen
) = NULL;
static WinTCWndMgmtScreen* (*p_wnck_screen_get_default) (void) = NULL;
static GdkPixbuf* (*p_wnck_window_get_mini_icon) (
WinTCWndMgmtWindow* window
) = NULL;
static gchar* (*p_wnck_window_get_name) (
WinTCWndMgmtWindow* window
) = NULL;
static gboolean (*p_wnck_window_is_skip_tasklist) (
WinTCWndMgmtWindow* window
) = NULL;
static void (*p_wnck_window_minimize) (
WinTCWndMgmtWindow* window
) = NULL;
static void (*p_wnck_window_unminimize) (
WinTCWndMgmtWindow* window,
guint32 timestamp
) = NULL;
#include "dll/wnck.h"
//
// FORWARD DECLARATIONS
@@ -42,66 +18,9 @@ static void wnck_window_unminimize_now(
//
gboolean init_wndmgmt_wnck_impl(void)
{
const gchar* dl_possible_names[] = {
"libwnck-3.so",
"libwnck-3.so.0",
NULL
};
void* dl_wnck = NULL;
for (int i = 0; dl_possible_names[i] != NULL; i++)
if (!init_dll_wnck())
{
dl_wnck = dlopen(dl_possible_names[i], RTLD_LAZY | RTLD_LOCAL);
if (dl_wnck != NULL)
{
break;
}
}
if (dl_wnck == NULL)
{
g_message("%s", "libwnck not available.");
return FALSE;
}
// Attempt to load the necessary functions
//
p_wnck_screen_get_active_window =
dlsym(dl_wnck, "wnck_screen_get_active_window");
p_wnck_screen_get_default =
dlsym(dl_wnck, "wnck_screen_get_default");
p_wnck_window_get_mini_icon =
dlsym(dl_wnck, "wnck_window_get_mini_icon");
p_wnck_window_get_name =
dlsym(dl_wnck, "wnck_window_get_name");
p_wnck_window_is_skip_tasklist =
dlsym(dl_wnck, "wnck_window_is_skip_tasklist");
p_wnck_window_minimize =
dlsym(dl_wnck, "wnck_window_minimize");
p_wnck_window_unminimize =
dlsym(dl_wnck, "wnck_window_unminimize");
// Check all symbols loaded
//
if (
p_wnck_screen_get_active_window == NULL ||
p_wnck_screen_get_default == NULL ||
p_wnck_window_get_mini_icon == NULL ||
p_wnck_window_get_name == NULL ||
p_wnck_window_is_skip_tasklist == NULL ||
p_wnck_window_minimize == NULL ||
p_wnck_window_unminimize == NULL
)
{
g_warning("%s", "libwnck loaded, but not all symbols.");
g_warning("%s", "libwnck not available.");
return FALSE;
}

View File

@@ -4,31 +4,7 @@
#include "api.h"
#include "impl-wndmgmt-xfw.h"
//
// RESOLVED FUNCS
//
static WinTCWndMgmtWindow* (*p_xfw_screen_get_active_window) (
WinTCWndMgmtScreen* screen
) = NULL;
static WinTCWndMgmtScreen* (*p_xfw_screen_get_default) (void) = NULL;
static GdkPixbuf* (*p_xfw_window_get_icon) (
WinTCWndMgmtWindow* window,
gint size,
gint scale
) = NULL;
static gchar* (*p_xfw_window_get_name) (
WinTCWndMgmtWindow* window
) = NULL;
static gboolean (*p_xfw_window_is_skip_tasklist) (
WinTCWndMgmtWindow* window
) = NULL;
static gboolean (*p_xfw_window_set_minimized) (
WinTCWndMgmtWindow* window,
gboolean is_maximized,
GError** error
) = NULL;
#include "dll/xfw.h"
//
// FORWARD DECLARATIONS
@@ -48,46 +24,9 @@ static void xfw_window_unminimize(
//
gboolean init_wndmgmt_xfw_impl(void)
{
void* dl_xfw = dlopen("libxfce4windowing-0.so", RTLD_LAZY | RTLD_LOCAL);
if (dl_xfw == NULL)
if (!init_dll_xfw())
{
g_message("%s", "libxfce4windowing not available.");
return FALSE;
}
// Attempt to load the necessary functions
//
p_xfw_screen_get_active_window =
dlsym(dl_xfw, "xfw_screen_get_active_window");
p_xfw_screen_get_default =
dlsym(dl_xfw, "xfw_screen_get_default");
p_xfw_window_get_icon =
dlsym(dl_xfw, "xfw_window_get_icon");
p_xfw_window_get_name =
dlsym(dl_xfw, "xfw_window_get_name");
p_xfw_window_is_skip_tasklist =
dlsym(dl_xfw, "xfw_window_is_skip_tasklist");
p_xfw_window_set_minimized =
dlsym(dl_xfw, "xfw_window_set_minimized");
// Check all symbols loaded
//
if (
p_xfw_screen_get_active_window == NULL ||
p_xfw_screen_get_default == NULL ||
p_xfw_window_get_icon == NULL ||
p_xfw_window_get_name == NULL ||
p_xfw_window_is_skip_tasklist == NULL ||
p_xfw_window_set_minimized == NULL
)
{
g_warning("%s", "libxfce4windowing loaded, but not all symbols.");
g_warning("%s", "libxfce4windowing not available.");
return FALSE;
}