Hello Paul,
just tried to reproduce this issue.

hpanel (and also fspanel) queries the window manager hints via
XGetWindowProperty and XA_WM_HINTS.

The result is just casted to a XWMHints structure.
This seems to have worked on 32bit systems as padding made
all elements at 4 bytes boundaries.

On amd64 XGetWindowProperty seems to return the same
layout, but the memory layout of XWMHints struct is different.
I "think" form reading [1] that XGetWindowProperty just
returns an array of 32bit fields, that "accidentically"
matched the layout of struct XWMHints on i386.

Attached patch replaces XGetWindowProperty by XGetWMHints.
This worked in a i386 and amd64 VM for me.

Kind regards,
Bernhard

[1] https://linux.die.net/man/3/xgetwindowproperty
apt update
apt install xserver-xorg lightdm openbox pulseaudio xterm psmisc htop mc tmux 
strace dpkg-dev devscripts quilt gdb valgrind systemd-coredump dh-buildinfo
apt install hpanel libxft2-dbgsym libx11-6-dbgsym
apt build-dep hpanel


mkdir -p hpanel/orig
cd       hpanel/orig
apt source hpanel
cd ..
cp -a orig try1
cd try1/hpanel-0.3.2
DEB_BUILD_OPTIONS='nostrip noopt debug' dpkg-buildpackage -uc -us
dpkg -i /home/benutzer/hpanel/try1/hpanel_0.3.2-4_*.deb


mkdir -p libx11-6/orig
cd       libx11-6/orig
apt source libx11-6




cd
export DISPLAY=:0

gdb -q --args hpanel

directory /home/benutzer/hpanel/try1/hpanel-0.3.2
directory /home/benutzer/libx11-6/orig/libx11-1.6.5/src/util
set pagination off
set height 0
set width 0
b get_task_hinticon
run




32bit:
157             XGetWindowProperty (dd, win, prop, 0, 0x7fffffff, False,
(gdb) print *hin
$24 = {flags = 39, input = 1, initial_state = 1, icon_pixmap = 12582937, 
icon_window = 0, icon_x = 0, icon_y = 0, icon_mask = 12582939, window_group = 0}
(gdb) print sizeof(*hin)
$25 = 36




64bit:
157             XGetWindowProperty (dd, win, prop, 0, 0x7fffffff, False,
(gdb) print *hin
$17 = {flags = 39, input = 1, initial_state = 0, icon_pixmap = 1, icon_window = 
12582937, icon_x = 0, icon_y = 0, icon_mask = 0, window_group = 0}
(gdb) print sizeof(*hin)
$18 = 56
Description: Use XGetWMHints instead of XGetWindowProperty with XA_WM_HINTS to support LP64.

Author: Bernhard Übelacker <bernha...@mailbox.org>
Bug-Debian: https://bugs.debian.org/887467
Last-Update: 2018-08-14

--- hpanel-0.3.2.orig/hpanel.c
+++ hpanel-0.3.2/hpanel.c
@@ -235,7 +235,7 @@ get_task_hinticon (task *tk)
 	tk->icon = None;
 	tk->mask = None;
 
-	hin = (XWMHints *) get_prop_data (tk->win, XA_WM_HINTS, XA_WM_HINTS, 0);
+	hin = XGetWMHints(dd, tk->win);
 	if (hin)
 	{
 		if ((hin->flags & IconPixmapHint))

Reply via email to