Author: aendrodi
Date: 2009-10-13 17:49:22 +0300 (Tue, 13 Oct 2009)
New Revision: 19437

Modified:
   projects/haf/trunk/libmatchbox2/ChangeLog
   projects/haf/trunk/libmatchbox2/matchbox/core/mb-window-manager.c
   projects/haf/trunk/libmatchbox2/matchbox/core/mb-window-manager.h
   projects/haf/trunk/libmatchbox2/matchbox/core/mb-wm-client-base.c
Log:
        Don't set _NET_WORKAREA more often than necessary.
        Don't set  _MB_APP_WINDOW_LIST_STACKING at all.

        * matchbox/core/mb-window-manager.h:
          Added mb_wm_update_workarea().
        * matchbox/core/mb-window-manager.c (mb_wm_update_root_win_rectangles):
          Use it.
        * matchbox/core/mb-wm-client-base.c (mb_wm_client_base_display_sync):
          Likewise.


Modified: projects/haf/trunk/libmatchbox2/ChangeLog
===================================================================
--- projects/haf/trunk/libmatchbox2/ChangeLog   2009-10-13 14:24:26 UTC (rev 
19436)
+++ projects/haf/trunk/libmatchbox2/ChangeLog   2009-10-13 14:49:22 UTC (rev 
19437)
@@ -1,3 +1,15 @@
+2009-10-13  Adam Endrodi  <adam.endr...@blumsoft.eu>
+
+       Don't set _NET_WORKAREA more often than necessary.
+       Don't set  _MB_APP_WINDOW_LIST_STACKING at all.
+
+       * matchbox/core/mb-window-manager.h:
+         Added mb_wm_update_workarea().
+       * matchbox/core/mb-window-manager.c (mb_wm_update_root_win_rectangles):
+         Use it.
+       * matchbox/core/mb-wm-client-base.c (mb_wm_client_base_display_sync):
+         Likewise.
+
 2009-10-13  Kimmo Hämäläinen  <kimmo.hamalai...@nokia.com>
 
        Fixes: NB#124398 - Whole application should be closed with 'End

Modified: projects/haf/trunk/libmatchbox2/matchbox/core/mb-window-manager.c
===================================================================
--- projects/haf/trunk/libmatchbox2/matchbox/core/mb-window-manager.c   
2009-10-13 14:24:26 UTC (rev 19436)
+++ projects/haf/trunk/libmatchbox2/matchbox/core/mb-window-manager.c   
2009-10-13 14:49:22 UTC (rev 19437)
@@ -1145,7 +1145,6 @@
       list_size     = mb_wm_util_list_length (wm->clients);
 
       wins      = alloca (sizeof(Window) * list_size);
-      app_wins  = alloca (sizeof(Window) * list_size);
 
       if ((wm->flags & MBWindowManagerFlagDesktop) && wm->desktop)
        {
@@ -1158,32 +1157,11 @@
            wins[cnt++] = c->window->xwindow;
        }
 
-      /* The MB_APP_WINDOW_LIST_STACKING list is used to construct
-       * application switching menus -- we append anything we have
-       * in client list (some of which might be hidden).
-       * apps)
-       */
-      l = wm->clients;
-      while (l)
-       {
-         c = l->data;
-
-         if (MB_WM_IS_CLIENT_APP (c))
-           app_wins[app_win_cnt++] = c->window->xwindow;
-
-         l = l->next;
-       }
-
       XChangeProperty(wm->xdpy, root_win,
                      wm->atoms[MBWM_ATOM_NET_CLIENT_LIST_STACKING],
                      XA_WINDOW, 32, PropModeReplace,
                      (unsigned char *)wins, cnt);
 
-      XChangeProperty(wm->xdpy, root_win,
-                     wm->atoms[MBWM_ATOM_MB_APP_WINDOW_LIST_STACKING],
-                     XA_WINDOW, 32, PropModeReplace,
-                     (unsigned char *)app_wins, app_win_cnt);
-
       /* Update _NET_CLIENT_LIST but with 'age' order rather than stacking */
       cnt = 0;
       l = wm->clients;
@@ -1209,11 +1187,6 @@
                      NULL, 0);
 
       XChangeProperty(wm->xdpy, root_win,
-                     wm->atoms[MBWM_ATOM_MB_APP_WINDOW_LIST_STACKING],
-                     XA_WINDOW, 32, PropModeReplace,
-                     NULL, 0);
-
-      XChangeProperty(wm->xdpy, root_win,
                      wm->atoms[MBWM_ATOM_NET_CLIENT_LIST] ,
                      XA_WINDOW, 32, PropModeReplace,
                      NULL, 0);
@@ -1566,34 +1539,41 @@
      }
 }
 
+void
+mb_wm_update_workarea (MBWindowManager *wm, const MBGeometry *geo)
+{
+  static CARD32 val[4];
+
+  if (val[0] == geo->x && val[1] == geo->y
+      && val[2] == geo->width && val[3] == geo->height)
+    return;
+  val[0] = geo->x;
+  val[1] = geo->y;
+  val[2] = geo->width;
+  val[3] = geo->height;
+
+  XChangeProperty(wm->xdpy, wm->root_win->xwindow,
+                  wm->atoms[MBWM_ATOM_NET_WORKAREA],
+                 XA_CARDINAL, 32, PropModeReplace,
+                 (unsigned char *)val, 4);
+}
+
 static void
 mb_wm_update_root_win_rectangles (MBWindowManager *wm)
 {
   Display * dpy = wm->xdpy;
   Window    root = wm->root_win->xwindow;
   MBGeometry d_geom;
-  CARD32 val[4];
+  CARD32 val[2];
 
   mb_wm_get_desktop_geometry (wm, &d_geom);
+  mb_wm_update_workarea (wm, &d_geom);
 
-  val[0] = d_geom.x;
-  val[1] = d_geom.y;
-  val[2] = d_geom.width;
-  val[3] = d_geom.height;
-
-  /* FIXME -- handle decorated desktops */
-
-  XChangeProperty(dpy, root, wm->atoms[MBWM_ATOM_NET_WORKAREA],
-                 XA_CARDINAL, 32, PropModeReplace,
-                 (unsigned char *)val, 4);
-
-  val[2] = wm->xdpy_width;
-  val[3] = wm->xdpy_height;
-
+  val[0] = wm->xdpy_width;
+  val[1] = wm->xdpy_height;
   XChangeProperty(dpy, root, wm->atoms[MBWM_ATOM_NET_DESKTOP_GEOMETRY],
                  XA_CARDINAL, 32, PropModeReplace,
-                 (unsigned char *)&val[2], 2);
-
+                 (unsigned char *)val, 2);
 }
 
 int

Modified: projects/haf/trunk/libmatchbox2/matchbox/core/mb-window-manager.h
===================================================================
--- projects/haf/trunk/libmatchbox2/matchbox/core/mb-window-manager.h   
2009-10-13 14:24:26 UTC (rev 19436)
+++ projects/haf/trunk/libmatchbox2/matchbox/core/mb-window-manager.h   
2009-10-13 14:49:22 UTC (rev 19437)
@@ -238,6 +238,8 @@
 
 void __attribute__ ((visibility("hidden")))
 mb_wm_select_desktop (MBWindowManager *wm, int desktop);
+void __attribute__ ((visibility("hidden")))
+mb_wm_update_workarea (MBWindowManager *wm, const MBGeometry *geo);
 
 void
 mb_adjust_dialog_title_position (MBWindowManager *wm,

Modified: projects/haf/trunk/libmatchbox2/matchbox/core/mb-wm-client-base.c
===================================================================
--- projects/haf/trunk/libmatchbox2/matchbox/core/mb-wm-client-base.c   
2009-10-13 14:24:26 UTC (rev 19436)
+++ projects/haf/trunk/libmatchbox2/matchbox/core/mb-wm-client-base.c   
2009-10-13 14:49:22 UTC (rev 19437)
@@ -755,7 +755,8 @@
 
   if (mb_wm_client_needs_decor_sync (client))
     {
-      unsigned int area[4];
+      MBGeometry area;
+
       /*
        * First, we set the base shape mask, if needed, so that individual
        * decors can add themselves to it.
@@ -776,16 +777,12 @@
        }
 #endif
 
-      area[0] = client->window->geometry.x - client->frame_geometry.x;
-      area[1] = client->window->geometry.y - client->frame_geometry.y;
-      area[2] = client->window->geometry.width;
-      area[3] = client->window->geometry.height;
+      /* This is used to tell gtk where to place its precious comboboxes. */
+      area = client->window->geometry;
+      area.x -= client->frame_geometry.x;
+      area.y -= client->frame_geometry.y;
+      mb_wm_update_workarea (wm, &area);
 
-      XChangeProperty(wm->xdpy, wm->root_win->xwindow,  
-                     wm->atoms[MBWM_ATOM_NET_WORKAREA], 
-                     XA_CARDINAL, 32, PropModeReplace, 
-                     (unsigned char*)area, 4);
-
 #if 0
       /*
        * I don't think this part is doing any good...

_______________________________________________
maemo-commits mailing list
maemo-commits@maemo.org
https://lists.maemo.org/mailman/listinfo/maemo-commits

Reply via email to