# --- T2-COPYRIGHT-BEGIN --- # t2/package/*/wmctrl/hotfix-deb.patch # Copyright (C) 2026 The T2 SDE Project # SPDX-License-Identifier: GPL-2.0 or patched project license # --- T2-COPYRIGHT-END --- #from debian --- wmctrl-1.07.orig/BAH +++ wmctrl-1.07/BAH @@ -0,0 +1,172 @@ +--- wmctrl-1.07.orig/main.c ++++ wmctrl-1.07/main.c +@@ -31,6 +31,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -477,8 +478,8 @@ + Window *sup_window = NULL; + gchar *wm_name = NULL; + gchar *wm_class = NULL; +- unsigned long *wm_pid = NULL; +- unsigned long *showing_desktop = NULL; ++ CARD32 *wm_pid = NULL; ++ CARD32 *showing_desktop = NULL; + gboolean name_is_utf8 = TRUE; + gchar *name_out; + gchar *class_out; +@@ -517,13 +518,13 @@ + + + /* WM_PID */ +- if (! (wm_pid = (unsigned long *)get_property(disp, *sup_window, ++ if (! (wm_pid = (CARD32 *)get_property(disp, *sup_window, + XA_CARDINAL, "_NET_WM_PID", NULL))) { + p_verbose("Cannot get pid of the window manager (_NET_WM_PID).\n"); + } + + /* _NET_SHOWING_DESKTOP */ +- if (! (showing_desktop = (unsigned long *)get_property(disp, DefaultRootWindow(disp), ++ if (! (showing_desktop = (CARD32 *)get_property(disp, DefaultRootWindow(disp), + XA_CARDINAL, "_NET_SHOWING_DESKTOP", NULL))) { + p_verbose("Cannot get the _NET_SHOWING_DESKTOP property.\n"); + } +@@ -678,13 +679,13 @@ + }/*}}}*/ + + static int window_to_desktop (Display *disp, Window win, int desktop) {/*{{{*/ +- unsigned long *cur_desktop = NULL; ++ CARD32 *cur_desktop = NULL; + Window root = DefaultRootWindow(disp); + + if (desktop == -1) { +- if (! (cur_desktop = (unsigned long *)get_property(disp, root, ++ if (! (cur_desktop = (CARD32 *)get_property(disp, root, + XA_CARDINAL, "_NET_CURRENT_DESKTOP", NULL))) { +- if (! (cur_desktop = (unsigned long *)get_property(disp, root, ++ if (! (cur_desktop = (CARD32 *)get_property(disp, root, + XA_CARDINAL, "_WIN_WORKSPACE", NULL))) { + fputs("Cannot get current desktop properties. " + "(_NET_CURRENT_DESKTOP or _WIN_WORKSPACE property)" +@@ -702,12 +703,12 @@ + + static int activate_window (Display *disp, Window win, /* {{{ */ + gboolean switch_desktop) { +- unsigned long *desktop; ++ CARD32 *desktop; + + /* desktop ID */ +- if ((desktop = (unsigned long *)get_property(disp, win, ++ if ((desktop = (CARD32 *)get_property(disp, win, + XA_CARDINAL, "_NET_WM_DESKTOP", NULL)) == NULL) { +- if ((desktop = (unsigned long *)get_property(disp, win, ++ if ((desktop = (CARD32 *)get_property(disp, win, + XA_CARDINAL, "_WIN_WORKSPACE", NULL)) == NULL) { + p_verbose("Cannot find desktop ID of the window.\n"); + } +@@ -1016,16 +1017,16 @@ + }/*}}}*/ + + static int list_desktops (Display *disp) {/*{{{*/ +- unsigned long *num_desktops = NULL; +- unsigned long *cur_desktop = NULL; ++ CARD32 *num_desktops = NULL; ++ CARD32 *cur_desktop = NULL; + unsigned long desktop_list_size = 0; +- unsigned long *desktop_geometry = NULL; ++ CARD32 *desktop_geometry = NULL; + unsigned long desktop_geometry_size = 0; + gchar **desktop_geometry_str = NULL; +- unsigned long *desktop_viewport = NULL; ++ CARD32 *desktop_viewport = NULL; + unsigned long desktop_viewport_size = 0; + gchar **desktop_viewport_str = NULL; +- unsigned long *desktop_workarea = NULL; ++ CARD32 *desktop_workarea = NULL; + unsigned long desktop_workarea_size = 0; + gchar **desktop_workarea_str = NULL; + gchar *list = NULL; +@@ -1036,9 +1037,9 @@ + gchar **names = NULL; + gboolean names_are_utf8 = TRUE; + +- if (! (num_desktops = (unsigned long *)get_property(disp, root, ++ if (! (num_desktops = (CARD32 *)get_property(disp, root, + XA_CARDINAL, "_NET_NUMBER_OF_DESKTOPS", NULL))) { +- if (! (num_desktops = (unsigned long *)get_property(disp, root, ++ if (! (num_desktops = (CARD32 *)get_property(disp, root, + XA_CARDINAL, "_WIN_WORKSPACE_COUNT", NULL))) { + fputs("Cannot get number of desktops properties. " + "(_NET_NUMBER_OF_DESKTOPS or _WIN_WORKSPACE_COUNT)" +@@ -1047,9 +1048,9 @@ + } + } + +- if (! (cur_desktop = (unsigned long *)get_property(disp, root, ++ if (! (cur_desktop = (CARD32 *)get_property(disp, root, + XA_CARDINAL, "_NET_CURRENT_DESKTOP", NULL))) { +- if (! (cur_desktop = (unsigned long *)get_property(disp, root, ++ if (! (cur_desktop = (CARD32 *)get_property(disp, root, + XA_CARDINAL, "_WIN_WORKSPACE", NULL))) { + fputs("Cannot get current desktop properties. " + "(_NET_CURRENT_DESKTOP or _WIN_WORKSPACE property)" +@@ -1074,21 +1075,21 @@ + } + + /* common size of all desktops */ +- if (! (desktop_geometry = (unsigned long *)get_property(disp, DefaultRootWindow(disp), ++ if (! (desktop_geometry = (CARD32 *)get_property(disp, DefaultRootWindow(disp), + XA_CARDINAL, "_NET_DESKTOP_GEOMETRY", &desktop_geometry_size))) { + p_verbose("Cannot get common size of all desktops (_NET_DESKTOP_GEOMETRY).\n"); + } + + /* desktop viewport */ +- if (! (desktop_viewport = (unsigned long *)get_property(disp, DefaultRootWindow(disp), ++ if (! (desktop_viewport = (CARD32 *)get_property(disp, DefaultRootWindow(disp), + XA_CARDINAL, "_NET_DESKTOP_VIEWPORT", &desktop_viewport_size))) { + p_verbose("Cannot get common size of all desktops (_NET_DESKTOP_VIEWPORT).\n"); + } + + /* desktop workarea */ +- if (! (desktop_workarea = (unsigned long *)get_property(disp, DefaultRootWindow(disp), ++ if (! (desktop_workarea = (CARD32 *)get_property(disp, DefaultRootWindow(disp), + XA_CARDINAL, "_NET_WORKAREA", &desktop_workarea_size))) { +- if (! (desktop_workarea = (unsigned long *)get_property(disp, DefaultRootWindow(disp), ++ if (! (desktop_workarea = (CARD32 *)get_property(disp, DefaultRootWindow(disp), + XA_CARDINAL, "_WIN_WORKAREA", &desktop_workarea_size))) { + p_verbose("Cannot get _NET_WORKAREA property.\n"); + } +@@ -1301,16 +1302,16 @@ + gchar *title_out = get_output_str(title_utf8, TRUE); + gchar *client_machine; + gchar *class_out = get_window_class(disp, client_list[i]); /* UTF8 */ +- unsigned long *pid; +- unsigned long *desktop; ++ CARD32 *pid; ++ CARD32 *desktop; + int x, y, junkx, junky; + unsigned int wwidth, wheight, bw, depth; + Window junkroot; + + /* desktop ID */ +- if ((desktop = (unsigned long *)get_property(disp, client_list[i], ++ if ((desktop = (CARD32 *)get_property(disp, client_list[i], + XA_CARDINAL, "_NET_WM_DESKTOP", NULL)) == NULL) { +- desktop = (unsigned long *)get_property(disp, client_list[i], ++ desktop = (CARD32 *)get_property(disp, client_list[i], + XA_CARDINAL, "_WIN_WORKSPACE", NULL); + } + +@@ -1319,7 +1320,7 @@ + XA_STRING, "WM_CLIENT_MACHINE", NULL); + + /* pid */ +- pid = (unsigned long *)get_property(disp, client_list[i], ++ pid = (CARD32 *)get_property(disp, client_list[i], + XA_CARDINAL, "_NET_WM_PID", NULL); + + /* geometry */ --- wmctrl-1.07.orig/main.c +++ wmctrl-1.07/main.c @@ -1425,6 +1425,16 @@ * * long_length = Specifies the length in 32-bit multiples of the * data to be retrieved. + * + * NOTE: see + * http://mail.gnome.org/archives/wm-spec-list/2003-March/msg00067.html + * In particular: + * + * When the X window system was ported to 64-bit architectures, a + * rather peculiar design decision was made. 32-bit quantities such + * as Window IDs, atoms, etc, were kept as longs in the client side + * APIs, even when long was changed to 64 bits. + * */ if (XGetWindowProperty(disp, win, xa_prop_name, 0, MAX_PROPERTY_VALUE_LEN / 4, False, xa_prop_type, &xa_ret_type, &ret_format, @@ -1441,6 +1451,8 @@ /* null terminate the result to make string handling easier */ tmp_size = (ret_format / 8) * ret_nitems; + /* Correct 64 Architecture implementation of 32 bit data */ + if(ret_format==32) tmp_size *= sizeof(long)/4; ret = g_malloc(tmp_size + 1); memcpy(ret, ret_prop, tmp_size); ret[tmp_size] = '\0';