# HG changeset patch
# User Dan Pascu <[EMAIL PROTECTED]>
# Date 1137953100 28800
# Branch wm_0_92
# Node ID 546cdc087ef594a3a978c8e71949bcadde044c42
# Parent e397c645f6b7cea7855812573781ddb027405a78
- fixed issue with invisible modal windows from Qt and Gtk applications
on 64bit platforms (Max Loparyev <[EMAIL PROTECTED]>)
- fixed issue with icon colors on big endian platforms
(Max Loparyev <[EMAIL PROTECTED]>)
patch based on a previous patch by Vladimir Nadvornik <[EMAIL PROTECTED]>
(transplanted from 2f7969a0a2ac6ded3ae5663be6bf8e4c7a45a4f5)
diff -r e397c645f6b7 -r 546cdc087ef5 ChangeLog
--- a/ChangeLog Sun Jan 22 07:53:44 2006 -0800
+++ b/ChangeLog Sun Jan 22 10:05:00 2006 -0800
@@ -11,6 +11,10 @@
- small fix for compilation in a different directory than the source
(Balaton Zoltan <[EMAIL PROTECTED]>)
- fixed some warnings on 64bit platforms (Balaton Zoltan <[EMAIL PROTECTED]>)
+- fixed issue with invisible modal windows from Qt and Gtk applications
+ on 64bit platforms (Max Loparyev <[EMAIL PROTECTED]>)
+- fixed issue with icon colors on big endian platforms
+ (Max Loparyev <[EMAIL PROTECTED]>)
Changes since version 0.91.0:
diff -r e397c645f6b7 -r 546cdc087ef5 src/wmspec.c
--- a/src/wmspec.c Sun Jan 22 07:53:44 2006 -0800
+++ b/src/wmspec.c Sun Jan 22 10:05:00 2006 -0800
@@ -35,6 +35,7 @@
#include <X11/Xlib.h>
#include <X11/Xatom.h>
+#include <X11/Xarch.h>
#include <string.h>
#include "WindowMaker.h"
@@ -70,22 +71,22 @@
static Atom net_current_desktop;
static Atom net_desktop_names;
static Atom net_active_window;
-static Atom net_workarea; /* XXX: not xinerama
compatible */
+static Atom net_workarea; /* XXX: not xinerama compatible */
static Atom net_supporting_wm_check;
-static Atom net_virtual_roots; /* N/A */
-static Atom net_desktop_layout; /* XXX */
+static Atom net_virtual_roots; /* N/A */
+static Atom net_desktop_layout; /* XXX */
static Atom net_showing_desktop;
/* Other Root Window Messages */
static Atom net_close_window;
-static Atom net_moveresize_window; /* TODO */
-static Atom net_wm_moveresize; /* TODO */
+static Atom net_moveresize_window; /* TODO */
+static Atom net_wm_moveresize; /* TODO */
/* Application Window Properties */
static Atom net_wm_name;
-static Atom net_wm_visible_name; /* TODO (unnecessary?) */
+static Atom net_wm_visible_name; /* TODO (unnecessary?) */
static Atom net_wm_icon_name;
-static Atom net_wm_visible_icon_name; /* TODO (unnecessary?) */
+static Atom net_wm_visible_icon_name; /* TODO (unnecessary?) */
static Atom net_wm_desktop;
static Atom net_wm_window_type;
static Atom net_wm_window_type_desktop;
@@ -97,7 +98,7 @@
static Atom net_wm_window_type_dialog;
static Atom net_wm_window_type_normal;
static Atom net_wm_state;
-static Atom net_wm_state_modal; /* XXX: what is
this?!? */
+static Atom net_wm_state_modal; /* XXX: what is this?!? */
static Atom net_wm_state_sticky;
static Atom net_wm_state_maximized_vert;
static Atom net_wm_state_maximized_horz;
@@ -119,15 +120,15 @@
static Atom net_wm_action_fullscreen;
static Atom net_wm_action_change_desktop;
static Atom net_wm_action_close;
-static Atom net_wm_strut; /* XXX: see net_workarea */
-static Atom net_wm_strut_partial; /* TODO: doesn't really fit
into the current strut scheme */
-static Atom net_wm_icon_geometry; /* FIXME: should work
together with net_wm_handled_icons, gnome-panel-2.2.0.1 doesn't use
_NET_WM_HANDLED_ICONS, thus present situation. */
+static Atom net_wm_strut; /* XXX: see net_workarea */
+static Atom net_wm_strut_partial; /* TODO: doesn't really fit into
the current strut scheme */
+static Atom net_wm_icon_geometry; /* FIXME: should work together
with net_wm_handled_icons, gnome-panel-2.2.0.1 doesn't use
_NET_WM_HANDLED_ICONS, thus present situation. */
static Atom net_wm_icon;
-static Atom net_wm_pid; /* TODO */
-static Atom net_wm_handled_icons; /* FIXME: see
net_wm_icon_geometry */
+static Atom net_wm_pid; /* TODO */
+static Atom net_wm_handled_icons; /* FIXME: see net_wm_icon_geometry
*/
/* Window Manager Protocols */
-static Atom net_wm_ping; /* TODO */
+static Atom net_wm_ping; /* TODO */
static Atom utf8_string;
@@ -322,15 +323,15 @@
void
wNETWMUpdateDesktop(WScreen *scr)
{
- CARD32 *views, sizes[2];
+ long *views, sizes[2];
int count, i;
if (scr->workspace_count==0)
return;
count = scr->workspace_count * 2;
- views = wmalloc(sizeof(CARD32) * count);
- /*memset(views, 0, sizeof(CARD32) * count);*/
+ views = wmalloc(sizeof(long) * count);
+ /*memset(views, 0, sizeof(long) * count);*/
#ifdef VIRTUAL_DESKTOP
sizes[0] = scr->workspaces[scr->current_workspace]->width;
@@ -370,7 +371,7 @@
0, 1, &count);
if (prop)
{
- int desktop= *(CARD32*)prop;
+ int desktop= *(long*)prop;
XFree(prop);
return desktop;
}
@@ -389,12 +390,12 @@
*
* The logic can also be changed to accept bigger images and scale them down.
*/
-static CARD32*
-findBestIcon(CARD32 *data, unsigned long items)
+static unsigned long*
+findBestIcon(unsigned long *data, unsigned long items)
{
int size, wanted, d, distance;
unsigned long i;
- CARD32 *icon;
+ unsigned long *icon;
/* better use only 75% of icon_size. For 64x64 this means 48x48
* This leaves room around the icon for the miniwindow title and
@@ -418,12 +419,12 @@
static RImage*
-makeRImageFromARGBData(CARD32 *data)
+makeRImageFromARGBData(unsigned long *data)
{
int size, width, height, i;
RImage *image;
unsigned char *imgdata;
- CARD32 pixel;
+ unsigned long pixel;
width = data[0];
height = data[1];
@@ -436,10 +437,18 @@
for (imgdata=image->data, i=2; i<size+2; i++, imgdata+=4) {
pixel = data[i];
+#if BYTE_ORDER == BIG_ENDIAN
+ imgdata[2] = (pixel >> 24) & 0xff; /* A */
+ imgdata[1] = (pixel >> 16) & 0xff; /* R */
+ imgdata[0] = (pixel >> 8) & 0xff; /* G */
+ imgdata[3] = (pixel >> 0) & 0xff; /* B */
+#else /* Little endian */
imgdata[3] = (pixel >> 24) & 0xff; /* A */
imgdata[0] = (pixel >> 16) & 0xff; /* R */
imgdata[1] = (pixel >> 8) & 0xff; /* G */
imgdata[2] = (pixel >> 0) & 0xff; /* B */
+#endif /* endianness */
+
}
return image;
@@ -449,7 +458,7 @@
static void
updateIconImage(WScreen *scr, WWindow *wwin)
{
- CARD32 *property, *data;
+ unsigned long *property, *data;
unsigned long items, rest;
Atom type;
int format;
@@ -487,7 +496,7 @@
static void
updateShowDesktop(WScreen * scr, Bool show)
{
- CARD32 foo;
+ long foo;
foo = (show == True);
XChangeProperty(dpy, scr->root_win, net_showing_desktop, XA_CARDINAL, 32,
@@ -660,7 +669,7 @@
void
wNETWMUpdateWorkarea(WScreen *scr, WArea usableArea)
{
- CARD32 *area;
+ long *area;
int count, i;
/* XXX: not Xinerama compatible,
@@ -670,7 +679,7 @@
return;
count = scr->workspace_count * 4;
- area = wmalloc(sizeof(CARD32) * count);
+ area = wmalloc(sizeof(long) * count);
for (i=0; i<scr->workspace_count; i++) {
area[4*i + 0] = usableArea.x1;
area[4*i + 1] = usableArea.y1;
@@ -793,7 +802,7 @@
static void
updateWorkspaceCount(WScreen *scr) /* changeable */
{
- CARD32 count;
+ long count;
count = scr->workspace_count;
@@ -805,7 +814,7 @@
static void
updateCurrentWorkspace(WScreen *scr) /* changeable */
{
- CARD32 count;
+ long count;
count = scr->current_workspace;
@@ -852,7 +861,7 @@
static void
updateWorkspaceHint(WWindow *wwin, Bool fake, Bool del)
{
- CARD32 l;
+ long l;
if (del) {
XDeleteProperty(dpy, wwin->client_win, net_wm_desktop);
--
To unsubscribe, send mail to [EMAIL PROTECTED]