[Xfce4-commits] r24054 - xfce4-panel/trunk/panel

Jasper Huijsmans jasper at xfce.org
Thu Dec 7 21:28:33 CET 2006


Author: jasper
Date: 2006-12-07 20:28:33 +0000 (Thu, 07 Dec 2006)
New Revision: 24054

Modified:
   xfce4-panel/trunk/panel/panel-private.h
   xfce4-panel/trunk/panel/panel-properties.c
Log:
Use same test for invalid struts as in xfwm4. Move all checks to the _set_structs() function. This is still related to bug #2598.

Modified: xfce4-panel/trunk/panel/panel-private.h
===================================================================
--- xfce4-panel/trunk/panel/panel-private.h	2006-12-07 19:45:10 UTC (rev 24053)
+++ xfce4-panel/trunk/panel/panel-private.h	2006-12-07 20:28:33 UTC (rev 24054)
@@ -76,6 +76,8 @@
     guint activetrans:1;
     guint hidden:1;
     guint edit_mode:1;
+
+    gulong struts[12];
 };
 
 #endif /* _PANEL_PRIVATE_H */

Modified: xfce4-panel/trunk/panel/panel-properties.c
===================================================================
--- xfce4-panel/trunk/panel/panel-properties.c	2006-12-07 19:45:10 UTC (rev 24053)
+++ xfce4-panel/trunk/panel/panel-properties.c	2006-12-07 20:28:33 UTC (rev 24054)
@@ -37,7 +37,7 @@
 #include "panel-properties.h"
 #include "panel-private.h"
 
-#define HIDDEN_SIZE	3
+#define HIDDEN_SIZE     3
 #define OPAQUE          0xffffffff
 #define HIDE_TIMEOUT    350
 #define UNHIDE_TIMEOUT  200
@@ -230,7 +230,9 @@
 _set_struts (Panel *panel, XfceMonitor *xmon, int x, int y, int w, int h)
 {
     PanelPrivate *priv;
-    gulong data[12] = { 0, };
+    gulong        data[12] = { 0, };
+    int           i;
+    gboolean      update = FALSE;
 
     /* _NET_WM_STRUT_PARTIAL: CARDINAL[12]/32
      * 
@@ -260,8 +262,8 @@
             {
                 data[0] = xmon->geometry.x 
                           + w;          /* left           */
-                data[4] = y;	        /* left_start_y   */
-                data[5] = y + h;	/* left_end_y     */
+                data[4] = y;            /* left_start_y   */
+                data[5] = y + h;        /* left_end_y     */
             }
         }
         else if (xfce_screen_position_is_right (priv->screen_position))
@@ -274,8 +276,8 @@
                 data[1] =  gdk_screen_get_width (xmon->screen) 
                            - xmon->geometry.x - xmon->geometry.width 
                            + w;         /* right          */
-                data[6] = y;	        /* right_start_y  */
-                data[7] = y + h;	/* right_end_y    */
+                data[6] = y;            /* right_start_y  */
+                data[7] = y + h;        /* right_end_y    */
             }
         }
         else if (xfce_screen_position_is_top (priv->screen_position))
@@ -286,9 +288,9 @@
             if (!xmon->has_neighbor_above)
             {
                 data[2] = xmon->geometry.y 
-                          + h;	        /* top            */
-                data[8] = x;	        /* top_start_x    */
-                data[9] = x + w;	/* top_end_x      */
+                          + h;          /* top            */
+                data[8] = x;            /* top_start_x    */
+                data[9] = x + w;        /* top_end_x      */
             }
         }
         else
@@ -300,39 +302,64 @@
             {
                 data[3] = gdk_screen_get_height (xmon->screen) 
                            - xmon->geometry.y - xmon->geometry.height 
-                           + h;	        /* bottom         */
-                data[10] = x;	        /* bottom_start_x */
-                data[11] = x + w;	/* bottom_end_x   */
+                           + h;         /* bottom         */
+                data[10] = x;           /* bottom_start_x */
+                data[11] = x + w;       /* bottom_end_x   */
             }
-	}
+        }
     }
 
-    DBG ("\nStruts: "
-	 "%ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld",
-	 data[0], data[1], data[2], data[3], data[4], data[5],
-	 data[6], data[7], data[8], data[9], data[10], data[11]);
+    DBG ("\nStruts\n"
+         "%ld\t%ld\t%ld\t%ld\n"
+         "%ld\t%ld\t%ld\t%ld\n"
+         "%ld\t%ld\t%ld\t%ld\n",
+         data[0], data[1], data[2], data[3], 
+         data[4], data[5], data[6], data[7], 
+         data[8], data[9], data[10], data[11]);
 
-    gdk_error_trap_push ();
+    /* Check for invalid values. */
+    for (i = 0; i < 4; i++)
+    {
+        if (data[i] > MIN(xmon->geometry.width,xmon->geometry.height) / 4)
+        {
+            return;
+        }
+    }
+    
+    /* Check if values have changed. */
+    for (i = 0; i < 12; i++)
+    {
+        if (data[i] != priv->struts[i])
+        {
+            update = TRUE;
+            priv->struts[i] = data[i];
+        }
+    }
+    
+    if (update)
+    {
+        gdk_error_trap_push ();
 
-    gdk_property_change (GTK_WIDGET (panel)->window,
-			 gdk_atom_intern ("_NET_WM_STRUT_PARTIAL", FALSE),
-			 gdk_atom_intern ("CARDINAL", FALSE), 32,
-			 GDK_PROP_MODE_REPLACE, (guchar *) & data, 12);
+        gdk_property_change (GTK_WIDGET (panel)->window,
+                             gdk_atom_intern ("_NET_WM_STRUT_PARTIAL", FALSE),
+                             gdk_atom_intern ("CARDINAL", FALSE), 32,
+                             GDK_PROP_MODE_REPLACE, (guchar *) & data, 12);
 
-    gdk_property_change (GTK_WIDGET (panel)->window,
-			 gdk_atom_intern ("_NET_WM_STRUT", FALSE),
-			 gdk_atom_intern ("CARDINAL", FALSE), 32,
-			 GDK_PROP_MODE_REPLACE, (guchar *) & data, 4);
+        gdk_property_change (GTK_WIDGET (panel)->window,
+                             gdk_atom_intern ("_NET_WM_STRUT", FALSE),
+                             gdk_atom_intern ("CARDINAL", FALSE), 32,
+                             GDK_PROP_MODE_REPLACE, (guchar *) & data, 4);
 
-    gdk_error_trap_pop ();
+        gdk_error_trap_pop ();
+    }
 }
 
 static gboolean
 unblock_struts (Panel *panel)
 {
-    PanelPrivate *      priv;
-    XfceMonitor *       xmon;
-    int                 x, y, w, h;
+    PanelPrivate *priv;
+    XfceMonitor  *xmon;
+    int           x, y, w, h;
 
     priv = PANEL (panel)->priv;
     priv->edit_mode = FALSE;
@@ -400,8 +427,8 @@
     XfceMonitor  *xmon;
 
     DBG ("old: %dx%d\tnew: %dx%d", 
-	 old ? old->width : 0, old ? old->height : 0,
-	 new->width, new->height );
+         old ? old->width : 0, old ? old->height : 0,
+         new->width, new->height );
 
     if (!GTK_WIDGET_VISIBLE (panel))
         return;
@@ -415,19 +442,6 @@
     priv->xoffset = *x - xmon->geometry.x;
     priv->yoffset = *y - xmon->geometry.y;
     
-    /* No change. We do need to calculate the position above, but we only need 
-     * to update the struts when the size actually changes. */
-    if (old && new->width == old->width && new->height == old->height)
-	    return;
-
-    /* Catch incorrect intermediate values when changing orientation:
-     * check if both height and width are larger than half the screen. */
-    if (new->width * 2 > xmon->geometry.width && 
-	new->height * 2 > xmon->geometry.height)
-    {
-	return;
-    }
-
     _set_struts (panel, xmon, *x, *y, new->width, new->height);
 }
 



More information about the Xfce4-commits mailing list