Prelim: Fix up WinTCDpaDesktopWindow code

This commit is contained in:
Rory Fewell
2025-07-04 21:04:56 +01:00
parent ab216620fc
commit 8b2433aab6
4 changed files with 58 additions and 14 deletions

View File

@@ -19,7 +19,8 @@ static void on_window_destroyed(
//
// STATIC DATA
//
static gboolean S_OPTION_ARM = FALSE;
static gboolean S_OPTION_ARM = FALSE;
static gboolean S_OPTION_TEST = FALSE;
static GOptionEntry S_ENTRIES[] = {
{
@@ -31,6 +32,15 @@ static GOptionEntry S_ENTRIES[] = {
"Arm the system to boot into graphical-mode setup.",
NULL
},
{
"test",
't',
0,
G_OPTION_ARG_NONE,
&S_OPTION_TEST,
"Rory's testing mode.",
NULL
},
G_OPTION_ENTRY_NULL
};
@@ -98,6 +108,7 @@ int main(
// Fire up xfwm4
//
if (
!S_OPTION_TEST &&
!wintc_launch_command(
"xfwm4 --compositor=on",
&error

View File

@@ -3,21 +3,20 @@
#include <glib.h>
#include <gtk/gtk.h>
#include <wintc/shelldpa.h>
//
// GTK OOP BOILERPLATE
//
typedef struct _WinTCSetupWindowClass WinTCSetupWindowClass;
typedef struct _WinTCSetupWindow WinTCSetupWindow;
#define WINTC_TYPE_SETUP_WINDOW (wintc_setup_window_get_type())
#define WINTC_TYPE_SETUP_WINDOW (wintc_setup_window_get_type())
#define WINTC_SETUP_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WINTC_TYPE_SETUP_WINDOW, WinTCSetupWindow))
#define WINTC_SETUP_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), WINTC_TYPE_SETUP_WINDOW, WinTCSetupWindow))
#define IS_WINTC_SETUP_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), WINTC_TYPE_SETUP_WINDOW))
#define IS_WINTC_SETUP_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), WINTC_TYPE_SETUP_WINDOW))
#define WINTC_SETUP_WINDOW_GET_CLASS(obj) (G_TYPE_CHECK_INSTANCE_GET_CLASS((obj), WINTC_TYPE_SETUP_WINDOW))
GType wintc_setup_window_get_type(void) G_GNUC_CONST;
G_DECLARE_FINAL_TYPE(
WinTCSetupWindow,
wintc_setup_window,
WINTC,
SEUTP_WINDOW,
WinTCDpaDesktopWindow
)
//
// PUBLIC FUNCTIONS

View File

@@ -1,6 +1,7 @@
#ifndef __SHELLDPA_DESKWND_H__
#define __SHELLDPA_DESKWND_H__
#include <gdk/gdk.h>
#include <glib.h>
#include <gtk/gtk.h>
@@ -17,9 +18,16 @@ G_DECLARE_DERIVABLE_TYPE(
GtkApplicationWindow
)
struct _WinTCDpaDesktopWindowClass
typedef struct _WinTCDpaDesktopWindowClass
{
GtkApplicationWindowClass __parent__;
};
} WinTCDpaDesktopWindowClass;
//
// PUBLIC FUNCTIONS
//
GdkMonitor* wintc_dpa_desktop_window_get_monitor(
WinTCDpaDesktopWindow* wnd
);
#endif

View File

@@ -1,3 +1,4 @@
#include <gdk/gdk.h>
#include <glib.h>
#include <gtk/gtk.h>
#include <wintc/comgtk.h>
@@ -48,10 +49,18 @@ static void window_setup_x11(
WinTCDpaDesktopWindow* wnd
);
//
// GTK OOP CLASS/INSTANCE DEFINITIONS
//
typedef struct _WinTCDpaDesktopWindowPrivate
{
GdkMonitor* monitor;
} WinTCDpaDesktopWindowPrivate;
//
// GTK TYPE DEFINITION & CTORS
//
G_DEFINE_TYPE_WITH_CODE(
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(
WinTCDpaDesktopWindow,
wintc_dpa_desktop_window,
GTK_TYPE_APPLICATION_WINDOW,
@@ -152,6 +161,19 @@ static void wintc_dpa_desktop_window_set_property(
}
}
//
// PUBLIC FUNCTIONS
//
GdkMonitor* wintc_dpa_desktop_window_get_monitor(
WinTCDpaDesktopWindow* wnd
)
{
WinTCDpaDesktopWindowPrivate* priv =
wintc_dpa_desktop_window_get_instance_private(wnd);
return priv->monitor;
}
//
// PRIVATE FUNCTIONS
//
@@ -162,6 +184,8 @@ static void window_setup_wayland(
WinTCDpaDesktopWindowPrivate* priv =
wintc_dpa_desktop_window_get_instance_private(wnd);
// Use layer shell to become a desktop window
//
GtkWindow* window = GTK_WINDOW(wnd);
p_gtk_layer_init_for_window(window);
@@ -184,6 +208,8 @@ static void window_setup_x11(
WinTCDpaDesktopWindowPrivate* priv =
wintc_dpa_desktop_window_get_instance_private(wnd);
// Directly size the window based on monitor geometry
//
GdkRectangle geometry;
gdk_monitor_get_geometry(priv->monitor, &geometry);