[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 10 of 22] - fixed issue with invisible modal windows from Qt and Gtk applications



# HG changeset patch
# User Dan Pascu <dan@ag-projects.com>
# 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 <max@city.veganet.ru>)
- fixed issue with icon colors on big endian platforms
  (Max Loparyev <max@city.veganet.ru>)

patch based on a previous patch by Vladimir Nadvornik <nadvornik@suse.cz>
(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 <balaton@eik.bme.hu>)
 - fixed some warnings on 64bit platforms (Balaton Zoltan <balaton@eik.bme.hu>)
+- fixed issue with invisible modal windows from Qt and Gtk applications
+  on 64bit platforms (Max Loparyev <max@city.veganet.ru>)
+- fixed issue with icon colors on big endian platforms
+  (Max Loparyev <max@city.veganet.ru>)
 
 
 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 wmaker-dev-unsubscribe@lists.windowmaker.info.