Add a workaround for WM like MWM which does not properly resize down widgets of panel...
authorAndriy Grytsenko <andrej@rep.kiev.ua>
Fri, 18 Nov 2016 14:07:24 +0000 (16:07 +0200)
committerAndriy Grytsenko <andrej@rep.kiev.ua>
Fri, 18 Nov 2016 14:07:24 +0000 (16:07 +0200)
It still leaves artefacts on background but works much better now.

ChangeLog
src/panel.c

index d8ad40f..7d0075c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -75,6 +75,8 @@
     which will mess up tooltip indications, and may make rate/percentage
     calculations invalid.
 * Replaced Xclimsg() with Xclimsgx() to be screen aware with X11 message.
+* Added a workaround for WM like MWM which does not properly resize down
+    widgets of panel kind. It still leaves artefacts but is better now.
 
 0.8.2
 -------------------------------------------------------------------------
index 502b973..0e3cdb0 100644 (file)
@@ -257,6 +257,9 @@ static void lxpanel_size_request(GtkWidget *widget, GtkRequisition *req)
     _calculate_position(panel, &rect);
     req->width = rect.width;
     req->height = rect.height;
+    /* update data ahead of configuration request */
+    p->cw = rect.width;
+    p->ch = rect.height;
 }
 
 #if GTK_CHECK_VERSION(3, 0, 0)
@@ -298,6 +301,11 @@ 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
+       so let correct it right now, as much as we can */
+    a->width = MAX(8, MIN(p->cw, a->width));
+    a->height = MAX(8, MIN(p->ch, a->height));
+
     GTK_WIDGET_CLASS(lxpanel_parent_class)->size_allocate(widget, a);
 
     if (p->widthtype == WIDTH_REQUEST)
@@ -319,8 +327,7 @@ static void lxpanel_size_allocate(GtkWidget *widget, GtkAllocation *a)
     {
         p->aw = a->width;
         p->ah = a->height;
-        /* FIXME: should we "correct" requested sizes? */
-        gtk_window_move(GTK_WINDOW(widget), p->ax, p->ay);
+        gdk_window_move_resize(gtk_widget_get_window(widget), p->ax, p->ay, p->aw, p->ah);
         /* SF bug #708: strut update does not work while in size allocation */
         if (!panel->priv->strut_update_queued)
             panel->priv->strut_update_queued = g_idle_add_full(G_PRIORITY_HIGH,