Mostly workarounded MWM issue with panel resizing.
authorAndriy Grytsenko <andrej@rep.kiev.ua>
Sun, 20 Nov 2016 23:57:39 +0000 (01:57 +0200)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Mon, 21 Nov 2016 00:04:09 +0000 (02:04 +0200)
Only issue still is when panel edge changes top/bottom->left or left/right->top.
WMW continues to allocate size more than requested.

src/panel.c

index bff3667..38f5a49 100644 (file)
@@ -301,7 +301,7 @@ static void lxpanel_size_allocate(GtkWidget *widget, GtkAllocation *a)
     GdkRectangle rect;
     gint x, y;
 
-    /* some WM like mwm are too generous giving us space more that requested
+    /* some WM like mwm are too generous giving us space more than requested
        so let correct it right now, as much as we can */
     rect.x = a->x;
     rect.y = a->y;
@@ -309,12 +309,12 @@ static void lxpanel_size_allocate(GtkWidget *widget, GtkAllocation *a)
     rect.height = MAX(8, MIN(p->ch, a->height));
     _calculate_position(panel, &rect);
 
-    GTK_WIDGET_CLASS(lxpanel_parent_class)->size_allocate(widget, a);
+    GTK_WIDGET_CLASS(lxpanel_parent_class)->size_allocate(widget, &rect);
 
     if (p->widthtype == WIDTH_REQUEST)
-        p->width = (p->orientation == GTK_ORIENTATION_HORIZONTAL) ? a->width : a->height;
+        p->width = (p->orientation == GTK_ORIENTATION_HORIZONTAL) ? rect.width : rect.height;
     if (p->heighttype == HEIGHT_REQUEST)
-        p->height = (p->orientation == GTK_ORIENTATION_HORIZONTAL) ? a->height : a->width;
+        p->height = (p->orientation == GTK_ORIENTATION_HORIZONTAL) ? rect.height : rect.width;
 
     if (!gtk_widget_get_realized(widget))
         return;
@@ -324,10 +324,10 @@ static void lxpanel_size_allocate(GtkWidget *widget, GtkAllocation *a)
     p->ax = rect.x;
     p->ay = rect.y;
 
-    if (a->width != p->aw || a->height != p->ah || x != p->ax || y != p->ay)
+    if (rect.width != p->aw || rect.height != p->ah || x != p->ax || y != p->ay)
     {
-        p->aw = a->width;
-        p->ah = a->height;
+        p->aw = rect.width;
+        p->ah = rect.height;
         gtk_window_move(GTK_WINDOW(widget), p->ax, p->ay);
         /* SF bug #708: strut update does not work while in size allocation */
         if (!panel->priv->strut_update_queued)