[maemo-commits] [maemo-commits] r19437 - in projects/haf/trunk/libmatchbox2: . matchbox/core

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Tue Oct 13 17:49:46 EEST 2009
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.endrodi at 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.hamalainen at 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...

More information about the maemo-commits mailing list