[maemo-commits] [maemo-commits] r8714 - in projects/haf/branches/maemo-af-desktop/hildon-desktop: . libhildondesktop libhildonwm

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Mon Dec 11 14:52:01 EET 2006
Author: jobi
Date: 2006-12-11 14:52:00 +0200 (Mon, 11 Dec 2006)
New Revision: 8714

Modified:
   projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/desktop-panel-window.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/desktop-panel-window.h
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm-types.h
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.c
   projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.h
Log:

2006-12-11  Johan Bilien  <johan.bilien at nokia.com>

	* libhildonwm/hd-wm.[ch]:
	  - added work-area-changed property to keep track of the
	    _NET_WORKAREA root window property
	* libhildondesktop/desktop-panel-window.c:
	  - add missing  _new implementation
	* libhildondesktop/hildon-home-window.c:
	  - use the new WM property to track thw work area changes



Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog	2006-12-11 11:52:21 UTC (rev 8713)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/ChangeLog	2006-12-11 12:52:00 UTC (rev 8714)
@@ -1,3 +1,13 @@
+2006-12-11  Johan Bilien  <johan.bilien at nokia.com>
+
+	* libhildonwm/hd-wm.[ch]:
+	  - added work-area-changed property to keep track of the
+	    _NET_WORKAREA root window property
+	* libhildondesktop/desktop-panel-window.c:
+	  - add missing  _new implementation
+	* libhildondesktop/hildon-home-window.c:
+	  - use the new WM property to track thw work area changes
+
 2006-12-08  Moises Martinez  <moises.martinzes at nokia.com>
 
 	* libhildondesktop/desktop-panel.c:

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/desktop-panel-window.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/desktop-panel-window.c	2006-12-11 11:52:21 UTC (rev 8713)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/desktop-panel-window.c	2006-12-11 12:52:00 UTC (rev 8714)
@@ -1062,3 +1062,11 @@
   window->priv->ms = ms;
   
 }
+
+GtkWidget *
+desktop_panel_window_new ()
+{
+  GtkWidget *window;
+  window = g_object_new (DESKTOP_TYPE_PANEL_WINDOW, NULL);
+  return window;
+}

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/desktop-panel-window.h
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/desktop-panel-window.h	2006-12-11 11:52:21 UTC (rev 8713)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/desktop-panel-window.h	2006-12-11 12:52:00 UTC (rev 8714)
@@ -86,7 +86,7 @@
 
 GType                desktop_panel_window_get_type       (void);
 
-DesktopPanelWindow*  desktop_panel_window_new            (void);
+GtkWidget         *  desktop_panel_window_new            (void);
 
 void                 set_multiscreen_handler             (DesktopPanelWindow *window, 
 							  DesktopMultiscreen *ms);

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.c	2006-12-11 11:52:21 UTC (rev 8713)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildondesktop/hildon-home-window.c	2006-12-11 12:52:00 UTC (rev 8714)
@@ -47,6 +47,8 @@
 #include <hildon-widgets/hildon-caption.h>
 #include <hildon-widgets/hildon-color-button.h>
 
+#include <libhildonwm/hd-wm.h>
+
 /*#include "background-manager.h"*/
 
 #include "hildon-home-l10n.h"
@@ -92,29 +94,35 @@
 {
 /*  BackgroundManager *bg_manager;*/
 
-  GtkWidget *align;
+  GtkWidget    *align;
   
-  GtkWidget *titlebar;
-  GtkWidget *applet_area;
-  GtkWidget *main_area;
+  GtkWidget    *titlebar;
+  GtkWidget    *applet_area;
+  GtkWidget    *main_area;
 
-  GtkWidget *layout_mode_banner;
-  guint      layout_mode_banner_to;
+  GtkWidget    *layout_mode_banner;
+  guint         layout_mode_banner_to;
 
-  guint is_dimmed : 1;
-  guint is_lowmem : 1;
-  guint is_inactive : 1;
+  GdkRectangle *work_area;
 
-  guint selecting_applets : 1;
+  guint         is_dimmed : 1;
+  guint         is_lowmem : 1;
+  guint         is_inactive : 1;
+
+  guint         selecting_applets : 1;
 };
 
 G_DEFINE_TYPE (HildonHomeWindow, hildon_home_window, HILDON_DESKTOP_TYPE_WINDOW);
 
+static void
+hildon_home_window_set_work_area (HildonHomeWindow *window,
+                                  GdkRectangle *workarea);
+
 enum
 {
   PROP_0,
 
-  PROP_OSSO_CONTEXT
+  PROP_WORK_AREA
 };
 
 static gboolean
@@ -675,29 +683,42 @@
 
 static void
 hildon_home_window_set_property (GObject      *gobject,
-				 guint         prop_id,
-				 const GValue *value,
-				 GParamSpec   *pspec)
+                                 guint         prop_id,
+                                 const GValue *value,
+                                 GParamSpec   *pspec)
 {
   switch (prop_id)
     {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
-      break;
+      case PROP_WORK_AREA:
+          hildon_home_window_set_work_area (HILDON_HOME_WINDOW (gobject),
+                                            (GdkRectangle *)
+                                              g_value_get_pointer (value));
+          break;
+      default:
+          G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+          break;
     }
 }
 
 static void
 hildon_home_window_get_property (GObject    *gobject,
-				 guint       prop_id,
-				 GValue     *value,
-				 GParamSpec *pspec)
+                                 guint       prop_id,
+                                 GValue     *value,
+                                 GParamSpec *pspec)
 {
+  HildonHomeWindowPrivate *priv;
+ 
+  g_return_if_fail (HILDON_IS_HOME_WINDOW (gobject));
+  priv = HILDON_HOME_WINDOW (gobject)->priv;
+
   switch (prop_id)
     {
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
-      break;
+      case PROP_WORK_AREA:
+          g_value_set_pointer (value, priv->work_area);
+          break;
+      default:
+          G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+          break;
     }
 }
 
@@ -725,8 +746,8 @@
 
 static GObject *
 hildon_home_window_constructor (GType                  gtype,
-				guint                  n_params,
-				GObjectConstructParam *params)
+                                guint                  n_params,
+                                GObjectConstructParam *params)
 {
   GObject *retval;
   HildonHomeWindow *window;
@@ -858,8 +879,9 @@
 static void
 hildon_home_window_class_init (HildonHomeWindowClass *klass)
 {
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+  GParamSpec       *pspec;
+  GObjectClass     *gobject_class = G_OBJECT_CLASS (klass);
+  GtkWidgetClass   *widget_class = GTK_WIDGET_CLASS (klass);
 
   gobject_class->constructor = hildon_home_window_constructor;
   gobject_class->set_property = hildon_home_window_set_property;
@@ -906,12 +928,14 @@
                 1,
                 G_TYPE_BOOLEAN);
   
+  pspec =  g_param_spec_pointer ("work-area",
+                                 "Work Area",
+                                 "Work area available for desktop",
+                                 (G_PARAM_READABLE | G_PARAM_CONSTRUCT));
+
   g_object_class_install_property (gobject_class,
-		                   PROP_OSSO_CONTEXT,
-				   g_param_spec_pointer ("osso-context",
-					   		 "Osso Context",
-							 "Osso context to be used by the window",
-							 (G_PARAM_READWRITE | G_PARAM_CONSTRUCT)));
+                                   PROP_WORK_AREA,
+                                   pspec);
   
   g_type_class_add_private (klass, sizeof (HildonHomeWindowPrivate));
 }
@@ -921,6 +945,7 @@
 {
   HildonHomeWindowPrivate *priv;
   GtkWidget *widget;
+  HDWM *wm;
 
   gtk_window_set_has_frame (GTK_WINDOW (window), FALSE);
 
@@ -931,9 +956,43 @@
 
 
   window->priv = priv = HILDON_HOME_WINDOW_GET_PRIVATE (window);
+  priv->is_dimmed = FALSE;
 
+  wm = hd_wm_get_singleton ();
+  g_signal_connect_swapped (wm, "work-area-changed",
+                            G_CALLBACK (hildon_home_window_set_work_area),
+                            window);
+}
 
-  priv->is_dimmed = FALSE;
+static void
+hildon_home_window_set_work_area (HildonHomeWindow *window,
+                                  GdkRectangle *work_area)
+{
+  HildonHomeWindowPrivate   *priv;
+  g_return_if_fail (HILDON_IS_HOME_WINDOW (window) && work_area);
+  priv = window->priv;
+
+  g_debug ("New work area: (%i,%i) %ix%i", work_area->x,
+                                           work_area->y,
+                                           work_area->width,
+                                           work_area->height);
+
+  if (!priv->work_area || priv->work_area->x != work_area->x
+                       || priv->work_area->y != work_area->y
+                       || priv->work_area->width != work_area->width
+                       || priv->work_area->height != work_area->height)
+    {
+      if (!priv->work_area)
+        priv->work_area = g_new (GdkRectangle, 1);
+
+      priv->work_area->x      = work_area->x;
+      priv->work_area->y      = work_area->y;
+      priv->work_area->width  = work_area->width;
+      priv->work_area->height = work_area->height;
+
+      gtk_widget_queue_resize (GTK_WIDGET (window));
+      g_object_notify (G_OBJECT (window), "work-area");
+    }
 }
 
 GtkWidget *

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm-types.h
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm-types.h	2006-12-11 11:52:21 UTC (rev 8713)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm-types.h	2006-12-11 12:52:00 UTC (rev 8714)
@@ -49,6 +49,7 @@
   HD_ATOM_NET_SHOWING_DESKTOP,
   HD_ATOM_NET_WM_PID,
   HD_ATOM_NET_ACTIVE_WINDOW,
+  HD_ATOM_NET_WORKAREA,
   HD_ATOM_NET_CLIENT_LIST,
   HD_ATOM_NET_WM_ICON,
   HD_ATOM_NET_WM_USER_TIME,

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.c
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.c	2006-12-11 11:52:21 UTC (rev 8713)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.c	2006-12-11 12:52:00 UTC (rev 8714)
@@ -73,6 +73,7 @@
   HDWM_ENTRY_INFO_ADDED_SIGNAL,
   HDWM_ENTRY_INFO_REMOVED_SIGNAL,
   HDWM_ENTRY_INFO_STACK_CHANGED_SIGNAL,
+  HDWM_WORK_AREA_CHANGED_SIGNAL,
   HDWM_SHOW_A_MENU_SIGNAL,
   HDWM_SIGNALS
 };
@@ -203,6 +204,7 @@
     "_NET_SHOWING_DESKTOP",
     "_NET_WM_PID",
     "_NET_ACTIVE_WINDOW",
+    "_NET_WORKAREA",
     "_NET_CLIENT_LIST",
     "_NET_WM_ICON",
     "_NET_WM_USER_TIME",
@@ -546,6 +548,17 @@
 		     NULL, NULL,
 		     g_cclosure_marshal_VOID__POINTER,
 		     G_TYPE_NONE, 1, G_TYPE_POINTER);
+  
+  hdwm_signals[HDWM_WORK_AREA_CHANGED_SIGNAL] = 
+	g_signal_new("work-area-changed",
+		     G_OBJECT_CLASS_TYPE(object_class),
+		     G_SIGNAL_RUN_FIRST,
+		     G_STRUCT_OFFSET (HDWMClass, work_area_changed),
+		     NULL, NULL,
+		     g_cclosure_marshal_VOID__POINTER,
+		     G_TYPE_NONE,
+             1,
+             G_TYPE_POINTER);
 
   hdwm_signals[HDWM_SHOW_A_MENU_SIGNAL] = 
 	g_signal_new("show_menu",
@@ -1790,6 +1803,34 @@
     else 
     if (prop->atom == hdwm->priv->atoms[HD_ATOM_MB_CURRENT_APP_WINDOW])
       hd_wm_process_mb_current_app_window (hdwm);
+    else
+    if (prop->atom == hdwm->priv->atoms[HD_ATOM_NET_WORKAREA])
+    {
+      int *work_area_data;
+
+      work_area_data =
+        hd_wm_util_get_win_prop_data_and_validate (
+                           GDK_WINDOW_XID (gdk_get_default_root_window()),
+						   hdwm->priv->atoms[HD_ATOM_NET_WORKAREA],
+						   XA_CARDINAL,
+						   32,
+						   4,
+						   NULL);
+
+      if (work_area_data)
+        {
+          GdkRectangle work_area;
+
+          work_area.width  = work_area_data[0];
+          work_area.height = work_area_data[1];
+          work_area.x      = work_area_data[2];
+          work_area.y      = work_area_data[3];
+
+          g_signal_emit_by_name (hdwm, "work-area-changed", &work_area);
+
+          XFree (work_area_data);
+        }
+    }
     else 
     if (prop->atom == hdwm->priv->atoms[HD_ATOM_NET_SHOWING_DESKTOP])
     {

Modified: projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.h
===================================================================
--- projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.h	2006-12-11 11:52:21 UTC (rev 8713)
+++ projects/haf/branches/maemo-af-desktop/hildon-desktop/libhildonwm/hd-wm.h	2006-12-11 12:52:00 UTC (rev 8714)
@@ -141,6 +141,7 @@
   void (*entry_info_removed) 	   (HDWM *hdwm,HDEntryInfo *info);
   void (*entry_info_changed) 	   (HDWM *hdwm,HDEntryInfo *info);
   void (*entry_info_stack_changed) (HDWM *hdwm,HDEntryInfo *info);
+  void (*work_area_changed)        (HDWM *hdwm,GdkRectangle *work_area);
   void (*show_menu)		   (HDWM *hdwm);
   /* */
 };


More information about the maemo-commits mailing list